[{"data":1,"prerenderedAt":173185},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-01-lerobot101-act-suan-fa-fu-xian\u002Fch6-shu-ju-lu-zhi-zhong-lu-yu-hui-fang":3,"wiki-doc-nav":250},{"id":4,"title":5,"body":6,"description":242,"extension":243,"meta":244,"navigation":245,"path":246,"seo":247,"stem":248,"__hash__":249},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":8,"toc":237},"minimark",[9,14,19,146,156,163,167,183,186,190,233],[10,11,13],"h1",{"id":12},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[15,16,18],"h2",{"id":17},"_61-录制示教数据","6.1 录制示教数据",[20,21,26],"pre",{"className":22,"code":23,"language":24,"meta":25,"style":25},"language-bash shiki shiki-themes github-light github-dark","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","bash","",[27,28,29,42,50,58,66,78,86,94,102,110,121,129,140],"code",{"__ignoreMap":25},[30,31,34,38],"span",{"class":32,"line":33},"line",1,[30,35,37],{"class":36},"sScJk","lerobot-record",[30,39,41],{"class":40},"sj4cs"," \\\n",[30,43,45,48],{"class":32,"line":44},2,[30,46,47],{"class":40},"  --robot.type=so101_follower",[30,49,41],{"class":40},[30,51,53,56],{"class":32,"line":52},3,[30,54,55],{"class":40},"  --robot.port=\u002Fdev\u002FttyACM1",[30,57,41],{"class":40},[30,59,61,64],{"class":32,"line":60},4,[30,62,63],{"class":40},"  --robot.id=my_awesome_follower_arm",[30,65,41],{"class":40},[30,67,69,72,76],{"class":32,"line":68},5,[30,70,71],{"class":40},"  --robot.cameras=",[30,73,75],{"class":74},"sZZnC","\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[30,77,41],{"class":40},[30,79,81,84],{"class":32,"line":80},6,[30,82,83],{"class":40},"  --teleop.type=so101_leader",[30,85,41],{"class":40},[30,87,89,92],{"class":32,"line":88},7,[30,90,91],{"class":40},"  --teleop.port=\u002Fdev\u002FttyACM0",[30,93,41],{"class":40},[30,95,97,100],{"class":32,"line":96},8,[30,98,99],{"class":40},"  --teleop.id=my_awesome_leader_arm",[30,101,41],{"class":40},[30,103,105,108],{"class":32,"line":104},9,[30,106,107],{"class":40},"  --display_data=true",[30,109,41],{"class":40},[30,111,113,116,119],{"class":32,"line":112},10,[30,114,115],{"class":40},"  --dataset.repo_id=",[30,117,118],{"class":74},"\"Embodied-AI-6\u002Fso101_test\"",[30,120,41],{"class":40},[30,122,124,127],{"class":32,"line":123},11,[30,125,126],{"class":40},"  --dataset.num_episodes=10",[30,128,41],{"class":40},[30,130,132,135,138],{"class":32,"line":131},12,[30,133,134],{"class":40},"  --dataset.single_task=",[30,136,137],{"class":74},"\"Grab the green cube\"",[30,139,41],{"class":40},[30,141,143],{"class":32,"line":142},13,[30,144,145],{"class":40},"  --resume=true\n",[147,148,149],"ul",{},[150,151,152,155],"li",{},[27,153,154],{},"--resume=true","：已有同一数据集时继续追加 episode。",[157,158,159],"p",{},[160,161],"img",{"alt":25,"src":162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[15,164,166],{"id":165},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[20,168,170],{"className":22,"code":169,"language":24,"meta":25,"style":25},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[27,171,172],{"__ignoreMap":25},[30,173,174,177,180],{"class":32,"line":33},[30,175,176],{"class":36},"rm",[30,178,179],{"class":40}," -rf",[30,181,182],{"class":74}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[157,184,185],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[15,187,189],{"id":188},"_63-回放指定-episode","6.3 回放指定 episode",[20,191,193],{"className":22,"code":192,"language":24,"meta":25,"style":25},"lerobot-replay \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.episode=0\n",[27,194,195,202,208,214,220,228],{"__ignoreMap":25},[30,196,197,200],{"class":32,"line":33},[30,198,199],{"class":36},"lerobot-replay",[30,201,41],{"class":40},[30,203,204,206],{"class":32,"line":44},[30,205,47],{"class":40},[30,207,41],{"class":40},[30,209,210,212],{"class":32,"line":52},[30,211,55],{"class":40},[30,213,41],{"class":40},[30,215,216,218],{"class":32,"line":60},[30,217,63],{"class":40},[30,219,41],{"class":40},[30,221,222,224,226],{"class":32,"line":68},[30,223,115],{"class":40},[30,225,118],{"class":74},[30,227,41],{"class":40},[30,229,230],{"class":32,"line":80},[30,231,232],{"class":40},"  --dataset.episode=0\n",[234,235,236],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":238},[239,240,241],{"id":17,"depth":44,"text":18},{"id":165,"depth":44,"text":166},{"id":188,"depth":44,"text":189},null,"md",{},true,"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":5,"description":242},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",[251,5344,6452,7872,10861,12212,13701,14790,23553,23565,24162,24188,24312,24553,24618,24636,24649,24696,24820,24984,25180,25360,25530,25666,25761,25798,25811,26121,26862,27570,27591,28611,30242,30393,30406,30418,30719,50531,50546,50563,50596,53468,76816,92961,92982,93095,93216,93986,94649,95010,95048,95154,95254,95297,95323,95384,97038,97139,97164,97655,98155,99235,99518,100260,100762,100774,102790,104454,105957,107655,109572,111491,113513,116983,117415,117878,118627,121571,121919,121941,122297,125604,125616,126019,126042,126189,126356,126561,126862,127419,128076,130007,131605,132254,133748,135179,136414,138108,139860,142270,142386,143321,143532,144417,145652,145880,145893,147048,149460,151828,155149,157626,159270,161047,163060,166112,168292,170819,173013],{"id":252,"title":253,"body":254,"description":25,"extension":243,"meta":5339,"navigation":245,"path":5340,"seo":5341,"stem":5342,"__hash__":5343},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":255,"toc":5311},[256,259,263,266,270,282,286,291,294,297,300,303,306,336,340,343,346,349,352,404,408,426,428,442,445,453,456,1319,1326,1342,1346,1432,1436,1442,1528,1532,1570,1574,1638,1642,1646,1652,1663,1667,1672,1676,1681,1685,1690,1694,1698,1703,1970,1975,2113,2118,2374,2377,2385,2389,2394,2497,2500,2806,2815,2916,2919,2922,2925,2928,3188,3193,3333,3336,3515,3518,3646,3649,3801,3805,3810,3813,3824,3832,3835,3942,3946,3950,3955,4005,4010,4015,4039,4044,4097,4100,4105,4282,4287,4572,4577,4974,4978,4983,5040,5045,5053,5056,5196,5199,5308],[10,257,253],{"id":258},"_1基础入门",[15,260,262],{"id":261},"_11注释","1.1注释",[157,264,265],{},"\u002F\u002F或者\u002F* *\u002F",[15,267,269],{"id":268},"_12命名","1.2命名",[271,272,273,276,279],"ol",{},[150,274,275],{},"字母数字下划线",[150,277,278],{},"开头必须是字母或_",[150,280,281],{},"不能使用关键词",[15,283,285],{"id":284},"_13数据类型","1.3数据类型",[287,288,290],"h3",{"id":289},"_131整形","1.3.1整形",[157,292,293],{},"short 短整形 2",[157,295,296],{},"int 整形 4",[157,298,299],{},"long 长整形 win4 linux32位4 linux64位8",[157,301,302],{},"long long 长长整形 8",[157,304,305],{},"利用sizeof可以求数据类型占用的内存空间大小",[20,307,311],{"className":308,"code":309,"language":310,"meta":25,"style":25},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[27,312,313,329],{"__ignoreMap":25},[30,314,315,319,323,326],{"class":32,"line":33},[30,316,318],{"class":317},"szBVR","sizeof",[30,320,322],{"class":321},"sVt8B","(",[30,324,325],{"class":317},"int",[30,327,328],{"class":321},")\n",[30,330,331,333],{"class":32,"line":44},[30,332,318],{"class":317},[30,334,335],{"class":321},"(num)\n",[287,337,339],{"id":338},"_132浮点型","1.3.2浮点型",[157,341,342],{},"float 单精度 4节 7位有效数字",[157,344,345],{},"double 双精度 8节 15-16有效数字",[157,347,348],{},"默认情况下，输出一个小数，会显示6位有效数字",[157,350,351],{},"注意点：",[20,353,355],{"className":308,"code":354,"language":310,"meta":25,"style":25},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[27,356,357,381],{"__ignoreMap":25},[30,358,359,362,365,368,371,374,377],{"class":32,"line":33},[30,360,361],{"class":317},"float",[30,363,364],{"class":321}," f1",[30,366,367],{"class":317},"=",[30,369,370],{"class":40},"3.14",[30,372,373],{"class":317},"f",[30,375,376],{"class":321},";",[30,378,380],{"class":379},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[30,382,383,385,388,390,393,396,399,401],{"class":32,"line":44},[30,384,361],{"class":317},[30,386,387],{"class":321}," f2",[30,389,367],{"class":317},[30,391,392],{"class":40},"3",[30,394,395],{"class":317},"e",[30,397,398],{"class":40},"2",[30,400,376],{"class":321},[30,402,403],{"class":379}," \u002F\u002F科学记数法\n",[287,405,407],{"id":406},"_133字符型","1.3.3字符型",[20,409,411],{"className":308,"code":410,"language":310,"meta":25,"style":25},"char ch='a'\n",[27,412,413],{"__ignoreMap":25},[30,414,415,418,421,423],{"class":32,"line":33},[30,416,417],{"class":317},"char",[30,419,420],{"class":321}," ch",[30,422,367],{"class":317},[30,424,425],{"class":74},"'a'\n",[157,427,351],{},[271,429,430,433,436,439],{},[150,431,432],{},"在显示字符型变量时，只能单引号，双引号x",[150,434,435],{},"单引号内只能一个字符，不能字符串",[150,437,438],{},"c和c++字符型变量只占用一个字符",[150,440,441],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[157,443,444],{},"ASCII码大致由以下两部分组成：",[271,446,447,450],{},[150,448,449],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[150,451,452],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[157,454,455],{},"ASCII码表格：",[457,458,459,503],"table",{},[460,461,462],"thead",{},[463,464,465,473,478,482,487,491,495,499],"tr",{},[466,467,468,472],"th",{},[469,470,471],"strong",{},"ASCII","值",[466,474,475],{},[469,476,477],{},"控制字符",[466,479,480,472],{},[469,481,471],{},[466,483,484],{},[469,485,486],{},"字符",[466,488,489,472],{},[469,490,471],{},[466,492,493],{},[469,494,486],{},[466,496,497,472],{},[469,498,471],{},[466,500,501],{},[469,502,486],{},[504,505,506,533,559,584,609,635,660,685,711,736,762,788,814,839,865,891,917,941,966,991,1016,1041,1066,1091,1116,1141,1166,1192,1217,1242,1267,1293],"tbody",{},[463,507,508,512,515,518,521,524,527,530],{},[509,510,511],"td",{},"0",[509,513,514],{},"NUT",[509,516,517],{},"32",[509,519,520],{},"(space)",[509,522,523],{},"64",[509,525,526],{},"@",[509,528,529],{},"96",[509,531,532],{},"、",[463,534,535,538,541,544,547,550,553,556],{},[509,536,537],{},"1",[509,539,540],{},"SOH",[509,542,543],{},"33",[509,545,546],{},"!",[509,548,549],{},"65",[509,551,552],{},"A",[509,554,555],{},"97",[509,557,558],{},"a",[463,560,561,563,566,569,572,575,578,581],{},[509,562,398],{},[509,564,565],{},"STX",[509,567,568],{},"34",[509,570,571],{},"\"",[509,573,574],{},"66",[509,576,577],{},"B",[509,579,580],{},"98",[509,582,583],{},"b",[463,585,586,588,591,594,597,600,603,606],{},[509,587,392],{},[509,589,590],{},"ETX",[509,592,593],{},"35",[509,595,596],{},"#",[509,598,599],{},"67",[509,601,602],{},"C",[509,604,605],{},"99",[509,607,608],{},"c",[463,610,611,614,617,620,623,626,629,632],{},[509,612,613],{},"4",[509,615,616],{},"EOT",[509,618,619],{},"36",[509,621,622],{},"$",[509,624,625],{},"68",[509,627,628],{},"D",[509,630,631],{},"100",[509,633,634],{},"d",[463,636,637,640,643,646,649,652,655,658],{},[509,638,639],{},"5",[509,641,642],{},"ENQ",[509,644,645],{},"37",[509,647,648],{},"%",[509,650,651],{},"69",[509,653,654],{},"E",[509,656,657],{},"101",[509,659,395],{},[463,661,662,665,668,671,674,677,680,683],{},[509,663,664],{},"6",[509,666,667],{},"ACK",[509,669,670],{},"38",[509,672,673],{},"&",[509,675,676],{},"70",[509,678,679],{},"F",[509,681,682],{},"102",[509,684,373],{},[463,686,687,690,693,696,699,702,705,708],{},[509,688,689],{},"7",[509,691,692],{},"BEL",[509,694,695],{},"39",[509,697,698],{},",",[509,700,701],{},"71",[509,703,704],{},"G",[509,706,707],{},"103",[509,709,710],{},"g",[463,712,713,716,719,722,724,727,730,733],{},[509,714,715],{},"8",[509,717,718],{},"BS",[509,720,721],{},"40",[509,723,322],{},[509,725,726],{},"72",[509,728,729],{},"H",[509,731,732],{},"104",[509,734,735],{},"h",[463,737,738,741,744,747,750,753,756,759],{},[509,739,740],{},"9",[509,742,743],{},"HT",[509,745,746],{},"41",[509,748,749],{},")",[509,751,752],{},"73",[509,754,755],{},"I",[509,757,758],{},"105",[509,760,761],{},"i",[463,763,764,767,770,773,776,779,782,785],{},[509,765,766],{},"10",[509,768,769],{},"LF",[509,771,772],{},"42",[509,774,775],{},"*",[509,777,778],{},"74",[509,780,781],{},"J",[509,783,784],{},"106",[509,786,787],{},"j",[463,789,790,793,796,799,802,805,808,811],{},[509,791,792],{},"11",[509,794,795],{},"VT",[509,797,798],{},"43",[509,800,801],{},"+",[509,803,804],{},"75",[509,806,807],{},"K",[509,809,810],{},"107",[509,812,813],{},"k",[463,815,816,819,822,825,827,830,833,836],{},[509,817,818],{},"12",[509,820,821],{},"FF",[509,823,824],{},"44",[509,826,698],{},[509,828,829],{},"76",[509,831,832],{},"L",[509,834,835],{},"108",[509,837,838],{},"l",[463,840,841,844,847,850,853,856,859,862],{},[509,842,843],{},"13",[509,845,846],{},"CR",[509,848,849],{},"45",[509,851,852],{},"-",[509,854,855],{},"77",[509,857,858],{},"M",[509,860,861],{},"109",[509,863,864],{},"m",[463,866,867,870,873,876,879,882,885,888],{},[509,868,869],{},"14",[509,871,872],{},"SO",[509,874,875],{},"46",[509,877,878],{},".",[509,880,881],{},"78",[509,883,884],{},"N",[509,886,887],{},"110",[509,889,890],{},"n",[463,892,893,896,899,902,905,908,911,914],{},[509,894,895],{},"15",[509,897,898],{},"SI",[509,900,901],{},"47",[509,903,904],{},"\u002F",[509,906,907],{},"79",[509,909,910],{},"O",[509,912,913],{},"111",[509,915,916],{},"o",[463,918,919,922,925,928,930,933,936,939],{},[509,920,921],{},"16",[509,923,924],{},"DLE",[509,926,927],{},"48",[509,929,511],{},[509,931,932],{},"80",[509,934,935],{},"P",[509,937,938],{},"112",[509,940,157],{},[463,942,943,946,949,952,954,957,960,963],{},[509,944,945],{},"17",[509,947,948],{},"DCI",[509,950,951],{},"49",[509,953,537],{},[509,955,956],{},"81",[509,958,959],{},"Q",[509,961,962],{},"113",[509,964,965],{},"q",[463,967,968,971,974,977,979,982,985,988],{},[509,969,970],{},"18",[509,972,973],{},"DC2",[509,975,976],{},"50",[509,978,398],{},[509,980,981],{},"82",[509,983,984],{},"R",[509,986,987],{},"114",[509,989,990],{},"r",[463,992,993,996,999,1002,1004,1007,1010,1013],{},[509,994,995],{},"19",[509,997,998],{},"DC3",[509,1000,1001],{},"51",[509,1003,392],{},[509,1005,1006],{},"83",[509,1008,1009],{},"S",[509,1011,1012],{},"115",[509,1014,1015],{},"s",[463,1017,1018,1021,1024,1027,1029,1032,1035,1038],{},[509,1019,1020],{},"20",[509,1022,1023],{},"DC4",[509,1025,1026],{},"52",[509,1028,613],{},[509,1030,1031],{},"84",[509,1033,1034],{},"T",[509,1036,1037],{},"116",[509,1039,1040],{},"t",[463,1042,1043,1046,1049,1052,1054,1057,1060,1063],{},[509,1044,1045],{},"21",[509,1047,1048],{},"NAK",[509,1050,1051],{},"53",[509,1053,639],{},[509,1055,1056],{},"85",[509,1058,1059],{},"U",[509,1061,1062],{},"117",[509,1064,1065],{},"u",[463,1067,1068,1071,1074,1077,1079,1082,1085,1088],{},[509,1069,1070],{},"22",[509,1072,1073],{},"SYN",[509,1075,1076],{},"54",[509,1078,664],{},[509,1080,1081],{},"86",[509,1083,1084],{},"V",[509,1086,1087],{},"118",[509,1089,1090],{},"v",[463,1092,1093,1096,1099,1102,1104,1107,1110,1113],{},[509,1094,1095],{},"23",[509,1097,1098],{},"TB",[509,1100,1101],{},"55",[509,1103,689],{},[509,1105,1106],{},"87",[509,1108,1109],{},"W",[509,1111,1112],{},"119",[509,1114,1115],{},"w",[463,1117,1118,1121,1124,1127,1129,1132,1135,1138],{},[509,1119,1120],{},"24",[509,1122,1123],{},"CAN",[509,1125,1126],{},"56",[509,1128,715],{},[509,1130,1131],{},"88",[509,1133,1134],{},"X",[509,1136,1137],{},"120",[509,1139,1140],{},"x",[463,1142,1143,1146,1149,1152,1154,1157,1160,1163],{},[509,1144,1145],{},"25",[509,1147,1148],{},"EM",[509,1150,1151],{},"57",[509,1153,740],{},[509,1155,1156],{},"89",[509,1158,1159],{},"Y",[509,1161,1162],{},"121",[509,1164,1165],{},"y",[463,1167,1168,1171,1174,1177,1180,1183,1186,1189],{},[509,1169,1170],{},"26",[509,1172,1173],{},"SUB",[509,1175,1176],{},"58",[509,1178,1179],{},":",[509,1181,1182],{},"90",[509,1184,1185],{},"Z",[509,1187,1188],{},"122",[509,1190,1191],{},"z",[463,1193,1194,1197,1200,1203,1205,1208,1211,1214],{},[509,1195,1196],{},"27",[509,1198,1199],{},"ESC",[509,1201,1202],{},"59",[509,1204,376],{},[509,1206,1207],{},"91",[509,1209,1210],{},"[",[509,1212,1213],{},"123",[509,1215,1216],{},"{",[463,1218,1219,1222,1225,1228,1231,1234,1236,1239],{},[509,1220,1221],{},"28",[509,1223,1224],{},"FS",[509,1226,1227],{},"60",[509,1229,1230],{},"\u003C",[509,1232,1233],{},"92",[509,1235,904],{},[509,1237,1238],{},"124",[509,1240,1241],{},"|",[463,1243,1244,1247,1250,1253,1255,1258,1261,1264],{},[509,1245,1246],{},"29",[509,1248,1249],{},"GS",[509,1251,1252],{},"61",[509,1254,367],{},[509,1256,1257],{},"93",[509,1259,1260],{},"]",[509,1262,1263],{},"125",[509,1265,1266],{},"}",[463,1268,1269,1272,1275,1278,1281,1284,1287,1290],{},[509,1270,1271],{},"30",[509,1273,1274],{},"RS",[509,1276,1277],{},"62",[509,1279,1280],{},">",[509,1282,1283],{},"94",[509,1285,1286],{},"^",[509,1288,1289],{},"126",[509,1291,1292],{},"`",[463,1294,1295,1298,1301,1304,1307,1310,1313,1316],{},[509,1296,1297],{},"31",[509,1299,1300],{},"US",[509,1302,1303],{},"63",[509,1305,1306],{},"?",[509,1308,1309],{},"95",[509,1311,1312],{},"_",[509,1314,1315],{},"127",[509,1317,1318],{},"DEL",[157,1320,1321,1322,1325],{},"ASCII 码大致由以下",[469,1323,1324],{},"两部分组","成：",[147,1327,1328,1335],{},[150,1329,1330,1331,1334],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[469,1332,1333],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[150,1336,1337,1338,1341],{},"ASCII 打印字符：数字 ",[469,1339,1340],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[287,1343,1345],{"id":1344},"_134转义字符","1.3.4转义字符",[20,1347,1349],{"className":308,"code":1348,"language":310,"meta":25,"style":25},"\u002F\u002F换行符\ncout \u003C\u003C\"hello world\u002Fn\"; \u002F\u002F就等同于如下：\ncout \u003C\u003C\"hello world\"\u003C\u003Cendl;\n\u002F\u002F反斜杠\ncout \u003C\u003C\"\u002F\u002F\"\u003C\u003Cendl;\n\u002F\u002F水平制表符\ncout \u003C\u003C\"aaaa\\thelloworld\"\u003C\u003Cendl; \u002F\u002F输出窗口时有对齐效果\n",[27,1350,1351,1356,1372,1386,1391,1404,1409],{"__ignoreMap":25},[30,1352,1353],{"class":32,"line":33},[30,1354,1355],{"class":379},"\u002F\u002F换行符\n",[30,1357,1358,1361,1364,1367,1369],{"class":32,"line":44},[30,1359,1360],{"class":321},"cout ",[30,1362,1363],{"class":317},"\u003C\u003C",[30,1365,1366],{"class":74},"\"hello world\u002Fn\"",[30,1368,376],{"class":321},[30,1370,1371],{"class":379}," \u002F\u002F就等同于如下：\n",[30,1373,1374,1376,1378,1381,1383],{"class":32,"line":52},[30,1375,1360],{"class":321},[30,1377,1363],{"class":317},[30,1379,1380],{"class":74},"\"hello world\"",[30,1382,1363],{"class":317},[30,1384,1385],{"class":321},"endl;\n",[30,1387,1388],{"class":32,"line":60},[30,1389,1390],{"class":379},"\u002F\u002F反斜杠\n",[30,1392,1393,1395,1397,1400,1402],{"class":32,"line":68},[30,1394,1360],{"class":321},[30,1396,1363],{"class":317},[30,1398,1399],{"class":74},"\"\u002F\u002F\"",[30,1401,1363],{"class":317},[30,1403,1385],{"class":321},[30,1405,1406],{"class":32,"line":80},[30,1407,1408],{"class":379},"\u002F\u002F水平制表符\n",[30,1410,1411,1413,1415,1418,1421,1424,1426,1429],{"class":32,"line":88},[30,1412,1360],{"class":321},[30,1414,1363],{"class":317},[30,1416,1417],{"class":74},"\"aaaa",[30,1419,1420],{"class":40},"\\t",[30,1422,1423],{"class":74},"helloworld\"",[30,1425,1363],{"class":317},[30,1427,1428],{"class":321},"endl;",[30,1430,1431],{"class":379}," \u002F\u002F输出窗口时有对齐效果\n",[287,1433,1435],{"id":1434},"_135字符串型","1.3.5字符串型",[157,1437,1438,1439,1441],{},"char 变量名",[30,1440],{},"=\"字符串值\"",[20,1443,1445],{"className":308,"code":1444,"language":310,"meta":25,"style":25},"\u002F\u002Fc风格字符串\n\u002F\u002F注意事项：\n\u002F\u002F1.char字符串名[]\n\u002F\u002F2.等号后面要用双引号，包含起来字符串\nchar str[]=\"hello world\";\ncout \u003C\u003Cstr\u003C\u003Cendl;\n\u002F\u002Fc++风格字符串\n\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\nstring str2=\"hello world\";\ncout \u003C\u003Cstr2\u003C\u003Cendl;\n",[27,1446,1447,1452,1457,1462,1467,1481,1494,1499,1504,1515],{"__ignoreMap":25},[30,1448,1449],{"class":32,"line":33},[30,1450,1451],{"class":379},"\u002F\u002Fc风格字符串\n",[30,1453,1454],{"class":32,"line":44},[30,1455,1456],{"class":379},"\u002F\u002F注意事项：\n",[30,1458,1459],{"class":32,"line":52},[30,1460,1461],{"class":379},"\u002F\u002F1.char字符串名[]\n",[30,1463,1464],{"class":32,"line":60},[30,1465,1466],{"class":379},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[30,1468,1469,1471,1474,1476,1478],{"class":32,"line":68},[30,1470,417],{"class":317},[30,1472,1473],{"class":321}," str[]",[30,1475,367],{"class":317},[30,1477,1380],{"class":74},[30,1479,1480],{"class":321},";\n",[30,1482,1483,1485,1487,1490,1492],{"class":32,"line":80},[30,1484,1360],{"class":321},[30,1486,1363],{"class":317},[30,1488,1489],{"class":321},"str",[30,1491,1363],{"class":317},[30,1493,1385],{"class":321},[30,1495,1496],{"class":32,"line":88},[30,1497,1498],{"class":379},"\u002F\u002Fc++风格字符串\n",[30,1500,1501],{"class":32,"line":96},[30,1502,1503],{"class":379},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[30,1505,1506,1509,1511,1513],{"class":32,"line":104},[30,1507,1508],{"class":321},"string str2",[30,1510,367],{"class":317},[30,1512,1380],{"class":74},[30,1514,1480],{"class":321},[30,1516,1517,1519,1521,1524,1526],{"class":32,"line":112},[30,1518,1360],{"class":321},[30,1520,1363],{"class":317},[30,1522,1523],{"class":321},"str2",[30,1525,1363],{"class":317},[30,1527,1385],{"class":321},[287,1529,1531],{"id":1530},"_136布尔类型bool","1.3.6布尔类型bool",[20,1533,1535],{"className":308,"code":1534,"language":310,"meta":25,"style":25},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[27,1536,1537,1552],{"__ignoreMap":25},[30,1538,1539,1542,1545,1547,1550],{"class":32,"line":33},[30,1540,1541],{"class":317},"bool",[30,1543,1544],{"class":321}," flag",[30,1546,367],{"class":317},[30,1548,1549],{"class":40},"true",[30,1551,1480],{"class":321},[30,1553,1554,1557,1560,1563,1565,1567],{"class":32,"line":44},[30,1555,1556],{"class":321},"cout",[30,1558,1559],{"class":317},"\u003C\u003Csizeof",[30,1561,1562],{"class":321},"(flag)",[30,1564,1363],{"class":317},[30,1566,1428],{"class":321},[30,1568,1569],{"class":379}," \u002F\u002F查看布尔占内存空间\n",[15,1571,1573],{"id":1572},"_14键盘输入cin","1.4键盘输入cin",[20,1575,1577],{"className":308,"code":1576,"language":310,"meta":25,"style":25},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[27,1578,1579,1592,1609,1620],{"__ignoreMap":25},[30,1580,1581,1583,1586,1588,1590],{"class":32,"line":33},[30,1582,325],{"class":317},[30,1584,1585],{"class":321}," a",[30,1587,367],{"class":317},[30,1589,511],{"class":40},[30,1591,1480],{"class":321},[30,1593,1594,1596,1598,1601,1603,1605,1607],{"class":32,"line":44},[30,1595,1556],{"class":321},[30,1597,1363],{"class":317},[30,1599,1600],{"class":74},"\"请给整型变量a赋值\"",[30,1602,1363],{"class":317},[30,1604,558],{"class":321},[30,1606,1363],{"class":317},[30,1608,1385],{"class":321},[30,1610,1611,1614,1617],{"class":32,"line":52},[30,1612,1613],{"class":321},"cin ",[30,1615,1616],{"class":317},">>",[30,1618,1619],{"class":321}," a;\n",[30,1621,1622,1624,1626,1629,1632,1634,1636],{"class":32,"line":60},[30,1623,1360],{"class":321},[30,1625,1363],{"class":317},[30,1627,1628],{"class":74}," \"整型变量a=\"",[30,1630,1631],{"class":317}," \u003C\u003C",[30,1633,558],{"class":321},[30,1635,1363],{"class":317},[30,1637,1385],{"class":321},[15,1639,1641],{"id":1640},"_15运算符","1.5运算符",[287,1643,1645],{"id":1644},"_151算术运算符","1.5.1算术运算符",[157,1647,1648,1651],{},[160,1649],{"alt":25,"src":1650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[271,1653,1654,1657,1660],{},[150,1655,1656],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[150,1658,1659],{},"两个小数不可以做取模运算",[150,1661,1662],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[287,1664,1666],{"id":1665},"_152赋值运算符","1.5.2赋值运算符",[157,1668,1669],{},[160,1670],{"alt":25,"src":1671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[287,1673,1675],{"id":1674},"_153比较运算符","1.5.3比较运算符",[157,1677,1678],{},[160,1679],{"alt":25,"src":1680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[287,1682,1684],{"id":1683},"_154逻辑运算符","1.5.4逻辑运算符",[157,1686,1687],{},[160,1688],{"alt":25,"src":1689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[15,1691,1693],{"id":1692},"_16程序流程结构","1.6程序流程结构",[287,1695,1697],{"id":1696},"_161选择结构","1.6.1选择结构",[271,1699,1700],{},[150,1701,1702],{},"if语句\n单行、多行、多条件if语句",[20,1704,1706],{"className":308,"code":1705,"language":310,"meta":25,"style":25},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\nif(score>600)\n{\n    cout\u003C\u003C'这是单行if语句'\u003C\u003Cendl;\n}\n\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\ncin >> score\nif(score\u003C=600)\n{\n    cout>>\"小于等于600\"\u003C\u003Cendl;\n}\nelse\n{\n    cout>>\"大于600\">>endl;\n}\n\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\nif (0\u003Cnum\u003C100)\n{\n    cout\u003C\u003C\"小于100\"\u003C\u003Cendl;\n}\nelse if (nmu>=100&&num\u003C200)\n{\n    cout\u003C\u003C\"不小于100且小于200\"\u003C\u003Cendl; \u002F\u002F可以无限else if,python中是elif：\n}\nelse\n{\n    cout\u003C\u003C\"不小于200\"\u003C\u003Cendl;\n}\n\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[27,1707,1708,1713,1728,1733,1747,1752,1757,1766,1779,1783,1796,1800,1805,1809,1823,1828,1834,1855,1860,1874,1879,1908,1913,1930,1935,1940,1945,1959,1964],{"__ignoreMap":25},[30,1709,1710],{"class":32,"line":33},[30,1711,1712],{"class":379},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[30,1714,1715,1718,1721,1723,1726],{"class":32,"line":44},[30,1716,1717],{"class":317},"if",[30,1719,1720],{"class":321},"(score",[30,1722,1280],{"class":317},[30,1724,1725],{"class":40},"600",[30,1727,328],{"class":321},[30,1729,1730],{"class":32,"line":52},[30,1731,1732],{"class":321},"{\n",[30,1734,1735,1738,1740,1743,1745],{"class":32,"line":60},[30,1736,1737],{"class":321},"    cout",[30,1739,1363],{"class":317},[30,1741,1742],{"class":74},"'这是单行if语句'",[30,1744,1363],{"class":317},[30,1746,1385],{"class":321},[30,1748,1749],{"class":32,"line":68},[30,1750,1751],{"class":321},"}\n",[30,1753,1754],{"class":32,"line":80},[30,1755,1756],{"class":379},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[30,1758,1759,1761,1763],{"class":32,"line":88},[30,1760,1613],{"class":321},[30,1762,1616],{"class":317},[30,1764,1765],{"class":321}," score\n",[30,1767,1768,1770,1772,1775,1777],{"class":32,"line":96},[30,1769,1717],{"class":317},[30,1771,1720],{"class":321},[30,1773,1774],{"class":317},"\u003C=",[30,1776,1725],{"class":40},[30,1778,328],{"class":321},[30,1780,1781],{"class":32,"line":104},[30,1782,1732],{"class":321},[30,1784,1785,1787,1789,1792,1794],{"class":32,"line":112},[30,1786,1737],{"class":321},[30,1788,1616],{"class":317},[30,1790,1791],{"class":74},"\"小于等于600\"",[30,1793,1363],{"class":317},[30,1795,1385],{"class":321},[30,1797,1798],{"class":32,"line":123},[30,1799,1751],{"class":321},[30,1801,1802],{"class":32,"line":131},[30,1803,1804],{"class":317},"else\n",[30,1806,1807],{"class":32,"line":142},[30,1808,1732],{"class":321},[30,1810,1812,1814,1816,1819,1821],{"class":32,"line":1811},14,[30,1813,1737],{"class":321},[30,1815,1616],{"class":317},[30,1817,1818],{"class":74},"\"大于600\"",[30,1820,1616],{"class":317},[30,1822,1385],{"class":321},[30,1824,1826],{"class":32,"line":1825},15,[30,1827,1751],{"class":321},[30,1829,1831],{"class":32,"line":1830},16,[30,1832,1833],{"class":379},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[30,1835,1837,1839,1842,1844,1846,1849,1851,1853],{"class":32,"line":1836},17,[30,1838,1717],{"class":317},[30,1840,1841],{"class":321}," (",[30,1843,511],{"class":40},[30,1845,1230],{"class":317},[30,1847,1848],{"class":321},"num",[30,1850,1230],{"class":317},[30,1852,631],{"class":40},[30,1854,328],{"class":321},[30,1856,1858],{"class":32,"line":1857},18,[30,1859,1732],{"class":321},[30,1861,1863,1865,1867,1870,1872],{"class":32,"line":1862},19,[30,1864,1737],{"class":321},[30,1866,1363],{"class":317},[30,1868,1869],{"class":74},"\"小于100\"",[30,1871,1363],{"class":317},[30,1873,1385],{"class":321},[30,1875,1877],{"class":32,"line":1876},20,[30,1878,1751],{"class":321},[30,1880,1882,1885,1888,1891,1894,1896,1899,1901,1903,1906],{"class":32,"line":1881},21,[30,1883,1884],{"class":317},"else",[30,1886,1887],{"class":317}," if",[30,1889,1890],{"class":321}," (nmu",[30,1892,1893],{"class":317},">=",[30,1895,631],{"class":40},[30,1897,1898],{"class":317},"&&",[30,1900,1848],{"class":321},[30,1902,1230],{"class":317},[30,1904,1905],{"class":40},"200",[30,1907,328],{"class":321},[30,1909,1911],{"class":32,"line":1910},22,[30,1912,1732],{"class":321},[30,1914,1916,1918,1920,1923,1925,1927],{"class":32,"line":1915},23,[30,1917,1737],{"class":321},[30,1919,1363],{"class":317},[30,1921,1922],{"class":74},"\"不小于100且小于200\"",[30,1924,1363],{"class":317},[30,1926,1428],{"class":321},[30,1928,1929],{"class":379}," \u002F\u002F可以无限else if,python中是elif：\n",[30,1931,1933],{"class":32,"line":1932},24,[30,1934,1751],{"class":321},[30,1936,1938],{"class":32,"line":1937},25,[30,1939,1804],{"class":317},[30,1941,1943],{"class":32,"line":1942},26,[30,1944,1732],{"class":321},[30,1946,1948,1950,1952,1955,1957],{"class":32,"line":1947},27,[30,1949,1737],{"class":321},[30,1951,1363],{"class":317},[30,1953,1954],{"class":74},"\"不小于200\"",[30,1956,1363],{"class":317},[30,1958,1385],{"class":321},[30,1960,1962],{"class":32,"line":1961},28,[30,1963,1751],{"class":321},[30,1965,1967],{"class":32,"line":1966},29,[30,1968,1969],{"class":379},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[271,1971,1972],{"start":44},[150,1973,1974],{},"三目运算符",[20,1976,1978],{"className":308,"code":1977,"language":310,"meta":25,"style":25},"\u002F\u002F创建三个变量a,b,c\n\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\nint a=20,b=10,c=0;\nc=(a>b?a:b)\ncout\u003C\u003C\"c=\"\u003C\u003Cc\u003C\u003Cendl;\n\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n(a>b?a:b)=100;\ncout\u003C\u003Ca\u003C\u003Cendl; \u002F\u002F100  a是大于b的，将100赋值给了a\ncout\u003C\u003Cb\u003C\u003Cendl; \u002F\u002F10   a>b,b还是原值\n",[27,1979,1980,1985,1990,2016,2038,2055,2060,2083,2098],{"__ignoreMap":25},[30,1981,1982],{"class":32,"line":33},[30,1983,1984],{"class":379},"\u002F\u002F创建三个变量a,b,c\n",[30,1986,1987],{"class":32,"line":44},[30,1988,1989],{"class":379},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[30,1991,1992,1994,1996,1998,2000,2003,2005,2007,2010,2012,2014],{"class":32,"line":52},[30,1993,325],{"class":317},[30,1995,1585],{"class":321},[30,1997,367],{"class":317},[30,1999,1020],{"class":40},[30,2001,2002],{"class":321},",b",[30,2004,367],{"class":317},[30,2006,766],{"class":40},[30,2008,2009],{"class":321},",c",[30,2011,367],{"class":317},[30,2013,511],{"class":40},[30,2015,1480],{"class":321},[30,2017,2018,2020,2022,2025,2027,2029,2031,2033,2035],{"class":32,"line":60},[30,2019,608],{"class":321},[30,2021,367],{"class":317},[30,2023,2024],{"class":321},"(a",[30,2026,1280],{"class":317},[30,2028,583],{"class":321},[30,2030,1306],{"class":317},[30,2032,558],{"class":321},[30,2034,1179],{"class":317},[30,2036,2037],{"class":321},"b)\n",[30,2039,2040,2042,2044,2047,2049,2051,2053],{"class":32,"line":68},[30,2041,1556],{"class":321},[30,2043,1363],{"class":317},[30,2045,2046],{"class":74},"\"c=\"",[30,2048,1363],{"class":317},[30,2050,608],{"class":321},[30,2052,1363],{"class":317},[30,2054,1385],{"class":321},[30,2056,2057],{"class":32,"line":80},[30,2058,2059],{"class":379},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[30,2061,2062,2064,2066,2068,2070,2072,2074,2077,2079,2081],{"class":32,"line":88},[30,2063,2024],{"class":321},[30,2065,1280],{"class":317},[30,2067,583],{"class":321},[30,2069,1306],{"class":317},[30,2071,558],{"class":321},[30,2073,1179],{"class":317},[30,2075,2076],{"class":321},"b)",[30,2078,367],{"class":317},[30,2080,631],{"class":40},[30,2082,1480],{"class":321},[30,2084,2085,2087,2089,2091,2093,2095],{"class":32,"line":96},[30,2086,1556],{"class":321},[30,2088,1363],{"class":317},[30,2090,558],{"class":321},[30,2092,1363],{"class":317},[30,2094,1428],{"class":321},[30,2096,2097],{"class":379}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[30,2099,2100,2102,2104,2106,2108,2110],{"class":32,"line":104},[30,2101,1556],{"class":321},[30,2103,1363],{"class":317},[30,2105,583],{"class":321},[30,2107,1363],{"class":317},[30,2109,1428],{"class":321},[30,2111,2112],{"class":379}," \u002F\u002F10   a>b,b还是原值\n",[271,2114,2115],{"start":52},[150,2116,2117],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[20,2119,2121],{"className":308,"code":2120,"language":310,"meta":25,"style":25},"\u002F\u002F案例-电影打分\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int score=0;\n    cout\u003C\u003C\"电影打分：\"\u003C\u003Cendl;\n    cin>>score;\n    switch(score)\n    {\n        case 10:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 9:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 8:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 7:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 6:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        case 5:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        default:cout\u003C\u003C\"烂片\"\u003C\u003Cendl;break;\n    }\n}\n",[27,2122,2123,2128,2136,2149,2159,2163,2177,2190,2200,2208,2213,2238,2259,2281,2302,2324,2345,2365,2370],{"__ignoreMap":25},[30,2124,2125],{"class":32,"line":33},[30,2126,2127],{"class":379},"\u002F\u002F案例-电影打分\n",[30,2129,2130,2133],{"class":32,"line":44},[30,2131,2132],{"class":317},"#include",[30,2134,2135],{"class":74},"\u003Ciostream>\n",[30,2137,2138,2141,2144,2147],{"class":32,"line":52},[30,2139,2140],{"class":317},"using",[30,2142,2143],{"class":317}," namespace",[30,2145,2146],{"class":36}," std",[30,2148,1480],{"class":321},[30,2150,2151,2153,2156],{"class":32,"line":60},[30,2152,325],{"class":317},[30,2154,2155],{"class":36}," main",[30,2157,2158],{"class":321},"()\n",[30,2160,2161],{"class":32,"line":68},[30,2162,1732],{"class":321},[30,2164,2165,2168,2171,2173,2175],{"class":32,"line":80},[30,2166,2167],{"class":317},"    int",[30,2169,2170],{"class":321}," score",[30,2172,367],{"class":317},[30,2174,511],{"class":40},[30,2176,1480],{"class":321},[30,2178,2179,2181,2183,2186,2188],{"class":32,"line":88},[30,2180,1737],{"class":321},[30,2182,1363],{"class":317},[30,2184,2185],{"class":74},"\"电影打分：\"",[30,2187,1363],{"class":317},[30,2189,1385],{"class":321},[30,2191,2192,2195,2197],{"class":32,"line":96},[30,2193,2194],{"class":321},"    cin",[30,2196,1616],{"class":317},[30,2198,2199],{"class":321},"score;\n",[30,2201,2202,2205],{"class":32,"line":104},[30,2203,2204],{"class":317},"    switch",[30,2206,2207],{"class":321},"(score)\n",[30,2209,2210],{"class":32,"line":112},[30,2211,2212],{"class":321},"    {\n",[30,2214,2215,2218,2221,2224,2226,2229,2231,2233,2236],{"class":32,"line":123},[30,2216,2217],{"class":317},"        case",[30,2219,2220],{"class":40}," 10",[30,2222,2223],{"class":321},":cout",[30,2225,1363],{"class":317},[30,2227,2228],{"class":74},"\"经典\"",[30,2230,1363],{"class":317},[30,2232,1428],{"class":321},[30,2234,2235],{"class":317},"break",[30,2237,1480],{"class":321},[30,2239,2240,2242,2245,2247,2249,2251,2253,2255,2257],{"class":32,"line":131},[30,2241,2217],{"class":317},[30,2243,2244],{"class":40}," 9",[30,2246,2223],{"class":321},[30,2248,1363],{"class":317},[30,2250,2228],{"class":74},[30,2252,1363],{"class":317},[30,2254,1428],{"class":321},[30,2256,2235],{"class":317},[30,2258,1480],{"class":321},[30,2260,2261,2263,2266,2268,2270,2273,2275,2277,2279],{"class":32,"line":142},[30,2262,2217],{"class":317},[30,2264,2265],{"class":40}," 8",[30,2267,2223],{"class":321},[30,2269,1363],{"class":317},[30,2271,2272],{"class":74},"\"非常好\"",[30,2274,1363],{"class":317},[30,2276,1428],{"class":321},[30,2278,2235],{"class":317},[30,2280,1480],{"class":321},[30,2282,2283,2285,2288,2290,2292,2294,2296,2298,2300],{"class":32,"line":1811},[30,2284,2217],{"class":317},[30,2286,2287],{"class":40}," 7",[30,2289,2223],{"class":321},[30,2291,1363],{"class":317},[30,2293,2272],{"class":74},[30,2295,1363],{"class":317},[30,2297,1428],{"class":321},[30,2299,2235],{"class":317},[30,2301,1480],{"class":321},[30,2303,2304,2306,2309,2311,2313,2316,2318,2320,2322],{"class":32,"line":1825},[30,2305,2217],{"class":317},[30,2307,2308],{"class":40}," 6",[30,2310,2223],{"class":321},[30,2312,1363],{"class":317},[30,2314,2315],{"class":74},"\"一般\"",[30,2317,1363],{"class":317},[30,2319,1428],{"class":321},[30,2321,2235],{"class":317},[30,2323,1480],{"class":321},[30,2325,2326,2328,2331,2333,2335,2337,2339,2341,2343],{"class":32,"line":1830},[30,2327,2217],{"class":317},[30,2329,2330],{"class":40}," 5",[30,2332,2223],{"class":321},[30,2334,1363],{"class":317},[30,2336,2315],{"class":74},[30,2338,1363],{"class":317},[30,2340,1428],{"class":321},[30,2342,2235],{"class":317},[30,2344,1480],{"class":321},[30,2346,2347,2350,2352,2354,2357,2359,2361,2363],{"class":32,"line":1836},[30,2348,2349],{"class":317},"        default",[30,2351,2223],{"class":321},[30,2353,1363],{"class":317},[30,2355,2356],{"class":74},"\"烂片\"",[30,2358,1363],{"class":317},[30,2360,1428],{"class":321},[30,2362,2235],{"class":317},[30,2364,1480],{"class":321},[30,2366,2367],{"class":32,"line":1857},[30,2368,2369],{"class":321},"    }\n",[30,2371,2372],{"class":32,"line":1862},[30,2373,1751],{"class":321},[157,2375,2376],{},"if和switch区别：",[147,2378,2379,2382],{},[150,2380,2381],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[150,2383,2384],{},"switch优点：结构清晰，执行效率高",[287,2386,2388],{"id":2387},"_162循环结构","1.6.2循环结构",[271,2390,2391],{},[150,2392,2393],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[20,2395,2397],{"className":308,"code":2396,"language":310,"meta":25,"style":25},"\u002F\u002F打印0-9数字\nint main()\n{\n    int num=0;\n    while(num\u003C10)\n    {\n       std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++;\n    }\n    system(\"pause\")\n}\n",[27,2398,2399,2404,2412,2416,2429,2443,2447,2467,2477,2481,2493],{"__ignoreMap":25},[30,2400,2401],{"class":32,"line":33},[30,2402,2403],{"class":379},"\u002F\u002F打印0-9数字\n",[30,2405,2406,2408,2410],{"class":32,"line":44},[30,2407,325],{"class":317},[30,2409,2155],{"class":36},[30,2411,2158],{"class":321},[30,2413,2414],{"class":32,"line":52},[30,2415,1732],{"class":321},[30,2417,2418,2420,2423,2425,2427],{"class":32,"line":60},[30,2419,2167],{"class":317},[30,2421,2422],{"class":321}," num",[30,2424,367],{"class":317},[30,2426,511],{"class":40},[30,2428,1480],{"class":321},[30,2430,2431,2434,2437,2439,2441],{"class":32,"line":68},[30,2432,2433],{"class":317},"    while",[30,2435,2436],{"class":321},"(num",[30,2438,1230],{"class":317},[30,2440,766],{"class":40},[30,2442,328],{"class":321},[30,2444,2445],{"class":32,"line":80},[30,2446,2212],{"class":321},[30,2448,2449,2452,2455,2457,2459,2461,2464],{"class":32,"line":88},[30,2450,2451],{"class":36},"       std",[30,2453,2454],{"class":321},"::cout",[30,2456,1363],{"class":317},[30,2458,1848],{"class":321},[30,2460,1363],{"class":317},[30,2462,2463],{"class":36},"std",[30,2465,2466],{"class":321},"::endl;\n",[30,2468,2469,2472,2475],{"class":32,"line":96},[30,2470,2471],{"class":321},"        num",[30,2473,2474],{"class":317},"++",[30,2476,1480],{"class":321},[30,2478,2479],{"class":32,"line":104},[30,2480,2369],{"class":321},[30,2482,2483,2486,2488,2491],{"class":32,"line":112},[30,2484,2485],{"class":36},"    system",[30,2487,322],{"class":321},[30,2489,2490],{"class":74},"\"pause\"",[30,2492,328],{"class":321},[30,2494,2495],{"class":32,"line":123},[30,2496,1751],{"class":321},[157,2498,2499],{},"注意：写好循环条件，避免死循环情况",[20,2501,2503],{"className":308,"code":2502,"language":310,"meta":25,"style":25},"\u002F\u002F循环结构-猜数字\n#include \u003Ciostream>\n#include \u003Cctime>\nusing namespace std;\nint main()\n{\n    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n    srand((unsigned int)time(NULL));\n\n    \u002F\u002F1.系统生成随机数\n    \u002F\u002Frand()%100 \u002F\u002F生成0-99的随机数\n    int num=rand()%100+1; \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n    \u002F\u002F2.玩家猜测\n    int val=0;\n    while (1)\n    {\n        cin>>val;\n        \u002F\u002F3.判断玩家猜测\n        if(val\u003Cnum) \n        {\n            cout\u003C\u003C\"猜小了！\"\u003C\u003Cendl;\n        }\n        else if (val>num)\n        {\n            cout\u003C\u003C\"猜大了！\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003C\"猜对了！\"\u003C\u003Cendl;\n            break;\n        }\n        \u002F\u002F猜对 退出游戏\n        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n    }\n}\n",[27,2504,2505,2510,2517,2524,2534,2542,2546,2551,2578,2583,2588,2596,2623,2628,2633,2646,2656,2660,2670,2675,2688,2693,2707,2712,2727,2731,2744,2748,2753,2757,2771,2779,2784,2790,2796,2801],{"__ignoreMap":25},[30,2506,2507],{"class":32,"line":33},[30,2508,2509],{"class":379},"\u002F\u002F循环结构-猜数字\n",[30,2511,2512,2514],{"class":32,"line":44},[30,2513,2132],{"class":317},[30,2515,2516],{"class":74}," \u003Ciostream>\n",[30,2518,2519,2521],{"class":32,"line":52},[30,2520,2132],{"class":317},[30,2522,2523],{"class":74}," \u003Cctime>\n",[30,2525,2526,2528,2530,2532],{"class":32,"line":60},[30,2527,2140],{"class":317},[30,2529,2143],{"class":317},[30,2531,2146],{"class":36},[30,2533,1480],{"class":321},[30,2535,2536,2538,2540],{"class":32,"line":68},[30,2537,325],{"class":317},[30,2539,2155],{"class":36},[30,2541,2158],{"class":321},[30,2543,2544],{"class":32,"line":80},[30,2545,1732],{"class":321},[30,2547,2548],{"class":32,"line":88},[30,2549,2550],{"class":379},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[30,2552,2553,2556,2559,2562,2565,2567,2570,2572,2575],{"class":32,"line":96},[30,2554,2555],{"class":36},"    srand",[30,2557,2558],{"class":321},"((",[30,2560,2561],{"class":317},"unsigned",[30,2563,2564],{"class":317}," int",[30,2566,749],{"class":321},[30,2568,2569],{"class":36},"time",[30,2571,322],{"class":321},[30,2573,2574],{"class":40},"NULL",[30,2576,2577],{"class":321},"));\n",[30,2579,2580],{"class":32,"line":104},[30,2581,2582],{"emptyLinePlaceholder":245},"\n",[30,2584,2585],{"class":32,"line":112},[30,2586,2587],{"class":379},"    \u002F\u002F1.系统生成随机数\n",[30,2589,2590,2593],{"class":32,"line":123},[30,2591,2592],{"class":379},"    \u002F\u002Frand()%100",[30,2594,2595],{"class":379}," \u002F\u002F生成0-99的随机数\n",[30,2597,2598,2600,2602,2604,2607,2610,2612,2614,2616,2618,2620],{"class":32,"line":131},[30,2599,2167],{"class":317},[30,2601,2422],{"class":321},[30,2603,367],{"class":317},[30,2605,2606],{"class":36},"rand",[30,2608,2609],{"class":321},"()",[30,2611,648],{"class":317},[30,2613,631],{"class":40},[30,2615,801],{"class":317},[30,2617,537],{"class":40},[30,2619,376],{"class":321},[30,2621,2622],{"class":379}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[30,2624,2625],{"class":32,"line":142},[30,2626,2627],{"class":379},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[30,2629,2630],{"class":32,"line":1811},[30,2631,2632],{"class":379},"    \u002F\u002F2.玩家猜测\n",[30,2634,2635,2637,2640,2642,2644],{"class":32,"line":1825},[30,2636,2167],{"class":317},[30,2638,2639],{"class":321}," val",[30,2641,367],{"class":317},[30,2643,511],{"class":40},[30,2645,1480],{"class":321},[30,2647,2648,2650,2652,2654],{"class":32,"line":1830},[30,2649,2433],{"class":317},[30,2651,1841],{"class":321},[30,2653,537],{"class":40},[30,2655,328],{"class":321},[30,2657,2658],{"class":32,"line":1836},[30,2659,2212],{"class":321},[30,2661,2662,2665,2667],{"class":32,"line":1857},[30,2663,2664],{"class":321},"        cin",[30,2666,1616],{"class":317},[30,2668,2669],{"class":321},"val;\n",[30,2671,2672],{"class":32,"line":1862},[30,2673,2674],{"class":379},"        \u002F\u002F3.判断玩家猜测\n",[30,2676,2677,2680,2683,2685],{"class":32,"line":1876},[30,2678,2679],{"class":317},"        if",[30,2681,2682],{"class":321},"(val",[30,2684,1230],{"class":317},[30,2686,2687],{"class":321},"num) \n",[30,2689,2690],{"class":32,"line":1881},[30,2691,2692],{"class":321},"        {\n",[30,2694,2695,2698,2700,2703,2705],{"class":32,"line":1910},[30,2696,2697],{"class":321},"            cout",[30,2699,1363],{"class":317},[30,2701,2702],{"class":74},"\"猜小了！\"",[30,2704,1363],{"class":317},[30,2706,1385],{"class":321},[30,2708,2709],{"class":32,"line":1915},[30,2710,2711],{"class":321},"        }\n",[30,2713,2714,2717,2719,2722,2724],{"class":32,"line":1932},[30,2715,2716],{"class":317},"        else",[30,2718,1887],{"class":317},[30,2720,2721],{"class":321}," (val",[30,2723,1280],{"class":317},[30,2725,2726],{"class":321},"num)\n",[30,2728,2729],{"class":32,"line":1937},[30,2730,2692],{"class":321},[30,2732,2733,2735,2737,2740,2742],{"class":32,"line":1942},[30,2734,2697],{"class":321},[30,2736,1363],{"class":317},[30,2738,2739],{"class":74},"\"猜大了！\"",[30,2741,1363],{"class":317},[30,2743,1385],{"class":321},[30,2745,2746],{"class":32,"line":1947},[30,2747,2711],{"class":321},[30,2749,2750],{"class":32,"line":1961},[30,2751,2752],{"class":317},"        else\n",[30,2754,2755],{"class":32,"line":1966},[30,2756,2692],{"class":321},[30,2758,2760,2762,2764,2767,2769],{"class":32,"line":2759},30,[30,2761,2697],{"class":321},[30,2763,1363],{"class":317},[30,2765,2766],{"class":74},"\"猜对了！\"",[30,2768,1363],{"class":317},[30,2770,1385],{"class":321},[30,2772,2774,2777],{"class":32,"line":2773},31,[30,2775,2776],{"class":317},"            break",[30,2778,1480],{"class":321},[30,2780,2782],{"class":32,"line":2781},32,[30,2783,2711],{"class":321},[30,2785,2787],{"class":32,"line":2786},33,[30,2788,2789],{"class":379},"        \u002F\u002F猜对 退出游戏\n",[30,2791,2793],{"class":32,"line":2792},34,[30,2794,2795],{"class":379},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[30,2797,2799],{"class":32,"line":2798},35,[30,2800,2369],{"class":321},[30,2802,2804],{"class":32,"line":2803},36,[30,2805,1751],{"class":321},[271,2807,2808],{"start":44},[150,2809,2810,2811,2814],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[469,2812,2813],{},"do...while会先执行一次循环语句","，在判断循环语句",[20,2816,2818],{"className":308,"code":2817,"language":310,"meta":25,"style":25},"\u002F\u002F在屏幕中输出0-9这10个数字\nint main()\n{\n    int num=0;\n    do \n    {\n        std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++\n    }\n    while(num\u003C10);\n    system(\"pause\");\n}\n",[27,2819,2820,2825,2833,2837,2849,2857,2861,2878,2885,2889,2902,2912],{"__ignoreMap":25},[30,2821,2822],{"class":32,"line":33},[30,2823,2824],{"class":379},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[30,2826,2827,2829,2831],{"class":32,"line":44},[30,2828,325],{"class":317},[30,2830,2155],{"class":36},[30,2832,2158],{"class":321},[30,2834,2835],{"class":32,"line":52},[30,2836,1732],{"class":321},[30,2838,2839,2841,2843,2845,2847],{"class":32,"line":60},[30,2840,2167],{"class":317},[30,2842,2422],{"class":321},[30,2844,367],{"class":317},[30,2846,511],{"class":40},[30,2848,1480],{"class":321},[30,2850,2851,2854],{"class":32,"line":68},[30,2852,2853],{"class":317},"    do",[30,2855,2856],{"class":321}," \n",[30,2858,2859],{"class":32,"line":80},[30,2860,2212],{"class":321},[30,2862,2863,2866,2868,2870,2872,2874,2876],{"class":32,"line":88},[30,2864,2865],{"class":36},"        std",[30,2867,2454],{"class":321},[30,2869,1363],{"class":317},[30,2871,1848],{"class":321},[30,2873,1363],{"class":317},[30,2875,2463],{"class":36},[30,2877,2466],{"class":321},[30,2879,2880,2882],{"class":32,"line":96},[30,2881,2471],{"class":321},[30,2883,2884],{"class":317},"++\n",[30,2886,2887],{"class":32,"line":104},[30,2888,2369],{"class":321},[30,2890,2891,2893,2895,2897,2899],{"class":32,"line":112},[30,2892,2433],{"class":317},[30,2894,2436],{"class":321},[30,2896,1230],{"class":317},[30,2898,766],{"class":40},[30,2900,2901],{"class":321},");\n",[30,2903,2904,2906,2908,2910],{"class":32,"line":123},[30,2905,2485],{"class":36},[30,2907,322],{"class":321},[30,2909,2490],{"class":74},[30,2911,2901],{"class":321},[30,2913,2914],{"class":32,"line":131},[30,2915,1751],{"class":321},[157,2917,2918],{},"案例-水仙花数",[157,2920,2921],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[157,2923,2924],{},"例如：1^3+5^3+3^3=153",[157,2926,2927],{},"请用do...while语句，求出所有3位数的水仙花数",[20,2929,2931],{"className":308,"code":2930,"language":310,"meta":25,"style":25},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F1.先打印所有三位数字\n    int num=100;\n    do \n    {\n        \u002F\u002F2.从所有三位数字中找到水仙花数\n        int a=0; \u002F\u002F个位\n        int b=0; \u002F\u002F十位\n        int c=0; \u002F\u002F百位\n        a=num%10;\n        b=num\u002F10%10;\n        c=num\u002F100;\n        if(a*a*a+b*b*b+c*c*c == num) \u002F\u002F如果是水仙花数，才打印\n        {\n            cout\u003C\u003Cnum\u003C\u003Cendl;\n        }\n        num++;\n    }\n    while (num \u003C 1000);\n}\n",[27,2932,2933,2939,2949,2957,2961,2966,2978,2984,2988,2993,3009,3025,3041,3056,3075,3090,3138,3142,3154,3158,3166,3170,3184],{"__ignoreMap":25},[30,2934,2935,2937],{"class":32,"line":33},[30,2936,2132],{"class":317},[30,2938,2516],{"class":74},[30,2940,2941,2943,2945,2947],{"class":32,"line":44},[30,2942,2140],{"class":317},[30,2944,2143],{"class":317},[30,2946,2146],{"class":36},[30,2948,1480],{"class":321},[30,2950,2951,2953,2955],{"class":32,"line":52},[30,2952,325],{"class":317},[30,2954,2155],{"class":36},[30,2956,2158],{"class":321},[30,2958,2959],{"class":32,"line":60},[30,2960,1732],{"class":321},[30,2962,2963],{"class":32,"line":68},[30,2964,2965],{"class":379},"    \u002F\u002F1.先打印所有三位数字\n",[30,2967,2968,2970,2972,2974,2976],{"class":32,"line":80},[30,2969,2167],{"class":317},[30,2971,2422],{"class":321},[30,2973,367],{"class":317},[30,2975,631],{"class":40},[30,2977,1480],{"class":321},[30,2979,2980,2982],{"class":32,"line":88},[30,2981,2853],{"class":317},[30,2983,2856],{"class":321},[30,2985,2986],{"class":32,"line":96},[30,2987,2212],{"class":321},[30,2989,2990],{"class":32,"line":104},[30,2991,2992],{"class":379},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[30,2994,2995,2998,3000,3002,3004,3006],{"class":32,"line":112},[30,2996,2997],{"class":317},"        int",[30,2999,1585],{"class":321},[30,3001,367],{"class":317},[30,3003,511],{"class":40},[30,3005,376],{"class":321},[30,3007,3008],{"class":379}," \u002F\u002F个位\n",[30,3010,3011,3013,3016,3018,3020,3022],{"class":32,"line":123},[30,3012,2997],{"class":317},[30,3014,3015],{"class":321}," b",[30,3017,367],{"class":317},[30,3019,511],{"class":40},[30,3021,376],{"class":321},[30,3023,3024],{"class":379}," \u002F\u002F十位\n",[30,3026,3027,3029,3032,3034,3036,3038],{"class":32,"line":131},[30,3028,2997],{"class":317},[30,3030,3031],{"class":321}," c",[30,3033,367],{"class":317},[30,3035,511],{"class":40},[30,3037,376],{"class":321},[30,3039,3040],{"class":379}," \u002F\u002F百位\n",[30,3042,3043,3046,3048,3050,3052,3054],{"class":32,"line":142},[30,3044,3045],{"class":321},"        a",[30,3047,367],{"class":317},[30,3049,1848],{"class":321},[30,3051,648],{"class":317},[30,3053,766],{"class":40},[30,3055,1480],{"class":321},[30,3057,3058,3061,3063,3065,3067,3069,3071,3073],{"class":32,"line":1811},[30,3059,3060],{"class":321},"        b",[30,3062,367],{"class":317},[30,3064,1848],{"class":321},[30,3066,904],{"class":317},[30,3068,766],{"class":40},[30,3070,648],{"class":317},[30,3072,766],{"class":40},[30,3074,1480],{"class":321},[30,3076,3077,3080,3082,3084,3086,3088],{"class":32,"line":1825},[30,3078,3079],{"class":321},"        c",[30,3081,367],{"class":317},[30,3083,1848],{"class":321},[30,3085,904],{"class":317},[30,3087,631],{"class":40},[30,3089,1480],{"class":321},[30,3091,3092,3094,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120,3122,3124,3126,3129,3132,3135],{"class":32,"line":1830},[30,3093,2679],{"class":317},[30,3095,2024],{"class":321},[30,3097,775],{"class":317},[30,3099,558],{"class":321},[30,3101,775],{"class":317},[30,3103,558],{"class":321},[30,3105,801],{"class":317},[30,3107,583],{"class":321},[30,3109,775],{"class":317},[30,3111,583],{"class":321},[30,3113,775],{"class":317},[30,3115,583],{"class":321},[30,3117,801],{"class":317},[30,3119,608],{"class":321},[30,3121,775],{"class":317},[30,3123,608],{"class":321},[30,3125,775],{"class":317},[30,3127,3128],{"class":321},"c ",[30,3130,3131],{"class":317},"==",[30,3133,3134],{"class":321}," num)",[30,3136,3137],{"class":379}," \u002F\u002F如果是水仙花数，才打印\n",[30,3139,3140],{"class":32,"line":1836},[30,3141,2692],{"class":321},[30,3143,3144,3146,3148,3150,3152],{"class":32,"line":1857},[30,3145,2697],{"class":321},[30,3147,1363],{"class":317},[30,3149,1848],{"class":321},[30,3151,1363],{"class":317},[30,3153,1385],{"class":321},[30,3155,3156],{"class":32,"line":1862},[30,3157,2711],{"class":321},[30,3159,3160,3162,3164],{"class":32,"line":1876},[30,3161,2471],{"class":321},[30,3163,2474],{"class":317},[30,3165,1480],{"class":321},[30,3167,3168],{"class":32,"line":1881},[30,3169,2369],{"class":321},[30,3171,3172,3174,3177,3179,3182],{"class":32,"line":1910},[30,3173,2433],{"class":317},[30,3175,3176],{"class":321}," (num ",[30,3178,1230],{"class":317},[30,3180,3181],{"class":40}," 1000",[30,3183,2901],{"class":321},[30,3185,3186],{"class":32,"line":1915},[30,3187,1751],{"class":321},[271,3189,3190],{"start":52},[150,3191,3192],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[20,3194,3196],{"className":308,"code":3195,"language":310,"meta":25,"style":25},"\u002F\u002F从数字0-9打印\nfor(int i=0;i\u003C10;i++)\n{\n    cout\u003C\u003Ci\u003C\u003Cendl;\n}\n\u002F\u002F上式可以进行拆分\nint i=0\nfor(;;;)\n{\n    if(i>=10)\n    {\n        break;\n    }\n    cout\u003C\u003Ci\u003C\u003Cendl;\n    i++;\n}\n",[27,3197,3198,3203,3232,3236,3248,3252,3257,3268,3275,3279,3293,3297,3304,3308,3320,3329],{"__ignoreMap":25},[30,3199,3200],{"class":32,"line":33},[30,3201,3202],{"class":379},"\u002F\u002F从数字0-9打印\n",[30,3204,3205,3208,3210,3212,3215,3217,3219,3222,3224,3226,3228,3230],{"class":32,"line":44},[30,3206,3207],{"class":317},"for",[30,3209,322],{"class":321},[30,3211,325],{"class":317},[30,3213,3214],{"class":321}," i",[30,3216,367],{"class":317},[30,3218,511],{"class":40},[30,3220,3221],{"class":321},";i",[30,3223,1230],{"class":317},[30,3225,766],{"class":40},[30,3227,3221],{"class":321},[30,3229,2474],{"class":317},[30,3231,328],{"class":321},[30,3233,3234],{"class":32,"line":52},[30,3235,1732],{"class":321},[30,3237,3238,3240,3242,3244,3246],{"class":32,"line":60},[30,3239,1737],{"class":321},[30,3241,1363],{"class":317},[30,3243,761],{"class":321},[30,3245,1363],{"class":317},[30,3247,1385],{"class":321},[30,3249,3250],{"class":32,"line":68},[30,3251,1751],{"class":321},[30,3253,3254],{"class":32,"line":80},[30,3255,3256],{"class":379},"\u002F\u002F上式可以进行拆分\n",[30,3258,3259,3261,3263,3265],{"class":32,"line":88},[30,3260,325],{"class":317},[30,3262,3214],{"class":321},[30,3264,367],{"class":317},[30,3266,3267],{"class":40},"0\n",[30,3269,3270,3272],{"class":32,"line":96},[30,3271,3207],{"class":317},[30,3273,3274],{"class":321},"(;;;)\n",[30,3276,3277],{"class":32,"line":104},[30,3278,1732],{"class":321},[30,3280,3281,3284,3287,3289,3291],{"class":32,"line":112},[30,3282,3283],{"class":317},"    if",[30,3285,3286],{"class":321},"(i",[30,3288,1893],{"class":317},[30,3290,766],{"class":40},[30,3292,328],{"class":321},[30,3294,3295],{"class":32,"line":123},[30,3296,2212],{"class":321},[30,3298,3299,3302],{"class":32,"line":131},[30,3300,3301],{"class":317},"        break",[30,3303,1480],{"class":321},[30,3305,3306],{"class":32,"line":142},[30,3307,2369],{"class":321},[30,3309,3310,3312,3314,3316,3318],{"class":32,"line":1811},[30,3311,1737],{"class":321},[30,3313,1363],{"class":317},[30,3315,761],{"class":321},[30,3317,1363],{"class":317},[30,3319,1385],{"class":321},[30,3321,3322,3325,3327],{"class":32,"line":1825},[30,3323,3324],{"class":321},"    i",[30,3326,2474],{"class":317},[30,3328,1480],{"class":321},[30,3330,3331],{"class":32,"line":1830},[30,3332,1751],{"class":321},[157,3334,3335],{},"小练习",[20,3337,3339],{"className":308,"code":3338,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F敲桌子案例\n    \u002F\u002F1.先输出1-100的数字\n    for(int i=1; i\u003C=100; i++)\n    {\n        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n        if(i%7==0 || i%10==7 || i\u002F10==7)\n        {\n            cout\u003C\u003C\"敲桌子\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003Ci\u003C\u003Cendl;\n        }\n    }\n}\n",[27,3340,3341,3347,3357,3365,3369,3374,3379,3407,3411,3416,3421,3462,3466,3479,3483,3487,3491,3503,3507,3511],{"__ignoreMap":25},[30,3342,3343,3345],{"class":32,"line":33},[30,3344,2132],{"class":317},[30,3346,2135],{"class":74},[30,3348,3349,3351,3353,3355],{"class":32,"line":44},[30,3350,2140],{"class":317},[30,3352,2143],{"class":317},[30,3354,2146],{"class":36},[30,3356,1480],{"class":321},[30,3358,3359,3361,3363],{"class":32,"line":52},[30,3360,325],{"class":317},[30,3362,2155],{"class":36},[30,3364,2158],{"class":321},[30,3366,3367],{"class":32,"line":60},[30,3368,1732],{"class":321},[30,3370,3371],{"class":32,"line":68},[30,3372,3373],{"class":379},"    \u002F\u002F敲桌子案例\n",[30,3375,3376],{"class":32,"line":80},[30,3377,3378],{"class":379},"    \u002F\u002F1.先输出1-100的数字\n",[30,3380,3381,3384,3386,3388,3390,3392,3394,3397,3399,3401,3403,3405],{"class":32,"line":88},[30,3382,3383],{"class":317},"    for",[30,3385,322],{"class":321},[30,3387,325],{"class":317},[30,3389,3214],{"class":321},[30,3391,367],{"class":317},[30,3393,537],{"class":40},[30,3395,3396],{"class":321},"; i",[30,3398,1774],{"class":317},[30,3400,631],{"class":40},[30,3402,3396],{"class":321},[30,3404,2474],{"class":317},[30,3406,328],{"class":321},[30,3408,3409],{"class":32,"line":96},[30,3410,2212],{"class":321},[30,3412,3413],{"class":32,"line":104},[30,3414,3415],{"class":379},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[30,3417,3418],{"class":32,"line":112},[30,3419,3420],{"class":379},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[30,3422,3423,3425,3427,3429,3431,3433,3435,3438,3440,3442,3444,3446,3448,3450,3452,3454,3456,3458,3460],{"class":32,"line":123},[30,3424,2679],{"class":317},[30,3426,3286],{"class":321},[30,3428,648],{"class":317},[30,3430,689],{"class":40},[30,3432,3131],{"class":317},[30,3434,511],{"class":40},[30,3436,3437],{"class":317}," ||",[30,3439,3214],{"class":321},[30,3441,648],{"class":317},[30,3443,766],{"class":40},[30,3445,3131],{"class":317},[30,3447,689],{"class":40},[30,3449,3437],{"class":317},[30,3451,3214],{"class":321},[30,3453,904],{"class":317},[30,3455,766],{"class":40},[30,3457,3131],{"class":317},[30,3459,689],{"class":40},[30,3461,328],{"class":321},[30,3463,3464],{"class":32,"line":131},[30,3465,2692],{"class":321},[30,3467,3468,3470,3472,3475,3477],{"class":32,"line":142},[30,3469,2697],{"class":321},[30,3471,1363],{"class":317},[30,3473,3474],{"class":74},"\"敲桌子\"",[30,3476,1363],{"class":317},[30,3478,1385],{"class":321},[30,3480,3481],{"class":32,"line":1811},[30,3482,2711],{"class":321},[30,3484,3485],{"class":32,"line":1825},[30,3486,2752],{"class":317},[30,3488,3489],{"class":32,"line":1830},[30,3490,2692],{"class":321},[30,3492,3493,3495,3497,3499,3501],{"class":32,"line":1836},[30,3494,2697],{"class":321},[30,3496,1363],{"class":317},[30,3498,761],{"class":321},[30,3500,1363],{"class":317},[30,3502,1385],{"class":321},[30,3504,3505],{"class":32,"line":1857},[30,3506,2711],{"class":321},[30,3508,3509],{"class":32,"line":1862},[30,3510,2369],{"class":321},[30,3512,3513],{"class":32,"line":1876},[30,3514,1751],{"class":321},[157,3516,3517],{},"嵌套实现星图",[20,3519,3521],{"className":308,"code":3520,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    for (int i=0;i\u003C10;i++)\n    {\n        for (int j=0;j\u003C10;j++)\n        {\n            cout\u003C\u003C\"*\";\n        }\n        cout\u003C\u003Cendl;\n    }\n}\n",[27,3522,3523,3529,3539,3547,3551,3577,3581,3610,3614,3625,3629,3638,3642],{"__ignoreMap":25},[30,3524,3525,3527],{"class":32,"line":33},[30,3526,2132],{"class":317},[30,3528,2135],{"class":74},[30,3530,3531,3533,3535,3537],{"class":32,"line":44},[30,3532,2140],{"class":317},[30,3534,2143],{"class":317},[30,3536,2146],{"class":36},[30,3538,1480],{"class":321},[30,3540,3541,3543,3545],{"class":32,"line":52},[30,3542,325],{"class":317},[30,3544,2155],{"class":36},[30,3546,2158],{"class":321},[30,3548,3549],{"class":32,"line":60},[30,3550,1732],{"class":321},[30,3552,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575],{"class":32,"line":68},[30,3554,3383],{"class":317},[30,3556,1841],{"class":321},[30,3558,325],{"class":317},[30,3560,3214],{"class":321},[30,3562,367],{"class":317},[30,3564,511],{"class":40},[30,3566,3221],{"class":321},[30,3568,1230],{"class":317},[30,3570,766],{"class":40},[30,3572,3221],{"class":321},[30,3574,2474],{"class":317},[30,3576,328],{"class":321},[30,3578,3579],{"class":32,"line":80},[30,3580,2212],{"class":321},[30,3582,3583,3586,3588,3590,3593,3595,3597,3600,3602,3604,3606,3608],{"class":32,"line":88},[30,3584,3585],{"class":317},"        for",[30,3587,1841],{"class":321},[30,3589,325],{"class":317},[30,3591,3592],{"class":321}," j",[30,3594,367],{"class":317},[30,3596,511],{"class":40},[30,3598,3599],{"class":321},";j",[30,3601,1230],{"class":317},[30,3603,766],{"class":40},[30,3605,3599],{"class":321},[30,3607,2474],{"class":317},[30,3609,328],{"class":321},[30,3611,3612],{"class":32,"line":96},[30,3613,2692],{"class":321},[30,3615,3616,3618,3620,3623],{"class":32,"line":104},[30,3617,2697],{"class":321},[30,3619,1363],{"class":317},[30,3621,3622],{"class":74},"\"*\"",[30,3624,1480],{"class":321},[30,3626,3627],{"class":32,"line":112},[30,3628,2711],{"class":321},[30,3630,3631,3634,3636],{"class":32,"line":123},[30,3632,3633],{"class":321},"        cout",[30,3635,1363],{"class":317},[30,3637,1385],{"class":321},[30,3639,3640],{"class":32,"line":131},[30,3641,2369],{"class":321},[30,3643,3644],{"class":32,"line":142},[30,3645,1751],{"class":321},[157,3647,3648],{},"乘法口诀表",[20,3650,3652],{"className":308,"code":3651,"language":310,"meta":25,"style":25},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    for(int i=1;i\u003C10;i++)\n    {\n        for(int j=1;j\u003C=i;j++)\n        {\n            cout\u003C\u003Cj\u003C\u003C\"*\"\u003C\u003Ci\u003C\u003C\"=\"\u003C\u003Ci*j\u003C\u003C'\\t';\n        }\n        cout\u003C\u003Cendl;\n    }\n} \n",[27,3653,3654,3660,3670,3678,3682,3708,3712,3737,3741,3781,3785,3793,3797],{"__ignoreMap":25},[30,3655,3656,3658],{"class":32,"line":33},[30,3657,2132],{"class":317},[30,3659,2516],{"class":74},[30,3661,3662,3664,3666,3668],{"class":32,"line":44},[30,3663,2140],{"class":317},[30,3665,2143],{"class":317},[30,3667,2146],{"class":36},[30,3669,1480],{"class":321},[30,3671,3672,3674,3676],{"class":32,"line":52},[30,3673,325],{"class":317},[30,3675,2155],{"class":36},[30,3677,2158],{"class":321},[30,3679,3680],{"class":32,"line":60},[30,3681,1732],{"class":321},[30,3683,3684,3686,3688,3690,3692,3694,3696,3698,3700,3702,3704,3706],{"class":32,"line":68},[30,3685,3383],{"class":317},[30,3687,322],{"class":321},[30,3689,325],{"class":317},[30,3691,3214],{"class":321},[30,3693,367],{"class":317},[30,3695,537],{"class":40},[30,3697,3221],{"class":321},[30,3699,1230],{"class":317},[30,3701,766],{"class":40},[30,3703,3221],{"class":321},[30,3705,2474],{"class":317},[30,3707,328],{"class":321},[30,3709,3710],{"class":32,"line":80},[30,3711,2212],{"class":321},[30,3713,3714,3716,3718,3720,3722,3724,3726,3728,3730,3733,3735],{"class":32,"line":88},[30,3715,3585],{"class":317},[30,3717,322],{"class":321},[30,3719,325],{"class":317},[30,3721,3592],{"class":321},[30,3723,367],{"class":317},[30,3725,537],{"class":40},[30,3727,3599],{"class":321},[30,3729,1774],{"class":317},[30,3731,3732],{"class":321},"i;j",[30,3734,2474],{"class":317},[30,3736,328],{"class":321},[30,3738,3739],{"class":32,"line":96},[30,3740,2692],{"class":321},[30,3742,3743,3745,3747,3749,3751,3753,3755,3757,3759,3762,3764,3766,3768,3770,3772,3775,3777,3779],{"class":32,"line":104},[30,3744,2697],{"class":321},[30,3746,1363],{"class":317},[30,3748,787],{"class":321},[30,3750,1363],{"class":317},[30,3752,3622],{"class":74},[30,3754,1363],{"class":317},[30,3756,761],{"class":321},[30,3758,1363],{"class":317},[30,3760,3761],{"class":74},"\"=\"",[30,3763,1363],{"class":317},[30,3765,761],{"class":321},[30,3767,775],{"class":317},[30,3769,787],{"class":321},[30,3771,1363],{"class":317},[30,3773,3774],{"class":74},"'",[30,3776,1420],{"class":40},[30,3778,3774],{"class":74},[30,3780,1480],{"class":321},[30,3782,3783],{"class":32,"line":112},[30,3784,2711],{"class":321},[30,3786,3787,3789,3791],{"class":32,"line":123},[30,3788,3633],{"class":321},[30,3790,1363],{"class":317},[30,3792,1385],{"class":321},[30,3794,3795],{"class":32,"line":131},[30,3796,2369],{"class":321},[30,3798,3799],{"class":32,"line":142},[30,3800,1751],{"class":321},[287,3802,3804],{"id":3803},"_163跳出语句","1.6.3跳出语句",[271,3806,3807],{},[150,3808,3809],{},"break语句\n作用：用于跳出选择结构或者循环结构",[157,3811,3812],{},"break使用时机：",[147,3814,3815,3818,3821],{},[150,3816,3817],{},"出现在switch条件语句中，作用是终止case并跳出switch",[150,3819,3820],{},"出现在循环结构中，作用是跳出当前的循环结构",[150,3822,3823],{},"出现在嵌套循环中，跳出最近的内层循环语句",[271,3825,3826,3829],{"start":44},[150,3827,3828],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[150,3830,3831],{},"goto语句\n语法：goto 标记;",[157,3833,3834],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[20,3836,3838],{"className":308,"code":3837,"language":310,"meta":25,"style":25},"int main()\n{\n    cout\u003C\u003C\"1\"\u003C\u003Cendl;\n    goto FLAG;\n    cout\u003C\u003C\"2\"\u003C\u003Cendl;\n    cout\u003C\u003C\"3\"\u003C\u003Cendl;\n    cout\u003C\u003C\"4\"\u003C\u003Cendl;\n    FLAG:\n    cout\u003C\u003C\"5\"\u003C\u003Cendl;\u002F\u002F跳过了2,3,4,直接到5\n}\n",[27,3839,3840,3848,3852,3865,3875,3888,3901,3914,3922,3938],{"__ignoreMap":25},[30,3841,3842,3844,3846],{"class":32,"line":33},[30,3843,325],{"class":317},[30,3845,2155],{"class":36},[30,3847,2158],{"class":321},[30,3849,3850],{"class":32,"line":44},[30,3851,1732],{"class":321},[30,3853,3854,3856,3858,3861,3863],{"class":32,"line":52},[30,3855,1737],{"class":321},[30,3857,1363],{"class":317},[30,3859,3860],{"class":74},"\"1\"",[30,3862,1363],{"class":317},[30,3864,1385],{"class":321},[30,3866,3867,3870,3873],{"class":32,"line":60},[30,3868,3869],{"class":317},"    goto",[30,3871,3872],{"class":36}," FLAG",[30,3874,1480],{"class":321},[30,3876,3877,3879,3881,3884,3886],{"class":32,"line":68},[30,3878,1737],{"class":321},[30,3880,1363],{"class":317},[30,3882,3883],{"class":74},"\"2\"",[30,3885,1363],{"class":317},[30,3887,1385],{"class":321},[30,3889,3890,3892,3894,3897,3899],{"class":32,"line":80},[30,3891,1737],{"class":321},[30,3893,1363],{"class":317},[30,3895,3896],{"class":74},"\"3\"",[30,3898,1363],{"class":317},[30,3900,1385],{"class":321},[30,3902,3903,3905,3907,3910,3912],{"class":32,"line":88},[30,3904,1737],{"class":321},[30,3906,1363],{"class":317},[30,3908,3909],{"class":74},"\"4\"",[30,3911,1363],{"class":317},[30,3913,1385],{"class":321},[30,3915,3916,3919],{"class":32,"line":96},[30,3917,3918],{"class":36},"    FLAG",[30,3920,3921],{"class":321},":\n",[30,3923,3924,3926,3928,3931,3933,3935],{"class":32,"line":104},[30,3925,1737],{"class":321},[30,3927,1363],{"class":317},[30,3929,3930],{"class":74},"\"5\"",[30,3932,1363],{"class":317},[30,3934,1428],{"class":321},[30,3936,3937],{"class":379},"\u002F\u002F跳过了2,3,4,直接到5\n",[30,3939,3940],{"class":32,"line":112},[30,3941,1751],{"class":321},[15,3943,3945],{"id":3944},"_17数组","1.7数组",[287,3947,3949],{"id":3948},"_171一维数组","1.7.1一维数组",[271,3951,3952],{},[150,3953,3954],{},"一维数组定义方式",[457,3956,3957,3967],{},[460,3958,3959],{},[463,3960,3961,3964],{},[466,3962,3963],{},"方式",[466,3965,3966],{},"注意事项",[504,3968,3969,3983,3993],{},[463,3970,3971,3977],{},[509,3972,3973,3974,376],{},"数据类型 数组名",[30,3975,3976],{},"数组长度",[509,3978,3979,3980,3982],{},"这种方式是先定义再arr",[30,3981,761],{},"赋值",[463,3984,3985,3990],{},[509,3986,3973,3987,3989],{},[30,3988,3976],{},"={值1,值2....};",[509,3991,3992],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[463,3994,3995,3999],{},[509,3996,3973,3997,3989],{},[30,3998],{},[509,4000,4001,4002,4004],{},"int arr",[30,4003],{},";这是不正确的，按照这样的方式定义必须有初始长度",[271,4006,4007],{"start":44},[150,4008,4009],{},"一维数组数组名\n用途：",[147,4011,4012],{},[150,4013,4014],{},"1.可以统计整个数组在内存中的长度：",[20,4016,4018],{"className":308,"code":4017,"language":310,"meta":25,"style":25},"sizeof(arr);\nsizeof(arr[0]);\n",[27,4019,4020,4027],{"__ignoreMap":25},[30,4021,4022,4024],{"class":32,"line":33},[30,4023,318],{"class":317},[30,4025,4026],{"class":321},"(arr);\n",[30,4028,4029,4031,4034,4036],{"class":32,"line":44},[30,4030,318],{"class":317},[30,4032,4033],{"class":321},"(arr[",[30,4035,511],{"class":40},[30,4037,4038],{"class":321},"]);\n",[147,4040,4041],{},[150,4042,4043],{},"2.可以获取数组在内存中的首地址:",[20,4045,4047],{"className":308,"code":4046,"language":310,"meta":25,"style":25},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[27,4048,4049,4054,4067,4072],{"__ignoreMap":25},[30,4050,4051],{"class":32,"line":33},[30,4052,4053],{"class":379},"\u002F\u002F查看16进制的首地址\n",[30,4055,4056,4058,4060,4063,4065],{"class":32,"line":44},[30,4057,1556],{"class":321},[30,4059,1363],{"class":317},[30,4061,4062],{"class":321},"arr",[30,4064,1363],{"class":317},[30,4066,1385],{"class":321},[30,4068,4069],{"class":32,"line":52},[30,4070,4071],{"class":379},"\u002F\u002F看10进制数\n",[30,4073,4074,4076,4078,4080,4082,4084,4086,4089,4091,4093,4095],{"class":32,"line":60},[30,4075,1556],{"class":321},[30,4077,1363],{"class":317},[30,4079,322],{"class":321},[30,4081,325],{"class":317},[30,4083,749],{"class":321},[30,4085,673],{"class":317},[30,4087,4088],{"class":321},"arr[",[30,4090,511],{"class":40},[30,4092,1260],{"class":321},[30,4094,1363],{"class":317},[30,4096,1385],{"class":321},[157,4098,4099],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[147,4101,4102],{},[150,4103,4104],{},"1️⃣五只小猪称体重",[20,4106,4108],{"className":308,"code":4107,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[5]={300,350,200,400,250};\n    int tmp=0;\n    for (int i=0;i\u003C5;i++)\n    {\n        if(tmp\u003Carr[i])\n        {\n            tmp=arr[i];\n        }\n    }\n    cout\u003C\u003Ctmp\u003C\u003Cendl;\n    return 0;\n}\n",[27,4109,4110,4116,4126,4134,4138,4178,4191,4217,4221,4233,4237,4247,4251,4255,4268,4278],{"__ignoreMap":25},[30,4111,4112,4114],{"class":32,"line":33},[30,4113,2132],{"class":317},[30,4115,2135],{"class":74},[30,4117,4118,4120,4122,4124],{"class":32,"line":44},[30,4119,2140],{"class":317},[30,4121,2143],{"class":317},[30,4123,2146],{"class":36},[30,4125,1480],{"class":321},[30,4127,4128,4130,4132],{"class":32,"line":52},[30,4129,325],{"class":317},[30,4131,2155],{"class":36},[30,4133,2158],{"class":321},[30,4135,4136],{"class":32,"line":60},[30,4137,1732],{"class":321},[30,4139,4140,4142,4145,4147,4149,4151,4153,4156,4158,4161,4163,4165,4167,4170,4172,4175],{"class":32,"line":68},[30,4141,2167],{"class":317},[30,4143,4144],{"class":321}," arr[",[30,4146,639],{"class":40},[30,4148,1260],{"class":321},[30,4150,367],{"class":317},[30,4152,1216],{"class":321},[30,4154,4155],{"class":40},"300",[30,4157,698],{"class":321},[30,4159,4160],{"class":40},"350",[30,4162,698],{"class":321},[30,4164,1905],{"class":40},[30,4166,698],{"class":321},[30,4168,4169],{"class":40},"400",[30,4171,698],{"class":321},[30,4173,4174],{"class":40},"250",[30,4176,4177],{"class":321},"};\n",[30,4179,4180,4182,4185,4187,4189],{"class":32,"line":80},[30,4181,2167],{"class":317},[30,4183,4184],{"class":321}," tmp",[30,4186,367],{"class":317},[30,4188,511],{"class":40},[30,4190,1480],{"class":321},[30,4192,4193,4195,4197,4199,4201,4203,4205,4207,4209,4211,4213,4215],{"class":32,"line":88},[30,4194,3383],{"class":317},[30,4196,1841],{"class":321},[30,4198,325],{"class":317},[30,4200,3214],{"class":321},[30,4202,367],{"class":317},[30,4204,511],{"class":40},[30,4206,3221],{"class":321},[30,4208,1230],{"class":317},[30,4210,639],{"class":40},[30,4212,3221],{"class":321},[30,4214,2474],{"class":317},[30,4216,328],{"class":321},[30,4218,4219],{"class":32,"line":96},[30,4220,2212],{"class":321},[30,4222,4223,4225,4228,4230],{"class":32,"line":104},[30,4224,2679],{"class":317},[30,4226,4227],{"class":321},"(tmp",[30,4229,1230],{"class":317},[30,4231,4232],{"class":321},"arr[i])\n",[30,4234,4235],{"class":32,"line":112},[30,4236,2692],{"class":321},[30,4238,4239,4242,4244],{"class":32,"line":123},[30,4240,4241],{"class":321},"            tmp",[30,4243,367],{"class":317},[30,4245,4246],{"class":321},"arr[i];\n",[30,4248,4249],{"class":32,"line":131},[30,4250,2711],{"class":321},[30,4252,4253],{"class":32,"line":142},[30,4254,2369],{"class":321},[30,4256,4257,4259,4261,4264,4266],{"class":32,"line":1811},[30,4258,1737],{"class":321},[30,4260,1363],{"class":317},[30,4262,4263],{"class":321},"tmp",[30,4265,1363],{"class":317},[30,4267,1385],{"class":321},[30,4269,4270,4273,4276],{"class":32,"line":1825},[30,4271,4272],{"class":317},"    return",[30,4274,4275],{"class":40}," 0",[30,4277,1480],{"class":321},[30,4279,4280],{"class":32,"line":1830},[30,4281,1751],{"class":321},[147,4283,4284],{},[150,4285,4286],{},"2️⃣数组元素逆置",[20,4288,4290],{"className":308,"code":4289,"language":310,"meta":25,"style":25},"\u002F\u002F元素逆置\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n   int arr[5]={1,2,3,4,5};\n   int start=0;\u002F\u002F起始下标\n   int end=sizeof(arr)\u002Fsizeof(arr[0])-1;\u002F\u002F结束下标\n   while (start\u003Cend)\n   {\n    \u002F\u002F实现元素互换代码\n    int temp=arr[start];\n    arr[start]=arr[end];\n    arr[end]=temp;\n    \u002F\u002F下标更新\n    start++;\n    end--;\n   }\n   \u002F\u002F输出逆置后的数组\n   for (int i=0;i\u003C5;i++)\n   {\n    cout\u003C\u003Carr[i]\u003C\u003C\" \";\n   }\n   system(\"pause\");\n   return 0;\n}\n",[27,4291,4292,4297,4303,4313,4321,4325,4360,4376,4408,4421,4426,4431,4443,4453,4463,4468,4477,4487,4492,4497,4524,4528,4544,4548,4559,4568],{"__ignoreMap":25},[30,4293,4294],{"class":32,"line":33},[30,4295,4296],{"class":379},"\u002F\u002F元素逆置\n",[30,4298,4299,4301],{"class":32,"line":44},[30,4300,2132],{"class":317},[30,4302,2135],{"class":74},[30,4304,4305,4307,4309,4311],{"class":32,"line":52},[30,4306,2140],{"class":317},[30,4308,2143],{"class":317},[30,4310,2146],{"class":36},[30,4312,1480],{"class":321},[30,4314,4315,4317,4319],{"class":32,"line":60},[30,4316,325],{"class":317},[30,4318,2155],{"class":36},[30,4320,2158],{"class":321},[30,4322,4323],{"class":32,"line":68},[30,4324,1732],{"class":321},[30,4326,4327,4330,4332,4334,4336,4338,4340,4342,4344,4346,4348,4350,4352,4354,4356,4358],{"class":32,"line":80},[30,4328,4329],{"class":317},"   int",[30,4331,4144],{"class":321},[30,4333,639],{"class":40},[30,4335,1260],{"class":321},[30,4337,367],{"class":317},[30,4339,1216],{"class":321},[30,4341,537],{"class":40},[30,4343,698],{"class":321},[30,4345,398],{"class":40},[30,4347,698],{"class":321},[30,4349,392],{"class":40},[30,4351,698],{"class":321},[30,4353,613],{"class":40},[30,4355,698],{"class":321},[30,4357,639],{"class":40},[30,4359,4177],{"class":321},[30,4361,4362,4364,4367,4369,4371,4373],{"class":32,"line":88},[30,4363,4329],{"class":317},[30,4365,4366],{"class":321}," start",[30,4368,367],{"class":317},[30,4370,511],{"class":40},[30,4372,376],{"class":321},[30,4374,4375],{"class":379},"\u002F\u002F起始下标\n",[30,4377,4378,4380,4383,4386,4389,4392,4394,4396,4399,4401,4403,4405],{"class":32,"line":96},[30,4379,4329],{"class":317},[30,4381,4382],{"class":321}," end",[30,4384,4385],{"class":317},"=sizeof",[30,4387,4388],{"class":321},"(arr)",[30,4390,4391],{"class":317},"\u002Fsizeof",[30,4393,4033],{"class":321},[30,4395,511],{"class":40},[30,4397,4398],{"class":321},"])",[30,4400,852],{"class":317},[30,4402,537],{"class":40},[30,4404,376],{"class":321},[30,4406,4407],{"class":379},"\u002F\u002F结束下标\n",[30,4409,4410,4413,4416,4418],{"class":32,"line":104},[30,4411,4412],{"class":317},"   while",[30,4414,4415],{"class":321}," (start",[30,4417,1230],{"class":317},[30,4419,4420],{"class":321},"end)\n",[30,4422,4423],{"class":32,"line":112},[30,4424,4425],{"class":321},"   {\n",[30,4427,4428],{"class":32,"line":123},[30,4429,4430],{"class":379},"    \u002F\u002F实现元素互换代码\n",[30,4432,4433,4435,4438,4440],{"class":32,"line":131},[30,4434,2167],{"class":317},[30,4436,4437],{"class":321}," temp",[30,4439,367],{"class":317},[30,4441,4442],{"class":321},"arr[start];\n",[30,4444,4445,4448,4450],{"class":32,"line":142},[30,4446,4447],{"class":321},"    arr[start]",[30,4449,367],{"class":317},[30,4451,4452],{"class":321},"arr[end];\n",[30,4454,4455,4458,4460],{"class":32,"line":1811},[30,4456,4457],{"class":321},"    arr[end]",[30,4459,367],{"class":317},[30,4461,4462],{"class":321},"temp;\n",[30,4464,4465],{"class":32,"line":1825},[30,4466,4467],{"class":379},"    \u002F\u002F下标更新\n",[30,4469,4470,4473,4475],{"class":32,"line":1830},[30,4471,4472],{"class":321},"    start",[30,4474,2474],{"class":317},[30,4476,1480],{"class":321},[30,4478,4479,4482,4485],{"class":32,"line":1836},[30,4480,4481],{"class":321},"    end",[30,4483,4484],{"class":317},"--",[30,4486,1480],{"class":321},[30,4488,4489],{"class":32,"line":1857},[30,4490,4491],{"class":321},"   }\n",[30,4493,4494],{"class":32,"line":1862},[30,4495,4496],{"class":379},"   \u002F\u002F输出逆置后的数组\n",[30,4498,4499,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522],{"class":32,"line":1876},[30,4500,4501],{"class":317},"   for",[30,4503,1841],{"class":321},[30,4505,325],{"class":317},[30,4507,3214],{"class":321},[30,4509,367],{"class":317},[30,4511,511],{"class":40},[30,4513,3221],{"class":321},[30,4515,1230],{"class":317},[30,4517,639],{"class":40},[30,4519,3221],{"class":321},[30,4521,2474],{"class":317},[30,4523,328],{"class":321},[30,4525,4526],{"class":32,"line":1881},[30,4527,4425],{"class":321},[30,4529,4530,4532,4534,4537,4539,4542],{"class":32,"line":1910},[30,4531,1737],{"class":321},[30,4533,1363],{"class":317},[30,4535,4536],{"class":321},"arr[i]",[30,4538,1363],{"class":317},[30,4540,4541],{"class":74},"\" \"",[30,4543,1480],{"class":321},[30,4545,4546],{"class":32,"line":1915},[30,4547,4491],{"class":321},[30,4549,4550,4553,4555,4557],{"class":32,"line":1932},[30,4551,4552],{"class":36},"   system",[30,4554,322],{"class":321},[30,4556,2490],{"class":74},[30,4558,2901],{"class":321},[30,4560,4561,4564,4566],{"class":32,"line":1937},[30,4562,4563],{"class":317},"   return",[30,4565,4275],{"class":40},[30,4567,1480],{"class":321},[30,4569,4570],{"class":32,"line":1942},[30,4571,1751],{"class":321},[147,4573,4574],{},[150,4575,4576],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[20,4578,4580],{"className":308,"code":4579,"language":310,"meta":25,"style":25},"\u002F\u002F冒泡排序,升序\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[9] = {4,2,8,0,5,7,1,3,9};\n    cout\u003C\u003C\"排序前：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    \u002F\u002F开始冒泡排序\n    \u002F\u002F总共排序轮数为 元素个数-1\n    for (int i=0;i\u003C9-1;i++)\n    {\n        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n        for (int j=0;j\u003C9-i-1;j++)\n        {\n            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n            if(arr[j]>arr[j+1])\n            {\n                int temp=arr[j];\n                arr[j]=arr[j+1];\n                arr[j+1]=temp;\n            }\n        }\n    }\n    cout\u003C\u003C\"排序后：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    return 0;\n}\n",[27,4581,4582,4587,4593,4603,4611,4615,4667,4680,4706,4710,4724,4728,4733,4738,4768,4772,4777,4811,4815,4820,4840,4845,4857,4873,4888,4893,4897,4901,4914,4940,4944,4958,4962,4970],{"__ignoreMap":25},[30,4583,4584],{"class":32,"line":33},[30,4585,4586],{"class":379},"\u002F\u002F冒泡排序,升序\n",[30,4588,4589,4591],{"class":32,"line":44},[30,4590,2132],{"class":317},[30,4592,2135],{"class":74},[30,4594,4595,4597,4599,4601],{"class":32,"line":52},[30,4596,2140],{"class":317},[30,4598,2143],{"class":317},[30,4600,2146],{"class":36},[30,4602,1480],{"class":321},[30,4604,4605,4607,4609],{"class":32,"line":60},[30,4606,325],{"class":317},[30,4608,2155],{"class":36},[30,4610,2158],{"class":321},[30,4612,4613],{"class":32,"line":68},[30,4614,1732],{"class":321},[30,4616,4617,4619,4621,4623,4626,4628,4631,4633,4635,4637,4639,4641,4643,4645,4647,4649,4651,4653,4655,4657,4659,4661,4663,4665],{"class":32,"line":80},[30,4618,2167],{"class":317},[30,4620,4144],{"class":321},[30,4622,740],{"class":40},[30,4624,4625],{"class":321},"] ",[30,4627,367],{"class":317},[30,4629,4630],{"class":321}," {",[30,4632,613],{"class":40},[30,4634,698],{"class":321},[30,4636,398],{"class":40},[30,4638,698],{"class":321},[30,4640,715],{"class":40},[30,4642,698],{"class":321},[30,4644,511],{"class":40},[30,4646,698],{"class":321},[30,4648,639],{"class":40},[30,4650,698],{"class":321},[30,4652,689],{"class":40},[30,4654,698],{"class":321},[30,4656,537],{"class":40},[30,4658,698],{"class":321},[30,4660,392],{"class":40},[30,4662,698],{"class":321},[30,4664,740],{"class":40},[30,4666,4177],{"class":321},[30,4668,4669,4671,4673,4676,4678],{"class":32,"line":88},[30,4670,1737],{"class":321},[30,4672,1363],{"class":317},[30,4674,4675],{"class":74},"\"排序前：\"",[30,4677,1363],{"class":317},[30,4679,1385],{"class":321},[30,4681,4682,4684,4686,4688,4690,4692,4694,4696,4698,4700,4702,4704],{"class":32,"line":96},[30,4683,3383],{"class":317},[30,4685,1841],{"class":321},[30,4687,325],{"class":317},[30,4689,3214],{"class":321},[30,4691,367],{"class":317},[30,4693,511],{"class":40},[30,4695,3221],{"class":321},[30,4697,1230],{"class":317},[30,4699,740],{"class":40},[30,4701,3221],{"class":321},[30,4703,2474],{"class":317},[30,4705,328],{"class":321},[30,4707,4708],{"class":32,"line":104},[30,4709,2212],{"class":321},[30,4711,4712,4714,4716,4718,4720,4722],{"class":32,"line":112},[30,4713,3633],{"class":321},[30,4715,1363],{"class":317},[30,4717,4536],{"class":321},[30,4719,1363],{"class":317},[30,4721,4541],{"class":74},[30,4723,1480],{"class":321},[30,4725,4726],{"class":32,"line":123},[30,4727,2369],{"class":321},[30,4729,4730],{"class":32,"line":131},[30,4731,4732],{"class":379},"    \u002F\u002F开始冒泡排序\n",[30,4734,4735],{"class":32,"line":142},[30,4736,4737],{"class":379},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[30,4739,4740,4742,4744,4746,4748,4750,4752,4754,4756,4758,4760,4762,4764,4766],{"class":32,"line":1811},[30,4741,3383],{"class":317},[30,4743,1841],{"class":321},[30,4745,325],{"class":317},[30,4747,3214],{"class":321},[30,4749,367],{"class":317},[30,4751,511],{"class":40},[30,4753,3221],{"class":321},[30,4755,1230],{"class":317},[30,4757,740],{"class":40},[30,4759,852],{"class":317},[30,4761,537],{"class":40},[30,4763,3221],{"class":321},[30,4765,2474],{"class":317},[30,4767,328],{"class":321},[30,4769,4770],{"class":32,"line":1825},[30,4771,2212],{"class":321},[30,4773,4774],{"class":32,"line":1830},[30,4775,4776],{"class":379},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[30,4778,4779,4781,4783,4785,4787,4789,4791,4793,4795,4797,4799,4801,4803,4805,4807,4809],{"class":32,"line":1836},[30,4780,3585],{"class":317},[30,4782,1841],{"class":321},[30,4784,325],{"class":317},[30,4786,3592],{"class":321},[30,4788,367],{"class":317},[30,4790,511],{"class":40},[30,4792,3599],{"class":321},[30,4794,1230],{"class":317},[30,4796,740],{"class":40},[30,4798,852],{"class":317},[30,4800,761],{"class":321},[30,4802,852],{"class":317},[30,4804,537],{"class":40},[30,4806,3599],{"class":321},[30,4808,2474],{"class":317},[30,4810,328],{"class":321},[30,4812,4813],{"class":32,"line":1857},[30,4814,2692],{"class":321},[30,4816,4817],{"class":32,"line":1862},[30,4818,4819],{"class":379},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[30,4821,4822,4825,4828,4830,4833,4835,4837],{"class":32,"line":1876},[30,4823,4824],{"class":317},"            if",[30,4826,4827],{"class":321},"(arr[j]",[30,4829,1280],{"class":317},[30,4831,4832],{"class":321},"arr[j",[30,4834,801],{"class":317},[30,4836,537],{"class":40},[30,4838,4839],{"class":321},"])\n",[30,4841,4842],{"class":32,"line":1881},[30,4843,4844],{"class":321},"            {\n",[30,4846,4847,4850,4852,4854],{"class":32,"line":1910},[30,4848,4849],{"class":317},"                int",[30,4851,4437],{"class":321},[30,4853,367],{"class":317},[30,4855,4856],{"class":321},"arr[j];\n",[30,4858,4859,4862,4864,4866,4868,4870],{"class":32,"line":1915},[30,4860,4861],{"class":321},"                arr[j]",[30,4863,367],{"class":317},[30,4865,4832],{"class":321},[30,4867,801],{"class":317},[30,4869,537],{"class":40},[30,4871,4872],{"class":321},"];\n",[30,4874,4875,4878,4880,4882,4884,4886],{"class":32,"line":1932},[30,4876,4877],{"class":321},"                arr[j",[30,4879,801],{"class":317},[30,4881,537],{"class":40},[30,4883,1260],{"class":321},[30,4885,367],{"class":317},[30,4887,4462],{"class":321},[30,4889,4890],{"class":32,"line":1937},[30,4891,4892],{"class":321},"            }\n",[30,4894,4895],{"class":32,"line":1942},[30,4896,2711],{"class":321},[30,4898,4899],{"class":32,"line":1947},[30,4900,2369],{"class":321},[30,4902,4903,4905,4907,4910,4912],{"class":32,"line":1961},[30,4904,1737],{"class":321},[30,4906,1363],{"class":317},[30,4908,4909],{"class":74},"\"排序后：\"",[30,4911,1363],{"class":317},[30,4913,1385],{"class":321},[30,4915,4916,4918,4920,4922,4924,4926,4928,4930,4932,4934,4936,4938],{"class":32,"line":1966},[30,4917,3383],{"class":317},[30,4919,1841],{"class":321},[30,4921,325],{"class":317},[30,4923,3214],{"class":321},[30,4925,367],{"class":317},[30,4927,511],{"class":40},[30,4929,3221],{"class":321},[30,4931,1230],{"class":317},[30,4933,740],{"class":40},[30,4935,3221],{"class":321},[30,4937,2474],{"class":317},[30,4939,328],{"class":321},[30,4941,4942],{"class":32,"line":2759},[30,4943,2212],{"class":321},[30,4945,4946,4948,4950,4952,4954,4956],{"class":32,"line":2773},[30,4947,3633],{"class":321},[30,4949,1363],{"class":317},[30,4951,4536],{"class":321},[30,4953,1363],{"class":317},[30,4955,4541],{"class":74},[30,4957,1480],{"class":321},[30,4959,4960],{"class":32,"line":2781},[30,4961,2369],{"class":321},[30,4963,4964,4966,4968],{"class":32,"line":2786},[30,4965,4272],{"class":317},[30,4967,4275],{"class":40},[30,4969,1480],{"class":321},[30,4971,4972],{"class":32,"line":2792},[30,4973,1751],{"class":321},[287,4975,4977],{"id":4976},"_172二维数组","1.7.2二维数组",[271,4979,4980],{},[150,4981,4982],{},"二维数组的四种定义方式",[457,4984,4985,4994],{},[460,4986,4987],{},[463,4988,4989,4992],{},[466,4990,4991],{},"序号",[466,4993,3963],{},[504,4995,4996,5006,5015,5024,5033],{},[463,4997,4998,5000],{},[509,4999,537],{},[509,5001,5002,5003,376],{},"数据类型 数组名[行数]",[30,5004,5005],{},"列数",[463,5007,5008,5010],{},[509,5009,398],{},[509,5011,5002,5012,5014],{},[30,5013,5005],{},"={ {数据1,数据2}，{数据3，数据4}... }",[463,5016,5017,5019],{},[509,5018,392],{},[509,5020,5002,5021,5023],{},[30,5022,5005],{},"={数据1,数据2,数据3...}",[463,5025,5026,5028],{},[509,5027,613],{},[509,5029,5030,5031,5023],{},"数据类型 数组名[]",[30,5032,5005],{},[463,5034,5035,5038],{},[509,5036,5037],{},"注意：不能只省略列数",[509,5039],{},[271,5041,5042],{"start":44},[150,5043,5044],{},"二维数组数组名",[147,5046,5047,5050],{},[150,5048,5049],{},"1.查看二维数组所占内存空间",[150,5051,5052],{},"2.获取二维数组首地址",[157,5054,5055],{},"已知二维数组，求二维数组的行数与列数",[20,5057,5059],{"className":308,"code":5058,"language":310,"meta":25,"style":25},"int main()\n{\n    int arr[2][3]=\n    {\n        {1,2,3},\n        {4,5,6}\n    };\n    cout\u003C\u003C\"二维数组的行数\"\u003C\u003Csizeof(arr)\u002Fsizeof(arr[0])\u003C\u003Cendl;\n    cout\u003C\u003C\"二维数组的列数\"\u003C\u003Csizeof(arr[0])\u002Fsizeof(arr[0][0])\u003C\u003Cendl;\n}\n",[27,5060,5061,5069,5073,5091,5095,5113,5129,5134,5159,5192],{"__ignoreMap":25},[30,5062,5063,5065,5067],{"class":32,"line":33},[30,5064,325],{"class":317},[30,5066,2155],{"class":36},[30,5068,2158],{"class":321},[30,5070,5071],{"class":32,"line":44},[30,5072,1732],{"class":321},[30,5074,5075,5077,5079,5081,5084,5086,5088],{"class":32,"line":52},[30,5076,2167],{"class":317},[30,5078,4144],{"class":321},[30,5080,398],{"class":40},[30,5082,5083],{"class":321},"][",[30,5085,392],{"class":40},[30,5087,1260],{"class":321},[30,5089,5090],{"class":317},"=\n",[30,5092,5093],{"class":32,"line":60},[30,5094,2212],{"class":321},[30,5096,5097,5100,5102,5104,5106,5108,5110],{"class":32,"line":68},[30,5098,5099],{"class":321},"        {",[30,5101,537],{"class":40},[30,5103,698],{"class":321},[30,5105,398],{"class":40},[30,5107,698],{"class":321},[30,5109,392],{"class":40},[30,5111,5112],{"class":321},"},\n",[30,5114,5115,5117,5119,5121,5123,5125,5127],{"class":32,"line":80},[30,5116,5099],{"class":321},[30,5118,613],{"class":40},[30,5120,698],{"class":321},[30,5122,639],{"class":40},[30,5124,698],{"class":321},[30,5126,664],{"class":40},[30,5128,1751],{"class":321},[30,5130,5131],{"class":32,"line":88},[30,5132,5133],{"class":321},"    };\n",[30,5135,5136,5138,5140,5143,5145,5147,5149,5151,5153,5155,5157],{"class":32,"line":96},[30,5137,1737],{"class":321},[30,5139,1363],{"class":317},[30,5141,5142],{"class":74},"\"二维数组的行数\"",[30,5144,1559],{"class":317},[30,5146,4388],{"class":321},[30,5148,4391],{"class":317},[30,5150,4033],{"class":321},[30,5152,511],{"class":40},[30,5154,4398],{"class":321},[30,5156,1363],{"class":317},[30,5158,1385],{"class":321},[30,5160,5161,5163,5165,5168,5170,5172,5174,5176,5178,5180,5182,5184,5186,5188,5190],{"class":32,"line":104},[30,5162,1737],{"class":321},[30,5164,1363],{"class":317},[30,5166,5167],{"class":74},"\"二维数组的列数\"",[30,5169,1559],{"class":317},[30,5171,4033],{"class":321},[30,5173,511],{"class":40},[30,5175,4398],{"class":321},[30,5177,4391],{"class":317},[30,5179,4033],{"class":321},[30,5181,511],{"class":40},[30,5183,5083],{"class":321},[30,5185,511],{"class":40},[30,5187,4398],{"class":321},[30,5189,1363],{"class":317},[30,5191,1385],{"class":321},[30,5193,5194],{"class":32,"line":112},[30,5195,1751],{"class":321},[157,5197,5198],{},"查看二维数组首地址",[20,5200,5202],{"className":308,"code":5201,"language":310,"meta":25,"style":25},"cout\u003C\u003C\"二维数组首地址：\"\u003C\u003Carr\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一行的首地址：\"\u003C\u003C(int)arr[0]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第二行的首地址：\"\u003C\u003C(int)arr[1]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一个元素的首地址:\"\u003C\u003C(int)&arr[0][0]\u003C\u003Cendl;\u002F\u002F对于数，要加取址符\n",[27,5203,5204,5221,5247,5272],{"__ignoreMap":25},[30,5205,5206,5208,5210,5213,5215,5217,5219],{"class":32,"line":33},[30,5207,1556],{"class":321},[30,5209,1363],{"class":317},[30,5211,5212],{"class":74},"\"二维数组首地址：\"",[30,5214,1363],{"class":317},[30,5216,4062],{"class":321},[30,5218,1363],{"class":317},[30,5220,1385],{"class":321},[30,5222,5223,5225,5227,5230,5232,5234,5236,5239,5241,5243,5245],{"class":32,"line":44},[30,5224,1556],{"class":321},[30,5226,1363],{"class":317},[30,5228,5229],{"class":74},"\"二维数组第一行的首地址：\"",[30,5231,1363],{"class":317},[30,5233,322],{"class":321},[30,5235,325],{"class":317},[30,5237,5238],{"class":321},")arr[",[30,5240,511],{"class":40},[30,5242,1260],{"class":321},[30,5244,1363],{"class":317},[30,5246,1385],{"class":321},[30,5248,5249,5251,5253,5256,5258,5260,5262,5264,5266,5268,5270],{"class":32,"line":52},[30,5250,1556],{"class":321},[30,5252,1363],{"class":317},[30,5254,5255],{"class":74},"\"二维数组第二行的首地址：\"",[30,5257,1363],{"class":317},[30,5259,322],{"class":321},[30,5261,325],{"class":317},[30,5263,5238],{"class":321},[30,5265,537],{"class":40},[30,5267,1260],{"class":321},[30,5269,1363],{"class":317},[30,5271,1385],{"class":321},[30,5273,5274,5276,5278,5281,5283,5285,5287,5289,5291,5293,5295,5297,5299,5301,5303,5305],{"class":32,"line":60},[30,5275,1556],{"class":321},[30,5277,1363],{"class":317},[30,5279,5280],{"class":74},"\"二维数组第一个元素的首地址:\"",[30,5282,1363],{"class":317},[30,5284,322],{"class":321},[30,5286,325],{"class":317},[30,5288,749],{"class":321},[30,5290,673],{"class":317},[30,5292,4088],{"class":321},[30,5294,511],{"class":40},[30,5296,5083],{"class":321},[30,5298,511],{"class":40},[30,5300,1260],{"class":321},[30,5302,1363],{"class":317},[30,5304,1428],{"class":321},[30,5306,5307],{"class":379},"\u002F\u002F对于数，要加取址符\n",[234,5309,5310],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":25,"searchDepth":44,"depth":44,"links":5312},[5313,5314,5315,5323,5324,5330,5335],{"id":261,"depth":44,"text":262},{"id":268,"depth":44,"text":269},{"id":284,"depth":44,"text":285,"children":5316},[5317,5318,5319,5320,5321,5322],{"id":289,"depth":52,"text":290},{"id":338,"depth":52,"text":339},{"id":406,"depth":52,"text":407},{"id":1344,"depth":52,"text":1345},{"id":1434,"depth":52,"text":1435},{"id":1530,"depth":52,"text":1531},{"id":1572,"depth":44,"text":1573},{"id":1640,"depth":44,"text":1641,"children":5325},[5326,5327,5328,5329],{"id":1644,"depth":52,"text":1645},{"id":1665,"depth":52,"text":1666},{"id":1674,"depth":52,"text":1675},{"id":1683,"depth":52,"text":1684},{"id":1692,"depth":44,"text":1693,"children":5331},[5332,5333,5334],{"id":1696,"depth":52,"text":1697},{"id":2387,"depth":52,"text":2388},{"id":3803,"depth":52,"text":3804},{"id":3944,"depth":44,"text":3945,"children":5336},[5337,5338],{"id":3948,"depth":52,"text":3949},{"id":4976,"depth":52,"text":4977},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":253,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5345,"title":5346,"body":5347,"description":25,"extension":243,"meta":6447,"navigation":245,"path":6448,"seo":6449,"stem":6450,"__hash__":6451},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5348,"toc":6439},[5349,5352,5356,5364,5372,5375,5441,5445,5448,5524,5528,5531,5534,5537,5750,5754,5759,5823,5828,5895,5900,5991,5994,6099,6103,6106,6112,6256,6260,6263,6277,6280,6325,6328,6436],[10,5350,5346],{"id":5351},"_2函数",[15,5353,5355],{"id":5354},"_21函数概述","2.1函数概述",[271,5357,5358,5361],{},[150,5359,5360],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[150,5362,5363],{},"语法：",[20,5365,5370],{"className":5366,"code":5368,"language":5369,"meta":25},[5367],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[27,5371,5368],{"__ignoreMap":25},[157,5373,5374],{},"小案例",[20,5376,5378],{"className":308,"code":5377,"language":310,"meta":25,"style":25},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[27,5379,5380,5385,5409,5413,5430,5437],{"__ignoreMap":25},[30,5381,5382],{"class":32,"line":33},[30,5383,5384],{"class":379},"\u002F\u002Fnum1,num2形参\n",[30,5386,5387,5389,5392,5394,5396,5400,5402,5404,5407],{"class":32,"line":44},[30,5388,325],{"class":317},[30,5390,5391],{"class":36}," add",[30,5393,322],{"class":321},[30,5395,325],{"class":317},[30,5397,5399],{"class":5398},"s4XuR"," num1",[30,5401,698],{"class":321},[30,5403,325],{"class":317},[30,5405,5406],{"class":5398}," num2",[30,5408,328],{"class":321},[30,5410,5411],{"class":32,"line":52},[30,5412,1732],{"class":321},[30,5414,5415,5417,5420,5422,5425,5427],{"class":32,"line":60},[30,5416,2167],{"class":317},[30,5418,5419],{"class":321}," sum",[30,5421,367],{"class":317},[30,5423,5424],{"class":321},"num1",[30,5426,801],{"class":317},[30,5428,5429],{"class":321},"num2;\n",[30,5431,5432,5434],{"class":32,"line":68},[30,5433,4272],{"class":317},[30,5435,5436],{"class":321}," sum;\n",[30,5438,5439],{"class":32,"line":80},[30,5440,1751],{"class":321},[15,5442,5444],{"id":5443},"_22函数调用","2.2函数调用",[157,5446,5447],{},"调用刚刚写的求和函数",[20,5449,5451],{"className":308,"code":5450,"language":310,"meta":25,"style":25},"int main()\n{\n    \u002F\u002Fa,b实参\n    int a=0;\n    int b=0;\n    cin>>a,b;\n    \u002F\u002F调用函数时，实参值传给了形参\n    cout\u003C\u003Cadd(a,b);\n}\n",[27,5452,5453,5461,5465,5470,5482,5494,5503,5508,5520],{"__ignoreMap":25},[30,5454,5455,5457,5459],{"class":32,"line":33},[30,5456,325],{"class":317},[30,5458,2155],{"class":36},[30,5460,2158],{"class":321},[30,5462,5463],{"class":32,"line":44},[30,5464,1732],{"class":321},[30,5466,5467],{"class":32,"line":52},[30,5468,5469],{"class":379},"    \u002F\u002Fa,b实参\n",[30,5471,5472,5474,5476,5478,5480],{"class":32,"line":60},[30,5473,2167],{"class":317},[30,5475,1585],{"class":321},[30,5477,367],{"class":317},[30,5479,511],{"class":40},[30,5481,1480],{"class":321},[30,5483,5484,5486,5488,5490,5492],{"class":32,"line":68},[30,5485,2167],{"class":317},[30,5487,3015],{"class":321},[30,5489,367],{"class":317},[30,5491,511],{"class":40},[30,5493,1480],{"class":321},[30,5495,5496,5498,5500],{"class":32,"line":80},[30,5497,2194],{"class":321},[30,5499,1616],{"class":317},[30,5501,5502],{"class":321},"a,b;\n",[30,5504,5505],{"class":32,"line":88},[30,5506,5507],{"class":379},"    \u002F\u002F调用函数时，实参值传给了形参\n",[30,5509,5510,5512,5514,5517],{"class":32,"line":96},[30,5511,1737],{"class":321},[30,5513,1363],{"class":317},[30,5515,5516],{"class":36},"add",[30,5518,5519],{"class":321},"(a,b);\n",[30,5521,5522],{"class":32,"line":104},[30,5523,1751],{"class":321},[15,5525,5527],{"id":5526},"_23值传递","2.3值传递",[157,5529,5530],{},"值传递就是函数调用时实参将数值传给形参",[157,5532,5533],{},"值传递时，如果形参发生任何改变，不会影响实参",[157,5535,5536],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[20,5538,5540],{"className":308,"code":5539,"language":310,"meta":25,"style":25},"void swap(int num1,int num2)\n{\n    cout\u003C\u003C\"交换前：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    int temp=num1;\n    num1=num2;\n    num2=temp;\n    cout\u003C\u003C\"交换后：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    return;\u002F\u002F或者不写\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    swap(a,b);\n}\n",[27,5541,5542,5564,5568,5581,5598,5616,5627,5636,5645,5658,5674,5690,5699,5703,5711,5715,5727,5739,5746],{"__ignoreMap":25},[30,5543,5544,5547,5550,5552,5554,5556,5558,5560,5562],{"class":32,"line":33},[30,5545,5546],{"class":317},"void",[30,5548,5549],{"class":36}," swap",[30,5551,322],{"class":321},[30,5553,325],{"class":317},[30,5555,5399],{"class":5398},[30,5557,698],{"class":321},[30,5559,325],{"class":317},[30,5561,5406],{"class":5398},[30,5563,328],{"class":321},[30,5565,5566],{"class":32,"line":44},[30,5567,1732],{"class":321},[30,5569,5570,5572,5574,5577,5579],{"class":32,"line":52},[30,5571,1737],{"class":321},[30,5573,1363],{"class":317},[30,5575,5576],{"class":74},"\"交换前：\"",[30,5578,1363],{"class":317},[30,5580,1385],{"class":321},[30,5582,5583,5585,5587,5590,5592,5594,5596],{"class":32,"line":60},[30,5584,1737],{"class":321},[30,5586,1363],{"class":317},[30,5588,5589],{"class":74},"\"num1=\"",[30,5591,1363],{"class":317},[30,5593,5424],{"class":321},[30,5595,1363],{"class":317},[30,5597,1385],{"class":321},[30,5599,5600,5602,5604,5607,5609,5612,5614],{"class":32,"line":68},[30,5601,1737],{"class":321},[30,5603,1363],{"class":317},[30,5605,5606],{"class":74},"\"num2=\"",[30,5608,1363],{"class":317},[30,5610,5611],{"class":321},"num2",[30,5613,1363],{"class":317},[30,5615,1385],{"class":321},[30,5617,5618,5620,5622,5624],{"class":32,"line":80},[30,5619,2167],{"class":317},[30,5621,4437],{"class":321},[30,5623,367],{"class":317},[30,5625,5626],{"class":321},"num1;\n",[30,5628,5629,5632,5634],{"class":32,"line":88},[30,5630,5631],{"class":321},"    num1",[30,5633,367],{"class":317},[30,5635,5429],{"class":321},[30,5637,5638,5641,5643],{"class":32,"line":96},[30,5639,5640],{"class":321},"    num2",[30,5642,367],{"class":317},[30,5644,4462],{"class":321},[30,5646,5647,5649,5651,5654,5656],{"class":32,"line":104},[30,5648,1737],{"class":321},[30,5650,1363],{"class":317},[30,5652,5653],{"class":74},"\"交换后：\"",[30,5655,1363],{"class":317},[30,5657,1385],{"class":321},[30,5659,5660,5662,5664,5666,5668,5670,5672],{"class":32,"line":112},[30,5661,1737],{"class":321},[30,5663,1363],{"class":317},[30,5665,5589],{"class":74},[30,5667,1363],{"class":317},[30,5669,5424],{"class":321},[30,5671,1363],{"class":317},[30,5673,1385],{"class":321},[30,5675,5676,5678,5680,5682,5684,5686,5688],{"class":32,"line":123},[30,5677,1737],{"class":321},[30,5679,1363],{"class":317},[30,5681,5606],{"class":74},[30,5683,1363],{"class":317},[30,5685,5611],{"class":321},[30,5687,1363],{"class":317},[30,5689,1385],{"class":321},[30,5691,5692,5694,5696],{"class":32,"line":131},[30,5693,4272],{"class":317},[30,5695,376],{"class":321},[30,5697,5698],{"class":379},"\u002F\u002F或者不写\n",[30,5700,5701],{"class":32,"line":142},[30,5702,1751],{"class":321},[30,5704,5705,5707,5709],{"class":32,"line":1811},[30,5706,325],{"class":317},[30,5708,2155],{"class":36},[30,5710,2158],{"class":321},[30,5712,5713],{"class":32,"line":1825},[30,5714,1732],{"class":321},[30,5716,5717,5719,5721,5723,5725],{"class":32,"line":1830},[30,5718,2167],{"class":317},[30,5720,1585],{"class":321},[30,5722,367],{"class":317},[30,5724,766],{"class":40},[30,5726,1480],{"class":321},[30,5728,5729,5731,5733,5735,5737],{"class":32,"line":1836},[30,5730,2167],{"class":317},[30,5732,3015],{"class":321},[30,5734,367],{"class":317},[30,5736,1020],{"class":40},[30,5738,1480],{"class":321},[30,5740,5741,5744],{"class":32,"line":1857},[30,5742,5743],{"class":36},"    swap",[30,5745,5519],{"class":321},[30,5747,5748],{"class":32,"line":1862},[30,5749,1751],{"class":321},[15,5751,5753],{"id":5752},"_24函数的常见形式","2.4函数的常见形式",[271,5755,5756],{},[150,5757,5758],{},"无参无返",[20,5760,5762],{"className":308,"code":5761,"language":310,"meta":25,"style":25},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[27,5763,5764,5773,5777,5790,5794,5802,5806,5811,5819],{"__ignoreMap":25},[30,5765,5766,5768,5771],{"class":32,"line":33},[30,5767,5546],{"class":317},[30,5769,5770],{"class":36}," test01",[30,5772,2158],{"class":321},[30,5774,5775],{"class":32,"line":44},[30,5776,1732],{"class":321},[30,5778,5779,5781,5783,5786,5788],{"class":32,"line":52},[30,5780,1737],{"class":321},[30,5782,1363],{"class":317},[30,5784,5785],{"class":74},"\"你好\"",[30,5787,1363],{"class":317},[30,5789,1385],{"class":321},[30,5791,5792],{"class":32,"line":60},[30,5793,1751],{"class":321},[30,5795,5796,5798,5800],{"class":32,"line":68},[30,5797,325],{"class":317},[30,5799,2155],{"class":36},[30,5801,2158],{"class":321},[30,5803,5804],{"class":32,"line":80},[30,5805,1732],{"class":321},[30,5807,5808],{"class":32,"line":88},[30,5809,5810],{"class":379},"    \u002F\u002F函数调用\n",[30,5812,5813,5816],{"class":32,"line":96},[30,5814,5815],{"class":36},"    test01",[30,5817,5818],{"class":321},"();\n",[30,5820,5821],{"class":32,"line":104},[30,5822,1751],{"class":321},[271,5824,5825],{"start":44},[150,5826,5827],{},"有参无返",[20,5829,5831],{"className":308,"code":5830,"language":310,"meta":25,"style":25},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[27,5832,5833,5848,5852,5864,5868,5876,5880,5891],{"__ignoreMap":25},[30,5834,5835,5837,5840,5842,5844,5846],{"class":32,"line":33},[30,5836,5546],{"class":317},[30,5838,5839],{"class":36}," test02",[30,5841,322],{"class":321},[30,5843,325],{"class":317},[30,5845,1585],{"class":5398},[30,5847,328],{"class":321},[30,5849,5850],{"class":32,"line":44},[30,5851,1732],{"class":321},[30,5853,5854,5856,5858,5860,5862],{"class":32,"line":52},[30,5855,1737],{"class":321},[30,5857,1363],{"class":317},[30,5859,5785],{"class":74},[30,5861,1363],{"class":317},[30,5863,1385],{"class":321},[30,5865,5866],{"class":32,"line":60},[30,5867,1751],{"class":321},[30,5869,5870,5872,5874],{"class":32,"line":68},[30,5871,325],{"class":317},[30,5873,2155],{"class":36},[30,5875,2158],{"class":321},[30,5877,5878],{"class":32,"line":80},[30,5879,1732],{"class":321},[30,5881,5882,5885,5887,5889],{"class":32,"line":88},[30,5883,5884],{"class":36},"    test02",[30,5886,322],{"class":321},[30,5888,631],{"class":40},[30,5890,2901],{"class":321},[30,5892,5893],{"class":32,"line":96},[30,5894,1751],{"class":321},[271,5896,5897],{"start":52},[150,5898,5899],{},"无参有返",[20,5901,5903],{"className":308,"code":5902,"language":310,"meta":25,"style":25},"int test03()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n    return 100;\n}\nint main()\n{\n    int num1=test03();\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl; \u002F\u002F100\n}\n",[27,5904,5905,5914,5918,5930,5939,5943,5951,5955,5968,5987],{"__ignoreMap":25},[30,5906,5907,5909,5912],{"class":32,"line":33},[30,5908,325],{"class":317},[30,5910,5911],{"class":36}," test03",[30,5913,2158],{"class":321},[30,5915,5916],{"class":32,"line":44},[30,5917,1732],{"class":321},[30,5919,5920,5922,5924,5926,5928],{"class":32,"line":52},[30,5921,1737],{"class":321},[30,5923,1363],{"class":317},[30,5925,5785],{"class":74},[30,5927,1363],{"class":317},[30,5929,1385],{"class":321},[30,5931,5932,5934,5937],{"class":32,"line":60},[30,5933,4272],{"class":317},[30,5935,5936],{"class":40}," 100",[30,5938,1480],{"class":321},[30,5940,5941],{"class":32,"line":68},[30,5942,1751],{"class":321},[30,5944,5945,5947,5949],{"class":32,"line":80},[30,5946,325],{"class":317},[30,5948,2155],{"class":36},[30,5950,2158],{"class":321},[30,5952,5953],{"class":32,"line":88},[30,5954,1732],{"class":321},[30,5956,5957,5959,5961,5963,5966],{"class":32,"line":96},[30,5958,2167],{"class":317},[30,5960,5399],{"class":321},[30,5962,367],{"class":317},[30,5964,5965],{"class":36},"test03",[30,5967,5818],{"class":321},[30,5969,5970,5972,5974,5976,5978,5980,5982,5984],{"class":32,"line":104},[30,5971,1737],{"class":321},[30,5973,1363],{"class":317},[30,5975,5589],{"class":74},[30,5977,1363],{"class":317},[30,5979,5424],{"class":321},[30,5981,1363],{"class":317},[30,5983,1428],{"class":321},[30,5985,5986],{"class":379}," \u002F\u002F100\n",[30,5988,5989],{"class":32,"line":112},[30,5990,1751],{"class":321},[157,5992,5993],{},"4.有参有返",[20,5995,5997],{"className":308,"code":5996,"language":310,"meta":25,"style":25},"int test04(int a)\n{\n    cout\u003C\u003C\"hello\"\u003C\u003Cendl;\n    return a;\n}\nint mian()\n{\n    int b=1;\n    int c=test04(b);\n    cout\u003C\u003Cc\u003C\u003Cendl; \u002F\u002F1\n}\n",[27,5998,5999,6014,6018,6031,6037,6041,6050,6054,6066,6080,6095],{"__ignoreMap":25},[30,6000,6001,6003,6006,6008,6010,6012],{"class":32,"line":33},[30,6002,325],{"class":317},[30,6004,6005],{"class":36}," test04",[30,6007,322],{"class":321},[30,6009,325],{"class":317},[30,6011,1585],{"class":5398},[30,6013,328],{"class":321},[30,6015,6016],{"class":32,"line":44},[30,6017,1732],{"class":321},[30,6019,6020,6022,6024,6027,6029],{"class":32,"line":52},[30,6021,1737],{"class":321},[30,6023,1363],{"class":317},[30,6025,6026],{"class":74},"\"hello\"",[30,6028,1363],{"class":317},[30,6030,1385],{"class":321},[30,6032,6033,6035],{"class":32,"line":60},[30,6034,4272],{"class":317},[30,6036,1619],{"class":321},[30,6038,6039],{"class":32,"line":68},[30,6040,1751],{"class":321},[30,6042,6043,6045,6048],{"class":32,"line":80},[30,6044,325],{"class":317},[30,6046,6047],{"class":36}," mian",[30,6049,2158],{"class":321},[30,6051,6052],{"class":32,"line":88},[30,6053,1732],{"class":321},[30,6055,6056,6058,6060,6062,6064],{"class":32,"line":96},[30,6057,2167],{"class":317},[30,6059,3015],{"class":321},[30,6061,367],{"class":317},[30,6063,537],{"class":40},[30,6065,1480],{"class":321},[30,6067,6068,6070,6072,6074,6077],{"class":32,"line":104},[30,6069,2167],{"class":317},[30,6071,3031],{"class":321},[30,6073,367],{"class":317},[30,6075,6076],{"class":36},"test04",[30,6078,6079],{"class":321},"(b);\n",[30,6081,6082,6084,6086,6088,6090,6092],{"class":32,"line":112},[30,6083,1737],{"class":321},[30,6085,1363],{"class":317},[30,6087,608],{"class":321},[30,6089,1363],{"class":317},[30,6091,1428],{"class":321},[30,6093,6094],{"class":379}," \u002F\u002F1\n",[30,6096,6097],{"class":32,"line":123},[30,6098,1751],{"class":321},[15,6100,6102],{"id":6101},"_25函数的声明","2.5函数的声明",[157,6104,6105],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[157,6107,6108,6109],{},"函数的",[469,6110,6111],{},"声明可以多次，但是函数的定义只能有一次",[20,6113,6115],{"className":308,"code":6114,"language":310,"meta":25,"style":25},"\u002F\u002F函数声明\n\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\nint max(int a,int b);\u002F\u002F这样函数就可以写在后面，不报错了\nint main() \n{\n    int a=10;\n    int b=20;\n    cout\u003C\u003Cmax(a,b)\u003C\u003Cendl;\n}\nint max(int a,int b)\n{\n    return a>b?a:b;\n}\n",[27,6116,6117,6122,6127,6152,6161,6165,6177,6189,6205,6209,6229,6233,6252],{"__ignoreMap":25},[30,6118,6119],{"class":32,"line":33},[30,6120,6121],{"class":379},"\u002F\u002F函数声明\n",[30,6123,6124],{"class":32,"line":44},[30,6125,6126],{"class":379},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[30,6128,6129,6131,6134,6136,6138,6140,6142,6144,6146,6149],{"class":32,"line":52},[30,6130,325],{"class":317},[30,6132,6133],{"class":36}," max",[30,6135,322],{"class":321},[30,6137,325],{"class":317},[30,6139,1585],{"class":5398},[30,6141,698],{"class":321},[30,6143,325],{"class":317},[30,6145,3015],{"class":5398},[30,6147,6148],{"class":321},");",[30,6150,6151],{"class":379},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[30,6153,6154,6156,6158],{"class":32,"line":60},[30,6155,325],{"class":317},[30,6157,2155],{"class":36},[30,6159,6160],{"class":321},"() \n",[30,6162,6163],{"class":32,"line":68},[30,6164,1732],{"class":321},[30,6166,6167,6169,6171,6173,6175],{"class":32,"line":80},[30,6168,2167],{"class":317},[30,6170,1585],{"class":321},[30,6172,367],{"class":317},[30,6174,766],{"class":40},[30,6176,1480],{"class":321},[30,6178,6179,6181,6183,6185,6187],{"class":32,"line":88},[30,6180,2167],{"class":317},[30,6182,3015],{"class":321},[30,6184,367],{"class":317},[30,6186,1020],{"class":40},[30,6188,1480],{"class":321},[30,6190,6191,6193,6195,6198,6201,6203],{"class":32,"line":96},[30,6192,1737],{"class":321},[30,6194,1363],{"class":317},[30,6196,6197],{"class":36},"max",[30,6199,6200],{"class":321},"(a,b)",[30,6202,1363],{"class":317},[30,6204,1385],{"class":321},[30,6206,6207],{"class":32,"line":104},[30,6208,1751],{"class":321},[30,6210,6211,6213,6215,6217,6219,6221,6223,6225,6227],{"class":32,"line":112},[30,6212,325],{"class":317},[30,6214,6133],{"class":36},[30,6216,322],{"class":321},[30,6218,325],{"class":317},[30,6220,1585],{"class":5398},[30,6222,698],{"class":321},[30,6224,325],{"class":317},[30,6226,3015],{"class":5398},[30,6228,328],{"class":321},[30,6230,6231],{"class":32,"line":123},[30,6232,1732],{"class":321},[30,6234,6235,6237,6239,6241,6243,6245,6247,6249],{"class":32,"line":131},[30,6236,4272],{"class":317},[30,6238,1585],{"class":321},[30,6240,1280],{"class":317},[30,6242,583],{"class":321},[30,6244,1306],{"class":317},[30,6246,558],{"class":321},[30,6248,1179],{"class":317},[30,6250,6251],{"class":321},"b;\n",[30,6253,6254],{"class":32,"line":142},[30,6255,1751],{"class":321},[15,6257,6259],{"id":6258},"_26函数的分文件编写","2.6函数的分文件编写",[157,6261,6262],{},"4个步骤：",[147,6264,6265,6268,6271,6274],{},[150,6266,6267],{},"1.创建后缀名为.h的头文件",[150,6269,6270],{},"2.创建后缀名为.cpp的源文件",[150,6272,6273],{},"3.在头文件中写函数的定义",[150,6275,6276],{},"4.在源文件中写函数的定义\n示例：",[157,6278,6279],{},"头文件：swap.h",[20,6281,6283],{"className":308,"code":6282,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[27,6284,6285,6291,6301,6305],{"__ignoreMap":25},[30,6286,6287,6289],{"class":32,"line":33},[30,6288,2132],{"class":317},[30,6290,2135],{"class":74},[30,6292,6293,6295,6297,6299],{"class":32,"line":44},[30,6294,2140],{"class":317},[30,6296,2143],{"class":317},[30,6298,2146],{"class":36},[30,6300,1480],{"class":321},[30,6302,6303],{"class":32,"line":52},[30,6304,6121],{"class":379},[30,6306,6307,6309,6311,6313,6315,6317,6319,6321,6323],{"class":32,"line":60},[30,6308,5546],{"class":317},[30,6310,5549],{"class":36},[30,6312,322],{"class":321},[30,6314,325],{"class":317},[30,6316,1585],{"class":5398},[30,6318,698],{"class":321},[30,6320,325],{"class":317},[30,6322,3015],{"class":5398},[30,6324,2901],{"class":321},[157,6326,6327],{},"源文件：swap.cpp",[20,6329,6331],{"className":308,"code":6330,"language":310,"meta":25,"style":25},"#include \"swap.h\"\n\u002F\u002F函数的定义\nvoid swap(int a,int b)\n{\n    int temp=a;\n    a=b;\n    b=temp;\n    cout\u003C\u003C\"a=\"\u003C\u003Ca\u003C\u003Cendl;\n    cout\u003C\u003C\"b=\"\u003C\u003Cb\u003C\u003Cendl;\n}\n",[27,6332,6333,6340,6345,6365,6369,6380,6389,6398,6415,6432],{"__ignoreMap":25},[30,6334,6335,6337],{"class":32,"line":33},[30,6336,2132],{"class":317},[30,6338,6339],{"class":74}," \"swap.h\"\n",[30,6341,6342],{"class":32,"line":44},[30,6343,6344],{"class":379},"\u002F\u002F函数的定义\n",[30,6346,6347,6349,6351,6353,6355,6357,6359,6361,6363],{"class":32,"line":52},[30,6348,5546],{"class":317},[30,6350,5549],{"class":36},[30,6352,322],{"class":321},[30,6354,325],{"class":317},[30,6356,1585],{"class":5398},[30,6358,698],{"class":321},[30,6360,325],{"class":317},[30,6362,3015],{"class":5398},[30,6364,328],{"class":321},[30,6366,6367],{"class":32,"line":60},[30,6368,1732],{"class":321},[30,6370,6371,6373,6375,6377],{"class":32,"line":68},[30,6372,2167],{"class":317},[30,6374,4437],{"class":321},[30,6376,367],{"class":317},[30,6378,6379],{"class":321},"a;\n",[30,6381,6382,6385,6387],{"class":32,"line":80},[30,6383,6384],{"class":321},"    a",[30,6386,367],{"class":317},[30,6388,6251],{"class":321},[30,6390,6391,6394,6396],{"class":32,"line":88},[30,6392,6393],{"class":321},"    b",[30,6395,367],{"class":317},[30,6397,4462],{"class":321},[30,6399,6400,6402,6404,6407,6409,6411,6413],{"class":32,"line":96},[30,6401,1737],{"class":321},[30,6403,1363],{"class":317},[30,6405,6406],{"class":74},"\"a=\"",[30,6408,1363],{"class":317},[30,6410,558],{"class":321},[30,6412,1363],{"class":317},[30,6414,1385],{"class":321},[30,6416,6417,6419,6421,6424,6426,6428,6430],{"class":32,"line":104},[30,6418,1737],{"class":321},[30,6420,1363],{"class":317},[30,6422,6423],{"class":74},"\"b=\"",[30,6425,1363],{"class":317},[30,6427,583],{"class":321},[30,6429,1363],{"class":317},[30,6431,1385],{"class":321},[30,6433,6434],{"class":32,"line":112},[30,6435,1751],{"class":321},[234,6437,6438],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":44,"depth":44,"links":6440},[6441,6442,6443,6444,6445,6446],{"id":5354,"depth":44,"text":5355},{"id":5443,"depth":44,"text":5444},{"id":5526,"depth":44,"text":5527},{"id":5752,"depth":44,"text":5753},{"id":6101,"depth":44,"text":6102},{"id":6258,"depth":44,"text":6259},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5346,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6453,"title":6454,"body":6455,"description":6462,"extension":243,"meta":7867,"navigation":245,"path":7868,"seo":7869,"stem":7870,"__hash__":7871},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6456,"toc":7857},[6457,6460,6463,6467,6629,6633,6636,6639,6642,6645,6785,6789,6792,6795,6798,6863,6867,6872,6939,6942,6946,6949,6960,6965,6985,6988,6993,7012,7015,7019,7038,7041,7045,7280,7284,7287,7290,7293,7455,7458,7462,7465,7471,7854],[10,6458,6454],{"id":6459},"_3指针",[157,6461,6462],{},"通过指针保存一个地址，指针就是个地址",[15,6464,6466],{"id":6465},"_31定义指针","3.1定义指针",[20,6468,6470],{"className":308,"code":6469,"language":310,"meta":25,"style":25},"int main()\n{\n    \u002F\u002F1.定义指针\n    int a=10;\n    \u002F\u002F指针定义语法：数据类型*指针变量名;\n    int*p;\n    p=&a;\n    cout\u003C\u003C\"a的地址为：\"\u003C\u003C&a\u003C\u003Cendl;\n    cout\u003C\u003C\"指针p为：\"\u003C\u003Cp\u003C\u003Cendl;\u002F\u002F指针p表示的就是a的地址\n\n    \u002F\u002F2.使用指针\n    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n    *p=1000;\n    cout\u003C\u003C*p\u003C\u003Cendl;\u002F\u002F1000\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F1000\n}\n",[27,6471,6472,6480,6484,6489,6501,6506,6514,6524,6542,6562,6566,6571,6576,6581,6595,6611,6625],{"__ignoreMap":25},[30,6473,6474,6476,6478],{"class":32,"line":33},[30,6475,325],{"class":317},[30,6477,2155],{"class":36},[30,6479,2158],{"class":321},[30,6481,6482],{"class":32,"line":44},[30,6483,1732],{"class":321},[30,6485,6486],{"class":32,"line":52},[30,6487,6488],{"class":379},"    \u002F\u002F1.定义指针\n",[30,6490,6491,6493,6495,6497,6499],{"class":32,"line":60},[30,6492,2167],{"class":317},[30,6494,1585],{"class":321},[30,6496,367],{"class":317},[30,6498,766],{"class":40},[30,6500,1480],{"class":321},[30,6502,6503],{"class":32,"line":68},[30,6504,6505],{"class":379},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[30,6507,6508,6511],{"class":32,"line":80},[30,6509,6510],{"class":317},"    int*",[30,6512,6513],{"class":321},"p;\n",[30,6515,6516,6519,6522],{"class":32,"line":88},[30,6517,6518],{"class":321},"    p",[30,6520,6521],{"class":317},"=&",[30,6523,6379],{"class":321},[30,6525,6526,6528,6530,6533,6536,6538,6540],{"class":32,"line":96},[30,6527,1737],{"class":321},[30,6529,1363],{"class":317},[30,6531,6532],{"class":74},"\"a的地址为：\"",[30,6534,6535],{"class":317},"\u003C\u003C&",[30,6537,558],{"class":321},[30,6539,1363],{"class":317},[30,6541,1385],{"class":321},[30,6543,6544,6546,6548,6551,6553,6555,6557,6559],{"class":32,"line":104},[30,6545,1737],{"class":321},[30,6547,1363],{"class":317},[30,6549,6550],{"class":74},"\"指针p为：\"",[30,6552,1363],{"class":317},[30,6554,157],{"class":321},[30,6556,1363],{"class":317},[30,6558,1428],{"class":321},[30,6560,6561],{"class":379},"\u002F\u002F指针p表示的就是a的地址\n",[30,6563,6564],{"class":32,"line":112},[30,6565,2582],{"emptyLinePlaceholder":245},[30,6567,6568],{"class":32,"line":123},[30,6569,6570],{"class":379},"    \u002F\u002F2.使用指针\n",[30,6572,6573],{"class":32,"line":131},[30,6574,6575],{"class":379},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[30,6577,6578],{"class":32,"line":142},[30,6579,6580],{"class":379},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[30,6582,6583,6586,6588,6590,6593],{"class":32,"line":1811},[30,6584,6585],{"class":317},"    *",[30,6587,157],{"class":321},[30,6589,367],{"class":317},[30,6591,6592],{"class":40},"1000",[30,6594,1480],{"class":321},[30,6596,6597,6599,6602,6604,6606,6608],{"class":32,"line":1825},[30,6598,1737],{"class":321},[30,6600,6601],{"class":317},"\u003C\u003C*",[30,6603,157],{"class":321},[30,6605,1363],{"class":317},[30,6607,1428],{"class":321},[30,6609,6610],{"class":379},"\u002F\u002F1000\n",[30,6612,6613,6615,6617,6619,6621,6623],{"class":32,"line":1830},[30,6614,1737],{"class":321},[30,6616,1363],{"class":317},[30,6618,558],{"class":321},[30,6620,1363],{"class":317},[30,6622,1428],{"class":321},[30,6624,6610],{"class":379},[30,6626,6627],{"class":32,"line":1836},[30,6628,1751],{"class":321},[15,6630,6632],{"id":6631},"_32指针所占的内存空间","3.2指针所占的内存空间",[157,6634,6635],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[157,6637,6638],{},"在32位操作系统下：占用4个字节空间",[157,6640,6641],{},"在64位操作系统下：占用8个字节空间",[157,6643,6644],{},"上方是不管啥数据类型的",[20,6646,6648],{"className":308,"code":6647,"language":310,"meta":25,"style":25},"int main()\n{\n    \u002F\u002F指针所占内存空间\n    int a=10;\n    \u002F\u002Fint *p;\n    \u002F\u002Fp=&a;\n    \u002F\u002F上述可以写为以下：\n    int *p=&a;\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(p)\u003C\u003Cendl;\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(int *)\u003C\u003Cendl  \u002F\u002F4字节(32位的话)\n    cout \u003C\u003C\"sizeof(char *)\"\u003C\u003Csizeof(char *)\u003C\u003Cendl; \u002F\u002F4字节(32位的话)\n}\n",[27,6649,6650,6658,6662,6667,6679,6684,6689,6694,6707,6729,6755,6781],{"__ignoreMap":25},[30,6651,6652,6654,6656],{"class":32,"line":33},[30,6653,325],{"class":317},[30,6655,2155],{"class":36},[30,6657,2158],{"class":321},[30,6659,6660],{"class":32,"line":44},[30,6661,1732],{"class":321},[30,6663,6664],{"class":32,"line":52},[30,6665,6666],{"class":379},"    \u002F\u002F指针所占内存空间\n",[30,6668,6669,6671,6673,6675,6677],{"class":32,"line":60},[30,6670,2167],{"class":317},[30,6672,1585],{"class":321},[30,6674,367],{"class":317},[30,6676,766],{"class":40},[30,6678,1480],{"class":321},[30,6680,6681],{"class":32,"line":68},[30,6682,6683],{"class":379},"    \u002F\u002Fint *p;\n",[30,6685,6686],{"class":32,"line":80},[30,6687,6688],{"class":379},"    \u002F\u002Fp=&a;\n",[30,6690,6691],{"class":32,"line":88},[30,6692,6693],{"class":379},"    \u002F\u002F上述可以写为以下：\n",[30,6695,6696,6698,6701,6703,6705],{"class":32,"line":96},[30,6697,2167],{"class":317},[30,6699,6700],{"class":317}," *",[30,6702,157],{"class":321},[30,6704,6521],{"class":317},[30,6706,6379],{"class":321},[30,6708,6709,6712,6714,6717,6719,6722,6724,6726],{"class":32,"line":104},[30,6710,6711],{"class":321},"    cout ",[30,6713,1363],{"class":317},[30,6715,6716],{"class":74},"\"sizeof(int *)\"",[30,6718,1559],{"class":317},[30,6720,6721],{"class":321},"(p)",[30,6723,1363],{"class":317},[30,6725,1428],{"class":321},[30,6727,6728],{"class":379},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[30,6730,6731,6733,6735,6737,6739,6741,6743,6745,6747,6749,6752],{"class":32,"line":112},[30,6732,6711],{"class":321},[30,6734,1363],{"class":317},[30,6736,6716],{"class":74},[30,6738,1559],{"class":317},[30,6740,322],{"class":321},[30,6742,325],{"class":317},[30,6744,6700],{"class":317},[30,6746,749],{"class":321},[30,6748,1363],{"class":317},[30,6750,6751],{"class":321},"endl",[30,6753,6754],{"class":379},"  \u002F\u002F4字节(32位的话)\n",[30,6756,6757,6759,6761,6764,6766,6768,6770,6772,6774,6776,6778],{"class":32,"line":123},[30,6758,6711],{"class":321},[30,6760,1363],{"class":317},[30,6762,6763],{"class":74},"\"sizeof(char *)\"",[30,6765,1559],{"class":317},[30,6767,322],{"class":321},[30,6769,417],{"class":317},[30,6771,6700],{"class":317},[30,6773,749],{"class":321},[30,6775,1363],{"class":317},[30,6777,1428],{"class":321},[30,6779,6780],{"class":379}," \u002F\u002F4字节(32位的话)\n",[30,6782,6783],{"class":32,"line":131},[30,6784,1751],{"class":321},[15,6786,6788],{"id":6787},"_33空指针","3.3空指针",[157,6790,6791],{},"空指针：指针变量指向内存中编号为0的空间",[157,6793,6794],{},"用途：初始化指针变量",[157,6796,6797],{},"注意：空指针指向的内存是不可以访问的",[20,6799,6801],{"className":308,"code":6800,"language":310,"meta":25,"style":25},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[27,6802,6803,6811,6815,6820,6834,6839,6854,6859],{"__ignoreMap":25},[30,6804,6805,6807,6809],{"class":32,"line":33},[30,6806,325],{"class":317},[30,6808,2155],{"class":36},[30,6810,2158],{"class":321},[30,6812,6813],{"class":32,"line":44},[30,6814,1732],{"class":321},[30,6816,6817],{"class":32,"line":52},[30,6818,6819],{"class":379},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[30,6821,6822,6824,6826,6828,6830,6832],{"class":32,"line":60},[30,6823,2167],{"class":317},[30,6825,6700],{"class":317},[30,6827,157],{"class":321},[30,6829,367],{"class":317},[30,6831,2574],{"class":40},[30,6833,1480],{"class":321},[30,6835,6836],{"class":32,"line":68},[30,6837,6838],{"class":379},"    \u002F\u002F2.空指针不能进行访问\n",[30,6840,6841,6843,6845,6847,6849,6851],{"class":32,"line":80},[30,6842,6585],{"class":317},[30,6844,157],{"class":321},[30,6846,367],{"class":317},[30,6848,631],{"class":40},[30,6850,376],{"class":321},[30,6852,6853],{"class":379},"\u002F\u002F直接报错，压根不能访问\n",[30,6855,6856],{"class":32,"line":88},[30,6857,6858],{"class":379},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[30,6860,6861],{"class":32,"line":96},[30,6862,1751],{"class":321},[15,6864,6866],{"id":6865},"_34野指针","3.4野指针",[157,6868,6869],{},[469,6870,6871],{},"指针变量指向非法的内存空间",[20,6873,6875],{"className":308,"code":6874,"language":310,"meta":25,"style":25},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[27,6876,6877,6885,6889,6918,6923,6935],{"__ignoreMap":25},[30,6878,6879,6881,6883],{"class":32,"line":33},[30,6880,325],{"class":317},[30,6882,2155],{"class":36},[30,6884,2158],{"class":321},[30,6886,6887],{"class":32,"line":44},[30,6888,1732],{"class":321},[30,6890,6891,6893,6895,6897,6899,6901,6903,6905,6907,6910,6913,6915],{"class":32,"line":52},[30,6892,2167],{"class":317},[30,6894,6700],{"class":317},[30,6896,157],{"class":321},[30,6898,367],{"class":317},[30,6900,322],{"class":321},[30,6902,325],{"class":317},[30,6904,6700],{"class":317},[30,6906,749],{"class":321},[30,6908,6909],{"class":317},"0x",[30,6911,6912],{"class":40},"1100",[30,6914,376],{"class":321},[30,6916,6917],{"class":379}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[30,6919,6920],{"class":32,"line":60},[30,6921,6922],{"class":379},"    \u002F\u002F访问野指针报错\n",[30,6924,6925,6927,6929,6931,6933],{"class":32,"line":68},[30,6926,1737],{"class":321},[30,6928,6601],{"class":317},[30,6930,157],{"class":321},[30,6932,1363],{"class":317},[30,6934,1385],{"class":321},[30,6936,6937],{"class":32,"line":80},[30,6938,1751],{"class":321},[157,6940,6941],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[15,6943,6945],{"id":6944},"_35const修饰指针","3.5const修饰指针",[157,6947,6948],{},"三种情况：",[147,6950,6951,6954,6957],{},[150,6952,6953],{},"const修饰指针 常量指针",[150,6955,6956],{},"const修饰常量 指针常量",[150,6958,6959],{},"const即修饰指针，又修饰常量",[271,6961,6962],{},[150,6963,6964],{},"常量指针",[20,6966,6968],{"className":308,"code":6967,"language":310,"meta":25,"style":25},"const int *p=&a;\n",[27,6969,6970],{"__ignoreMap":25},[30,6971,6972,6975,6977,6979,6981,6983],{"class":32,"line":33},[30,6973,6974],{"class":317},"const",[30,6976,2564],{"class":317},[30,6978,6700],{"class":317},[30,6980,157],{"class":321},[30,6982,6521],{"class":317},[30,6984,6379],{"class":321},[157,6986,6987],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[271,6989,6990],{"start":44},[150,6991,6992],{},"指针常量",[20,6994,6996],{"className":308,"code":6995,"language":310,"meta":25,"style":25},"int *const p=&a;\n",[27,6997,6998],{"__ignoreMap":25},[30,6999,7000,7002,7005,7008,7010],{"class":32,"line":33},[30,7001,325],{"class":317},[30,7003,7004],{"class":317}," *const",[30,7006,7007],{"class":321}," p",[30,7009,6521],{"class":317},[30,7011,6379],{"class":321},[157,7013,7014],{},"指针的指向不可以改，指针指向的值可以改",[271,7016,7017],{"start":52},[150,7018,6959],{},[20,7020,7022],{"className":308,"code":7021,"language":310,"meta":25,"style":25},"const int *const p=&a;\n",[27,7023,7024],{"__ignoreMap":25},[30,7025,7026,7028,7030,7032,7034,7036],{"class":32,"line":33},[30,7027,6974],{"class":317},[30,7029,2564],{"class":317},[30,7031,7004],{"class":317},[30,7033,7007],{"class":321},[30,7035,6521],{"class":317},[30,7037,6379],{"class":321},[157,7039,7040],{},"指针的指向和指针指向的值都不可以改变",[15,7042,7044],{"id":7043},"_36指针和数组","3.6指针和数组",[20,7046,7048],{"className":308,"code":7047,"language":310,"meta":25,"style":25},"int main()\n{\n    \u002F\u002F利用指针访问数组中的元素\n    int arr[10]={1,2,3,4,5,6,7,8,9,10};\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003Carr[0]\u003C\u003Cendl;\n    int *p=arr;\u002F\u002F注意数才要加取地址符号&\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    p++; \u002F\u002F让指针向后偏移4个字节\n    cout\u003C\u003C\"数组的第二个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F利用指针遍历数组\n    int *p2=arr;\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003C*p2\u003C\u003Cendl;\n        p2++;\n    }\n}\n",[27,7049,7050,7058,7062,7067,7121,7142,7158,7174,7185,7202,7207,7221,7247,7251,7263,7272,7276],{"__ignoreMap":25},[30,7051,7052,7054,7056],{"class":32,"line":33},[30,7053,325],{"class":317},[30,7055,2155],{"class":36},[30,7057,2158],{"class":321},[30,7059,7060],{"class":32,"line":44},[30,7061,1732],{"class":321},[30,7063,7064],{"class":32,"line":52},[30,7065,7066],{"class":379},"    \u002F\u002F利用指针访问数组中的元素\n",[30,7068,7069,7071,7073,7075,7077,7079,7081,7083,7085,7087,7089,7091,7093,7095,7097,7099,7101,7103,7105,7107,7109,7111,7113,7115,7117,7119],{"class":32,"line":60},[30,7070,2167],{"class":317},[30,7072,4144],{"class":321},[30,7074,766],{"class":40},[30,7076,1260],{"class":321},[30,7078,367],{"class":317},[30,7080,1216],{"class":321},[30,7082,537],{"class":40},[30,7084,698],{"class":321},[30,7086,398],{"class":40},[30,7088,698],{"class":321},[30,7090,392],{"class":40},[30,7092,698],{"class":321},[30,7094,613],{"class":40},[30,7096,698],{"class":321},[30,7098,639],{"class":40},[30,7100,698],{"class":321},[30,7102,664],{"class":40},[30,7104,698],{"class":321},[30,7106,689],{"class":40},[30,7108,698],{"class":321},[30,7110,715],{"class":40},[30,7112,698],{"class":321},[30,7114,740],{"class":40},[30,7116,698],{"class":321},[30,7118,766],{"class":40},[30,7120,4177],{"class":321},[30,7122,7123,7125,7127,7130,7132,7134,7136,7138,7140],{"class":32,"line":68},[30,7124,1737],{"class":321},[30,7126,1363],{"class":317},[30,7128,7129],{"class":74},"\"数组的第一个元素为：\"",[30,7131,1363],{"class":317},[30,7133,4088],{"class":321},[30,7135,511],{"class":40},[30,7137,1260],{"class":321},[30,7139,1363],{"class":317},[30,7141,1385],{"class":321},[30,7143,7144,7146,7148,7150,7152,7155],{"class":32,"line":80},[30,7145,2167],{"class":317},[30,7147,6700],{"class":317},[30,7149,157],{"class":321},[30,7151,367],{"class":317},[30,7153,7154],{"class":321},"arr;",[30,7156,7157],{"class":379},"\u002F\u002F注意数才要加取地址符号&\n",[30,7159,7160,7162,7164,7166,7168,7170,7172],{"class":32,"line":88},[30,7161,1737],{"class":321},[30,7163,1363],{"class":317},[30,7165,7129],{"class":74},[30,7167,6601],{"class":317},[30,7169,157],{"class":321},[30,7171,1363],{"class":317},[30,7173,1385],{"class":321},[30,7175,7176,7178,7180,7182],{"class":32,"line":96},[30,7177,6518],{"class":321},[30,7179,2474],{"class":317},[30,7181,376],{"class":321},[30,7183,7184],{"class":379}," \u002F\u002F让指针向后偏移4个字节\n",[30,7186,7187,7189,7191,7194,7196,7198,7200],{"class":32,"line":104},[30,7188,1737],{"class":321},[30,7190,1363],{"class":317},[30,7192,7193],{"class":74},"\"数组的第二个元素为：\"",[30,7195,6601],{"class":317},[30,7197,157],{"class":321},[30,7199,1363],{"class":317},[30,7201,1385],{"class":321},[30,7203,7204],{"class":32,"line":112},[30,7205,7206],{"class":379},"    \u002F\u002F利用指针遍历数组\n",[30,7208,7209,7211,7213,7216,7218],{"class":32,"line":123},[30,7210,2167],{"class":317},[30,7212,6700],{"class":317},[30,7214,7215],{"class":321},"p2",[30,7217,367],{"class":317},[30,7219,7220],{"class":321},"arr;\n",[30,7222,7223,7225,7227,7229,7231,7233,7235,7237,7239,7241,7243,7245],{"class":32,"line":131},[30,7224,3383],{"class":317},[30,7226,1841],{"class":321},[30,7228,325],{"class":317},[30,7230,3214],{"class":321},[30,7232,367],{"class":317},[30,7234,511],{"class":40},[30,7236,3221],{"class":321},[30,7238,1230],{"class":317},[30,7240,766],{"class":40},[30,7242,3221],{"class":321},[30,7244,2474],{"class":317},[30,7246,328],{"class":321},[30,7248,7249],{"class":32,"line":142},[30,7250,2212],{"class":321},[30,7252,7253,7255,7257,7259,7261],{"class":32,"line":1811},[30,7254,3633],{"class":321},[30,7256,6601],{"class":317},[30,7258,7215],{"class":321},[30,7260,1363],{"class":317},[30,7262,1385],{"class":321},[30,7264,7265,7268,7270],{"class":32,"line":1825},[30,7266,7267],{"class":321},"        p2",[30,7269,2474],{"class":317},[30,7271,1480],{"class":321},[30,7273,7274],{"class":32,"line":1830},[30,7275,2369],{"class":321},[30,7277,7278],{"class":32,"line":1836},[30,7279,1751],{"class":321},[15,7281,7283],{"id":7282},"_37指针和函数","3.7指针和函数",[157,7285,7286],{},"利用指针做函数参数，可以修改实参的值",[157,7288,7289],{},"值传递：只改变形参，不改变实参",[157,7291,7292],{},"地址传递：",[20,7294,7296],{"className":308,"code":7295,"language":310,"meta":25,"style":25},"void swap(int *p1,int *p2)\n{\n    int temp=*p1;\n    *p1=*p2;\n    *p2=temp;\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    \u002F\u002F地址传递\n    swap(&a,&b);\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F20\n    cout\u003C\u003Cb\u003C\u003Cendl;\u002F\u002F10\n}\n",[27,7297,7298,7323,7327,7339,7350,7360,7364,7372,7376,7388,7400,7405,7421,7436,7451],{"__ignoreMap":25},[30,7299,7300,7302,7304,7306,7308,7310,7313,7315,7317,7319,7321],{"class":32,"line":33},[30,7301,5546],{"class":317},[30,7303,5549],{"class":36},[30,7305,322],{"class":321},[30,7307,325],{"class":317},[30,7309,6700],{"class":317},[30,7311,7312],{"class":5398},"p1",[30,7314,698],{"class":321},[30,7316,325],{"class":317},[30,7318,6700],{"class":317},[30,7320,7215],{"class":5398},[30,7322,328],{"class":321},[30,7324,7325],{"class":32,"line":44},[30,7326,1732],{"class":321},[30,7328,7329,7331,7333,7336],{"class":32,"line":52},[30,7330,2167],{"class":317},[30,7332,4437],{"class":321},[30,7334,7335],{"class":317},"=*",[30,7337,7338],{"class":321},"p1;\n",[30,7340,7341,7343,7345,7347],{"class":32,"line":60},[30,7342,6585],{"class":317},[30,7344,7312],{"class":321},[30,7346,7335],{"class":317},[30,7348,7349],{"class":321},"p2;\n",[30,7351,7352,7354,7356,7358],{"class":32,"line":68},[30,7353,6585],{"class":317},[30,7355,7215],{"class":321},[30,7357,367],{"class":317},[30,7359,4462],{"class":321},[30,7361,7362],{"class":32,"line":80},[30,7363,1751],{"class":321},[30,7365,7366,7368,7370],{"class":32,"line":88},[30,7367,325],{"class":317},[30,7369,2155],{"class":36},[30,7371,2158],{"class":321},[30,7373,7374],{"class":32,"line":96},[30,7375,1732],{"class":321},[30,7377,7378,7380,7382,7384,7386],{"class":32,"line":104},[30,7379,2167],{"class":317},[30,7381,1585],{"class":321},[30,7383,367],{"class":317},[30,7385,766],{"class":40},[30,7387,1480],{"class":321},[30,7389,7390,7392,7394,7396,7398],{"class":32,"line":112},[30,7391,2167],{"class":317},[30,7393,3015],{"class":321},[30,7395,367],{"class":317},[30,7397,1020],{"class":40},[30,7399,1480],{"class":321},[30,7401,7402],{"class":32,"line":123},[30,7403,7404],{"class":379},"    \u002F\u002F地址传递\n",[30,7406,7407,7409,7411,7413,7416,7418],{"class":32,"line":131},[30,7408,5743],{"class":36},[30,7410,322],{"class":321},[30,7412,673],{"class":317},[30,7414,7415],{"class":321},"a,",[30,7417,673],{"class":317},[30,7419,7420],{"class":321},"b);\n",[30,7422,7423,7425,7427,7429,7431,7433],{"class":32,"line":142},[30,7424,1737],{"class":321},[30,7426,1363],{"class":317},[30,7428,558],{"class":321},[30,7430,1363],{"class":317},[30,7432,1428],{"class":321},[30,7434,7435],{"class":379},"\u002F\u002F20\n",[30,7437,7438,7440,7442,7444,7446,7448],{"class":32,"line":1811},[30,7439,1737],{"class":321},[30,7441,1363],{"class":317},[30,7443,583],{"class":321},[30,7445,1363],{"class":317},[30,7447,1428],{"class":321},[30,7449,7450],{"class":379},"\u002F\u002F10\n",[30,7452,7453],{"class":32,"line":1825},[30,7454,1751],{"class":321},[157,7456,7457],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[15,7459,7461],{"id":7460},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[157,7463,7464],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[157,7466,7467,7468,7470],{},"例如数组：int arr",[30,7469,766],{},"={4,3,6,9,1,2,10,8,7,5}",[20,7472,7474],{"className":308,"code":7473,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\nvoid bubbleSort(int *p,int len)\n{\n    for(int i=0;i\u003Clen-1;i++)\n    {\n        for(int j=0;j\u003Clen-i-1;j++)\n        {\n            if(p[j]>p[j+1])\n            {\n                int temp=p[j];\n                p[j]=p[j+1];\n                p[j+1]=temp;\n            }\n        }\n    }\n}\n\nint main()\n{\n    \u002F\u002F 1.创建数组\n    int arr[10]={4,3,6,9,1,2,10,8,7,5};\n    int len=10;\n    int *p=arr;\n    \u002F\u002F 2.创建函数，实现冒泡排序\n    bubbleSort(p,len);\n\n    \u002F\u002F 3.打印排序后的数组\n    for (int i=0; i\u003Clen; i++)\n    {\n        cout\u003C\u003C*p\u003C\u003C\"\";\n        p++;\n    }\n}\n",[27,7475,7476,7482,7492,7516,7520,7551,7555,7589,7593,7611,7615,7626,7641,7656,7660,7664,7668,7672,7676,7684,7688,7693,7747,7759,7771,7776,7784,7788,7793,7818,7822,7837,7846,7850],{"__ignoreMap":25},[30,7477,7478,7480],{"class":32,"line":33},[30,7479,2132],{"class":317},[30,7481,2135],{"class":74},[30,7483,7484,7486,7488,7490],{"class":32,"line":44},[30,7485,2140],{"class":317},[30,7487,2143],{"class":317},[30,7489,2146],{"class":36},[30,7491,1480],{"class":321},[30,7493,7494,7496,7499,7501,7503,7505,7507,7509,7511,7514],{"class":32,"line":52},[30,7495,5546],{"class":317},[30,7497,7498],{"class":36}," bubbleSort",[30,7500,322],{"class":321},[30,7502,325],{"class":317},[30,7504,6700],{"class":317},[30,7506,157],{"class":5398},[30,7508,698],{"class":321},[30,7510,325],{"class":317},[30,7512,7513],{"class":5398}," len",[30,7515,328],{"class":321},[30,7517,7518],{"class":32,"line":60},[30,7519,1732],{"class":321},[30,7521,7522,7524,7526,7528,7530,7532,7534,7536,7538,7541,7543,7545,7547,7549],{"class":32,"line":68},[30,7523,3383],{"class":317},[30,7525,322],{"class":321},[30,7527,325],{"class":317},[30,7529,3214],{"class":321},[30,7531,367],{"class":317},[30,7533,511],{"class":40},[30,7535,3221],{"class":321},[30,7537,1230],{"class":317},[30,7539,7540],{"class":321},"len",[30,7542,852],{"class":317},[30,7544,537],{"class":40},[30,7546,3221],{"class":321},[30,7548,2474],{"class":317},[30,7550,328],{"class":321},[30,7552,7553],{"class":32,"line":80},[30,7554,2212],{"class":321},[30,7556,7557,7559,7561,7563,7565,7567,7569,7571,7573,7575,7577,7579,7581,7583,7585,7587],{"class":32,"line":88},[30,7558,3585],{"class":317},[30,7560,322],{"class":321},[30,7562,325],{"class":317},[30,7564,3592],{"class":321},[30,7566,367],{"class":317},[30,7568,511],{"class":40},[30,7570,3599],{"class":321},[30,7572,1230],{"class":317},[30,7574,7540],{"class":321},[30,7576,852],{"class":317},[30,7578,761],{"class":321},[30,7580,852],{"class":317},[30,7582,537],{"class":40},[30,7584,3599],{"class":321},[30,7586,2474],{"class":317},[30,7588,328],{"class":321},[30,7590,7591],{"class":32,"line":96},[30,7592,2692],{"class":321},[30,7594,7595,7597,7600,7602,7605,7607,7609],{"class":32,"line":104},[30,7596,4824],{"class":317},[30,7598,7599],{"class":321},"(p[j]",[30,7601,1280],{"class":317},[30,7603,7604],{"class":321},"p[j",[30,7606,801],{"class":317},[30,7608,537],{"class":40},[30,7610,4839],{"class":321},[30,7612,7613],{"class":32,"line":112},[30,7614,4844],{"class":321},[30,7616,7617,7619,7621,7623],{"class":32,"line":123},[30,7618,4849],{"class":317},[30,7620,4437],{"class":321},[30,7622,367],{"class":317},[30,7624,7625],{"class":321},"p[j];\n",[30,7627,7628,7631,7633,7635,7637,7639],{"class":32,"line":131},[30,7629,7630],{"class":321},"                p[j]",[30,7632,367],{"class":317},[30,7634,7604],{"class":321},[30,7636,801],{"class":317},[30,7638,537],{"class":40},[30,7640,4872],{"class":321},[30,7642,7643,7646,7648,7650,7652,7654],{"class":32,"line":142},[30,7644,7645],{"class":321},"                p[j",[30,7647,801],{"class":317},[30,7649,537],{"class":40},[30,7651,1260],{"class":321},[30,7653,367],{"class":317},[30,7655,4462],{"class":321},[30,7657,7658],{"class":32,"line":1811},[30,7659,4892],{"class":321},[30,7661,7662],{"class":32,"line":1825},[30,7663,2711],{"class":321},[30,7665,7666],{"class":32,"line":1830},[30,7667,2369],{"class":321},[30,7669,7670],{"class":32,"line":1836},[30,7671,1751],{"class":321},[30,7673,7674],{"class":32,"line":1857},[30,7675,2582],{"emptyLinePlaceholder":245},[30,7677,7678,7680,7682],{"class":32,"line":1862},[30,7679,325],{"class":317},[30,7681,2155],{"class":36},[30,7683,2158],{"class":321},[30,7685,7686],{"class":32,"line":1876},[30,7687,1732],{"class":321},[30,7689,7690],{"class":32,"line":1881},[30,7691,7692],{"class":379},"    \u002F\u002F 1.创建数组\n",[30,7694,7695,7697,7699,7701,7703,7705,7707,7709,7711,7713,7715,7717,7719,7721,7723,7725,7727,7729,7731,7733,7735,7737,7739,7741,7743,7745],{"class":32,"line":1910},[30,7696,2167],{"class":317},[30,7698,4144],{"class":321},[30,7700,766],{"class":40},[30,7702,1260],{"class":321},[30,7704,367],{"class":317},[30,7706,1216],{"class":321},[30,7708,613],{"class":40},[30,7710,698],{"class":321},[30,7712,392],{"class":40},[30,7714,698],{"class":321},[30,7716,664],{"class":40},[30,7718,698],{"class":321},[30,7720,740],{"class":40},[30,7722,698],{"class":321},[30,7724,537],{"class":40},[30,7726,698],{"class":321},[30,7728,398],{"class":40},[30,7730,698],{"class":321},[30,7732,766],{"class":40},[30,7734,698],{"class":321},[30,7736,715],{"class":40},[30,7738,698],{"class":321},[30,7740,689],{"class":40},[30,7742,698],{"class":321},[30,7744,639],{"class":40},[30,7746,4177],{"class":321},[30,7748,7749,7751,7753,7755,7757],{"class":32,"line":1915},[30,7750,2167],{"class":317},[30,7752,7513],{"class":321},[30,7754,367],{"class":317},[30,7756,766],{"class":40},[30,7758,1480],{"class":321},[30,7760,7761,7763,7765,7767,7769],{"class":32,"line":1932},[30,7762,2167],{"class":317},[30,7764,6700],{"class":317},[30,7766,157],{"class":321},[30,7768,367],{"class":317},[30,7770,7220],{"class":321},[30,7772,7773],{"class":32,"line":1937},[30,7774,7775],{"class":379},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[30,7777,7778,7781],{"class":32,"line":1942},[30,7779,7780],{"class":36},"    bubbleSort",[30,7782,7783],{"class":321},"(p,len);\n",[30,7785,7786],{"class":32,"line":1947},[30,7787,2582],{"emptyLinePlaceholder":245},[30,7789,7790],{"class":32,"line":1961},[30,7791,7792],{"class":379},"    \u002F\u002F 3.打印排序后的数组\n",[30,7794,7795,7797,7799,7801,7803,7805,7807,7809,7811,7814,7816],{"class":32,"line":1966},[30,7796,3383],{"class":317},[30,7798,1841],{"class":321},[30,7800,325],{"class":317},[30,7802,3214],{"class":321},[30,7804,367],{"class":317},[30,7806,511],{"class":40},[30,7808,3396],{"class":321},[30,7810,1230],{"class":317},[30,7812,7813],{"class":321},"len; i",[30,7815,2474],{"class":317},[30,7817,328],{"class":321},[30,7819,7820],{"class":32,"line":2759},[30,7821,2212],{"class":321},[30,7823,7824,7826,7828,7830,7832,7835],{"class":32,"line":2773},[30,7825,3633],{"class":321},[30,7827,6601],{"class":317},[30,7829,157],{"class":321},[30,7831,1363],{"class":317},[30,7833,7834],{"class":74},"\"\"",[30,7836,1480],{"class":321},[30,7838,7839,7842,7844],{"class":32,"line":2781},[30,7840,7841],{"class":321},"        p",[30,7843,2474],{"class":317},[30,7845,1480],{"class":321},[30,7847,7848],{"class":32,"line":2786},[30,7849,2369],{"class":321},[30,7851,7852],{"class":32,"line":2792},[30,7853,1751],{"class":321},[234,7855,7856],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":7858},[7859,7860,7861,7862,7863,7864,7865,7866],{"id":6465,"depth":44,"text":6466},{"id":6631,"depth":44,"text":6632},{"id":6787,"depth":44,"text":6788},{"id":6865,"depth":44,"text":6866},{"id":6944,"depth":44,"text":6945},{"id":7043,"depth":44,"text":7044},{"id":7282,"depth":44,"text":7283},{"id":7460,"depth":44,"text":7461},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6454,"description":6462},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7873,"title":7874,"body":7875,"description":7882,"extension":243,"meta":10856,"navigation":245,"path":10857,"seo":10858,"stem":10859,"__hash__":10860},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7876,"toc":10847},[7877,7880,7883,7887,7890,7893,7904,8242,8245,8249,8252,8259,8514,8518,8521,8524,8679,8683,8686,8689,8895,8899,8902,9205,9208,9216,9220,9223,9374,9376,9387,9444,9448,9453,10110,10118,10121,10215,10218,10838,10844],[10,7878,7874],{"id":7879},"_4结构体",[157,7881,7882],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[15,7884,7886],{"id":7885},"_41结构体定义与使用","4.1结构体定义与使用",[157,7888,7889],{},"语法：struct 结构体名 {结构体成员列表}；",[157,7891,7892],{},"通过结构体创建变量的方式：",[147,7894,7895,7898,7901],{},[150,7896,7897],{},"struct 结构体名 变量名",[150,7899,7900],{},"struct 结构体名 变量名={成员1值，成员2值...}",[150,7902,7903],{},"定义结构体时顺便创建变量",[20,7905,7907],{"className":308,"code":7906,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\nstruct Student\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n};\nstruct School\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n} s3; \u002F\u002F创建结构体时就创建了变量\nint main()\n{\n    \u002F\u002F2.通过学生类型创建具体学生\n    \u002F\u002F2.1 struct Student s1;\n    struct Student s1;\n    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n    s1.name=\"张三\";\n    s1.age=18;\n    s1.score=66;\n    \u002F\u002F输出结果\n    cout\u003C\u003Cs1.name\u003C\u003Cs1.age\u003C\u003Cs1.score\u003C\u003Cendl;\n\n    \u002F\u002F2.2 struct Student s2={...}\n    struct Student s2={\"王五\",18,66};\n\n    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n    s3.name=\"1\";\n    s3.age=18;\n    s3.score=20;\n}\n",[27,7908,7909,7915,7925,7932,7937,7945,7949,7954,7958,7963,7968,7973,7980,7985,7992,7996,8003,8007,8011,8015,8019,8023,8027,8033,8037,8043,8051,8059,8063,8068,8073,8084,8089,8101,8112,8123,8128,8152,8157,8163,8190,8195,8201,8213,8225,8237],{"__ignoreMap":25},[30,7910,7911,7913],{"class":32,"line":33},[30,7912,2132],{"class":317},[30,7914,2135],{"class":74},[30,7916,7917,7919,7921,7923],{"class":32,"line":44},[30,7918,2140],{"class":317},[30,7920,2143],{"class":317},[30,7922,2146],{"class":36},[30,7924,1480],{"class":321},[30,7926,7927,7929],{"class":32,"line":52},[30,7928,2132],{"class":317},[30,7930,7931],{"class":74},"\u003Cstring>\n",[30,7933,7934],{"class":32,"line":60},[30,7935,7936],{"class":379},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[30,7938,7939,7942],{"class":32,"line":68},[30,7940,7941],{"class":317},"struct",[30,7943,7944],{"class":36}," Student\n",[30,7946,7947],{"class":32,"line":80},[30,7948,1732],{"class":321},[30,7950,7951],{"class":32,"line":88},[30,7952,7953],{"class":379},"    \u002F\u002F成员列表\n",[30,7955,7956],{"class":32,"line":96},[30,7957,2582],{"emptyLinePlaceholder":245},[30,7959,7960],{"class":32,"line":104},[30,7961,7962],{"class":379},"    \u002F\u002F姓名\n",[30,7964,7965],{"class":32,"line":112},[30,7966,7967],{"class":321},"    string name;\n",[30,7969,7970],{"class":32,"line":123},[30,7971,7972],{"class":379},"    \u002F\u002F年龄\n",[30,7974,7975,7977],{"class":32,"line":131},[30,7976,2167],{"class":317},[30,7978,7979],{"class":321}," age;\n",[30,7981,7982],{"class":32,"line":142},[30,7983,7984],{"class":379},"    \u002F\u002F分数\n",[30,7986,7987,7989],{"class":32,"line":1811},[30,7988,2167],{"class":317},[30,7990,7991],{"class":321}," score;\n",[30,7993,7994],{"class":32,"line":1825},[30,7995,4177],{"class":321},[30,7997,7998,8000],{"class":32,"line":1830},[30,7999,7941],{"class":317},[30,8001,8002],{"class":36}," School\n",[30,8004,8005],{"class":32,"line":1836},[30,8006,1732],{"class":321},[30,8008,8009],{"class":32,"line":1857},[30,8010,7953],{"class":379},[30,8012,8013],{"class":32,"line":1862},[30,8014,2582],{"emptyLinePlaceholder":245},[30,8016,8017],{"class":32,"line":1876},[30,8018,7962],{"class":379},[30,8020,8021],{"class":32,"line":1881},[30,8022,7967],{"class":321},[30,8024,8025],{"class":32,"line":1910},[30,8026,7972],{"class":379},[30,8028,8029,8031],{"class":32,"line":1915},[30,8030,2167],{"class":317},[30,8032,7979],{"class":321},[30,8034,8035],{"class":32,"line":1932},[30,8036,7984],{"class":379},[30,8038,8039,8041],{"class":32,"line":1937},[30,8040,2167],{"class":317},[30,8042,7991],{"class":321},[30,8044,8045,8048],{"class":32,"line":1942},[30,8046,8047],{"class":321},"} s3;",[30,8049,8050],{"class":379}," \u002F\u002F创建结构体时就创建了变量\n",[30,8052,8053,8055,8057],{"class":32,"line":1947},[30,8054,325],{"class":317},[30,8056,2155],{"class":36},[30,8058,2158],{"class":321},[30,8060,8061],{"class":32,"line":1961},[30,8062,1732],{"class":321},[30,8064,8065],{"class":32,"line":1966},[30,8066,8067],{"class":379},"    \u002F\u002F2.通过学生类型创建具体学生\n",[30,8069,8070],{"class":32,"line":2759},[30,8071,8072],{"class":379},"    \u002F\u002F2.1 struct Student s1;\n",[30,8074,8075,8078,8081],{"class":32,"line":2773},[30,8076,8077],{"class":317},"    struct",[30,8079,8080],{"class":36}," Student",[30,8082,8083],{"class":321}," s1;\n",[30,8085,8086],{"class":32,"line":2781},[30,8087,8088],{"class":379},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[30,8090,8091,8094,8096,8099],{"class":32,"line":2786},[30,8092,8093],{"class":321},"    s1.name",[30,8095,367],{"class":317},[30,8097,8098],{"class":74},"\"张三\"",[30,8100,1480],{"class":321},[30,8102,8103,8106,8108,8110],{"class":32,"line":2792},[30,8104,8105],{"class":321},"    s1.age",[30,8107,367],{"class":317},[30,8109,970],{"class":40},[30,8111,1480],{"class":321},[30,8113,8114,8117,8119,8121],{"class":32,"line":2798},[30,8115,8116],{"class":321},"    s1.score",[30,8118,367],{"class":317},[30,8120,574],{"class":40},[30,8122,1480],{"class":321},[30,8124,8125],{"class":32,"line":2803},[30,8126,8127],{"class":379},"    \u002F\u002F输出结果\n",[30,8129,8131,8133,8135,8138,8140,8143,8145,8148,8150],{"class":32,"line":8130},37,[30,8132,1737],{"class":321},[30,8134,1363],{"class":317},[30,8136,8137],{"class":321},"s1.name",[30,8139,1363],{"class":317},[30,8141,8142],{"class":321},"s1.age",[30,8144,1363],{"class":317},[30,8146,8147],{"class":321},"s1.score",[30,8149,1363],{"class":317},[30,8151,1385],{"class":321},[30,8153,8155],{"class":32,"line":8154},38,[30,8156,2582],{"emptyLinePlaceholder":245},[30,8158,8160],{"class":32,"line":8159},39,[30,8161,8162],{"class":379},"    \u002F\u002F2.2 struct Student s2={...}\n",[30,8164,8166,8168,8170,8173,8175,8177,8180,8182,8184,8186,8188],{"class":32,"line":8165},40,[30,8167,8077],{"class":317},[30,8169,8080],{"class":36},[30,8171,8172],{"class":321}," s2",[30,8174,367],{"class":317},[30,8176,1216],{"class":321},[30,8178,8179],{"class":74},"\"王五\"",[30,8181,698],{"class":321},[30,8183,970],{"class":40},[30,8185,698],{"class":321},[30,8187,574],{"class":40},[30,8189,4177],{"class":321},[30,8191,8193],{"class":32,"line":8192},41,[30,8194,2582],{"emptyLinePlaceholder":245},[30,8196,8198],{"class":32,"line":8197},42,[30,8199,8200],{"class":379},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[30,8202,8204,8207,8209,8211],{"class":32,"line":8203},43,[30,8205,8206],{"class":321},"    s3.name",[30,8208,367],{"class":317},[30,8210,3860],{"class":74},[30,8212,1480],{"class":321},[30,8214,8216,8219,8221,8223],{"class":32,"line":8215},44,[30,8217,8218],{"class":321},"    s3.age",[30,8220,367],{"class":317},[30,8222,970],{"class":40},[30,8224,1480],{"class":321},[30,8226,8228,8231,8233,8235],{"class":32,"line":8227},45,[30,8229,8230],{"class":321},"    s3.score",[30,8232,367],{"class":317},[30,8234,1020],{"class":40},[30,8236,1480],{"class":321},[30,8238,8240],{"class":32,"line":8239},46,[30,8241,1751],{"class":321},[157,8243,8244],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[15,8246,8248],{"id":8247},"_42结构体数组","4.2结构体数组",[157,8250,8251],{},"将自定义的结构体放入到数组中方便维护",[157,8253,8254,8255,8258],{},"语法：struct 结构体名 数组名",[30,8256,8257],{},"元素个数","={ {}，{},...{} };",[20,8260,8262],{"className":308,"code":8261,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n\n};\nint main()\n{\n    \u002F\u002F2.创建结构体数组\n    struct Student stuArray[2]=\n    {\n        {\"张三\",18,100},\n        {\"1\",15,15}\n    }\n    \u002F\u002F3.给结构体数组中的元素赋值\n    stuArray[1].name=\"2\";\n    stuArray[1].age=2;\n    stuArray[1].score=2;\n    \u002F\u002F4.遍历结构体数组\n    for (int i=0;i\u003C2;i++)\n    {\n        cout\u003C\u003CstuArray[i].name\u003C\u003CstuArray[i].age\u003C\u003CstuArray[i].score\u003C\u003Cendl;\n    }\n}\n",[27,8263,8264,8270,8280,8286,8291,8297,8301,8305,8311,8317,8321,8325,8333,8337,8342,8357,8361,8377,8393,8397,8402,8418,8433,8448,8453,8479,8483,8506,8510],{"__ignoreMap":25},[30,8265,8266,8268],{"class":32,"line":33},[30,8267,2132],{"class":317},[30,8269,2135],{"class":74},[30,8271,8272,8274,8276,8278],{"class":32,"line":44},[30,8273,2140],{"class":317},[30,8275,2143],{"class":317},[30,8277,2146],{"class":36},[30,8279,1480],{"class":321},[30,8281,8282,8284],{"class":32,"line":52},[30,8283,2132],{"class":317},[30,8285,7931],{"class":74},[30,8287,8288],{"class":32,"line":60},[30,8289,8290],{"class":379},"\u002F\u002F1.定义结构体\n",[30,8292,8293,8295],{"class":32,"line":68},[30,8294,7941],{"class":317},[30,8296,7944],{"class":36},[30,8298,8299],{"class":32,"line":80},[30,8300,1732],{"class":321},[30,8302,8303],{"class":32,"line":88},[30,8304,7967],{"class":321},[30,8306,8307,8309],{"class":32,"line":96},[30,8308,2167],{"class":317},[30,8310,7979],{"class":321},[30,8312,8313,8315],{"class":32,"line":104},[30,8314,2167],{"class":317},[30,8316,7991],{"class":321},[30,8318,8319],{"class":32,"line":112},[30,8320,2582],{"emptyLinePlaceholder":245},[30,8322,8323],{"class":32,"line":123},[30,8324,4177],{"class":321},[30,8326,8327,8329,8331],{"class":32,"line":131},[30,8328,325],{"class":317},[30,8330,2155],{"class":36},[30,8332,2158],{"class":321},[30,8334,8335],{"class":32,"line":142},[30,8336,1732],{"class":321},[30,8338,8339],{"class":32,"line":1811},[30,8340,8341],{"class":379},"    \u002F\u002F2.创建结构体数组\n",[30,8343,8344,8346,8348,8351,8353,8355],{"class":32,"line":1825},[30,8345,8077],{"class":317},[30,8347,8080],{"class":36},[30,8349,8350],{"class":321}," stuArray[",[30,8352,398],{"class":40},[30,8354,1260],{"class":321},[30,8356,5090],{"class":317},[30,8358,8359],{"class":32,"line":1830},[30,8360,2212],{"class":321},[30,8362,8363,8365,8367,8369,8371,8373,8375],{"class":32,"line":1836},[30,8364,5099],{"class":321},[30,8366,8098],{"class":74},[30,8368,698],{"class":321},[30,8370,970],{"class":40},[30,8372,698],{"class":321},[30,8374,631],{"class":40},[30,8376,5112],{"class":321},[30,8378,8379,8381,8383,8385,8387,8389,8391],{"class":32,"line":1857},[30,8380,5099],{"class":321},[30,8382,3860],{"class":74},[30,8384,698],{"class":321},[30,8386,895],{"class":40},[30,8388,698],{"class":321},[30,8390,895],{"class":40},[30,8392,1751],{"class":321},[30,8394,8395],{"class":32,"line":1862},[30,8396,2369],{"class":321},[30,8398,8399],{"class":32,"line":1876},[30,8400,8401],{"class":379},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[30,8403,8404,8407,8409,8412,8414,8416],{"class":32,"line":1881},[30,8405,8406],{"class":321},"    stuArray[",[30,8408,537],{"class":40},[30,8410,8411],{"class":321},"].name",[30,8413,367],{"class":317},[30,8415,3883],{"class":74},[30,8417,1480],{"class":321},[30,8419,8420,8422,8424,8427,8429,8431],{"class":32,"line":1910},[30,8421,8406],{"class":321},[30,8423,537],{"class":40},[30,8425,8426],{"class":321},"].age",[30,8428,367],{"class":317},[30,8430,398],{"class":40},[30,8432,1480],{"class":321},[30,8434,8435,8437,8439,8442,8444,8446],{"class":32,"line":1915},[30,8436,8406],{"class":321},[30,8438,537],{"class":40},[30,8440,8441],{"class":321},"].score",[30,8443,367],{"class":317},[30,8445,398],{"class":40},[30,8447,1480],{"class":321},[30,8449,8450],{"class":32,"line":1932},[30,8451,8452],{"class":379},"    \u002F\u002F4.遍历结构体数组\n",[30,8454,8455,8457,8459,8461,8463,8465,8467,8469,8471,8473,8475,8477],{"class":32,"line":1937},[30,8456,3383],{"class":317},[30,8458,1841],{"class":321},[30,8460,325],{"class":317},[30,8462,3214],{"class":321},[30,8464,367],{"class":317},[30,8466,511],{"class":40},[30,8468,3221],{"class":321},[30,8470,1230],{"class":317},[30,8472,398],{"class":40},[30,8474,3221],{"class":321},[30,8476,2474],{"class":317},[30,8478,328],{"class":321},[30,8480,8481],{"class":32,"line":1942},[30,8482,2212],{"class":321},[30,8484,8485,8487,8489,8492,8494,8497,8499,8502,8504],{"class":32,"line":1947},[30,8486,3633],{"class":321},[30,8488,1363],{"class":317},[30,8490,8491],{"class":321},"stuArray[i].name",[30,8493,1363],{"class":317},[30,8495,8496],{"class":321},"stuArray[i].age",[30,8498,1363],{"class":317},[30,8500,8501],{"class":321},"stuArray[i].score",[30,8503,1363],{"class":317},[30,8505,1385],{"class":321},[30,8507,8508],{"class":32,"line":1961},[30,8509,2369],{"class":321},[30,8511,8512],{"class":32,"line":1966},[30,8513,1751],{"class":321},[15,8515,8517],{"id":8516},"_43结构体指针","4.3结构体指针",[157,8519,8520],{},"作用：通过指针访问结构体中的成员",[157,8522,8523],{},"利用操作符->可以通过结构体指针访问结构体属性",[20,8525,8527],{"className":308,"code":8526,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\nint main()\n{\n    \u002F\u002F创建学生结构体变量\n    struct Student s={\"张三\",18,200};\n    \u002F\u002F通过指针指向结构体变量\n    struct Student *p=&s\n    \u002F\u002F通过指针访问结构体变量中的数据\n    cout\u003C\u003Cp->name\u003C\u003Cp->age\u003C\u003Cp->score\u003C\u003Cendl;\n}\n",[27,8528,8529,8535,8545,8551,8555,8561,8565,8569,8575,8581,8585,8593,8597,8602,8627,8632,8647,8652,8675],{"__ignoreMap":25},[30,8530,8531,8533],{"class":32,"line":33},[30,8532,2132],{"class":317},[30,8534,2135],{"class":74},[30,8536,8537,8539,8541,8543],{"class":32,"line":44},[30,8538,2140],{"class":317},[30,8540,2143],{"class":317},[30,8542,2146],{"class":36},[30,8544,1480],{"class":321},[30,8546,8547,8549],{"class":32,"line":52},[30,8548,2132],{"class":317},[30,8550,7931],{"class":74},[30,8552,8553],{"class":32,"line":60},[30,8554,8290],{"class":379},[30,8556,8557,8559],{"class":32,"line":68},[30,8558,7941],{"class":317},[30,8560,7944],{"class":36},[30,8562,8563],{"class":32,"line":80},[30,8564,1732],{"class":321},[30,8566,8567],{"class":32,"line":88},[30,8568,7967],{"class":321},[30,8570,8571,8573],{"class":32,"line":96},[30,8572,2167],{"class":317},[30,8574,7979],{"class":321},[30,8576,8577,8579],{"class":32,"line":104},[30,8578,2167],{"class":317},[30,8580,7991],{"class":321},[30,8582,8583],{"class":32,"line":112},[30,8584,4177],{"class":321},[30,8586,8587,8589,8591],{"class":32,"line":123},[30,8588,325],{"class":317},[30,8590,2155],{"class":36},[30,8592,2158],{"class":321},[30,8594,8595],{"class":32,"line":131},[30,8596,1732],{"class":321},[30,8598,8599],{"class":32,"line":142},[30,8600,8601],{"class":379},"    \u002F\u002F创建学生结构体变量\n",[30,8603,8604,8606,8608,8611,8613,8615,8617,8619,8621,8623,8625],{"class":32,"line":1811},[30,8605,8077],{"class":317},[30,8607,8080],{"class":36},[30,8609,8610],{"class":321}," s",[30,8612,367],{"class":317},[30,8614,1216],{"class":321},[30,8616,8098],{"class":74},[30,8618,698],{"class":321},[30,8620,970],{"class":40},[30,8622,698],{"class":321},[30,8624,1905],{"class":40},[30,8626,4177],{"class":321},[30,8628,8629],{"class":32,"line":1825},[30,8630,8631],{"class":379},"    \u002F\u002F通过指针指向结构体变量\n",[30,8633,8634,8636,8638,8640,8642,8644],{"class":32,"line":1830},[30,8635,8077],{"class":317},[30,8637,8080],{"class":36},[30,8639,6700],{"class":317},[30,8641,157],{"class":321},[30,8643,6521],{"class":317},[30,8645,8646],{"class":321},"s\n",[30,8648,8649],{"class":32,"line":1836},[30,8650,8651],{"class":379},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[30,8653,8654,8656,8658,8661,8663,8666,8668,8671,8673],{"class":32,"line":1857},[30,8655,1737],{"class":321},[30,8657,1363],{"class":317},[30,8659,8660],{"class":321},"p->name",[30,8662,1363],{"class":317},[30,8664,8665],{"class":321},"p->age",[30,8667,1363],{"class":317},[30,8669,8670],{"class":321},"p->score",[30,8672,1363],{"class":317},[30,8674,1385],{"class":321},[30,8676,8677],{"class":32,"line":1862},[30,8678,1751],{"class":321},[15,8680,8682],{"id":8681},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[157,8684,8685],{},"作用：结构体中的成员可以是另一个结构体",[157,8687,8688],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[20,8690,8692],{"className":308,"code":8691,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F定义学生结构体\nstruct Student \n{\n    string name;\n    int age;\n    int score;\n}\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    int id;\n    string name;\n    int age;\n    Student stu;\n}\nint main() \n{\n    \u002F\u002F结构体嵌套结构体\n    \u002F\u002F创建老师\n    Teacher t;\n    t.id=100;\n    t.name=\"老王\";\n    t.age=18;\n    t.stu.name=\"小王\"；\n    t.stu.age=20;\n    t.stu.score=6;\n}\n",[27,8693,8694,8700,8710,8716,8721,8729,8733,8737,8743,8749,8753,8758,8765,8769,8776,8780,8786,8791,8795,8803,8807,8812,8817,8822,8833,8845,8856,8869,8880,8891],{"__ignoreMap":25},[30,8695,8696,8698],{"class":32,"line":33},[30,8697,2132],{"class":317},[30,8699,2135],{"class":74},[30,8701,8702,8704,8706,8708],{"class":32,"line":44},[30,8703,2140],{"class":317},[30,8705,2143],{"class":317},[30,8707,2146],{"class":36},[30,8709,1480],{"class":321},[30,8711,8712,8714],{"class":32,"line":52},[30,8713,2132],{"class":317},[30,8715,7931],{"class":74},[30,8717,8718],{"class":32,"line":60},[30,8719,8720],{"class":379},"\u002F\u002F定义学生结构体\n",[30,8722,8723,8725,8727],{"class":32,"line":68},[30,8724,7941],{"class":317},[30,8726,8080],{"class":36},[30,8728,2856],{"class":321},[30,8730,8731],{"class":32,"line":80},[30,8732,1732],{"class":321},[30,8734,8735],{"class":32,"line":88},[30,8736,7967],{"class":321},[30,8738,8739,8741],{"class":32,"line":96},[30,8740,2167],{"class":317},[30,8742,7979],{"class":321},[30,8744,8745,8747],{"class":32,"line":104},[30,8746,2167],{"class":317},[30,8748,7991],{"class":321},[30,8750,8751],{"class":32,"line":112},[30,8752,1751],{"class":321},[30,8754,8755],{"class":32,"line":123},[30,8756,8757],{"class":379},"\u002F\u002F定义老师结构体\n",[30,8759,8760,8762],{"class":32,"line":131},[30,8761,7941],{"class":317},[30,8763,8764],{"class":36}," Teacher\n",[30,8766,8767],{"class":32,"line":142},[30,8768,1732],{"class":321},[30,8770,8771,8773],{"class":32,"line":1811},[30,8772,2167],{"class":317},[30,8774,8775],{"class":321}," id;\n",[30,8777,8778],{"class":32,"line":1825},[30,8779,7967],{"class":321},[30,8781,8782,8784],{"class":32,"line":1830},[30,8783,2167],{"class":317},[30,8785,7979],{"class":321},[30,8787,8788],{"class":32,"line":1836},[30,8789,8790],{"class":321},"    Student stu;\n",[30,8792,8793],{"class":32,"line":1857},[30,8794,1751],{"class":321},[30,8796,8797,8799,8801],{"class":32,"line":1862},[30,8798,325],{"class":317},[30,8800,2155],{"class":36},[30,8802,6160],{"class":321},[30,8804,8805],{"class":32,"line":1876},[30,8806,1732],{"class":321},[30,8808,8809],{"class":32,"line":1881},[30,8810,8811],{"class":379},"    \u002F\u002F结构体嵌套结构体\n",[30,8813,8814],{"class":32,"line":1910},[30,8815,8816],{"class":379},"    \u002F\u002F创建老师\n",[30,8818,8819],{"class":32,"line":1915},[30,8820,8821],{"class":321},"    Teacher t;\n",[30,8823,8824,8827,8829,8831],{"class":32,"line":1932},[30,8825,8826],{"class":321},"    t.id",[30,8828,367],{"class":317},[30,8830,631],{"class":40},[30,8832,1480],{"class":321},[30,8834,8835,8838,8840,8843],{"class":32,"line":1937},[30,8836,8837],{"class":321},"    t.name",[30,8839,367],{"class":317},[30,8841,8842],{"class":74},"\"老王\"",[30,8844,1480],{"class":321},[30,8846,8847,8850,8852,8854],{"class":32,"line":1942},[30,8848,8849],{"class":321},"    t.age",[30,8851,367],{"class":317},[30,8853,970],{"class":40},[30,8855,1480],{"class":321},[30,8857,8858,8861,8863,8866],{"class":32,"line":1947},[30,8859,8860],{"class":321},"    t.stu.name",[30,8862,367],{"class":317},[30,8864,8865],{"class":74},"\"小王\"",[30,8867,8868],{"class":321},"；\n",[30,8870,8871,8874,8876,8878],{"class":32,"line":1961},[30,8872,8873],{"class":321},"    t.stu.age",[30,8875,367],{"class":317},[30,8877,1020],{"class":40},[30,8879,1480],{"class":321},[30,8881,8882,8885,8887,8889],{"class":32,"line":1966},[30,8883,8884],{"class":321},"    t.stu.score",[30,8886,367],{"class":317},[30,8888,664],{"class":40},[30,8890,1480],{"class":321},[30,8892,8893],{"class":32,"line":2759},[30,8894,1751],{"class":321},[15,8896,8898],{"id":8897},"_45结构体做函数参数","4.5结构体做函数参数",[157,8900,8901],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[20,8903,8905],{"className":308,"code":8904,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\n\u002F\u002F打印学生信息的函数\n\u002F\u002F值传递\nvoid printStudent1(struct Student s)\n{\n    cout \u003C\u003C s.name \u003C\u003C \" \" \u003C\u003C s.age \u003C\u003C \" \" \u003C\u003C s.score \u003C\u003C endl;\n}\n\u002F\u002F地址传递\nvoid printStudent2(struct Student *s)\n{\n    cout \u003C\u003C s->name \u003C\u003C \" \" \u003C\u003C s->age \u003C\u003C \" \" \u003C\u003C s->score \u003C\u003C endl;\n}\nint main()\n{\n    struct Student s;\n    s.name = \"张三\";\n    s.age = 20;\n    s.score = 85;\n    cout\u003C\u003C\"值传递:\"\u003C\u003Cendl;\n    printStudent1(s);\n    cout\u003C\u003C\"地址传递:\"\u003C\u003Cendl;\n    printStudent2(&s); \n    return 0;\n}\n",[27,8906,8907,8913,8923,8929,8935,8939,8943,8949,8955,8959,8964,8969,8986,8990,9023,9027,9032,9051,9055,9086,9090,9098,9102,9111,9123,9135,9147,9160,9168,9181,9193,9201],{"__ignoreMap":25},[30,8908,8909,8911],{"class":32,"line":33},[30,8910,2132],{"class":317},[30,8912,2135],{"class":74},[30,8914,8915,8917,8919,8921],{"class":32,"line":44},[30,8916,2140],{"class":317},[30,8918,2143],{"class":317},[30,8920,2146],{"class":36},[30,8922,1480],{"class":321},[30,8924,8925,8927],{"class":32,"line":52},[30,8926,2132],{"class":317},[30,8928,7931],{"class":74},[30,8930,8931,8933],{"class":32,"line":60},[30,8932,7941],{"class":317},[30,8934,7944],{"class":36},[30,8936,8937],{"class":32,"line":68},[30,8938,1732],{"class":321},[30,8940,8941],{"class":32,"line":80},[30,8942,7967],{"class":321},[30,8944,8945,8947],{"class":32,"line":88},[30,8946,2167],{"class":317},[30,8948,7979],{"class":321},[30,8950,8951,8953],{"class":32,"line":96},[30,8952,2167],{"class":317},[30,8954,7991],{"class":321},[30,8956,8957],{"class":32,"line":104},[30,8958,4177],{"class":321},[30,8960,8961],{"class":32,"line":112},[30,8962,8963],{"class":379},"\u002F\u002F打印学生信息的函数\n",[30,8965,8966],{"class":32,"line":123},[30,8967,8968],{"class":379},"\u002F\u002F值传递\n",[30,8970,8971,8973,8976,8978,8980,8982,8984],{"class":32,"line":131},[30,8972,5546],{"class":317},[30,8974,8975],{"class":36}," printStudent1",[30,8977,322],{"class":321},[30,8979,7941],{"class":317},[30,8981,8080],{"class":36},[30,8983,8610],{"class":5398},[30,8985,328],{"class":321},[30,8987,8988],{"class":32,"line":142},[30,8989,1732],{"class":321},[30,8991,8992,8994,8996,8999,9001,9004,9006,9009,9011,9013,9015,9018,9020],{"class":32,"line":1811},[30,8993,6711],{"class":321},[30,8995,1363],{"class":317},[30,8997,8998],{"class":321}," s.name ",[30,9000,1363],{"class":317},[30,9002,9003],{"class":74}," \" \"",[30,9005,1631],{"class":317},[30,9007,9008],{"class":321}," s.age ",[30,9010,1363],{"class":317},[30,9012,9003],{"class":74},[30,9014,1631],{"class":317},[30,9016,9017],{"class":321}," s.score ",[30,9019,1363],{"class":317},[30,9021,9022],{"class":321}," endl;\n",[30,9024,9025],{"class":32,"line":1825},[30,9026,1751],{"class":321},[30,9028,9029],{"class":32,"line":1830},[30,9030,9031],{"class":379},"\u002F\u002F地址传递\n",[30,9033,9034,9036,9039,9041,9043,9045,9047,9049],{"class":32,"line":1836},[30,9035,5546],{"class":317},[30,9037,9038],{"class":36}," printStudent2",[30,9040,322],{"class":321},[30,9042,7941],{"class":317},[30,9044,8080],{"class":36},[30,9046,6700],{"class":317},[30,9048,1015],{"class":5398},[30,9050,328],{"class":321},[30,9052,9053],{"class":32,"line":1857},[30,9054,1732],{"class":321},[30,9056,9057,9059,9061,9064,9066,9068,9070,9073,9075,9077,9079,9082,9084],{"class":32,"line":1862},[30,9058,6711],{"class":321},[30,9060,1363],{"class":317},[30,9062,9063],{"class":321}," s->name ",[30,9065,1363],{"class":317},[30,9067,9003],{"class":74},[30,9069,1631],{"class":317},[30,9071,9072],{"class":321}," s->age ",[30,9074,1363],{"class":317},[30,9076,9003],{"class":74},[30,9078,1631],{"class":317},[30,9080,9081],{"class":321}," s->score ",[30,9083,1363],{"class":317},[30,9085,9022],{"class":321},[30,9087,9088],{"class":32,"line":1876},[30,9089,1751],{"class":321},[30,9091,9092,9094,9096],{"class":32,"line":1881},[30,9093,325],{"class":317},[30,9095,2155],{"class":36},[30,9097,2158],{"class":321},[30,9099,9100],{"class":32,"line":1910},[30,9101,1732],{"class":321},[30,9103,9104,9106,9108],{"class":32,"line":1915},[30,9105,8077],{"class":317},[30,9107,8080],{"class":36},[30,9109,9110],{"class":321}," s;\n",[30,9112,9113,9116,9118,9121],{"class":32,"line":1932},[30,9114,9115],{"class":321},"    s.name ",[30,9117,367],{"class":317},[30,9119,9120],{"class":74}," \"张三\"",[30,9122,1480],{"class":321},[30,9124,9125,9128,9130,9133],{"class":32,"line":1937},[30,9126,9127],{"class":321},"    s.age ",[30,9129,367],{"class":317},[30,9131,9132],{"class":40}," 20",[30,9134,1480],{"class":321},[30,9136,9137,9140,9142,9145],{"class":32,"line":1942},[30,9138,9139],{"class":321},"    s.score ",[30,9141,367],{"class":317},[30,9143,9144],{"class":40}," 85",[30,9146,1480],{"class":321},[30,9148,9149,9151,9153,9156,9158],{"class":32,"line":1947},[30,9150,1737],{"class":321},[30,9152,1363],{"class":317},[30,9154,9155],{"class":74},"\"值传递:\"",[30,9157,1363],{"class":317},[30,9159,1385],{"class":321},[30,9161,9162,9165],{"class":32,"line":1961},[30,9163,9164],{"class":36},"    printStudent1",[30,9166,9167],{"class":321},"(s);\n",[30,9169,9170,9172,9174,9177,9179],{"class":32,"line":1966},[30,9171,1737],{"class":321},[30,9173,1363],{"class":317},[30,9175,9176],{"class":74},"\"地址传递:\"",[30,9178,1363],{"class":317},[30,9180,1385],{"class":321},[30,9182,9183,9186,9188,9190],{"class":32,"line":2759},[30,9184,9185],{"class":36},"    printStudent2",[30,9187,322],{"class":321},[30,9189,673],{"class":317},[30,9191,9192],{"class":321},"s); \n",[30,9194,9195,9197,9199],{"class":32,"line":2773},[30,9196,4272],{"class":317},[30,9198,4275],{"class":40},[30,9200,1480],{"class":321},[30,9202,9203],{"class":32,"line":2781},[30,9204,1751],{"class":321},[157,9206,9207],{},"注意：",[147,9209,9210,9213],{},[150,9211,9212],{},"1.先定义结构体，不要在函数中写结构体的定义",[150,9214,9215],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[15,9217,9219],{"id":9218},"_46结构体中const使用场景","4.6结构体中const使用场景",[157,9221,9222],{},"用const防止误操作",[20,9224,9226],{"className":308,"code":9225,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nsctuct Student\n{\n    string name;\n    int age;\n    int score;\n};\nvoid printStudents(student s)\n{\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\nint main() \n{\n    Student s={\"张三\",18,18};\n    printStudent(s);\n\n}\n",[27,9227,9228,9234,9244,9250,9255,9259,9263,9269,9275,9279,9295,9299,9322,9326,9334,9338,9359,9366,9370],{"__ignoreMap":25},[30,9229,9230,9232],{"class":32,"line":33},[30,9231,2132],{"class":317},[30,9233,2135],{"class":74},[30,9235,9236,9238,9240,9242],{"class":32,"line":44},[30,9237,2140],{"class":317},[30,9239,2143],{"class":317},[30,9241,2146],{"class":36},[30,9243,1480],{"class":321},[30,9245,9246,9248],{"class":32,"line":52},[30,9247,2132],{"class":317},[30,9249,7931],{"class":74},[30,9251,9252],{"class":32,"line":60},[30,9253,9254],{"class":321},"sctuct Student\n",[30,9256,9257],{"class":32,"line":68},[30,9258,1732],{"class":321},[30,9260,9261],{"class":32,"line":80},[30,9262,7967],{"class":321},[30,9264,9265,9267],{"class":32,"line":88},[30,9266,2167],{"class":317},[30,9268,7979],{"class":321},[30,9270,9271,9273],{"class":32,"line":96},[30,9272,2167],{"class":317},[30,9274,7991],{"class":321},[30,9276,9277],{"class":32,"line":104},[30,9278,4177],{"class":321},[30,9280,9281,9283,9286,9288,9291,9293],{"class":32,"line":112},[30,9282,5546],{"class":317},[30,9284,9285],{"class":36}," printStudents",[30,9287,322],{"class":321},[30,9289,9290],{"class":36},"student",[30,9292,8610],{"class":5398},[30,9294,328],{"class":321},[30,9296,9297],{"class":32,"line":123},[30,9298,1732],{"class":321},[30,9300,9301,9303,9305,9308,9310,9313,9315,9318,9320],{"class":32,"line":131},[30,9302,1737],{"class":321},[30,9304,1363],{"class":317},[30,9306,9307],{"class":321},"s.name",[30,9309,1363],{"class":317},[30,9311,9312],{"class":321},"s.age",[30,9314,1363],{"class":317},[30,9316,9317],{"class":321},"s.score",[30,9319,1363],{"class":317},[30,9321,1385],{"class":321},[30,9323,9324],{"class":32,"line":142},[30,9325,1751],{"class":321},[30,9327,9328,9330,9332],{"class":32,"line":1811},[30,9329,325],{"class":317},[30,9331,2155],{"class":36},[30,9333,6160],{"class":321},[30,9335,9336],{"class":32,"line":1825},[30,9337,1732],{"class":321},[30,9339,9340,9343,9345,9347,9349,9351,9353,9355,9357],{"class":32,"line":1830},[30,9341,9342],{"class":321},"    Student s",[30,9344,367],{"class":317},[30,9346,1216],{"class":321},[30,9348,8098],{"class":74},[30,9350,698],{"class":321},[30,9352,970],{"class":40},[30,9354,698],{"class":321},[30,9356,970],{"class":40},[30,9358,4177],{"class":321},[30,9360,9361,9364],{"class":32,"line":1836},[30,9362,9363],{"class":36},"    printStudent",[30,9365,9167],{"class":321},[30,9367,9368],{"class":32,"line":1857},[30,9369,2582],{"emptyLinePlaceholder":245},[30,9371,9372],{"class":32,"line":1862},[30,9373,1751],{"class":321},[157,9375,9207],{},[147,9377,9378,9381,9384],{},[150,9379,9380],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[150,9382,9383],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[150,9385,9386],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[20,9388,9390],{"className":308,"code":9389,"language":310,"meta":25,"style":25},"void printStudents(const student *s)\n{\n    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\n",[27,9391,9392,9411,9415,9420,9440],{"__ignoreMap":25},[30,9393,9394,9396,9398,9400,9402,9405,9407,9409],{"class":32,"line":33},[30,9395,5546],{"class":317},[30,9397,9285],{"class":36},[30,9399,322],{"class":321},[30,9401,6974],{"class":317},[30,9403,9404],{"class":36}," student",[30,9406,6700],{"class":317},[30,9408,1015],{"class":5398},[30,9410,328],{"class":321},[30,9412,9413],{"class":32,"line":44},[30,9414,1732],{"class":321},[30,9416,9417],{"class":32,"line":52},[30,9418,9419],{"class":379},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[30,9421,9422,9424,9426,9428,9430,9432,9434,9436,9438],{"class":32,"line":60},[30,9423,1737],{"class":321},[30,9425,1363],{"class":317},[30,9427,9307],{"class":321},[30,9429,1363],{"class":317},[30,9431,9312],{"class":321},[30,9433,1363],{"class":317},[30,9435,9317],{"class":321},[30,9437,1363],{"class":317},[30,9439,1385],{"class":321},[30,9441,9442],{"class":32,"line":68},[30,9443,1751],{"class":321},[15,9445,9447],{"id":9446},"_47案例","4.7案例",[271,9449,9450],{},[150,9451,9452],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[20,9454,9456],{"className":308,"code":9455,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n#include\u003Cctime>\n\u002F\u002F定义学生结构体\nstruct Student\n{\n    string sName;\n    int age;\n    int score;\n};\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    string tName;\n    \u002F\u002F学生数组\n    struct Student sArray[5];\n};\n\u002F\u002F给老师和学生赋值的函数\nvoid allocateSpace(struct Teacher tArray[],int len)\n{\n    string nameSeed=\"ABCDE\";\n    for (int i = 0; i \u003C len; i++)\n    {\n        tArray[i].tName = \"Teacher_\";\n        tArray[i].tName +=nameSeed[i];\n\n        \u002F\u002F通过循环给每名老师带的学生赋值\n        for (int j = 0; j \u003C 5; j++)\n        {\n            tArray[i].sArray[j].sName = \"Student_\";\n            tArray[i].sArray[j].sName += nameSeed[j];\n            int random=rand()%60+40;\u002F\u002F40~99\n            tArray[i].sArray[j].age = 20;\n            tArray[i].sArray[j].score = random;\n        }\n    }\n}\n\u002F\u002F打印所有信息的函数\nvoid printInfo(struct Teacher tArray[], int len)\n{\n    for (int i = 0; i \u003C len; i++)\n    {\n        cout \u003C\u003C \"Teacher: \" \u003C\u003C tArray[i].tName \u003C\u003C endl;\n        for (int j = 0; j \u003C 5; j++)\n        {\n            cout \u003C\u003C \"\\tStudent: \" \u003C\u003C tArray[i].sArray[j].sName\u003C\u003Cendl;\n            cout \u003C\u003C \"\\tAge: \" \u003C\u003C tArray[i].sArray[j].age \u003C\u003C endl;\n            cout \u003C\u003C \"\\tScore: \" \u003C\u003C tArray[i].sArray[j].score \u003C\u003C endl;   \n        }\n    }\n}\nint main()\n{\n    \u002F\u002F随机数种子\n    srand((unsigned int)time(NULL));\n    \u002F\u002F1.创建3名老师的数组\n    struct Teacher tArray[3];\n    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n    int len = sizeof(tArray) \u002F sizeof(tArray[0]);\n    allocateSpace(tArray, len);\n    \u002F\u002F3.打印所有老师及所带的学生信息\n    printInfo(tArray, len);\n\n}\n",[27,9457,9458,9464,9474,9480,9487,9491,9497,9501,9506,9512,9518,9522,9526,9532,9536,9541,9546,9559,9563,9568,9594,9598,9610,9637,9641,9653,9663,9667,9672,9701,9705,9717,9726,9753,9764,9774,9778,9782,9786,9791,9815,9819,9843,9847,9866,9892,9896,9921,9944,9968,9973,9978,9983,9992,9997,10003,10024,10030,10044,10050,10077,10086,10092,10100,10105],{"__ignoreMap":25},[30,9459,9460,9462],{"class":32,"line":33},[30,9461,2132],{"class":317},[30,9463,2135],{"class":74},[30,9465,9466,9468,9470,9472],{"class":32,"line":44},[30,9467,2140],{"class":317},[30,9469,2143],{"class":317},[30,9471,2146],{"class":36},[30,9473,1480],{"class":321},[30,9475,9476,9478],{"class":32,"line":52},[30,9477,2132],{"class":317},[30,9479,7931],{"class":74},[30,9481,9482,9484],{"class":32,"line":60},[30,9483,2132],{"class":317},[30,9485,9486],{"class":74},"\u003Cctime>\n",[30,9488,9489],{"class":32,"line":68},[30,9490,8720],{"class":379},[30,9492,9493,9495],{"class":32,"line":80},[30,9494,7941],{"class":317},[30,9496,7944],{"class":36},[30,9498,9499],{"class":32,"line":88},[30,9500,1732],{"class":321},[30,9502,9503],{"class":32,"line":96},[30,9504,9505],{"class":321},"    string sName;\n",[30,9507,9508,9510],{"class":32,"line":104},[30,9509,2167],{"class":317},[30,9511,7979],{"class":321},[30,9513,9514,9516],{"class":32,"line":112},[30,9515,2167],{"class":317},[30,9517,7991],{"class":321},[30,9519,9520],{"class":32,"line":123},[30,9521,4177],{"class":321},[30,9523,9524],{"class":32,"line":131},[30,9525,8757],{"class":379},[30,9527,9528,9530],{"class":32,"line":142},[30,9529,7941],{"class":317},[30,9531,8764],{"class":36},[30,9533,9534],{"class":32,"line":1811},[30,9535,1732],{"class":321},[30,9537,9538],{"class":32,"line":1825},[30,9539,9540],{"class":321},"    string tName;\n",[30,9542,9543],{"class":32,"line":1830},[30,9544,9545],{"class":379},"    \u002F\u002F学生数组\n",[30,9547,9548,9550,9552,9555,9557],{"class":32,"line":1836},[30,9549,8077],{"class":317},[30,9551,8080],{"class":36},[30,9553,9554],{"class":321}," sArray[",[30,9556,639],{"class":40},[30,9558,4872],{"class":321},[30,9560,9561],{"class":32,"line":1857},[30,9562,4177],{"class":321},[30,9564,9565],{"class":32,"line":1862},[30,9566,9567],{"class":379},"\u002F\u002F给老师和学生赋值的函数\n",[30,9569,9570,9572,9575,9577,9579,9582,9585,9588,9590,9592],{"class":32,"line":1876},[30,9571,5546],{"class":317},[30,9573,9574],{"class":36}," allocateSpace",[30,9576,322],{"class":321},[30,9578,7941],{"class":317},[30,9580,9581],{"class":36}," Teacher",[30,9583,9584],{"class":5398}," tArray",[30,9586,9587],{"class":321},"[],",[30,9589,325],{"class":317},[30,9591,7513],{"class":5398},[30,9593,328],{"class":321},[30,9595,9596],{"class":32,"line":1881},[30,9597,1732],{"class":321},[30,9599,9600,9603,9605,9608],{"class":32,"line":1910},[30,9601,9602],{"class":321},"    string nameSeed",[30,9604,367],{"class":317},[30,9606,9607],{"class":74},"\"ABCDE\"",[30,9609,1480],{"class":321},[30,9611,9612,9614,9616,9618,9621,9623,9625,9628,9630,9633,9635],{"class":32,"line":1915},[30,9613,3383],{"class":317},[30,9615,1841],{"class":321},[30,9617,325],{"class":317},[30,9619,9620],{"class":321}," i ",[30,9622,367],{"class":317},[30,9624,4275],{"class":40},[30,9626,9627],{"class":321},"; i ",[30,9629,1230],{"class":317},[30,9631,9632],{"class":321}," len; i",[30,9634,2474],{"class":317},[30,9636,328],{"class":321},[30,9638,9639],{"class":32,"line":1932},[30,9640,2212],{"class":321},[30,9642,9643,9646,9648,9651],{"class":32,"line":1937},[30,9644,9645],{"class":321},"        tArray[i].tName ",[30,9647,367],{"class":317},[30,9649,9650],{"class":74}," \"Teacher_\"",[30,9652,1480],{"class":321},[30,9654,9655,9657,9660],{"class":32,"line":1942},[30,9656,9645],{"class":321},[30,9658,9659],{"class":317},"+=",[30,9661,9662],{"class":321},"nameSeed[i];\n",[30,9664,9665],{"class":32,"line":1947},[30,9666,2582],{"emptyLinePlaceholder":245},[30,9668,9669],{"class":32,"line":1961},[30,9670,9671],{"class":379},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[30,9673,9674,9676,9678,9680,9683,9685,9687,9690,9692,9694,9697,9699],{"class":32,"line":1966},[30,9675,3585],{"class":317},[30,9677,1841],{"class":321},[30,9679,325],{"class":317},[30,9681,9682],{"class":321}," j ",[30,9684,367],{"class":317},[30,9686,4275],{"class":40},[30,9688,9689],{"class":321},"; j ",[30,9691,1230],{"class":317},[30,9693,2330],{"class":40},[30,9695,9696],{"class":321},"; j",[30,9698,2474],{"class":317},[30,9700,328],{"class":321},[30,9702,9703],{"class":32,"line":2759},[30,9704,2692],{"class":321},[30,9706,9707,9710,9712,9715],{"class":32,"line":2773},[30,9708,9709],{"class":321},"            tArray[i].sArray[j].sName ",[30,9711,367],{"class":317},[30,9713,9714],{"class":74}," \"Student_\"",[30,9716,1480],{"class":321},[30,9718,9719,9721,9723],{"class":32,"line":2781},[30,9720,9709],{"class":321},[30,9722,9659],{"class":317},[30,9724,9725],{"class":321}," nameSeed[j];\n",[30,9727,9728,9731,9734,9736,9738,9740,9742,9744,9746,9748,9750],{"class":32,"line":2786},[30,9729,9730],{"class":317},"            int",[30,9732,9733],{"class":321}," random",[30,9735,367],{"class":317},[30,9737,2606],{"class":36},[30,9739,2609],{"class":321},[30,9741,648],{"class":317},[30,9743,1227],{"class":40},[30,9745,801],{"class":317},[30,9747,721],{"class":40},[30,9749,376],{"class":321},[30,9751,9752],{"class":379},"\u002F\u002F40~99\n",[30,9754,9755,9758,9760,9762],{"class":32,"line":2792},[30,9756,9757],{"class":321},"            tArray[i].sArray[j].age ",[30,9759,367],{"class":317},[30,9761,9132],{"class":40},[30,9763,1480],{"class":321},[30,9765,9766,9769,9771],{"class":32,"line":2798},[30,9767,9768],{"class":321},"            tArray[i].sArray[j].score ",[30,9770,367],{"class":317},[30,9772,9773],{"class":321}," random;\n",[30,9775,9776],{"class":32,"line":2803},[30,9777,2711],{"class":321},[30,9779,9780],{"class":32,"line":8130},[30,9781,2369],{"class":321},[30,9783,9784],{"class":32,"line":8154},[30,9785,1751],{"class":321},[30,9787,9788],{"class":32,"line":8159},[30,9789,9790],{"class":379},"\u002F\u002F打印所有信息的函数\n",[30,9792,9793,9795,9798,9800,9802,9804,9806,9809,9811,9813],{"class":32,"line":8165},[30,9794,5546],{"class":317},[30,9796,9797],{"class":36}," printInfo",[30,9799,322],{"class":321},[30,9801,7941],{"class":317},[30,9803,9581],{"class":36},[30,9805,9584],{"class":5398},[30,9807,9808],{"class":321},"[], ",[30,9810,325],{"class":317},[30,9812,7513],{"class":5398},[30,9814,328],{"class":321},[30,9816,9817],{"class":32,"line":8192},[30,9818,1732],{"class":321},[30,9820,9821,9823,9825,9827,9829,9831,9833,9835,9837,9839,9841],{"class":32,"line":8197},[30,9822,3383],{"class":317},[30,9824,1841],{"class":321},[30,9826,325],{"class":317},[30,9828,9620],{"class":321},[30,9830,367],{"class":317},[30,9832,4275],{"class":40},[30,9834,9627],{"class":321},[30,9836,1230],{"class":317},[30,9838,9632],{"class":321},[30,9840,2474],{"class":317},[30,9842,328],{"class":321},[30,9844,9845],{"class":32,"line":8203},[30,9846,2212],{"class":321},[30,9848,9849,9852,9854,9857,9859,9862,9864],{"class":32,"line":8215},[30,9850,9851],{"class":321},"        cout ",[30,9853,1363],{"class":317},[30,9855,9856],{"class":74}," \"Teacher: \"",[30,9858,1631],{"class":317},[30,9860,9861],{"class":321}," tArray[i].tName ",[30,9863,1363],{"class":317},[30,9865,9022],{"class":321},[30,9867,9868,9870,9872,9874,9876,9878,9880,9882,9884,9886,9888,9890],{"class":32,"line":8227},[30,9869,3585],{"class":317},[30,9871,1841],{"class":321},[30,9873,325],{"class":317},[30,9875,9682],{"class":321},[30,9877,367],{"class":317},[30,9879,4275],{"class":40},[30,9881,9689],{"class":321},[30,9883,1230],{"class":317},[30,9885,2330],{"class":40},[30,9887,9696],{"class":321},[30,9889,2474],{"class":317},[30,9891,328],{"class":321},[30,9893,9894],{"class":32,"line":8239},[30,9895,2692],{"class":321},[30,9897,9899,9902,9904,9907,9909,9912,9914,9917,9919],{"class":32,"line":9898},47,[30,9900,9901],{"class":321},"            cout ",[30,9903,1363],{"class":317},[30,9905,9906],{"class":74}," \"",[30,9908,1420],{"class":40},[30,9910,9911],{"class":74},"Student: \"",[30,9913,1631],{"class":317},[30,9915,9916],{"class":321}," tArray[i].sArray[j].sName",[30,9918,1363],{"class":317},[30,9920,1385],{"class":321},[30,9922,9924,9926,9928,9930,9932,9935,9937,9940,9942],{"class":32,"line":9923},48,[30,9925,9901],{"class":321},[30,9927,1363],{"class":317},[30,9929,9906],{"class":74},[30,9931,1420],{"class":40},[30,9933,9934],{"class":74},"Age: \"",[30,9936,1631],{"class":317},[30,9938,9939],{"class":321}," tArray[i].sArray[j].age ",[30,9941,1363],{"class":317},[30,9943,9022],{"class":321},[30,9945,9947,9949,9951,9953,9955,9958,9960,9963,9965],{"class":32,"line":9946},49,[30,9948,9901],{"class":321},[30,9950,1363],{"class":317},[30,9952,9906],{"class":74},[30,9954,1420],{"class":40},[30,9956,9957],{"class":74},"Score: \"",[30,9959,1631],{"class":317},[30,9961,9962],{"class":321}," tArray[i].sArray[j].score ",[30,9964,1363],{"class":317},[30,9966,9967],{"class":321}," endl;   \n",[30,9969,9971],{"class":32,"line":9970},50,[30,9972,2711],{"class":321},[30,9974,9976],{"class":32,"line":9975},51,[30,9977,2369],{"class":321},[30,9979,9981],{"class":32,"line":9980},52,[30,9982,1751],{"class":321},[30,9984,9986,9988,9990],{"class":32,"line":9985},53,[30,9987,325],{"class":317},[30,9989,2155],{"class":36},[30,9991,2158],{"class":321},[30,9993,9995],{"class":32,"line":9994},54,[30,9996,1732],{"class":321},[30,9998,10000],{"class":32,"line":9999},55,[30,10001,10002],{"class":379},"    \u002F\u002F随机数种子\n",[30,10004,10006,10008,10010,10012,10014,10016,10018,10020,10022],{"class":32,"line":10005},56,[30,10007,2555],{"class":36},[30,10009,2558],{"class":321},[30,10011,2561],{"class":317},[30,10013,2564],{"class":317},[30,10015,749],{"class":321},[30,10017,2569],{"class":36},[30,10019,322],{"class":321},[30,10021,2574],{"class":40},[30,10023,2577],{"class":321},[30,10025,10027],{"class":32,"line":10026},57,[30,10028,10029],{"class":379},"    \u002F\u002F1.创建3名老师的数组\n",[30,10031,10033,10035,10037,10040,10042],{"class":32,"line":10032},58,[30,10034,8077],{"class":317},[30,10036,9581],{"class":36},[30,10038,10039],{"class":321}," tArray[",[30,10041,392],{"class":40},[30,10043,4872],{"class":321},[30,10045,10047],{"class":32,"line":10046},59,[30,10048,10049],{"class":379},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[30,10051,10053,10055,10058,10060,10063,10066,10068,10070,10073,10075],{"class":32,"line":10052},60,[30,10054,2167],{"class":317},[30,10056,10057],{"class":321}," len ",[30,10059,367],{"class":317},[30,10061,10062],{"class":317}," sizeof",[30,10064,10065],{"class":321},"(tArray) ",[30,10067,904],{"class":317},[30,10069,10062],{"class":317},[30,10071,10072],{"class":321},"(tArray[",[30,10074,511],{"class":40},[30,10076,4038],{"class":321},[30,10078,10080,10083],{"class":32,"line":10079},61,[30,10081,10082],{"class":36},"    allocateSpace",[30,10084,10085],{"class":321},"(tArray, len);\n",[30,10087,10089],{"class":32,"line":10088},62,[30,10090,10091],{"class":379},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[30,10093,10095,10098],{"class":32,"line":10094},63,[30,10096,10097],{"class":36},"    printInfo",[30,10099,10085],{"class":321},[30,10101,10103],{"class":32,"line":10102},64,[30,10104,2582],{"emptyLinePlaceholder":245},[30,10106,10108],{"class":32,"line":10107},65,[30,10109,1751],{"class":321},[271,10111,10112],{"start":44},[150,10113,10114,10117],{},[469,10115,10116],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[157,10119,10120],{},"五名英雄信息如下：",[20,10122,10126],{"className":10123,"code":10124,"language":10125,"meta":25,"style":25},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[27,10127,10128,10146,10163,10180,10197],{"__ignoreMap":25},[30,10129,10130,10132,10135,10137,10139,10141,10144],{"class":32,"line":33},[30,10131,5099],{"class":321},[30,10133,10134],{"class":74},"\"刘备\"",[30,10136,698],{"class":321},[30,10138,1095],{"class":40},[30,10140,698],{"class":321},[30,10142,10143],{"class":74},"\"男\"",[30,10145,5112],{"class":321},[30,10147,10148,10150,10153,10155,10157,10159,10161],{"class":32,"line":44},[30,10149,5099],{"class":321},[30,10151,10152],{"class":74},"\"关羽\"",[30,10154,698],{"class":321},[30,10156,1070],{"class":40},[30,10158,698],{"class":321},[30,10160,10143],{"class":74},[30,10162,5112],{"class":321},[30,10164,10165,10167,10170,10172,10174,10176,10178],{"class":32,"line":52},[30,10166,5099],{"class":321},[30,10168,10169],{"class":74},"\"张飞\"",[30,10171,698],{"class":321},[30,10173,1020],{"class":40},[30,10175,698],{"class":321},[30,10177,10143],{"class":74},[30,10179,5112],{"class":321},[30,10181,10182,10184,10187,10189,10191,10193,10195],{"class":32,"line":60},[30,10183,5099],{"class":321},[30,10185,10186],{"class":74},"\"赵云\"",[30,10188,698],{"class":321},[30,10190,1045],{"class":40},[30,10192,698],{"class":321},[30,10194,10143],{"class":74},[30,10196,5112],{"class":321},[30,10198,10199,10201,10204,10206,10208,10210,10213],{"class":32,"line":68},[30,10200,5099],{"class":321},[30,10202,10203],{"class":74},"\"貂蝉\"",[30,10205,698],{"class":321},[30,10207,995],{"class":40},[30,10209,698],{"class":321},[30,10211,10212],{"class":74},"\"女\"",[30,10214,5112],{"class":321},[157,10216,10217],{},"代码：",[20,10219,10221],{"className":308,"code":10220,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Sanguo\n{\n    string name;\n    int age;\n    string gender;\n};\n\u002F\u002F定义排序函数\nvoid bubbleSort(Sanguo *s,int len)\n{\n    for(int i=0;i\u003Clen;i++)\n    {\n     for (int j=0;j\u003Clen-1-i;j++)\n     {\n         if ((s+j)->age > (s+j+1)->age)\n         {\n             Sanguo temp=*(s+j);\n             *(s+j)=*(s+j+1);\n             *(s+j+1)=temp;\n         }\n     }\n    }\n}\n\u002F\u002F定义打印函数\nvoid printInfo(Sanguo *s,int len)\n{\n    for (int i=0;i\u003Clen;i++)\n    {\n        cout\u003C\u003C\"\\t姓名：\"\u003C\u003C(s+i)->name\u003C\u003C\"\\t年龄：\"\u003C\u003C(s+i)->age\u003C\u003C\"\\t性别：\"\u003C\u003C(s+i)->gender\u003C\u003Cendl;\n    }\n}\nint main()\n{\n    \u002F\u002F定义结构体变量\n    Sanguo s1[5]=\n    {\n        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n    };\n    int len=sizeof(s1)\u002Fsizeof(s1[0]);\n    Sanguo *s = &s1[0];\n    \u002F\u002F排序前：\n    cout \u003C\u003C \"排序前：\" \u003C\u003C endl;\n    printInfo(s,len);\n    \u002F\u002F调用排序函数\n    bubbleSort(s,len);\n    \u002F\u002F排序后\n    cout \u003C\u003C \"排序后：\" \u003C\u003C endl;\n    printInfo(s,len);\n}\n",[27,10222,10223,10229,10239,10245,10252,10256,10260,10266,10271,10275,10280,10303,10307,10332,10336,10369,10374,10403,10408,10423,10449,10469,10474,10479,10483,10487,10492,10514,10518,10542,10546,10608,10612,10616,10624,10628,10633,10644,10648,10664,10680,10696,10712,10728,10732,10752,10774,10779,10792,10799,10804,10810,10815,10828,10834],{"__ignoreMap":25},[30,10224,10225,10227],{"class":32,"line":33},[30,10226,2132],{"class":317},[30,10228,2135],{"class":74},[30,10230,10231,10233,10235,10237],{"class":32,"line":44},[30,10232,2140],{"class":317},[30,10234,2143],{"class":317},[30,10236,2146],{"class":36},[30,10238,1480],{"class":321},[30,10240,10241,10243],{"class":32,"line":52},[30,10242,2132],{"class":317},[30,10244,7931],{"class":74},[30,10246,10247,10249],{"class":32,"line":60},[30,10248,7941],{"class":317},[30,10250,10251],{"class":36}," Sanguo\n",[30,10253,10254],{"class":32,"line":68},[30,10255,1732],{"class":321},[30,10257,10258],{"class":32,"line":80},[30,10259,7967],{"class":321},[30,10261,10262,10264],{"class":32,"line":88},[30,10263,2167],{"class":317},[30,10265,7979],{"class":321},[30,10267,10268],{"class":32,"line":96},[30,10269,10270],{"class":321},"    string gender;\n",[30,10272,10273],{"class":32,"line":104},[30,10274,4177],{"class":321},[30,10276,10277],{"class":32,"line":112},[30,10278,10279],{"class":379},"\u002F\u002F定义排序函数\n",[30,10281,10282,10284,10286,10288,10291,10293,10295,10297,10299,10301],{"class":32,"line":123},[30,10283,5546],{"class":317},[30,10285,7498],{"class":36},[30,10287,322],{"class":321},[30,10289,10290],{"class":36},"Sanguo",[30,10292,6700],{"class":317},[30,10294,1015],{"class":5398},[30,10296,698],{"class":321},[30,10298,325],{"class":317},[30,10300,7513],{"class":5398},[30,10302,328],{"class":321},[30,10304,10305],{"class":32,"line":131},[30,10306,1732],{"class":321},[30,10308,10309,10311,10313,10315,10317,10319,10321,10323,10325,10328,10330],{"class":32,"line":142},[30,10310,3383],{"class":317},[30,10312,322],{"class":321},[30,10314,325],{"class":317},[30,10316,3214],{"class":321},[30,10318,367],{"class":317},[30,10320,511],{"class":40},[30,10322,3221],{"class":321},[30,10324,1230],{"class":317},[30,10326,10327],{"class":321},"len;i",[30,10329,2474],{"class":317},[30,10331,328],{"class":321},[30,10333,10334],{"class":32,"line":1811},[30,10335,2212],{"class":321},[30,10337,10338,10341,10343,10345,10347,10349,10351,10353,10355,10357,10359,10361,10363,10365,10367],{"class":32,"line":1825},[30,10339,10340],{"class":317},"     for",[30,10342,1841],{"class":321},[30,10344,325],{"class":317},[30,10346,3592],{"class":321},[30,10348,367],{"class":317},[30,10350,511],{"class":40},[30,10352,3599],{"class":321},[30,10354,1230],{"class":317},[30,10356,7540],{"class":321},[30,10358,852],{"class":317},[30,10360,537],{"class":40},[30,10362,852],{"class":317},[30,10364,3732],{"class":321},[30,10366,2474],{"class":317},[30,10368,328],{"class":321},[30,10370,10371],{"class":32,"line":1830},[30,10372,10373],{"class":321},"     {\n",[30,10375,10376,10379,10382,10384,10387,10389,10392,10394,10396,10398,10400],{"class":32,"line":1836},[30,10377,10378],{"class":317},"         if",[30,10380,10381],{"class":321}," ((s",[30,10383,801],{"class":317},[30,10385,10386],{"class":321},"j)->age ",[30,10388,1280],{"class":317},[30,10390,10391],{"class":321}," (s",[30,10393,801],{"class":317},[30,10395,787],{"class":321},[30,10397,801],{"class":317},[30,10399,537],{"class":40},[30,10401,10402],{"class":321},")->age)\n",[30,10404,10405],{"class":32,"line":1857},[30,10406,10407],{"class":321},"         {\n",[30,10409,10410,10413,10415,10418,10420],{"class":32,"line":1862},[30,10411,10412],{"class":321},"             Sanguo temp",[30,10414,7335],{"class":317},[30,10416,10417],{"class":321},"(s",[30,10419,801],{"class":317},[30,10421,10422],{"class":321},"j);\n",[30,10424,10425,10428,10430,10432,10435,10437,10439,10441,10443,10445,10447],{"class":32,"line":1876},[30,10426,10427],{"class":317},"             *",[30,10429,10417],{"class":321},[30,10431,801],{"class":317},[30,10433,10434],{"class":321},"j)",[30,10436,7335],{"class":317},[30,10438,10417],{"class":321},[30,10440,801],{"class":317},[30,10442,787],{"class":321},[30,10444,801],{"class":317},[30,10446,537],{"class":40},[30,10448,2901],{"class":321},[30,10450,10451,10453,10455,10457,10459,10461,10463,10465,10467],{"class":32,"line":1881},[30,10452,10427],{"class":317},[30,10454,10417],{"class":321},[30,10456,801],{"class":317},[30,10458,787],{"class":321},[30,10460,801],{"class":317},[30,10462,537],{"class":40},[30,10464,749],{"class":321},[30,10466,367],{"class":317},[30,10468,4462],{"class":321},[30,10470,10471],{"class":32,"line":1910},[30,10472,10473],{"class":321},"         }\n",[30,10475,10476],{"class":32,"line":1915},[30,10477,10478],{"class":321},"     }\n",[30,10480,10481],{"class":32,"line":1932},[30,10482,2369],{"class":321},[30,10484,10485],{"class":32,"line":1937},[30,10486,1751],{"class":321},[30,10488,10489],{"class":32,"line":1942},[30,10490,10491],{"class":379},"\u002F\u002F定义打印函数\n",[30,10493,10494,10496,10498,10500,10502,10504,10506,10508,10510,10512],{"class":32,"line":1947},[30,10495,5546],{"class":317},[30,10497,9797],{"class":36},[30,10499,322],{"class":321},[30,10501,10290],{"class":36},[30,10503,6700],{"class":317},[30,10505,1015],{"class":5398},[30,10507,698],{"class":321},[30,10509,325],{"class":317},[30,10511,7513],{"class":5398},[30,10513,328],{"class":321},[30,10515,10516],{"class":32,"line":1961},[30,10517,1732],{"class":321},[30,10519,10520,10522,10524,10526,10528,10530,10532,10534,10536,10538,10540],{"class":32,"line":1966},[30,10521,3383],{"class":317},[30,10523,1841],{"class":321},[30,10525,325],{"class":317},[30,10527,3214],{"class":321},[30,10529,367],{"class":317},[30,10531,511],{"class":40},[30,10533,3221],{"class":321},[30,10535,1230],{"class":317},[30,10537,10327],{"class":321},[30,10539,2474],{"class":317},[30,10541,328],{"class":321},[30,10543,10544],{"class":32,"line":2759},[30,10545,2212],{"class":321},[30,10547,10548,10550,10552,10554,10556,10559,10561,10563,10565,10568,10570,10572,10574,10577,10579,10581,10583,10586,10588,10590,10592,10595,10597,10599,10601,10604,10606],{"class":32,"line":2773},[30,10549,3633],{"class":321},[30,10551,1363],{"class":317},[30,10553,571],{"class":74},[30,10555,1420],{"class":40},[30,10557,10558],{"class":74},"姓名：\"",[30,10560,1363],{"class":317},[30,10562,10417],{"class":321},[30,10564,801],{"class":317},[30,10566,10567],{"class":321},"i)->name",[30,10569,1363],{"class":317},[30,10571,571],{"class":74},[30,10573,1420],{"class":40},[30,10575,10576],{"class":74},"年龄：\"",[30,10578,1363],{"class":317},[30,10580,10417],{"class":321},[30,10582,801],{"class":317},[30,10584,10585],{"class":321},"i)->age",[30,10587,1363],{"class":317},[30,10589,571],{"class":74},[30,10591,1420],{"class":40},[30,10593,10594],{"class":74},"性别：\"",[30,10596,1363],{"class":317},[30,10598,10417],{"class":321},[30,10600,801],{"class":317},[30,10602,10603],{"class":321},"i)->gender",[30,10605,1363],{"class":317},[30,10607,1385],{"class":321},[30,10609,10610],{"class":32,"line":2781},[30,10611,2369],{"class":321},[30,10613,10614],{"class":32,"line":2786},[30,10615,1751],{"class":321},[30,10617,10618,10620,10622],{"class":32,"line":2792},[30,10619,325],{"class":317},[30,10621,2155],{"class":36},[30,10623,2158],{"class":321},[30,10625,10626],{"class":32,"line":2798},[30,10627,1732],{"class":321},[30,10629,10630],{"class":32,"line":2803},[30,10631,10632],{"class":379},"    \u002F\u002F定义结构体变量\n",[30,10634,10635,10638,10640,10642],{"class":32,"line":8130},[30,10636,10637],{"class":321},"    Sanguo s1[",[30,10639,639],{"class":40},[30,10641,1260],{"class":321},[30,10643,5090],{"class":317},[30,10645,10646],{"class":32,"line":8154},[30,10647,2212],{"class":321},[30,10649,10650,10652,10654,10656,10658,10660,10662],{"class":32,"line":8159},[30,10651,5099],{"class":321},[30,10653,10134],{"class":74},[30,10655,698],{"class":321},[30,10657,1095],{"class":40},[30,10659,698],{"class":321},[30,10661,10143],{"class":74},[30,10663,5112],{"class":321},[30,10665,10666,10668,10670,10672,10674,10676,10678],{"class":32,"line":8165},[30,10667,5099],{"class":321},[30,10669,10152],{"class":74},[30,10671,698],{"class":321},[30,10673,1070],{"class":40},[30,10675,698],{"class":321},[30,10677,10143],{"class":74},[30,10679,5112],{"class":321},[30,10681,10682,10684,10686,10688,10690,10692,10694],{"class":32,"line":8192},[30,10683,5099],{"class":321},[30,10685,10169],{"class":74},[30,10687,698],{"class":321},[30,10689,1020],{"class":40},[30,10691,698],{"class":321},[30,10693,10143],{"class":74},[30,10695,5112],{"class":321},[30,10697,10698,10700,10702,10704,10706,10708,10710],{"class":32,"line":8197},[30,10699,5099],{"class":321},[30,10701,10186],{"class":74},[30,10703,698],{"class":321},[30,10705,1045],{"class":40},[30,10707,698],{"class":321},[30,10709,10143],{"class":74},[30,10711,5112],{"class":321},[30,10713,10714,10716,10718,10720,10722,10724,10726],{"class":32,"line":8203},[30,10715,5099],{"class":321},[30,10717,10203],{"class":74},[30,10719,698],{"class":321},[30,10721,995],{"class":40},[30,10723,698],{"class":321},[30,10725,10212],{"class":74},[30,10727,5112],{"class":321},[30,10729,10730],{"class":32,"line":8215},[30,10731,5133],{"class":321},[30,10733,10734,10736,10738,10740,10743,10745,10748,10750],{"class":32,"line":8227},[30,10735,2167],{"class":317},[30,10737,7513],{"class":321},[30,10739,4385],{"class":317},[30,10741,10742],{"class":321},"(s1)",[30,10744,4391],{"class":317},[30,10746,10747],{"class":321},"(s1[",[30,10749,511],{"class":40},[30,10751,4038],{"class":321},[30,10753,10754,10757,10759,10762,10764,10767,10770,10772],{"class":32,"line":8239},[30,10755,10756],{"class":321},"    Sanguo ",[30,10758,775],{"class":317},[30,10760,10761],{"class":321},"s ",[30,10763,367],{"class":317},[30,10765,10766],{"class":317}," &",[30,10768,10769],{"class":321},"s1[",[30,10771,511],{"class":40},[30,10773,4872],{"class":321},[30,10775,10776],{"class":32,"line":9898},[30,10777,10778],{"class":379},"    \u002F\u002F排序前：\n",[30,10780,10781,10783,10785,10788,10790],{"class":32,"line":9923},[30,10782,6711],{"class":321},[30,10784,1363],{"class":317},[30,10786,10787],{"class":74}," \"排序前：\"",[30,10789,1631],{"class":317},[30,10791,9022],{"class":321},[30,10793,10794,10796],{"class":32,"line":9946},[30,10795,10097],{"class":36},[30,10797,10798],{"class":321},"(s,len);\n",[30,10800,10801],{"class":32,"line":9970},[30,10802,10803],{"class":379},"    \u002F\u002F调用排序函数\n",[30,10805,10806,10808],{"class":32,"line":9975},[30,10807,7780],{"class":36},[30,10809,10798],{"class":321},[30,10811,10812],{"class":32,"line":9980},[30,10813,10814],{"class":379},"    \u002F\u002F排序后\n",[30,10816,10817,10819,10821,10824,10826],{"class":32,"line":9985},[30,10818,6711],{"class":321},[30,10820,1363],{"class":317},[30,10822,10823],{"class":74}," \"排序后：\"",[30,10825,1631],{"class":317},[30,10827,9022],{"class":321},[30,10829,10830,10832],{"class":32,"line":9994},[30,10831,10097],{"class":36},[30,10833,10798],{"class":321},[30,10835,10836],{"class":32,"line":9999},[30,10837,1751],{"class":321},[157,10839,10840,10841,10843],{},"注意：使用指针时直接用传首地址**&s",[30,10842,511],{},"**",[234,10845,10846],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":10848},[10849,10850,10851,10852,10853,10854,10855],{"id":7885,"depth":44,"text":7886},{"id":8247,"depth":44,"text":8248},{"id":8516,"depth":44,"text":8517},{"id":8681,"depth":44,"text":8682},{"id":8897,"depth":44,"text":8898},{"id":9218,"depth":44,"text":9219},{"id":9446,"depth":44,"text":9447},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7874,"description":7882},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10862,"title":10863,"body":10864,"description":25,"extension":243,"meta":12207,"navigation":245,"path":12208,"seo":12209,"stem":12210,"__hash__":12211},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10865,"toc":12201},[10866,10869,10873,10879,10893,10898,10901,10905,10912,10918,10921,10928,10934,10939,10942,10945,10948,11512,11515,11529,11533,11538,11554,11694,11697,11703,11706,11711,11719,11827,11830,11835,11838,11843,11846,11852,11855,12198],[10,10867,10863],{"id":10868},"_5程序内存模型",[15,10870,10872],{"id":10871},"_51内存分区模型","5.1内存分区模型",[157,10874,10875,10876],{},"C++程序在执行时，将内存大方向划分为",[469,10877,10878],{},"4个区域",[147,10880,10881,10884,10887,10890],{},[150,10882,10883],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[150,10885,10886],{},"全局区：存放全局变量和静态变量以及常量",[150,10888,10889],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[150,10891,10892],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[157,10894,10895],{},[469,10896,10897],{},"内存四区意义：",[157,10899,10900],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[287,10902,10904],{"id":10903},"_511程序运行前","5.1.1程序运行前",[157,10906,10907,10908,10911],{},"​\t在程序编译后，生成了exe可执行程序，",[469,10909,10910],{},"未执行该程序前","分为两个区域",[157,10913,10914,10915],{},"​\t",[469,10916,10917],{},"代码区：",[157,10919,10920],{},"​\t\t存放 CPU 执行的机器指令",[157,10922,10923,10924,10927],{},"​\t\t代码区是",[469,10925,10926],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[157,10929,10923,10930,10933],{},[469,10931,10932],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[157,10935,10914,10936],{},[469,10937,10938],{},"全局区：",[157,10940,10941],{},"​\t\t全局变量和静态变量存放在此.",[157,10943,10944],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[157,10946,10947],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[20,10949,10951],{"className":308,"code":10950,"language":310,"meta":25,"style":25},"\u002F\u002F全局变量\nint g_a = 10;\nint g_b = 10;\n\n\u002F\u002F全局常量\nconst int c_g_a = 10;\nconst int c_g_b = 10;\n\nint main() {\n\n    \u002F\u002F局部变量\n    int a = 10;\n    int b = 10;\n\n    \u002F\u002F打印地址\n    cout \u003C\u003C \"局部变量a地址为： \" \u003C\u003C (int)&a \u003C\u003C endl;\n    cout \u003C\u003C \"局部变量b地址为： \" \u003C\u003C (int)&b \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局变量g_a地址为： \" \u003C\u003C  (int)&g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局变量g_b地址为： \" \u003C\u003C  (int)&g_b \u003C\u003C endl;\n\n    \u002F\u002F静态变量\n    static int s_a = 10;\n    static int s_b = 10;\n\n    cout \u003C\u003C \"静态变量s_a地址为： \" \u003C\u003C (int)&s_a \u003C\u003C endl;\n    cout \u003C\u003C \"静态变量s_b地址为： \" \u003C\u003C (int)&s_b \u003C\u003C endl;\n\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world\" \u003C\u003C endl;\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world1\" \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局常量c_g_a地址为： \" \u003C\u003C (int)&c_g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局常量c_g_b地址为： \" \u003C\u003C (int)&c_g_b \u003C\u003C endl;\n\n    const int c_l_a = 10;\n    const int c_l_b = 10;\n    cout \u003C\u003C \"局部常量c_l_a地址为： \" \u003C\u003C (int)&c_l_a \u003C\u003C endl;\n    cout \u003C\u003C \"局部常量c_l_b地址为： \" \u003C\u003C (int)&c_l_b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,10952,10953,10958,10971,10984,10988,10993,11008,11023,11027,11036,11040,11045,11058,11071,11075,11080,11106,11132,11136,11163,11189,11193,11198,11214,11229,11233,11259,11285,11289,11314,11339,11343,11369,11395,11399,11415,11430,11456,11482,11486,11496,11500,11508],{"__ignoreMap":25},[30,10954,10955],{"class":32,"line":33},[30,10956,10957],{"class":379},"\u002F\u002F全局变量\n",[30,10959,10960,10962,10965,10967,10969],{"class":32,"line":44},[30,10961,325],{"class":317},[30,10963,10964],{"class":321}," g_a ",[30,10966,367],{"class":317},[30,10968,2220],{"class":40},[30,10970,1480],{"class":321},[30,10972,10973,10975,10978,10980,10982],{"class":32,"line":52},[30,10974,325],{"class":317},[30,10976,10977],{"class":321}," g_b ",[30,10979,367],{"class":317},[30,10981,2220],{"class":40},[30,10983,1480],{"class":321},[30,10985,10986],{"class":32,"line":60},[30,10987,2582],{"emptyLinePlaceholder":245},[30,10989,10990],{"class":32,"line":68},[30,10991,10992],{"class":379},"\u002F\u002F全局常量\n",[30,10994,10995,10997,10999,11002,11004,11006],{"class":32,"line":80},[30,10996,6974],{"class":317},[30,10998,2564],{"class":317},[30,11000,11001],{"class":321}," c_g_a ",[30,11003,367],{"class":317},[30,11005,2220],{"class":40},[30,11007,1480],{"class":321},[30,11009,11010,11012,11014,11017,11019,11021],{"class":32,"line":88},[30,11011,6974],{"class":317},[30,11013,2564],{"class":317},[30,11015,11016],{"class":321}," c_g_b ",[30,11018,367],{"class":317},[30,11020,2220],{"class":40},[30,11022,1480],{"class":321},[30,11024,11025],{"class":32,"line":96},[30,11026,2582],{"emptyLinePlaceholder":245},[30,11028,11029,11031,11033],{"class":32,"line":104},[30,11030,325],{"class":317},[30,11032,2155],{"class":36},[30,11034,11035],{"class":321},"() {\n",[30,11037,11038],{"class":32,"line":112},[30,11039,2582],{"emptyLinePlaceholder":245},[30,11041,11042],{"class":32,"line":123},[30,11043,11044],{"class":379},"    \u002F\u002F局部变量\n",[30,11046,11047,11049,11052,11054,11056],{"class":32,"line":131},[30,11048,2167],{"class":317},[30,11050,11051],{"class":321}," a ",[30,11053,367],{"class":317},[30,11055,2220],{"class":40},[30,11057,1480],{"class":321},[30,11059,11060,11062,11065,11067,11069],{"class":32,"line":142},[30,11061,2167],{"class":317},[30,11063,11064],{"class":321}," b ",[30,11066,367],{"class":317},[30,11068,2220],{"class":40},[30,11070,1480],{"class":321},[30,11072,11073],{"class":32,"line":1811},[30,11074,2582],{"emptyLinePlaceholder":245},[30,11076,11077],{"class":32,"line":1825},[30,11078,11079],{"class":379},"    \u002F\u002F打印地址\n",[30,11081,11082,11084,11086,11089,11091,11093,11095,11097,11099,11102,11104],{"class":32,"line":1830},[30,11083,6711],{"class":321},[30,11085,1363],{"class":317},[30,11087,11088],{"class":74}," \"局部变量a地址为： \"",[30,11090,1631],{"class":317},[30,11092,1841],{"class":321},[30,11094,325],{"class":317},[30,11096,749],{"class":321},[30,11098,673],{"class":317},[30,11100,11101],{"class":321},"a ",[30,11103,1363],{"class":317},[30,11105,9022],{"class":321},[30,11107,11108,11110,11112,11115,11117,11119,11121,11123,11125,11128,11130],{"class":32,"line":1836},[30,11109,6711],{"class":321},[30,11111,1363],{"class":317},[30,11113,11114],{"class":74}," \"局部变量b地址为： \"",[30,11116,1631],{"class":317},[30,11118,1841],{"class":321},[30,11120,325],{"class":317},[30,11122,749],{"class":321},[30,11124,673],{"class":317},[30,11126,11127],{"class":321},"b ",[30,11129,1363],{"class":317},[30,11131,9022],{"class":321},[30,11133,11134],{"class":32,"line":1857},[30,11135,2582],{"emptyLinePlaceholder":245},[30,11137,11138,11140,11142,11145,11147,11150,11152,11154,11156,11159,11161],{"class":32,"line":1862},[30,11139,6711],{"class":321},[30,11141,1363],{"class":317},[30,11143,11144],{"class":74}," \"全局变量g_a地址为： \"",[30,11146,1631],{"class":317},[30,11148,11149],{"class":321},"  (",[30,11151,325],{"class":317},[30,11153,749],{"class":321},[30,11155,673],{"class":317},[30,11157,11158],{"class":321},"g_a ",[30,11160,1363],{"class":317},[30,11162,9022],{"class":321},[30,11164,11165,11167,11169,11172,11174,11176,11178,11180,11182,11185,11187],{"class":32,"line":1876},[30,11166,6711],{"class":321},[30,11168,1363],{"class":317},[30,11170,11171],{"class":74}," \"全局变量g_b地址为： \"",[30,11173,1631],{"class":317},[30,11175,11149],{"class":321},[30,11177,325],{"class":317},[30,11179,749],{"class":321},[30,11181,673],{"class":317},[30,11183,11184],{"class":321},"g_b ",[30,11186,1363],{"class":317},[30,11188,9022],{"class":321},[30,11190,11191],{"class":32,"line":1881},[30,11192,2582],{"emptyLinePlaceholder":245},[30,11194,11195],{"class":32,"line":1910},[30,11196,11197],{"class":379},"    \u002F\u002F静态变量\n",[30,11199,11200,11203,11205,11208,11210,11212],{"class":32,"line":1915},[30,11201,11202],{"class":317},"    static",[30,11204,2564],{"class":317},[30,11206,11207],{"class":321}," s_a ",[30,11209,367],{"class":317},[30,11211,2220],{"class":40},[30,11213,1480],{"class":321},[30,11215,11216,11218,11220,11223,11225,11227],{"class":32,"line":1932},[30,11217,11202],{"class":317},[30,11219,2564],{"class":317},[30,11221,11222],{"class":321}," s_b ",[30,11224,367],{"class":317},[30,11226,2220],{"class":40},[30,11228,1480],{"class":321},[30,11230,11231],{"class":32,"line":1937},[30,11232,2582],{"emptyLinePlaceholder":245},[30,11234,11235,11237,11239,11242,11244,11246,11248,11250,11252,11255,11257],{"class":32,"line":1942},[30,11236,6711],{"class":321},[30,11238,1363],{"class":317},[30,11240,11241],{"class":74}," \"静态变量s_a地址为： \"",[30,11243,1631],{"class":317},[30,11245,1841],{"class":321},[30,11247,325],{"class":317},[30,11249,749],{"class":321},[30,11251,673],{"class":317},[30,11253,11254],{"class":321},"s_a ",[30,11256,1363],{"class":317},[30,11258,9022],{"class":321},[30,11260,11261,11263,11265,11268,11270,11272,11274,11276,11278,11281,11283],{"class":32,"line":1947},[30,11262,6711],{"class":321},[30,11264,1363],{"class":317},[30,11266,11267],{"class":74}," \"静态变量s_b地址为： \"",[30,11269,1631],{"class":317},[30,11271,1841],{"class":321},[30,11273,325],{"class":317},[30,11275,749],{"class":321},[30,11277,673],{"class":317},[30,11279,11280],{"class":321},"s_b ",[30,11282,1363],{"class":317},[30,11284,9022],{"class":321},[30,11286,11287],{"class":32,"line":1961},[30,11288,2582],{"emptyLinePlaceholder":245},[30,11290,11291,11293,11295,11298,11300,11302,11304,11306,11308,11310,11312],{"class":32,"line":1966},[30,11292,6711],{"class":321},[30,11294,1363],{"class":317},[30,11296,11297],{"class":74}," \"字符串常量地址为： \"",[30,11299,1631],{"class":317},[30,11301,1841],{"class":321},[30,11303,325],{"class":317},[30,11305,749],{"class":321},[30,11307,673],{"class":317},[30,11309,1380],{"class":74},[30,11311,1631],{"class":317},[30,11313,9022],{"class":321},[30,11315,11316,11318,11320,11322,11324,11326,11328,11330,11332,11335,11337],{"class":32,"line":2759},[30,11317,6711],{"class":321},[30,11319,1363],{"class":317},[30,11321,11297],{"class":74},[30,11323,1631],{"class":317},[30,11325,1841],{"class":321},[30,11327,325],{"class":317},[30,11329,749],{"class":321},[30,11331,673],{"class":317},[30,11333,11334],{"class":74},"\"hello world1\"",[30,11336,1631],{"class":317},[30,11338,9022],{"class":321},[30,11340,11341],{"class":32,"line":2773},[30,11342,2582],{"emptyLinePlaceholder":245},[30,11344,11345,11347,11349,11352,11354,11356,11358,11360,11362,11365,11367],{"class":32,"line":2781},[30,11346,6711],{"class":321},[30,11348,1363],{"class":317},[30,11350,11351],{"class":74}," \"全局常量c_g_a地址为： \"",[30,11353,1631],{"class":317},[30,11355,1841],{"class":321},[30,11357,325],{"class":317},[30,11359,749],{"class":321},[30,11361,673],{"class":317},[30,11363,11364],{"class":321},"c_g_a ",[30,11366,1363],{"class":317},[30,11368,9022],{"class":321},[30,11370,11371,11373,11375,11378,11380,11382,11384,11386,11388,11391,11393],{"class":32,"line":2786},[30,11372,6711],{"class":321},[30,11374,1363],{"class":317},[30,11376,11377],{"class":74}," \"全局常量c_g_b地址为： \"",[30,11379,1631],{"class":317},[30,11381,1841],{"class":321},[30,11383,325],{"class":317},[30,11385,749],{"class":321},[30,11387,673],{"class":317},[30,11389,11390],{"class":321},"c_g_b ",[30,11392,1363],{"class":317},[30,11394,9022],{"class":321},[30,11396,11397],{"class":32,"line":2792},[30,11398,2582],{"emptyLinePlaceholder":245},[30,11400,11401,11404,11406,11409,11411,11413],{"class":32,"line":2798},[30,11402,11403],{"class":317},"    const",[30,11405,2564],{"class":317},[30,11407,11408],{"class":321}," c_l_a ",[30,11410,367],{"class":317},[30,11412,2220],{"class":40},[30,11414,1480],{"class":321},[30,11416,11417,11419,11421,11424,11426,11428],{"class":32,"line":2803},[30,11418,11403],{"class":317},[30,11420,2564],{"class":317},[30,11422,11423],{"class":321}," c_l_b ",[30,11425,367],{"class":317},[30,11427,2220],{"class":40},[30,11429,1480],{"class":321},[30,11431,11432,11434,11436,11439,11441,11443,11445,11447,11449,11452,11454],{"class":32,"line":8130},[30,11433,6711],{"class":321},[30,11435,1363],{"class":317},[30,11437,11438],{"class":74}," \"局部常量c_l_a地址为： \"",[30,11440,1631],{"class":317},[30,11442,1841],{"class":321},[30,11444,325],{"class":317},[30,11446,749],{"class":321},[30,11448,673],{"class":317},[30,11450,11451],{"class":321},"c_l_a ",[30,11453,1363],{"class":317},[30,11455,9022],{"class":321},[30,11457,11458,11460,11462,11465,11467,11469,11471,11473,11475,11478,11480],{"class":32,"line":8154},[30,11459,6711],{"class":321},[30,11461,1363],{"class":317},[30,11463,11464],{"class":74}," \"局部常量c_l_b地址为： \"",[30,11466,1631],{"class":317},[30,11468,1841],{"class":321},[30,11470,325],{"class":317},[30,11472,749],{"class":321},[30,11474,673],{"class":317},[30,11476,11477],{"class":321},"c_l_b ",[30,11479,1363],{"class":317},[30,11481,9022],{"class":321},[30,11483,11484],{"class":32,"line":8159},[30,11485,2582],{"emptyLinePlaceholder":245},[30,11487,11488,11490,11492,11494],{"class":32,"line":8165},[30,11489,2485],{"class":36},[30,11491,322],{"class":321},[30,11493,2490],{"class":74},[30,11495,2901],{"class":321},[30,11497,11498],{"class":32,"line":8192},[30,11499,2582],{"emptyLinePlaceholder":245},[30,11501,11502,11504,11506],{"class":32,"line":8197},[30,11503,4272],{"class":317},[30,11505,4275],{"class":40},[30,11507,1480],{"class":321},[30,11509,11510],{"class":32,"line":8203},[30,11511,1751],{"class":321},[157,11513,11514],{},"总结：",[147,11516,11517,11520,11523,11526],{},[150,11518,11519],{},"c++中程序运行前分为全局区和代码区",[150,11521,11522],{},"代码区特点是共享和只读",[150,11524,11525],{},"全局区中存放全局变量、静态变量、常量",[150,11527,11528],{},"常量区中存放const修饰的全局常量和字符串常量",[287,11530,11532],{"id":11531},"_512程序运行后","5.1.2程序运行后",[271,11534,11535],{},[150,11536,11537],{},"栈区：",[147,11539,11540,11547],{},[150,11541,11542,11543,11546],{},"由编译器自动分配释放, 存放",[469,11544,11545],{},"函数的参数值,局部变量","等",[150,11548,11549,11550,11553],{},"注意事项：",[469,11551,11552],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[20,11555,11557],{"className":308,"code":11556,"language":310,"meta":25,"style":25},"int * func()\n{\n    int a = 10; \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n    return &a; \u002F\u002F放回局部变量的地址\n}\n\nint main() {\n    \u002F\u002F接受func的返回值\n    int *p = func();\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第二次这个数据不再保留\n    system(\"pause\");\n    return 0;\n}\n",[27,11558,11559,11570,11574,11589,11601,11605,11609,11617,11622,11637,11655,11672,11682,11690],{"__ignoreMap":25},[30,11560,11561,11563,11565,11568],{"class":32,"line":33},[30,11562,325],{"class":317},[30,11564,6700],{"class":317},[30,11566,11567],{"class":36}," func",[30,11569,2158],{"class":321},[30,11571,11572],{"class":32,"line":44},[30,11573,1732],{"class":321},[30,11575,11576,11578,11580,11582,11584,11586],{"class":32,"line":52},[30,11577,2167],{"class":317},[30,11579,11051],{"class":321},[30,11581,367],{"class":317},[30,11583,2220],{"class":40},[30,11585,376],{"class":321},[30,11587,11588],{"class":379}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[30,11590,11591,11593,11595,11598],{"class":32,"line":60},[30,11592,4272],{"class":317},[30,11594,10766],{"class":317},[30,11596,11597],{"class":321},"a;",[30,11599,11600],{"class":379}," \u002F\u002F放回局部变量的地址\n",[30,11602,11603],{"class":32,"line":68},[30,11604,1751],{"class":321},[30,11606,11607],{"class":32,"line":80},[30,11608,2582],{"emptyLinePlaceholder":245},[30,11610,11611,11613,11615],{"class":32,"line":88},[30,11612,325],{"class":317},[30,11614,2155],{"class":36},[30,11616,11035],{"class":321},[30,11618,11619],{"class":32,"line":96},[30,11620,11621],{"class":379},"    \u002F\u002F接受func的返回值\n",[30,11623,11624,11626,11628,11631,11633,11635],{"class":32,"line":104},[30,11625,2167],{"class":317},[30,11627,6700],{"class":317},[30,11629,11630],{"class":321},"p ",[30,11632,367],{"class":317},[30,11634,11567],{"class":36},[30,11636,5818],{"class":321},[30,11638,11639,11641,11643,11645,11647,11649,11652],{"class":32,"line":112},[30,11640,6711],{"class":321},[30,11642,1363],{"class":317},[30,11644,6700],{"class":317},[30,11646,11630],{"class":321},[30,11648,1363],{"class":317},[30,11650,11651],{"class":321}," endl;",[30,11653,11654],{"class":379}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[30,11656,11657,11659,11661,11663,11665,11667,11669],{"class":32,"line":123},[30,11658,6711],{"class":321},[30,11660,1363],{"class":317},[30,11662,6700],{"class":317},[30,11664,11630],{"class":321},[30,11666,1363],{"class":317},[30,11668,11651],{"class":321},[30,11670,11671],{"class":379}," \u002F\u002F第二次这个数据不再保留\n",[30,11673,11674,11676,11678,11680],{"class":32,"line":131},[30,11675,2485],{"class":36},[30,11677,322],{"class":321},[30,11679,2490],{"class":74},[30,11681,2901],{"class":321},[30,11683,11684,11686,11688],{"class":32,"line":142},[30,11685,4272],{"class":317},[30,11687,4275],{"class":40},[30,11689,1480],{"class":321},[30,11691,11692],{"class":32,"line":1811},[30,11693,1751],{"class":321},[157,11695,11696],{},"输出结果：",[157,11698,11699],{},[160,11700],{"alt":11701,"src":11702},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[157,11704,11705],{},"总结：不要返回局部变量的地址",[271,11707,11708],{"start":44},[150,11709,11710],{},"堆区",[147,11712,11713,11716],{},[150,11714,11715],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[150,11717,11718],{},"在c++中主要利用new在堆区开辟内存",[20,11720,11722],{"className":308,"code":11721,"language":310,"meta":25,"style":25},"int  *func()  \u002F\u002F函数返回指针\n{\n    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n   int *p= new int(10);\n   return p;\n}\nint main()\n{\n    \u002F\u002F在堆区开辟数据\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[27,11723,11724,11739,11743,11748,11769,11776,11780,11788,11792,11797,11811,11823],{"__ignoreMap":25},[30,11725,11726,11728,11731,11734,11736],{"class":32,"line":33},[30,11727,325],{"class":317},[30,11729,11730],{"class":317},"  *",[30,11732,11733],{"class":36},"func",[30,11735,2609],{"class":321},[30,11737,11738],{"class":379},"  \u002F\u002F函数返回指针\n",[30,11740,11741],{"class":32,"line":44},[30,11742,1732],{"class":321},[30,11744,11745],{"class":32,"line":52},[30,11746,11747],{"class":379},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[30,11749,11750,11752,11754,11756,11758,11761,11763,11765,11767],{"class":32,"line":60},[30,11751,4329],{"class":317},[30,11753,6700],{"class":317},[30,11755,157],{"class":321},[30,11757,367],{"class":317},[30,11759,11760],{"class":317}," new",[30,11762,2564],{"class":317},[30,11764,322],{"class":321},[30,11766,766],{"class":40},[30,11768,2901],{"class":321},[30,11770,11771,11773],{"class":32,"line":68},[30,11772,4563],{"class":317},[30,11774,11775],{"class":321}," p;\n",[30,11777,11778],{"class":32,"line":80},[30,11779,1751],{"class":321},[30,11781,11782,11784,11786],{"class":32,"line":88},[30,11783,325],{"class":317},[30,11785,2155],{"class":36},[30,11787,2158],{"class":321},[30,11789,11790],{"class":32,"line":96},[30,11791,1732],{"class":321},[30,11793,11794],{"class":32,"line":104},[30,11795,11796],{"class":379},"    \u002F\u002F在堆区开辟数据\n",[30,11798,11799,11801,11803,11805,11807,11809],{"class":32,"line":112},[30,11800,2167],{"class":317},[30,11802,6700],{"class":317},[30,11804,157],{"class":321},[30,11806,367],{"class":317},[30,11808,11733],{"class":36},[30,11810,5818],{"class":321},[30,11812,11813,11815,11817,11819,11821],{"class":32,"line":123},[30,11814,1737],{"class":321},[30,11816,6601],{"class":317},[30,11818,157],{"class":321},[30,11820,1363],{"class":317},[30,11822,1385],{"class":321},[30,11824,11825],{"class":32,"line":131},[30,11826,1751],{"class":321},[157,11828,11829],{},"图片展示：",[157,11831,11832],{},[160,11833],{"alt":11701,"src":11834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[157,11836,11837],{},"堆区内存由程序员管生死！！！",[271,11839,11840],{"start":52},[150,11841,11842],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[157,11844,11845],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[157,11847,11848,11849],{},"​语法：",[27,11850,11851],{}," new 数据类型",[157,11853,11854],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[20,11856,11858],{"className":308,"code":11857,"language":310,"meta":25,"style":25},"\u002F\u002F1.new的基本语法\nint *func()\n{\n    \u002F\u002F在堆区创建整型数据\n    \u002F\u002Fnew返回的是该数据类型的指针\n    int *p=new int(10);\u002F\u002Fnew啥类型就返回啥类型数据的指针\n}\nvoid test01()\n{\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n    delete p;\u002F\u002F删除这块地址\n}\n\u002F\u002F2.在堆区利用new开辟数组\nvoid test02()\n{\n    \u002F\u002F创建10整数数据的数组，在堆区\n    int *arr=new int[10];\u002F\u002F10代表数组有10个元素\n    for (int i=0;i\u003C10;i++)\n    {\n        arr[i]=i+100;\u002F\u002F给10个元素赋值100～109\n    }\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003Cendl;\n    }\n    \u002F\u002F释放堆区数组\n    \u002F\u002F释放数组的时候 要加[]才可以\n    delete[] arr;\n}\n\nint main()\n{\n    test01();\n    test02();\n}\n\n",[27,11859,11860,11865,11875,11879,11884,11889,11911,11915,11923,11927,11941,11953,11965,11977,11982,11987,11998,12002,12007,12015,12019,12024,12046,12072,12076,12094,12098,12124,12128,12140,12144,12149,12154,12162,12166,12170,12178,12182,12188,12194],{"__ignoreMap":25},[30,11861,11862],{"class":32,"line":33},[30,11863,11864],{"class":379},"\u002F\u002F1.new的基本语法\n",[30,11866,11867,11869,11871,11873],{"class":32,"line":44},[30,11868,325],{"class":317},[30,11870,6700],{"class":317},[30,11872,11733],{"class":36},[30,11874,2158],{"class":321},[30,11876,11877],{"class":32,"line":52},[30,11878,1732],{"class":321},[30,11880,11881],{"class":32,"line":60},[30,11882,11883],{"class":379},"    \u002F\u002F在堆区创建整型数据\n",[30,11885,11886],{"class":32,"line":68},[30,11887,11888],{"class":379},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[30,11890,11891,11893,11895,11897,11900,11902,11904,11906,11908],{"class":32,"line":80},[30,11892,2167],{"class":317},[30,11894,6700],{"class":317},[30,11896,157],{"class":321},[30,11898,11899],{"class":317},"=new",[30,11901,2564],{"class":317},[30,11903,322],{"class":321},[30,11905,766],{"class":40},[30,11907,6148],{"class":321},[30,11909,11910],{"class":379},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[30,11912,11913],{"class":32,"line":88},[30,11914,1751],{"class":321},[30,11916,11917,11919,11921],{"class":32,"line":96},[30,11918,5546],{"class":317},[30,11920,5770],{"class":36},[30,11922,2158],{"class":321},[30,11924,11925],{"class":32,"line":104},[30,11926,1732],{"class":321},[30,11928,11929,11931,11933,11935,11937,11939],{"class":32,"line":112},[30,11930,2167],{"class":317},[30,11932,6700],{"class":317},[30,11934,157],{"class":321},[30,11936,367],{"class":317},[30,11938,11733],{"class":36},[30,11940,5818],{"class":321},[30,11942,11943,11945,11947,11949,11951],{"class":32,"line":123},[30,11944,1737],{"class":321},[30,11946,6601],{"class":317},[30,11948,157],{"class":321},[30,11950,1363],{"class":317},[30,11952,1385],{"class":321},[30,11954,11955,11957,11959,11961,11963],{"class":32,"line":131},[30,11956,1737],{"class":321},[30,11958,6601],{"class":317},[30,11960,157],{"class":321},[30,11962,1363],{"class":317},[30,11964,1385],{"class":321},[30,11966,11967,11969,11971,11973,11975],{"class":32,"line":142},[30,11968,1737],{"class":321},[30,11970,6601],{"class":317},[30,11972,157],{"class":321},[30,11974,1363],{"class":317},[30,11976,1385],{"class":321},[30,11978,11979],{"class":32,"line":1811},[30,11980,11981],{"class":379},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[30,11983,11984],{"class":32,"line":1825},[30,11985,11986],{"class":379},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[30,11988,11989,11992,11995],{"class":32,"line":1830},[30,11990,11991],{"class":317},"    delete",[30,11993,11994],{"class":321}," p;",[30,11996,11997],{"class":379},"\u002F\u002F删除这块地址\n",[30,11999,12000],{"class":32,"line":1836},[30,12001,1751],{"class":321},[30,12003,12004],{"class":32,"line":1857},[30,12005,12006],{"class":379},"\u002F\u002F2.在堆区利用new开辟数组\n",[30,12008,12009,12011,12013],{"class":32,"line":1862},[30,12010,5546],{"class":317},[30,12012,5839],{"class":36},[30,12014,2158],{"class":321},[30,12016,12017],{"class":32,"line":1876},[30,12018,1732],{"class":321},[30,12020,12021],{"class":32,"line":1881},[30,12022,12023],{"class":379},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[30,12025,12026,12028,12030,12032,12034,12036,12038,12040,12043],{"class":32,"line":1910},[30,12027,2167],{"class":317},[30,12029,6700],{"class":317},[30,12031,4062],{"class":321},[30,12033,11899],{"class":317},[30,12035,2564],{"class":317},[30,12037,1210],{"class":321},[30,12039,766],{"class":40},[30,12041,12042],{"class":321},"];",[30,12044,12045],{"class":379},"\u002F\u002F10代表数组有10个元素\n",[30,12047,12048,12050,12052,12054,12056,12058,12060,12062,12064,12066,12068,12070],{"class":32,"line":1915},[30,12049,3383],{"class":317},[30,12051,1841],{"class":321},[30,12053,325],{"class":317},[30,12055,3214],{"class":321},[30,12057,367],{"class":317},[30,12059,511],{"class":40},[30,12061,3221],{"class":321},[30,12063,1230],{"class":317},[30,12065,766],{"class":40},[30,12067,3221],{"class":321},[30,12069,2474],{"class":317},[30,12071,328],{"class":321},[30,12073,12074],{"class":32,"line":1932},[30,12075,2212],{"class":321},[30,12077,12078,12081,12083,12085,12087,12089,12091],{"class":32,"line":1937},[30,12079,12080],{"class":321},"        arr[i]",[30,12082,367],{"class":317},[30,12084,761],{"class":321},[30,12086,801],{"class":317},[30,12088,631],{"class":40},[30,12090,376],{"class":321},[30,12092,12093],{"class":379},"\u002F\u002F给10个元素赋值100～109\n",[30,12095,12096],{"class":32,"line":1942},[30,12097,2369],{"class":321},[30,12099,12100,12102,12104,12106,12108,12110,12112,12114,12116,12118,12120,12122],{"class":32,"line":1947},[30,12101,3383],{"class":317},[30,12103,1841],{"class":321},[30,12105,325],{"class":317},[30,12107,3214],{"class":321},[30,12109,367],{"class":317},[30,12111,511],{"class":40},[30,12113,3221],{"class":321},[30,12115,1230],{"class":317},[30,12117,766],{"class":40},[30,12119,3221],{"class":321},[30,12121,2474],{"class":317},[30,12123,328],{"class":321},[30,12125,12126],{"class":32,"line":1961},[30,12127,2212],{"class":321},[30,12129,12130,12132,12134,12136,12138],{"class":32,"line":1966},[30,12131,3633],{"class":321},[30,12133,1363],{"class":317},[30,12135,4536],{"class":321},[30,12137,1363],{"class":317},[30,12139,1385],{"class":321},[30,12141,12142],{"class":32,"line":2759},[30,12143,2369],{"class":321},[30,12145,12146],{"class":32,"line":2773},[30,12147,12148],{"class":379},"    \u002F\u002F释放堆区数组\n",[30,12150,12151],{"class":32,"line":2781},[30,12152,12153],{"class":379},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[30,12155,12156,12159],{"class":32,"line":2786},[30,12157,12158],{"class":317},"    delete[]",[30,12160,12161],{"class":321}," arr;\n",[30,12163,12164],{"class":32,"line":2792},[30,12165,1751],{"class":321},[30,12167,12168],{"class":32,"line":2798},[30,12169,2582],{"emptyLinePlaceholder":245},[30,12171,12172,12174,12176],{"class":32,"line":2803},[30,12173,325],{"class":317},[30,12175,2155],{"class":36},[30,12177,2158],{"class":321},[30,12179,12180],{"class":32,"line":8130},[30,12181,1732],{"class":321},[30,12183,12184,12186],{"class":32,"line":8154},[30,12185,5815],{"class":36},[30,12187,5818],{"class":321},[30,12189,12190,12192],{"class":32,"line":8159},[30,12191,5884],{"class":36},[30,12193,5818],{"class":321},[30,12195,12196],{"class":32,"line":8165},[30,12197,1751],{"class":321},[234,12199,12200],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":12202},[12203],{"id":10871,"depth":44,"text":10872,"children":12204},[12205,12206],{"id":10903,"depth":52,"text":10904},{"id":11531,"depth":52,"text":11532},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10863,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12213,"title":12214,"body":12215,"description":25,"extension":243,"meta":13696,"navigation":245,"path":13697,"seo":13698,"stem":13699,"__hash__":13700},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12216,"toc":13688},[12217,12220,12224,12227,12230,12399,12403,12408,12425,12430,12582,12586,12589,12592,12986,12990,12993,12998,13001,13313,13317,13323,13483,13485,13493,13497,13500,13507,13685],[10,12218,12214],{"id":12219},"_6引用",[15,12221,12223],{"id":12222},"_61引用基本用法","6.1引用基本用法",[157,12225,12226],{},"引用的本质：给变量起别名",[157,12228,12229],{},"语法：数据类型 &别名=原名",[20,12231,12233],{"className":308,"code":12232,"language":310,"meta":25,"style":25},"int main() {\n\n    int a = 10;\n    int &b = a;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F10\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F10\n\n    b = 100;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F100\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F100\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,12234,12235,12243,12247,12259,12271,12275,12294,12313,12317,12328,12332,12351,12369,12373,12383,12387,12395],{"__ignoreMap":25},[30,12236,12237,12239,12241],{"class":32,"line":33},[30,12238,325],{"class":317},[30,12240,2155],{"class":36},[30,12242,11035],{"class":321},[30,12244,12245],{"class":32,"line":44},[30,12246,2582],{"emptyLinePlaceholder":245},[30,12248,12249,12251,12253,12255,12257],{"class":32,"line":52},[30,12250,2167],{"class":317},[30,12252,11051],{"class":321},[30,12254,367],{"class":317},[30,12256,2220],{"class":40},[30,12258,1480],{"class":321},[30,12260,12261,12263,12265,12267,12269],{"class":32,"line":60},[30,12262,2167],{"class":317},[30,12264,10766],{"class":317},[30,12266,11127],{"class":321},[30,12268,367],{"class":317},[30,12270,1619],{"class":321},[30,12272,12273],{"class":32,"line":68},[30,12274,2582],{"emptyLinePlaceholder":245},[30,12276,12277,12279,12281,12284,12286,12288,12290,12292],{"class":32,"line":80},[30,12278,6711],{"class":321},[30,12280,1363],{"class":317},[30,12282,12283],{"class":74}," \"a = \"",[30,12285,1631],{"class":317},[30,12287,11051],{"class":321},[30,12289,1363],{"class":317},[30,12291,11651],{"class":321},[30,12293,7450],{"class":379},[30,12295,12296,12298,12300,12303,12305,12307,12309,12311],{"class":32,"line":88},[30,12297,6711],{"class":321},[30,12299,1363],{"class":317},[30,12301,12302],{"class":74}," \"b = \"",[30,12304,1631],{"class":317},[30,12306,11064],{"class":321},[30,12308,1363],{"class":317},[30,12310,11651],{"class":321},[30,12312,7450],{"class":379},[30,12314,12315],{"class":32,"line":96},[30,12316,2582],{"emptyLinePlaceholder":245},[30,12318,12319,12322,12324,12326],{"class":32,"line":104},[30,12320,12321],{"class":321},"    b ",[30,12323,367],{"class":317},[30,12325,5936],{"class":40},[30,12327,1480],{"class":321},[30,12329,12330],{"class":32,"line":112},[30,12331,2582],{"emptyLinePlaceholder":245},[30,12333,12334,12336,12338,12340,12342,12344,12346,12348],{"class":32,"line":123},[30,12335,6711],{"class":321},[30,12337,1363],{"class":317},[30,12339,12283],{"class":74},[30,12341,1631],{"class":317},[30,12343,11051],{"class":321},[30,12345,1363],{"class":317},[30,12347,11651],{"class":321},[30,12349,12350],{"class":379},"\u002F\u002F100\n",[30,12352,12353,12355,12357,12359,12361,12363,12365,12367],{"class":32,"line":131},[30,12354,6711],{"class":321},[30,12356,1363],{"class":317},[30,12358,12302],{"class":74},[30,12360,1631],{"class":317},[30,12362,11064],{"class":321},[30,12364,1363],{"class":317},[30,12366,11651],{"class":321},[30,12368,12350],{"class":379},[30,12370,12371],{"class":32,"line":142},[30,12372,2582],{"emptyLinePlaceholder":245},[30,12374,12375,12377,12379,12381],{"class":32,"line":1811},[30,12376,2485],{"class":36},[30,12378,322],{"class":321},[30,12380,2490],{"class":74},[30,12382,2901],{"class":321},[30,12384,12385],{"class":32,"line":1825},[30,12386,2582],{"emptyLinePlaceholder":245},[30,12388,12389,12391,12393],{"class":32,"line":1830},[30,12390,4272],{"class":317},[30,12392,4275],{"class":40},[30,12394,1480],{"class":321},[30,12396,12397],{"class":32,"line":1836},[30,12398,1751],{"class":321},[15,12400,12402],{"id":12401},"_62引用的注意事项","6.2引用的注意事项",[271,12404,12405],{},[150,12406,12407],{},"引用必须要初始化",[20,12409,12411],{"className":308,"code":12410,"language":310,"meta":25,"style":25},"int &b;\u002F\u002F非常错误！\n",[27,12412,12413],{"__ignoreMap":25},[30,12414,12415,12417,12419,12422],{"class":32,"line":33},[30,12416,325],{"class":317},[30,12418,10766],{"class":317},[30,12420,12421],{"class":321},"b;",[30,12423,12424],{"class":379},"\u002F\u002F非常错误！\n",[271,12426,12427],{"start":44},[150,12428,12429],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[20,12431,12433],{"className":308,"code":12432,"language":310,"meta":25,"style":25},"int main() {\n    int a = 10;\n    int b = 20;\n    \u002F\u002Fint &c; \u002F\u002F错误，引用必须初始化\n    int &c = a; \u002F\u002F一旦初始化后，就不可以更改\n    c = b; \u002F\u002F这是赋值操作，不是更改引用\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"c = \" \u003C\u003C c \u003C\u003C endl;\u002F\u002F20\n    system(\"pause\");\n    return 0;\n}\n",[27,12434,12435,12443,12455,12467,12475,12491,12504,12522,12540,12560,12570,12578],{"__ignoreMap":25},[30,12436,12437,12439,12441],{"class":32,"line":33},[30,12438,325],{"class":317},[30,12440,2155],{"class":36},[30,12442,11035],{"class":321},[30,12444,12445,12447,12449,12451,12453],{"class":32,"line":44},[30,12446,2167],{"class":317},[30,12448,11051],{"class":321},[30,12450,367],{"class":317},[30,12452,2220],{"class":40},[30,12454,1480],{"class":321},[30,12456,12457,12459,12461,12463,12465],{"class":32,"line":52},[30,12458,2167],{"class":317},[30,12460,11064],{"class":321},[30,12462,367],{"class":317},[30,12464,9132],{"class":40},[30,12466,1480],{"class":321},[30,12468,12469,12472],{"class":32,"line":60},[30,12470,12471],{"class":379},"    \u002F\u002Fint &c;",[30,12473,12474],{"class":379}," \u002F\u002F错误，引用必须初始化\n",[30,12476,12477,12479,12481,12483,12485,12488],{"class":32,"line":68},[30,12478,2167],{"class":317},[30,12480,10766],{"class":317},[30,12482,3128],{"class":321},[30,12484,367],{"class":317},[30,12486,12487],{"class":321}," a;",[30,12489,12490],{"class":379}," \u002F\u002F一旦初始化后，就不可以更改\n",[30,12492,12493,12496,12498,12501],{"class":32,"line":80},[30,12494,12495],{"class":321},"    c ",[30,12497,367],{"class":317},[30,12499,12500],{"class":321}," b;",[30,12502,12503],{"class":379}," \u002F\u002F这是赋值操作，不是更改引用\n",[30,12505,12506,12508,12510,12512,12514,12516,12518,12520],{"class":32,"line":88},[30,12507,6711],{"class":321},[30,12509,1363],{"class":317},[30,12511,12283],{"class":74},[30,12513,1631],{"class":317},[30,12515,11051],{"class":321},[30,12517,1363],{"class":317},[30,12519,11651],{"class":321},[30,12521,7435],{"class":379},[30,12523,12524,12526,12528,12530,12532,12534,12536,12538],{"class":32,"line":96},[30,12525,6711],{"class":321},[30,12527,1363],{"class":317},[30,12529,12302],{"class":74},[30,12531,1631],{"class":317},[30,12533,11064],{"class":321},[30,12535,1363],{"class":317},[30,12537,11651],{"class":321},[30,12539,7435],{"class":379},[30,12541,12542,12544,12546,12549,12551,12554,12556,12558],{"class":32,"line":104},[30,12543,6711],{"class":321},[30,12545,1363],{"class":317},[30,12547,12548],{"class":74}," \"c = \"",[30,12550,1631],{"class":317},[30,12552,12553],{"class":321}," c ",[30,12555,1363],{"class":317},[30,12557,11651],{"class":321},[30,12559,7435],{"class":379},[30,12561,12562,12564,12566,12568],{"class":32,"line":112},[30,12563,2485],{"class":36},[30,12565,322],{"class":321},[30,12567,2490],{"class":74},[30,12569,2901],{"class":321},[30,12571,12572,12574,12576],{"class":32,"line":123},[30,12573,4272],{"class":317},[30,12575,4275],{"class":40},[30,12577,1480],{"class":321},[30,12579,12580],{"class":32,"line":131},[30,12581,1751],{"class":321},[15,12583,12585],{"id":12584},"_63引用做函数参数","6.3引用做函数参数",[157,12587,12588],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[157,12590,12591],{},"优点：可以简化指针修改实参",[20,12593,12595],{"className":308,"code":12594,"language":310,"meta":25,"style":25},"\u002F\u002F1. 值传递\nvoid mySwap01(int a, int b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\n\u002F\u002F2. 地址传递\nvoid mySwap02(int* a, int* b) {\n    int temp = *a;\n    *a = *b;\n    *b = temp;\n}\n\n\u002F\u002F3. 引用传递\nvoid mySwap03(int& a, int& b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\nint main() {\n\n    int a = 10;\n    int b = 20;\n\n    mySwap01(a, b);\u002F\u002F值传递，形参不会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap02(&a, &b);\u002F\u002F地址传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap03(a, b);\u002F\u002F引用传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n\n",[27,12596,12597,12602,12625,12636,12646,12655,12659,12663,12668,12690,12702,12714,12724,12728,12732,12737,12759,12769,12777,12785,12789,12793,12801,12805,12817,12829,12833,12844,12870,12874,12894,12918,12922,12932,12956,12960,12970,12974,12982],{"__ignoreMap":25},[30,12598,12599],{"class":32,"line":33},[30,12600,12601],{"class":379},"\u002F\u002F1. 值传递\n",[30,12603,12604,12606,12609,12611,12613,12615,12618,12620,12622],{"class":32,"line":44},[30,12605,5546],{"class":317},[30,12607,12608],{"class":36}," mySwap01",[30,12610,322],{"class":321},[30,12612,325],{"class":317},[30,12614,1585],{"class":5398},[30,12616,12617],{"class":321},", ",[30,12619,325],{"class":317},[30,12621,3015],{"class":5398},[30,12623,12624],{"class":321},") {\n",[30,12626,12627,12629,12632,12634],{"class":32,"line":52},[30,12628,2167],{"class":317},[30,12630,12631],{"class":321}," temp ",[30,12633,367],{"class":317},[30,12635,1619],{"class":321},[30,12637,12638,12641,12643],{"class":32,"line":60},[30,12639,12640],{"class":321},"    a ",[30,12642,367],{"class":317},[30,12644,12645],{"class":321}," b;\n",[30,12647,12648,12650,12652],{"class":32,"line":68},[30,12649,12321],{"class":321},[30,12651,367],{"class":317},[30,12653,12654],{"class":321}," temp;\n",[30,12656,12657],{"class":32,"line":80},[30,12658,1751],{"class":321},[30,12660,12661],{"class":32,"line":88},[30,12662,2582],{"emptyLinePlaceholder":245},[30,12664,12665],{"class":32,"line":96},[30,12666,12667],{"class":379},"\u002F\u002F2. 地址传递\n",[30,12669,12670,12672,12675,12677,12680,12682,12684,12686,12688],{"class":32,"line":104},[30,12671,5546],{"class":317},[30,12673,12674],{"class":36}," mySwap02",[30,12676,322],{"class":321},[30,12678,12679],{"class":317},"int*",[30,12681,1585],{"class":5398},[30,12683,12617],{"class":321},[30,12685,12679],{"class":317},[30,12687,3015],{"class":5398},[30,12689,12624],{"class":321},[30,12691,12692,12694,12696,12698,12700],{"class":32,"line":112},[30,12693,2167],{"class":317},[30,12695,12631],{"class":321},[30,12697,367],{"class":317},[30,12699,6700],{"class":317},[30,12701,6379],{"class":321},[30,12703,12704,12706,12708,12710,12712],{"class":32,"line":123},[30,12705,6585],{"class":317},[30,12707,11101],{"class":321},[30,12709,367],{"class":317},[30,12711,6700],{"class":317},[30,12713,6251],{"class":321},[30,12715,12716,12718,12720,12722],{"class":32,"line":131},[30,12717,6585],{"class":317},[30,12719,11127],{"class":321},[30,12721,367],{"class":317},[30,12723,12654],{"class":321},[30,12725,12726],{"class":32,"line":142},[30,12727,1751],{"class":321},[30,12729,12730],{"class":32,"line":1811},[30,12731,2582],{"emptyLinePlaceholder":245},[30,12733,12734],{"class":32,"line":1825},[30,12735,12736],{"class":379},"\u002F\u002F3. 引用传递\n",[30,12738,12739,12741,12744,12746,12749,12751,12753,12755,12757],{"class":32,"line":1830},[30,12740,5546],{"class":317},[30,12742,12743],{"class":36}," mySwap03",[30,12745,322],{"class":321},[30,12747,12748],{"class":317},"int&",[30,12750,1585],{"class":5398},[30,12752,12617],{"class":321},[30,12754,12748],{"class":317},[30,12756,3015],{"class":5398},[30,12758,12624],{"class":321},[30,12760,12761,12763,12765,12767],{"class":32,"line":1836},[30,12762,2167],{"class":317},[30,12764,12631],{"class":321},[30,12766,367],{"class":317},[30,12768,1619],{"class":321},[30,12770,12771,12773,12775],{"class":32,"line":1857},[30,12772,12640],{"class":321},[30,12774,367],{"class":317},[30,12776,12645],{"class":321},[30,12778,12779,12781,12783],{"class":32,"line":1862},[30,12780,12321],{"class":321},[30,12782,367],{"class":317},[30,12784,12654],{"class":321},[30,12786,12787],{"class":32,"line":1876},[30,12788,1751],{"class":321},[30,12790,12791],{"class":32,"line":1881},[30,12792,2582],{"emptyLinePlaceholder":245},[30,12794,12795,12797,12799],{"class":32,"line":1910},[30,12796,325],{"class":317},[30,12798,2155],{"class":36},[30,12800,11035],{"class":321},[30,12802,12803],{"class":32,"line":1915},[30,12804,2582],{"emptyLinePlaceholder":245},[30,12806,12807,12809,12811,12813,12815],{"class":32,"line":1932},[30,12808,2167],{"class":317},[30,12810,11051],{"class":321},[30,12812,367],{"class":317},[30,12814,2220],{"class":40},[30,12816,1480],{"class":321},[30,12818,12819,12821,12823,12825,12827],{"class":32,"line":1937},[30,12820,2167],{"class":317},[30,12822,11064],{"class":321},[30,12824,367],{"class":317},[30,12826,9132],{"class":40},[30,12828,1480],{"class":321},[30,12830,12831],{"class":32,"line":1942},[30,12832,2582],{"emptyLinePlaceholder":245},[30,12834,12835,12838,12841],{"class":32,"line":1947},[30,12836,12837],{"class":36},"    mySwap01",[30,12839,12840],{"class":321},"(a, b);",[30,12842,12843],{"class":379},"\u002F\u002F值传递，形参不会修饰实参\n",[30,12845,12846,12848,12850,12853,12855,12857,12859,12862,12864,12866,12868],{"class":32,"line":1961},[30,12847,6711],{"class":321},[30,12849,1363],{"class":317},[30,12851,12852],{"class":74}," \"a:\"",[30,12854,1631],{"class":317},[30,12856,11051],{"class":321},[30,12858,1363],{"class":317},[30,12860,12861],{"class":74}," \" b:\"",[30,12863,1631],{"class":317},[30,12865,11064],{"class":321},[30,12867,1363],{"class":317},[30,12869,9022],{"class":321},[30,12871,12872],{"class":32,"line":1966},[30,12873,2582],{"emptyLinePlaceholder":245},[30,12875,12876,12879,12881,12883,12886,12888,12891],{"class":32,"line":2759},[30,12877,12878],{"class":36},"    mySwap02",[30,12880,322],{"class":321},[30,12882,673],{"class":317},[30,12884,12885],{"class":321},"a, ",[30,12887,673],{"class":317},[30,12889,12890],{"class":321},"b);",[30,12892,12893],{"class":379},"\u002F\u002F地址传递，形参会修饰实参\n",[30,12895,12896,12898,12900,12902,12904,12906,12908,12910,12912,12914,12916],{"class":32,"line":2773},[30,12897,6711],{"class":321},[30,12899,1363],{"class":317},[30,12901,12852],{"class":74},[30,12903,1631],{"class":317},[30,12905,11051],{"class":321},[30,12907,1363],{"class":317},[30,12909,12861],{"class":74},[30,12911,1631],{"class":317},[30,12913,11064],{"class":321},[30,12915,1363],{"class":317},[30,12917,9022],{"class":321},[30,12919,12920],{"class":32,"line":2781},[30,12921,2582],{"emptyLinePlaceholder":245},[30,12923,12924,12927,12929],{"class":32,"line":2786},[30,12925,12926],{"class":36},"    mySwap03",[30,12928,12840],{"class":321},[30,12930,12931],{"class":379},"\u002F\u002F引用传递，形参会修饰实参\n",[30,12933,12934,12936,12938,12940,12942,12944,12946,12948,12950,12952,12954],{"class":32,"line":2792},[30,12935,6711],{"class":321},[30,12937,1363],{"class":317},[30,12939,12852],{"class":74},[30,12941,1631],{"class":317},[30,12943,11051],{"class":321},[30,12945,1363],{"class":317},[30,12947,12861],{"class":74},[30,12949,1631],{"class":317},[30,12951,11064],{"class":321},[30,12953,1363],{"class":317},[30,12955,9022],{"class":321},[30,12957,12958],{"class":32,"line":2798},[30,12959,2582],{"emptyLinePlaceholder":245},[30,12961,12962,12964,12966,12968],{"class":32,"line":2803},[30,12963,2485],{"class":36},[30,12965,322],{"class":321},[30,12967,2490],{"class":74},[30,12969,2901],{"class":321},[30,12971,12972],{"class":32,"line":8130},[30,12973,2582],{"emptyLinePlaceholder":245},[30,12975,12976,12978,12980],{"class":32,"line":8154},[30,12977,4272],{"class":317},[30,12979,4275],{"class":40},[30,12981,1480],{"class":321},[30,12983,12984],{"class":32,"line":8159},[30,12985,1751],{"class":321},[15,12987,12989],{"id":12988},"_64引用做函数的返回值","6.4引用做函数的返回值",[157,12991,12992],{},"作用：引用是可以作为函数的返回值存在的",[157,12994,9207,12995],{},[469,12996,12997],{},"不要返回局部变量引用",[157,12999,13000],{},"用法：函数调用作为左值",[20,13002,13004],{"className":10123,"code":13003,"language":10125,"meta":25,"style":25},"\u002F\u002F返回局部变量引用\nint& test01() {\n    int a = 10; \u002F\u002F局部变量\n    return a;\n}\n\n\u002F\u002F返回静态变量引用\nint& test02() {\n    static int a = 20;\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n    return a;\n}\n\nint main() {\n\n    \u002F\u002F不能返回局部变量的引用\n    int& ref = test01();\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F10 第一次正确，是因为编译器做了保留\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n\n    \u002F\u002F如果函数做左值，那么必须返回引用\n    int& ref2 = test02();\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n\n    test02() = 1000;\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,13005,13006,13011,13019,13034,13040,13044,13048,13053,13061,13078,13084,13088,13092,13100,13104,13109,13123,13143,13162,13166,13171,13184,13204,13222,13226,13242,13246,13265,13283,13287,13297,13301,13309],{"__ignoreMap":25},[30,13007,13008],{"class":32,"line":33},[30,13009,13010],{"class":379},"\u002F\u002F返回局部变量引用\n",[30,13012,13013,13015,13017],{"class":32,"line":44},[30,13014,12748],{"class":317},[30,13016,5770],{"class":36},[30,13018,11035],{"class":321},[30,13020,13021,13023,13025,13027,13029,13031],{"class":32,"line":52},[30,13022,2167],{"class":317},[30,13024,11051],{"class":321},[30,13026,367],{"class":317},[30,13028,2220],{"class":40},[30,13030,376],{"class":321},[30,13032,13033],{"class":379}," \u002F\u002F局部变量\n",[30,13035,13036,13038],{"class":32,"line":60},[30,13037,4272],{"class":317},[30,13039,1619],{"class":321},[30,13041,13042],{"class":32,"line":68},[30,13043,1751],{"class":321},[30,13045,13046],{"class":32,"line":80},[30,13047,2582],{"emptyLinePlaceholder":245},[30,13049,13050],{"class":32,"line":88},[30,13051,13052],{"class":379},"\u002F\u002F返回静态变量引用\n",[30,13054,13055,13057,13059],{"class":32,"line":96},[30,13056,12748],{"class":317},[30,13058,5839],{"class":36},[30,13060,11035],{"class":321},[30,13062,13063,13065,13067,13069,13071,13073,13075],{"class":32,"line":104},[30,13064,11202],{"class":317},[30,13066,2564],{"class":317},[30,13068,11051],{"class":321},[30,13070,367],{"class":317},[30,13072,9132],{"class":40},[30,13074,376],{"class":321},[30,13076,13077],{"class":379},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[30,13079,13080,13082],{"class":32,"line":112},[30,13081,4272],{"class":317},[30,13083,1619],{"class":321},[30,13085,13086],{"class":32,"line":123},[30,13087,1751],{"class":321},[30,13089,13090],{"class":32,"line":131},[30,13091,2582],{"emptyLinePlaceholder":245},[30,13093,13094,13096,13098],{"class":32,"line":142},[30,13095,325],{"class":317},[30,13097,2155],{"class":36},[30,13099,11035],{"class":321},[30,13101,13102],{"class":32,"line":1811},[30,13103,2582],{"emptyLinePlaceholder":245},[30,13105,13106],{"class":32,"line":1825},[30,13107,13108],{"class":379},"    \u002F\u002F不能返回局部变量的引用\n",[30,13110,13111,13114,13117,13119,13121],{"class":32,"line":1830},[30,13112,13113],{"class":317},"    int&",[30,13115,13116],{"class":321}," ref ",[30,13118,367],{"class":317},[30,13120,5770],{"class":36},[30,13122,5818],{"class":321},[30,13124,13125,13127,13129,13132,13134,13136,13138,13140],{"class":32,"line":1836},[30,13126,6711],{"class":321},[30,13128,1363],{"class":317},[30,13130,13131],{"class":74}," \"ref = \"",[30,13133,1631],{"class":317},[30,13135,13116],{"class":321},[30,13137,1363],{"class":317},[30,13139,11651],{"class":321},[30,13141,13142],{"class":379},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[30,13144,13145,13147,13149,13151,13153,13155,13157,13159],{"class":32,"line":1857},[30,13146,6711],{"class":321},[30,13148,1363],{"class":317},[30,13150,13131],{"class":74},[30,13152,1631],{"class":317},[30,13154,13116],{"class":321},[30,13156,1363],{"class":317},[30,13158,11651],{"class":321},[30,13160,13161],{"class":379},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[30,13163,13164],{"class":32,"line":1862},[30,13165,2582],{"emptyLinePlaceholder":245},[30,13167,13168],{"class":32,"line":1876},[30,13169,13170],{"class":379},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[30,13172,13173,13175,13178,13180,13182],{"class":32,"line":1881},[30,13174,13113],{"class":317},[30,13176,13177],{"class":321}," ref2 ",[30,13179,367],{"class":317},[30,13181,5839],{"class":36},[30,13183,5818],{"class":321},[30,13185,13186,13188,13190,13193,13195,13197,13199,13201],{"class":32,"line":1910},[30,13187,6711],{"class":321},[30,13189,1363],{"class":317},[30,13191,13192],{"class":74}," \"ref2 = \"",[30,13194,1631],{"class":317},[30,13196,13177],{"class":321},[30,13198,1363],{"class":317},[30,13200,11651],{"class":321},[30,13202,13203],{"class":379}," \u002F\u002F20\n",[30,13205,13206,13208,13210,13212,13214,13216,13218,13220],{"class":32,"line":1915},[30,13207,6711],{"class":321},[30,13209,1363],{"class":317},[30,13211,13192],{"class":74},[30,13213,1631],{"class":317},[30,13215,13177],{"class":321},[30,13217,1363],{"class":317},[30,13219,11651],{"class":321},[30,13221,13203],{"class":379},[30,13223,13224],{"class":32,"line":1932},[30,13225,2582],{"emptyLinePlaceholder":245},[30,13227,13228,13230,13233,13235,13237,13239],{"class":32,"line":1937},[30,13229,5884],{"class":36},[30,13231,13232],{"class":321},"() ",[30,13234,367],{"class":317},[30,13236,3181],{"class":40},[30,13238,376],{"class":321},[30,13240,13241],{"class":379},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[30,13243,13244],{"class":32,"line":1942},[30,13245,2582],{"emptyLinePlaceholder":245},[30,13247,13248,13250,13252,13254,13256,13258,13260,13262],{"class":32,"line":1947},[30,13249,6711],{"class":321},[30,13251,1363],{"class":317},[30,13253,13192],{"class":74},[30,13255,1631],{"class":317},[30,13257,13177],{"class":321},[30,13259,1363],{"class":317},[30,13261,11651],{"class":321},[30,13263,13264],{"class":379}," \u002F\u002F1000\n",[30,13266,13267,13269,13271,13273,13275,13277,13279,13281],{"class":32,"line":1961},[30,13268,6711],{"class":321},[30,13270,1363],{"class":317},[30,13272,13192],{"class":74},[30,13274,1631],{"class":317},[30,13276,13177],{"class":321},[30,13278,1363],{"class":317},[30,13280,11651],{"class":321},[30,13282,13264],{"class":379},[30,13284,13285],{"class":32,"line":1966},[30,13286,2582],{"emptyLinePlaceholder":245},[30,13288,13289,13291,13293,13295],{"class":32,"line":2759},[30,13290,2485],{"class":36},[30,13292,322],{"class":321},[30,13294,2490],{"class":74},[30,13296,2901],{"class":321},[30,13298,13299],{"class":32,"line":2773},[30,13300,2582],{"emptyLinePlaceholder":245},[30,13302,13303,13305,13307],{"class":32,"line":2781},[30,13304,4272],{"class":317},[30,13306,4275],{"class":40},[30,13308,1480],{"class":321},[30,13310,13311],{"class":32,"line":2786},[30,13312,1751],{"class":321},[15,13314,13316],{"id":13315},"_65引用的本质","6.5引用的本质",[157,13318,13319,13320],{},"本质：",[469,13321,13322],{},"引用的本质在c++内部实现是一个指针常量.",[20,13324,13326],{"className":308,"code":13325,"language":310,"meta":25,"style":25},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\nvoid func(int& ref){\n    ref = 100; \u002F\u002F ref是引用，转换为*ref = 100\n}\nint main(){\n    int a = 10;\n    \n    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n    int& ref = a; \n    ref = 20; \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n    \n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C endl;\n    cout \u003C\u003C \"ref:\" \u003C\u003C ref \u003C\u003C endl;\n    \n    func(a);\n    return 0;\n}\n",[27,13327,13328,13333,13349,13363,13367,13376,13388,13393,13398,13409,13422,13426,13442,13459,13463,13471,13479],{"__ignoreMap":25},[30,13329,13330],{"class":32,"line":33},[30,13331,13332],{"class":379},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[30,13334,13335,13337,13339,13341,13343,13346],{"class":32,"line":44},[30,13336,5546],{"class":317},[30,13338,11567],{"class":36},[30,13340,322],{"class":321},[30,13342,12748],{"class":317},[30,13344,13345],{"class":5398}," ref",[30,13347,13348],{"class":321},"){\n",[30,13350,13351,13354,13356,13358,13360],{"class":32,"line":52},[30,13352,13353],{"class":321},"    ref ",[30,13355,367],{"class":317},[30,13357,5936],{"class":40},[30,13359,376],{"class":321},[30,13361,13362],{"class":379}," \u002F\u002F ref是引用，转换为*ref = 100\n",[30,13364,13365],{"class":32,"line":60},[30,13366,1751],{"class":321},[30,13368,13369,13371,13373],{"class":32,"line":68},[30,13370,325],{"class":317},[30,13372,2155],{"class":36},[30,13374,13375],{"class":321},"(){\n",[30,13377,13378,13380,13382,13384,13386],{"class":32,"line":80},[30,13379,2167],{"class":317},[30,13381,11051],{"class":321},[30,13383,367],{"class":317},[30,13385,2220],{"class":40},[30,13387,1480],{"class":321},[30,13389,13390],{"class":32,"line":88},[30,13391,13392],{"class":321},"    \n",[30,13394,13395],{"class":32,"line":96},[30,13396,13397],{"class":379},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[30,13399,13400,13402,13404,13406],{"class":32,"line":104},[30,13401,13113],{"class":317},[30,13403,13116],{"class":321},[30,13405,367],{"class":317},[30,13407,13408],{"class":321}," a; \n",[30,13410,13411,13413,13415,13417,13419],{"class":32,"line":112},[30,13412,13353],{"class":321},[30,13414,367],{"class":317},[30,13416,9132],{"class":40},[30,13418,376],{"class":321},[30,13420,13421],{"class":379}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[30,13423,13424],{"class":32,"line":123},[30,13425,13392],{"class":321},[30,13427,13428,13430,13432,13434,13436,13438,13440],{"class":32,"line":131},[30,13429,6711],{"class":321},[30,13431,1363],{"class":317},[30,13433,12852],{"class":74},[30,13435,1631],{"class":317},[30,13437,11051],{"class":321},[30,13439,1363],{"class":317},[30,13441,9022],{"class":321},[30,13443,13444,13446,13448,13451,13453,13455,13457],{"class":32,"line":142},[30,13445,6711],{"class":321},[30,13447,1363],{"class":317},[30,13449,13450],{"class":74}," \"ref:\"",[30,13452,1631],{"class":317},[30,13454,13116],{"class":321},[30,13456,1363],{"class":317},[30,13458,9022],{"class":321},[30,13460,13461],{"class":32,"line":1811},[30,13462,13392],{"class":321},[30,13464,13465,13468],{"class":32,"line":1825},[30,13466,13467],{"class":36},"    func",[30,13469,13470],{"class":321},"(a);\n",[30,13472,13473,13475,13477],{"class":32,"line":1830},[30,13474,4272],{"class":317},[30,13476,4275],{"class":40},[30,13478,1480],{"class":321},[30,13480,13481],{"class":32,"line":1836},[30,13482,1751],{"class":321},[157,13484,11514],{},[271,13486,13487,13490],{},[150,13488,13489],{},"引用的本质，就是一个指针常量",[150,13491,13492],{},"引用一旦初始化，就不可以发生改变",[15,13494,13496],{"id":13495},"_66常量引用","6.6常量引用",[157,13498,13499],{},"作用：常量引用主要用来修饰形参",[157,13501,13502,13503,13506],{},"在函数形参列表中，可以加",[469,13504,13505],{},"const修饰形参","，防止形参改变实参",[20,13508,13510],{"className":308,"code":13509,"language":310,"meta":25,"style":25},"\u002F\u002F引用使用的场景，通常用来修饰形参\n\u002F\u002F加上const就不能修改实参的\nvoid showValue(const int& v) {\n    \u002F\u002Fv += 100;\n    cout \u003C\u003C v \u003C\u003C endl;\n}\n\nint main() {\n\n    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n    const int& ref = 10;\n\n    \u002F\u002Fref = 100;  \u002F\u002F加入const后不可以修改变量\n    cout \u003C\u003C ref \u003C\u003C endl;\n\n    \u002F\u002F函数中利用常量引用防止误操作修改实参\n    int a = 10;\n    showValue(a);\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,13511,13512,13517,13522,13541,13546,13559,13563,13567,13575,13579,13584,13589,13603,13607,13615,13627,13631,13636,13648,13655,13659,13669,13673,13681],{"__ignoreMap":25},[30,13513,13514],{"class":32,"line":33},[30,13515,13516],{"class":379},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[30,13518,13519],{"class":32,"line":44},[30,13520,13521],{"class":379},"\u002F\u002F加上const就不能修改实参的\n",[30,13523,13524,13526,13529,13531,13533,13536,13539],{"class":32,"line":52},[30,13525,5546],{"class":317},[30,13527,13528],{"class":36}," showValue",[30,13530,322],{"class":321},[30,13532,6974],{"class":317},[30,13534,13535],{"class":317}," int&",[30,13537,13538],{"class":5398}," v",[30,13540,12624],{"class":321},[30,13542,13543],{"class":32,"line":60},[30,13544,13545],{"class":379},"    \u002F\u002Fv += 100;\n",[30,13547,13548,13550,13552,13555,13557],{"class":32,"line":68},[30,13549,6711],{"class":321},[30,13551,1363],{"class":317},[30,13553,13554],{"class":321}," v ",[30,13556,1363],{"class":317},[30,13558,9022],{"class":321},[30,13560,13561],{"class":32,"line":80},[30,13562,1751],{"class":321},[30,13564,13565],{"class":32,"line":88},[30,13566,2582],{"emptyLinePlaceholder":245},[30,13568,13569,13571,13573],{"class":32,"line":96},[30,13570,325],{"class":317},[30,13572,2155],{"class":36},[30,13574,11035],{"class":321},[30,13576,13577],{"class":32,"line":104},[30,13578,2582],{"emptyLinePlaceholder":245},[30,13580,13581],{"class":32,"line":112},[30,13582,13583],{"class":379},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[30,13585,13586],{"class":32,"line":123},[30,13587,13588],{"class":379},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[30,13590,13591,13593,13595,13597,13599,13601],{"class":32,"line":131},[30,13592,11403],{"class":317},[30,13594,13535],{"class":317},[30,13596,13116],{"class":321},[30,13598,367],{"class":317},[30,13600,2220],{"class":40},[30,13602,1480],{"class":321},[30,13604,13605],{"class":32,"line":142},[30,13606,2582],{"emptyLinePlaceholder":245},[30,13608,13609,13612],{"class":32,"line":1811},[30,13610,13611],{"class":379},"    \u002F\u002Fref = 100;",[30,13613,13614],{"class":379},"  \u002F\u002F加入const后不可以修改变量\n",[30,13616,13617,13619,13621,13623,13625],{"class":32,"line":1825},[30,13618,6711],{"class":321},[30,13620,1363],{"class":317},[30,13622,13116],{"class":321},[30,13624,1363],{"class":317},[30,13626,9022],{"class":321},[30,13628,13629],{"class":32,"line":1830},[30,13630,2582],{"emptyLinePlaceholder":245},[30,13632,13633],{"class":32,"line":1836},[30,13634,13635],{"class":379},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[30,13637,13638,13640,13642,13644,13646],{"class":32,"line":1857},[30,13639,2167],{"class":317},[30,13641,11051],{"class":321},[30,13643,367],{"class":317},[30,13645,2220],{"class":40},[30,13647,1480],{"class":321},[30,13649,13650,13653],{"class":32,"line":1862},[30,13651,13652],{"class":36},"    showValue",[30,13654,13470],{"class":321},[30,13656,13657],{"class":32,"line":1876},[30,13658,2582],{"emptyLinePlaceholder":245},[30,13660,13661,13663,13665,13667],{"class":32,"line":1881},[30,13662,2485],{"class":36},[30,13664,322],{"class":321},[30,13666,2490],{"class":74},[30,13668,2901],{"class":321},[30,13670,13671],{"class":32,"line":1910},[30,13672,2582],{"emptyLinePlaceholder":245},[30,13674,13675,13677,13679],{"class":32,"line":1915},[30,13676,4272],{"class":317},[30,13678,4275],{"class":40},[30,13680,1480],{"class":321},[30,13682,13683],{"class":32,"line":1932},[30,13684,1751],{"class":321},[234,13686,13687],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":13689},[13690,13691,13692,13693,13694,13695],{"id":12222,"depth":44,"text":12223},{"id":12401,"depth":44,"text":12402},{"id":12584,"depth":44,"text":12585},{"id":12988,"depth":44,"text":12989},{"id":13315,"depth":44,"text":13316},{"id":13495,"depth":44,"text":13496},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12214,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13702,"title":13703,"body":13704,"description":25,"extension":243,"meta":14785,"navigation":245,"path":14786,"seo":14787,"stem":14788,"__hash__":14789},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13705,"toc":14777},[13706,13709,13713,13716,13721,13953,13955,13966,13970,13973,13981,14085,14088,14092,14095,14099,14102,14107,14129,14135,14462,14465,14469,14477,14774],[10,13707,13703],{"id":13708},"_7函数高级部分",[15,13710,13712],{"id":13711},"_71函数默认参数","7.1函数默认参数",[157,13714,13715],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[157,13717,5363,13718],{},[27,13719,13720],{}," 返回值类型  函数名 （参数= 默认值）{}",[20,13722,13724],{"className":308,"code":13723,"language":310,"meta":25,"style":25},"int func(int a, int b = 10, int c = 10) {\n    return a + b + c;\n}\n\n\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\nint func2(int a = 10, int b = 10);\nint func2(int a, int b) {\n    return a + b;\n}\n\nint main() {\n\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(20, 20) \u003C\u003C endl;\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(100) \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,13725,13726,13761,13776,13780,13784,13789,13794,13823,13843,13853,13857,13861,13869,13873,13901,13923,13927,13937,13941,13949],{"__ignoreMap":25},[30,13727,13728,13730,13732,13734,13736,13738,13740,13742,13744,13747,13749,13751,13753,13755,13757,13759],{"class":32,"line":33},[30,13729,325],{"class":317},[30,13731,11567],{"class":36},[30,13733,322],{"class":321},[30,13735,325],{"class":317},[30,13737,1585],{"class":5398},[30,13739,12617],{"class":321},[30,13741,325],{"class":317},[30,13743,3015],{"class":5398},[30,13745,13746],{"class":317}," =",[30,13748,2220],{"class":40},[30,13750,12617],{"class":321},[30,13752,325],{"class":317},[30,13754,3031],{"class":5398},[30,13756,13746],{"class":317},[30,13758,2220],{"class":40},[30,13760,12624],{"class":321},[30,13762,13763,13765,13767,13769,13771,13773],{"class":32,"line":44},[30,13764,4272],{"class":317},[30,13766,11051],{"class":321},[30,13768,801],{"class":317},[30,13770,11064],{"class":321},[30,13772,801],{"class":317},[30,13774,13775],{"class":321}," c;\n",[30,13777,13778],{"class":32,"line":52},[30,13779,1751],{"class":321},[30,13781,13782],{"class":32,"line":60},[30,13783,2582],{"emptyLinePlaceholder":245},[30,13785,13786],{"class":32,"line":68},[30,13787,13788],{"class":379},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[30,13790,13791],{"class":32,"line":80},[30,13792,13793],{"class":379},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[30,13795,13796,13798,13801,13803,13805,13807,13809,13811,13813,13815,13817,13819,13821],{"class":32,"line":88},[30,13797,325],{"class":317},[30,13799,13800],{"class":36}," func2",[30,13802,322],{"class":321},[30,13804,325],{"class":317},[30,13806,1585],{"class":5398},[30,13808,13746],{"class":317},[30,13810,2220],{"class":40},[30,13812,12617],{"class":321},[30,13814,325],{"class":317},[30,13816,3015],{"class":5398},[30,13818,13746],{"class":317},[30,13820,2220],{"class":40},[30,13822,2901],{"class":321},[30,13824,13825,13827,13829,13831,13833,13835,13837,13839,13841],{"class":32,"line":96},[30,13826,325],{"class":317},[30,13828,13800],{"class":36},[30,13830,322],{"class":321},[30,13832,325],{"class":317},[30,13834,1585],{"class":5398},[30,13836,12617],{"class":321},[30,13838,325],{"class":317},[30,13840,3015],{"class":5398},[30,13842,12624],{"class":321},[30,13844,13845,13847,13849,13851],{"class":32,"line":104},[30,13846,4272],{"class":317},[30,13848,11051],{"class":321},[30,13850,801],{"class":317},[30,13852,12645],{"class":321},[30,13854,13855],{"class":32,"line":112},[30,13856,1751],{"class":321},[30,13858,13859],{"class":32,"line":123},[30,13860,2582],{"emptyLinePlaceholder":245},[30,13862,13863,13865,13867],{"class":32,"line":131},[30,13864,325],{"class":317},[30,13866,2155],{"class":36},[30,13868,11035],{"class":321},[30,13870,13871],{"class":32,"line":142},[30,13872,2582],{"emptyLinePlaceholder":245},[30,13874,13875,13877,13879,13882,13884,13886,13888,13890,13892,13894,13897,13899],{"class":32,"line":1811},[30,13876,6711],{"class":321},[30,13878,1363],{"class":317},[30,13880,13881],{"class":74}," \"ret = \"",[30,13883,1631],{"class":317},[30,13885,11567],{"class":36},[30,13887,322],{"class":321},[30,13889,1020],{"class":40},[30,13891,12617],{"class":321},[30,13893,1020],{"class":40},[30,13895,13896],{"class":321},") ",[30,13898,1363],{"class":317},[30,13900,9022],{"class":321},[30,13902,13903,13905,13907,13909,13911,13913,13915,13917,13919,13921],{"class":32,"line":1825},[30,13904,6711],{"class":321},[30,13906,1363],{"class":317},[30,13908,13881],{"class":74},[30,13910,1631],{"class":317},[30,13912,11567],{"class":36},[30,13914,322],{"class":321},[30,13916,631],{"class":40},[30,13918,13896],{"class":321},[30,13920,1363],{"class":317},[30,13922,9022],{"class":321},[30,13924,13925],{"class":32,"line":1830},[30,13926,2582],{"emptyLinePlaceholder":245},[30,13928,13929,13931,13933,13935],{"class":32,"line":1836},[30,13930,2485],{"class":36},[30,13932,322],{"class":321},[30,13934,2490],{"class":74},[30,13936,2901],{"class":321},[30,13938,13939],{"class":32,"line":1857},[30,13940,2582],{"emptyLinePlaceholder":245},[30,13942,13943,13945,13947],{"class":32,"line":1862},[30,13944,4272],{"class":317},[30,13946,4275],{"class":40},[30,13948,1480],{"class":321},[30,13950,13951],{"class":32,"line":1876},[30,13952,1751],{"class":321},[157,13954,11514],{},[271,13956,13957,13960,13963],{},[150,13958,13959],{},"我传就用我；没传就用你",[150,13961,13962],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[150,13964,13965],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[15,13967,13969],{"id":13968},"_72函数的占位参数","7.2函数的占位参数",[157,13971,13972],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[157,13974,13975,13977,13978],{},[469,13976,5363],{}," ",[27,13979,13980],{},"返回值类型 函数名 (数据类型){}",[20,13982,13984],{"className":308,"code":13983,"language":310,"meta":25,"style":25},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\nvoid func(int a, int) {\n    cout \u003C\u003C \"this is func\" \u003C\u003C endl;\n}\nint main() {\n\n    func(10,10); \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,13985,13986,13991,14009,14022,14026,14034,14038,14055,14059,14069,14073,14081],{"__ignoreMap":25},[30,13987,13988],{"class":32,"line":33},[30,13989,13990],{"class":379},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[30,13992,13993,13995,13997,13999,14001,14003,14005,14007],{"class":32,"line":44},[30,13994,5546],{"class":317},[30,13996,11567],{"class":36},[30,13998,322],{"class":321},[30,14000,325],{"class":317},[30,14002,1585],{"class":5398},[30,14004,12617],{"class":321},[30,14006,325],{"class":317},[30,14008,12624],{"class":321},[30,14010,14011,14013,14015,14018,14020],{"class":32,"line":52},[30,14012,6711],{"class":321},[30,14014,1363],{"class":317},[30,14016,14017],{"class":74}," \"this is func\"",[30,14019,1631],{"class":317},[30,14021,9022],{"class":321},[30,14023,14024],{"class":32,"line":60},[30,14025,1751],{"class":321},[30,14027,14028,14030,14032],{"class":32,"line":68},[30,14029,325],{"class":317},[30,14031,2155],{"class":36},[30,14033,11035],{"class":321},[30,14035,14036],{"class":32,"line":80},[30,14037,2582],{"emptyLinePlaceholder":245},[30,14039,14040,14042,14044,14046,14048,14050,14052],{"class":32,"line":88},[30,14041,13467],{"class":36},[30,14043,322],{"class":321},[30,14045,766],{"class":40},[30,14047,698],{"class":321},[30,14049,766],{"class":40},[30,14051,6148],{"class":321},[30,14053,14054],{"class":379}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[30,14056,14057],{"class":32,"line":96},[30,14058,2582],{"emptyLinePlaceholder":245},[30,14060,14061,14063,14065,14067],{"class":32,"line":104},[30,14062,2485],{"class":36},[30,14064,322],{"class":321},[30,14066,2490],{"class":74},[30,14068,2901],{"class":321},[30,14070,14071],{"class":32,"line":112},[30,14072,2582],{"emptyLinePlaceholder":245},[30,14074,14075,14077,14079],{"class":32,"line":123},[30,14076,4272],{"class":317},[30,14078,4275],{"class":40},[30,14080,1480],{"class":321},[30,14082,14083],{"class":32,"line":131},[30,14084,1751],{"class":321},[157,14086,14087],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[15,14089,14091],{"id":14090},"_73函数重载","7.3函数重载",[157,14093,14094],{},"意思是函数名是可以相同的",[287,14096,14098],{"id":14097},"_731基本语法","7.3.1基本语法",[157,14100,14101],{},"作用：函数名可以相同，提高复用性",[157,14103,14104],{},[469,14105,14106],{},"函数重载满足条件：",[147,14108,14109,14112,14115],{},[150,14110,14111],{},"同一个作用域下",[150,14113,14114],{},"函数名称相同",[150,14116,14117,14118,14121,14122,14125,14126],{},"函数参数",[469,14119,14120],{},"类型不同","  或者 ",[469,14123,14124],{},"个数不同"," 或者 ",[469,14127,14128],{},"顺序不同",[157,14130,14131,14134],{},[469,14132,14133],{},"注意:","  函数的返回值不可以作为函数重载的条件",[20,14136,14138],{"className":10123,"code":14137,"language":10125,"meta":25,"style":25},"\u002F\u002F函数重载需要函数都在同一个作用域下\nvoid func()\n{\n    cout \u003C\u003C \"func 的调用！\" \u003C\u003C endl;\n}\nvoid func(int a)\n{\n    cout \u003C\u003C \"func (int a) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a)\n{\n    cout \u003C\u003C \"func (double a)的调用！\" \u003C\u003C endl;\n}\nvoid func(int a ,double b)\n{\n    cout \u003C\u003C \"func (int a ,double b) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a ,int b)\n{\n    cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n}\n\n\u002F\u002F函数返回值不可以作为函数重载条件\n\u002F\u002Fint func(double a, int b)\n\u002F\u002F{\n\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n\u002F\u002F}\n\n\nint main() {\n\n    func();\n    func(10);\n    func(3.14);\n    func(10,3.14);\n    func(3.14 , 10);\n    \n    system(\"pause\");\n\n    return 0;\n}\n",[27,14139,14140,14145,14153,14157,14170,14174,14188,14192,14205,14209,14224,14228,14241,14245,14266,14270,14283,14287,14307,14311,14324,14328,14332,14337,14342,14347,14352,14357,14361,14365,14373,14377,14383,14393,14403,14417,14432,14436,14446,14450,14458],{"__ignoreMap":25},[30,14141,14142],{"class":32,"line":33},[30,14143,14144],{"class":379},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[30,14146,14147,14149,14151],{"class":32,"line":44},[30,14148,5546],{"class":317},[30,14150,11567],{"class":36},[30,14152,2158],{"class":321},[30,14154,14155],{"class":32,"line":52},[30,14156,1732],{"class":321},[30,14158,14159,14161,14163,14166,14168],{"class":32,"line":60},[30,14160,6711],{"class":321},[30,14162,1363],{"class":317},[30,14164,14165],{"class":74}," \"func 的调用！\"",[30,14167,1631],{"class":317},[30,14169,9022],{"class":321},[30,14171,14172],{"class":32,"line":68},[30,14173,1751],{"class":321},[30,14175,14176,14178,14180,14182,14184,14186],{"class":32,"line":80},[30,14177,5546],{"class":317},[30,14179,11567],{"class":36},[30,14181,322],{"class":321},[30,14183,325],{"class":317},[30,14185,1585],{"class":5398},[30,14187,328],{"class":321},[30,14189,14190],{"class":32,"line":88},[30,14191,1732],{"class":321},[30,14193,14194,14196,14198,14201,14203],{"class":32,"line":96},[30,14195,6711],{"class":321},[30,14197,1363],{"class":317},[30,14199,14200],{"class":74}," \"func (int a) 的调用！\"",[30,14202,1631],{"class":317},[30,14204,9022],{"class":321},[30,14206,14207],{"class":32,"line":104},[30,14208,1751],{"class":321},[30,14210,14211,14213,14215,14217,14220,14222],{"class":32,"line":112},[30,14212,5546],{"class":317},[30,14214,11567],{"class":36},[30,14216,322],{"class":321},[30,14218,14219],{"class":317},"double",[30,14221,1585],{"class":5398},[30,14223,328],{"class":321},[30,14225,14226],{"class":32,"line":123},[30,14227,1732],{"class":321},[30,14229,14230,14232,14234,14237,14239],{"class":32,"line":131},[30,14231,6711],{"class":321},[30,14233,1363],{"class":317},[30,14235,14236],{"class":74}," \"func (double a)的调用！\"",[30,14238,1631],{"class":317},[30,14240,9022],{"class":321},[30,14242,14243],{"class":32,"line":142},[30,14244,1751],{"class":321},[30,14246,14247,14249,14251,14253,14255,14257,14260,14262,14264],{"class":32,"line":1811},[30,14248,5546],{"class":317},[30,14250,11567],{"class":36},[30,14252,322],{"class":321},[30,14254,325],{"class":317},[30,14256,1585],{"class":5398},[30,14258,14259],{"class":321}," ,",[30,14261,14219],{"class":317},[30,14263,3015],{"class":5398},[30,14265,328],{"class":321},[30,14267,14268],{"class":32,"line":1825},[30,14269,1732],{"class":321},[30,14271,14272,14274,14276,14279,14281],{"class":32,"line":1830},[30,14273,6711],{"class":321},[30,14275,1363],{"class":317},[30,14277,14278],{"class":74}," \"func (int a ,double b) 的调用！\"",[30,14280,1631],{"class":317},[30,14282,9022],{"class":321},[30,14284,14285],{"class":32,"line":1836},[30,14286,1751],{"class":321},[30,14288,14289,14291,14293,14295,14297,14299,14301,14303,14305],{"class":32,"line":1857},[30,14290,5546],{"class":317},[30,14292,11567],{"class":36},[30,14294,322],{"class":321},[30,14296,14219],{"class":317},[30,14298,1585],{"class":5398},[30,14300,14259],{"class":321},[30,14302,325],{"class":317},[30,14304,3015],{"class":5398},[30,14306,328],{"class":321},[30,14308,14309],{"class":32,"line":1862},[30,14310,1732],{"class":321},[30,14312,14313,14315,14317,14320,14322],{"class":32,"line":1876},[30,14314,6711],{"class":321},[30,14316,1363],{"class":317},[30,14318,14319],{"class":74}," \"func (double a ,int b)的调用！\"",[30,14321,1631],{"class":317},[30,14323,9022],{"class":321},[30,14325,14326],{"class":32,"line":1881},[30,14327,1751],{"class":321},[30,14329,14330],{"class":32,"line":1910},[30,14331,2582],{"emptyLinePlaceholder":245},[30,14333,14334],{"class":32,"line":1915},[30,14335,14336],{"class":379},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[30,14338,14339],{"class":32,"line":1932},[30,14340,14341],{"class":379},"\u002F\u002Fint func(double a, int b)\n",[30,14343,14344],{"class":32,"line":1937},[30,14345,14346],{"class":379},"\u002F\u002F{\n",[30,14348,14349],{"class":32,"line":1942},[30,14350,14351],{"class":379},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[30,14353,14354],{"class":32,"line":1947},[30,14355,14356],{"class":379},"\u002F\u002F}\n",[30,14358,14359],{"class":32,"line":1961},[30,14360,2582],{"emptyLinePlaceholder":245},[30,14362,14363],{"class":32,"line":1966},[30,14364,2582],{"emptyLinePlaceholder":245},[30,14366,14367,14369,14371],{"class":32,"line":2759},[30,14368,325],{"class":317},[30,14370,2155],{"class":36},[30,14372,11035],{"class":321},[30,14374,14375],{"class":32,"line":2773},[30,14376,2582],{"emptyLinePlaceholder":245},[30,14378,14379,14381],{"class":32,"line":2781},[30,14380,13467],{"class":36},[30,14382,5818],{"class":321},[30,14384,14385,14387,14389,14391],{"class":32,"line":2786},[30,14386,13467],{"class":36},[30,14388,322],{"class":321},[30,14390,766],{"class":40},[30,14392,2901],{"class":321},[30,14394,14395,14397,14399,14401],{"class":32,"line":2792},[30,14396,13467],{"class":36},[30,14398,322],{"class":321},[30,14400,370],{"class":40},[30,14402,2901],{"class":321},[30,14404,14405,14407,14409,14411,14413,14415],{"class":32,"line":2798},[30,14406,13467],{"class":36},[30,14408,322],{"class":321},[30,14410,766],{"class":40},[30,14412,698],{"class":321},[30,14414,370],{"class":40},[30,14416,2901],{"class":321},[30,14418,14419,14421,14423,14425,14428,14430],{"class":32,"line":2803},[30,14420,13467],{"class":36},[30,14422,322],{"class":321},[30,14424,370],{"class":40},[30,14426,14427],{"class":321}," , ",[30,14429,766],{"class":40},[30,14431,2901],{"class":321},[30,14433,14434],{"class":32,"line":8130},[30,14435,13392],{"class":321},[30,14437,14438,14440,14442,14444],{"class":32,"line":8154},[30,14439,2485],{"class":36},[30,14441,322],{"class":321},[30,14443,2490],{"class":74},[30,14445,2901],{"class":321},[30,14447,14448],{"class":32,"line":8159},[30,14449,2582],{"emptyLinePlaceholder":245},[30,14451,14452,14454,14456],{"class":32,"line":8165},[30,14453,4272],{"class":317},[30,14455,4275],{"class":40},[30,14457,1480],{"class":321},[30,14459,14460],{"class":32,"line":8192},[30,14461,1751],{"class":321},[157,14463,14464],{},"重点：函数返回值不可以作为函数重载条件！",[287,14466,14468],{"id":14467},"_732注意事项","7.3.2注意事项",[147,14470,14471,14474],{},[150,14472,14473],{},"引用作为重载条件!!!",[150,14475,14476],{},"函数重载碰到函数默认参数",[20,14478,14480],{"className":308,"code":14479,"language":310,"meta":25,"style":25},"\u002F\u002F函数重载注意事项\n\u002F\u002F1、引用作为重载条件\n\nvoid func(int &a)\n{\n    cout \u003C\u003C \"func (int &a) 调用 \" \u003C\u003C endl;\n}\n\nvoid func(const int &a)\n{\n    cout \u003C\u003C \"func (const int &a) 调用 \" \u003C\u003C endl;\n}\n\n\n\u002F\u002F2、函数重载碰到函数默认参数\n\nvoid func2(int a, int b = 10)\n{\n    cout \u003C\u003C \"func2(int a, int b = 10) 调用\" \u003C\u003C endl;\n}\n\nvoid func2(int a)\n{\n    cout \u003C\u003C \"func2(int a) 调用\" \u003C\u003C endl;\n}\n\nint main() {\n    \n    int a = 10;\n    func(a); \u002F\u002F调用无const   因为a本身是个变量，可读可写\n    func(10);\u002F\u002F调用有const   10是个常量\n\n\n    \u002F\u002Ffunc2(10); \u002F\u002F碰到默认参数产生歧义，需要避免\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,14481,14482,14487,14492,14496,14512,14516,14529,14533,14537,14555,14559,14572,14576,14580,14584,14589,14593,14617,14621,14634,14638,14642,14656,14660,14673,14677,14681,14689,14693,14705,14715,14728,14732,14736,14744,14748,14758,14762,14770],{"__ignoreMap":25},[30,14483,14484],{"class":32,"line":33},[30,14485,14486],{"class":379},"\u002F\u002F函数重载注意事项\n",[30,14488,14489],{"class":32,"line":44},[30,14490,14491],{"class":379},"\u002F\u002F1、引用作为重载条件\n",[30,14493,14494],{"class":32,"line":52},[30,14495,2582],{"emptyLinePlaceholder":245},[30,14497,14498,14500,14502,14504,14506,14508,14510],{"class":32,"line":60},[30,14499,5546],{"class":317},[30,14501,11567],{"class":36},[30,14503,322],{"class":321},[30,14505,325],{"class":317},[30,14507,10766],{"class":317},[30,14509,558],{"class":5398},[30,14511,328],{"class":321},[30,14513,14514],{"class":32,"line":68},[30,14515,1732],{"class":321},[30,14517,14518,14520,14522,14525,14527],{"class":32,"line":80},[30,14519,6711],{"class":321},[30,14521,1363],{"class":317},[30,14523,14524],{"class":74}," \"func (int &a) 调用 \"",[30,14526,1631],{"class":317},[30,14528,9022],{"class":321},[30,14530,14531],{"class":32,"line":88},[30,14532,1751],{"class":321},[30,14534,14535],{"class":32,"line":96},[30,14536,2582],{"emptyLinePlaceholder":245},[30,14538,14539,14541,14543,14545,14547,14549,14551,14553],{"class":32,"line":104},[30,14540,5546],{"class":317},[30,14542,11567],{"class":36},[30,14544,322],{"class":321},[30,14546,6974],{"class":317},[30,14548,2564],{"class":317},[30,14550,10766],{"class":317},[30,14552,558],{"class":5398},[30,14554,328],{"class":321},[30,14556,14557],{"class":32,"line":112},[30,14558,1732],{"class":321},[30,14560,14561,14563,14565,14568,14570],{"class":32,"line":123},[30,14562,6711],{"class":321},[30,14564,1363],{"class":317},[30,14566,14567],{"class":74}," \"func (const int &a) 调用 \"",[30,14569,1631],{"class":317},[30,14571,9022],{"class":321},[30,14573,14574],{"class":32,"line":131},[30,14575,1751],{"class":321},[30,14577,14578],{"class":32,"line":142},[30,14579,2582],{"emptyLinePlaceholder":245},[30,14581,14582],{"class":32,"line":1811},[30,14583,2582],{"emptyLinePlaceholder":245},[30,14585,14586],{"class":32,"line":1825},[30,14587,14588],{"class":379},"\u002F\u002F2、函数重载碰到函数默认参数\n",[30,14590,14591],{"class":32,"line":1830},[30,14592,2582],{"emptyLinePlaceholder":245},[30,14594,14595,14597,14599,14601,14603,14605,14607,14609,14611,14613,14615],{"class":32,"line":1836},[30,14596,5546],{"class":317},[30,14598,13800],{"class":36},[30,14600,322],{"class":321},[30,14602,325],{"class":317},[30,14604,1585],{"class":5398},[30,14606,12617],{"class":321},[30,14608,325],{"class":317},[30,14610,3015],{"class":5398},[30,14612,13746],{"class":317},[30,14614,2220],{"class":40},[30,14616,328],{"class":321},[30,14618,14619],{"class":32,"line":1857},[30,14620,1732],{"class":321},[30,14622,14623,14625,14627,14630,14632],{"class":32,"line":1862},[30,14624,6711],{"class":321},[30,14626,1363],{"class":317},[30,14628,14629],{"class":74}," \"func2(int a, int b = 10) 调用\"",[30,14631,1631],{"class":317},[30,14633,9022],{"class":321},[30,14635,14636],{"class":32,"line":1876},[30,14637,1751],{"class":321},[30,14639,14640],{"class":32,"line":1881},[30,14641,2582],{"emptyLinePlaceholder":245},[30,14643,14644,14646,14648,14650,14652,14654],{"class":32,"line":1910},[30,14645,5546],{"class":317},[30,14647,13800],{"class":36},[30,14649,322],{"class":321},[30,14651,325],{"class":317},[30,14653,1585],{"class":5398},[30,14655,328],{"class":321},[30,14657,14658],{"class":32,"line":1915},[30,14659,1732],{"class":321},[30,14661,14662,14664,14666,14669,14671],{"class":32,"line":1932},[30,14663,6711],{"class":321},[30,14665,1363],{"class":317},[30,14667,14668],{"class":74}," \"func2(int a) 调用\"",[30,14670,1631],{"class":317},[30,14672,9022],{"class":321},[30,14674,14675],{"class":32,"line":1937},[30,14676,1751],{"class":321},[30,14678,14679],{"class":32,"line":1942},[30,14680,2582],{"emptyLinePlaceholder":245},[30,14682,14683,14685,14687],{"class":32,"line":1947},[30,14684,325],{"class":317},[30,14686,2155],{"class":36},[30,14688,11035],{"class":321},[30,14690,14691],{"class":32,"line":1961},[30,14692,13392],{"class":321},[30,14694,14695,14697,14699,14701,14703],{"class":32,"line":1966},[30,14696,2167],{"class":317},[30,14698,11051],{"class":321},[30,14700,367],{"class":317},[30,14702,2220],{"class":40},[30,14704,1480],{"class":321},[30,14706,14707,14709,14712],{"class":32,"line":2759},[30,14708,13467],{"class":36},[30,14710,14711],{"class":321},"(a);",[30,14713,14714],{"class":379}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[30,14716,14717,14719,14721,14723,14725],{"class":32,"line":2773},[30,14718,13467],{"class":36},[30,14720,322],{"class":321},[30,14722,766],{"class":40},[30,14724,6148],{"class":321},[30,14726,14727],{"class":379},"\u002F\u002F调用有const   10是个常量\n",[30,14729,14730],{"class":32,"line":2781},[30,14731,2582],{"emptyLinePlaceholder":245},[30,14733,14734],{"class":32,"line":2786},[30,14735,2582],{"emptyLinePlaceholder":245},[30,14737,14738,14741],{"class":32,"line":2792},[30,14739,14740],{"class":379},"    \u002F\u002Ffunc2(10);",[30,14742,14743],{"class":379}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[30,14745,14746],{"class":32,"line":2798},[30,14747,2582],{"emptyLinePlaceholder":245},[30,14749,14750,14752,14754,14756],{"class":32,"line":2803},[30,14751,2485],{"class":36},[30,14753,322],{"class":321},[30,14755,2490],{"class":74},[30,14757,2901],{"class":321},[30,14759,14760],{"class":32,"line":8130},[30,14761,2582],{"emptyLinePlaceholder":245},[30,14763,14764,14766,14768],{"class":32,"line":8154},[30,14765,4272],{"class":317},[30,14767,4275],{"class":40},[30,14769,1480],{"class":321},[30,14771,14772],{"class":32,"line":8159},[30,14773,1751],{"class":321},[234,14775,14776],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":14778},[14779,14780,14781],{"id":13711,"depth":44,"text":13712},{"id":13968,"depth":44,"text":13969},{"id":14090,"depth":44,"text":14091,"children":14782},[14783,14784],{"id":14097,"depth":52,"text":14098},{"id":14467,"depth":52,"text":14468},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13703,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14791,"title":14792,"body":14793,"description":23547,"extension":243,"meta":23548,"navigation":245,"path":23549,"seo":23550,"stem":23551,"__hash__":23552},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14794,"toc":23528},[14795,14798,14804,14811,14816,14819,14822,14825,14829,14833,14836,14839,14847,14852,14855,14862,14867,15026,15029,15282,15285,15288,15291,15296,15299,15302,15313,15318,15554,15558,15568,15571,15579,15726,15730,15733,15736,15740,16185,16189,16197,16205,17117,17124,17129,17757,17760,17763,17766,17885,17888,17975,17978,18104,18107,18201,18204,18557,18561,18569,18573,18580,18583,18586,18597,18603,18608,18620,18628,18648,18656,18673,18859,18862,18866,18869,18872,18875,18878,18881,18884,18887,19347,19353,19357,19360,19371,19958,19961,20450,20454,20457,20460,20463,20466,20469,20477,20873,20877,20880,20883,21330,21333,21336,21341,21344,21349,21352,21356,21359,21361,21367,21370,21676,21686,21727,21731,21734,21736,21769,21772,22079,22081,22096,22099,22122,22131,22137,22140,22144,22147,22150,22155,22166,22171,22179,22184,22314,22317,22320,22495,22500,22712,22716,22719,22833,22838,23077,23081,23085,23088,23091,23096,23201,23204,23207,23210,23214,23325,23328,23331,23336,23388,23391,23394,23399,23445,23448,23453,23521,23523,23526],[10,14796,14792],{"id":14797},"_8类和对象",[157,14799,14800,14801],{},"C++面向对象的三大特性为",[469,14802,14803],{},"封装、继承、多态",[157,14805,14806,14807,14810],{},"C++认为",[469,14808,14809],{},"万事万物都皆为对象","，对象上有其属性和行为",[157,14812,14813],{},[469,14814,14815],{},"例如：",[157,14817,14818],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[157,14820,14821],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[157,14823,14824],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[15,14826,14828],{"id":14827},"_81封装","8.1封装",[287,14830,14832],{"id":14831},"_811封装的意义","8.1.1封装的意义",[157,14834,14835],{},"封装是C++面向对象三大特性之一",[157,14837,14838],{},"封装的意义：",[147,14840,14841,14844],{},[150,14842,14843],{},"将属性和行为作为一个整体，表现生活中的事物",[150,14845,14846],{},"将属性和行为加以权限控制",[157,14848,14849],{},[469,14850,14851],{},"封装意义一：",[157,14853,14854],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[157,14856,14857,13977,14859],{},[469,14858,5363],{},[27,14860,14861],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[271,14863,14864],{},[150,14865,14866],{},"**示例1：**设计一个圆类，求圆的周长",[20,14868,14870],{"className":308,"code":14869,"language":310,"meta":25,"style":25},"class Circle\n{\n    \u002F\u002F访问权限\n    \u002F\u002F公共权限\npublic:\n    \u002F\u002F属性\n    int m_r;\n    \u002F\u002F行为\n    double calculateZC()\n    {\n        return 2*PI*m_r;\n    }\n};\nint main()\n{\n    \u002F\u002F通过圆类 创建具体的圆(对象)\n    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n    Circle c1;\n    \u002F\u002F给圆对象 的属性进行赋值\n    c1.m_r=10;\n    cout\u003C\u003C\"圆的周长\"\u003C\u003Cc1.calculateZC()\u003C\u003Cendl;\n}\n",[27,14871,14872,14880,14884,14889,14894,14899,14904,14911,14916,14926,14930,14948,14952,14956,14964,14968,14973,14978,14983,14988,14999,15022],{"__ignoreMap":25},[30,14873,14874,14877],{"class":32,"line":33},[30,14875,14876],{"class":317},"class",[30,14878,14879],{"class":36}," Circle\n",[30,14881,14882],{"class":32,"line":44},[30,14883,1732],{"class":321},[30,14885,14886],{"class":32,"line":52},[30,14887,14888],{"class":379},"    \u002F\u002F访问权限\n",[30,14890,14891],{"class":32,"line":60},[30,14892,14893],{"class":379},"    \u002F\u002F公共权限\n",[30,14895,14896],{"class":32,"line":68},[30,14897,14898],{"class":317},"public:\n",[30,14900,14901],{"class":32,"line":80},[30,14902,14903],{"class":379},"    \u002F\u002F属性\n",[30,14905,14906,14908],{"class":32,"line":88},[30,14907,2167],{"class":317},[30,14909,14910],{"class":321}," m_r;\n",[30,14912,14913],{"class":32,"line":96},[30,14914,14915],{"class":379},"    \u002F\u002F行为\n",[30,14917,14918,14921,14924],{"class":32,"line":104},[30,14919,14920],{"class":317},"    double",[30,14922,14923],{"class":36}," calculateZC",[30,14925,2158],{"class":321},[30,14927,14928],{"class":32,"line":112},[30,14929,2212],{"class":321},[30,14931,14932,14935,14938,14940,14943,14945],{"class":32,"line":123},[30,14933,14934],{"class":317},"        return",[30,14936,14937],{"class":40}," 2",[30,14939,775],{"class":317},[30,14941,14942],{"class":321},"PI",[30,14944,775],{"class":317},[30,14946,14947],{"class":321},"m_r;\n",[30,14949,14950],{"class":32,"line":131},[30,14951,2369],{"class":321},[30,14953,14954],{"class":32,"line":142},[30,14955,4177],{"class":321},[30,14957,14958,14960,14962],{"class":32,"line":1811},[30,14959,325],{"class":317},[30,14961,2155],{"class":36},[30,14963,2158],{"class":321},[30,14965,14966],{"class":32,"line":1825},[30,14967,1732],{"class":321},[30,14969,14970],{"class":32,"line":1830},[30,14971,14972],{"class":379},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[30,14974,14975],{"class":32,"line":1836},[30,14976,14977],{"class":379},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[30,14979,14980],{"class":32,"line":1857},[30,14981,14982],{"class":321},"    Circle c1;\n",[30,14984,14985],{"class":32,"line":1862},[30,14986,14987],{"class":379},"    \u002F\u002F给圆对象 的属性进行赋值\n",[30,14989,14990,14993,14995,14997],{"class":32,"line":1876},[30,14991,14992],{"class":321},"    c1.m_r",[30,14994,367],{"class":317},[30,14996,766],{"class":40},[30,14998,1480],{"class":321},[30,15000,15001,15003,15005,15008,15010,15013,15016,15018,15020],{"class":32,"line":1881},[30,15002,1737],{"class":321},[30,15004,1363],{"class":317},[30,15006,15007],{"class":74},"\"圆的周长\"",[30,15009,1363],{"class":317},[30,15011,15012],{"class":321},"c1.",[30,15014,15015],{"class":36},"calculateZC",[30,15017,2609],{"class":321},[30,15019,1363],{"class":317},[30,15021,1385],{"class":321},[30,15023,15024],{"class":32,"line":1910},[30,15025,1751],{"class":321},[157,15027,15028],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[20,15030,15032],{"className":308,"code":15031,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nclass Student\n{\npublic:\n    string m_name;\n    int m_id;\n    \u002F\u002F赋值姓名\n    void setName(string name)\n    {\n        m_name=name;\n    }\n    \u002F\u002F赋值学号\n    void setId(int id)\n    {\n        m_id=id;\n    }\n    \u002F\u002F打印学生信息\n    void printInfo()\n    {\n        cout\u003C\u003C\"姓名：\"\u003C\u003Cm_name\u003C\u003C\" \"\u003C\u003C\"学号：\"\u003C\u003Cm_id\u003C\u003Cendl;\n    }\n};\nint main()\n{\n    \u002F\u002F实例化\n    Student s1;\n    s1.setName(\"张三\");\n    s1.setId(123456);\n    s1.printInfo();\n}\n",[27,15033,15034,15040,15050,15056,15062,15066,15070,15075,15082,15087,15105,15109,15119,15123,15128,15144,15148,15158,15162,15167,15175,15179,15211,15215,15219,15227,15231,15236,15241,15255,15269,15278],{"__ignoreMap":25},[30,15035,15036,15038],{"class":32,"line":33},[30,15037,2132],{"class":317},[30,15039,2135],{"class":74},[30,15041,15042,15044,15046,15048],{"class":32,"line":44},[30,15043,2140],{"class":317},[30,15045,2143],{"class":317},[30,15047,2146],{"class":36},[30,15049,1480],{"class":321},[30,15051,15052,15054],{"class":32,"line":52},[30,15053,2132],{"class":317},[30,15055,7931],{"class":74},[30,15057,15058,15060],{"class":32,"line":60},[30,15059,14876],{"class":317},[30,15061,7944],{"class":36},[30,15063,15064],{"class":32,"line":68},[30,15065,1732],{"class":321},[30,15067,15068],{"class":32,"line":80},[30,15069,14898],{"class":317},[30,15071,15072],{"class":32,"line":88},[30,15073,15074],{"class":321},"    string m_name;\n",[30,15076,15077,15079],{"class":32,"line":96},[30,15078,2167],{"class":317},[30,15080,15081],{"class":321}," m_id;\n",[30,15083,15084],{"class":32,"line":104},[30,15085,15086],{"class":379},"    \u002F\u002F赋值姓名\n",[30,15088,15089,15092,15095,15097,15100,15103],{"class":32,"line":112},[30,15090,15091],{"class":317},"    void",[30,15093,15094],{"class":36}," setName",[30,15096,322],{"class":321},[30,15098,15099],{"class":36},"string",[30,15101,15102],{"class":5398}," name",[30,15104,328],{"class":321},[30,15106,15107],{"class":32,"line":123},[30,15108,2212],{"class":321},[30,15110,15111,15114,15116],{"class":32,"line":131},[30,15112,15113],{"class":321},"        m_name",[30,15115,367],{"class":317},[30,15117,15118],{"class":321},"name;\n",[30,15120,15121],{"class":32,"line":142},[30,15122,2369],{"class":321},[30,15124,15125],{"class":32,"line":1811},[30,15126,15127],{"class":379},"    \u002F\u002F赋值学号\n",[30,15129,15130,15132,15135,15137,15139,15142],{"class":32,"line":1825},[30,15131,15091],{"class":317},[30,15133,15134],{"class":36}," setId",[30,15136,322],{"class":321},[30,15138,325],{"class":317},[30,15140,15141],{"class":5398}," id",[30,15143,328],{"class":321},[30,15145,15146],{"class":32,"line":1830},[30,15147,2212],{"class":321},[30,15149,15150,15153,15155],{"class":32,"line":1836},[30,15151,15152],{"class":321},"        m_id",[30,15154,367],{"class":317},[30,15156,15157],{"class":321},"id;\n",[30,15159,15160],{"class":32,"line":1857},[30,15161,2369],{"class":321},[30,15163,15164],{"class":32,"line":1862},[30,15165,15166],{"class":379},"    \u002F\u002F打印学生信息\n",[30,15168,15169,15171,15173],{"class":32,"line":1876},[30,15170,15091],{"class":317},[30,15172,9797],{"class":36},[30,15174,2158],{"class":321},[30,15176,15177],{"class":32,"line":1881},[30,15178,2212],{"class":321},[30,15180,15181,15183,15185,15188,15190,15193,15195,15197,15199,15202,15204,15207,15209],{"class":32,"line":1910},[30,15182,3633],{"class":321},[30,15184,1363],{"class":317},[30,15186,15187],{"class":74},"\"姓名：\"",[30,15189,1363],{"class":317},[30,15191,15192],{"class":321},"m_name",[30,15194,1363],{"class":317},[30,15196,4541],{"class":74},[30,15198,1363],{"class":317},[30,15200,15201],{"class":74},"\"学号：\"",[30,15203,1363],{"class":317},[30,15205,15206],{"class":321},"m_id",[30,15208,1363],{"class":317},[30,15210,1385],{"class":321},[30,15212,15213],{"class":32,"line":1915},[30,15214,2369],{"class":321},[30,15216,15217],{"class":32,"line":1932},[30,15218,4177],{"class":321},[30,15220,15221,15223,15225],{"class":32,"line":1937},[30,15222,325],{"class":317},[30,15224,2155],{"class":36},[30,15226,2158],{"class":321},[30,15228,15229],{"class":32,"line":1942},[30,15230,1732],{"class":321},[30,15232,15233],{"class":32,"line":1947},[30,15234,15235],{"class":379},"    \u002F\u002F实例化\n",[30,15237,15238],{"class":32,"line":1961},[30,15239,15240],{"class":321},"    Student s1;\n",[30,15242,15243,15246,15249,15251,15253],{"class":32,"line":1966},[30,15244,15245],{"class":321},"    s1.",[30,15247,15248],{"class":36},"setName",[30,15250,322],{"class":321},[30,15252,8098],{"class":74},[30,15254,2901],{"class":321},[30,15256,15257,15259,15262,15264,15267],{"class":32,"line":2759},[30,15258,15245],{"class":321},[30,15260,15261],{"class":36},"setId",[30,15263,322],{"class":321},[30,15265,15266],{"class":40},"123456",[30,15268,2901],{"class":321},[30,15270,15271,15273,15276],{"class":32,"line":2773},[30,15272,15245],{"class":321},[30,15274,15275],{"class":36},"printInfo",[30,15277,5818],{"class":321},[30,15279,15280],{"class":32,"line":2781},[30,15281,1751],{"class":321},[157,15283,15284],{},"类中的属性和行为统称为成员",[157,15286,15287],{},"属性：成员属性(成员变量)",[157,15289,15290],{},"方法：成员函数(成员方法)",[157,15292,15293],{},[469,15294,15295],{},"封装意义二：",[157,15297,15298],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[157,15300,15301],{},"访问权限有三种：",[271,15303,15304,15307,15310],{},[150,15305,15306],{},"public        公共权限",[150,15308,15309],{},"protected 保护权限",[150,15311,15312],{},"private      私有权限",[157,15314,15315],{},[469,15316,15317],{},"示例：",[20,15319,15321],{"className":10123,"code":15320,"language":10125,"meta":25,"style":25},"\u002F\u002F三种权限\n\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n\nclass Person\n{\n    \u002F\u002F姓名  公共权限\npublic:\n    string m_Name;\n\n    \u002F\u002F汽车  保护权限\nprotected:\n    string m_Car;\n\n    \u002F\u002F银行卡密码  私有权限\nprivate:\n    int m_Password;\n\npublic:\n    void func()\n    {\n        m_Name = \"张三\";\n        m_Car = \"拖拉机\";\n        m_Password = 123456;\n    }\n};\n\nint main() {\n\n    Person p;\n    p.m_Name = \"李四\";\n    \u002F\u002Fp.m_Car = \"奔驰\";  \u002F\u002F保护权限类外访问不到\n    \u002F\u002Fp.m_Password = 123; \u002F\u002F私有权限类外访问不到\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,15322,15323,15328,15333,15338,15343,15347,15354,15358,15363,15367,15372,15376,15381,15386,15391,15395,15400,15405,15412,15416,15420,15428,15432,15443,15455,15467,15471,15475,15479,15487,15491,15496,15508,15516,15524,15528,15538,15542,15550],{"__ignoreMap":25},[30,15324,15325],{"class":32,"line":33},[30,15326,15327],{"class":379},"\u002F\u002F三种权限\n",[30,15329,15330],{"class":32,"line":44},[30,15331,15332],{"class":379},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[30,15334,15335],{"class":32,"line":52},[30,15336,15337],{"class":379},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[30,15339,15340],{"class":32,"line":60},[30,15341,15342],{"class":379},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[30,15344,15345],{"class":32,"line":68},[30,15346,2582],{"emptyLinePlaceholder":245},[30,15348,15349,15351],{"class":32,"line":80},[30,15350,14876],{"class":317},[30,15352,15353],{"class":36}," Person\n",[30,15355,15356],{"class":32,"line":88},[30,15357,1732],{"class":321},[30,15359,15360],{"class":32,"line":96},[30,15361,15362],{"class":379},"    \u002F\u002F姓名  公共权限\n",[30,15364,15365],{"class":32,"line":104},[30,15366,14898],{"class":317},[30,15368,15369],{"class":32,"line":112},[30,15370,15371],{"class":321},"    string m_Name;\n",[30,15373,15374],{"class":32,"line":123},[30,15375,2582],{"emptyLinePlaceholder":245},[30,15377,15378],{"class":32,"line":131},[30,15379,15380],{"class":379},"    \u002F\u002F汽车  保护权限\n",[30,15382,15383],{"class":32,"line":142},[30,15384,15385],{"class":317},"protected:\n",[30,15387,15388],{"class":32,"line":1811},[30,15389,15390],{"class":321},"    string m_Car;\n",[30,15392,15393],{"class":32,"line":1825},[30,15394,2582],{"emptyLinePlaceholder":245},[30,15396,15397],{"class":32,"line":1830},[30,15398,15399],{"class":379},"    \u002F\u002F银行卡密码  私有权限\n",[30,15401,15402],{"class":32,"line":1836},[30,15403,15404],{"class":317},"private:\n",[30,15406,15407,15409],{"class":32,"line":1857},[30,15408,2167],{"class":317},[30,15410,15411],{"class":321}," m_Password;\n",[30,15413,15414],{"class":32,"line":1862},[30,15415,2582],{"emptyLinePlaceholder":245},[30,15417,15418],{"class":32,"line":1876},[30,15419,14898],{"class":317},[30,15421,15422,15424,15426],{"class":32,"line":1881},[30,15423,15091],{"class":317},[30,15425,11567],{"class":36},[30,15427,2158],{"class":321},[30,15429,15430],{"class":32,"line":1910},[30,15431,2212],{"class":321},[30,15433,15434,15437,15439,15441],{"class":32,"line":1915},[30,15435,15436],{"class":321},"        m_Name ",[30,15438,367],{"class":317},[30,15440,9120],{"class":74},[30,15442,1480],{"class":321},[30,15444,15445,15448,15450,15453],{"class":32,"line":1932},[30,15446,15447],{"class":321},"        m_Car ",[30,15449,367],{"class":317},[30,15451,15452],{"class":74}," \"拖拉机\"",[30,15454,1480],{"class":321},[30,15456,15457,15460,15462,15465],{"class":32,"line":1937},[30,15458,15459],{"class":321},"        m_Password ",[30,15461,367],{"class":317},[30,15463,15464],{"class":40}," 123456",[30,15466,1480],{"class":321},[30,15468,15469],{"class":32,"line":1942},[30,15470,2369],{"class":321},[30,15472,15473],{"class":32,"line":1947},[30,15474,4177],{"class":321},[30,15476,15477],{"class":32,"line":1961},[30,15478,2582],{"emptyLinePlaceholder":245},[30,15480,15481,15483,15485],{"class":32,"line":1966},[30,15482,325],{"class":317},[30,15484,2155],{"class":36},[30,15486,11035],{"class":321},[30,15488,15489],{"class":32,"line":2759},[30,15490,2582],{"emptyLinePlaceholder":245},[30,15492,15493],{"class":32,"line":2773},[30,15494,15495],{"class":321},"    Person p;\n",[30,15497,15498,15501,15503,15506],{"class":32,"line":2781},[30,15499,15500],{"class":321},"    p.m_Name ",[30,15502,367],{"class":317},[30,15504,15505],{"class":74}," \"李四\"",[30,15507,1480],{"class":321},[30,15509,15510,15513],{"class":32,"line":2786},[30,15511,15512],{"class":379},"    \u002F\u002Fp.m_Car = \"奔驰\";",[30,15514,15515],{"class":379},"  \u002F\u002F保护权限类外访问不到\n",[30,15517,15518,15521],{"class":32,"line":2792},[30,15519,15520],{"class":379},"    \u002F\u002Fp.m_Password = 123;",[30,15522,15523],{"class":379}," \u002F\u002F私有权限类外访问不到\n",[30,15525,15526],{"class":32,"line":2798},[30,15527,2582],{"emptyLinePlaceholder":245},[30,15529,15530,15532,15534,15536],{"class":32,"line":2803},[30,15531,2485],{"class":36},[30,15533,322],{"class":321},[30,15535,2490],{"class":74},[30,15537,2901],{"class":321},[30,15539,15540],{"class":32,"line":8130},[30,15541,2582],{"emptyLinePlaceholder":245},[30,15543,15544,15546,15548],{"class":32,"line":8154},[30,15545,4272],{"class":317},[30,15547,4275],{"class":40},[30,15549,1480],{"class":321},[30,15551,15552],{"class":32,"line":8159},[30,15553,1751],{"class":321},[287,15555,15557],{"id":15556},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[157,15559,15560,15561,15564,15565],{},"在C++中 struct和class唯一的",[469,15562,15563],{},"区别","就在于 ",[469,15566,15567],{},"默认的访问权限不同",[157,15569,15570],{},"区别：",[147,15572,15573,15576],{},[150,15574,15575],{},"struct 默认权限为公共",[150,15577,15578],{},"class   默认权限为私有",[20,15580,15582],{"className":10123,"code":15581,"language":10125,"meta":25,"style":25},"class C1\n{\n    int  m_A; \u002F\u002F默认是私有权限\n};\n\nstruct C2\n{\n    int m_A;  \u002F\u002F默认是公共权限\n};\n\nint main() {\n\n    C1 c1;\n    c1.m_A = 10; \u002F\u002F错误，访问权限是私有\n\n    C2 c2;\n    c2.m_A = 10; \u002F\u002F正确，访问权限是公共\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,15583,15584,15591,15595,15605,15609,15613,15620,15624,15634,15638,15642,15650,15654,15659,15673,15677,15682,15696,15700,15710,15714,15722],{"__ignoreMap":25},[30,15585,15586,15588],{"class":32,"line":33},[30,15587,14876],{"class":317},[30,15589,15590],{"class":36}," C1\n",[30,15592,15593],{"class":32,"line":44},[30,15594,1732],{"class":321},[30,15596,15597,15599,15602],{"class":32,"line":52},[30,15598,2167],{"class":317},[30,15600,15601],{"class":321},"  m_A;",[30,15603,15604],{"class":379}," \u002F\u002F默认是私有权限\n",[30,15606,15607],{"class":32,"line":60},[30,15608,4177],{"class":321},[30,15610,15611],{"class":32,"line":68},[30,15612,2582],{"emptyLinePlaceholder":245},[30,15614,15615,15617],{"class":32,"line":80},[30,15616,7941],{"class":317},[30,15618,15619],{"class":36}," C2\n",[30,15621,15622],{"class":32,"line":88},[30,15623,1732],{"class":321},[30,15625,15626,15628,15631],{"class":32,"line":96},[30,15627,2167],{"class":317},[30,15629,15630],{"class":321}," m_A;",[30,15632,15633],{"class":379},"  \u002F\u002F默认是公共权限\n",[30,15635,15636],{"class":32,"line":104},[30,15637,4177],{"class":321},[30,15639,15640],{"class":32,"line":112},[30,15641,2582],{"emptyLinePlaceholder":245},[30,15643,15644,15646,15648],{"class":32,"line":123},[30,15645,325],{"class":317},[30,15647,2155],{"class":36},[30,15649,11035],{"class":321},[30,15651,15652],{"class":32,"line":131},[30,15653,2582],{"emptyLinePlaceholder":245},[30,15655,15656],{"class":32,"line":142},[30,15657,15658],{"class":321},"    C1 c1;\n",[30,15660,15661,15664,15666,15668,15670],{"class":32,"line":1811},[30,15662,15663],{"class":321},"    c1.m_A ",[30,15665,367],{"class":317},[30,15667,2220],{"class":40},[30,15669,376],{"class":321},[30,15671,15672],{"class":379}," \u002F\u002F错误，访问权限是私有\n",[30,15674,15675],{"class":32,"line":1825},[30,15676,2582],{"emptyLinePlaceholder":245},[30,15678,15679],{"class":32,"line":1830},[30,15680,15681],{"class":321},"    C2 c2;\n",[30,15683,15684,15687,15689,15691,15693],{"class":32,"line":1836},[30,15685,15686],{"class":321},"    c2.m_A ",[30,15688,367],{"class":317},[30,15690,2220],{"class":40},[30,15692,376],{"class":321},[30,15694,15695],{"class":379}," \u002F\u002F正确，访问权限是公共\n",[30,15697,15698],{"class":32,"line":1857},[30,15699,2582],{"emptyLinePlaceholder":245},[30,15701,15702,15704,15706,15708],{"class":32,"line":1862},[30,15703,2485],{"class":36},[30,15705,322],{"class":321},[30,15707,2490],{"class":74},[30,15709,2901],{"class":321},[30,15711,15712],{"class":32,"line":1876},[30,15713,2582],{"emptyLinePlaceholder":245},[30,15715,15716,15718,15720],{"class":32,"line":1881},[30,15717,4272],{"class":317},[30,15719,4275],{"class":40},[30,15721,1480],{"class":321},[30,15723,15724],{"class":32,"line":1910},[30,15725,1751],{"class":321},[287,15727,15729],{"id":15728},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[157,15731,15732],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[157,15734,15735],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[157,15737,15738],{},[469,15739,15317],{},[20,15741,15743],{"className":10123,"code":15742,"language":10125,"meta":25,"style":25},"class Person {\npublic:\n\n    \u002F\u002F姓名设置可读可写\n    void setName(string name) {\n        m_Name = name;\n    }\n    string getName()\n    {\n        return m_Name;\n    }\n\n\n    \u002F\u002F获取年龄 \n    int getAge() {\n        return m_Age;\n    }\n    \u002F\u002F设置年龄\n    void setAge(int age) {\n        if (age \u003C 0 || age > 150) {\n            cout \u003C\u003C \"你个老妖精!\" \u003C\u003C endl;\n            return;\n        }\n        m_Age = age;\n    }\n\n    \u002F\u002F情人设置为只写\n    void setLover(string lover) {\n        m_Lover = lover;\n    }\n\nprivate:\n    string m_Name; \u002F\u002F可读可写  姓名\n    \n    int m_Age; \u002F\u002F只读  年龄\n\n    string m_Lover; \u002F\u002F只写  情人\n};\n\nint main() {\n\n    Person p;\n    \u002F\u002F姓名设置\n    p.setName(\"张三\");\n    cout \u003C\u003C \"姓名： \" \u003C\u003C p.getName() \u003C\u003C endl;\n\n    \u002F\u002F年龄设置\n    p.setAge(50);\n    cout \u003C\u003C \"年龄： \" \u003C\u003C p.getAge() \u003C\u003C endl;\n\n    \u002F\u002F情人设置\n    p.setLover(\"苍井\");\n    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;  \u002F\u002F只写属性，不可以读取\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,15744,15745,15755,15759,15763,15768,15782,15791,15795,15805,15809,15816,15820,15824,15828,15833,15842,15849,15853,15858,15874,15897,15910,15917,15921,15930,15934,15938,15943,15959,15969,15973,15977,15981,15989,15993,16003,16007,16015,16019,16023,16031,16035,16039,16044,16057,16080,16084,16089,16102,16124,16128,16133,16147,16155,16159,16169,16173,16181],{"__ignoreMap":25},[30,15746,15747,15749,15752],{"class":32,"line":33},[30,15748,14876],{"class":317},[30,15750,15751],{"class":36}," Person",[30,15753,15754],{"class":321}," {\n",[30,15756,15757],{"class":32,"line":44},[30,15758,14898],{"class":317},[30,15760,15761],{"class":32,"line":52},[30,15762,2582],{"emptyLinePlaceholder":245},[30,15764,15765],{"class":32,"line":60},[30,15766,15767],{"class":379},"    \u002F\u002F姓名设置可读可写\n",[30,15769,15770,15772,15774,15776,15778,15780],{"class":32,"line":68},[30,15771,15091],{"class":317},[30,15773,15094],{"class":36},[30,15775,322],{"class":321},[30,15777,15099],{"class":36},[30,15779,15102],{"class":5398},[30,15781,12624],{"class":321},[30,15783,15784,15786,15788],{"class":32,"line":80},[30,15785,15436],{"class":321},[30,15787,367],{"class":317},[30,15789,15790],{"class":321}," name;\n",[30,15792,15793],{"class":32,"line":88},[30,15794,2369],{"class":321},[30,15796,15797,15800,15803],{"class":32,"line":96},[30,15798,15799],{"class":36},"    string",[30,15801,15802],{"class":36}," getName",[30,15804,2158],{"class":321},[30,15806,15807],{"class":32,"line":104},[30,15808,2212],{"class":321},[30,15810,15811,15813],{"class":32,"line":112},[30,15812,14934],{"class":317},[30,15814,15815],{"class":321}," m_Name;\n",[30,15817,15818],{"class":32,"line":123},[30,15819,2369],{"class":321},[30,15821,15822],{"class":32,"line":131},[30,15823,2582],{"emptyLinePlaceholder":245},[30,15825,15826],{"class":32,"line":142},[30,15827,2582],{"emptyLinePlaceholder":245},[30,15829,15830],{"class":32,"line":1811},[30,15831,15832],{"class":379},"    \u002F\u002F获取年龄 \n",[30,15834,15835,15837,15840],{"class":32,"line":1825},[30,15836,2167],{"class":317},[30,15838,15839],{"class":36}," getAge",[30,15841,11035],{"class":321},[30,15843,15844,15846],{"class":32,"line":1830},[30,15845,14934],{"class":317},[30,15847,15848],{"class":321}," m_Age;\n",[30,15850,15851],{"class":32,"line":1836},[30,15852,2369],{"class":321},[30,15854,15855],{"class":32,"line":1857},[30,15856,15857],{"class":379},"    \u002F\u002F设置年龄\n",[30,15859,15860,15862,15865,15867,15869,15872],{"class":32,"line":1862},[30,15861,15091],{"class":317},[30,15863,15864],{"class":36}," setAge",[30,15866,322],{"class":321},[30,15868,325],{"class":317},[30,15870,15871],{"class":5398}," age",[30,15873,12624],{"class":321},[30,15875,15876,15878,15881,15883,15885,15887,15890,15892,15895],{"class":32,"line":1876},[30,15877,2679],{"class":317},[30,15879,15880],{"class":321}," (age ",[30,15882,1230],{"class":317},[30,15884,4275],{"class":40},[30,15886,3437],{"class":317},[30,15888,15889],{"class":321}," age ",[30,15891,1280],{"class":317},[30,15893,15894],{"class":40}," 150",[30,15896,12624],{"class":321},[30,15898,15899,15901,15903,15906,15908],{"class":32,"line":1881},[30,15900,9901],{"class":321},[30,15902,1363],{"class":317},[30,15904,15905],{"class":74}," \"你个老妖精!\"",[30,15907,1631],{"class":317},[30,15909,9022],{"class":321},[30,15911,15912,15915],{"class":32,"line":1910},[30,15913,15914],{"class":317},"            return",[30,15916,1480],{"class":321},[30,15918,15919],{"class":32,"line":1915},[30,15920,2711],{"class":321},[30,15922,15923,15926,15928],{"class":32,"line":1932},[30,15924,15925],{"class":321},"        m_Age ",[30,15927,367],{"class":317},[30,15929,7979],{"class":321},[30,15931,15932],{"class":32,"line":1937},[30,15933,2369],{"class":321},[30,15935,15936],{"class":32,"line":1942},[30,15937,2582],{"emptyLinePlaceholder":245},[30,15939,15940],{"class":32,"line":1947},[30,15941,15942],{"class":379},"    \u002F\u002F情人设置为只写\n",[30,15944,15945,15947,15950,15952,15954,15957],{"class":32,"line":1961},[30,15946,15091],{"class":317},[30,15948,15949],{"class":36}," setLover",[30,15951,322],{"class":321},[30,15953,15099],{"class":36},[30,15955,15956],{"class":5398}," lover",[30,15958,12624],{"class":321},[30,15960,15961,15964,15966],{"class":32,"line":1966},[30,15962,15963],{"class":321},"        m_Lover ",[30,15965,367],{"class":317},[30,15967,15968],{"class":321}," lover;\n",[30,15970,15971],{"class":32,"line":2759},[30,15972,2369],{"class":321},[30,15974,15975],{"class":32,"line":2773},[30,15976,2582],{"emptyLinePlaceholder":245},[30,15978,15979],{"class":32,"line":2781},[30,15980,15404],{"class":317},[30,15982,15983,15986],{"class":32,"line":2786},[30,15984,15985],{"class":321},"    string m_Name;",[30,15987,15988],{"class":379}," \u002F\u002F可读可写  姓名\n",[30,15990,15991],{"class":32,"line":2792},[30,15992,13392],{"class":321},[30,15994,15995,15997,16000],{"class":32,"line":2798},[30,15996,2167],{"class":317},[30,15998,15999],{"class":321}," m_Age;",[30,16001,16002],{"class":379}," \u002F\u002F只读  年龄\n",[30,16004,16005],{"class":32,"line":2803},[30,16006,2582],{"emptyLinePlaceholder":245},[30,16008,16009,16012],{"class":32,"line":8130},[30,16010,16011],{"class":321},"    string m_Lover;",[30,16013,16014],{"class":379}," \u002F\u002F只写  情人\n",[30,16016,16017],{"class":32,"line":8154},[30,16018,4177],{"class":321},[30,16020,16021],{"class":32,"line":8159},[30,16022,2582],{"emptyLinePlaceholder":245},[30,16024,16025,16027,16029],{"class":32,"line":8165},[30,16026,325],{"class":317},[30,16028,2155],{"class":36},[30,16030,11035],{"class":321},[30,16032,16033],{"class":32,"line":8192},[30,16034,2582],{"emptyLinePlaceholder":245},[30,16036,16037],{"class":32,"line":8197},[30,16038,15495],{"class":321},[30,16040,16041],{"class":32,"line":8203},[30,16042,16043],{"class":379},"    \u002F\u002F姓名设置\n",[30,16045,16046,16049,16051,16053,16055],{"class":32,"line":8215},[30,16047,16048],{"class":321},"    p.",[30,16050,15248],{"class":36},[30,16052,322],{"class":321},[30,16054,8098],{"class":74},[30,16056,2901],{"class":321},[30,16058,16059,16061,16063,16066,16068,16071,16074,16076,16078],{"class":32,"line":8227},[30,16060,6711],{"class":321},[30,16062,1363],{"class":317},[30,16064,16065],{"class":74}," \"姓名： \"",[30,16067,1631],{"class":317},[30,16069,16070],{"class":321}," p.",[30,16072,16073],{"class":36},"getName",[30,16075,13232],{"class":321},[30,16077,1363],{"class":317},[30,16079,9022],{"class":321},[30,16081,16082],{"class":32,"line":8239},[30,16083,2582],{"emptyLinePlaceholder":245},[30,16085,16086],{"class":32,"line":9898},[30,16087,16088],{"class":379},"    \u002F\u002F年龄设置\n",[30,16090,16091,16093,16096,16098,16100],{"class":32,"line":9923},[30,16092,16048],{"class":321},[30,16094,16095],{"class":36},"setAge",[30,16097,322],{"class":321},[30,16099,976],{"class":40},[30,16101,2901],{"class":321},[30,16103,16104,16106,16108,16111,16113,16115,16118,16120,16122],{"class":32,"line":9946},[30,16105,6711],{"class":321},[30,16107,1363],{"class":317},[30,16109,16110],{"class":74}," \"年龄： \"",[30,16112,1631],{"class":317},[30,16114,16070],{"class":321},[30,16116,16117],{"class":36},"getAge",[30,16119,13232],{"class":321},[30,16121,1363],{"class":317},[30,16123,9022],{"class":321},[30,16125,16126],{"class":32,"line":9970},[30,16127,2582],{"emptyLinePlaceholder":245},[30,16129,16130],{"class":32,"line":9975},[30,16131,16132],{"class":379},"    \u002F\u002F情人设置\n",[30,16134,16135,16137,16140,16142,16145],{"class":32,"line":9980},[30,16136,16048],{"class":321},[30,16138,16139],{"class":36},"setLover",[30,16141,322],{"class":321},[30,16143,16144],{"class":74},"\"苍井\"",[30,16146,2901],{"class":321},[30,16148,16149,16152],{"class":32,"line":9985},[30,16150,16151],{"class":379},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[30,16153,16154],{"class":379},"  \u002F\u002F只写属性，不可以读取\n",[30,16156,16157],{"class":32,"line":9994},[30,16158,2582],{"emptyLinePlaceholder":245},[30,16160,16161,16163,16165,16167],{"class":32,"line":9999},[30,16162,2485],{"class":36},[30,16164,322],{"class":321},[30,16166,2490],{"class":74},[30,16168,2901],{"class":321},[30,16170,16171],{"class":32,"line":10005},[30,16172,2582],{"emptyLinePlaceholder":245},[30,16174,16175,16177,16179],{"class":32,"line":10026},[30,16176,4272],{"class":317},[30,16178,4275],{"class":40},[30,16180,1480],{"class":321},[30,16182,16183],{"class":32,"line":10032},[30,16184,1751],{"class":321},[287,16186,16188],{"id":16187},"_814封装案例","8.1.4封装案例",[271,16190,16191],{},[150,16192,16193,16196],{},[469,16194,16195],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[147,16198,16199,16202],{},[150,16200,16201],{},"求出立方体的面积和体积",[150,16203,16204],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[20,16206,16208],{"className":308,"code":16207,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\nclass Cube\n{\npublic:\n    \u002F\u002F输入长宽高\n    void setLwh(int l,int w,int h)\n    {\n        m_L=l;\n        m_W=w;\n        m_H=h;\n    }\n    int mianji()\n    {\n        return 2*(m_L*m_W + m_L*m_H + m_W*m_H);\n    }\n    int tiji()\n    {\n        return m_L*m_W*m_H;\n    }\n    \u002F\u002F获取长宽高\n    int getLength()\n    {\n        return m_L;\n    }\n    int getWidth()\n    {\n        return m_W;\n    }\n    int getHeight()\n    {\n        return m_H;\n    }\n    \u002F\u002F成员函数判断两个立方体是否相等\n    bool isEqual(Cube c)\n    {\n        if (c.getLength() == m_L && c.getWidth() == m_W && c.getHeight() == m_H)\n        {\n            return true;\n        }\n        else\n        {\n            return false;\n        }\n    }\n    \u002F\u002F私有属性\nprivate:\n    int m_L;\n    int m_W;\n    int m_H;\n\n};\n\u002F\u002F全局函数判断两个立方体是否相等\nbool isEqual(Cube c1,Cube c2)\n{\n    return (c1.getLength() == c2.getLength()) && (c1.getWidth() == c2.getWidth()) && (c1.getHeight() == c2.getHeight());\n}\nint main()\n{\n    Cube c1;\n    \u002F\u002F输入立方体的长宽高\n    cout\u003C\u003C\"请输入第一个立方体的长、宽、高：\"\u003C\u003Cendl;\n    int l,w,h,l1,w1,h1;\n    cin>>l>>w>>h;\n    c1.setLwh(l,w,h);\n    \u002F\u002F面积\n    cout\u003C\u003C\"立方体的表面积为：\"\u003C\u003Cc1.mianji()\u003C\u003Cendl;\n    \u002F\u002F体积\n    cout\u003C\u003C\"立方体的体积为：\"\u003C\u003Cc1.tiji()\u003C\u003Cendl;\n    cout\u003C\u003C\"请输入第二个立方体的长、宽、高：\"\u003C\u003Cendl;\n    cin>>l1>>w1>>h1;\n    Cube c2;\n    c2.setLwh(l1,w1,h1);\n    cout\u003C\u003C\"第二个立方体的表面积为：\"\u003C\u003Cc2.mianji()\u003C\u003Cendl;\n    cout\u003C\u003C\"第二个立方体的体积为：\"\u003C\u003Cc2.tiji()\u003C\u003Cendl;\n\n    \u002F\u002F判断两个立方体的表面积和体积是否相等\n    cout\u003C\u003C\"内部函数判断结果：\"\u003C\u003Cendl;\n    if (c1.isEqual(c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n\n    cout\u003C\u003C\"全局函数判断结果：\"\u003C\u003Cendl;\n    if (isEqual(c1, c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n}\n",[27,16209,16210,16216,16226,16233,16237,16241,16246,16276,16280,16290,16300,16310,16314,16323,16327,16363,16367,16376,16380,16396,16400,16405,16414,16418,16425,16429,16438,16442,16449,16453,16462,16466,16473,16477,16482,16499,16503,16549,16553,16562,16566,16570,16574,16583,16587,16591,16596,16600,16606,16612,16618,16622,16626,16631,16653,16657,16711,16715,16723,16727,16732,16737,16750,16757,16773,16784,16790,16813,16819,16842,16856,16876,16882,16893,16916,16938,16943,16949,16963,16976,16981,16995,17000,17006,17011,17025,17030,17035,17049,17061,17066,17079,17084,17089,17094,17107,17112],{"__ignoreMap":25},[30,16211,16212,16214],{"class":32,"line":33},[30,16213,2132],{"class":317},[30,16215,2135],{"class":74},[30,16217,16218,16220,16222,16224],{"class":32,"line":44},[30,16219,2140],{"class":317},[30,16221,2143],{"class":317},[30,16223,2146],{"class":36},[30,16225,1480],{"class":321},[30,16227,16228,16230],{"class":32,"line":52},[30,16229,14876],{"class":317},[30,16231,16232],{"class":36}," Cube\n",[30,16234,16235],{"class":32,"line":60},[30,16236,1732],{"class":321},[30,16238,16239],{"class":32,"line":68},[30,16240,14898],{"class":317},[30,16242,16243],{"class":32,"line":80},[30,16244,16245],{"class":379},"    \u002F\u002F输入长宽高\n",[30,16247,16248,16250,16253,16255,16257,16260,16262,16264,16267,16269,16271,16274],{"class":32,"line":88},[30,16249,15091],{"class":317},[30,16251,16252],{"class":36}," setLwh",[30,16254,322],{"class":321},[30,16256,325],{"class":317},[30,16258,16259],{"class":5398}," l",[30,16261,698],{"class":321},[30,16263,325],{"class":317},[30,16265,16266],{"class":5398}," w",[30,16268,698],{"class":321},[30,16270,325],{"class":317},[30,16272,16273],{"class":5398}," h",[30,16275,328],{"class":321},[30,16277,16278],{"class":32,"line":96},[30,16279,2212],{"class":321},[30,16281,16282,16285,16287],{"class":32,"line":104},[30,16283,16284],{"class":321},"        m_L",[30,16286,367],{"class":317},[30,16288,16289],{"class":321},"l;\n",[30,16291,16292,16295,16297],{"class":32,"line":112},[30,16293,16294],{"class":321},"        m_W",[30,16296,367],{"class":317},[30,16298,16299],{"class":321},"w;\n",[30,16301,16302,16305,16307],{"class":32,"line":123},[30,16303,16304],{"class":321},"        m_H",[30,16306,367],{"class":317},[30,16308,16309],{"class":321},"h;\n",[30,16311,16312],{"class":32,"line":131},[30,16313,2369],{"class":321},[30,16315,16316,16318,16321],{"class":32,"line":142},[30,16317,2167],{"class":317},[30,16319,16320],{"class":36}," mianji",[30,16322,2158],{"class":321},[30,16324,16325],{"class":32,"line":1811},[30,16326,2212],{"class":321},[30,16328,16329,16331,16333,16335,16338,16340,16343,16345,16348,16350,16353,16355,16358,16360],{"class":32,"line":1825},[30,16330,14934],{"class":317},[30,16332,14937],{"class":40},[30,16334,775],{"class":317},[30,16336,16337],{"class":321},"(m_L",[30,16339,775],{"class":317},[30,16341,16342],{"class":321},"m_W ",[30,16344,801],{"class":317},[30,16346,16347],{"class":321}," m_L",[30,16349,775],{"class":317},[30,16351,16352],{"class":321},"m_H ",[30,16354,801],{"class":317},[30,16356,16357],{"class":321}," m_W",[30,16359,775],{"class":317},[30,16361,16362],{"class":321},"m_H);\n",[30,16364,16365],{"class":32,"line":1830},[30,16366,2369],{"class":321},[30,16368,16369,16371,16374],{"class":32,"line":1836},[30,16370,2167],{"class":317},[30,16372,16373],{"class":36}," tiji",[30,16375,2158],{"class":321},[30,16377,16378],{"class":32,"line":1857},[30,16379,2212],{"class":321},[30,16381,16382,16384,16386,16388,16391,16393],{"class":32,"line":1862},[30,16383,14934],{"class":317},[30,16385,16347],{"class":321},[30,16387,775],{"class":317},[30,16389,16390],{"class":321},"m_W",[30,16392,775],{"class":317},[30,16394,16395],{"class":321},"m_H;\n",[30,16397,16398],{"class":32,"line":1876},[30,16399,2369],{"class":321},[30,16401,16402],{"class":32,"line":1881},[30,16403,16404],{"class":379},"    \u002F\u002F获取长宽高\n",[30,16406,16407,16409,16412],{"class":32,"line":1910},[30,16408,2167],{"class":317},[30,16410,16411],{"class":36}," getLength",[30,16413,2158],{"class":321},[30,16415,16416],{"class":32,"line":1915},[30,16417,2212],{"class":321},[30,16419,16420,16422],{"class":32,"line":1932},[30,16421,14934],{"class":317},[30,16423,16424],{"class":321}," m_L;\n",[30,16426,16427],{"class":32,"line":1937},[30,16428,2369],{"class":321},[30,16430,16431,16433,16436],{"class":32,"line":1942},[30,16432,2167],{"class":317},[30,16434,16435],{"class":36}," getWidth",[30,16437,2158],{"class":321},[30,16439,16440],{"class":32,"line":1947},[30,16441,2212],{"class":321},[30,16443,16444,16446],{"class":32,"line":1961},[30,16445,14934],{"class":317},[30,16447,16448],{"class":321}," m_W;\n",[30,16450,16451],{"class":32,"line":1966},[30,16452,2369],{"class":321},[30,16454,16455,16457,16460],{"class":32,"line":2759},[30,16456,2167],{"class":317},[30,16458,16459],{"class":36}," getHeight",[30,16461,2158],{"class":321},[30,16463,16464],{"class":32,"line":2773},[30,16465,2212],{"class":321},[30,16467,16468,16470],{"class":32,"line":2781},[30,16469,14934],{"class":317},[30,16471,16472],{"class":321}," m_H;\n",[30,16474,16475],{"class":32,"line":2786},[30,16476,2369],{"class":321},[30,16478,16479],{"class":32,"line":2792},[30,16480,16481],{"class":379},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[30,16483,16484,16487,16490,16492,16495,16497],{"class":32,"line":2798},[30,16485,16486],{"class":317},"    bool",[30,16488,16489],{"class":36}," isEqual",[30,16491,322],{"class":321},[30,16493,16494],{"class":36},"Cube",[30,16496,3031],{"class":5398},[30,16498,328],{"class":321},[30,16500,16501],{"class":32,"line":2803},[30,16502,2212],{"class":321},[30,16504,16505,16507,16510,16513,16515,16517,16520,16522,16525,16528,16530,16532,16535,16537,16539,16542,16544,16546],{"class":32,"line":8130},[30,16506,2679],{"class":317},[30,16508,16509],{"class":321}," (c.",[30,16511,16512],{"class":36},"getLength",[30,16514,13232],{"class":321},[30,16516,3131],{"class":317},[30,16518,16519],{"class":321}," m_L ",[30,16521,1898],{"class":317},[30,16523,16524],{"class":321}," c.",[30,16526,16527],{"class":36},"getWidth",[30,16529,13232],{"class":321},[30,16531,3131],{"class":317},[30,16533,16534],{"class":321}," m_W ",[30,16536,1898],{"class":317},[30,16538,16524],{"class":321},[30,16540,16541],{"class":36},"getHeight",[30,16543,13232],{"class":321},[30,16545,3131],{"class":317},[30,16547,16548],{"class":321}," m_H)\n",[30,16550,16551],{"class":32,"line":8154},[30,16552,2692],{"class":321},[30,16554,16555,16557,16560],{"class":32,"line":8159},[30,16556,15914],{"class":317},[30,16558,16559],{"class":40}," true",[30,16561,1480],{"class":321},[30,16563,16564],{"class":32,"line":8165},[30,16565,2711],{"class":321},[30,16567,16568],{"class":32,"line":8192},[30,16569,2752],{"class":317},[30,16571,16572],{"class":32,"line":8197},[30,16573,2692],{"class":321},[30,16575,16576,16578,16581],{"class":32,"line":8203},[30,16577,15914],{"class":317},[30,16579,16580],{"class":40}," false",[30,16582,1480],{"class":321},[30,16584,16585],{"class":32,"line":8215},[30,16586,2711],{"class":321},[30,16588,16589],{"class":32,"line":8227},[30,16590,2369],{"class":321},[30,16592,16593],{"class":32,"line":8239},[30,16594,16595],{"class":379},"    \u002F\u002F私有属性\n",[30,16597,16598],{"class":32,"line":9898},[30,16599,15404],{"class":317},[30,16601,16602,16604],{"class":32,"line":9923},[30,16603,2167],{"class":317},[30,16605,16424],{"class":321},[30,16607,16608,16610],{"class":32,"line":9946},[30,16609,2167],{"class":317},[30,16611,16448],{"class":321},[30,16613,16614,16616],{"class":32,"line":9970},[30,16615,2167],{"class":317},[30,16617,16472],{"class":321},[30,16619,16620],{"class":32,"line":9975},[30,16621,2582],{"emptyLinePlaceholder":245},[30,16623,16624],{"class":32,"line":9980},[30,16625,4177],{"class":321},[30,16627,16628],{"class":32,"line":9985},[30,16629,16630],{"class":379},"\u002F\u002F全局函数判断两个立方体是否相等\n",[30,16632,16633,16635,16637,16639,16641,16644,16646,16648,16651],{"class":32,"line":9994},[30,16634,1541],{"class":317},[30,16636,16489],{"class":36},[30,16638,322],{"class":321},[30,16640,16494],{"class":36},[30,16642,16643],{"class":5398}," c1",[30,16645,698],{"class":321},[30,16647,16494],{"class":36},[30,16649,16650],{"class":5398}," c2",[30,16652,328],{"class":321},[30,16654,16655],{"class":32,"line":9999},[30,16656,1732],{"class":321},[30,16658,16659,16661,16664,16666,16668,16670,16673,16675,16678,16680,16682,16684,16686,16688,16690,16692,16694,16696,16698,16700,16702,16704,16706,16708],{"class":32,"line":10005},[30,16660,4272],{"class":317},[30,16662,16663],{"class":321}," (c1.",[30,16665,16512],{"class":36},[30,16667,13232],{"class":321},[30,16669,3131],{"class":317},[30,16671,16672],{"class":321}," c2.",[30,16674,16512],{"class":36},[30,16676,16677],{"class":321},"()) ",[30,16679,1898],{"class":317},[30,16681,16663],{"class":321},[30,16683,16527],{"class":36},[30,16685,13232],{"class":321},[30,16687,3131],{"class":317},[30,16689,16672],{"class":321},[30,16691,16527],{"class":36},[30,16693,16677],{"class":321},[30,16695,1898],{"class":317},[30,16697,16663],{"class":321},[30,16699,16541],{"class":36},[30,16701,13232],{"class":321},[30,16703,3131],{"class":317},[30,16705,16672],{"class":321},[30,16707,16541],{"class":36},[30,16709,16710],{"class":321},"());\n",[30,16712,16713],{"class":32,"line":10026},[30,16714,1751],{"class":321},[30,16716,16717,16719,16721],{"class":32,"line":10032},[30,16718,325],{"class":317},[30,16720,2155],{"class":36},[30,16722,2158],{"class":321},[30,16724,16725],{"class":32,"line":10046},[30,16726,1732],{"class":321},[30,16728,16729],{"class":32,"line":10052},[30,16730,16731],{"class":321},"    Cube c1;\n",[30,16733,16734],{"class":32,"line":10079},[30,16735,16736],{"class":379},"    \u002F\u002F输入立方体的长宽高\n",[30,16738,16739,16741,16743,16746,16748],{"class":32,"line":10088},[30,16740,1737],{"class":321},[30,16742,1363],{"class":317},[30,16744,16745],{"class":74},"\"请输入第一个立方体的长、宽、高：\"",[30,16747,1363],{"class":317},[30,16749,1385],{"class":321},[30,16751,16752,16754],{"class":32,"line":10094},[30,16753,2167],{"class":317},[30,16755,16756],{"class":321}," l,w,h,l1,w1,h1;\n",[30,16758,16759,16761,16763,16765,16767,16769,16771],{"class":32,"line":10102},[30,16760,2194],{"class":321},[30,16762,1616],{"class":317},[30,16764,838],{"class":321},[30,16766,1616],{"class":317},[30,16768,1115],{"class":321},[30,16770,1616],{"class":317},[30,16772,16309],{"class":321},[30,16774,16775,16778,16781],{"class":32,"line":10107},[30,16776,16777],{"class":321},"    c1.",[30,16779,16780],{"class":36},"setLwh",[30,16782,16783],{"class":321},"(l,w,h);\n",[30,16785,16787],{"class":32,"line":16786},66,[30,16788,16789],{"class":379},"    \u002F\u002F面积\n",[30,16791,16793,16795,16797,16800,16802,16804,16807,16809,16811],{"class":32,"line":16792},67,[30,16794,1737],{"class":321},[30,16796,1363],{"class":317},[30,16798,16799],{"class":74},"\"立方体的表面积为：\"",[30,16801,1363],{"class":317},[30,16803,15012],{"class":321},[30,16805,16806],{"class":36},"mianji",[30,16808,2609],{"class":321},[30,16810,1363],{"class":317},[30,16812,1385],{"class":321},[30,16814,16816],{"class":32,"line":16815},68,[30,16817,16818],{"class":379},"    \u002F\u002F体积\n",[30,16820,16822,16824,16826,16829,16831,16833,16836,16838,16840],{"class":32,"line":16821},69,[30,16823,1737],{"class":321},[30,16825,1363],{"class":317},[30,16827,16828],{"class":74},"\"立方体的体积为：\"",[30,16830,1363],{"class":317},[30,16832,15012],{"class":321},[30,16834,16835],{"class":36},"tiji",[30,16837,2609],{"class":321},[30,16839,1363],{"class":317},[30,16841,1385],{"class":321},[30,16843,16845,16847,16849,16852,16854],{"class":32,"line":16844},70,[30,16846,1737],{"class":321},[30,16848,1363],{"class":317},[30,16850,16851],{"class":74},"\"请输入第二个立方体的长、宽、高：\"",[30,16853,1363],{"class":317},[30,16855,1385],{"class":321},[30,16857,16859,16861,16863,16866,16868,16871,16873],{"class":32,"line":16858},71,[30,16860,2194],{"class":321},[30,16862,1616],{"class":317},[30,16864,16865],{"class":321},"l1",[30,16867,1616],{"class":317},[30,16869,16870],{"class":321},"w1",[30,16872,1616],{"class":317},[30,16874,16875],{"class":321},"h1;\n",[30,16877,16879],{"class":32,"line":16878},72,[30,16880,16881],{"class":321},"    Cube c2;\n",[30,16883,16885,16888,16890],{"class":32,"line":16884},73,[30,16886,16887],{"class":321},"    c2.",[30,16889,16780],{"class":36},[30,16891,16892],{"class":321},"(l1,w1,h1);\n",[30,16894,16896,16898,16900,16903,16905,16908,16910,16912,16914],{"class":32,"line":16895},74,[30,16897,1737],{"class":321},[30,16899,1363],{"class":317},[30,16901,16902],{"class":74},"\"第二个立方体的表面积为：\"",[30,16904,1363],{"class":317},[30,16906,16907],{"class":321},"c2.",[30,16909,16806],{"class":36},[30,16911,2609],{"class":321},[30,16913,1363],{"class":317},[30,16915,1385],{"class":321},[30,16917,16919,16921,16923,16926,16928,16930,16932,16934,16936],{"class":32,"line":16918},75,[30,16920,1737],{"class":321},[30,16922,1363],{"class":317},[30,16924,16925],{"class":74},"\"第二个立方体的体积为：\"",[30,16927,1363],{"class":317},[30,16929,16907],{"class":321},[30,16931,16835],{"class":36},[30,16933,2609],{"class":321},[30,16935,1363],{"class":317},[30,16937,1385],{"class":321},[30,16939,16941],{"class":32,"line":16940},76,[30,16942,2582],{"emptyLinePlaceholder":245},[30,16944,16946],{"class":32,"line":16945},77,[30,16947,16948],{"class":379},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[30,16950,16952,16954,16956,16959,16961],{"class":32,"line":16951},78,[30,16953,1737],{"class":321},[30,16955,1363],{"class":317},[30,16957,16958],{"class":74},"\"内部函数判断结果：\"",[30,16960,1363],{"class":317},[30,16962,1385],{"class":321},[30,16964,16966,16968,16970,16973],{"class":32,"line":16965},79,[30,16967,3283],{"class":317},[30,16969,16663],{"class":321},[30,16971,16972],{"class":36},"isEqual",[30,16974,16975],{"class":321},"(c2))\n",[30,16977,16979],{"class":32,"line":16978},80,[30,16980,2212],{"class":321},[30,16982,16984,16986,16988,16991,16993],{"class":32,"line":16983},81,[30,16985,3633],{"class":321},[30,16987,1363],{"class":317},[30,16989,16990],{"class":74},"\"两个立方体相等\"",[30,16992,1363],{"class":317},[30,16994,1385],{"class":321},[30,16996,16998],{"class":32,"line":16997},82,[30,16999,2369],{"class":321},[30,17001,17003],{"class":32,"line":17002},83,[30,17004,17005],{"class":317},"    else\n",[30,17007,17009],{"class":32,"line":17008},84,[30,17010,2212],{"class":321},[30,17012,17014,17016,17018,17021,17023],{"class":32,"line":17013},85,[30,17015,3633],{"class":321},[30,17017,1363],{"class":317},[30,17019,17020],{"class":74},"\"两个立方体不相等\"",[30,17022,1363],{"class":317},[30,17024,1385],{"class":321},[30,17026,17028],{"class":32,"line":17027},86,[30,17029,2369],{"class":321},[30,17031,17033],{"class":32,"line":17032},87,[30,17034,2582],{"emptyLinePlaceholder":245},[30,17036,17038,17040,17042,17045,17047],{"class":32,"line":17037},88,[30,17039,1737],{"class":321},[30,17041,1363],{"class":317},[30,17043,17044],{"class":74},"\"全局函数判断结果：\"",[30,17046,1363],{"class":317},[30,17048,1385],{"class":321},[30,17050,17052,17054,17056,17058],{"class":32,"line":17051},89,[30,17053,3283],{"class":317},[30,17055,1841],{"class":321},[30,17057,16972],{"class":36},[30,17059,17060],{"class":321},"(c1, c2))\n",[30,17062,17064],{"class":32,"line":17063},90,[30,17065,2212],{"class":321},[30,17067,17069,17071,17073,17075,17077],{"class":32,"line":17068},91,[30,17070,3633],{"class":321},[30,17072,1363],{"class":317},[30,17074,16990],{"class":74},[30,17076,1363],{"class":317},[30,17078,1385],{"class":321},[30,17080,17082],{"class":32,"line":17081},92,[30,17083,2369],{"class":321},[30,17085,17087],{"class":32,"line":17086},93,[30,17088,17005],{"class":317},[30,17090,17092],{"class":32,"line":17091},94,[30,17093,2212],{"class":321},[30,17095,17097,17099,17101,17103,17105],{"class":32,"line":17096},95,[30,17098,3633],{"class":321},[30,17100,1363],{"class":317},[30,17102,17020],{"class":74},[30,17104,1363],{"class":317},[30,17106,1385],{"class":321},[30,17108,17110],{"class":32,"line":17109},96,[30,17111,2369],{"class":321},[30,17113,17115],{"class":32,"line":17114},97,[30,17116,1751],{"class":321},[271,17118,17119],{"start":44},[150,17120,17121],{},[469,17122,17123],{},"练习案例2：点和圆的关系",[147,17125,17126],{},[150,17127,17128],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[20,17130,17132],{"className":308,"code":17131,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccmath>\nclass Point\n{\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double getX() { return m_x; }\n    double getY() { return m_y; }\n\nprivate:\n    double m_x;\n    double m_y;\n};\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r) { m_r = r; }\n    void setCenter(Point center) { m_center = center; }\n    \u002F\u002F获取属性\n    double getRadius() { return m_r; }\n    Point getCenter() { return m_center; }\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[27,17133,17134,17140,17150,17157,17164,17168,17172,17177,17211,17216,17232,17246,17250,17254,17261,17268,17272,17278,17282,17286,17290,17312,17335,17340,17354,17369,17373,17377,17383,17388,17393,17397,17423,17427,17457,17485,17513,17530,17534,17547,17551,17555,17559,17572,17576,17580,17588,17592,17596,17600,17605,17609,17620,17627,17636,17646,17657,17664,17677,17688,17698,17709,17716,17730,17735,17745,17753],{"__ignoreMap":25},[30,17135,17136,17138],{"class":32,"line":33},[30,17137,2132],{"class":317},[30,17139,2135],{"class":74},[30,17141,17142,17144,17146,17148],{"class":32,"line":44},[30,17143,2140],{"class":317},[30,17145,2143],{"class":317},[30,17147,2146],{"class":36},[30,17149,1480],{"class":321},[30,17151,17152,17154],{"class":32,"line":52},[30,17153,2132],{"class":317},[30,17155,17156],{"class":74},"\u003Ccmath>\n",[30,17158,17159,17161],{"class":32,"line":60},[30,17160,14876],{"class":317},[30,17162,17163],{"class":36}," Point\n",[30,17165,17166],{"class":32,"line":68},[30,17167,1732],{"class":321},[30,17169,17170],{"class":32,"line":80},[30,17171,14898],{"class":317},[30,17173,17174],{"class":32,"line":88},[30,17175,17176],{"class":379},"    \u002F\u002F赋值\n",[30,17178,17179,17181,17184,17186,17188,17191,17193,17195,17198,17201,17203,17206,17208],{"class":32,"line":96},[30,17180,15091],{"class":317},[30,17182,17183],{"class":36}," setPoint",[30,17185,322],{"class":321},[30,17187,14219],{"class":317},[30,17189,17190],{"class":5398}," x",[30,17192,12617],{"class":321},[30,17194,14219],{"class":317},[30,17196,17197],{"class":5398}," y",[30,17199,17200],{"class":321},") { m_x ",[30,17202,367],{"class":317},[30,17204,17205],{"class":321}," x; m_y ",[30,17207,367],{"class":317},[30,17209,17210],{"class":321}," y; }\n",[30,17212,17213],{"class":32,"line":104},[30,17214,17215],{"class":379},"    \u002F\u002F获取坐标\n",[30,17217,17218,17220,17223,17226,17229],{"class":32,"line":112},[30,17219,14920],{"class":317},[30,17221,17222],{"class":36}," getX",[30,17224,17225],{"class":321},"() { ",[30,17227,17228],{"class":317},"return",[30,17230,17231],{"class":321}," m_x; }\n",[30,17233,17234,17236,17239,17241,17243],{"class":32,"line":123},[30,17235,14920],{"class":317},[30,17237,17238],{"class":36}," getY",[30,17240,17225],{"class":321},[30,17242,17228],{"class":317},[30,17244,17245],{"class":321}," m_y; }\n",[30,17247,17248],{"class":32,"line":131},[30,17249,2582],{"emptyLinePlaceholder":245},[30,17251,17252],{"class":32,"line":142},[30,17253,15404],{"class":317},[30,17255,17256,17258],{"class":32,"line":1811},[30,17257,14920],{"class":317},[30,17259,17260],{"class":321}," m_x;\n",[30,17262,17263,17265],{"class":32,"line":1825},[30,17264,14920],{"class":317},[30,17266,17267],{"class":321}," m_y;\n",[30,17269,17270],{"class":32,"line":1830},[30,17271,4177],{"class":321},[30,17273,17274,17276],{"class":32,"line":1836},[30,17275,14876],{"class":317},[30,17277,14879],{"class":36},[30,17279,17280],{"class":32,"line":1857},[30,17281,1732],{"class":321},[30,17283,17284],{"class":32,"line":1862},[30,17285,14898],{"class":317},[30,17287,17288],{"class":32,"line":1876},[30,17289,17176],{"class":379},[30,17291,17292,17294,17297,17299,17301,17304,17307,17309],{"class":32,"line":1881},[30,17293,15091],{"class":317},[30,17295,17296],{"class":36}," setRadius",[30,17298,322],{"class":321},[30,17300,14219],{"class":317},[30,17302,17303],{"class":5398}," r",[30,17305,17306],{"class":321},") { m_r ",[30,17308,367],{"class":317},[30,17310,17311],{"class":321}," r; }\n",[30,17313,17314,17316,17319,17321,17324,17327,17330,17332],{"class":32,"line":1910},[30,17315,15091],{"class":317},[30,17317,17318],{"class":36}," setCenter",[30,17320,322],{"class":321},[30,17322,17323],{"class":36},"Point",[30,17325,17326],{"class":5398}," center",[30,17328,17329],{"class":321},") { m_center ",[30,17331,367],{"class":317},[30,17333,17334],{"class":321}," center; }\n",[30,17336,17337],{"class":32,"line":1915},[30,17338,17339],{"class":379},"    \u002F\u002F获取属性\n",[30,17341,17342,17344,17347,17349,17351],{"class":32,"line":1932},[30,17343,14920],{"class":317},[30,17345,17346],{"class":36}," getRadius",[30,17348,17225],{"class":321},[30,17350,17228],{"class":317},[30,17352,17353],{"class":321}," m_r; }\n",[30,17355,17356,17359,17362,17364,17366],{"class":32,"line":1937},[30,17357,17358],{"class":36},"    Point",[30,17360,17361],{"class":36}," getCenter",[30,17363,17225],{"class":321},[30,17365,17228],{"class":317},[30,17367,17368],{"class":321}," m_center; }\n",[30,17370,17371],{"class":32,"line":1942},[30,17372,2582],{"emptyLinePlaceholder":245},[30,17374,17375],{"class":32,"line":1947},[30,17376,15404],{"class":317},[30,17378,17379,17381],{"class":32,"line":1961},[30,17380,14920],{"class":317},[30,17382,14910],{"class":321},[30,17384,17385],{"class":32,"line":1966},[30,17386,17387],{"class":379},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[30,17389,17390],{"class":32,"line":2759},[30,17391,17392],{"class":321},"    Point m_center;\n",[30,17394,17395],{"class":32,"line":2773},[30,17396,4177],{"class":321},[30,17398,17399,17401,17404,17406,17409,17411,17413,17415,17417,17419,17421],{"class":32,"line":2781},[30,17400,5546],{"class":317},[30,17402,17403],{"class":36}," isInCircle",[30,17405,322],{"class":321},[30,17407,17408],{"class":36},"Circle",[30,17410,10766],{"class":317},[30,17412,608],{"class":5398},[30,17414,698],{"class":321},[30,17416,17323],{"class":36},[30,17418,10766],{"class":317},[30,17420,157],{"class":5398},[30,17422,328],{"class":321},[30,17424,17425],{"class":32,"line":2786},[30,17426,1732],{"class":321},[30,17428,17429,17431,17434,17436,17438,17441,17444,17447,17449,17451,17453,17455],{"class":32,"line":2792},[30,17430,14920],{"class":317},[30,17432,17433],{"class":321}," dx ",[30,17435,367],{"class":317},[30,17437,16524],{"class":321},[30,17439,17440],{"class":36},"getCenter",[30,17442,17443],{"class":321},"().",[30,17445,17446],{"class":36},"getX",[30,17448,13232],{"class":321},[30,17450,852],{"class":317},[30,17452,16070],{"class":321},[30,17454,17446],{"class":36},[30,17456,5818],{"class":321},[30,17458,17459,17461,17464,17466,17468,17470,17472,17475,17477,17479,17481,17483],{"class":32,"line":2798},[30,17460,14920],{"class":317},[30,17462,17463],{"class":321}," dy ",[30,17465,367],{"class":317},[30,17467,16524],{"class":321},[30,17469,17440],{"class":36},[30,17471,17443],{"class":321},[30,17473,17474],{"class":36},"getY",[30,17476,13232],{"class":321},[30,17478,852],{"class":317},[30,17480,16070],{"class":321},[30,17482,17474],{"class":36},[30,17484,5818],{"class":321},[30,17486,17487,17489,17492,17494,17497,17500,17502,17504,17506,17508,17510],{"class":32,"line":2803},[30,17488,14920],{"class":317},[30,17490,17491],{"class":321}," distance ",[30,17493,367],{"class":317},[30,17495,17496],{"class":36}," sqrt",[30,17498,17499],{"class":321},"(dx ",[30,17501,775],{"class":317},[30,17503,17433],{"class":321},[30,17505,801],{"class":317},[30,17507,17463],{"class":321},[30,17509,775],{"class":317},[30,17511,17512],{"class":321}," dy);\n",[30,17514,17515,17517,17520,17522,17524,17527],{"class":32,"line":8130},[30,17516,3283],{"class":317},[30,17518,17519],{"class":321}," (distance ",[30,17521,1230],{"class":317},[30,17523,16524],{"class":321},[30,17525,17526],{"class":36},"getRadius",[30,17528,17529],{"class":321},"())\n",[30,17531,17532],{"class":32,"line":8154},[30,17533,2212],{"class":321},[30,17535,17536,17538,17540,17543,17545],{"class":32,"line":8159},[30,17537,9851],{"class":321},[30,17539,1363],{"class":317},[30,17541,17542],{"class":74}," \"点在圆内\"",[30,17544,1631],{"class":317},[30,17546,9022],{"class":321},[30,17548,17549],{"class":32,"line":8165},[30,17550,2369],{"class":321},[30,17552,17553],{"class":32,"line":8192},[30,17554,17005],{"class":317},[30,17556,17557],{"class":32,"line":8197},[30,17558,2212],{"class":321},[30,17560,17561,17563,17565,17568,17570],{"class":32,"line":8203},[30,17562,9851],{"class":321},[30,17564,1363],{"class":317},[30,17566,17567],{"class":74}," \"点在圆外\"",[30,17569,1631],{"class":317},[30,17571,9022],{"class":321},[30,17573,17574],{"class":32,"line":8215},[30,17575,2369],{"class":321},[30,17577,17578],{"class":32,"line":8227},[30,17579,1751],{"class":321},[30,17581,17582,17584,17586],{"class":32,"line":8239},[30,17583,325],{"class":317},[30,17585,2155],{"class":36},[30,17587,2158],{"class":321},[30,17589,17590],{"class":32,"line":9898},[30,17591,1732],{"class":321},[30,17593,17594],{"class":32,"line":9923},[30,17595,15235],{"class":379},[30,17597,17598],{"class":32,"line":9946},[30,17599,14982],{"class":321},[30,17601,17602],{"class":32,"line":9970},[30,17603,17604],{"class":321},"    Point p1;\n",[30,17606,17607],{"class":32,"line":9975},[30,17608,17176],{"class":379},[30,17610,17611,17613,17615,17618],{"class":32,"line":9980},[30,17612,1737],{"class":321},[30,17614,1363],{"class":317},[30,17616,17617],{"class":74},"\"请输入圆的半径：\"",[30,17619,1480],{"class":321},[30,17621,17622,17624],{"class":32,"line":9985},[30,17623,14920],{"class":317},[30,17625,17626],{"class":321}," r;\n",[30,17628,17629,17631,17633],{"class":32,"line":9994},[30,17630,2194],{"class":321},[30,17632,1616],{"class":317},[30,17634,17635],{"class":321},"r;\n",[30,17637,17638,17640,17643],{"class":32,"line":9999},[30,17639,16777],{"class":321},[30,17641,17642],{"class":36},"setRadius",[30,17644,17645],{"class":321},"(r);\n",[30,17647,17648,17650,17652,17655],{"class":32,"line":10005},[30,17649,1737],{"class":321},[30,17651,1363],{"class":317},[30,17653,17654],{"class":74},"\"请输入圆心坐标：\"",[30,17656,1480],{"class":321},[30,17658,17659,17661],{"class":32,"line":10026},[30,17660,14920],{"class":317},[30,17662,17663],{"class":321}," x, y;\n",[30,17665,17666,17668,17670,17672,17674],{"class":32,"line":10032},[30,17667,2194],{"class":321},[30,17669,1616],{"class":317},[30,17671,1140],{"class":321},[30,17673,1616],{"class":317},[30,17675,17676],{"class":321},"y;\n",[30,17678,17679,17682,17685],{"class":32,"line":10046},[30,17680,17681],{"class":321},"    p1.",[30,17683,17684],{"class":36},"setPoint",[30,17686,17687],{"class":321},"(x, y);\n",[30,17689,17690,17692,17695],{"class":32,"line":10052},[30,17691,16777],{"class":321},[30,17693,17694],{"class":36},"setCenter",[30,17696,17697],{"class":321},"(p1);\n",[30,17699,17700,17702,17704,17707],{"class":32,"line":10079},[30,17701,1737],{"class":321},[30,17703,1363],{"class":317},[30,17705,17706],{"class":74},"\"请输入测试点坐标：\"",[30,17708,1480],{"class":321},[30,17710,17711,17713],{"class":32,"line":10088},[30,17712,14920],{"class":317},[30,17714,17715],{"class":321}," x1, y1;\n",[30,17717,17718,17720,17722,17725,17727],{"class":32,"line":10094},[30,17719,2194],{"class":321},[30,17721,1616],{"class":317},[30,17723,17724],{"class":321},"x1",[30,17726,1616],{"class":317},[30,17728,17729],{"class":321},"y1;\n",[30,17731,17732],{"class":32,"line":10102},[30,17733,17734],{"class":321},"    Point p2;\n",[30,17736,17737,17740,17742],{"class":32,"line":10107},[30,17738,17739],{"class":321},"    p2.",[30,17741,17684],{"class":36},[30,17743,17744],{"class":321},"(x1, y1);\n",[30,17746,17747,17750],{"class":32,"line":16786},[30,17748,17749],{"class":36},"    isInCircle",[30,17751,17752],{"class":321},"(c1, p2);\n",[30,17754,17755],{"class":32,"line":16792},[30,17756,1751],{"class":321},[157,17758,17759],{},"在类中可以让另一个类作为本来的成员",[157,17761,17762],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[157,17764,17765],{},"创建point.h",[20,17767,17769],{"className":308,"code":17768,"language":310,"meta":25,"style":25},"#pragma once \u002F\u002F防止头文件重复包含\n#include\u003Ciostream>\nusing namespace std;\nclass Point\n{\n\u002F\u002F做好声明与变量定义就可以\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y);\n    \u002F\u002F获取坐标\n    double getX();\n    double getY();\n\nprivate:\n    double m_x;\n    double m_y;\n};\n",[27,17770,17771,17782,17788,17798,17804,17808,17813,17817,17821,17841,17845,17853,17861,17865,17869,17875,17881],{"__ignoreMap":25},[30,17772,17773,17776,17779],{"class":32,"line":33},[30,17774,17775],{"class":317},"#pragma",[30,17777,17778],{"class":36}," once",[30,17780,17781],{"class":379}," \u002F\u002F防止头文件重复包含\n",[30,17783,17784,17786],{"class":32,"line":44},[30,17785,2132],{"class":317},[30,17787,2135],{"class":74},[30,17789,17790,17792,17794,17796],{"class":32,"line":52},[30,17791,2140],{"class":317},[30,17793,2143],{"class":317},[30,17795,2146],{"class":36},[30,17797,1480],{"class":321},[30,17799,17800,17802],{"class":32,"line":60},[30,17801,14876],{"class":317},[30,17803,17163],{"class":36},[30,17805,17806],{"class":32,"line":68},[30,17807,1732],{"class":321},[30,17809,17810],{"class":32,"line":80},[30,17811,17812],{"class":379},"\u002F\u002F做好声明与变量定义就可以\n",[30,17814,17815],{"class":32,"line":88},[30,17816,14898],{"class":317},[30,17818,17819],{"class":32,"line":96},[30,17820,17176],{"class":379},[30,17822,17823,17825,17827,17829,17831,17833,17835,17837,17839],{"class":32,"line":104},[30,17824,15091],{"class":317},[30,17826,17183],{"class":36},[30,17828,322],{"class":321},[30,17830,14219],{"class":317},[30,17832,17190],{"class":5398},[30,17834,12617],{"class":321},[30,17836,14219],{"class":317},[30,17838,17197],{"class":5398},[30,17840,2901],{"class":321},[30,17842,17843],{"class":32,"line":112},[30,17844,17215],{"class":379},[30,17846,17847,17849,17851],{"class":32,"line":123},[30,17848,14920],{"class":317},[30,17850,17222],{"class":36},[30,17852,5818],{"class":321},[30,17854,17855,17857,17859],{"class":32,"line":131},[30,17856,14920],{"class":317},[30,17858,17238],{"class":36},[30,17860,5818],{"class":321},[30,17862,17863],{"class":32,"line":142},[30,17864,2582],{"emptyLinePlaceholder":245},[30,17866,17867],{"class":32,"line":1811},[30,17868,15404],{"class":317},[30,17870,17871,17873],{"class":32,"line":1825},[30,17872,14920],{"class":317},[30,17874,17260],{"class":321},[30,17876,17877,17879],{"class":32,"line":1830},[30,17878,14920],{"class":317},[30,17880,17267],{"class":321},[30,17882,17883],{"class":32,"line":1836},[30,17884,4177],{"class":321},[157,17886,17887],{},"创建point.cpp",[20,17889,17891],{"className":308,"code":17890,"language":310,"meta":25,"style":25},"#include\u003Cpoint.h>\n\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n    void Point::setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double Point::getX() { return m_x; }\n    double Point::getY() { return m_y; }\n",[27,17892,17893,17900,17905,17939,17943,17959],{"__ignoreMap":25},[30,17894,17895,17897],{"class":32,"line":33},[30,17896,2132],{"class":317},[30,17898,17899],{"class":74},"\u003Cpoint.h>\n",[30,17901,17902],{"class":32,"line":44},[30,17903,17904],{"class":379},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[30,17906,17907,17909,17912,17915,17917,17919,17921,17923,17925,17927,17929,17931,17933,17935,17937],{"class":32,"line":52},[30,17908,15091],{"class":317},[30,17910,17911],{"class":36}," Point",[30,17913,17914],{"class":321},"::",[30,17916,17684],{"class":36},[30,17918,322],{"class":321},[30,17920,14219],{"class":317},[30,17922,17190],{"class":5398},[30,17924,12617],{"class":321},[30,17926,14219],{"class":317},[30,17928,17197],{"class":5398},[30,17930,17200],{"class":321},[30,17932,367],{"class":317},[30,17934,17205],{"class":321},[30,17936,367],{"class":317},[30,17938,17210],{"class":321},[30,17940,17941],{"class":32,"line":60},[30,17942,17215],{"class":379},[30,17944,17945,17947,17949,17951,17953,17955,17957],{"class":32,"line":68},[30,17946,14920],{"class":317},[30,17948,17911],{"class":36},[30,17950,17914],{"class":321},[30,17952,17446],{"class":36},[30,17954,17225],{"class":321},[30,17956,17228],{"class":317},[30,17958,17231],{"class":321},[30,17960,17961,17963,17965,17967,17969,17971,17973],{"class":32,"line":80},[30,17962,14920],{"class":317},[30,17964,17911],{"class":36},[30,17966,17914],{"class":321},[30,17968,17474],{"class":36},[30,17970,17225],{"class":321},[30,17972,17228],{"class":317},[30,17974,17245],{"class":321},[157,17976,17977],{},"创建circle.h",[20,17979,17981],{"className":308,"code":17980,"language":310,"meta":25,"style":25},"#pragma once\n#include\u003Ciostream>\nusing namespace std;\n#include\u003Cpoint.h>\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r);\n    void setCenter(Point center);\n    \u002F\u002F获取属性\n    double getRadius();\n    Point getCenter();\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\n",[27,17982,17983,17990,17996,18006,18012,18018,18022,18026,18030,18044,18058,18062,18070,18078,18082,18086,18092,18096,18100],{"__ignoreMap":25},[30,17984,17985,17987],{"class":32,"line":33},[30,17986,17775],{"class":317},[30,17988,17989],{"class":36}," once\n",[30,17991,17992,17994],{"class":32,"line":44},[30,17993,2132],{"class":317},[30,17995,2135],{"class":74},[30,17997,17998,18000,18002,18004],{"class":32,"line":52},[30,17999,2140],{"class":317},[30,18001,2143],{"class":317},[30,18003,2146],{"class":36},[30,18005,1480],{"class":321},[30,18007,18008,18010],{"class":32,"line":60},[30,18009,2132],{"class":317},[30,18011,17899],{"class":74},[30,18013,18014,18016],{"class":32,"line":68},[30,18015,14876],{"class":317},[30,18017,14879],{"class":36},[30,18019,18020],{"class":32,"line":80},[30,18021,1732],{"class":321},[30,18023,18024],{"class":32,"line":88},[30,18025,14898],{"class":317},[30,18027,18028],{"class":32,"line":96},[30,18029,17176],{"class":379},[30,18031,18032,18034,18036,18038,18040,18042],{"class":32,"line":104},[30,18033,15091],{"class":317},[30,18035,17296],{"class":36},[30,18037,322],{"class":321},[30,18039,14219],{"class":317},[30,18041,17303],{"class":5398},[30,18043,2901],{"class":321},[30,18045,18046,18048,18050,18052,18054,18056],{"class":32,"line":112},[30,18047,15091],{"class":317},[30,18049,17318],{"class":36},[30,18051,322],{"class":321},[30,18053,17323],{"class":36},[30,18055,17326],{"class":5398},[30,18057,2901],{"class":321},[30,18059,18060],{"class":32,"line":123},[30,18061,17339],{"class":379},[30,18063,18064,18066,18068],{"class":32,"line":131},[30,18065,14920],{"class":317},[30,18067,17346],{"class":36},[30,18069,5818],{"class":321},[30,18071,18072,18074,18076],{"class":32,"line":142},[30,18073,17358],{"class":36},[30,18075,17361],{"class":36},[30,18077,5818],{"class":321},[30,18079,18080],{"class":32,"line":1811},[30,18081,2582],{"emptyLinePlaceholder":245},[30,18083,18084],{"class":32,"line":1825},[30,18085,15404],{"class":317},[30,18087,18088,18090],{"class":32,"line":1830},[30,18089,14920],{"class":317},[30,18091,14910],{"class":321},[30,18093,18094],{"class":32,"line":1836},[30,18095,17387],{"class":379},[30,18097,18098],{"class":32,"line":1857},[30,18099,17392],{"class":321},[30,18101,18102],{"class":32,"line":1862},[30,18103,4177],{"class":321},[157,18105,18106],{},"创建circle.cpp",[20,18108,18110],{"className":308,"code":18109,"language":310,"meta":25,"style":25},"#include\u003Ccircle.h>\nvoid Circle::setRadius(double r) { m_r = r; }\nvoid Circle::setCenter(Point center) { m_center = center; }\n\u002F\u002F获取属性\ndouble Circle::getRadius() { return m_r; }\nPoint Circle::getCenter() { return m_center; }\n",[27,18111,18112,18119,18142,18164,18169,18185],{"__ignoreMap":25},[30,18113,18114,18116],{"class":32,"line":33},[30,18115,2132],{"class":317},[30,18117,18118],{"class":74},"\u003Ccircle.h>\n",[30,18120,18121,18123,18126,18128,18130,18132,18134,18136,18138,18140],{"class":32,"line":44},[30,18122,5546],{"class":317},[30,18124,18125],{"class":36}," Circle",[30,18127,17914],{"class":321},[30,18129,17642],{"class":36},[30,18131,322],{"class":321},[30,18133,14219],{"class":317},[30,18135,17303],{"class":5398},[30,18137,17306],{"class":321},[30,18139,367],{"class":317},[30,18141,17311],{"class":321},[30,18143,18144,18146,18148,18150,18152,18154,18156,18158,18160,18162],{"class":32,"line":52},[30,18145,5546],{"class":317},[30,18147,18125],{"class":36},[30,18149,17914],{"class":321},[30,18151,17694],{"class":36},[30,18153,322],{"class":321},[30,18155,17323],{"class":36},[30,18157,17326],{"class":5398},[30,18159,17329],{"class":321},[30,18161,367],{"class":317},[30,18163,17334],{"class":321},[30,18165,18166],{"class":32,"line":60},[30,18167,18168],{"class":379},"\u002F\u002F获取属性\n",[30,18170,18171,18173,18175,18177,18179,18181,18183],{"class":32,"line":68},[30,18172,14219],{"class":317},[30,18174,18125],{"class":36},[30,18176,17914],{"class":321},[30,18178,17526],{"class":36},[30,18180,17225],{"class":321},[30,18182,17228],{"class":317},[30,18184,17353],{"class":321},[30,18186,18187,18189,18191,18193,18195,18197,18199],{"class":32,"line":80},[30,18188,17323],{"class":36},[30,18190,18125],{"class":36},[30,18192,17914],{"class":321},[30,18194,17440],{"class":36},[30,18196,17225],{"class":321},[30,18198,17228],{"class":317},[30,18200,17368],{"class":321},[157,18202,18203],{},"使用封装的类",[20,18205,18207],{"className":308,"code":18206,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccircle.h>\n#include\u003Cpoint.h>\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[27,18208,18209,18215,18225,18231,18237,18261,18265,18291,18317,18341,18355,18359,18371,18375,18379,18383,18395,18399,18403,18411,18415,18419,18423,18427,18431,18441,18447,18455,18463,18473,18479,18491,18499,18507,18517,18523,18535,18539,18547,18553],{"__ignoreMap":25},[30,18210,18211,18213],{"class":32,"line":33},[30,18212,2132],{"class":317},[30,18214,2135],{"class":74},[30,18216,18217,18219,18221,18223],{"class":32,"line":44},[30,18218,2140],{"class":317},[30,18220,2143],{"class":317},[30,18222,2146],{"class":36},[30,18224,1480],{"class":321},[30,18226,18227,18229],{"class":32,"line":52},[30,18228,2132],{"class":317},[30,18230,18118],{"class":74},[30,18232,18233,18235],{"class":32,"line":60},[30,18234,2132],{"class":317},[30,18236,17899],{"class":74},[30,18238,18239,18241,18243,18245,18247,18249,18251,18253,18255,18257,18259],{"class":32,"line":68},[30,18240,5546],{"class":317},[30,18242,17403],{"class":36},[30,18244,322],{"class":321},[30,18246,17408],{"class":36},[30,18248,10766],{"class":317},[30,18250,608],{"class":5398},[30,18252,698],{"class":321},[30,18254,17323],{"class":36},[30,18256,10766],{"class":317},[30,18258,157],{"class":5398},[30,18260,328],{"class":321},[30,18262,18263],{"class":32,"line":80},[30,18264,1732],{"class":321},[30,18266,18267,18269,18271,18273,18275,18277,18279,18281,18283,18285,18287,18289],{"class":32,"line":88},[30,18268,14920],{"class":317},[30,18270,17433],{"class":321},[30,18272,367],{"class":317},[30,18274,16524],{"class":321},[30,18276,17440],{"class":36},[30,18278,17443],{"class":321},[30,18280,17446],{"class":36},[30,18282,13232],{"class":321},[30,18284,852],{"class":317},[30,18286,16070],{"class":321},[30,18288,17446],{"class":36},[30,18290,5818],{"class":321},[30,18292,18293,18295,18297,18299,18301,18303,18305,18307,18309,18311,18313,18315],{"class":32,"line":96},[30,18294,14920],{"class":317},[30,18296,17463],{"class":321},[30,18298,367],{"class":317},[30,18300,16524],{"class":321},[30,18302,17440],{"class":36},[30,18304,17443],{"class":321},[30,18306,17474],{"class":36},[30,18308,13232],{"class":321},[30,18310,852],{"class":317},[30,18312,16070],{"class":321},[30,18314,17474],{"class":36},[30,18316,5818],{"class":321},[30,18318,18319,18321,18323,18325,18327,18329,18331,18333,18335,18337,18339],{"class":32,"line":104},[30,18320,14920],{"class":317},[30,18322,17491],{"class":321},[30,18324,367],{"class":317},[30,18326,17496],{"class":36},[30,18328,17499],{"class":321},[30,18330,775],{"class":317},[30,18332,17433],{"class":321},[30,18334,801],{"class":317},[30,18336,17463],{"class":321},[30,18338,775],{"class":317},[30,18340,17512],{"class":321},[30,18342,18343,18345,18347,18349,18351,18353],{"class":32,"line":112},[30,18344,3283],{"class":317},[30,18346,17519],{"class":321},[30,18348,1230],{"class":317},[30,18350,16524],{"class":321},[30,18352,17526],{"class":36},[30,18354,17529],{"class":321},[30,18356,18357],{"class":32,"line":123},[30,18358,2212],{"class":321},[30,18360,18361,18363,18365,18367,18369],{"class":32,"line":131},[30,18362,9851],{"class":321},[30,18364,1363],{"class":317},[30,18366,17542],{"class":74},[30,18368,1631],{"class":317},[30,18370,9022],{"class":321},[30,18372,18373],{"class":32,"line":142},[30,18374,2369],{"class":321},[30,18376,18377],{"class":32,"line":1811},[30,18378,17005],{"class":317},[30,18380,18381],{"class":32,"line":1825},[30,18382,2212],{"class":321},[30,18384,18385,18387,18389,18391,18393],{"class":32,"line":1830},[30,18386,9851],{"class":321},[30,18388,1363],{"class":317},[30,18390,17567],{"class":74},[30,18392,1631],{"class":317},[30,18394,9022],{"class":321},[30,18396,18397],{"class":32,"line":1836},[30,18398,2369],{"class":321},[30,18400,18401],{"class":32,"line":1857},[30,18402,1751],{"class":321},[30,18404,18405,18407,18409],{"class":32,"line":1862},[30,18406,325],{"class":317},[30,18408,2155],{"class":36},[30,18410,2158],{"class":321},[30,18412,18413],{"class":32,"line":1876},[30,18414,1732],{"class":321},[30,18416,18417],{"class":32,"line":1881},[30,18418,15235],{"class":379},[30,18420,18421],{"class":32,"line":1910},[30,18422,14982],{"class":321},[30,18424,18425],{"class":32,"line":1915},[30,18426,17604],{"class":321},[30,18428,18429],{"class":32,"line":1932},[30,18430,17176],{"class":379},[30,18432,18433,18435,18437,18439],{"class":32,"line":1937},[30,18434,1737],{"class":321},[30,18436,1363],{"class":317},[30,18438,17617],{"class":74},[30,18440,1480],{"class":321},[30,18442,18443,18445],{"class":32,"line":1942},[30,18444,14920],{"class":317},[30,18446,17626],{"class":321},[30,18448,18449,18451,18453],{"class":32,"line":1947},[30,18450,2194],{"class":321},[30,18452,1616],{"class":317},[30,18454,17635],{"class":321},[30,18456,18457,18459,18461],{"class":32,"line":1961},[30,18458,16777],{"class":321},[30,18460,17642],{"class":36},[30,18462,17645],{"class":321},[30,18464,18465,18467,18469,18471],{"class":32,"line":1966},[30,18466,1737],{"class":321},[30,18468,1363],{"class":317},[30,18470,17654],{"class":74},[30,18472,1480],{"class":321},[30,18474,18475,18477],{"class":32,"line":2759},[30,18476,14920],{"class":317},[30,18478,17663],{"class":321},[30,18480,18481,18483,18485,18487,18489],{"class":32,"line":2773},[30,18482,2194],{"class":321},[30,18484,1616],{"class":317},[30,18486,1140],{"class":321},[30,18488,1616],{"class":317},[30,18490,17676],{"class":321},[30,18492,18493,18495,18497],{"class":32,"line":2781},[30,18494,17681],{"class":321},[30,18496,17684],{"class":36},[30,18498,17687],{"class":321},[30,18500,18501,18503,18505],{"class":32,"line":2786},[30,18502,16777],{"class":321},[30,18504,17694],{"class":36},[30,18506,17697],{"class":321},[30,18508,18509,18511,18513,18515],{"class":32,"line":2792},[30,18510,1737],{"class":321},[30,18512,1363],{"class":317},[30,18514,17706],{"class":74},[30,18516,1480],{"class":321},[30,18518,18519,18521],{"class":32,"line":2798},[30,18520,14920],{"class":317},[30,18522,17715],{"class":321},[30,18524,18525,18527,18529,18531,18533],{"class":32,"line":2803},[30,18526,2194],{"class":321},[30,18528,1616],{"class":317},[30,18530,17724],{"class":321},[30,18532,1616],{"class":317},[30,18534,17729],{"class":321},[30,18536,18537],{"class":32,"line":8130},[30,18538,17734],{"class":321},[30,18540,18541,18543,18545],{"class":32,"line":8154},[30,18542,17739],{"class":321},[30,18544,17684],{"class":36},[30,18546,17744],{"class":321},[30,18548,18549,18551],{"class":32,"line":8159},[30,18550,17749],{"class":36},[30,18552,17752],{"class":321},[30,18554,18555],{"class":32,"line":8165},[30,18556,1751],{"class":321},[15,18558,18560],{"id":18559},"_82对象的初始化清理","8.2对象的初始化清理",[147,18562,18563,18566],{},[150,18564,18565],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[150,18567,18568],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[287,18570,18572],{"id":18571},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[157,18574,18575,18576,18579],{},"对象的",[469,18577,18578],{},"初始化和清理","也是两个非常重要的安全问题",[157,18581,18582],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[157,18584,18585],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[157,18587,18588,18589,18592,18593,18596],{},"c++利用了",[469,18590,18591],{},"构造函数","和",[469,18594,18595],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[157,18598,18599,18600],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[469,18601,18602],{},"我们不提供构造和析构，编译器会提供",[157,18604,18605],{},[469,18606,18607],{},"编译器提供的构造函数和析构函数是空实现。",[147,18609,18610,18613],{},[150,18611,18612],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[150,18614,18615,18616,18619],{},"析构函数：主要作用在于对象",[469,18617,18618],{},"销毁前","系统自动调用，执行一些清理工作。",[157,18621,18622,18625],{},[469,18623,18624],{},"构造函数语法：",[27,18626,18627],{},"类名(){}",[271,18629,18630,18633,18636,18639,18642],{},[150,18631,18632],{},"构造函数，没有返回值也不写void",[150,18634,18635],{},"函数名称与类名相同",[150,18637,18638],{},"构造函数可以有参数，因此可以发生重载",[150,18640,18641],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[150,18643,18644,18645,749],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[27,18646,18647],{},"Person(){}",[157,18649,18650,13977,18653],{},[469,18651,18652],{},"析构函数语法：",[27,18654,18655],{},"~类名(){}",[271,18657,18658,18661,18664,18670],{},[150,18659,18660],{},"析构函数，没有返回值也不写void",[150,18662,18663],{},"函数名称与类名相同,在名称前加上符号  ~",[150,18665,18666,18667],{},"析构函数不可以有参数，因此",[469,18668,18669],{},"不可以发生重载",[150,18671,18672],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[20,18674,18676],{"className":308,"code":18675,"language":310,"meta":25,"style":25},"class Person\n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout \u003C\u003C \"Person的构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n\n};\n\nvoid test01()\n{\n    Person p;\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n}\n\nint main() {\n    \n    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n\n    Person p;\u002F\u002F只有构造函数\n\n    system(\"pause\");\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n\n    return 0;\n}\n",[27,18677,18678,18684,18688,18692,18697,18704,18708,18721,18725,18730,18737,18741,18754,18758,18762,18766,18770,18778,18782,18790,18794,18798,18806,18810,18815,18819,18826,18830,18843,18847,18855],{"__ignoreMap":25},[30,18679,18680,18682],{"class":32,"line":33},[30,18681,14876],{"class":317},[30,18683,15353],{"class":36},[30,18685,18686],{"class":32,"line":44},[30,18687,1732],{"class":321},[30,18689,18690],{"class":32,"line":52},[30,18691,14898],{"class":317},[30,18693,18694],{"class":32,"line":60},[30,18695,18696],{"class":379},"    \u002F\u002F构造函数\n",[30,18698,18699,18702],{"class":32,"line":68},[30,18700,18701],{"class":36},"    Person",[30,18703,2158],{"class":321},[30,18705,18706],{"class":32,"line":80},[30,18707,2212],{"class":321},[30,18709,18710,18712,18714,18717,18719],{"class":32,"line":88},[30,18711,9851],{"class":321},[30,18713,1363],{"class":317},[30,18715,18716],{"class":74}," \"Person的构造函数调用\"",[30,18718,1631],{"class":317},[30,18720,9022],{"class":321},[30,18722,18723],{"class":32,"line":96},[30,18724,2369],{"class":321},[30,18726,18727],{"class":32,"line":104},[30,18728,18729],{"class":379},"    \u002F\u002F析构函数\n",[30,18731,18732,18735],{"class":32,"line":112},[30,18733,18734],{"class":36},"    ~Person",[30,18736,2158],{"class":321},[30,18738,18739],{"class":32,"line":123},[30,18740,2212],{"class":321},[30,18742,18743,18745,18747,18750,18752],{"class":32,"line":131},[30,18744,9851],{"class":321},[30,18746,1363],{"class":317},[30,18748,18749],{"class":74}," \"Person的析构函数调用\"",[30,18751,1631],{"class":317},[30,18753,9022],{"class":321},[30,18755,18756],{"class":32,"line":142},[30,18757,2369],{"class":321},[30,18759,18760],{"class":32,"line":1811},[30,18761,2582],{"emptyLinePlaceholder":245},[30,18763,18764],{"class":32,"line":1825},[30,18765,4177],{"class":321},[30,18767,18768],{"class":32,"line":1830},[30,18769,2582],{"emptyLinePlaceholder":245},[30,18771,18772,18774,18776],{"class":32,"line":1836},[30,18773,5546],{"class":317},[30,18775,5770],{"class":36},[30,18777,2158],{"class":321},[30,18779,18780],{"class":32,"line":1857},[30,18781,1732],{"class":321},[30,18783,18784,18787],{"class":32,"line":1862},[30,18785,18786],{"class":321},"    Person p;",[30,18788,18789],{"class":379},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[30,18791,18792],{"class":32,"line":1876},[30,18793,1751],{"class":321},[30,18795,18796],{"class":32,"line":1881},[30,18797,2582],{"emptyLinePlaceholder":245},[30,18799,18800,18802,18804],{"class":32,"line":1910},[30,18801,325],{"class":317},[30,18803,2155],{"class":36},[30,18805,11035],{"class":321},[30,18807,18808],{"class":32,"line":1915},[30,18809,13392],{"class":321},[30,18811,18812],{"class":32,"line":1932},[30,18813,18814],{"class":379},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[30,18816,18817],{"class":32,"line":1937},[30,18818,2582],{"emptyLinePlaceholder":245},[30,18820,18821,18823],{"class":32,"line":1942},[30,18822,18786],{"class":321},[30,18824,18825],{"class":379},"\u002F\u002F只有构造函数\n",[30,18827,18828],{"class":32,"line":1947},[30,18829,2582],{"emptyLinePlaceholder":245},[30,18831,18832,18834,18836,18838,18840],{"class":32,"line":1961},[30,18833,2485],{"class":36},[30,18835,322],{"class":321},[30,18837,2490],{"class":74},[30,18839,6148],{"class":321},[30,18841,18842],{"class":379},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[30,18844,18845],{"class":32,"line":1966},[30,18846,2582],{"emptyLinePlaceholder":245},[30,18848,18849,18851,18853],{"class":32,"line":2759},[30,18850,4272],{"class":317},[30,18852,4275],{"class":40},[30,18854,1480],{"class":321},[30,18856,18857],{"class":32,"line":2773},[30,18858,1751],{"class":321},[157,18860,18861],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[287,18863,18865],{"id":18864},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[157,18867,18868],{},"两种分类方式：",[157,18870,18871],{},"​\t按参数分为： 有参构造和无参构造",[157,18873,18874],{},"​\t按类型分为： 普通构造和拷贝构造",[157,18876,18877],{},"三种调用方式：",[157,18879,18880],{},"​\t括号法",[157,18882,18883],{},"​\t显示法",[157,18885,18886],{},"​\t隐式转换法",[20,18888,18890],{"className":308,"code":18889,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F1.构造函数的分类及调用\n\u002F\u002F分类\n\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n\u002F\u002F  按照类型分类 普通构造 拷贝构造\n\nclass Person \n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout\u003C\u003C\"Person构造函数无参构造\"\u003C\u003Cendl;\n    }\n    Person(int a)\n    {\n        age=a;\n        cout\u003C\u003C\"Person构造函数有参构造\"\u003C\u003Cendl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数被调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        \u002F\u002F将传入对象的age赋值给当前对象的age\n        age=p.age;\n        cout\u003C\u003C\"Person拷贝构造函数被调用\"\u003C\u003Cendl;\n    }\n    int age;\n};\n\u002F\u002F调用\nvoid test01()\n{\n    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n}\nvoid test02()\n{\n    \u002F\u002F1.括号法\n    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n\n    \u002F\u002F注意事项\n    \u002F\u002F调用默认构造函数时候，不要加()\n    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n    \u002F\u002F Person p4();\n\n    \u002F\u002F2.显示法\n    Person p1;\n    Person p2=Person(10);\n    Person p3=Person(p2);\n    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n\n    \u002F\u002F 注意事项2\n    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n\n    \u002F\u002F3.隐士转换法\n    Person p4=10;  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n    Person p5=p4; \u002F\u002F 这里会调用拷贝构造函数\n}\nint main()\n{\n    test01();\n    test02();\n    return 0;\n}\n",[27,18891,18892,18898,18908,18913,18918,18923,18928,18932,18940,18944,18948,18952,18958,18962,18975,18979,18991,18995,19004,19017,19021,19025,19031,19035,19048,19052,19057,19073,19077,19082,19091,19104,19108,19114,19118,19123,19131,19135,19140,19144,19152,19156,19161,19166,19171,19176,19181,19185,19190,19195,19200,19205,19209,19214,19219,19235,19247,19252,19256,19261,19266,19271,19275,19280,19294,19307,19311,19319,19323,19329,19335,19343],{"__ignoreMap":25},[30,18893,18894,18896],{"class":32,"line":33},[30,18895,2132],{"class":317},[30,18897,2135],{"class":74},[30,18899,18900,18902,18904,18906],{"class":32,"line":44},[30,18901,2140],{"class":317},[30,18903,2143],{"class":317},[30,18905,2146],{"class":36},[30,18907,1480],{"class":321},[30,18909,18910],{"class":32,"line":52},[30,18911,18912],{"class":379},"\u002F\u002F1.构造函数的分类及调用\n",[30,18914,18915],{"class":32,"line":60},[30,18916,18917],{"class":379},"\u002F\u002F分类\n",[30,18919,18920],{"class":32,"line":68},[30,18921,18922],{"class":379},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[30,18924,18925],{"class":32,"line":80},[30,18926,18927],{"class":379},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[30,18929,18930],{"class":32,"line":88},[30,18931,2582],{"emptyLinePlaceholder":245},[30,18933,18934,18936,18938],{"class":32,"line":96},[30,18935,14876],{"class":317},[30,18937,15751],{"class":36},[30,18939,2856],{"class":321},[30,18941,18942],{"class":32,"line":104},[30,18943,1732],{"class":321},[30,18945,18946],{"class":32,"line":112},[30,18947,14898],{"class":317},[30,18949,18950],{"class":32,"line":123},[30,18951,18696],{"class":379},[30,18953,18954,18956],{"class":32,"line":131},[30,18955,18701],{"class":36},[30,18957,2158],{"class":321},[30,18959,18960],{"class":32,"line":142},[30,18961,2212],{"class":321},[30,18963,18964,18966,18968,18971,18973],{"class":32,"line":1811},[30,18965,3633],{"class":321},[30,18967,1363],{"class":317},[30,18969,18970],{"class":74},"\"Person构造函数无参构造\"",[30,18972,1363],{"class":317},[30,18974,1385],{"class":321},[30,18976,18977],{"class":32,"line":1825},[30,18978,2369],{"class":321},[30,18980,18981,18983,18985,18987,18989],{"class":32,"line":1830},[30,18982,18701],{"class":36},[30,18984,322],{"class":321},[30,18986,325],{"class":317},[30,18988,1585],{"class":5398},[30,18990,328],{"class":321},[30,18992,18993],{"class":32,"line":1836},[30,18994,2212],{"class":321},[30,18996,18997,19000,19002],{"class":32,"line":1857},[30,18998,18999],{"class":321},"        age",[30,19001,367],{"class":317},[30,19003,6379],{"class":321},[30,19005,19006,19008,19010,19013,19015],{"class":32,"line":1862},[30,19007,3633],{"class":321},[30,19009,1363],{"class":317},[30,19011,19012],{"class":74},"\"Person构造函数有参构造\"",[30,19014,1363],{"class":317},[30,19016,1385],{"class":321},[30,19018,19019],{"class":32,"line":1876},[30,19020,2369],{"class":321},[30,19022,19023],{"class":32,"line":1881},[30,19024,18729],{"class":379},[30,19026,19027,19029],{"class":32,"line":1910},[30,19028,18734],{"class":36},[30,19030,2158],{"class":321},[30,19032,19033],{"class":32,"line":1915},[30,19034,2212],{"class":321},[30,19036,19037,19039,19041,19044,19046],{"class":32,"line":1932},[30,19038,3633],{"class":321},[30,19040,1363],{"class":317},[30,19042,19043],{"class":74},"\"Person析构函数被调用\"",[30,19045,1363],{"class":317},[30,19047,1385],{"class":321},[30,19049,19050],{"class":32,"line":1937},[30,19051,2369],{"class":321},[30,19053,19054],{"class":32,"line":1942},[30,19055,19056],{"class":379},"    \u002F\u002F拷贝构造函数\n",[30,19058,19059,19061,19063,19065,19067,19069,19071],{"class":32,"line":1947},[30,19060,18701],{"class":36},[30,19062,322],{"class":321},[30,19064,6974],{"class":317},[30,19066,15751],{"class":36},[30,19068,10766],{"class":317},[30,19070,157],{"class":5398},[30,19072,328],{"class":321},[30,19074,19075],{"class":32,"line":1961},[30,19076,2212],{"class":321},[30,19078,19079],{"class":32,"line":1966},[30,19080,19081],{"class":379},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[30,19083,19084,19086,19088],{"class":32,"line":2759},[30,19085,18999],{"class":321},[30,19087,367],{"class":317},[30,19089,19090],{"class":321},"p.age;\n",[30,19092,19093,19095,19097,19100,19102],{"class":32,"line":2773},[30,19094,3633],{"class":321},[30,19096,1363],{"class":317},[30,19098,19099],{"class":74},"\"Person拷贝构造函数被调用\"",[30,19101,1363],{"class":317},[30,19103,1385],{"class":321},[30,19105,19106],{"class":32,"line":2781},[30,19107,2369],{"class":321},[30,19109,19110,19112],{"class":32,"line":2786},[30,19111,2167],{"class":317},[30,19113,7979],{"class":321},[30,19115,19116],{"class":32,"line":2792},[30,19117,4177],{"class":321},[30,19119,19120],{"class":32,"line":2798},[30,19121,19122],{"class":379},"\u002F\u002F调用\n",[30,19124,19125,19127,19129],{"class":32,"line":2803},[30,19126,5546],{"class":317},[30,19128,5770],{"class":36},[30,19130,2158],{"class":321},[30,19132,19133],{"class":32,"line":8130},[30,19134,1732],{"class":321},[30,19136,19137],{"class":32,"line":8154},[30,19138,19139],{"class":379},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[30,19141,19142],{"class":32,"line":8159},[30,19143,1751],{"class":321},[30,19145,19146,19148,19150],{"class":32,"line":8165},[30,19147,5546],{"class":317},[30,19149,5839],{"class":36},[30,19151,2158],{"class":321},[30,19153,19154],{"class":32,"line":8192},[30,19155,1732],{"class":321},[30,19157,19158],{"class":32,"line":8197},[30,19159,19160],{"class":379},"    \u002F\u002F1.括号法\n",[30,19162,19163],{"class":32,"line":8203},[30,19164,19165],{"class":379},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[30,19167,19168],{"class":32,"line":8215},[30,19169,19170],{"class":379},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[30,19172,19173],{"class":32,"line":8227},[30,19174,19175],{"class":379},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[30,19177,19178],{"class":32,"line":8239},[30,19179,19180],{"class":379},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[30,19182,19183],{"class":32,"line":9898},[30,19184,2582],{"emptyLinePlaceholder":245},[30,19186,19187],{"class":32,"line":9923},[30,19188,19189],{"class":379},"    \u002F\u002F注意事项\n",[30,19191,19192],{"class":32,"line":9946},[30,19193,19194],{"class":379},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[30,19196,19197],{"class":32,"line":9970},[30,19198,19199],{"class":379},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[30,19201,19202],{"class":32,"line":9975},[30,19203,19204],{"class":379},"    \u002F\u002F Person p4();\n",[30,19206,19207],{"class":32,"line":9980},[30,19208,2582],{"emptyLinePlaceholder":245},[30,19210,19211],{"class":32,"line":9985},[30,19212,19213],{"class":379},"    \u002F\u002F2.显示法\n",[30,19215,19216],{"class":32,"line":9994},[30,19217,19218],{"class":321},"    Person p1;\n",[30,19220,19221,19224,19226,19229,19231,19233],{"class":32,"line":9999},[30,19222,19223],{"class":321},"    Person p2",[30,19225,367],{"class":317},[30,19227,19228],{"class":36},"Person",[30,19230,322],{"class":321},[30,19232,766],{"class":40},[30,19234,2901],{"class":321},[30,19236,19237,19240,19242,19244],{"class":32,"line":10005},[30,19238,19239],{"class":321},"    Person p3",[30,19241,367],{"class":317},[30,19243,19228],{"class":36},[30,19245,19246],{"class":321},"(p2);\n",[30,19248,19249],{"class":32,"line":10026},[30,19250,19251],{"class":379},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[30,19253,19254],{"class":32,"line":10032},[30,19255,2582],{"emptyLinePlaceholder":245},[30,19257,19258],{"class":32,"line":10046},[30,19259,19260],{"class":379},"    \u002F\u002F 注意事项2\n",[30,19262,19263],{"class":32,"line":10052},[30,19264,19265],{"class":379},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[30,19267,19268],{"class":32,"line":10079},[30,19269,19270],{"class":379},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[30,19272,19273],{"class":32,"line":10088},[30,19274,2582],{"emptyLinePlaceholder":245},[30,19276,19277],{"class":32,"line":10094},[30,19278,19279],{"class":379},"    \u002F\u002F3.隐士转换法\n",[30,19281,19282,19285,19287,19289,19291],{"class":32,"line":10102},[30,19283,19284],{"class":321},"    Person p4",[30,19286,367],{"class":317},[30,19288,766],{"class":40},[30,19290,376],{"class":321},[30,19292,19293],{"class":379},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[30,19295,19296,19299,19301,19304],{"class":32,"line":10107},[30,19297,19298],{"class":321},"    Person p5",[30,19300,367],{"class":317},[30,19302,19303],{"class":321},"p4;",[30,19305,19306],{"class":379}," \u002F\u002F 这里会调用拷贝构造函数\n",[30,19308,19309],{"class":32,"line":16786},[30,19310,1751],{"class":321},[30,19312,19313,19315,19317],{"class":32,"line":16792},[30,19314,325],{"class":317},[30,19316,2155],{"class":36},[30,19318,2158],{"class":321},[30,19320,19321],{"class":32,"line":16815},[30,19322,1732],{"class":321},[30,19324,19325,19327],{"class":32,"line":16821},[30,19326,5815],{"class":36},[30,19328,5818],{"class":321},[30,19330,19331,19333],{"class":32,"line":16844},[30,19332,5884],{"class":36},[30,19334,5818],{"class":321},[30,19336,19337,19339,19341],{"class":32,"line":16858},[30,19338,4272],{"class":317},[30,19340,4275],{"class":40},[30,19342,1480],{"class":321},[30,19344,19345],{"class":32,"line":16878},[30,19346,1751],{"class":321},[157,19348,19349,19352],{},[469,19350,19351],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[287,19354,19356],{"id":19355},"_823拷贝构造函数","8.2.3拷贝构造函数",[157,19358,19359],{},"C++中拷贝构造函数调用时机通常有三种情况",[147,19361,19362,19365,19368],{},[150,19363,19364],{},"使用一个已经创建完毕的对象来初始化一个新对象",[150,19366,19367],{},"值传递的方式给函数参数传值",[150,19369,19370],{},"以值方式返回局部对象",[20,19372,19374],{"className":308,"code":19373,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n\n\u002F\u002F拷贝构造函数调用时机\n\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n\u002F\u002F2.值传递的方式给函数参数传值\n\u002F\u002F3.以值方式返回局部对象\nclass Person\n{\npublic:\n    Person()\n    {\n        cout \u003C\u003C \"Person的默认构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造\n    Person(int age)\n    {\n        m_Age = age;\n        cout \u003C\u003C \"Person的有参构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        m_Age = p.m_Age;\n        cout \u003C\u003C \"Person的拷贝构造函数调用\" \u003C\u003C endl;\n    }\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n    int m_Age;\n};\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\nvoid test01()\n{\n    Person p1(20);\n    Person p2(p1);\n    cout\u003C\u003C\"P2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003Cendl;\n}\n\u002F\u002F 2.值传递的方式给函数参数传值\n\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\nvoid doWork(Person p)\n{\n    cout \u003C\u003C \"doWork函数调用\" \u003C\u003C endl;\n}\nvoid test02()\n{\n    Person p;\n    doWork(p);\n}\n\u002F\u002F 3.以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout\u003C\u003C(int *)&p1\u003C\u003Cendl;\u002F\u002F打印p1的地址\n    return p1;\u002F\u002F返回局部对象，调用拷贝构造函数\n}\nvoid test03()\n{\n    Person p = doWork2();\n    cout\u003C\u003C(int *)&p\u003C\u003Cendl;\u002F\u002F打印p的地址\n}\n\n\nint main()\n{\n    \u002F\u002F test01();\n    \u002F\u002F test02();\n    test03();\n\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n\u002F\u002F 输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F Person的析构函数调用\n\n\u002F\u002F 之前的输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 地址\n\u002F\u002F Person的拷贝构造函数调用\n\u002F\u002F Person的析构函数调用\n\u002F\u002F 地址\n\u002F\u002F (这两次输出的地址也是不同的) \n\u002F\u002F Person的析构函数调用     \n    return 0;\n}\n",[27,19375,19376,19382,19392,19396,19401,19405,19410,19415,19420,19426,19430,19434,19440,19444,19457,19461,19466,19478,19482,19490,19503,19507,19511,19527,19531,19540,19553,19557,19563,19567,19579,19583,19589,19593,19597,19605,19609,19622,19630,19648,19652,19657,19662,19677,19681,19694,19698,19706,19710,19714,19722,19726,19731,19740,19744,19748,19773,19783,19787,19795,19799,19810,19835,19839,19843,19847,19855,19859,19864,19869,19876,19881,19886,19891,19896,19900,19905,19909,19914,19918,19923,19928,19932,19936,19941,19946,19954],{"__ignoreMap":25},[30,19377,19378,19380],{"class":32,"line":33},[30,19379,2132],{"class":317},[30,19381,2135],{"class":74},[30,19383,19384,19386,19388,19390],{"class":32,"line":44},[30,19385,2140],{"class":317},[30,19387,2143],{"class":317},[30,19389,2146],{"class":36},[30,19391,1480],{"class":321},[30,19393,19394],{"class":32,"line":52},[30,19395,2582],{"emptyLinePlaceholder":245},[30,19397,19398],{"class":32,"line":60},[30,19399,19400],{"class":379},"\u002F\u002F拷贝构造函数调用时机\n",[30,19402,19403],{"class":32,"line":68},[30,19404,2582],{"emptyLinePlaceholder":245},[30,19406,19407],{"class":32,"line":80},[30,19408,19409],{"class":379},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[30,19411,19412],{"class":32,"line":88},[30,19413,19414],{"class":379},"\u002F\u002F2.值传递的方式给函数参数传值\n",[30,19416,19417],{"class":32,"line":96},[30,19418,19419],{"class":379},"\u002F\u002F3.以值方式返回局部对象\n",[30,19421,19422,19424],{"class":32,"line":104},[30,19423,14876],{"class":317},[30,19425,15353],{"class":36},[30,19427,19428],{"class":32,"line":112},[30,19429,1732],{"class":321},[30,19431,19432],{"class":32,"line":123},[30,19433,14898],{"class":317},[30,19435,19436,19438],{"class":32,"line":131},[30,19437,18701],{"class":36},[30,19439,2158],{"class":321},[30,19441,19442],{"class":32,"line":142},[30,19443,2212],{"class":321},[30,19445,19446,19448,19450,19453,19455],{"class":32,"line":1811},[30,19447,9851],{"class":321},[30,19449,1363],{"class":317},[30,19451,19452],{"class":74}," \"Person的默认构造函数调用\"",[30,19454,1631],{"class":317},[30,19456,9022],{"class":321},[30,19458,19459],{"class":32,"line":1825},[30,19460,2369],{"class":321},[30,19462,19463],{"class":32,"line":1830},[30,19464,19465],{"class":379},"    \u002F\u002F有参构造\n",[30,19467,19468,19470,19472,19474,19476],{"class":32,"line":1836},[30,19469,18701],{"class":36},[30,19471,322],{"class":321},[30,19473,325],{"class":317},[30,19475,15871],{"class":5398},[30,19477,328],{"class":321},[30,19479,19480],{"class":32,"line":1857},[30,19481,2212],{"class":321},[30,19483,19484,19486,19488],{"class":32,"line":1862},[30,19485,15925],{"class":321},[30,19487,367],{"class":317},[30,19489,7979],{"class":321},[30,19491,19492,19494,19496,19499,19501],{"class":32,"line":1876},[30,19493,9851],{"class":321},[30,19495,1363],{"class":317},[30,19497,19498],{"class":74}," \"Person的有参构造函数调用\"",[30,19500,1631],{"class":317},[30,19502,9022],{"class":321},[30,19504,19505],{"class":32,"line":1881},[30,19506,2369],{"class":321},[30,19508,19509],{"class":32,"line":1910},[30,19510,19056],{"class":379},[30,19512,19513,19515,19517,19519,19521,19523,19525],{"class":32,"line":1915},[30,19514,18701],{"class":36},[30,19516,322],{"class":321},[30,19518,6974],{"class":317},[30,19520,15751],{"class":36},[30,19522,10766],{"class":317},[30,19524,157],{"class":5398},[30,19526,328],{"class":321},[30,19528,19529],{"class":32,"line":1932},[30,19530,2212],{"class":321},[30,19532,19533,19535,19537],{"class":32,"line":1937},[30,19534,15925],{"class":321},[30,19536,367],{"class":317},[30,19538,19539],{"class":321}," p.m_Age;\n",[30,19541,19542,19544,19546,19549,19551],{"class":32,"line":1942},[30,19543,9851],{"class":321},[30,19545,1363],{"class":317},[30,19547,19548],{"class":74}," \"Person的拷贝构造函数调用\"",[30,19550,1631],{"class":317},[30,19552,9022],{"class":321},[30,19554,19555],{"class":32,"line":1947},[30,19556,2369],{"class":321},[30,19558,19559,19561],{"class":32,"line":1961},[30,19560,18734],{"class":36},[30,19562,2158],{"class":321},[30,19564,19565],{"class":32,"line":1966},[30,19566,2212],{"class":321},[30,19568,19569,19571,19573,19575,19577],{"class":32,"line":2759},[30,19570,9851],{"class":321},[30,19572,1363],{"class":317},[30,19574,18749],{"class":74},[30,19576,1631],{"class":317},[30,19578,9022],{"class":321},[30,19580,19581],{"class":32,"line":2773},[30,19582,2369],{"class":321},[30,19584,19585,19587],{"class":32,"line":2781},[30,19586,2167],{"class":317},[30,19588,15848],{"class":321},[30,19590,19591],{"class":32,"line":2786},[30,19592,4177],{"class":321},[30,19594,19595],{"class":32,"line":2792},[30,19596,19409],{"class":379},[30,19598,19599,19601,19603],{"class":32,"line":2798},[30,19600,5546],{"class":317},[30,19602,5770],{"class":36},[30,19604,2158],{"class":321},[30,19606,19607],{"class":32,"line":2803},[30,19608,1732],{"class":321},[30,19610,19611,19614,19616,19618,19620],{"class":32,"line":8130},[30,19612,19613],{"class":321},"    Person ",[30,19615,7312],{"class":36},[30,19617,322],{"class":321},[30,19619,1020],{"class":40},[30,19621,2901],{"class":321},[30,19623,19624,19626,19628],{"class":32,"line":8154},[30,19625,19613],{"class":321},[30,19627,7215],{"class":36},[30,19629,17697],{"class":321},[30,19631,19632,19634,19636,19639,19641,19644,19646],{"class":32,"line":8159},[30,19633,1737],{"class":321},[30,19635,1363],{"class":317},[30,19637,19638],{"class":74},"\"P2的年龄为：\"",[30,19640,1363],{"class":317},[30,19642,19643],{"class":321},"p2.m_Age",[30,19645,1363],{"class":317},[30,19647,1385],{"class":321},[30,19649,19650],{"class":32,"line":8165},[30,19651,1751],{"class":321},[30,19653,19654],{"class":32,"line":8192},[30,19655,19656],{"class":379},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[30,19658,19659],{"class":32,"line":8197},[30,19660,19661],{"class":379},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[30,19663,19664,19666,19669,19671,19673,19675],{"class":32,"line":8203},[30,19665,5546],{"class":317},[30,19667,19668],{"class":36}," doWork",[30,19670,322],{"class":321},[30,19672,19228],{"class":36},[30,19674,7007],{"class":5398},[30,19676,328],{"class":321},[30,19678,19679],{"class":32,"line":8215},[30,19680,1732],{"class":321},[30,19682,19683,19685,19687,19690,19692],{"class":32,"line":8227},[30,19684,6711],{"class":321},[30,19686,1363],{"class":317},[30,19688,19689],{"class":74}," \"doWork函数调用\"",[30,19691,1631],{"class":317},[30,19693,9022],{"class":321},[30,19695,19696],{"class":32,"line":8239},[30,19697,1751],{"class":321},[30,19699,19700,19702,19704],{"class":32,"line":9898},[30,19701,5546],{"class":317},[30,19703,5839],{"class":36},[30,19705,2158],{"class":321},[30,19707,19708],{"class":32,"line":9923},[30,19709,1732],{"class":321},[30,19711,19712],{"class":32,"line":9946},[30,19713,15495],{"class":321},[30,19715,19716,19719],{"class":32,"line":9970},[30,19717,19718],{"class":36},"    doWork",[30,19720,19721],{"class":321},"(p);\n",[30,19723,19724],{"class":32,"line":9975},[30,19725,1751],{"class":321},[30,19727,19728],{"class":32,"line":9980},[30,19729,19730],{"class":379},"\u002F\u002F 3.以值方式返回局部对象\n",[30,19732,19733,19735,19738],{"class":32,"line":9985},[30,19734,19228],{"class":36},[30,19736,19737],{"class":36}," doWork2",[30,19739,2158],{"class":321},[30,19741,19742],{"class":32,"line":9994},[30,19743,1732],{"class":321},[30,19745,19746],{"class":32,"line":9999},[30,19747,19218],{"class":321},[30,19749,19750,19752,19754,19756,19758,19760,19762,19764,19766,19768,19770],{"class":32,"line":10005},[30,19751,1737],{"class":321},[30,19753,1363],{"class":317},[30,19755,322],{"class":321},[30,19757,325],{"class":317},[30,19759,6700],{"class":317},[30,19761,749],{"class":321},[30,19763,673],{"class":317},[30,19765,7312],{"class":321},[30,19767,1363],{"class":317},[30,19769,1428],{"class":321},[30,19771,19772],{"class":379},"\u002F\u002F打印p1的地址\n",[30,19774,19775,19777,19780],{"class":32,"line":10026},[30,19776,4272],{"class":317},[30,19778,19779],{"class":321}," p1;",[30,19781,19782],{"class":379},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[30,19784,19785],{"class":32,"line":10032},[30,19786,1751],{"class":321},[30,19788,19789,19791,19793],{"class":32,"line":10046},[30,19790,5546],{"class":317},[30,19792,5911],{"class":36},[30,19794,2158],{"class":321},[30,19796,19797],{"class":32,"line":10052},[30,19798,1732],{"class":321},[30,19800,19801,19804,19806,19808],{"class":32,"line":10079},[30,19802,19803],{"class":321},"    Person p ",[30,19805,367],{"class":317},[30,19807,19737],{"class":36},[30,19809,5818],{"class":321},[30,19811,19812,19814,19816,19818,19820,19822,19824,19826,19828,19830,19832],{"class":32,"line":10088},[30,19813,1737],{"class":321},[30,19815,1363],{"class":317},[30,19817,322],{"class":321},[30,19819,325],{"class":317},[30,19821,6700],{"class":317},[30,19823,749],{"class":321},[30,19825,673],{"class":317},[30,19827,157],{"class":321},[30,19829,1363],{"class":317},[30,19831,1428],{"class":321},[30,19833,19834],{"class":379},"\u002F\u002F打印p的地址\n",[30,19836,19837],{"class":32,"line":10094},[30,19838,1751],{"class":321},[30,19840,19841],{"class":32,"line":10102},[30,19842,2582],{"emptyLinePlaceholder":245},[30,19844,19845],{"class":32,"line":10107},[30,19846,2582],{"emptyLinePlaceholder":245},[30,19848,19849,19851,19853],{"class":32,"line":16786},[30,19850,325],{"class":317},[30,19852,2155],{"class":36},[30,19854,2158],{"class":321},[30,19856,19857],{"class":32,"line":16792},[30,19858,1732],{"class":321},[30,19860,19861],{"class":32,"line":16815},[30,19862,19863],{"class":379},"    \u002F\u002F test01();\n",[30,19865,19866],{"class":32,"line":16821},[30,19867,19868],{"class":379},"    \u002F\u002F test02();\n",[30,19870,19871,19874],{"class":32,"line":16844},[30,19872,19873],{"class":36},"    test03",[30,19875,5818],{"class":321},[30,19877,19878],{"class":32,"line":16858},[30,19879,19880],{"class":379},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[30,19882,19883],{"class":32,"line":16878},[30,19884,19885],{"class":379},"\u002F\u002F 输出结果如下：\n",[30,19887,19888],{"class":32,"line":16884},[30,19889,19890],{"class":379},"\u002F\u002F Person的默认构造函数调用\n",[30,19892,19893],{"class":32,"line":16895},[30,19894,19895],{"class":379},"\u002F\u002F 0x7fffffffceec\n",[30,19897,19898],{"class":32,"line":16918},[30,19899,19895],{"class":379},[30,19901,19902],{"class":32,"line":16940},[30,19903,19904],{"class":379},"\u002F\u002F Person的析构函数调用\n",[30,19906,19907],{"class":32,"line":16945},[30,19908,2582],{"emptyLinePlaceholder":245},[30,19910,19911],{"class":32,"line":16951},[30,19912,19913],{"class":379},"\u002F\u002F 之前的输出结果如下：\n",[30,19915,19916],{"class":32,"line":16965},[30,19917,19890],{"class":379},[30,19919,19920],{"class":32,"line":16978},[30,19921,19922],{"class":379},"\u002F\u002F 地址\n",[30,19924,19925],{"class":32,"line":16983},[30,19926,19927],{"class":379},"\u002F\u002F Person的拷贝构造函数调用\n",[30,19929,19930],{"class":32,"line":16997},[30,19931,19904],{"class":379},[30,19933,19934],{"class":32,"line":17002},[30,19935,19922],{"class":379},[30,19937,19938],{"class":32,"line":17008},[30,19939,19940],{"class":379},"\u002F\u002F (这两次输出的地址也是不同的) \n",[30,19942,19943],{"class":32,"line":17013},[30,19944,19945],{"class":379},"\u002F\u002F Person的析构函数调用     \n",[30,19947,19948,19950,19952],{"class":32,"line":17027},[30,19949,4272],{"class":317},[30,19951,4275],{"class":40},[30,19953,1480],{"class":321},[30,19955,19956],{"class":32,"line":17032},[30,19957,1751],{"class":321},[157,19959,19960],{},"简化版理解",[20,19962,19964],{"className":308,"code":19963,"language":310,"meta":25,"style":25},"class Person {\npublic:\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n        mAge = 0;\n    }\n    Person(int age) {\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n        mAge = age;\n    }\n    Person(const Person& p) {\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n        mAge = p.mAge;\n    }\n    \u002F\u002F析构函数在释放内存之前调用\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int mAge;\n};\n\n\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\nvoid test01() {\n\n    Person man(100); \u002F\u002Fp对象已经创建完毕\n    Person newman(man); \u002F\u002F调用拷贝构造函数\n    Person newman2 = man; \u002F\u002F拷贝构造\n\n    \u002F\u002FPerson newman3;\n    \u002F\u002Fnewman3 = man; \u002F\u002F不是调用拷贝构造函数，赋值操作\n}\n\n\u002F\u002F2. 值传递的方式给函数参数传值\n\u002F\u002F相当于Person p1 = p;\nvoid doWork(Person p1) {}\nvoid test02() {\n    Person p; \u002F\u002F无参构造函数\n    doWork(p);\n}\n\n\u002F\u002F3. 以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout \u003C\u003C (int *)&p1 \u003C\u003C endl;\n    return p1;\n}\n\nvoid test03()\n{\n    Person p = doWork2();\n    cout \u003C\u003C (int *)&p \u003C\u003C endl;\n}\n\n\nint main() {\n\n    \u002F\u002Ftest01();\n    \u002F\u002Ftest02();\n    test03();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,19965,19966,19974,19978,19984,19997,20008,20012,20024,20037,20045,20049,20065,20078,20087,20091,20096,20102,20115,20119,20123,20130,20134,20138,20143,20151,20155,20171,20184,20197,20201,20206,20214,20218,20222,20227,20232,20248,20256,20263,20269,20273,20277,20282,20290,20294,20298,20321,20328,20332,20336,20344,20348,20358,20380,20384,20388,20392,20400,20404,20409,20414,20420,20424,20434,20438,20446],{"__ignoreMap":25},[30,19967,19968,19970,19972],{"class":32,"line":33},[30,19969,14876],{"class":317},[30,19971,15751],{"class":36},[30,19973,15754],{"class":321},[30,19975,19976],{"class":32,"line":44},[30,19977,14898],{"class":317},[30,19979,19980,19982],{"class":32,"line":52},[30,19981,18701],{"class":36},[30,19983,11035],{"class":321},[30,19985,19986,19988,19990,19993,19995],{"class":32,"line":60},[30,19987,9851],{"class":321},[30,19989,1363],{"class":317},[30,19991,19992],{"class":74}," \"无参构造函数!\"",[30,19994,1631],{"class":317},[30,19996,9022],{"class":321},[30,19998,19999,20002,20004,20006],{"class":32,"line":68},[30,20000,20001],{"class":321},"        mAge ",[30,20003,367],{"class":317},[30,20005,4275],{"class":40},[30,20007,1480],{"class":321},[30,20009,20010],{"class":32,"line":80},[30,20011,2369],{"class":321},[30,20013,20014,20016,20018,20020,20022],{"class":32,"line":88},[30,20015,18701],{"class":36},[30,20017,322],{"class":321},[30,20019,325],{"class":317},[30,20021,15871],{"class":5398},[30,20023,12624],{"class":321},[30,20025,20026,20028,20030,20033,20035],{"class":32,"line":96},[30,20027,9851],{"class":321},[30,20029,1363],{"class":317},[30,20031,20032],{"class":74}," \"有参构造函数!\"",[30,20034,1631],{"class":317},[30,20036,9022],{"class":321},[30,20038,20039,20041,20043],{"class":32,"line":104},[30,20040,20001],{"class":321},[30,20042,367],{"class":317},[30,20044,7979],{"class":321},[30,20046,20047],{"class":32,"line":112},[30,20048,2369],{"class":321},[30,20050,20051,20053,20055,20057,20059,20061,20063],{"class":32,"line":123},[30,20052,18701],{"class":36},[30,20054,322],{"class":321},[30,20056,6974],{"class":317},[30,20058,15751],{"class":36},[30,20060,673],{"class":317},[30,20062,7007],{"class":5398},[30,20064,12624],{"class":321},[30,20066,20067,20069,20071,20074,20076],{"class":32,"line":131},[30,20068,9851],{"class":321},[30,20070,1363],{"class":317},[30,20072,20073],{"class":74}," \"拷贝构造函数!\"",[30,20075,1631],{"class":317},[30,20077,9022],{"class":321},[30,20079,20080,20082,20084],{"class":32,"line":142},[30,20081,20001],{"class":321},[30,20083,367],{"class":317},[30,20085,20086],{"class":321}," p.mAge;\n",[30,20088,20089],{"class":32,"line":1811},[30,20090,2369],{"class":321},[30,20092,20093],{"class":32,"line":1825},[30,20094,20095],{"class":379},"    \u002F\u002F析构函数在释放内存之前调用\n",[30,20097,20098,20100],{"class":32,"line":1830},[30,20099,18734],{"class":36},[30,20101,11035],{"class":321},[30,20103,20104,20106,20108,20111,20113],{"class":32,"line":1836},[30,20105,9851],{"class":321},[30,20107,1363],{"class":317},[30,20109,20110],{"class":74}," \"析构函数!\"",[30,20112,1631],{"class":317},[30,20114,9022],{"class":321},[30,20116,20117],{"class":32,"line":1857},[30,20118,2369],{"class":321},[30,20120,20121],{"class":32,"line":1862},[30,20122,14898],{"class":317},[30,20124,20125,20127],{"class":32,"line":1876},[30,20126,2167],{"class":317},[30,20128,20129],{"class":321}," mAge;\n",[30,20131,20132],{"class":32,"line":1881},[30,20133,4177],{"class":321},[30,20135,20136],{"class":32,"line":1910},[30,20137,2582],{"emptyLinePlaceholder":245},[30,20139,20140],{"class":32,"line":1915},[30,20141,20142],{"class":379},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[30,20144,20145,20147,20149],{"class":32,"line":1932},[30,20146,5546],{"class":317},[30,20148,5770],{"class":36},[30,20150,11035],{"class":321},[30,20152,20153],{"class":32,"line":1937},[30,20154,2582],{"emptyLinePlaceholder":245},[30,20156,20157,20159,20162,20164,20166,20168],{"class":32,"line":1942},[30,20158,19613],{"class":321},[30,20160,20161],{"class":36},"man",[30,20163,322],{"class":321},[30,20165,631],{"class":40},[30,20167,6148],{"class":321},[30,20169,20170],{"class":379}," \u002F\u002Fp对象已经创建完毕\n",[30,20172,20173,20175,20178,20181],{"class":32,"line":1947},[30,20174,19613],{"class":321},[30,20176,20177],{"class":36},"newman",[30,20179,20180],{"class":321},"(man);",[30,20182,20183],{"class":379}," \u002F\u002F调用拷贝构造函数\n",[30,20185,20186,20189,20191,20194],{"class":32,"line":1961},[30,20187,20188],{"class":321},"    Person newman2 ",[30,20190,367],{"class":317},[30,20192,20193],{"class":321}," man;",[30,20195,20196],{"class":379}," \u002F\u002F拷贝构造\n",[30,20198,20199],{"class":32,"line":1966},[30,20200,2582],{"emptyLinePlaceholder":245},[30,20202,20203],{"class":32,"line":2759},[30,20204,20205],{"class":379},"    \u002F\u002FPerson newman3;\n",[30,20207,20208,20211],{"class":32,"line":2773},[30,20209,20210],{"class":379},"    \u002F\u002Fnewman3 = man;",[30,20212,20213],{"class":379}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[30,20215,20216],{"class":32,"line":2781},[30,20217,1751],{"class":321},[30,20219,20220],{"class":32,"line":2786},[30,20221,2582],{"emptyLinePlaceholder":245},[30,20223,20224],{"class":32,"line":2792},[30,20225,20226],{"class":379},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[30,20228,20229],{"class":32,"line":2798},[30,20230,20231],{"class":379},"\u002F\u002F相当于Person p1 = p;\n",[30,20233,20234,20236,20238,20240,20242,20245],{"class":32,"line":2803},[30,20235,5546],{"class":317},[30,20237,19668],{"class":36},[30,20239,322],{"class":321},[30,20241,19228],{"class":36},[30,20243,20244],{"class":5398}," p1",[30,20246,20247],{"class":321},") {}\n",[30,20249,20250,20252,20254],{"class":32,"line":8130},[30,20251,5546],{"class":317},[30,20253,5839],{"class":36},[30,20255,11035],{"class":321},[30,20257,20258,20260],{"class":32,"line":8154},[30,20259,18786],{"class":321},[30,20261,20262],{"class":379}," \u002F\u002F无参构造函数\n",[30,20264,20265,20267],{"class":32,"line":8159},[30,20266,19718],{"class":36},[30,20268,19721],{"class":321},[30,20270,20271],{"class":32,"line":8165},[30,20272,1751],{"class":321},[30,20274,20275],{"class":32,"line":8192},[30,20276,2582],{"emptyLinePlaceholder":245},[30,20278,20279],{"class":32,"line":8197},[30,20280,20281],{"class":379},"\u002F\u002F3. 以值方式返回局部对象\n",[30,20283,20284,20286,20288],{"class":32,"line":8203},[30,20285,19228],{"class":36},[30,20287,19737],{"class":36},[30,20289,2158],{"class":321},[30,20291,20292],{"class":32,"line":8215},[30,20293,1732],{"class":321},[30,20295,20296],{"class":32,"line":8227},[30,20297,19218],{"class":321},[30,20299,20300,20302,20304,20306,20308,20310,20312,20314,20317,20319],{"class":32,"line":8239},[30,20301,6711],{"class":321},[30,20303,1363],{"class":317},[30,20305,1841],{"class":321},[30,20307,325],{"class":317},[30,20309,6700],{"class":317},[30,20311,749],{"class":321},[30,20313,673],{"class":317},[30,20315,20316],{"class":321},"p1 ",[30,20318,1363],{"class":317},[30,20320,9022],{"class":321},[30,20322,20323,20325],{"class":32,"line":9898},[30,20324,4272],{"class":317},[30,20326,20327],{"class":321}," p1;\n",[30,20329,20330],{"class":32,"line":9923},[30,20331,1751],{"class":321},[30,20333,20334],{"class":32,"line":9946},[30,20335,2582],{"emptyLinePlaceholder":245},[30,20337,20338,20340,20342],{"class":32,"line":9970},[30,20339,5546],{"class":317},[30,20341,5911],{"class":36},[30,20343,2158],{"class":321},[30,20345,20346],{"class":32,"line":9975},[30,20347,1732],{"class":321},[30,20349,20350,20352,20354,20356],{"class":32,"line":9980},[30,20351,19803],{"class":321},[30,20353,367],{"class":317},[30,20355,19737],{"class":36},[30,20357,5818],{"class":321},[30,20359,20360,20362,20364,20366,20368,20370,20372,20374,20376,20378],{"class":32,"line":9985},[30,20361,6711],{"class":321},[30,20363,1363],{"class":317},[30,20365,1841],{"class":321},[30,20367,325],{"class":317},[30,20369,6700],{"class":317},[30,20371,749],{"class":321},[30,20373,673],{"class":317},[30,20375,11630],{"class":321},[30,20377,1363],{"class":317},[30,20379,9022],{"class":321},[30,20381,20382],{"class":32,"line":9994},[30,20383,1751],{"class":321},[30,20385,20386],{"class":32,"line":9999},[30,20387,2582],{"emptyLinePlaceholder":245},[30,20389,20390],{"class":32,"line":10005},[30,20391,2582],{"emptyLinePlaceholder":245},[30,20393,20394,20396,20398],{"class":32,"line":10026},[30,20395,325],{"class":317},[30,20397,2155],{"class":36},[30,20399,11035],{"class":321},[30,20401,20402],{"class":32,"line":10032},[30,20403,2582],{"emptyLinePlaceholder":245},[30,20405,20406],{"class":32,"line":10046},[30,20407,20408],{"class":379},"    \u002F\u002Ftest01();\n",[30,20410,20411],{"class":32,"line":10052},[30,20412,20413],{"class":379},"    \u002F\u002Ftest02();\n",[30,20415,20416,20418],{"class":32,"line":10079},[30,20417,19873],{"class":36},[30,20419,5818],{"class":321},[30,20421,20422],{"class":32,"line":10088},[30,20423,2582],{"emptyLinePlaceholder":245},[30,20425,20426,20428,20430,20432],{"class":32,"line":10094},[30,20427,2485],{"class":36},[30,20429,322],{"class":321},[30,20431,2490],{"class":74},[30,20433,2901],{"class":321},[30,20435,20436],{"class":32,"line":10102},[30,20437,2582],{"emptyLinePlaceholder":245},[30,20439,20440,20442,20444],{"class":32,"line":10107},[30,20441,4272],{"class":317},[30,20443,4275],{"class":40},[30,20445,1480],{"class":321},[30,20447,20448],{"class":32,"line":16786},[30,20449,1751],{"class":321},[287,20451,20453],{"id":20452},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[157,20455,20456],{},"默认情况下，c++编译器至少给一个类添加3个函数",[157,20458,20459],{},"1．默认构造函数(无参，函数体为空)",[157,20461,20462],{},"2．默认析构函数(无参，函数体为空)",[157,20464,20465],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[157,20467,20468],{},"构造函数调用规则如下：",[147,20470,20471,20474],{},[150,20472,20473],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[150,20475,20476],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[20,20478,20480],{"className":308,"code":20479,"language":310,"meta":25,"style":25},"class Person {\npublic:\n    \u002F\u002F无参（默认）构造函数\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造函数\n    Person(int a) {\n        age = a;\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person& p) {\n        age = p.age;\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int age;\n};\n\nvoid test01()\n{\n    Person p1(18);\n    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n    Person p2(p1);\n\n    cout \u003C\u003C \"p2的年龄为： \" \u003C\u003C p2.age \u003C\u003C endl;\n}\n\nvoid test02()\n{\n    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n    Person p1; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p2(10); \u002F\u002F用户提供的有参\n    Person p3(p2); \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n\n    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n    Person p4; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p5(10); \u002F\u002F此时如果用户自己没有提供有参，会出错\n    Person p6(p5); \u002F\u002F用户自己提供拷贝构造\n}\n\nint main() {\n\n    test01();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,20481,20482,20490,20494,20499,20505,20517,20521,20526,20538,20547,20559,20563,20567,20583,20592,20604,20608,20612,20618,20630,20634,20638,20644,20648,20652,20660,20664,20676,20681,20689,20693,20711,20715,20719,20727,20731,20736,20744,20759,20772,20776,20781,20788,20804,20817,20821,20825,20833,20837,20843,20847,20857,20861,20869],{"__ignoreMap":25},[30,20483,20484,20486,20488],{"class":32,"line":33},[30,20485,14876],{"class":317},[30,20487,15751],{"class":36},[30,20489,15754],{"class":321},[30,20491,20492],{"class":32,"line":44},[30,20493,14898],{"class":317},[30,20495,20496],{"class":32,"line":52},[30,20497,20498],{"class":379},"    \u002F\u002F无参（默认）构造函数\n",[30,20500,20501,20503],{"class":32,"line":60},[30,20502,18701],{"class":36},[30,20504,11035],{"class":321},[30,20506,20507,20509,20511,20513,20515],{"class":32,"line":68},[30,20508,9851],{"class":321},[30,20510,1363],{"class":317},[30,20512,19992],{"class":74},[30,20514,1631],{"class":317},[30,20516,9022],{"class":321},[30,20518,20519],{"class":32,"line":80},[30,20520,2369],{"class":321},[30,20522,20523],{"class":32,"line":88},[30,20524,20525],{"class":379},"    \u002F\u002F有参构造函数\n",[30,20527,20528,20530,20532,20534,20536],{"class":32,"line":96},[30,20529,18701],{"class":36},[30,20531,322],{"class":321},[30,20533,325],{"class":317},[30,20535,1585],{"class":5398},[30,20537,12624],{"class":321},[30,20539,20540,20543,20545],{"class":32,"line":104},[30,20541,20542],{"class":321},"        age ",[30,20544,367],{"class":317},[30,20546,1619],{"class":321},[30,20548,20549,20551,20553,20555,20557],{"class":32,"line":112},[30,20550,9851],{"class":321},[30,20552,1363],{"class":317},[30,20554,20032],{"class":74},[30,20556,1631],{"class":317},[30,20558,9022],{"class":321},[30,20560,20561],{"class":32,"line":123},[30,20562,2369],{"class":321},[30,20564,20565],{"class":32,"line":131},[30,20566,19056],{"class":379},[30,20568,20569,20571,20573,20575,20577,20579,20581],{"class":32,"line":142},[30,20570,18701],{"class":36},[30,20572,322],{"class":321},[30,20574,6974],{"class":317},[30,20576,15751],{"class":36},[30,20578,673],{"class":317},[30,20580,7007],{"class":5398},[30,20582,12624],{"class":321},[30,20584,20585,20587,20589],{"class":32,"line":1811},[30,20586,20542],{"class":321},[30,20588,367],{"class":317},[30,20590,20591],{"class":321}," p.age;\n",[30,20593,20594,20596,20598,20600,20602],{"class":32,"line":1825},[30,20595,9851],{"class":321},[30,20597,1363],{"class":317},[30,20599,20073],{"class":74},[30,20601,1631],{"class":317},[30,20603,9022],{"class":321},[30,20605,20606],{"class":32,"line":1830},[30,20607,2369],{"class":321},[30,20609,20610],{"class":32,"line":1836},[30,20611,18729],{"class":379},[30,20613,20614,20616],{"class":32,"line":1857},[30,20615,18734],{"class":36},[30,20617,11035],{"class":321},[30,20619,20620,20622,20624,20626,20628],{"class":32,"line":1862},[30,20621,9851],{"class":321},[30,20623,1363],{"class":317},[30,20625,20110],{"class":74},[30,20627,1631],{"class":317},[30,20629,9022],{"class":321},[30,20631,20632],{"class":32,"line":1876},[30,20633,2369],{"class":321},[30,20635,20636],{"class":32,"line":1881},[30,20637,14898],{"class":317},[30,20639,20640,20642],{"class":32,"line":1910},[30,20641,2167],{"class":317},[30,20643,7979],{"class":321},[30,20645,20646],{"class":32,"line":1915},[30,20647,4177],{"class":321},[30,20649,20650],{"class":32,"line":1932},[30,20651,2582],{"emptyLinePlaceholder":245},[30,20653,20654,20656,20658],{"class":32,"line":1937},[30,20655,5546],{"class":317},[30,20657,5770],{"class":36},[30,20659,2158],{"class":321},[30,20661,20662],{"class":32,"line":1942},[30,20663,1732],{"class":321},[30,20665,20666,20668,20670,20672,20674],{"class":32,"line":1947},[30,20667,19613],{"class":321},[30,20669,7312],{"class":36},[30,20671,322],{"class":321},[30,20673,970],{"class":40},[30,20675,2901],{"class":321},[30,20677,20678],{"class":32,"line":1961},[30,20679,20680],{"class":379},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[30,20682,20683,20685,20687],{"class":32,"line":1966},[30,20684,19613],{"class":321},[30,20686,7215],{"class":36},[30,20688,17697],{"class":321},[30,20690,20691],{"class":32,"line":2759},[30,20692,2582],{"emptyLinePlaceholder":245},[30,20694,20695,20697,20699,20702,20704,20707,20709],{"class":32,"line":2773},[30,20696,6711],{"class":321},[30,20698,1363],{"class":317},[30,20700,20701],{"class":74}," \"p2的年龄为： \"",[30,20703,1631],{"class":317},[30,20705,20706],{"class":321}," p2.age ",[30,20708,1363],{"class":317},[30,20710,9022],{"class":321},[30,20712,20713],{"class":32,"line":2781},[30,20714,1751],{"class":321},[30,20716,20717],{"class":32,"line":2786},[30,20718,2582],{"emptyLinePlaceholder":245},[30,20720,20721,20723,20725],{"class":32,"line":2792},[30,20722,5546],{"class":317},[30,20724,5839],{"class":36},[30,20726,2158],{"class":321},[30,20728,20729],{"class":32,"line":2798},[30,20730,1732],{"class":321},[30,20732,20733],{"class":32,"line":2803},[30,20734,20735],{"class":379},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[30,20737,20738,20741],{"class":32,"line":8130},[30,20739,20740],{"class":321},"    Person p1;",[30,20742,20743],{"class":379}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[30,20745,20746,20748,20750,20752,20754,20756],{"class":32,"line":8154},[30,20747,19613],{"class":321},[30,20749,7215],{"class":36},[30,20751,322],{"class":321},[30,20753,766],{"class":40},[30,20755,6148],{"class":321},[30,20757,20758],{"class":379}," \u002F\u002F用户提供的有参\n",[30,20760,20761,20763,20766,20769],{"class":32,"line":8159},[30,20762,19613],{"class":321},[30,20764,20765],{"class":36},"p3",[30,20767,20768],{"class":321},"(p2);",[30,20770,20771],{"class":379}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[30,20773,20774],{"class":32,"line":8165},[30,20775,2582],{"emptyLinePlaceholder":245},[30,20777,20778],{"class":32,"line":8192},[30,20779,20780],{"class":379},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[30,20782,20783,20786],{"class":32,"line":8197},[30,20784,20785],{"class":321},"    Person p4;",[30,20787,20743],{"class":379},[30,20789,20790,20792,20795,20797,20799,20801],{"class":32,"line":8203},[30,20791,19613],{"class":321},[30,20793,20794],{"class":36},"p5",[30,20796,322],{"class":321},[30,20798,766],{"class":40},[30,20800,6148],{"class":321},[30,20802,20803],{"class":379}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[30,20805,20806,20808,20811,20814],{"class":32,"line":8215},[30,20807,19613],{"class":321},[30,20809,20810],{"class":36},"p6",[30,20812,20813],{"class":321},"(p5);",[30,20815,20816],{"class":379}," \u002F\u002F用户自己提供拷贝构造\n",[30,20818,20819],{"class":32,"line":8227},[30,20820,1751],{"class":321},[30,20822,20823],{"class":32,"line":8239},[30,20824,2582],{"emptyLinePlaceholder":245},[30,20826,20827,20829,20831],{"class":32,"line":9898},[30,20828,325],{"class":317},[30,20830,2155],{"class":36},[30,20832,11035],{"class":321},[30,20834,20835],{"class":32,"line":9923},[30,20836,2582],{"emptyLinePlaceholder":245},[30,20838,20839,20841],{"class":32,"line":9946},[30,20840,5815],{"class":36},[30,20842,5818],{"class":321},[30,20844,20845],{"class":32,"line":9970},[30,20846,2582],{"emptyLinePlaceholder":245},[30,20848,20849,20851,20853,20855],{"class":32,"line":9975},[30,20850,2485],{"class":36},[30,20852,322],{"class":321},[30,20854,2490],{"class":74},[30,20856,2901],{"class":321},[30,20858,20859],{"class":32,"line":9980},[30,20860,2582],{"emptyLinePlaceholder":245},[30,20862,20863,20865,20867],{"class":32,"line":9985},[30,20864,4272],{"class":317},[30,20866,4275],{"class":40},[30,20868,1480],{"class":321},[30,20870,20871],{"class":32,"line":9994},[30,20872,1751],{"class":321},[287,20874,20876],{"id":20875},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[157,20878,20879],{},"浅拷贝：简单的赋值拷贝操作",[157,20881,20882],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[20,20884,20886],{"className":308,"code":20885,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F默认构造函数\n    Person()\n    {\n        cout\u003C\u003C\"默认构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F有参构造函数\n    ~Person(int age,int height)\n    {\n        m_Age=age;\n        m_Height=new int(height);\u002F\u002F放到堆区\n        cout\u003C\u003C\"有参构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F深拷贝解决上述问题\n    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n    Person(const Person &p)\n    {\n        cout\u003C\u003C\"拷贝构造函数\"\u003C\u003Cendl;\n        \u002F\u002F编译器默认的写如下注释部分\n        \u002F\u002Fm_Age=p.m_Age;\n        \u002F\u002Fm_Height=p.m_Height;\n        m_Age=p.m_Age;\n        \u002F\u002F深拷贝操作\n        m_Height=new int(*p.m_Height);\n    }\n\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n        if(m_Height != NULL)\n        {\n            delete m_Height; \u002F\u002F释放堆区内存\n            m_Height=NULL; \u002F\u002F防止野指针\n        }\n        cout\u003C\u003C\"Person的析构函数调用\"\n    }\n    int m_Age;\n    int *m_Height; \u002F\u002F定义一个指针，指向身高\n};\nvoid test01()\n{\n    Person p1(18,160);\n    cout\u003C\u003C\"p1的年龄为:\"\u003C\u003Cp1.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p1.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    Person p2(p1);\n    cout\u003C\u003C\"p2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p2.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    \n}\nint main()\n{\n    test01();\n}\n",[27,20887,20888,20894,20904,20910,20914,20918,20923,20929,20933,20946,20950,20954,20961,20965,20975,20990,21003,21007,21012,21017,21033,21037,21050,21055,21060,21065,21074,21079,21094,21098,21102,21106,21112,21116,21121,21136,21140,21151,21165,21169,21178,21182,21188,21200,21204,21212,21216,21233,21264,21272,21300,21304,21308,21316,21320,21326],{"__ignoreMap":25},[30,20889,20890,20892],{"class":32,"line":33},[30,20891,2132],{"class":317},[30,20893,2135],{"class":74},[30,20895,20896,20898,20900,20902],{"class":32,"line":44},[30,20897,2140],{"class":317},[30,20899,2143],{"class":317},[30,20901,2146],{"class":36},[30,20903,1480],{"class":321},[30,20905,20906,20908],{"class":32,"line":52},[30,20907,14876],{"class":317},[30,20909,15353],{"class":36},[30,20911,20912],{"class":32,"line":60},[30,20913,1732],{"class":321},[30,20915,20916],{"class":32,"line":68},[30,20917,14898],{"class":317},[30,20919,20920],{"class":32,"line":80},[30,20921,20922],{"class":379},"    \u002F\u002F默认构造函数\n",[30,20924,20925,20927],{"class":32,"line":88},[30,20926,18701],{"class":36},[30,20928,2158],{"class":321},[30,20930,20931],{"class":32,"line":96},[30,20932,2212],{"class":321},[30,20934,20935,20937,20939,20942,20944],{"class":32,"line":104},[30,20936,3633],{"class":321},[30,20938,1363],{"class":317},[30,20940,20941],{"class":74},"\"默认构造函数\"",[30,20943,1363],{"class":317},[30,20945,1385],{"class":321},[30,20947,20948],{"class":32,"line":112},[30,20949,2369],{"class":321},[30,20951,20952],{"class":32,"line":123},[30,20953,20525],{"class":379},[30,20955,20956,20958],{"class":32,"line":131},[30,20957,18734],{"class":36},[30,20959,20960],{"class":321},"(int age,int height)\n",[30,20962,20963],{"class":32,"line":142},[30,20964,2212],{"class":321},[30,20966,20967,20970,20972],{"class":32,"line":1811},[30,20968,20969],{"class":321},"        m_Age",[30,20971,367],{"class":317},[30,20973,20974],{"class":321},"age;\n",[30,20976,20977,20980,20982,20984,20987],{"class":32,"line":1825},[30,20978,20979],{"class":321},"        m_Height",[30,20981,11899],{"class":317},[30,20983,2564],{"class":317},[30,20985,20986],{"class":321},"(height);",[30,20988,20989],{"class":379},"\u002F\u002F放到堆区\n",[30,20991,20992,20994,20996,20999,21001],{"class":32,"line":1830},[30,20993,3633],{"class":321},[30,20995,1363],{"class":317},[30,20997,20998],{"class":74},"\"有参构造函数\"",[30,21000,1363],{"class":317},[30,21002,1385],{"class":321},[30,21004,21005],{"class":32,"line":1836},[30,21006,2369],{"class":321},[30,21008,21009],{"class":32,"line":1857},[30,21010,21011],{"class":379},"    \u002F\u002F深拷贝解决上述问题\n",[30,21013,21014],{"class":32,"line":1862},[30,21015,21016],{"class":379},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[30,21018,21019,21021,21023,21025,21027,21029,21031],{"class":32,"line":1876},[30,21020,18701],{"class":36},[30,21022,322],{"class":321},[30,21024,6974],{"class":317},[30,21026,15751],{"class":36},[30,21028,10766],{"class":317},[30,21030,157],{"class":5398},[30,21032,328],{"class":321},[30,21034,21035],{"class":32,"line":1881},[30,21036,2212],{"class":321},[30,21038,21039,21041,21043,21046,21048],{"class":32,"line":1910},[30,21040,3633],{"class":321},[30,21042,1363],{"class":317},[30,21044,21045],{"class":74},"\"拷贝构造函数\"",[30,21047,1363],{"class":317},[30,21049,1385],{"class":321},[30,21051,21052],{"class":32,"line":1915},[30,21053,21054],{"class":379},"        \u002F\u002F编译器默认的写如下注释部分\n",[30,21056,21057],{"class":32,"line":1932},[30,21058,21059],{"class":379},"        \u002F\u002Fm_Age=p.m_Age;\n",[30,21061,21062],{"class":32,"line":1937},[30,21063,21064],{"class":379},"        \u002F\u002Fm_Height=p.m_Height;\n",[30,21066,21067,21069,21071],{"class":32,"line":1942},[30,21068,20969],{"class":321},[30,21070,367],{"class":317},[30,21072,21073],{"class":321},"p.m_Age;\n",[30,21075,21076],{"class":32,"line":1947},[30,21077,21078],{"class":379},"        \u002F\u002F深拷贝操作\n",[30,21080,21081,21083,21085,21087,21089,21091],{"class":32,"line":1961},[30,21082,20979],{"class":321},[30,21084,11899],{"class":317},[30,21086,2564],{"class":317},[30,21088,322],{"class":321},[30,21090,775],{"class":317},[30,21092,21093],{"class":321},"p.m_Height);\n",[30,21095,21096],{"class":32,"line":1966},[30,21097,2369],{"class":321},[30,21099,21100],{"class":32,"line":2759},[30,21101,2582],{"emptyLinePlaceholder":245},[30,21103,21104],{"class":32,"line":2773},[30,21105,18729],{"class":379},[30,21107,21108,21110],{"class":32,"line":2781},[30,21109,18734],{"class":36},[30,21111,2158],{"class":321},[30,21113,21114],{"class":32,"line":2786},[30,21115,2212],{"class":321},[30,21117,21118],{"class":32,"line":2792},[30,21119,21120],{"class":379},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[30,21122,21123,21125,21128,21131,21134],{"class":32,"line":2798},[30,21124,2679],{"class":317},[30,21126,21127],{"class":321},"(m_Height ",[30,21129,21130],{"class":317},"!=",[30,21132,21133],{"class":40}," NULL",[30,21135,328],{"class":321},[30,21137,21138],{"class":32,"line":2803},[30,21139,2692],{"class":321},[30,21141,21142,21145,21148],{"class":32,"line":8130},[30,21143,21144],{"class":317},"            delete",[30,21146,21147],{"class":321}," m_Height;",[30,21149,21150],{"class":379}," \u002F\u002F释放堆区内存\n",[30,21152,21153,21156,21158,21160,21162],{"class":32,"line":8154},[30,21154,21155],{"class":321},"            m_Height",[30,21157,367],{"class":317},[30,21159,2574],{"class":40},[30,21161,376],{"class":321},[30,21163,21164],{"class":379}," \u002F\u002F防止野指针\n",[30,21166,21167],{"class":32,"line":8159},[30,21168,2711],{"class":321},[30,21170,21171,21173,21175],{"class":32,"line":8165},[30,21172,3633],{"class":321},[30,21174,1363],{"class":317},[30,21176,21177],{"class":74},"\"Person的析构函数调用\"\n",[30,21179,21180],{"class":32,"line":8192},[30,21181,2369],{"class":321},[30,21183,21184,21186],{"class":32,"line":8197},[30,21185,2167],{"class":317},[30,21187,15848],{"class":321},[30,21189,21190,21192,21194,21197],{"class":32,"line":8203},[30,21191,2167],{"class":317},[30,21193,6700],{"class":317},[30,21195,21196],{"class":321},"m_Height;",[30,21198,21199],{"class":379}," \u002F\u002F定义一个指针，指向身高\n",[30,21201,21202],{"class":32,"line":8215},[30,21203,4177],{"class":321},[30,21205,21206,21208,21210],{"class":32,"line":8227},[30,21207,5546],{"class":317},[30,21209,5770],{"class":36},[30,21211,2158],{"class":321},[30,21213,21214],{"class":32,"line":8239},[30,21215,1732],{"class":321},[30,21217,21218,21220,21222,21224,21226,21228,21231],{"class":32,"line":9898},[30,21219,19613],{"class":321},[30,21221,7312],{"class":36},[30,21223,322],{"class":321},[30,21225,970],{"class":40},[30,21227,698],{"class":321},[30,21229,21230],{"class":40},"160",[30,21232,2901],{"class":321},[30,21234,21235,21237,21239,21242,21244,21247,21249,21252,21254,21257,21259,21261],{"class":32,"line":9923},[30,21236,1737],{"class":321},[30,21238,1363],{"class":317},[30,21240,21241],{"class":74},"\"p1的年龄为:\"",[30,21243,1363],{"class":317},[30,21245,21246],{"class":321},"p1.m_Age",[30,21248,1363],{"class":317},[30,21250,21251],{"class":74},"\"身高为：\"",[30,21253,6601],{"class":317},[30,21255,21256],{"class":321},"p1.m_Height",[30,21258,1363],{"class":317},[30,21260,1428],{"class":321},[30,21262,21263],{"class":379},"  \u002F\u002F18\n",[30,21265,21266,21268,21270],{"class":32,"line":9946},[30,21267,19613],{"class":321},[30,21269,7215],{"class":36},[30,21271,17697],{"class":321},[30,21273,21274,21276,21278,21281,21283,21285,21287,21289,21291,21294,21296,21298],{"class":32,"line":9970},[30,21275,1737],{"class":321},[30,21277,1363],{"class":317},[30,21279,21280],{"class":74},"\"p2的年龄为：\"",[30,21282,1363],{"class":317},[30,21284,19643],{"class":321},[30,21286,1363],{"class":317},[30,21288,21251],{"class":74},[30,21290,6601],{"class":317},[30,21292,21293],{"class":321},"p2.m_Height",[30,21295,1363],{"class":317},[30,21297,1428],{"class":321},[30,21299,21263],{"class":379},[30,21301,21302],{"class":32,"line":9975},[30,21303,13392],{"class":321},[30,21305,21306],{"class":32,"line":9980},[30,21307,1751],{"class":321},[30,21309,21310,21312,21314],{"class":32,"line":9985},[30,21311,325],{"class":317},[30,21313,2155],{"class":36},[30,21315,2158],{"class":321},[30,21317,21318],{"class":32,"line":9994},[30,21319,1732],{"class":321},[30,21321,21322,21324],{"class":32,"line":9999},[30,21323,5815],{"class":36},[30,21325,5818],{"class":321},[30,21327,21328],{"class":32,"line":10005},[30,21329,1751],{"class":321},[157,21331,21332],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[157,21334,21335],{},"浅拷贝带来的问题是堆区的内存重复释放",[157,21337,21338],{},[160,21339],{"alt":25,"src":21340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[157,21342,21343],{},"浅拷贝问题要使用深拷贝来解决",[157,21345,21346],{},[160,21347],{"alt":25,"src":21348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[157,21350,21351],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[287,21353,21355],{"id":21354},"_826初始化列表","8.2.6初始化列表",[157,21357,21358],{},"作用：初始化属性",[157,21360,5363],{},[20,21362,21365],{"className":21363,"code":21364,"language":5369},[5367],"构造函数():属性1(值1),属性2(值2).....{}\n",[27,21366,21364],{"__ignoreMap":25},[157,21368,21369],{},"例子",[20,21371,21373],{"className":308,"code":21372,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\n    public:\n\n    \u002F\u002F\u002F\u002F传统方式初始化\n    \u002F\u002FPerson(int a, int b, int c) {\n    \u002F\u002F  m_A = a;\n    \u002F\u002F  m_B = b;\n    \u002F\u002F  m_C = c;\n    \u002F\u002F}\n\n    \u002F\u002F初始化列表方式初始化\n    \u002F\u002F使用有参构造函数\n    Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}\n    void PrintPerson() {\n        cout \u003C\u003C \"mA:\" \u003C\u003C m_A \u003C\u003C endl;\n        cout \u003C\u003C \"mB:\" \u003C\u003C m_B \u003C\u003C endl;\n        cout \u003C\u003C \"mC:\" \u003C\u003C m_C \u003C\u003C endl;\n    }\nprivate:\n    int m_A;\n    int m_B;\n    int m_C;\n};\n\nint main() \n{\n\n    Person p(1, 2, 3);\n    p.PrintPerson();\n\n\n    system(\"pause\");\n\n    return 0;\n}\n",[27,21374,21375,21381,21391,21397,21401,21406,21410,21415,21420,21425,21430,21435,21440,21444,21449,21454,21497,21506,21524,21542,21560,21564,21568,21575,21582,21589,21593,21597,21605,21609,21613,21633,21642,21646,21650,21660,21664,21672],{"__ignoreMap":25},[30,21376,21377,21379],{"class":32,"line":33},[30,21378,2132],{"class":317},[30,21380,2135],{"class":74},[30,21382,21383,21385,21387,21389],{"class":32,"line":44},[30,21384,2140],{"class":317},[30,21386,2143],{"class":317},[30,21388,2146],{"class":36},[30,21390,1480],{"class":321},[30,21392,21393,21395],{"class":32,"line":52},[30,21394,14876],{"class":317},[30,21396,15353],{"class":36},[30,21398,21399],{"class":32,"line":60},[30,21400,1732],{"class":321},[30,21402,21403],{"class":32,"line":68},[30,21404,21405],{"class":317},"    public:\n",[30,21407,21408],{"class":32,"line":80},[30,21409,2582],{"emptyLinePlaceholder":245},[30,21411,21412],{"class":32,"line":88},[30,21413,21414],{"class":379},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[30,21416,21417],{"class":32,"line":96},[30,21418,21419],{"class":379},"    \u002F\u002FPerson(int a, int b, int c) {\n",[30,21421,21422],{"class":32,"line":104},[30,21423,21424],{"class":379},"    \u002F\u002F  m_A = a;\n",[30,21426,21427],{"class":32,"line":112},[30,21428,21429],{"class":379},"    \u002F\u002F  m_B = b;\n",[30,21431,21432],{"class":32,"line":123},[30,21433,21434],{"class":379},"    \u002F\u002F  m_C = c;\n",[30,21436,21437],{"class":32,"line":131},[30,21438,21439],{"class":379},"    \u002F\u002F}\n",[30,21441,21442],{"class":32,"line":142},[30,21443,2582],{"emptyLinePlaceholder":245},[30,21445,21446],{"class":32,"line":1811},[30,21447,21448],{"class":379},"    \u002F\u002F初始化列表方式初始化\n",[30,21450,21451],{"class":32,"line":1825},[30,21452,21453],{"class":379},"    \u002F\u002F使用有参构造函数\n",[30,21455,21456,21458,21460,21462,21464,21466,21468,21470,21472,21474,21476,21479,21482,21485,21488,21491,21494],{"class":32,"line":1830},[30,21457,18701],{"class":36},[30,21459,322],{"class":321},[30,21461,325],{"class":317},[30,21463,1585],{"class":5398},[30,21465,12617],{"class":321},[30,21467,325],{"class":317},[30,21469,3015],{"class":5398},[30,21471,12617],{"class":321},[30,21473,325],{"class":317},[30,21475,3031],{"class":5398},[30,21477,21478],{"class":321},") :",[30,21480,21481],{"class":36},"m_A",[30,21483,21484],{"class":321},"(a), ",[30,21486,21487],{"class":36},"m_B",[30,21489,21490],{"class":321},"(b), ",[30,21492,21493],{"class":36},"m_C",[30,21495,21496],{"class":321},"(c) {}\n",[30,21498,21499,21501,21504],{"class":32,"line":1836},[30,21500,15091],{"class":317},[30,21502,21503],{"class":36}," PrintPerson",[30,21505,11035],{"class":321},[30,21507,21508,21510,21512,21515,21517,21520,21522],{"class":32,"line":1857},[30,21509,9851],{"class":321},[30,21511,1363],{"class":317},[30,21513,21514],{"class":74}," \"mA:\"",[30,21516,1631],{"class":317},[30,21518,21519],{"class":321}," m_A ",[30,21521,1363],{"class":317},[30,21523,9022],{"class":321},[30,21525,21526,21528,21530,21533,21535,21538,21540],{"class":32,"line":1862},[30,21527,9851],{"class":321},[30,21529,1363],{"class":317},[30,21531,21532],{"class":74}," \"mB:\"",[30,21534,1631],{"class":317},[30,21536,21537],{"class":321}," m_B ",[30,21539,1363],{"class":317},[30,21541,9022],{"class":321},[30,21543,21544,21546,21548,21551,21553,21556,21558],{"class":32,"line":1876},[30,21545,9851],{"class":321},[30,21547,1363],{"class":317},[30,21549,21550],{"class":74}," \"mC:\"",[30,21552,1631],{"class":317},[30,21554,21555],{"class":321}," m_C ",[30,21557,1363],{"class":317},[30,21559,9022],{"class":321},[30,21561,21562],{"class":32,"line":1881},[30,21563,2369],{"class":321},[30,21565,21566],{"class":32,"line":1910},[30,21567,15404],{"class":317},[30,21569,21570,21572],{"class":32,"line":1915},[30,21571,2167],{"class":317},[30,21573,21574],{"class":321}," m_A;\n",[30,21576,21577,21579],{"class":32,"line":1932},[30,21578,2167],{"class":317},[30,21580,21581],{"class":321}," m_B;\n",[30,21583,21584,21586],{"class":32,"line":1937},[30,21585,2167],{"class":317},[30,21587,21588],{"class":321}," m_C;\n",[30,21590,21591],{"class":32,"line":1942},[30,21592,4177],{"class":321},[30,21594,21595],{"class":32,"line":1947},[30,21596,2582],{"emptyLinePlaceholder":245},[30,21598,21599,21601,21603],{"class":32,"line":1961},[30,21600,325],{"class":317},[30,21602,2155],{"class":36},[30,21604,6160],{"class":321},[30,21606,21607],{"class":32,"line":1966},[30,21608,1732],{"class":321},[30,21610,21611],{"class":32,"line":2759},[30,21612,2582],{"emptyLinePlaceholder":245},[30,21614,21615,21617,21619,21621,21623,21625,21627,21629,21631],{"class":32,"line":2773},[30,21616,19613],{"class":321},[30,21618,157],{"class":36},[30,21620,322],{"class":321},[30,21622,537],{"class":40},[30,21624,12617],{"class":321},[30,21626,398],{"class":40},[30,21628,12617],{"class":321},[30,21630,392],{"class":40},[30,21632,2901],{"class":321},[30,21634,21635,21637,21640],{"class":32,"line":2781},[30,21636,16048],{"class":321},[30,21638,21639],{"class":36},"PrintPerson",[30,21641,5818],{"class":321},[30,21643,21644],{"class":32,"line":2786},[30,21645,2582],{"emptyLinePlaceholder":245},[30,21647,21648],{"class":32,"line":2792},[30,21649,2582],{"emptyLinePlaceholder":245},[30,21651,21652,21654,21656,21658],{"class":32,"line":2798},[30,21653,2485],{"class":36},[30,21655,322],{"class":321},[30,21657,2490],{"class":74},[30,21659,2901],{"class":321},[30,21661,21662],{"class":32,"line":2803},[30,21663,2582],{"emptyLinePlaceholder":245},[30,21665,21666,21668,21670],{"class":32,"line":8130},[30,21667,4272],{"class":317},[30,21669,4275],{"class":40},[30,21671,1480],{"class":321},[30,21673,21674],{"class":32,"line":8154},[30,21675,1751],{"class":321},[157,21677,21678,21679,21682,21683],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[469,21680,21681],{},"参数名就是定义的对象属性","，",[469,21684,21685],{},"属性后面的值为有参构造函数的形参",[20,21687,21689],{"className":308,"code":21688,"language":310,"meta":25,"style":25},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[27,21690,21691],{"__ignoreMap":25},[30,21692,21693,21695,21697,21699,21702,21704,21707,21709,21712,21714,21717,21719,21722,21724],{"class":32,"line":33},[30,21694,19228],{"class":36},[30,21696,322],{"class":321},[30,21698,325],{"class":317},[30,21700,21701],{"class":321}," a.",[30,21703,325],{"class":317},[30,21705,21706],{"class":321}," b,",[30,21708,325],{"class":317},[30,21710,21711],{"class":321}," b):",[30,21713,21481],{"class":36},[30,21715,21716],{"class":321},"(a),",[30,21718,21487],{"class":36},[30,21720,21721],{"class":321},"(c),",[30,21723,21493],{"class":36},[30,21725,21726],{"class":321},"(b) {}\n",[287,21728,21730],{"id":21729},"_827类对象作为类成员","8.2.7类对象作为类成员",[157,21732,21733],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[157,21735,14815],{},[20,21737,21739],{"className":308,"code":21738,"language":310,"meta":25,"style":25},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[27,21740,21741,21746,21751,21755,21760,21764],{"__ignoreMap":25},[30,21742,21743],{"class":32,"line":33},[30,21744,21745],{"class":321},"A{};\n",[30,21747,21748],{"class":32,"line":44},[30,21749,21750],{"class":321},"B\n",[30,21752,21753],{"class":32,"line":52},[30,21754,1732],{"class":321},[30,21756,21757],{"class":32,"line":60},[30,21758,21759],{"class":321},"    A a;\n",[30,21761,21762],{"class":32,"line":68},[30,21763,1751],{"class":321},[30,21765,21766],{"class":32,"line":80},[30,21767,21768],{"class":379},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[157,21770,21771],{},"案例",[20,21773,21775],{"className":308,"code":21774,"language":310,"meta":25,"style":25},"\u002F\u002Fphone这个对象作为Person这个类的类成员\nclass Phone\n{\npublic：\n    \u002F\u002F 赋值(构造函数)\n    Phone(string pName)\n    {\n        m_pName=pName;\n        cout\u003C\u003C\"Phone的构造函数调用\";\n    }\n    ~Phone()\n    {\n        cout\u003C\u003C\"Phone析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F\n    string m_PName;\n};\nclass Person\n{\npublic:\n    \u002F\u002F赋值\n    Person(string name,string pname):m_name(name),m_phone.m_PName(pname) \n    {\n        cout\u003C\u003C\"Person的构造函数调用\";\n    }\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F姓名\n    string m_name;\n    \u002F\u002F手机\n    Phone m_Phone;\n};\nvoid test01()\n{\n    Person p(\"张三\",\"安卓\");\n    cout\u003C\u003Cp.Name\u003C\u003C\"拿着：\"\u003C\u003Cp.m_phone.m_PName;\n}\nint main()\n{\n    test01();\n}\n",[27,21776,21777,21782,21789,21793,21798,21803,21817,21821,21831,21842,21846,21853,21857,21870,21874,21879,21884,21888,21894,21898,21902,21906,21937,21941,21952,21956,21962,21966,21979,21983,21987,21991,21996,22001,22005,22013,22017,22034,22053,22057,22065,22069,22075],{"__ignoreMap":25},[30,21778,21779],{"class":32,"line":33},[30,21780,21781],{"class":379},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[30,21783,21784,21786],{"class":32,"line":44},[30,21785,14876],{"class":317},[30,21787,21788],{"class":36}," Phone\n",[30,21790,21791],{"class":32,"line":52},[30,21792,1732],{"class":321},[30,21794,21795],{"class":32,"line":60},[30,21796,21797],{"class":321},"public：\n",[30,21799,21800],{"class":32,"line":68},[30,21801,21802],{"class":379},"    \u002F\u002F 赋值(构造函数)\n",[30,21804,21805,21808,21810,21812,21815],{"class":32,"line":80},[30,21806,21807],{"class":36},"    Phone",[30,21809,322],{"class":321},[30,21811,15099],{"class":36},[30,21813,21814],{"class":5398}," pName",[30,21816,328],{"class":321},[30,21818,21819],{"class":32,"line":88},[30,21820,2212],{"class":321},[30,21822,21823,21826,21828],{"class":32,"line":96},[30,21824,21825],{"class":321},"        m_pName",[30,21827,367],{"class":317},[30,21829,21830],{"class":321},"pName;\n",[30,21832,21833,21835,21837,21840],{"class":32,"line":104},[30,21834,3633],{"class":321},[30,21836,1363],{"class":317},[30,21838,21839],{"class":74},"\"Phone的构造函数调用\"",[30,21841,1480],{"class":321},[30,21843,21844],{"class":32,"line":112},[30,21845,2369],{"class":321},[30,21847,21848,21851],{"class":32,"line":123},[30,21849,21850],{"class":36},"    ~Phone",[30,21852,2158],{"class":321},[30,21854,21855],{"class":32,"line":131},[30,21856,2212],{"class":321},[30,21858,21859,21861,21863,21866,21868],{"class":32,"line":142},[30,21860,3633],{"class":321},[30,21862,1363],{"class":317},[30,21864,21865],{"class":74},"\"Phone析构函数调用\"",[30,21867,1363],{"class":317},[30,21869,1385],{"class":321},[30,21871,21872],{"class":32,"line":1811},[30,21873,2369],{"class":321},[30,21875,21876],{"class":32,"line":1825},[30,21877,21878],{"class":379},"    \u002F\u002F\n",[30,21880,21881],{"class":32,"line":1830},[30,21882,21883],{"class":321},"    string m_PName;\n",[30,21885,21886],{"class":32,"line":1836},[30,21887,4177],{"class":321},[30,21889,21890,21892],{"class":32,"line":1857},[30,21891,14876],{"class":317},[30,21893,15353],{"class":36},[30,21895,21896],{"class":32,"line":1862},[30,21897,1732],{"class":321},[30,21899,21900],{"class":32,"line":1876},[30,21901,14898],{"class":317},[30,21903,21904],{"class":32,"line":1881},[30,21905,17176],{"class":379},[30,21907,21908,21910,21912,21914,21916,21918,21920,21923,21926,21928,21931,21934],{"class":32,"line":1910},[30,21909,18701],{"class":36},[30,21911,322],{"class":321},[30,21913,15099],{"class":36},[30,21915,15102],{"class":5398},[30,21917,698],{"class":321},[30,21919,15099],{"class":36},[30,21921,21922],{"class":5398}," pname",[30,21924,21925],{"class":321},"):",[30,21927,15192],{"class":36},[30,21929,21930],{"class":321},"(name),m_phone.",[30,21932,21933],{"class":36},"m_PName",[30,21935,21936],{"class":321},"(pname) \n",[30,21938,21939],{"class":32,"line":1915},[30,21940,2212],{"class":321},[30,21942,21943,21945,21947,21950],{"class":32,"line":1932},[30,21944,3633],{"class":321},[30,21946,1363],{"class":317},[30,21948,21949],{"class":74},"\"Person的构造函数调用\"",[30,21951,1480],{"class":321},[30,21953,21954],{"class":32,"line":1937},[30,21955,2369],{"class":321},[30,21957,21958,21960],{"class":32,"line":1942},[30,21959,18734],{"class":36},[30,21961,2158],{"class":321},[30,21963,21964],{"class":32,"line":1947},[30,21965,2212],{"class":321},[30,21967,21968,21970,21972,21975,21977],{"class":32,"line":1961},[30,21969,3633],{"class":321},[30,21971,1363],{"class":317},[30,21973,21974],{"class":74},"\"Person析构函数调用\"",[30,21976,1363],{"class":317},[30,21978,1385],{"class":321},[30,21980,21981],{"class":32,"line":1966},[30,21982,2369],{"class":321},[30,21984,21985],{"class":32,"line":2759},[30,21986,7962],{"class":379},[30,21988,21989],{"class":32,"line":2773},[30,21990,15074],{"class":321},[30,21992,21993],{"class":32,"line":2781},[30,21994,21995],{"class":379},"    \u002F\u002F手机\n",[30,21997,21998],{"class":32,"line":2786},[30,21999,22000],{"class":321},"    Phone m_Phone;\n",[30,22002,22003],{"class":32,"line":2792},[30,22004,4177],{"class":321},[30,22006,22007,22009,22011],{"class":32,"line":2798},[30,22008,5546],{"class":317},[30,22010,5770],{"class":36},[30,22012,2158],{"class":321},[30,22014,22015],{"class":32,"line":2803},[30,22016,1732],{"class":321},[30,22018,22019,22021,22023,22025,22027,22029,22032],{"class":32,"line":8130},[30,22020,19613],{"class":321},[30,22022,157],{"class":36},[30,22024,322],{"class":321},[30,22026,8098],{"class":74},[30,22028,698],{"class":321},[30,22030,22031],{"class":74},"\"安卓\"",[30,22033,2901],{"class":321},[30,22035,22036,22038,22040,22043,22045,22048,22050],{"class":32,"line":8154},[30,22037,1737],{"class":321},[30,22039,1363],{"class":317},[30,22041,22042],{"class":321},"p.Name",[30,22044,1363],{"class":317},[30,22046,22047],{"class":74},"\"拿着：\"",[30,22049,1363],{"class":317},[30,22051,22052],{"class":321},"p.m_phone.m_PName;\n",[30,22054,22055],{"class":32,"line":8159},[30,22056,1751],{"class":321},[30,22058,22059,22061,22063],{"class":32,"line":8165},[30,22060,325],{"class":317},[30,22062,2155],{"class":36},[30,22064,2158],{"class":321},[30,22066,22067],{"class":32,"line":8192},[30,22068,1732],{"class":321},[30,22070,22071,22073],{"class":32,"line":8197},[30,22072,5815],{"class":36},[30,22074,5818],{"class":321},[30,22076,22077],{"class":32,"line":8203},[30,22078,1751],{"class":321},[157,22080,9207],{},[20,22082,22084],{"className":308,"code":22083,"language":310,"meta":25,"style":25},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[27,22085,22086,22091],{"__ignoreMap":25},[30,22087,22088],{"class":32,"line":33},[30,22089,22090],{"class":379},"    \u002F\u002F不需要写这个：\n",[30,22092,22093],{"class":32,"line":44},[30,22094,22095],{"class":379},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[157,22097,22098],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[20,22100,22102],{"className":308,"code":22101,"language":310,"meta":25,"style":25},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[27,22103,22104],{"__ignoreMap":25},[30,22105,22106,22108,22111,22113,22116,22119],{"class":32,"line":33},[30,22107,19228],{"class":36},[30,22109,22110],{"class":321},"(string name.string pname):",[30,22112,15192],{"class":36},[30,22114,22115],{"class":321},"(name),",[30,22117,22118],{"class":36},"m_phone",[30,22120,22121],{"class":321},"(pname) {}\n",[157,22123,22124,22125,367,22128],{},"采用的是隐式转换法，实际为如下：\n",[27,22126,22127],{},"m_phone(pname)",[27,22129,22130],{},"Phone m_phone=pname",[157,22132,22133,22136],{},[469,22134,22135],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[157,22138,22139],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[287,22141,22143],{"id":22142},"_828静态对象","8.2.8静态对象",[157,22145,22146],{},"静态对象在成员对象前static，称为静态对象",[157,22148,22149],{},"静态对象分为两类：",[271,22151,22152],{},[150,22153,22154],{},"静态成员变量",[147,22156,22157,22160,22163],{},[150,22158,22159],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[150,22161,22162],{},"②在编译阶段分配内存",[150,22164,22165],{},"③类内声明，类外初始化",[271,22167,22168],{"start":44},[150,22169,22170],{},"静态成员函数",[147,22172,22173,22176],{},[150,22174,22175],{},"①所有对象共享同一个函数",[150,22177,22178],{},"②静态成员函数只能访问静态成员变量",[22180,22181,22183],"h4",{"id":22182},"_8281静态成员变量","8.2.8.1静态成员变量",[20,22185,22187],{"className":308,"code":22186,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F非静态成员变量\n    \u002F\u002F int m_A;\n    \u002F\u002F定义静态成员变量\n    static int m_A;\n\n\n};\nvoid test01()\n{\n    Person p;\n    \u002F\u002F输出类成员变量这块内存\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01()\n}\n",[27,22188,22189,22195,22205,22211,22215,22219,22224,22229,22234,22242,22246,22250,22254,22262,22266,22270,22275,22288,22292,22300,22304,22310],{"__ignoreMap":25},[30,22190,22191,22193],{"class":32,"line":33},[30,22192,2132],{"class":317},[30,22194,2135],{"class":74},[30,22196,22197,22199,22201,22203],{"class":32,"line":44},[30,22198,2140],{"class":317},[30,22200,2143],{"class":317},[30,22202,2146],{"class":36},[30,22204,1480],{"class":321},[30,22206,22207,22209],{"class":32,"line":52},[30,22208,14876],{"class":317},[30,22210,15353],{"class":36},[30,22212,22213],{"class":32,"line":60},[30,22214,1732],{"class":321},[30,22216,22217],{"class":32,"line":68},[30,22218,14898],{"class":317},[30,22220,22221],{"class":32,"line":80},[30,22222,22223],{"class":379},"    \u002F\u002F非静态成员变量\n",[30,22225,22226],{"class":32,"line":88},[30,22227,22228],{"class":379},"    \u002F\u002F int m_A;\n",[30,22230,22231],{"class":32,"line":96},[30,22232,22233],{"class":379},"    \u002F\u002F定义静态成员变量\n",[30,22235,22236,22238,22240],{"class":32,"line":104},[30,22237,11202],{"class":317},[30,22239,2564],{"class":317},[30,22241,21574],{"class":321},[30,22243,22244],{"class":32,"line":112},[30,22245,2582],{"emptyLinePlaceholder":245},[30,22247,22248],{"class":32,"line":123},[30,22249,2582],{"emptyLinePlaceholder":245},[30,22251,22252],{"class":32,"line":131},[30,22253,4177],{"class":321},[30,22255,22256,22258,22260],{"class":32,"line":142},[30,22257,5546],{"class":317},[30,22259,5770],{"class":36},[30,22261,2158],{"class":321},[30,22263,22264],{"class":32,"line":1811},[30,22265,1732],{"class":321},[30,22267,22268],{"class":32,"line":1825},[30,22269,15495],{"class":321},[30,22271,22272],{"class":32,"line":1830},[30,22273,22274],{"class":379},"    \u002F\u002F输出类成员变量这块内存\n",[30,22276,22277,22279,22281,22284,22286],{"class":32,"line":1836},[30,22278,1737],{"class":321},[30,22280,1363],{"class":317},[30,22282,22283],{"class":321},"p.m_A",[30,22285,1363],{"class":317},[30,22287,1385],{"class":321},[30,22289,22290],{"class":32,"line":1857},[30,22291,1751],{"class":321},[30,22293,22294,22296,22298],{"class":32,"line":1862},[30,22295,325],{"class":317},[30,22297,2155],{"class":36},[30,22299,2158],{"class":321},[30,22301,22302],{"class":32,"line":1876},[30,22303,1732],{"class":321},[30,22305,22306,22308],{"class":32,"line":1881},[30,22307,5815],{"class":36},[30,22309,2158],{"class":321},[30,22311,22312],{"class":32,"line":1910},[30,22313,1751],{"class":321},[157,22315,22316],{},"此时输出是报错的：无法解析外部命令",[157,22318,22319],{},"解决这一问题：必须用到类内声明，类外初始化操作",[20,22321,22323],{"className":308,"code":22322,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nvoid test01()\n{\n    Person p;\n    \u002F\u002F访问变量的原内存空间\n    \u002F\u002F100\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    Person p2;\n    p2.m_A=200;\n    \u002F\u002F继续访问这片空间\n    \u002F\u002F200\n    cout\u003C\u003Cp2.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01();\n}\n",[27,22324,22325,22331,22341,22347,22351,22355,22360,22368,22372,22377,22392,22400,22404,22408,22413,22418,22430,22435,22446,22451,22456,22469,22473,22481,22485,22491],{"__ignoreMap":25},[30,22326,22327,22329],{"class":32,"line":33},[30,22328,2132],{"class":317},[30,22330,2135],{"class":74},[30,22332,22333,22335,22337,22339],{"class":32,"line":44},[30,22334,2140],{"class":317},[30,22336,2143],{"class":317},[30,22338,2146],{"class":36},[30,22340,1480],{"class":321},[30,22342,22343,22345],{"class":32,"line":52},[30,22344,14876],{"class":317},[30,22346,15353],{"class":36},[30,22348,22349],{"class":32,"line":60},[30,22350,1732],{"class":321},[30,22352,22353],{"class":32,"line":68},[30,22354,14898],{"class":317},[30,22356,22357],{"class":32,"line":80},[30,22358,22359],{"class":379},"    \u002F\u002F类内声明\n",[30,22361,22362,22364,22366],{"class":32,"line":88},[30,22363,11202],{"class":317},[30,22365,2564],{"class":317},[30,22367,21574],{"class":321},[30,22369,22370],{"class":32,"line":96},[30,22371,4177],{"class":321},[30,22373,22374],{"class":32,"line":104},[30,22375,22376],{"class":379},"\u002F\u002F类外初始化\n",[30,22378,22379,22381,22383,22386,22388,22390],{"class":32,"line":112},[30,22380,325],{"class":317},[30,22382,15751],{"class":36},[30,22384,22385],{"class":321},"::m_A",[30,22387,367],{"class":317},[30,22389,766],{"class":40},[30,22391,1480],{"class":321},[30,22393,22394,22396,22398],{"class":32,"line":123},[30,22395,5546],{"class":317},[30,22397,5770],{"class":36},[30,22399,2158],{"class":321},[30,22401,22402],{"class":32,"line":131},[30,22403,1732],{"class":321},[30,22405,22406],{"class":32,"line":142},[30,22407,15495],{"class":321},[30,22409,22410],{"class":32,"line":1811},[30,22411,22412],{"class":379},"    \u002F\u002F访问变量的原内存空间\n",[30,22414,22415],{"class":32,"line":1825},[30,22416,22417],{"class":379},"    \u002F\u002F100\n",[30,22419,22420,22422,22424,22426,22428],{"class":32,"line":1830},[30,22421,1737],{"class":321},[30,22423,1363],{"class":317},[30,22425,22283],{"class":321},[30,22427,1363],{"class":317},[30,22429,1385],{"class":321},[30,22431,22432],{"class":32,"line":1836},[30,22433,22434],{"class":321},"    Person p2;\n",[30,22436,22437,22440,22442,22444],{"class":32,"line":1857},[30,22438,22439],{"class":321},"    p2.m_A",[30,22441,367],{"class":317},[30,22443,1905],{"class":40},[30,22445,1480],{"class":321},[30,22447,22448],{"class":32,"line":1862},[30,22449,22450],{"class":379},"    \u002F\u002F继续访问这片空间\n",[30,22452,22453],{"class":32,"line":1876},[30,22454,22455],{"class":379},"    \u002F\u002F200\n",[30,22457,22458,22460,22462,22465,22467],{"class":32,"line":1881},[30,22459,1737],{"class":321},[30,22461,1363],{"class":317},[30,22463,22464],{"class":321},"p2.m_A",[30,22466,1363],{"class":317},[30,22468,1385],{"class":321},[30,22470,22471],{"class":32,"line":1910},[30,22472,1751],{"class":321},[30,22474,22475,22477,22479],{"class":32,"line":1915},[30,22476,325],{"class":317},[30,22478,2155],{"class":36},[30,22480,2158],{"class":321},[30,22482,22483],{"class":32,"line":1932},[30,22484,1732],{"class":321},[30,22486,22487,22489],{"class":32,"line":1937},[30,22488,5815],{"class":36},[30,22490,5818],{"class":321},[30,22492,22493],{"class":32,"line":1942},[30,22494,1751],{"class":321},[157,22496,22497],{},[469,22498,22499],{},"静态变量的访问",[20,22501,22503],{"className":308,"code":22502,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static int m_B;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nint Person::m_B=20;\nvoid test02()\n{\n    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n    \u002F\u002F静态成员变量有两种访问方式：\n    \u002F\u002F1.通过对象进行访问\n    Person p;  \n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n    \u002F\u002F2.通过类名进行访问\n    cout\u003C\u003CPerson::m_A\u003C\u003Cendl;\n    cout\u003C\u003CPerson::m_B\u003C\u003Cendl; \u002F\u002F没有访问权限，报错\n}\nint main()\n{\n    test02();\n}\n",[27,22504,22505,22511,22521,22527,22531,22535,22539,22547,22551,22556,22564,22568,22572,22586,22601,22609,22613,22618,22623,22628,22633,22645,22650,22655,22669,22686,22690,22698,22702,22708],{"__ignoreMap":25},[30,22506,22507,22509],{"class":32,"line":33},[30,22508,2132],{"class":317},[30,22510,2135],{"class":74},[30,22512,22513,22515,22517,22519],{"class":32,"line":44},[30,22514,2140],{"class":317},[30,22516,2143],{"class":317},[30,22518,2146],{"class":36},[30,22520,1480],{"class":321},[30,22522,22523,22525],{"class":32,"line":52},[30,22524,14876],{"class":317},[30,22526,15353],{"class":36},[30,22528,22529],{"class":32,"line":60},[30,22530,1732],{"class":321},[30,22532,22533],{"class":32,"line":68},[30,22534,14898],{"class":317},[30,22536,22537],{"class":32,"line":80},[30,22538,22359],{"class":379},[30,22540,22541,22543,22545],{"class":32,"line":88},[30,22542,11202],{"class":317},[30,22544,2564],{"class":317},[30,22546,21574],{"class":321},[30,22548,22549],{"class":32,"line":96},[30,22550,15404],{"class":317},[30,22552,22553],{"class":32,"line":104},[30,22554,22555],{"class":379},"    \u002F\u002F静态成员变量也是有访问权限的\n",[30,22557,22558,22560,22562],{"class":32,"line":112},[30,22559,11202],{"class":317},[30,22561,2564],{"class":317},[30,22563,21581],{"class":321},[30,22565,22566],{"class":32,"line":123},[30,22567,4177],{"class":321},[30,22569,22570],{"class":32,"line":131},[30,22571,22376],{"class":379},[30,22573,22574,22576,22578,22580,22582,22584],{"class":32,"line":142},[30,22575,325],{"class":317},[30,22577,15751],{"class":36},[30,22579,22385],{"class":321},[30,22581,367],{"class":317},[30,22583,766],{"class":40},[30,22585,1480],{"class":321},[30,22587,22588,22590,22592,22595,22597,22599],{"class":32,"line":1811},[30,22589,325],{"class":317},[30,22591,15751],{"class":36},[30,22593,22594],{"class":321},"::m_B",[30,22596,367],{"class":317},[30,22598,1020],{"class":40},[30,22600,1480],{"class":321},[30,22602,22603,22605,22607],{"class":32,"line":1825},[30,22604,5546],{"class":317},[30,22606,5839],{"class":36},[30,22608,2158],{"class":321},[30,22610,22611],{"class":32,"line":1830},[30,22612,1732],{"class":321},[30,22614,22615],{"class":32,"line":1836},[30,22616,22617],{"class":379},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[30,22619,22620],{"class":32,"line":1857},[30,22621,22622],{"class":379},"    \u002F\u002F静态成员变量有两种访问方式：\n",[30,22624,22625],{"class":32,"line":1862},[30,22626,22627],{"class":379},"    \u002F\u002F1.通过对象进行访问\n",[30,22629,22630],{"class":32,"line":1876},[30,22631,22632],{"class":321},"    Person p;  \n",[30,22634,22635,22637,22639,22641,22643],{"class":32,"line":1881},[30,22636,1737],{"class":321},[30,22638,1363],{"class":317},[30,22640,22283],{"class":321},[30,22642,1363],{"class":317},[30,22644,1385],{"class":321},[30,22646,22647],{"class":32,"line":1910},[30,22648,22649],{"class":379},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[30,22651,22652],{"class":32,"line":1915},[30,22653,22654],{"class":379},"    \u002F\u002F2.通过类名进行访问\n",[30,22656,22657,22659,22661,22663,22665,22667],{"class":32,"line":1932},[30,22658,1737],{"class":321},[30,22660,1363],{"class":317},[30,22662,19228],{"class":36},[30,22664,22385],{"class":321},[30,22666,1363],{"class":317},[30,22668,1385],{"class":321},[30,22670,22671,22673,22675,22677,22679,22681,22683],{"class":32,"line":1937},[30,22672,1737],{"class":321},[30,22674,1363],{"class":317},[30,22676,19228],{"class":36},[30,22678,22594],{"class":321},[30,22680,1363],{"class":317},[30,22682,1428],{"class":321},[30,22684,22685],{"class":379}," \u002F\u002F没有访问权限，报错\n",[30,22687,22688],{"class":32,"line":1942},[30,22689,1751],{"class":321},[30,22691,22692,22694,22696],{"class":32,"line":1947},[30,22693,325],{"class":317},[30,22695,2155],{"class":36},[30,22697,2158],{"class":321},[30,22699,22700],{"class":32,"line":1961},[30,22701,1732],{"class":321},[30,22703,22704,22706],{"class":32,"line":1966},[30,22705,5884],{"class":36},[30,22707,5818],{"class":321},[30,22709,22710],{"class":32,"line":2759},[30,22711,1751],{"class":321},[22180,22713,22715],{"id":22714},"_8282静态成员函数","8.2.8.2静态成员函数",[157,22717,22718],{},"1.静态成员函数定义与访问",[20,22720,22722],{"className":308,"code":22721,"language":310,"meta":25,"style":25},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n};\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n}\n",[27,22723,22724,22730,22734,22738,22743,22754,22758,22772,22776,22780,22788,22792,22797,22802,22806,22814,22819,22829],{"__ignoreMap":25},[30,22725,22726,22728],{"class":32,"line":33},[30,22727,14876],{"class":317},[30,22729,15353],{"class":36},[30,22731,22732],{"class":32,"line":44},[30,22733,1732],{"class":321},[30,22735,22736],{"class":32,"line":52},[30,22737,14898],{"class":317},[30,22739,22740],{"class":32,"line":60},[30,22741,22742],{"class":379},"    \u002F\u002F在公共权限下定义静态成员函数\n",[30,22744,22745,22747,22750,22752],{"class":32,"line":68},[30,22746,11202],{"class":317},[30,22748,22749],{"class":317}," void",[30,22751,11567],{"class":36},[30,22753,2158],{"class":321},[30,22755,22756],{"class":32,"line":80},[30,22757,2212],{"class":321},[30,22759,22760,22763,22765,22768,22770],{"class":32,"line":88},[30,22761,22762],{"class":321},"        coout",[30,22764,1363],{"class":317},[30,22766,22767],{"class":74},"\"静态成员函数的调用\"",[30,22769,1363],{"class":317},[30,22771,1385],{"class":321},[30,22773,22774],{"class":32,"line":96},[30,22775,2369],{"class":321},[30,22777,22778],{"class":32,"line":104},[30,22779,4177],{"class":321},[30,22781,22782,22784,22786],{"class":32,"line":112},[30,22783,5546],{"class":317},[30,22785,5770],{"class":36},[30,22787,2158],{"class":321},[30,22789,22790],{"class":32,"line":123},[30,22791,1732],{"class":321},[30,22793,22794],{"class":32,"line":131},[30,22795,22796],{"class":379},"    \u002F\u002F静态成员函数的调用方式:\n",[30,22798,22799],{"class":32,"line":142},[30,22800,22801],{"class":379},"    \u002F\u002F1.通过对象访问\n",[30,22803,22804],{"class":32,"line":1811},[30,22805,15495],{"class":321},[30,22807,22808,22810,22812],{"class":32,"line":1825},[30,22809,16048],{"class":321},[30,22811,11733],{"class":36},[30,22813,5818],{"class":321},[30,22815,22816],{"class":32,"line":1830},[30,22817,22818],{"class":379},"    \u002F\u002F2.通过类名访问\n",[30,22820,22821,22823,22825,22827],{"class":32,"line":1836},[30,22822,18701],{"class":36},[30,22824,17914],{"class":321},[30,22826,11733],{"class":36},[30,22828,5818],{"class":321},[30,22830,22831],{"class":32,"line":1857},[30,22832,1751],{"class":321},[271,22834,22835],{"start":44},[150,22836,22837],{},"静态成员函数只能访问静态成员变量",[20,22839,22841],{"className":308,"code":22840,"language":310,"meta":25,"style":25},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        m_A=100; \u002F\u002F静态成员函数可以访问 静态成员变量\n        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n    static int m_A; \u002F\u002F静态成员变量\n    int m_B; \u002F\u002F非静态成员变量\n\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static void func2()\n    {\n        cout\u003C\u003C\"这是私有权限下的静态函数调用\"\u003C\u003Cendl;\n    }\n\n\n};\nint Person::m_A=0;\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n}\nint main()\n{\n    test01();\n}\n",[27,22842,22843,22849,22853,22857,22861,22871,22875,22889,22894,22906,22910,22921,22931,22935,22939,22943,22953,22957,22970,22974,22978,22982,22986,23000,23008,23012,23016,23020,23024,23032,23036,23046,23051,23055,23063,23067,23073],{"__ignoreMap":25},[30,22844,22845,22847],{"class":32,"line":33},[30,22846,14876],{"class":317},[30,22848,15353],{"class":36},[30,22850,22851],{"class":32,"line":44},[30,22852,1732],{"class":321},[30,22854,22855],{"class":32,"line":52},[30,22856,14898],{"class":317},[30,22858,22859],{"class":32,"line":60},[30,22860,22742],{"class":379},[30,22862,22863,22865,22867,22869],{"class":32,"line":68},[30,22864,11202],{"class":317},[30,22866,22749],{"class":317},[30,22868,11567],{"class":36},[30,22870,2158],{"class":321},[30,22872,22873],{"class":32,"line":80},[30,22874,2212],{"class":321},[30,22876,22877,22880,22882,22884,22886],{"class":32,"line":88},[30,22878,22879],{"class":321},"        m_A",[30,22881,367],{"class":317},[30,22883,631],{"class":40},[30,22885,376],{"class":321},[30,22887,22888],{"class":379}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[30,22890,22891],{"class":32,"line":96},[30,22892,22893],{"class":379},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[30,22895,22896,22898,22900,22902,22904],{"class":32,"line":104},[30,22897,22762],{"class":321},[30,22899,1363],{"class":317},[30,22901,22767],{"class":74},[30,22903,1363],{"class":317},[30,22905,1385],{"class":321},[30,22907,22908],{"class":32,"line":112},[30,22909,2369],{"class":321},[30,22911,22912,22914,22916,22918],{"class":32,"line":123},[30,22913,11202],{"class":317},[30,22915,2564],{"class":317},[30,22917,15630],{"class":321},[30,22919,22920],{"class":379}," \u002F\u002F静态成员变量\n",[30,22922,22923,22925,22928],{"class":32,"line":131},[30,22924,2167],{"class":317},[30,22926,22927],{"class":321}," m_B;",[30,22929,22930],{"class":379}," \u002F\u002F非静态成员变量\n",[30,22932,22933],{"class":32,"line":142},[30,22934,2582],{"emptyLinePlaceholder":245},[30,22936,22937],{"class":32,"line":1811},[30,22938,15404],{"class":317},[30,22940,22941],{"class":32,"line":1825},[30,22942,22555],{"class":379},[30,22944,22945,22947,22949,22951],{"class":32,"line":1830},[30,22946,11202],{"class":317},[30,22948,22749],{"class":317},[30,22950,13800],{"class":36},[30,22952,2158],{"class":321},[30,22954,22955],{"class":32,"line":1836},[30,22956,2212],{"class":321},[30,22958,22959,22961,22963,22966,22968],{"class":32,"line":1857},[30,22960,3633],{"class":321},[30,22962,1363],{"class":317},[30,22964,22965],{"class":74},"\"这是私有权限下的静态函数调用\"",[30,22967,1363],{"class":317},[30,22969,1385],{"class":321},[30,22971,22972],{"class":32,"line":1862},[30,22973,2369],{"class":321},[30,22975,22976],{"class":32,"line":1876},[30,22977,2582],{"emptyLinePlaceholder":245},[30,22979,22980],{"class":32,"line":1881},[30,22981,2582],{"emptyLinePlaceholder":245},[30,22983,22984],{"class":32,"line":1910},[30,22985,4177],{"class":321},[30,22987,22988,22990,22992,22994,22996,22998],{"class":32,"line":1915},[30,22989,325],{"class":317},[30,22991,15751],{"class":36},[30,22993,22385],{"class":321},[30,22995,367],{"class":317},[30,22997,511],{"class":40},[30,22999,1480],{"class":321},[30,23001,23002,23004,23006],{"class":32,"line":1932},[30,23003,5546],{"class":317},[30,23005,5770],{"class":36},[30,23007,2158],{"class":321},[30,23009,23010],{"class":32,"line":1937},[30,23011,1732],{"class":321},[30,23013,23014],{"class":32,"line":1942},[30,23015,22796],{"class":379},[30,23017,23018],{"class":32,"line":1947},[30,23019,22801],{"class":379},[30,23021,23022],{"class":32,"line":1961},[30,23023,15495],{"class":321},[30,23025,23026,23028,23030],{"class":32,"line":1966},[30,23027,16048],{"class":321},[30,23029,11733],{"class":36},[30,23031,5818],{"class":321},[30,23033,23034],{"class":32,"line":2759},[30,23035,22818],{"class":379},[30,23037,23038,23040,23042,23044],{"class":32,"line":2773},[30,23039,18701],{"class":36},[30,23041,17914],{"class":321},[30,23043,11733],{"class":36},[30,23045,5818],{"class":321},[30,23047,23048],{"class":32,"line":2781},[30,23049,23050],{"class":379},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[30,23052,23053],{"class":32,"line":2786},[30,23054,1751],{"class":321},[30,23056,23057,23059,23061],{"class":32,"line":2792},[30,23058,325],{"class":317},[30,23060,2155],{"class":36},[30,23062,2158],{"class":321},[30,23064,23065],{"class":32,"line":2798},[30,23066,1732],{"class":321},[30,23068,23069,23071],{"class":32,"line":2803},[30,23070,5815],{"class":36},[30,23072,5818],{"class":321},[30,23074,23075],{"class":32,"line":8130},[30,23076,1751],{"class":321},[287,23078,23080],{"id":23079},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22180,23082,23084],{"id":23083},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[157,23086,23087],{},"在c++中，类内的成员变量和成员函数分开存储",[157,23089,23090],{},"只有非静态成员变量才属于类的对象上",[23092,23093,23095],"h5",{"id":23094},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[20,23097,23099],{"className":308,"code":23098,"language":310,"meta":25,"style":25},"#include\u003Ciostraem>\nusing namespace std;\nclass Person\n{\n\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeoif(p)\u003C\u003Cendl; \u002F\u002F查看这个空类的占用的内存空间\n}\nint main()\n{\n    test01();\n}\n",[27,23100,23101,23108,23118,23124,23128,23132,23136,23144,23148,23152,23175,23179,23187,23191,23197],{"__ignoreMap":25},[30,23102,23103,23105],{"class":32,"line":33},[30,23104,2132],{"class":317},[30,23106,23107],{"class":74},"\u003Ciostraem>\n",[30,23109,23110,23112,23114,23116],{"class":32,"line":44},[30,23111,2140],{"class":317},[30,23113,2143],{"class":317},[30,23115,2146],{"class":36},[30,23117,1480],{"class":321},[30,23119,23120,23122],{"class":32,"line":52},[30,23121,14876],{"class":317},[30,23123,15353],{"class":36},[30,23125,23126],{"class":32,"line":60},[30,23127,1732],{"class":321},[30,23129,23130],{"class":32,"line":68},[30,23131,2582],{"emptyLinePlaceholder":245},[30,23133,23134],{"class":32,"line":80},[30,23135,4177],{"class":321},[30,23137,23138,23140,23142],{"class":32,"line":88},[30,23139,5546],{"class":317},[30,23141,5770],{"class":36},[30,23143,2158],{"class":321},[30,23145,23146],{"class":32,"line":96},[30,23147,1732],{"class":321},[30,23149,23150],{"class":32,"line":104},[30,23151,15495],{"class":321},[30,23153,23154,23156,23158,23161,23163,23166,23168,23170,23172],{"class":32,"line":112},[30,23155,1737],{"class":321},[30,23157,1363],{"class":317},[30,23159,23160],{"class":74},"\"size of p=\"",[30,23162,1363],{"class":317},[30,23164,23165],{"class":36},"sizeoif",[30,23167,6721],{"class":321},[30,23169,1363],{"class":317},[30,23171,1428],{"class":321},[30,23173,23174],{"class":379}," \u002F\u002F查看这个空类的占用的内存空间\n",[30,23176,23177],{"class":32,"line":123},[30,23178,1751],{"class":321},[30,23180,23181,23183,23185],{"class":32,"line":131},[30,23182,325],{"class":317},[30,23184,2155],{"class":36},[30,23186,2158],{"class":321},[30,23188,23189],{"class":32,"line":142},[30,23190,1732],{"class":321},[30,23192,23193,23195],{"class":32,"line":1811},[30,23194,5815],{"class":36},[30,23196,5818],{"class":321},[30,23198,23199],{"class":32,"line":1825},[30,23200,1751],{"class":321},[157,23202,23203],{},"输出结果为：size of p=1",[157,23205,23206],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[157,23208,23209],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23092,23211,23213],{"id":23212},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[20,23215,23217],{"className":308,"code":23216,"language":310,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\nclass Person \n{\n    int m_A;\u002F\u002F非静态成员变量\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeof(p)\u003C\u003Cendl; \u002F\u002F查看不是空对象时占用多少内存\n\n}\nint main()\n{\n    test01();\n}\n",[27,23218,23219,23225,23235,23243,23247,23256,23260,23268,23272,23276,23295,23299,23303,23311,23315,23321],{"__ignoreMap":25},[30,23220,23221,23223],{"class":32,"line":33},[30,23222,2132],{"class":317},[30,23224,2135],{"class":74},[30,23226,23227,23229,23231,23233],{"class":32,"line":44},[30,23228,2140],{"class":317},[30,23230,2143],{"class":317},[30,23232,2146],{"class":36},[30,23234,1480],{"class":321},[30,23236,23237,23239,23241],{"class":32,"line":52},[30,23238,14876],{"class":317},[30,23240,15751],{"class":36},[30,23242,2856],{"class":321},[30,23244,23245],{"class":32,"line":60},[30,23246,1732],{"class":321},[30,23248,23249,23251,23253],{"class":32,"line":68},[30,23250,2167],{"class":317},[30,23252,15630],{"class":321},[30,23254,23255],{"class":379},"\u002F\u002F非静态成员变量\n",[30,23257,23258],{"class":32,"line":80},[30,23259,4177],{"class":321},[30,23261,23262,23264,23266],{"class":32,"line":88},[30,23263,5546],{"class":317},[30,23265,5770],{"class":36},[30,23267,2158],{"class":321},[30,23269,23270],{"class":32,"line":96},[30,23271,1732],{"class":321},[30,23273,23274],{"class":32,"line":104},[30,23275,15495],{"class":321},[30,23277,23278,23280,23282,23284,23286,23288,23290,23292],{"class":32,"line":112},[30,23279,1737],{"class":321},[30,23281,1363],{"class":317},[30,23283,23160],{"class":74},[30,23285,1559],{"class":317},[30,23287,6721],{"class":321},[30,23289,1363],{"class":317},[30,23291,1428],{"class":321},[30,23293,23294],{"class":379}," \u002F\u002F查看不是空对象时占用多少内存\n",[30,23296,23297],{"class":32,"line":123},[30,23298,2582],{"emptyLinePlaceholder":245},[30,23300,23301],{"class":32,"line":131},[30,23302,1751],{"class":321},[30,23304,23305,23307,23309],{"class":32,"line":142},[30,23306,325],{"class":317},[30,23308,2155],{"class":36},[30,23310,2158],{"class":321},[30,23312,23313],{"class":32,"line":1811},[30,23314,1732],{"class":321},[30,23316,23317,23319],{"class":32,"line":1825},[30,23318,5815],{"class":36},[30,23320,5818],{"class":321},[30,23322,23323],{"class":32,"line":1830},[30,23324,1751],{"class":321},[157,23326,23327],{},"输出结果：size of p=4",[157,23329,23330],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[271,23332,23333],{},[150,23334,23335],{},"如果加上非静态成员变量，Person类修改如下",[20,23337,23339],{"className":308,"code":23338,"language":310,"meta":25,"style":25},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[27,23340,23341,23347,23351,23357,23365,23369,23374],{"__ignoreMap":25},[30,23342,23343,23345],{"class":32,"line":33},[30,23344,14876],{"class":317},[30,23346,15353],{"class":36},[30,23348,23349],{"class":32,"line":44},[30,23350,1732],{"class":321},[30,23352,23353,23355],{"class":32,"line":52},[30,23354,2167],{"class":317},[30,23356,21574],{"class":321},[30,23358,23359,23361,23363],{"class":32,"line":60},[30,23360,11202],{"class":317},[30,23362,2564],{"class":317},[30,23364,21581],{"class":321},[30,23366,23367],{"class":32,"line":68},[30,23368,4177],{"class":321},[30,23370,23371],{"class":32,"line":80},[30,23372,23373],{"class":379},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[30,23375,23376,23378,23380,23382,23384,23386],{"class":32,"line":88},[30,23377,325],{"class":317},[30,23379,15751],{"class":36},[30,23381,22594],{"class":321},[30,23383,367],{"class":317},[30,23385,511],{"class":40},[30,23387,1480],{"class":321},[157,23389,23390],{},"输出结果：4",[157,23392,23393],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[271,23395,23396],{"start":44},[150,23397,23398],{},"加上非静态成员函数",[20,23400,23402],{"className":308,"code":23401,"language":310,"meta":25,"style":25},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[27,23403,23404,23411,23415,23421,23429,23433,23437,23441],{"__ignoreMap":25},[30,23405,23406,23408],{"class":32,"line":33},[30,23407,14876],{"class":317},[30,23409,23410],{"class":36},"  Person\n",[30,23412,23413],{"class":32,"line":44},[30,23414,1732],{"class":321},[30,23416,23417,23419],{"class":32,"line":52},[30,23418,2167],{"class":317},[30,23420,21574],{"class":321},[30,23422,23423,23425,23427],{"class":32,"line":60},[30,23424,15091],{"class":317},[30,23426,11567],{"class":36},[30,23428,2158],{"class":321},[30,23430,23431],{"class":32,"line":68},[30,23432,2212],{"class":321},[30,23434,23435],{"class":32,"line":80},[30,23436,2582],{"emptyLinePlaceholder":245},[30,23438,23439],{"class":32,"line":88},[30,23440,2369],{"class":321},[30,23442,23443],{"class":32,"line":96},[30,23444,4177],{"class":321},[157,23446,23447],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[271,23449,23450],{"start":52},[150,23451,23452],{},"加上静态成员函数",[20,23454,23456],{"className":308,"code":23455,"language":310,"meta":25,"style":25},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[27,23457,23458,23464,23468,23474,23482,23486,23490,23494,23505,23509,23513,23517],{"__ignoreMap":25},[30,23459,23460,23462],{"class":32,"line":33},[30,23461,14876],{"class":317},[30,23463,23410],{"class":36},[30,23465,23466],{"class":32,"line":44},[30,23467,1732],{"class":321},[30,23469,23470,23472],{"class":32,"line":52},[30,23471,2167],{"class":317},[30,23473,21574],{"class":321},[30,23475,23476,23478,23480],{"class":32,"line":60},[30,23477,15091],{"class":317},[30,23479,11567],{"class":36},[30,23481,2158],{"class":321},[30,23483,23484],{"class":32,"line":68},[30,23485,2212],{"class":321},[30,23487,23488],{"class":32,"line":80},[30,23489,2582],{"emptyLinePlaceholder":245},[30,23491,23492],{"class":32,"line":88},[30,23493,2369],{"class":321},[30,23495,23496,23498,23500,23503],{"class":32,"line":96},[30,23497,11202],{"class":317},[30,23499,22749],{"class":317},[30,23501,23502],{"class":36}," func1",[30,23504,2158],{"class":321},[30,23506,23507],{"class":32,"line":104},[30,23508,2212],{"class":321},[30,23510,23511],{"class":32,"line":112},[30,23512,2582],{"emptyLinePlaceholder":245},[30,23514,23515],{"class":32,"line":123},[30,23516,2369],{"class":321},[30,23518,23519],{"class":32,"line":131},[30,23520,4177],{"class":321},[157,23522,23390],{},[157,23524,23525],{},"解释：静态成员函数也不属于类上",[234,23527,7856],{},{"title":25,"searchDepth":44,"depth":44,"links":23529},[23530,23536],{"id":14827,"depth":44,"text":14828,"children":23531},[23532,23533,23534,23535],{"id":14831,"depth":52,"text":14832},{"id":15556,"depth":52,"text":15557},{"id":15728,"depth":52,"text":15729},{"id":16187,"depth":52,"text":16188},{"id":18559,"depth":44,"text":18560,"children":23537},[23538,23539,23540,23541,23542,23543,23544,23545,23546],{"id":18571,"depth":52,"text":18572},{"id":18864,"depth":52,"text":18865},{"id":19355,"depth":52,"text":19356},{"id":20452,"depth":52,"text":20453},{"id":20875,"depth":52,"text":20876},{"id":21354,"depth":52,"text":21355},{"id":21729,"depth":52,"text":21730},{"id":22142,"depth":52,"text":22143},{"id":23079,"depth":52,"text":23080},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14792,"description":23547},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23554,"title":310,"body":23555,"description":242,"extension":243,"meta":23559,"navigation":245,"path":23561,"seo":23562,"stem":23563,"__hash__":23564},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23556,"toc":23557},[],{"title":25,"searchDepth":44,"depth":44,"links":23558},[],{"category":23560},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":310,"description":242},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23566,"title":23567,"body":23568,"description":25,"extension":243,"meta":24157,"navigation":245,"path":24158,"seo":24159,"stem":24160,"__hash__":24161},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23569,"toc":24139},[23570,23573,23577,23580,23583,23586,23604,23609,23612,23615,23618,23621,23626,23629,23634,23637,23640,23644,23647,23650,23656,23659,23677,23681,23685,23688,23693,23696,23700,23703,23716,23719,23723,23726,23729,23732,23757,23760,23769,23780,23795,23827,23831,23838,23846,23850,23853,23856,23861,23865,23868,23871,23876,23879,23883,23886,23889,23894,23897,23901,23906,23910,23977,23981,23984,23987,23990,23993,23996,24002,24021,24024,24038,24047,24051,24054,24057,24062,24065,24070,24075,24078,24081,24086,24091,24094,24099,24104,24107,24112,24117,24120,24123,24128,24131,24136],[10,23571,23567],{"id":23572},"_1强化学习基本认识",[15,23574,23576],{"id":23575},"_11什么是强化学习","1.1.什么是强化学习",[157,23578,23579],{},"强化学习有两部分组成：智能体和环境；",[157,23581,23582],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[157,23584,23585],{},"强化学习与监督学习的区别:",[271,23587,23588,23591,23594,23597],{},[150,23589,23590],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[150,23592,23593],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[150,23595,23596],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[150,23598,23599,23600,23603],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[469,23601,23602],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[157,23605,23606],{},[160,23607],{"alt":25,"src":23608},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[157,23610,23611],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[157,23613,23614],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[157,23616,23617],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[157,23619,23620],{},"获取奖励",[157,23622,23623],{},[160,23624],{"alt":25,"src":23625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[157,23627,23628],{},"强化学习可以分成标准强化学习和深度强化学习",[157,23630,23631],{},[160,23632],{"alt":25,"src":23633},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[157,23635,23636],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[157,23638,23639],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[15,23641,23643],{"id":23642},"_12强化学习应用场景","1.2.强化学习应用场景",[157,23645,23646],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[157,23648,23649],{},"具身智能中的应用",[157,23651,23652,23655],{},[469,23653,23654],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[157,23657,23658],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[157,23660,23661,23662,23665,23666,23669,23670,23673,23674],{},"机器人是",[469,23663,23664],{},"躯体","，深度学习是",[469,23667,23668],{},"神经元****网络","，VLA是",[469,23671,23672],{},"通用的行为逻辑","，而强化学习是",[469,23675,23676],{},"教练",[15,23678,23680],{"id":23679},"_13序列决策","1.3.序列决策",[287,23682,23684],{"id":23683},"_131智能体与环境","1.3.1.智能体与环境",[157,23686,23687],{},"强化学习研究的问题是智能体agent与环境交互的问题",[157,23689,23690],{},[160,23691],{"alt":25,"src":23692},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[157,23694,23695],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[287,23697,23699],{"id":23698},"_132奖励","1.3.2.奖励",[157,23701,23702],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[157,23704,23705,23706,23715],{},"取某个策略的表现如何。强化学习的目的就是",[469,23707,23708,23709,23714],{},"最大化",[469,23710,23711],{},[469,23712,23713],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[157,23717,23718],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[287,23720,23722],{"id":23721},"_133序列决策","1.3.3.序列决策",[157,23724,23725],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[157,23727,23728],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[157,23730,23731],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[157,23733,23734,23738,23739,23741,23742,23744,23745,23747,23748,13977,23751,13977,23754],{},[23735,23736,23737],"em",{},"Ht"," = ",[23735,23740,916],{},"1*, a",[23735,23743,537],{},", r",[23735,23746,537],{},", . . . ,* ",[23735,23749,23750],{},"ot",[23735,23752,23753],{},", at ,",[23735,23755,23756],{},"rt",[157,23758,23759],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[157,23761,23762,23738,23765,1841,23767,749],{},[23735,23763,23764],{},"st",[23735,23766,373],{},[23735,23768,23737],{},[157,23770,23771,23772,23775,23776,23779],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[469,23773,23774],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[469,23777,23778],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[157,23781,23782,23783,23786,23787,23790,23791,23794],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[469,23784,23785],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[469,23788,23789],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23735,23792,23793],{},"S, A, T, R, Ω, O, γ",")。",[157,23796,23797,23798,23800,23801,23803,23804,322,23806,23809,23810,23812,23813,322,23816,23819,23820,23822,23823,23826],{},"其中 ",[23735,23799,1009],{}," 表示状态空间，为隐变量，",[23735,23802,552],{}," 为动作空间，",[23735,23805,1034],{},[23735,23807,23808],{},"s ′ |s, a",") 为状态转移概率，",[23735,23811,984],{}," 为奖励函数，",[23735,23814,23815],{},"Ω",[23735,23817,23818],{},"o|s, a",") 为观测概率，",[23735,23821,910],{}," 为观测空间，",[23735,23824,23825],{},"γ"," 为折扣因子。",[15,23828,23830],{"id":23829},"_14动作空间","1.4.动作空间",[157,23832,23833,23834,23837],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[469,23835,23836],{},"动作空间"," ，动作空间分为:",[271,23839,23840,23843],{},[150,23841,23842],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[150,23844,23845],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[15,23847,23849],{"id":23848},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[157,23851,23852],{},"由策略、价值函数、模型三部分组成",[157,23854,23855],{},"这三者组成马尔可夫决策过程",[157,23857,23858],{},[160,23859],{"alt":25,"src":23860},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[287,23862,23864],{"id":23863},"_151策略","1.5.1.策略",[157,23866,23867],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[157,23869,23870],{},"策略可分为两种：",[157,23872,23873],{},[160,23874],{"alt":25,"src":23875},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[157,23877,23878],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[287,23880,23882],{"id":23881},"_152价值函数","1.5.2.价值函数",[157,23884,23885],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[157,23887,23888],{},"价值函数中有一个折扣因子，类似于存款利息",[157,23890,23891],{},[160,23892],{"alt":25,"src":23893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[157,23895,23896],{},"进入某个状态采取的最优动作可以通过Q函数得到",[287,23898,23900],{"id":23899},"_153模型","1.5.3.模型",[157,23902,23903],{},[160,23904],{"alt":25,"src":23905},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[15,23907,23909],{"id":23908},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[457,23911,23912,23923],{},[460,23913,23914],{},[463,23915,23916,23920],{},[466,23917,23919],{"align":23918},"left","类型",[466,23921,23922],{"align":23918},"特点",[504,23924,23925,23935,23945,23955,23967],{},[463,23926,23927,23932],{},[509,23928,23929],{"align":23918},[469,23930,23931],{},"基于价值的智能体",[509,23933,23934],{"align":23918},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[463,23936,23937,23942],{},[509,23938,23939],{"align":23918},[469,23940,23941],{},"基于策略的智能体",[509,23943,23944],{"align":23918},"直接学习策略，没有学习价值函数",[463,23946,23947,23952],{},[509,23948,23949],{"align":23918},[469,23950,23951],{},"演员-评论员智能体",[509,23953,23954],{"align":23918},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[463,23956,23957,23962],{},[509,23958,23959],{"align":23918},[469,23960,23961],{},"有模型强化学习智能体",[509,23963,23964],{"align":23918},[160,23965],{"alt":25,"src":23966},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[463,23968,23969,23974],{},[509,23970,23971],{"align":23918},[469,23972,23973],{},"免模型强化学习智能体",[509,23975,23976],{"align":23918},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[15,23978,23980],{"id":23979},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[157,23982,23983],{},"学习和规划是序列决策的两个基本问题",[157,23985,23986],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[157,23988,23989],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[157,23991,23992],{},"强化学习用到的库：Gym",[157,23994,23995],{},"Gym可以检验强化学习算法的优劣",[157,23997,23998,24001],{},[469,23999,24000],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[20,24003,24005],{"className":22,"code":24004,"language":24,"meta":25,"style":25},"pip install gym==0.25.2\n",[27,24006,24007],{"__ignoreMap":25},[30,24008,24009,24012,24015,24018],{"class":32,"line":33},[30,24010,24011],{"class":36},"pip",[30,24013,24014],{"class":74}," install",[30,24016,24017],{"class":74}," gym==",[30,24019,24020],{"class":40},"0.25.2\n",[157,24022,24023],{},"显示图形界面需要",[20,24025,24027],{"className":22,"code":24026,"language":24,"meta":25,"style":25},"pip install pygame\n",[27,24028,24029],{"__ignoreMap":25},[30,24030,24031,24033,24035],{"class":32,"line":33},[30,24032,24011],{"class":36},[30,24034,24014],{"class":74},[30,24036,24037],{"class":74}," pygame\n",[157,24039,24040,24041],{},"有关Gym库的相关文档介绍：",[558,24042,24046],{"href":24043,"rel":24044},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24045],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[15,24048,24050],{"id":24049},"_18一些补充基础概念","1.8.一些补充基础概念",[157,24052,24053],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[157,24055,24056],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[157,24058,24059],{},[160,24060],{"alt":25,"src":24061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[157,24063,24064],{},"折扣率需要自己来设定",[157,24066,24067],{},[160,24068],{"alt":25,"src":24069},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[271,24071,24072],{},[150,24073,24074],{},"状态转移函数：",[157,24076,24077],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[157,24079,24080],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[157,24082,24083],{},[160,24084],{"alt":25,"src":24085},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[271,24087,24088],{"start":44},[150,24089,24090],{},"动作价值函数：",[157,24092,24093],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[157,24095,24096],{},[160,24097],{"alt":25,"src":24098},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[271,24100,24101],{"start":52},[150,24102,24103],{},"最优动作价值函数：",[157,24105,24106],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[157,24108,24109],{},[160,24110],{"alt":25,"src":24111},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[271,24113,24114],{"start":60},[150,24115,24116],{},"状态价值函数:",[157,24118,24119],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[157,24121,24122],{},"它衡量的是“一个具体动作”的长期价值",[157,24124,24125],{},[160,24126],{"alt":25,"src":24127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[157,24129,24130],{},"几个价值函数之间的比较：",[157,24132,24133],{},[160,24134],{"alt":25,"src":24135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[234,24137,24138],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":24140},[24141,24142,24143,24148,24149,24154,24155,24156],{"id":23575,"depth":44,"text":23576},{"id":23642,"depth":44,"text":23643},{"id":23679,"depth":44,"text":23680,"children":24144},[24145,24146,24147],{"id":23683,"depth":52,"text":23684},{"id":23698,"depth":52,"text":23699},{"id":23721,"depth":52,"text":23722},{"id":23829,"depth":44,"text":23830},{"id":23848,"depth":44,"text":23849,"children":24150},[24151,24152,24153],{"id":23863,"depth":52,"text":23864},{"id":23881,"depth":52,"text":23882},{"id":23899,"depth":52,"text":23900},{"id":23908,"depth":44,"text":23909},{"id":23979,"depth":44,"text":23980},{"id":24049,"depth":44,"text":24050},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23567,"description":25},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24163,"title":24164,"body":24165,"description":24172,"extension":243,"meta":24183,"navigation":245,"path":24184,"seo":24185,"stem":24186,"__hash__":24187},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24166,"toc":24181},[24167,24170,24173,24178],[10,24168,24164],{"id":24169},"_2马尔可夫决策过程",[157,24171,24172],{},"这是强化学习的基本框架",[157,24174,24175],{},[160,24176],{"alt":25,"src":24177},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[157,24179,24180],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":25,"searchDepth":44,"depth":44,"links":24182},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24164,"description":24172},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24189,"title":24190,"body":24191,"description":25,"extension":243,"meta":24307,"navigation":245,"path":24308,"seo":24309,"stem":24310,"__hash__":24311},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24192,"toc":24302},[24193,24196,24200,24203,24208,24213,24216,24221,24224,24229,24232,24236,24241,24244,24249,24254,24259,24262,24266,24271,24274,24279,24284,24289,24294,24297],[10,24194,24190],{"id":24195},"_3动作价值函数",[15,24197,24199],{"id":24198},"_31dqn","3.1.DQN",[157,24201,24202],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[157,24204,24205],{},[160,24206],{"alt":25,"src":24207},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[157,24209,24210],{},[160,24211],{"alt":25,"src":24212},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[157,24214,24215],{},"DQN算法的描述：",[157,24217,24218],{},[160,24219],{"alt":25,"src":24220},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[157,24222,24223],{},"这里的Dense指的是全连接层",[157,24225,24226],{},[160,24227],{"alt":25,"src":24228},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[157,24230,24231],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[15,24233,24235],{"id":24234},"_32dqn的举例","3.2.DQN的举例",[157,24237,24238],{},[160,24239],{"alt":25,"src":24240},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[157,24242,24243],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[157,24245,24246],{},[160,24247],{"alt":25,"src":24248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[157,24250,24251],{},[160,24252],{"alt":25,"src":24253},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[157,24255,24256],{},[160,24257],{"alt":25,"src":24258},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[157,24260,24261],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[15,24263,24265],{"id":24264},"_33td算法","3.3.TD算法",[157,24267,24268],{},[160,24269],{"alt":25,"src":24270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[157,24272,24273],{},"强化学习TD算法公式的粗略解释：",[157,24275,24276],{},[160,24277],{"alt":25,"src":24278},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[157,24280,24281],{},[160,24282],{"alt":25,"src":24283},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[157,24285,24286],{},[160,24287],{"alt":25,"src":24288},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[157,24290,24291],{},[160,24292],{"alt":25,"src":24293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[157,24295,24296],{},"TD算法总结：",[157,24298,24299],{},[160,24300],{"alt":25,"src":24301},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":25,"searchDepth":44,"depth":44,"links":24303},[24304,24305,24306],{"id":24198,"depth":44,"text":24199},{"id":24234,"depth":44,"text":24235},{"id":24264,"depth":44,"text":24265},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24190,"description":25},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24313,"title":24314,"body":24315,"description":25,"extension":243,"meta":24548,"navigation":245,"path":24549,"seo":24550,"stem":24551,"__hash__":24552},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24316,"toc":24544},[24317,24320,24324,24327,24330,24335,24340,24343,24348,24353,24356,24361,24364,24369,24372,24377,24380,24385,24388,24393,24398,24401,24406,24409,24412,24417,24420,24425,24430,24434,24437,24440,24445,24450,24453,24458,24463,24466,24471,24474,24477,24482,24485,24490,24493,24498,24503,24506,24511,24516,24519,24524,24527,24532,24535],[10,24318,24314],{"id":24319},"_4策略学习",[15,24321,24323],{"id":24322},"_41概念描述","4.1.概念描述",[157,24325,24326],{},"用神经网络（策略网络）近似策略函数",[157,24328,24329],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[157,24331,24332],{},[160,24333],{"alt":25,"src":24334},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[157,24336,24337],{},[160,24338],{"alt":25,"src":24339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[157,24341,24342],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[157,24344,24345],{},[160,24346],{"alt":25,"src":24347},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[157,24349,24350],{},[160,24351],{"alt":25,"src":24352},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[157,24354,24355],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[157,24357,24358],{},[160,24359],{"alt":25,"src":24360},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[157,24362,24363],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[157,24365,24366],{},[160,24367],{"alt":25,"src":24368},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[157,24370,24371],{},"改进theta要用到策略梯度算法",[157,24373,24374],{},[160,24375],{"alt":25,"src":24376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[157,24378,24379],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[157,24381,24382],{},[160,24383],{"alt":25,"src":24384},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[157,24386,24387],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[157,24389,24390],{},[160,24391],{"alt":25,"src":24392},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[157,24394,24395],{},[160,24396],{"alt":25,"src":24397},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[157,24399,24400],{},"梯度公式总结：",[157,24402,24403],{},[160,24404],{"alt":25,"src":24405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[157,24407,24408],{},"两个公式的分别应用场景：",[157,24410,24411],{},"对于离散的动作：",[157,24413,24414],{},[160,24415],{"alt":25,"src":24416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[157,24418,24419],{},"对于连续的动作：",[157,24421,24422],{},[160,24423],{"alt":25,"src":24424},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[157,24426,24427],{},[160,24428],{"alt":25,"src":24429},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[15,24431,24433],{"id":24432},"_42概率梯度算法总结","4.2.概率梯度算法总结",[157,24435,24436],{},"使用蒙特卡洛来近似计算策略梯度",[157,24438,24439],{},"蒙特卡洛法的解释如下：",[157,24441,24442],{},[160,24443],{"alt":25,"src":24444},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[157,24446,24447],{},[160,24448],{"alt":25,"src":24449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[157,24451,24452],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[271,24454,24455],{},[150,24456,24457],{},"方法一：reinforce算法",[157,24459,24460],{},[160,24461],{"alt":25,"src":24462},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[157,24464,24465],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[271,24467,24468],{"start":44},[150,24469,24470],{},"方法二：actor-critic算法",[157,24472,24473],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[157,24475,24476],{},"两个网络的构建：",[157,24478,24479],{},[160,24480],{"alt":25,"src":24481},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[157,24483,24484],{},"actor网路：",[157,24486,24487],{},[160,24488],{"alt":25,"src":24489},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[157,24491,24492],{},"critic网络",[157,24494,24495],{},[160,24496],{"alt":25,"src":24497},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[271,24499,24500],{"start":52},[150,24501,24502],{},"网络的训练",[157,24504,24505],{},"网络描述",[157,24507,24508],{},[160,24509],{"alt":25,"src":24510},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[157,24512,24513],{},[160,24514],{"alt":25,"src":24515},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[157,24517,24518],{},"TD算法更新梯度：",[157,24520,24521],{},[160,24522],{"alt":25,"src":24523},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[157,24525,24526],{},"策略网络更新梯度：",[157,24528,24529],{},[160,24530],{"alt":25,"src":24531},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[157,24533,24534],{},"训练整个流程的具体描述：",[157,24536,24537,24540,24541],{},[160,24538],{"alt":25,"src":24539},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[160,24542],{"alt":25,"src":24543},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":25,"searchDepth":44,"depth":44,"links":24545},[24546,24547],{"id":24322,"depth":44,"text":24323},{"id":24432,"depth":44,"text":24433},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24314,"description":25},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24554,"title":24555,"body":24556,"description":24563,"extension":243,"meta":24613,"navigation":245,"path":24614,"seo":24615,"stem":24616,"__hash__":24617},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24557,"toc":24609},[24558,24561,24564,24568,24571,24576,24580,24583,24588,24591,24596,24601,24604],[10,24559,24555],{"id":24560},"_5alphago算法",[157,24562,24563],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[15,24565,24567],{"id":24566},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[157,24569,24570],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[157,24572,24573],{},[160,24574],{"alt":25,"src":24575},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[15,24577,24579],{"id":24578},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[157,24581,24582],{},"采用强化学习的方式训练策略网络",[157,24584,24585],{},[160,24586],{"alt":25,"src":24587},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[157,24589,24590],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[157,24592,24593],{},[160,24594],{"alt":25,"src":24595},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[157,24597,24598],{},[160,24599],{"alt":25,"src":24600},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[157,24602,24603],{},"强化学习训练策略网络的总结：",[157,24605,24606],{},[160,24607],{"alt":25,"src":24608},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":25,"searchDepth":44,"depth":44,"links":24610},[24611,24612],{"id":24566,"depth":44,"text":24567},{"id":24578,"depth":44,"text":24579},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24555,"description":24563},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24619,"title":24620,"body":24621,"description":24628,"extension":243,"meta":24631,"navigation":245,"path":24632,"seo":24633,"stem":24634,"__hash__":24635},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24622,"toc":24629},[24623,24626],[10,24624,24620],{"id":24625},"_6价值网络",[157,24627,24628],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":25,"searchDepth":44,"depth":44,"links":24630},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24620,"description":24628},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24637,"title":24638,"body":24639,"description":24643,"extension":243,"meta":24644,"navigation":245,"path":24645,"seo":24646,"stem":24647,"__hash__":24648},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24640,"toc":24641},[],{"title":25,"searchDepth":44,"depth":44,"links":24642},[],"记录自己的强化学习笔记。",{"category":23560},"\u002Fwiki\u002F2025-12-04",{"title":24638,"description":24643},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24650,"title":24651,"body":24652,"description":242,"extension":243,"meta":24691,"navigation":245,"path":24692,"seo":24693,"stem":24694,"__hash__":24695},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24653,"toc":24689},[24654,24657,24660,24666,24669,24675,24678,24683,24686],[10,24655,24651],{"id":24656},"_1-项目概览与官方资源",[157,24658,24659],{},"官方文档：",[157,24661,24662],{},[558,24663,24664],{"href":24664,"rel":24665},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24045],[157,24667,24668],{},"官方代码仓库：",[157,24670,24671],{},[558,24672,24673],{"href":24673,"rel":24674},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24045],[157,24676,24677],{},"复现大体流程：",[157,24679,24680],{},[160,24681],{"alt":25,"src":24682},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[157,24684,24685],{},"本教程的目标是打通这条链路：",[157,24687,24688],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":25,"searchDepth":44,"depth":44,"links":24690},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24651,"description":242},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24697,"title":24698,"body":24699,"description":242,"extension":243,"meta":24815,"navigation":245,"path":24816,"seo":24817,"stem":24818,"__hash__":24819},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24700,"toc":24810},[24701,24704,24708,24711,24718,24722,24725,24734,24744,24748,24778,24781,24807],[10,24702,24698],{"id":24703},"_2-环境准备与设备连接",[15,24705,24707],{"id":24706},"_21-系统与环境","2.1 系统与环境",[157,24709,24710],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[157,24712,24713,24714,24717],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[27,24715,24716],{},"lerobot"," 依赖。",[15,24719,24721],{"id":24720},"_22-机械臂串口识别","2.2 机械臂串口识别",[157,24723,24724],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[20,24726,24728],{"className":22,"code":24727,"language":24,"meta":25,"style":25},"lerobot-find-out\n",[27,24729,24730],{"__ignoreMap":25},[30,24731,24732],{"class":32,"line":33},[30,24733,24727],{"class":36},[157,24735,24736,24737,532,24740,24743],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[27,24738,24739],{},"\u002Fdev\u002FttyACM0",[27,24741,24742],{},"\u002Fdev\u002FttyACM1","）。",[15,24745,24747],{"id":24746},"_23-串口授权","2.3 串口授权",[20,24749,24751],{"className":22,"code":24750,"language":24,"meta":25,"style":25},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[27,24752,24753,24767],{"__ignoreMap":25},[30,24754,24755,24758,24761,24764],{"class":32,"line":33},[30,24756,24757],{"class":36},"sudo",[30,24759,24760],{"class":74}," chmod",[30,24762,24763],{"class":40}," 666",[30,24765,24766],{"class":74}," \u002Fdev\u002FttyACM0\n",[30,24768,24769,24771,24773,24775],{"class":32,"line":44},[30,24770,24757],{"class":36},[30,24772,24760],{"class":74},[30,24774,24763],{"class":40},[30,24776,24777],{"class":74}," \u002Fdev\u002FttyACM1\n",[157,24779,24780],{},"说明：",[147,24782,24783,24788,24794,24804],{},[150,24784,24785,24787],{},[27,24786,24757],{},"：以 root 权限执行命令。",[150,24789,24790,24793],{},[27,24791,24792],{},"chmod","：修改设备节点权限。",[150,24795,24796,24799,24800,24803],{},[27,24797,24798],{},"666","：",[27,24801,24802],{},"rw-rw-rw-","，所有用户可读写。",[150,24805,24806],{},"串口号必须替换为你机器上的真实端口。",[234,24808,24809],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":25,"searchDepth":44,"depth":44,"links":24811},[24812,24813,24814],{"id":24706,"depth":44,"text":24707},{"id":24720,"depth":44,"text":24721},{"id":24746,"depth":44,"text":24747},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24698,"description":242},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24821,"title":24822,"body":24823,"description":242,"extension":243,"meta":24979,"navigation":245,"path":24980,"seo":24981,"stem":24982,"__hash__":24983},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24824,"toc":24975},[24825,24829,24833,24839,24842,24896,24899,24903,24906,24972],[10,24826,24828],{"id":24827},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[15,24830,24832],{"id":24831},"_31-配置电机-id","3.1 配置电机 ID",[157,24834,24835,24836,24838],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[27,24837,537],{},"，需要改成机械臂链路里不冲突的编号。",[157,24840,24841],{},"方式一：用 LeRobot 命令逐步写入。",[20,24843,24845],{"className":22,"code":24844,"language":24,"meta":25,"style":25},"# 主臂舵机配置 ID\nlerobot-setup-motors \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0\n\n# 从臂舵机配置 ID\nlerobot-setup-motors \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1\n",[27,24846,24847,24852,24859,24865,24870,24874,24879,24885,24891],{"__ignoreMap":25},[30,24848,24849],{"class":32,"line":33},[30,24850,24851],{"class":379},"# 主臂舵机配置 ID\n",[30,24853,24854,24857],{"class":32,"line":44},[30,24855,24856],{"class":36},"lerobot-setup-motors",[30,24858,41],{"class":40},[30,24860,24861,24863],{"class":32,"line":52},[30,24862,83],{"class":40},[30,24864,41],{"class":40},[30,24866,24867],{"class":32,"line":60},[30,24868,24869],{"class":40},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[30,24871,24872],{"class":32,"line":68},[30,24873,2582],{"emptyLinePlaceholder":245},[30,24875,24876],{"class":32,"line":80},[30,24877,24878],{"class":379},"# 从臂舵机配置 ID\n",[30,24880,24881,24883],{"class":32,"line":88},[30,24882,24856],{"class":36},[30,24884,41],{"class":40},[30,24886,24887,24889],{"class":32,"line":96},[30,24888,47],{"class":40},[30,24890,41],{"class":40},[30,24892,24893],{"class":32,"line":104},[30,24894,24895],{"class":40},"  --robot.port=\u002Fdev\u002FttyACM1\n",[157,24897,24898],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[15,24900,24902],{"id":24901},"_32-机械臂校准","3.2 机械臂校准",[157,24904,24905],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[20,24907,24909],{"className":22,"code":24908,"language":24,"meta":25,"style":25},"# 主臂校准\nlerobot-calibrate \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n\n# 从臂校准\nlerobot-calibrate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm\n",[27,24910,24911,24916,24923,24929,24935,24940,24944,24949,24955,24961,24967],{"__ignoreMap":25},[30,24912,24913],{"class":32,"line":33},[30,24914,24915],{"class":379},"# 主臂校准\n",[30,24917,24918,24921],{"class":32,"line":44},[30,24919,24920],{"class":36},"lerobot-calibrate",[30,24922,41],{"class":40},[30,24924,24925,24927],{"class":32,"line":52},[30,24926,83],{"class":40},[30,24928,41],{"class":40},[30,24930,24931,24933],{"class":32,"line":60},[30,24932,91],{"class":40},[30,24934,41],{"class":40},[30,24936,24937],{"class":32,"line":68},[30,24938,24939],{"class":40},"  --teleop.id=my_awesome_leader_arm\n",[30,24941,24942],{"class":32,"line":80},[30,24943,2582],{"emptyLinePlaceholder":245},[30,24945,24946],{"class":32,"line":88},[30,24947,24948],{"class":379},"# 从臂校准\n",[30,24950,24951,24953],{"class":32,"line":96},[30,24952,24920],{"class":36},[30,24954,41],{"class":40},[30,24956,24957,24959],{"class":32,"line":104},[30,24958,47],{"class":40},[30,24960,41],{"class":40},[30,24962,24963,24965],{"class":32,"line":112},[30,24964,55],{"class":40},[30,24966,41],{"class":40},[30,24968,24969],{"class":32,"line":123},[30,24970,24971],{"class":40},"  --robot.id=my_awesome_follower_arm\n",[234,24973,24974],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":24976},[24977,24978],{"id":24831,"depth":44,"text":24832},{"id":24901,"depth":44,"text":24902},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24822,"description":242},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24985,"title":24986,"body":24987,"description":242,"extension":243,"meta":25175,"navigation":245,"path":25176,"seo":25177,"stem":25178,"__hash__":25179},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24988,"toc":25171},[24989,24992,24996,25042,25046,25059,25120,25123,25168],[10,24990,24986],{"id":24991},"_4-遥操与相机接入",[15,24993,24995],{"id":24994},"_41-不带相机遥操","4.1 不带相机遥操",[20,24997,24999],{"className":22,"code":24998,"language":24,"meta":25,"style":25},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n",[27,25000,25001,25008,25014,25020,25026,25032,25038],{"__ignoreMap":25},[30,25002,25003,25006],{"class":32,"line":33},[30,25004,25005],{"class":36},"lerobot-teleoperate",[30,25007,41],{"class":40},[30,25009,25010,25012],{"class":32,"line":44},[30,25011,47],{"class":40},[30,25013,41],{"class":40},[30,25015,25016,25018],{"class":32,"line":52},[30,25017,55],{"class":40},[30,25019,41],{"class":40},[30,25021,25022,25024],{"class":32,"line":60},[30,25023,63],{"class":40},[30,25025,41],{"class":40},[30,25027,25028,25030],{"class":32,"line":68},[30,25029,83],{"class":40},[30,25031,41],{"class":40},[30,25033,25034,25036],{"class":32,"line":80},[30,25035,91],{"class":40},[30,25037,41],{"class":40},[30,25039,25040],{"class":32,"line":88},[30,25041,24939],{"class":40},[15,25043,25045],{"id":25044},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[20,25047,25049],{"className":22,"code":25048,"language":24,"meta":25,"style":25},"lerobot-find-cameras opencv\n",[27,25050,25051],{"__ignoreMap":25},[30,25052,25053,25056],{"class":32,"line":33},[30,25054,25055],{"class":36},"lerobot-find-cameras",[30,25057,25058],{"class":74}," opencv\n",[20,25060,25062],{"className":22,"code":25061,"language":24,"meta":25,"style":25},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true\n",[27,25063,25064,25070,25076,25082,25088,25097,25103,25109,25115],{"__ignoreMap":25},[30,25065,25066,25068],{"class":32,"line":33},[30,25067,25005],{"class":36},[30,25069,41],{"class":40},[30,25071,25072,25074],{"class":32,"line":44},[30,25073,47],{"class":40},[30,25075,41],{"class":40},[30,25077,25078,25080],{"class":32,"line":52},[30,25079,55],{"class":40},[30,25081,41],{"class":40},[30,25083,25084,25086],{"class":32,"line":60},[30,25085,63],{"class":40},[30,25087,41],{"class":40},[30,25089,25090,25092,25095],{"class":32,"line":68},[30,25091,71],{"class":40},[30,25093,25094],{"class":74},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[30,25096,41],{"class":40},[30,25098,25099,25101],{"class":32,"line":80},[30,25100,83],{"class":40},[30,25102,41],{"class":40},[30,25104,25105,25107],{"class":32,"line":88},[30,25106,91],{"class":40},[30,25108,41],{"class":40},[30,25110,25111,25113],{"class":32,"line":96},[30,25112,99],{"class":40},[30,25114,41],{"class":40},[30,25116,25117],{"class":32,"line":104},[30,25118,25119],{"class":40},"  --display_data=true\n",[157,25121,25122],{},"相机参数说明：",[147,25124,25125,25131,25137,25146,25156,25162],{},[150,25126,25127,25130],{},[27,25128,25129],{},"front","：相机名称。",[150,25132,25133,25136],{},[27,25134,25135],{},"type: opencv","：相机驱动类型。",[150,25138,25139,25142,25143,24743],{},[27,25140,25141],{},"index_or_path","：设备编号或设备路径（如 ",[27,25144,25145],{},"\u002Fdev\u002Fvideo4",[150,25147,25148,25151,25152,25155],{},[27,25149,25150],{},"width"," \u002F ",[27,25153,25154],{},"height","：图像分辨率。",[150,25157,25158,25161],{},[27,25159,25160],{},"fps","：采样帧率。",[150,25163,25164,25167],{},[27,25165,25166],{},"--display_data=true","：启用实时可视化。",[234,25169,25170],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":44,"depth":44,"links":25172},[25173,25174],{"id":24994,"depth":44,"text":24995},{"id":25044,"depth":44,"text":25045},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24986,"description":242},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25181,"title":25182,"body":25183,"description":242,"extension":243,"meta":25355,"navigation":245,"path":25356,"seo":25357,"stem":25358,"__hash__":25359},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25184,"toc":25350},[25185,25189,25193,25198,25203,25206,25248,25254,25258,25307,25312,25316,25319,25327,25332,25337,25342,25347],[10,25186,25188],{"id":25187},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[15,25190,25192],{"id":25191},"_51-生成访问令牌","5.1 生成访问令牌",[157,25194,25195],{},[160,25196],{"alt":25,"src":25197},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[157,25199,25200],{},[160,25201],{"alt":25,"src":25202},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[157,25204,25205],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[20,25207,25209],{"className":22,"code":25208,"language":24,"meta":25,"style":25},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[27,25210,25211,25224],{"__ignoreMap":25},[30,25212,25213,25216,25219,25221],{"class":32,"line":33},[30,25214,25215],{"class":317},"export",[30,25217,25218],{"class":321}," HF_TOKEN",[30,25220,367],{"class":317},[30,25222,25223],{"class":74},"\"your_huggingface_token\"\n",[30,25225,25226,25229,25232,25235,25238,25240,25243,25245],{"class":32,"line":44},[30,25227,25228],{"class":36},"hf",[30,25230,25231],{"class":74}," auth",[30,25233,25234],{"class":74}," login",[30,25236,25237],{"class":40}," --token",[30,25239,9906],{"class":74},[30,25241,25242],{"class":321},"$HF_TOKEN",[30,25244,571],{"class":74},[30,25246,25247],{"class":40}," --add-to-git-credential\n",[157,25249,25250,25253],{},[27,25251,25252],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[15,25255,25257],{"id":25256},"_52-验证登录","5.2 验证登录",[20,25259,25261],{"className":22,"code":25260,"language":24,"meta":25,"style":25},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[27,25262,25263,25294],{"__ignoreMap":25},[30,25264,25265,25268,25270,25273,25275,25277,25280,25283,25286,25289,25292],{"class":32,"line":33},[30,25266,25267],{"class":321},"HF_USER",[30,25269,367],{"class":317},[30,25271,25272],{"class":321},"$(",[30,25274,25228],{"class":36},[30,25276,25231],{"class":74},[30,25278,25279],{"class":74}," whoami",[30,25281,25282],{"class":317}," |",[30,25284,25285],{"class":36}," head",[30,25287,25288],{"class":40}," -n",[30,25290,25291],{"class":40}," 1",[30,25293,328],{"class":321},[30,25295,25296,25299,25301,25304],{"class":32,"line":44},[30,25297,25298],{"class":40},"echo",[30,25300,9906],{"class":74},[30,25302,25303],{"class":321},"$HF_USER",[30,25305,25306],{"class":74},"\"\n",[157,25308,25309],{},[160,25310],{"alt":25,"src":25311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[15,25313,25315],{"id":25314},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[157,25317,25318],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[147,25320,25321,25324],{},[150,25322,25323],{},"Dataset Repo（用于上传演示数据）",[150,25325,25326],{},"Model Repo（用于上传训练后的 ACT 权重）",[157,25328,25329],{},[160,25330],{"alt":25,"src":25331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[157,25333,25334],{},[160,25335],{"alt":25,"src":25336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[157,25338,25339],{},[160,25340],{"alt":25,"src":25341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[157,25343,25344],{},[160,25345],{"alt":25,"src":25346},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[234,25348,25349],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":25351},[25352,25353,25354],{"id":25191,"depth":44,"text":25192},{"id":25256,"depth":44,"text":25257},{"id":25314,"depth":44,"text":25315},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25182,"description":242},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":4,"title":5,"body":25361,"description":242,"extension":243,"meta":25528,"navigation":245,"path":246,"seo":25529,"stem":248,"__hash__":249},{"type":7,"value":25362,"toc":25523},[25363,25365,25367,25453,25459,25463,25465,25477,25479,25481,25521],[10,25364,13],{"id":12},[15,25366,18],{"id":17},[20,25368,25369],{"className":22,"code":23,"language":24,"meta":25,"style":25},[27,25370,25371,25377,25383,25389,25395,25403,25409,25415,25421,25427,25435,25441,25449],{"__ignoreMap":25},[30,25372,25373,25375],{"class":32,"line":33},[30,25374,37],{"class":36},[30,25376,41],{"class":40},[30,25378,25379,25381],{"class":32,"line":44},[30,25380,47],{"class":40},[30,25382,41],{"class":40},[30,25384,25385,25387],{"class":32,"line":52},[30,25386,55],{"class":40},[30,25388,41],{"class":40},[30,25390,25391,25393],{"class":32,"line":60},[30,25392,63],{"class":40},[30,25394,41],{"class":40},[30,25396,25397,25399,25401],{"class":32,"line":68},[30,25398,71],{"class":40},[30,25400,75],{"class":74},[30,25402,41],{"class":40},[30,25404,25405,25407],{"class":32,"line":80},[30,25406,83],{"class":40},[30,25408,41],{"class":40},[30,25410,25411,25413],{"class":32,"line":88},[30,25412,91],{"class":40},[30,25414,41],{"class":40},[30,25416,25417,25419],{"class":32,"line":96},[30,25418,99],{"class":40},[30,25420,41],{"class":40},[30,25422,25423,25425],{"class":32,"line":104},[30,25424,107],{"class":40},[30,25426,41],{"class":40},[30,25428,25429,25431,25433],{"class":32,"line":112},[30,25430,115],{"class":40},[30,25432,118],{"class":74},[30,25434,41],{"class":40},[30,25436,25437,25439],{"class":32,"line":123},[30,25438,126],{"class":40},[30,25440,41],{"class":40},[30,25442,25443,25445,25447],{"class":32,"line":131},[30,25444,134],{"class":40},[30,25446,137],{"class":74},[30,25448,41],{"class":40},[30,25450,25451],{"class":32,"line":142},[30,25452,145],{"class":40},[147,25454,25455],{},[150,25456,25457,155],{},[27,25458,154],{},[157,25460,25461],{},[160,25462],{"alt":25,"src":162},[15,25464,166],{"id":165},[20,25466,25467],{"className":22,"code":169,"language":24,"meta":25,"style":25},[27,25468,25469],{"__ignoreMap":25},[30,25470,25471,25473,25475],{"class":32,"line":33},[30,25472,176],{"class":36},[30,25474,179],{"class":40},[30,25476,182],{"class":74},[157,25478,185],{},[15,25480,189],{"id":188},[20,25482,25483],{"className":22,"code":192,"language":24,"meta":25,"style":25},[27,25484,25485,25491,25497,25503,25509,25517],{"__ignoreMap":25},[30,25486,25487,25489],{"class":32,"line":33},[30,25488,199],{"class":36},[30,25490,41],{"class":40},[30,25492,25493,25495],{"class":32,"line":44},[30,25494,47],{"class":40},[30,25496,41],{"class":40},[30,25498,25499,25501],{"class":32,"line":52},[30,25500,55],{"class":40},[30,25502,41],{"class":40},[30,25504,25505,25507],{"class":32,"line":60},[30,25506,63],{"class":40},[30,25508,41],{"class":40},[30,25510,25511,25513,25515],{"class":32,"line":68},[30,25512,115],{"class":40},[30,25514,118],{"class":74},[30,25516,41],{"class":40},[30,25518,25519],{"class":32,"line":80},[30,25520,232],{"class":40},[234,25522,236],{},{"title":25,"searchDepth":44,"depth":44,"links":25524},[25525,25526,25527],{"id":17,"depth":44,"text":18},{"id":165,"depth":44,"text":166},{"id":188,"depth":44,"text":189},{},{"title":5,"description":242},{"id":25531,"title":25532,"body":25533,"description":242,"extension":243,"meta":25661,"navigation":245,"path":25662,"seo":25663,"stem":25664,"__hash__":25665},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25534,"toc":25659},[25535,25539,25602,25605,25652,25657],[10,25536,25538],{"id":25537},"_7-act-模型训练","7. ACT 模型训练",[20,25540,25542],{"className":22,"code":25541,"language":24,"meta":25,"style":25},"lerobot-train \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --policy.type=act \\\n  --output_dir=outputs\u002Ftrain\u002Fact_so101_test \\\n  --job_name=act_so101_test \\\n  --policy.device=cuda \\\n  --wandb.enable=false \\\n  --policy.repo_id=\"Embodied-AI-6\u002Flerobot_new\"\n",[27,25543,25544,25551,25559,25566,25573,25580,25587,25594],{"__ignoreMap":25},[30,25545,25546,25549],{"class":32,"line":33},[30,25547,25548],{"class":36},"lerobot-train",[30,25550,41],{"class":40},[30,25552,25553,25555,25557],{"class":32,"line":44},[30,25554,115],{"class":40},[30,25556,118],{"class":74},[30,25558,41],{"class":40},[30,25560,25561,25564],{"class":32,"line":52},[30,25562,25563],{"class":40},"  --policy.type=act",[30,25565,41],{"class":40},[30,25567,25568,25571],{"class":32,"line":60},[30,25569,25570],{"class":40},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[30,25572,41],{"class":40},[30,25574,25575,25578],{"class":32,"line":68},[30,25576,25577],{"class":40},"  --job_name=act_so101_test",[30,25579,41],{"class":40},[30,25581,25582,25585],{"class":32,"line":80},[30,25583,25584],{"class":40},"  --policy.device=cuda",[30,25586,41],{"class":40},[30,25588,25589,25592],{"class":32,"line":88},[30,25590,25591],{"class":40},"  --wandb.enable=false",[30,25593,41],{"class":40},[30,25595,25596,25599],{"class":32,"line":96},[30,25597,25598],{"class":40},"  --policy.repo_id=",[30,25600,25601],{"class":74},"\"Embodied-AI-6\u002Flerobot_new\"\n",[157,25603,25604],{},"参数说明：",[147,25606,25607,25613,25619,25625,25631,25640,25646],{},[150,25608,25609,25612],{},[27,25610,25611],{},"--dataset.repo_id","：训练数据集仓库。",[150,25614,25615,25618],{},[27,25616,25617],{},"--policy.type=act","：策略模型类型为 ACT。",[150,25620,25621,25624],{},[27,25622,25623],{},"--output_dir","：本地训练输出目录。",[150,25626,25627,25630],{},[27,25628,25629],{},"--job_name","：训练任务名称。",[150,25632,25633,25636,25637,24743],{},[27,25634,25635],{},"--policy.device","：训练设备（如 ",[27,25638,25639],{},"cuda",[150,25641,25642,25645],{},[27,25643,25644],{},"--wandb.enable","：是否启用 WandB 可视化。",[150,25647,25648,25651],{},[27,25649,25650],{},"--policy.repo_id","：训练后模型推送目标仓库。",[157,25653,25654],{},[160,25655],{"alt":25,"src":25656},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[234,25658,236],{},{"title":25,"searchDepth":44,"depth":44,"links":25660},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25532,"description":242},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25667,"title":25668,"body":25669,"description":242,"extension":243,"meta":25756,"navigation":245,"path":25757,"seo":25758,"stem":25759,"__hash__":25760},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25670,"toc":25754},[25671,25674,25677,25744,25752],[10,25672,25668],{"id":25673},"_8-策略部署与自动采集",[157,25675,25676],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[20,25678,25680],{"className":22,"code":25679,"language":24,"meta":25,"style":25},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --robot.id=my_awesome_follower_arm \\\n  --display_data=false \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --policy.path=\"Embodied-AI-6\u002Flerobot_new\"\n",[27,25681,25682,25688,25694,25700,25708,25714,25721,25729,25737],{"__ignoreMap":25},[30,25683,25684,25686],{"class":32,"line":33},[30,25685,37],{"class":36},[30,25687,41],{"class":40},[30,25689,25690,25692],{"class":32,"line":44},[30,25691,47],{"class":40},[30,25693,41],{"class":40},[30,25695,25696,25698],{"class":32,"line":52},[30,25697,55],{"class":40},[30,25699,41],{"class":40},[30,25701,25702,25704,25706],{"class":32,"line":60},[30,25703,71],{"class":40},[30,25705,75],{"class":74},[30,25707,41],{"class":40},[30,25709,25710,25712],{"class":32,"line":68},[30,25711,63],{"class":40},[30,25713,41],{"class":40},[30,25715,25716,25719],{"class":32,"line":80},[30,25717,25718],{"class":40},"  --display_data=false",[30,25720,41],{"class":40},[30,25722,25723,25725,25727],{"class":32,"line":88},[30,25724,115],{"class":40},[30,25726,118],{"class":74},[30,25728,41],{"class":40},[30,25730,25731,25733,25735],{"class":32,"line":96},[30,25732,134],{"class":40},[30,25734,137],{"class":74},[30,25736,41],{"class":40},[30,25738,25739,25742],{"class":32,"line":104},[30,25740,25741],{"class":40},"  --policy.path=",[30,25743,25601],{"class":74},[147,25745,25746],{},[150,25747,25748,25751],{},[27,25749,25750],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[234,25753,236],{},{"title":25,"searchDepth":44,"depth":44,"links":25755},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25668,"description":242},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25762,"title":25763,"body":25764,"description":242,"extension":243,"meta":25793,"navigation":245,"path":25794,"seo":25795,"stem":25796,"__hash__":25797},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25765,"toc":25791},[25766,25770,25773,25779,25782,25788],[10,25767,25769],{"id":25768},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[157,25771,25772],{},"项目地址：",[157,25774,25775],{},[558,25776,25777],{"href":25777,"rel":25778},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24045],[157,25780,25781],{},"参考教程：",[157,25783,25784],{},[558,25785,25786],{"href":25786,"rel":25787},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24045],[157,25789,25790],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":25,"searchDepth":44,"depth":44,"links":25792},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25763,"description":242},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25799,"title":25800,"body":25801,"description":25805,"extension":243,"meta":25806,"navigation":245,"path":25807,"seo":25808,"stem":25809,"__hash__":25810},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25802,"toc":25803},[],{"title":25,"searchDepth":44,"depth":44,"links":25804},[],"act复现",{"category":23560},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25800,"description":25805},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25812,"title":25813,"body":25814,"description":25,"extension":243,"meta":26116,"navigation":245,"path":26117,"seo":26118,"stem":26119,"__hash__":26120},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25815,"toc":26108},[25816,25819,25823,25833,25840,25847,25850,25857,25860,25863,25867,25879,25883,25929,25932,25935,25938,25941,25944,25948,25986,25992,25996,26050,26055,26058,26061,26066,26069,26074,26077,26080,26084,26087,26090,26094],[10,25817,25813],{"id":25818},"_1简介",[287,25820,25822],{"id":25821},"_11什么是-docker","1.1什么是 Docker？",[157,25824,25825,25826,25829,25830],{},"Docker 是一个开源的 ",[469,25827,25828],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[469,25831,25832],{},"一次构建，到处运行。",[157,25834,25835,25836,25839],{},"“ ",[469,25837,25838],{},"一次构建，到处运行"," ”也就是说：",[271,25841,25842],{},[150,25843,25844],{},[469,25845,25846],{},"之前：",[157,25848,25849],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[271,25851,25852],{},[150,25853,25854],{},[469,25855,25856],{},"使用docker后：",[157,25858,25859],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[157,25861,25862],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[287,25864,25866],{"id":25865},"_12它是怎么工作的","1.2.它是怎么工作的？",[147,25868,25869,25872],{},[150,25870,25871],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[150,25873,25874,25875,25878],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[469,25876,25877],{},"无论在哪运行都一样稳定"," 。",[287,25880,25882],{"id":25881},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[457,25884,25885,25895],{},[460,25886,25887],{},[463,25888,25889,25892],{},[466,25890,25891],{"align":23918},"概念",[466,25893,25894],{"align":23918},"解释",[504,25896,25897,25905,25913,25921],{},[463,25898,25899,25902],{},[509,25900,25901],{"align":23918},"镜像",[509,25903,25904],{"align":23918},"Image，运行容器的模板，像是一个应用快照",[463,25906,25907,25910],{},[509,25908,25909],{"align":23918},"容器",[509,25911,25912],{"align":23918},"Container，运行中的镜像实例，有自己的文件系统、网络等",[463,25914,25915,25918],{},[509,25916,25917],{"align":23918},"Dockerfile",[509,25919,25920],{"align":23918},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[463,25922,25923,25926],{},[509,25924,25925],{"align":23918},"仓库",[509,25927,25928],{"align":23918},"Registry，存放镜像的地方，比如 Docker Hub",[157,25930,25931],{},"抽象化理解:",[157,25933,25934],{},"Docker镜像≈C++类",[157,25936,25937],{},"Docker容器≈C++类实例(即对象)",[157,25939,25940],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[157,25942,25943],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[287,25945,25947],{"id":25946},"_14类比理解","1.4.类比理解",[457,25949,25950,25960],{},[460,25951,25952],{},[463,25953,25954,25957],{},[466,25955,25956],{"align":23918},"传统部署",[466,25958,25959],{"align":23918},"Docker部署",[504,25961,25962,25970,25978],{},[463,25963,25964,25967],{},[509,25965,25966],{"align":23918},"手动安装依赖、调试版本不一致问题",[509,25968,25969],{"align":23918},"一次打包环境和代码",[463,25971,25972,25975],{},[509,25973,25974],{"align":23918},"程序“裸奔”跑在系统上",[509,25976,25977],{"align":23918},"程序“穿着容器”隔离运行",[463,25979,25980,25983],{},[509,25981,25982],{"align":23918},"容易“在我电脑上能跑”",[509,25984,25985],{"align":23918},"保证“无论在哪都能跑”",[157,25987,25988,25989],{},"就像快递包裹： ",[469,25990,25991],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[287,25993,25995],{"id":25994},"_15docker-的核心优势","1.5.Docker 的核心优势",[457,25997,25998,26008],{},[460,25999,26000],{},[463,26001,26002,26005],{},[466,26003,26004],{"align":23918},"优势",[466,26006,26007],{"align":23918},"说明",[504,26009,26010,26018,26026,26034,26042],{},[463,26011,26012,26015],{},[509,26013,26014],{"align":23918},"轻量级",[509,26016,26017],{"align":23918},"基于系统内核共享，启动速度快，占资源少",[463,26019,26020,26023],{},[509,26021,26022],{"align":23918},"跨平台",[509,26024,26025],{"align":23918},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[463,26027,26028,26031],{},[509,26029,26030],{"align":23918},"易于迁移部署",[509,26032,26033],{"align":23918},"应用和环境一起封装，不怕依赖不一致",[463,26035,26036,26039],{},[509,26037,26038],{"align":23918},"易于版本控制",[509,26040,26041],{"align":23918},"镜像版本可控，支持回滚",[463,26043,26044,26047],{},[509,26045,26046],{"align":23918},"生态丰富",[509,26048,26049],{"align":23918},"Docker Hub 上有成千上万的现成镜像可用",[271,26051,26052],{},[150,26053,26054],{},"在Linux上可以几乎实现无性能损失。",[157,26056,26057],{},"docker里的发行版和本机共用Linux内核。",[157,26059,26060],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[271,26062,26063],{},[150,26064,26065],{},"可以快速部署在绝大多数Linux发行版",[157,26067,26068],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[271,26070,26071],{},[150,26072,26073],{},"配置环境简单",[157,26075,26076],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[157,26078,26079],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[271,26081,26082],{},[150,26083,26046],{},[157,26085,26086],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[157,26088,26089],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[287,26091,26093],{"id":26092},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[147,26095,26096,26099,26102,26105],{},[150,26097,26098],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[150,26100,26101],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[150,26103,26104],{},"微服务架构：每个服务一个容器，灵活组合",[150,26106,26107],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":25,"searchDepth":44,"depth":44,"links":26109},[26110,26111,26112,26113,26114,26115],{"id":25821,"depth":52,"text":25822},{"id":25865,"depth":52,"text":25866},{"id":25881,"depth":52,"text":25882},{"id":25946,"depth":52,"text":25947},{"id":25994,"depth":52,"text":25995},{"id":26092,"depth":52,"text":26093},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25813,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26122,"title":26123,"body":26124,"description":25,"extension":243,"meta":26857,"navigation":245,"path":26858,"seo":26859,"stem":26860,"__hash__":26861},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26125,"toc":26852},[26126,26129,26133,26136,26139,26145,26151,26155,26164,26167,26224,26227,26278,26281,26364,26367,26404,26408,26419,26432,26439,26442,26522,26525,26575,26578,26601,26605,26612,26615,26631,26637,26640,26656,26662,26665,26681,26695,26701,26721,26727,26730,26742,26748,26751,26765,26771,26774,26794,26799,26802,26805,26809,26812,26815,26818,26825,26828,26831,26834,26839,26844,26849],[10,26127,26123],{"id":26128},"_2安装docker",[287,26130,26132],{"id":26131},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[157,26134,26135],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[157,26137,26138],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[157,26140,26141],{},[558,26142,26143],{"href":26143,"rel":26144},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24045],[157,26146,26147],{},[558,26148,26149],{"href":26149,"rel":26150},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24045],[22180,26152,26154],{"id":26153},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[157,26156,26157,26158,26163],{},"以下内容根据 ",[558,26159,26162],{"href":26160,"rel":26161},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24045],"官方文档"," 修改而来。",[157,26165,26166],{},"如果你过去安装过 docker，先删掉：",[20,26168,26170],{"className":22,"code":26169,"language":24,"meta":25,"style":25},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[27,26171,26172],{"__ignoreMap":25},[30,26173,26174,26176,26179,26182,26185,26188,26191,26194,26197,26200,26203,26206,26209,26212,26215,26218,26221],{"class":32,"line":33},[30,26175,3207],{"class":317},[30,26177,26178],{"class":321}," pkg ",[30,26180,26181],{"class":317},"in",[30,26183,26184],{"class":74}," docker.io",[30,26186,26187],{"class":74}," docker-doc",[30,26189,26190],{"class":74}," docker-compose",[30,26192,26193],{"class":74}," docker-compose-v2",[30,26195,26196],{"class":74}," podman-docker",[30,26198,26199],{"class":74}," containerd",[30,26201,26202],{"class":74}," runc",[30,26204,26205],{"class":321},"; ",[30,26207,26208],{"class":317},"do",[30,26210,26211],{"class":36}," sudo",[30,26213,26214],{"class":74}," apt-get",[30,26216,26217],{"class":74}," remove",[30,26219,26220],{"class":321}," $pkg; ",[30,26222,26223],{"class":317},"done\n",[157,26225,26226],{},"首先安装依赖和GPG：",[20,26228,26232],{"className":26229,"code":26230,"language":26231,"meta":25,"style":25},"language-markdown shiki shiki-themes github-light github-dark","# Add Docker's official GPG key:\nsudo apt-get update\nsudo apt-get install ca-certificates curl\nsudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\nsudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n\n# 如果上面这行报错就弄下面这行\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n","markdown",[27,26233,26234,26239,26244,26249,26254,26259,26264,26268,26273],{"__ignoreMap":25},[30,26235,26236],{"class":32,"line":33},[30,26237,26238],{},"# Add Docker's official GPG key:\n",[30,26240,26241],{"class":32,"line":44},[30,26242,26243],{},"sudo apt-get update\n",[30,26245,26246],{"class":32,"line":52},[30,26247,26248],{},"sudo apt-get install ca-certificates curl\n",[30,26250,26251],{"class":32,"line":60},[30,26252,26253],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[30,26255,26256],{"class":32,"line":68},[30,26257,26258],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[30,26260,26261],{"class":32,"line":80},[30,26262,26263],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[30,26265,26266],{"class":32,"line":88},[30,26267,2582],{"emptyLinePlaceholder":245},[30,26269,26270],{"class":32,"line":96},[30,26271,26272],{},"# 如果上面这行报错就弄下面这行\n",[30,26274,26275],{"class":32,"line":104},[30,26276,26277],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[157,26279,26280],{},"信任 Docker 的 GPG 公钥并添加仓库：",[20,26282,26284],{"className":22,"code":26283,"language":24,"meta":25,"style":25},"# Add the repository to Apt sources:\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu \\\n  \"$(. \u002Fetc\u002Fos-release && echo \"$VERSION_CODENAME\")\" stable\" | \\\n  sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n",[27,26285,26286,26291,26297,26314,26347],{"__ignoreMap":25},[30,26287,26288],{"class":32,"line":33},[30,26289,26290],{"class":379},"# Add the repository to Apt sources:\n",[30,26292,26293,26295],{"class":32,"line":44},[30,26294,25298],{"class":40},[30,26296,41],{"class":40},[30,26298,26299,26302,26305,26308,26311],{"class":32,"line":52},[30,26300,26301],{"class":74},"  \"deb [arch=$(",[30,26303,26304],{"class":36},"dpkg",[30,26306,26307],{"class":40}," --print-architecture",[30,26309,26310],{"class":74},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[30,26312,26313],{"class":40},"\\\n",[30,26315,26316,26319,26321,26323,26326,26329,26331,26333,26336,26338,26340,26343,26345],{"class":32,"line":60},[30,26317,26318],{"class":74},"  \"",[30,26320,25272],{"class":321},[30,26322,878],{"class":40},[30,26324,26325],{"class":74}," \u002Fetc\u002Fos-release",[30,26327,26328],{"class":321}," && ",[30,26330,25298],{"class":40},[30,26332,9906],{"class":74},[30,26334,26335],{"class":321},"$VERSION_CODENAME",[30,26337,571],{"class":74},[30,26339,749],{"class":321},[30,26341,26342],{"class":74},"\" stable\"",[30,26344,25282],{"class":317},[30,26346,41],{"class":40},[30,26348,26349,26352,26355,26358,26361],{"class":32,"line":68},[30,26350,26351],{"class":36},"  sudo",[30,26353,26354],{"class":74}," tee",[30,26356,26357],{"class":74}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[30,26359,26360],{"class":317}," >",[30,26362,26363],{"class":74}," \u002Fdev\u002Fnull\n",[157,26365,26366],{},"最后安装",[20,26368,26370],{"className":22,"code":26369,"language":24,"meta":25,"style":25},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[27,26371,26372,26381],{"__ignoreMap":25},[30,26373,26374,26376,26378],{"class":32,"line":33},[30,26375,24757],{"class":36},[30,26377,26214],{"class":74},[30,26379,26380],{"class":74}," update\n",[30,26382,26383,26385,26387,26389,26392,26395,26398,26401],{"class":32,"line":44},[30,26384,24757],{"class":36},[30,26386,26214],{"class":74},[30,26388,24014],{"class":74},[30,26390,26391],{"class":74}," docker-ce",[30,26393,26394],{"class":74}," docker-ce-cli",[30,26396,26397],{"class":74}," containerd.io",[30,26399,26400],{"class":74}," docker-buildx-plugin",[30,26402,26403],{"class":74}," docker-compose-plugin\n",[22180,26405,26407],{"id":26406},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[157,26409,26410,26411,26414,26415,26418],{},"查看自己自己包管理工具版本（dnf是 ",[469,26412,26413],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[469,26416,26417],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[20,26420,26422],{"className":22,"code":26421,"language":24,"meta":25,"style":25},"dnf --version\n",[27,26423,26424],{"__ignoreMap":25},[30,26425,26426,26429],{"class":32,"line":33},[30,26427,26428],{"class":36},"dnf",[30,26430,26431],{"class":40}," --version\n",[157,26433,26157,26434,26438],{},[558,26435,26162],{"href":26436,"rel":26437},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24045]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[157,26440,26441],{},"如果你之前安装过 docker，请先删掉",[20,26443,26445],{"className":22,"code":26444,"language":24,"meta":25,"style":25},"sudo dnf remove docker \\\n                  docker-client \\\n                  docker-client-latest \\\n                  docker-common \\\n                  docker-latest \\\n                  docker-latest-logrotate \\\n                  docker-logrotate \\\n                  docker-selinux \\\n                  docker-engine-selinux \\\n                  docker-engine\n",[27,26446,26447,26461,26468,26475,26482,26489,26496,26503,26510,26517],{"__ignoreMap":25},[30,26448,26449,26451,26454,26456,26459],{"class":32,"line":33},[30,26450,24757],{"class":36},[30,26452,26453],{"class":74}," dnf",[30,26455,26217],{"class":74},[30,26457,26458],{"class":74}," docker",[30,26460,41],{"class":40},[30,26462,26463,26466],{"class":32,"line":44},[30,26464,26465],{"class":74},"                  docker-client",[30,26467,41],{"class":40},[30,26469,26470,26473],{"class":32,"line":52},[30,26471,26472],{"class":74},"                  docker-client-latest",[30,26474,41],{"class":40},[30,26476,26477,26480],{"class":32,"line":60},[30,26478,26479],{"class":74},"                  docker-common",[30,26481,41],{"class":40},[30,26483,26484,26487],{"class":32,"line":68},[30,26485,26486],{"class":74},"                  docker-latest",[30,26488,41],{"class":40},[30,26490,26491,26494],{"class":32,"line":80},[30,26492,26493],{"class":74},"                  docker-latest-logrotate",[30,26495,41],{"class":40},[30,26497,26498,26501],{"class":32,"line":88},[30,26499,26500],{"class":74},"                  docker-logrotate",[30,26502,41],{"class":40},[30,26504,26505,26508],{"class":32,"line":96},[30,26506,26507],{"class":74},"                  docker-selinux",[30,26509,41],{"class":40},[30,26511,26512,26515],{"class":32,"line":104},[30,26513,26514],{"class":74},"                  docker-engine-selinux",[30,26516,41],{"class":40},[30,26518,26519],{"class":32,"line":112},[30,26520,26521],{"class":74},"                  docker-engine\n",[157,26523,26524],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[20,26526,26528],{"className":22,"code":26527,"language":24,"meta":25,"style":25},"sudo dnf -y install dnf-plugins-core\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\nsudo sed -i 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+' \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[27,26529,26530,26544,26559],{"__ignoreMap":25},[30,26531,26532,26534,26536,26539,26541],{"class":32,"line":33},[30,26533,24757],{"class":36},[30,26535,26453],{"class":74},[30,26537,26538],{"class":40}," -y",[30,26540,24014],{"class":74},[30,26542,26543],{"class":74}," dnf-plugins-core\n",[30,26545,26546,26548,26550,26553,26556],{"class":32,"line":44},[30,26547,24757],{"class":36},[30,26549,26453],{"class":74},[30,26551,26552],{"class":74}," config-manager",[30,26554,26555],{"class":74}," addrepo",[30,26557,26558],{"class":40}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[30,26560,26561,26563,26566,26569,26572],{"class":32,"line":52},[30,26562,24757],{"class":36},[30,26564,26565],{"class":74}," sed",[30,26567,26568],{"class":40}," -i",[30,26570,26571],{"class":74}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[30,26573,26574],{"class":74}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[157,26576,26577],{},"最后安装：",[20,26579,26581],{"className":22,"code":26580,"language":24,"meta":25,"style":25},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[27,26582,26583],{"__ignoreMap":25},[30,26584,26585,26587,26589,26591,26593,26595,26597,26599],{"class":32,"line":33},[30,26586,24757],{"class":36},[30,26588,26453],{"class":74},[30,26590,24014],{"class":74},[30,26592,26391],{"class":74},[30,26594,26394],{"class":74},[30,26596,26397],{"class":74},[30,26598,26400],{"class":74},[30,26600,26403],{"class":74},[287,26602,26604],{"id":26603},"_22配置环境","2.2.配置环境",[22180,26606,26608,26611],{"id":26607},"_221检查-docker-服务状态",[469,26609,26610],{},"2.2.1.检查 Docker 服务状态"," ：",[157,26613,26614],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[20,26616,26618],{"className":22,"code":26617,"language":24,"meta":25,"style":25},"systemctl status docker\n",[27,26619,26620],{"__ignoreMap":25},[30,26621,26622,26625,26628],{"class":32,"line":33},[30,26623,26624],{"class":36},"systemctl",[30,26626,26627],{"class":74}," status",[30,26629,26630],{"class":74}," docker\n",[22180,26632,26634,26611],{"id":26633},"_222启动-docker-服务",[469,26635,26636],{},"2.2.2.启动 Docker 服务",[157,26638,26639],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[20,26641,26643],{"className":22,"code":26642,"language":24,"meta":25,"style":25},"sudo systemctl start docker\n",[27,26644,26645],{"__ignoreMap":25},[30,26646,26647,26649,26652,26654],{"class":32,"line":33},[30,26648,24757],{"class":36},[30,26650,26651],{"class":74}," systemctl",[30,26653,4366],{"class":74},[30,26655,26630],{"class":74},[22180,26657,26659,26611],{"id":26658},"_223设置-docker-开机自启",[469,26660,26661],{},"2.2.3.设置 Docker 开机自启",[157,26663,26664],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[20,26666,26668],{"className":22,"code":26667,"language":24,"meta":25,"style":25},"sudo systemctl enable docker\n",[27,26669,26670],{"__ignoreMap":25},[30,26671,26672,26674,26676,26679],{"class":32,"line":33},[30,26673,24757],{"class":36},[30,26675,26651],{"class":74},[30,26677,26678],{"class":74}," enable",[30,26680,26630],{"class":74},[22180,26682,26684,13977,26687,13977,26692,26611],{"id":26683},"_224将用户添加到-docker-组",[469,26685,26686],{},"2.2.4.将用户添加到",[469,26688,26689],{},[27,26690,26691],{},"docker",[469,26693,26694],{},"组",[157,26696,26697,26698,26700],{},"使用以下命令将当前用户添加到 ",[27,26699,26691],{}," 组：",[20,26702,26704],{"className":22,"code":26703,"language":24,"meta":25,"style":25},"sudo usermod -aG docker $USER\n",[27,26705,26706],{"__ignoreMap":25},[30,26707,26708,26710,26713,26716,26718],{"class":32,"line":33},[30,26709,24757],{"class":36},[30,26711,26712],{"class":74}," usermod",[30,26714,26715],{"class":40}," -aG",[30,26717,26458],{"class":74},[30,26719,26720],{"class":321}," $USER\n",[22180,26722,26724,26611],{"id":26723},"_225退出并重新登录",[469,26725,26726],{},"2.2.5.退出并重新登录",[157,26728,26729],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[20,26731,26733],{"className":22,"code":26732,"language":24,"meta":25,"style":25},"newgrp docker\n",[27,26734,26735],{"__ignoreMap":25},[30,26736,26737,26740],{"class":32,"line":33},[30,26738,26739],{"class":36},"newgrp",[30,26741,26630],{"class":74},[22180,26743,26745,26611],{"id":26744},"_226重新启动-docker-服务如果需要",[469,26746,26747],{},"2.2.6.重新启动 Docker 服务（如果需要）",[157,26749,26750],{},"确保 Docker 服务正在运行，可以使用以下命令：",[20,26752,26753],{"className":22,"code":26642,"language":24,"meta":25,"style":25},[27,26754,26755],{"__ignoreMap":25},[30,26756,26757,26759,26761,26763],{"class":32,"line":33},[30,26758,24757],{"class":36},[30,26760,26651],{"class":74},[30,26762,4366],{"class":74},[30,26764,26630],{"class":74},[22180,26766,26768,26611],{"id":26767},"_227重启电脑后检查-docker-服务状态",[469,26769,26770],{},"2.2.7.重启电脑后检查 Docker 服务状态",[157,26772,26773],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[20,26775,26777],{"className":22,"code":26776,"language":24,"meta":25,"style":25},"sudo reboot\nsystemctl status docker\n",[27,26778,26779,26786],{"__ignoreMap":25},[30,26780,26781,26783],{"class":32,"line":33},[30,26782,24757],{"class":36},[30,26784,26785],{"class":74}," reboot\n",[30,26787,26788,26790,26792],{"class":32,"line":44},[30,26789,26624],{"class":36},[30,26791,26627],{"class":74},[30,26793,26630],{"class":74},[157,26795,26796],{},[160,26797],{"alt":25,"src":26798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[157,26800,26801],{},"第三行显示enabled说明开机自启动成功",[157,26803,26804],{},"按q退出",[287,26806,26808],{"id":26807},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[157,26810,26811],{},"优先使用linux来使用docker是比较好的",[157,26813,26814],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[157,26816,26817],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[157,26819,26820,26821],{},"官方下载安装:",[558,26822,26823],{"href":26823,"rel":26824},"https:\u002F\u002Fwww.docker.com\u002F",[24045],[157,26826,26827],{},"Windows的Docker显卡直通与USB直通:",[157,26829,26830],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[157,26832,26833],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[157,26835,26836],{},[160,26837],{"alt":25,"src":26838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[157,26840,26841],{},[160,26842],{"alt":25,"src":26843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[157,26845,26846],{},[160,26847],{"alt":25,"src":26848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[234,26850,26851],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":25,"searchDepth":44,"depth":44,"links":26853},[26854,26855,26856],{"id":26131,"depth":52,"text":26132},{"id":26603,"depth":52,"text":26604},{"id":26807,"depth":52,"text":26808},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26123,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26863,"title":26864,"body":26865,"description":26872,"extension":243,"meta":27565,"navigation":245,"path":27566,"seo":27567,"stem":27568,"__hash__":27569},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26866,"toc":27559},[26867,26870,26873,26877,26882,26887,26890,26918,26923,26932,26935,26940,26944,26951,26956,26962,26966,26969,26973,26978,27070,27075,27093,27098,27119,27124,27140,27144,27149,27178,27183,27229,27234,27278,27286,27303,27308,27324,27329,27343,27346,27349,27352,27355,27384,27387,27392,27396,27399,27402,27408,27411,27414,27417,27479,27486,27491,27494,27512,27516,27519,27536,27539,27542,27556],[10,26868,26864],{"id":26869},"_3docker直通",[157,26871,26872],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[287,26874,26876],{"id":26875},"_31usb直通","3.1.USB直通",[157,26878,26879],{},[160,26880],{"alt":25,"src":26881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[271,26883,26884],{},[150,26885,26886],{},"方法一(不是很推荐新手)：",[157,26888,26889],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[20,26891,26893],{"className":22,"code":26892,"language":24,"meta":25,"style":25},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[27,26894,26895,26903,26908],{"__ignoreMap":25},[30,26896,26897,26900],{"class":32,"line":33},[30,26898,26899],{"class":36},"ls",[30,26901,26902],{"class":74}," \u002Fdev\n",[30,26904,26905],{"class":32,"line":44},[30,26906,26907],{"class":379},"#例如\n",[30,26909,26910,26913,26915],{"class":32,"line":52},[30,26911,26912],{"class":321},"--device",[30,26914,367],{"class":317},[30,26916,26917],{"class":74},"\u002Fdev\u002Ftty_USB0\n",[271,26919,26920],{"start":44},[150,26921,26922],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[20,26924,26926],{"className":22,"code":26925,"language":24,"meta":25,"style":25},"--privileged\n",[27,26927,26928],{"__ignoreMap":25},[30,26929,26930],{"class":32,"line":33},[30,26931,26925],{"class":36},[157,26933,26934],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[157,26936,26937],{},[160,26938],{"alt":25,"src":26939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[287,26941,26943],{"id":26942},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[157,26945,26946,26947,26950],{},"NVIDIA Container Toolkit使用户 ",[469,26948,26949],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[157,26952,26953],{},[160,26954],{"alt":25,"src":26955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[157,26957,26958],{},[558,26959,26960],{"href":26960,"rel":26961},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24045],[22180,26963,26965],{"id":26964},"_321安装","3.2.1.安装",[157,26967,26968],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23092,26970,26972],{"id":26971},"_3211ubuntu","3.2.1.1.Ubuntu",[271,26974,26975],{},[150,26976,26977],{},"配置存储库 并更新",[20,26979,26981],{"className":22,"code":26980,"language":24,"meta":25,"style":25},"curl -fsSL https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg \\\n  && curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list | \\\n    sed 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g' | \\\n    sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list \\\n  && \\\n    sudo apt-get update\n",[27,26982,26983,27012,27032,27044,27056,27062],{"__ignoreMap":25},[30,26984,26985,26988,26991,26994,26996,26998,27001,27004,27007,27010],{"class":32,"line":33},[30,26986,26987],{"class":36},"curl",[30,26989,26990],{"class":40}," -fsSL",[30,26992,26993],{"class":74}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[30,26995,25282],{"class":317},[30,26997,26211],{"class":36},[30,26999,27000],{"class":74}," gpg",[30,27002,27003],{"class":40}," --dearmor",[30,27005,27006],{"class":40}," -o",[30,27008,27009],{"class":74}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[30,27011,41],{"class":40},[30,27013,27014,27017,27019,27022,27025,27028,27030],{"class":32,"line":44},[30,27015,27016],{"class":321},"  && ",[30,27018,26987],{"class":36},[30,27020,27021],{"class":40}," -s",[30,27023,27024],{"class":40}," -L",[30,27026,27027],{"class":74}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[30,27029,25282],{"class":317},[30,27031,41],{"class":40},[30,27033,27034,27037,27040,27042],{"class":32,"line":52},[30,27035,27036],{"class":36},"    sed",[30,27038,27039],{"class":74}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[30,27041,25282],{"class":317},[30,27043,41],{"class":40},[30,27045,27046,27049,27051,27054],{"class":32,"line":60},[30,27047,27048],{"class":36},"    sudo",[30,27050,26354],{"class":74},[30,27052,27053],{"class":74}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[30,27055,41],{"class":40},[30,27057,27058,27060],{"class":32,"line":68},[30,27059,27016],{"class":321},[30,27061,26313],{"class":40},[30,27063,27064,27066,27068],{"class":32,"line":80},[30,27065,27048],{"class":36},[30,27067,26214],{"class":74},[30,27069,26380],{"class":74},[271,27071,27072],{"start":44},[150,27073,27074],{},"安装nvidia-docker2",[20,27076,27078],{"className":22,"code":27077,"language":24,"meta":25,"style":25},"sudo apt-get install -y nvidia-docker2\n",[27,27079,27080],{"__ignoreMap":25},[30,27081,27082,27084,27086,27088,27090],{"class":32,"line":33},[30,27083,24757],{"class":36},[30,27085,26214],{"class":74},[30,27087,24014],{"class":74},[30,27089,26538],{"class":40},[30,27091,27092],{"class":74}," nvidia-docker2\n",[271,27094,27095],{"start":52},[150,27096,27097],{},"使用nvidia-ctk命令配置container runtime",[20,27099,27101],{"className":22,"code":27100,"language":24,"meta":25,"style":25},"sudo nvidia-ctk runtime configure --runtime=docker\n",[27,27102,27103],{"__ignoreMap":25},[30,27104,27105,27107,27110,27113,27116],{"class":32,"line":33},[30,27106,24757],{"class":36},[30,27108,27109],{"class":74}," nvidia-ctk",[30,27111,27112],{"class":74}," runtime",[30,27114,27115],{"class":74}," configure",[30,27117,27118],{"class":40}," --runtime=docker\n",[271,27120,27121],{"start":60},[150,27122,27123],{},"重启docker服务:",[20,27125,27127],{"className":22,"code":27126,"language":24,"meta":25,"style":25},"sudo systemctl restart docker\n",[27,27128,27129],{"__ignoreMap":25},[30,27130,27131,27133,27135,27138],{"class":32,"line":33},[30,27132,24757],{"class":36},[30,27134,26651],{"class":74},[30,27136,27137],{"class":74}," restart",[30,27139,26630],{"class":74},[23092,27141,27143],{"id":27142},"_3212fedora","3.2.1.2.Fedora",[271,27145,27146],{},[150,27147,27148],{},"配置存储库",[20,27150,27152],{"className":22,"code":27151,"language":24,"meta":25,"style":25},"curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo | \\\nsudo tee \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[27,27153,27154,27169],{"__ignoreMap":25},[30,27155,27156,27158,27160,27162,27165,27167],{"class":32,"line":33},[30,27157,26987],{"class":36},[30,27159,27021],{"class":40},[30,27161,27024],{"class":40},[30,27163,27164],{"class":74}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[30,27166,25282],{"class":317},[30,27168,41],{"class":40},[30,27170,27171,27173,27175],{"class":32,"line":44},[30,27172,24757],{"class":36},[30,27174,26354],{"class":74},[30,27176,27177],{"class":74}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[271,27179,27180],{"start":44},[150,27181,27182],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[20,27184,27186],{"className":22,"code":27185,"language":24,"meta":25,"style":25},"# 如果是RHEL或者Rocky（DNF4）\nsudo dnf config-manager --add-repo https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n\n# 如果是Feodra41+（DNF5）\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[27,27187,27188,27193,27207,27211,27216],{"__ignoreMap":25},[30,27189,27190],{"class":32,"line":33},[30,27191,27192],{"class":379},"# 如果是RHEL或者Rocky（DNF4）\n",[30,27194,27195,27197,27199,27201,27204],{"class":32,"line":44},[30,27196,24757],{"class":36},[30,27198,26453],{"class":74},[30,27200,26552],{"class":74},[30,27202,27203],{"class":40}," --add-repo",[30,27205,27206],{"class":74}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[30,27208,27209],{"class":32,"line":52},[30,27210,2582],{"emptyLinePlaceholder":245},[30,27212,27213],{"class":32,"line":60},[30,27214,27215],{"class":379},"# 如果是Feodra41+（DNF5）\n",[30,27217,27218,27220,27222,27224,27226],{"class":32,"line":68},[30,27219,24757],{"class":36},[30,27221,26453],{"class":74},[30,27223,26552],{"class":74},[30,27225,26555],{"class":74},[30,27227,27228],{"class":40}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[271,27230,27231],{"start":52},[150,27232,27233],{},"安装NVIDIA Container Toolki包",[20,27235,27237],{"className":22,"code":27236,"language":24,"meta":25,"style":25},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[27,27238,27239,27244,27257,27261,27266],{"__ignoreMap":25},[30,27240,27241],{"class":32,"line":33},[30,27242,27243],{"class":379},"# 如果是RHEL或者Rocky\n",[30,27245,27246,27248,27250,27252,27254],{"class":32,"line":44},[30,27247,24757],{"class":36},[30,27249,26453],{"class":74},[30,27251,24014],{"class":74},[30,27253,26538],{"class":40},[30,27255,27256],{"class":74}," nvidia-container-toolkit\n",[30,27258,27259],{"class":32,"line":52},[30,27260,2582],{"emptyLinePlaceholder":245},[30,27262,27263],{"class":32,"line":60},[30,27264,27265],{"class":379},"# 如果是Fedora\n",[30,27267,27268,27270,27272,27274,27276],{"class":32,"line":68},[30,27269,24757],{"class":36},[30,27271,26453],{"class":74},[30,27273,24014],{"class":74},[30,27275,26538],{"class":40},[30,27277,27256],{"class":74},[271,27279,27280],{"start":60},[150,27281,27282,27283,27285],{},"安装nvidia-docker2 ： 在Fedora上使用",[27,27284,26428],{},"进行安装",[20,27287,27289],{"className":22,"code":27288,"language":24,"meta":25,"style":25},"sudo dnf install -y nvidia-docker2\n",[27,27290,27291],{"__ignoreMap":25},[30,27292,27293,27295,27297,27299,27301],{"class":32,"line":33},[30,27294,24757],{"class":36},[30,27296,26453],{"class":74},[30,27298,24014],{"class":74},[30,27300,26538],{"class":40},[30,27302,27092],{"class":74},[271,27304,27305],{"start":68},[150,27306,27307],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[20,27309,27310],{"className":22,"code":27100,"language":24,"meta":25,"style":25},[27,27311,27312],{"__ignoreMap":25},[30,27313,27314,27316,27318,27320,27322],{"class":32,"line":33},[30,27315,24757],{"class":36},[30,27317,27109],{"class":74},[30,27319,27112],{"class":74},[30,27321,27115],{"class":74},[30,27323,27118],{"class":40},[271,27325,27326],{"start":80},[150,27327,27328],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[20,27330,27331],{"className":22,"code":27126,"language":24,"meta":25,"style":25},[27,27332,27333],{"__ignoreMap":25},[30,27334,27335,27337,27339,27341],{"class":32,"line":33},[30,27336,24757],{"class":36},[30,27338,26651],{"class":74},[30,27340,27137],{"class":74},[30,27342,26630],{"class":74},[157,27344,27345],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[157,27347,27348],{},"方法：",[157,27350,27351],{},"1️⃣nvidia-smi",[157,27353,27354],{},"2️⃣运行nvidia cuda 容器进行测试",[20,27356,27358],{"className":22,"code":27357,"language":24,"meta":25,"style":25},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[27,27359,27360],{"__ignoreMap":25},[30,27361,27362,27364,27366,27369,27372,27375,27378,27381],{"class":32,"line":33},[30,27363,24757],{"class":36},[30,27365,26458],{"class":74},[30,27367,27368],{"class":74}," run",[30,27370,27371],{"class":40}," --rm",[30,27373,27374],{"class":40}," --gpus",[30,27376,27377],{"class":74}," all",[30,27379,27380],{"class":74}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[30,27382,27383],{"class":74}," nvidia-smi\n",[157,27385,27386],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[157,27388,27389],{},[160,27390],{"alt":25,"src":27391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[287,27393,27395],{"id":27394},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[157,27397,27398],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[157,27400,27401],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[157,27403,27404],{},[558,27405,27406],{"href":27406,"rel":27407},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24045],[157,27409,27410],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[157,27412,27413],{},"我们只需要找到对应的Docker镜像当底包即可。",[157,27415,27416],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[457,27418,27419,27435],{},[460,27420,27421],{},[463,27422,27423,27426,27429,27432],{},[466,27424,27425],{"align":23918},"镜像类型",[466,27427,27428],{"align":23918},"适用场景",[466,27430,27431],{"align":23918},"示例标签",[466,27433,27434],{"align":23918},"大小",[504,27436,27437,27451,27465],{},[463,27438,27439,27442,27445,27448],{},[509,27440,27441],{"align":23918},"base",[509,27443,27444],{"align":23918},"仅需 CUDA 运行时库",[509,27446,27447],{"align":23918},"12.4.0-base-ubuntu22.04",[509,27449,27450],{"align":23918},"~240MB",[463,27452,27453,27456,27459,27462],{},[509,27454,27455],{"align":23918},"runtime",[509,27457,27458],{"align":23918},"部署编译后的应用（含数学库）",[509,27460,27461],{"align":23918},"12.4.0-runtime-ubuntu22.04",[509,27463,27464],{"align":23918},"~2GB",[463,27466,27467,27470,27473,27476],{},[509,27468,27469],{"align":23918},"devel",[509,27471,27472],{"align":23918},"开发环境（含编译工具）",[509,27474,27475],{"align":23918},"12.4.0-devel-ubuntu22.04",[509,27477,27478],{"align":23918},"~3GB",[157,27480,27481,27482,27485],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[27,27483,27484],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[157,27487,27488],{},[160,27489],{"alt":25,"src":27490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[157,27492,27493],{},"在dockerfile里就可以开头这么写：",[20,27495,27497],{"className":22,"code":27496,"language":24,"meta":25,"style":25},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[27,27498,27499,27504],{"__ignoreMap":25},[30,27500,27501],{"class":32,"line":33},[30,27502,27503],{"class":379},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[30,27505,27506,27509],{"class":32,"line":44},[30,27507,27508],{"class":36},"FROM",[30,27510,27511],{"class":74}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[287,27513,27515],{"id":27514},"_34配置以太网","3.4.配置以太网",[157,27517,27518],{},"指定网络模式",[20,27520,27522],{"className":22,"code":27521,"language":24,"meta":25,"style":25},"--net=host \\\n",[27,27523,27524],{"__ignoreMap":25},[30,27525,27526,27529,27531,27534],{"class":32,"line":33},[30,27527,27528],{"class":321},"--net",[30,27530,367],{"class":317},[30,27532,27533],{"class":74},"host",[30,27535,41],{"class":36},[157,27537,27538],{},"启动参数里加上这行即可。具体在下方",[157,27540,27541],{},"--net选项：指定网络模式，该选项有以下参数可选：",[147,27543,27544,27547,27550,27553],{},[150,27545,27546],{},"--net=bridge:默认选项，表示连接到默认的网桥",[150,27548,27549],{},"--net=host:容器使用宿主机的网络",[150,27551,27552],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[150,27554,27555],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[234,27557,27558],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":25,"searchDepth":44,"depth":44,"links":27560},[27561,27562,27563,27564],{"id":26875,"depth":52,"text":26876},{"id":26942,"depth":52,"text":26943},{"id":27394,"depth":52,"text":27395},{"id":27514,"depth":52,"text":27515},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26864,"description":26872},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27571,"title":27572,"body":27573,"description":27580,"extension":243,"meta":27586,"navigation":245,"path":27587,"seo":27588,"stem":27589,"__hash__":27590},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27574,"toc":27584},[27575,27578,27581],[10,27576,27572],{"id":27577},"_4dockerhub换源",[157,27579,27580],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[157,27582,27583],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":25,"searchDepth":44,"depth":44,"links":27585},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27572,"description":27580},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27592,"title":27593,"body":27594,"description":25,"extension":243,"meta":28606,"navigation":245,"path":28607,"seo":28608,"stem":28609,"__hash__":28610},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27595,"toc":28601},[27596,27599,27603,27609,27613,27616,27956,27959,27962,27965,27970,27975,27978,27981,27984,27987,28006,28009,28020,28026,28208,28218,28234,28497,28499,28524,28539,28548,28598],[10,27597,27593],{"id":27598},"_5docker命令学习",[287,27600,27602],{"id":27601},"_51参考文档","5.1.参考文档",[157,27604,27605],{},[558,27606,27607],{"href":27607,"rel":27608},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24045],[287,27610,27612],{"id":27611},"_52常用命令","5.2.常用命令",[157,27614,27615],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[457,27617,27618,27631],{},[460,27619,27620],{},[463,27621,27622,27625,27628],{},[466,27623,27624],{"align":23918},"命令",[466,27626,27627],{"align":23918},"描述",[466,27629,27630],{"align":23918},"示例",[504,27632,27633,27644,27655,27666,27677,27688,27699,27710,27720,27731,27742,27753,27763,27774,27785,27796,27806,27816,27826,27836,27847,27858,27869,27880,27891,27902,27912,27923,27934,27945],{},[463,27634,27635,27638,27641],{},[509,27636,27637],{"align":23918},"docker run",[509,27639,27640],{"align":23918},"创建并启动一个新的容器。",[509,27642,27643],{"align":23918},"docker run -it ubuntu bash",[463,27645,27646,27649,27652],{},[509,27647,27648],{"align":23918},"docker build",[509,27650,27651],{"align":23918},"通过指定的 Dockerfile 创建一个新的镜像。",[509,27653,27654],{"align":23918},"docker build -t myimage .",[463,27656,27657,27660,27663],{},[509,27658,27659],{"align":23918},"docker pull",[509,27661,27662],{"align":23918},"从 Docker 仓库拉取镜像。",[509,27664,27665],{"align":23918},"docker pull ubuntu",[463,27667,27668,27671,27674],{},[509,27669,27670],{"align":23918},"docker push",[509,27672,27673],{"align":23918},"将本地镜像推送到 Docker 仓库。",[509,27675,27676],{"align":23918},"docker push myimage",[463,27678,27679,27682,27685],{},[509,27680,27681],{"align":23918},"docker stop",[509,27683,27684],{"align":23918},"停止一个正在运行的容器。",[509,27686,27687],{"align":23918},"docker stop container_id",[463,27689,27690,27693,27696],{},[509,27691,27692],{"align":23918},"docker start",[509,27694,27695],{"align":23918},"启动一个已经存在的容器。",[509,27697,27698],{"align":23918},"docker start container_id",[463,27700,27701,27704,27707],{},[509,27702,27703],{"align":23918},"docker restart",[509,27705,27706],{"align":23918},"重新启动容器。",[509,27708,27709],{"align":23918},"docker restart container_id",[463,27711,27712,27715,27718],{},[509,27713,27714],{"align":23918},"docker ps",[509,27716,27717],{"align":23918},"列出当前正在运行的容器。",[509,27719,27714],{"align":23918},[463,27721,27722,27725,27728],{},[509,27723,27724],{"align":23918},"docker rm",[509,27726,27727],{"align":23918},"删除一个或多个停止的容器。",[509,27729,27730],{"align":23918},"docker rm container_id",[463,27732,27733,27736,27739],{},[509,27734,27735],{"align":23918},"docker exec",[509,27737,27738],{"align":23918},"在一个正在运行的容器中执行命令。",[509,27740,27741],{"align":23918},"docker exec -it container_id bash",[463,27743,27744,27747,27750],{},[509,27745,27746],{"align":23918},"docker logs",[509,27748,27749],{"align":23918},"查看容器的日志输出。",[509,27751,27752],{"align":23918},"docker logs container_id",[463,27754,27755,27758,27761],{},[509,27756,27757],{"align":23918},"docker images",[509,27759,27760],{"align":23918},"列出本地所有镜像。",[509,27762,27757],{"align":23918},[463,27764,27765,27768,27771],{},[509,27766,27767],{"align":23918},"docker rmi",[509,27769,27770],{"align":23918},"删除一个或多个镜像。",[509,27772,27773],{"align":23918},"docker rmi myimage",[463,27775,27776,27779,27782],{},[509,27777,27778],{"align":23918},"docker network",[509,27780,27781],{"align":23918},"管理 Docker 网络。",[509,27783,27784],{"align":23918},"docker network ls",[463,27786,27787,27790,27793],{},[509,27788,27789],{"align":23918},"docker volume",[509,27791,27792],{"align":23918},"管理 Docker 数据卷。",[509,27794,27795],{"align":23918},"docker volume ls",[463,27797,27798,27801,27804],{},[509,27799,27800],{"align":23918},"docker-compose up",[509,27802,27803],{"align":23918},"启动 docker-compose.yml 中定义的所有服务。",[509,27805,27800],{"align":23918},[463,27807,27808,27811,27814],{},[509,27809,27810],{"align":23918},"docker-compose down",[509,27812,27813],{"align":23918},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[509,27815,27810],{"align":23918},[463,27817,27818,27821,27824],{},[509,27819,27820],{"align":23918},"docker info",[509,27822,27823],{"align":23918},"显示 Docker 系统的详细信息。",[509,27825,27820],{"align":23918},[463,27827,27828,27831,27834],{},[509,27829,27830],{"align":23918},"docker stats",[509,27832,27833],{"align":23918},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[509,27835,27830],{"align":23918},[463,27837,27838,27841,27844],{},[509,27839,27840],{"align":23918},"docker inspect",[509,27842,27843],{"align":23918},"查看容器或镜像的详细信息（JSON 格式）。",[509,27845,27846],{"align":23918},"docker inspect container_id",[463,27848,27849,27852,27855],{},[509,27850,27851],{"align":23918},"docker save",[509,27853,27854],{"align":23918},"将一个镜像保存为 tar 文件。",[509,27856,27857],{"align":23918},"docker save -o myimage.tar myimage",[463,27859,27860,27863,27866],{},[509,27861,27862],{"align":23918},"docker load",[509,27864,27865],{"align":23918},"从 tar 文件中加载镜像。",[509,27867,27868],{"align":23918},"docker load -i myimage.tar",[463,27870,27871,27874,27877],{},[509,27872,27873],{"align":23918},"docker tag",[509,27875,27876],{"align":23918},"为镜像添加标签（tag）。",[509,27878,27879],{"align":23918},"docker tag myimage myimage:v1",[463,27881,27882,27885,27888],{},[509,27883,27884],{"align":23918},"docker buildx build",[509,27886,27887],{"align":23918},"使用 Buildx 构建多架构镜像。",[509,27889,27890],{"align":23918},"docker buildx build -t myimage .",[463,27892,27893,27896,27899],{},[509,27894,27895],{"align":23918},"docker buildx create",[509,27897,27898],{"align":23918},"创建一个新的 Buildx 构建实例。",[509,27900,27901],{"align":23918},"docker buildx create –use",[463,27903,27904,27907,27910],{},[509,27905,27906],{"align":23918},"docker buildx ls",[509,27908,27909],{"align":23918},"列出所有可用的 Buildx 构建实例。",[509,27911,27906],{"align":23918},[463,27913,27914,27917,27920],{},[509,27915,27916],{"align":23918},"docker buildx use",[509,27918,27919],{"align":23918},"设置当前的 Buildx 构建实例。",[509,27921,27922],{"align":23918},"docker buildx use mybuilder",[463,27924,27925,27928,27931],{},[509,27926,27927],{"align":23918},"docker buildx bake",[509,27929,27930],{"align":23918},"使用 Bake 文件批量构建镜像。",[509,27932,27933],{"align":23918},"docker buildx bake -f bake.hcl",[463,27935,27936,27939,27942],{},[509,27937,27938],{"align":23918},"docker buildx build –push",[509,27940,27941],{"align":23918},"构建镜像并推送到镜像仓库。",[509,27943,27944],{"align":23918},"docker buildx build –push -t myimage .",[463,27946,27947,27950,27953],{},[509,27948,27949],{"align":23918},"docker buildx build –platform",[509,27951,27952],{"align":23918},"构建镜像并为多个平台生成支持。",[509,27954,27955],{"align":23918},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[157,27957,27958],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[157,27960,27961],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[157,27963,27964],{},"docker images 可以查看已经下载的镜像",[157,27966,27967],{},[160,27968],{"alt":25,"src":27969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[157,27971,27972],{},[469,27973,27974],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[157,27976,27977],{},"docker rmi $(docker images -q) 删除所有的镜像",[157,27979,27980],{},"docker container logs 查看容器日志",[157,27982,27983],{},"docker top 查看容器里的进程",[157,27985,27986],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[20,27988,27990],{"className":22,"code":27989,"language":24,"meta":25,"style":25},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[27,27991,27992],{"__ignoreMap":25},[30,27993,27994,27997,28000,28003],{"class":32,"line":33},[30,27995,27996],{"class":36},"如：docker",[30,27998,27999],{"class":74}," cp",[30,28001,28002],{"class":74}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[30,28004,28005],{"class":74}," \u002Fmydata\u002Fnginx\n",[157,28007,28008],{},"docker run时在启动容器的时候会有几个常用的选项：",[147,28010,28011,28014,28017],{},[150,28012,28013],{},"-d选项：表示后台运行",[150,28015,28016],{},"-P选项：随机端口映射",[150,28018,28019],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[287,28021,28023],{"id":28022},"_53run命令的参数非常重要",[469,28024,28025],{},"5.3.run命令的参数（非常重要）",[457,28027,28028,28041],{},[460,28029,28030],{},[463,28031,28032,28035,28038],{},[466,28033,28034],{"align":23918},"参数\u002F配置",[466,28036,28037],{"align":23918},"功能说明",[466,28039,28040],{"align":23918},"重要性与参考依据",[504,28042,28043,28054,28065,28076,28087,28098,28109,28120,28131,28142,28153,28164,28175,28186,28197],{},[463,28044,28045,28048,28051],{},[509,28046,28047],{"align":23918},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[509,28049,28050],{"align":23918},"指定容器名称，便于后续管理",[509,28052,28053],{"align":23918},"替代随机生成的容器名。",[463,28055,28056,28059,28062],{},[509,28057,28058],{"align":23918},"–gpus all",[509,28060,28061],{"align":23918},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[509,28063,28064],{"align":23918},"用于CUDA加速等GPU依赖任务。",[463,28066,28067,28070,28073],{},[509,28068,28069],{"align":23918},"-e NVIDIA_DRIVER_CAPABILITIES=all",[509,28071,28072],{"align":23918},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[509,28074,28075],{"align":23918},"确保容器内GPU功能完整67。",[463,28077,28078,28081,28084],{},[509,28079,28080],{"align":23918},"-dit",[509,28082,28083],{"align":23918},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[509,28085,28086],{"align":23918},"允许容器在后台运行并支持交互操作。",[463,28088,28089,28092,28095],{},[509,28090,28091],{"align":23918},"–privileged",[509,28093,28094],{"align":23918},"赋予容器完全主机权限（可访问设备、内核模块等）",[509,28096,28097],{"align":23918},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[463,28099,28100,28103,28106],{},[509,28101,28102],{"align":23918},"–net=host",[509,28104,28105],{"align":23918},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[509,28107,28108],{"align":23918},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[463,28110,28111,28114,28117],{},[509,28112,28113],{"align":23918},"–group-add audio–group-add video–group-add dialout",[509,28115,28116],{"align":23918},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[509,28118,28119],{"align":23918},"避免权限问题（如避免无法调用摄像头、麦克风）。",[463,28121,28122,28125,28128],{},[509,28123,28124],{"align":23918},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[509,28126,28127],{"align":23918},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[509,28129,28130],{"align":23918},"支持容器内运行图形界面应用（如OpenCV可视化）。",[463,28132,28133,28136,28139],{},[509,28134,28135],{"align":23918},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[509,28137,28138],{"align":23918},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[509,28140,28141],{"align":23918},"实现容器内图形显示。",[463,28143,28144,28147,28150],{},[509,28145,28146],{"align":23918},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[509,28148,28149],{"align":23918},"挂载X11认证文件（只读）",[509,28151,28152],{"align":23918},"确保容器有权连接宿主机显示服务。",[463,28154,28155,28158,28161],{},[509,28156,28157],{"align":23918},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[509,28159,28160],{"align":23918},"挂载Wayland显示协议相关目录",[509,28162,28163],{"align":23918},"支持Wayland协议的图形显示。",[463,28165,28166,28169,28172],{},[509,28167,28168],{"align":23918},"–ulimit nofile=1024:524288",[509,28170,28171],{"align":23918},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[509,28173,28174],{"align":23918},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[463,28176,28177,28180,28183],{},[509,28178,28179],{"align":23918},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[509,28181,28182],{"align":23918},"挂载宿主机用户目录到容器内同名路径",[509,28184,28185],{"align":23918},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[463,28187,28188,28191,28194],{},[509,28189,28190],{"align":23918},"-w \u002Fhome\u002Ftungchiahui",[509,28192,28193],{"align":23918},"设置容器启动后的默认工作目录",[509,28195,28196],{"align":23918},"直接进入项目路径，方便执行命令2324。",[463,28198,28199,28202,28205],{},[509,28200,28201],{"align":23918},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[509,28203,28204],{"align":23918},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[509,28206,28207],{"align":23918},"提供预配置的深度学习与机器人开发环境。",[157,28209,28210,28211,28213,28214,28217],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[27,28212,24757],{},"加不加",[27,28215,28216],{},"sudo -E","都无所谓。",[157,28219,28220,28221,28223,28224,28226,28227,28230,28231,28233],{},"用户已经被加到docker组了，不用",[27,28222,24757],{},"也行跑，其次，",[27,28225,24757],{},"运行的话，你的",[27,28228,28229],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[27,28232,28229],{},"更不可能变了。",[20,28235,28237],{"className":22,"code":28236,"language":24,"meta":25,"style":25},"sudo docker run --name=ros_opencv_cuda \\\n--gpus all \\\n-e NVIDIA_DRIVER_CAPABILITIES=all \\\n-e DISPLAY=$DISPLAY \\\n-dit \\\n--privileged \\\n--net=host \\\n--group-add audio \\\n--group-add video \\\n--group-add dialout \\\n-e XAUTHORITY=$HOME\u002F.Xauthority \\\n-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \\\n-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \\\n-e QT_QPA_PLATFORM=xcb \\\n-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw \\\n-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri \\\n-v $HOME\u002F.Xauthority:$HOME\u002F.Xauthority:ro \\\n-v \u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0:\u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0 \\\n-v \u002Frun\u002Fuser\u002F$(id -u):\u002Frun\u002Fuser\u002F$(id -u) \\\n-v $HOME:$HOME \\\n-w $HOME \\\ntungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[27,28238,28239,28252,28262,28272,28284,28291,28298,28305,28315,28324,28333,28347,28359,28371,28380,28390,28399,28414,28447,28474,28485,28492],{"__ignoreMap":25},[30,28240,28241,28243,28245,28247,28250],{"class":32,"line":33},[30,28242,24757],{"class":36},[30,28244,26458],{"class":74},[30,28246,27368],{"class":74},[30,28248,28249],{"class":40}," --name=ros_opencv_cuda",[30,28251,41],{"class":40},[30,28253,28254,28257,28260],{"class":32,"line":44},[30,28255,28256],{"class":321},"--gpus ",[30,28258,28259],{"class":74},"all",[30,28261,41],{"class":40},[30,28263,28264,28267,28270],{"class":32,"line":52},[30,28265,28266],{"class":321},"-e ",[30,28268,28269],{"class":74},"NVIDIA_DRIVER_CAPABILITIES=all",[30,28271,41],{"class":40},[30,28273,28274,28276,28279,28282],{"class":32,"line":60},[30,28275,28266],{"class":321},[30,28277,28278],{"class":74},"DISPLAY=",[30,28280,28281],{"class":321},"$DISPLAY ",[30,28283,26313],{"class":40},[30,28285,28286,28289],{"class":32,"line":68},[30,28287,28288],{"class":321},"-dit ",[30,28290,26313],{"class":40},[30,28292,28293,28296],{"class":32,"line":80},[30,28294,28295],{"class":321},"--privileged ",[30,28297,26313],{"class":40},[30,28299,28300,28303],{"class":32,"line":88},[30,28301,28302],{"class":321},"--net=host ",[30,28304,26313],{"class":40},[30,28306,28307,28310,28313],{"class":32,"line":96},[30,28308,28309],{"class":321},"--group-add ",[30,28311,28312],{"class":74},"audio",[30,28314,41],{"class":40},[30,28316,28317,28319,28322],{"class":32,"line":104},[30,28318,28309],{"class":321},[30,28320,28321],{"class":74},"video",[30,28323,41],{"class":40},[30,28325,28326,28328,28331],{"class":32,"line":112},[30,28327,28309],{"class":321},[30,28329,28330],{"class":74},"dialout",[30,28332,41],{"class":40},[30,28334,28335,28337,28340,28342,28345],{"class":32,"line":123},[30,28336,28266],{"class":321},[30,28338,28339],{"class":74},"XAUTHORITY=",[30,28341,28229],{"class":321},[30,28343,28344],{"class":74},"\u002F.Xauthority",[30,28346,41],{"class":40},[30,28348,28349,28351,28354,28357],{"class":32,"line":131},[30,28350,28266],{"class":321},[30,28352,28353],{"class":74},"WAYLAND_DISPLAY=",[30,28355,28356],{"class":321},"$WAYLAND_DISPLAY ",[30,28358,26313],{"class":40},[30,28360,28361,28363,28366,28369],{"class":32,"line":142},[30,28362,28266],{"class":321},[30,28364,28365],{"class":74},"XDG_RUNTIME_DIR=",[30,28367,28368],{"class":321},"$XDG_RUNTIME_DIR ",[30,28370,26313],{"class":40},[30,28372,28373,28375,28378],{"class":32,"line":1811},[30,28374,28266],{"class":321},[30,28376,28377],{"class":74},"QT_QPA_PLATFORM=xcb",[30,28379,41],{"class":40},[30,28381,28382,28385,28388],{"class":32,"line":1825},[30,28383,28384],{"class":321},"-v ",[30,28386,28387],{"class":74},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[30,28389,41],{"class":40},[30,28391,28392,28394,28397],{"class":32,"line":1830},[30,28393,28384],{"class":321},[30,28395,28396],{"class":74},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[30,28398,41],{"class":40},[30,28400,28401,28404,28407,28409,28412],{"class":32,"line":1836},[30,28402,28403],{"class":321},"-v $HOME",[30,28405,28406],{"class":74},"\u002F.Xauthority:",[30,28408,28229],{"class":321},[30,28410,28411],{"class":74},"\u002F.Xauthority:ro",[30,28413,41],{"class":40},[30,28415,28416,28418,28421,28423,28426,28429,28431,28434,28436,28438,28440,28442,28445],{"class":32,"line":1857},[30,28417,28384],{"class":321},[30,28419,28420],{"class":74},"\u002Frun\u002Fuser\u002F",[30,28422,25272],{"class":321},[30,28424,28425],{"class":36},"id",[30,28427,28428],{"class":40}," -u",[30,28430,749],{"class":321},[30,28432,28433],{"class":74},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[30,28435,25272],{"class":321},[30,28437,28425],{"class":36},[30,28439,28428],{"class":40},[30,28441,749],{"class":321},[30,28443,28444],{"class":74},"\u002Fwayland-0",[30,28446,41],{"class":40},[30,28448,28449,28451,28453,28455,28457,28459,28461,28464,28466,28468,28470,28472],{"class":32,"line":1862},[30,28450,28384],{"class":321},[30,28452,28420],{"class":74},[30,28454,25272],{"class":321},[30,28456,28425],{"class":36},[30,28458,28428],{"class":40},[30,28460,749],{"class":321},[30,28462,28463],{"class":74},":\u002Frun\u002Fuser\u002F",[30,28465,25272],{"class":321},[30,28467,28425],{"class":36},[30,28469,28428],{"class":40},[30,28471,13896],{"class":321},[30,28473,26313],{"class":40},[30,28475,28476,28478,28480,28483],{"class":32,"line":1876},[30,28477,28403],{"class":321},[30,28479,1179],{"class":74},[30,28481,28482],{"class":321},"$HOME ",[30,28484,26313],{"class":40},[30,28486,28487,28490],{"class":32,"line":1881},[30,28488,28489],{"class":321},"-w $HOME ",[30,28491,26313],{"class":40},[30,28493,28494],{"class":32,"line":1910},[30,28495,28496],{"class":321},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[157,28498,9207],{},[271,28500,28501,28509,28512,28515],{},[150,28502,28503,13977,28505,28508],{},[27,28504,28269],{},[27,28506,28507],{},"--gpus all","没有英伟达显卡请注释。",[150,28510,28511],{},"--name后面请自己为容器起名。",[150,28513,28514],{},"最后一行仓库名称请你自己找对应的镜像填上。",[150,28516,28517,28518,28523],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23735,28519,28520],{},[469,28521,28522],{},"请不要加","。",[20,28525,28527],{"className":22,"code":28526,"language":24,"meta":25,"style":25},"--ulimit nofile=1024:524288 \\\n",[27,28528,28529],{"__ignoreMap":25},[30,28530,28531,28534,28537],{"class":32,"line":33},[30,28532,28533],{"class":36},"--ulimit",[30,28535,28536],{"class":74}," nofile=1024:524288",[30,28538,41],{"class":40},[157,28540,28541,28542,28547],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23735,28543,28544],{},[469,28545,28546],{},"不建议","**.**",[20,28549,28551],{"className":22,"code":28550,"language":24,"meta":25,"style":25},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[27,28552,28553,28580,28589],{"__ignoreMap":25},[30,28554,28555,28558,28561,28563,28565,28567,28569,28571,28573,28576,28578],{"class":32,"line":33},[30,28556,28557],{"class":36},"--user",[30,28559,28560],{"class":321}," $(",[30,28562,28425],{"class":36},[30,28564,28428],{"class":40},[30,28566,749],{"class":321},[30,28568,1179],{"class":74},[30,28570,25272],{"class":321},[30,28572,28425],{"class":36},[30,28574,28575],{"class":40}," -g",[30,28577,13896],{"class":321},[30,28579,26313],{"class":40},[30,28581,28582,28584,28587],{"class":32,"line":44},[30,28583,28384],{"class":321},[30,28585,28586],{"class":74},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[30,28588,41],{"class":40},[30,28590,28591,28593,28596],{"class":32,"line":52},[30,28592,28384],{"class":321},[30,28594,28595],{"class":74},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[30,28597,41],{"class":40},[234,28599,28600],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":25,"searchDepth":44,"depth":44,"links":28602},[28603,28604,28605],{"id":27601,"depth":52,"text":27602},{"id":27611,"depth":52,"text":27612},{"id":28022,"depth":52,"text":28025},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27593,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28612,"title":28613,"body":28614,"description":25,"extension":243,"meta":30237,"navigation":245,"path":30238,"seo":30239,"stem":30240,"__hash__":30241},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28615,"toc":30232},[28616,28619,28623,28626,28848,28852,28856,28859,28965,28970,28973,28978,28981,28986,28989,28994,28997,29009,29012,29017,29024,29052,29059,29135,29140,29143,29166,29168,29243,29248,29251,29255,29263,29268,29273,29277,29288,29294,29297,29300,29324,29327,29330,29358,29361,29364,29829,29832,29837,29842,29846,29869,29874,29878,29882,29885,29888,29891,29918,29921,29924,29942,29945,29948,29970,29978,29983,29988,29992,29995,29998,30001,30004,30049,30052,30070,30073,30078,30081,30102,30105,30161,30164,30169,30173,30176,30183,30186,30189,30194,30197,30213,30216,30229],[10,28617,28613],{"id":28618},"_6手动创建docker镜像",[287,28620,28622],{"id":28621},"_61dockerfile","6.1.DockerFile",[157,28624,28625],{},"常用命令：",[457,28627,28628,28639],{},[460,28629,28630],{},[463,28631,28632,28635,28637],{},[466,28633,28634],{"align":23918},"指令",[466,28636,26007],{"align":23918},[466,28638,27630],{"align":23918},[504,28640,28641,28651,28667,28678,28689,28700,28711,28722,28733,28747,28761,28772,28786,28797,28808,28822,28837],{},[463,28642,28643,28645,28648],{},[509,28644,27508],{"align":23918},[509,28646,28647],{"align":23918},"指定基础镜像，是 Dockerfile 的起点",[509,28649,28650],{"align":23918},"FROM ubuntu:22.04",[463,28652,28653,28656,28659],{},[509,28654,28655],{"align":23918},"LABEL",[509,28657,28658],{"align":23918},"添加元数据（如作者、版本等）",[509,28660,28661,28662,28666],{"align":23918},"LABEL maintainer=”",[558,28663,28665],{"href":28664},"mailto:you@example.com","you@example.com","”",[463,28668,28669,28672,28675],{},[509,28670,28671],{"align":23918},"ENV",[509,28673,28674],{"align":23918},"设置环境变量",[509,28676,28677],{"align":23918},"ENV PORT=8080",[463,28679,28680,28683,28686],{},[509,28681,28682],{"align":23918},"ARG",[509,28684,28685],{"align":23918},"构建参数，只在构建期间可用",[509,28687,28688],{"align":23918},"ARG VERSION=1.0",[463,28690,28691,28694,28697],{},[509,28692,28693],{"align":23918},"RUN",[509,28695,28696],{"align":23918},"构建镜像时运行命令",[509,28698,28699],{"align":23918},"RUN apt-get update && apt-get install -y curl",[463,28701,28702,28705,28708],{},[509,28703,28704],{"align":23918},"COPY",[509,28706,28707],{"align":23918},"复制文件到镜像中",[509,28709,28710],{"align":23918},"COPY . \u002Fapp",[463,28712,28713,28716,28719],{},[509,28714,28715],{"align":23918},"ADD",[509,28717,28718],{"align":23918},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[509,28720,28721],{"align":23918},"ADD archive.tar.gz \u002Fdata\u002F",[463,28723,28724,28727,28730],{},[509,28725,28726],{"align":23918},"WORKDIR",[509,28728,28729],{"align":23918},"设置工作目录",[509,28731,28732],{"align":23918},"WORKDIR \u002Fopt",[463,28734,28735,28738,28741],{},[509,28736,28737],{"align":23918},"CMD",[509,28739,28740],{"align":23918},"设置容器启动时默认命令（可被 docker run 覆盖）",[509,28742,28743,28744],{"align":23918},"CMD ",[30,28745,28746],{},"“node”, “index.js”",[463,28748,28749,28752,28755],{},[509,28750,28751],{"align":23918},"ENTRYPOINT",[509,28753,28754],{"align":23918},"设置容器启动时固定命令（通常用于 CLI 工具等）",[509,28756,28757,28758],{"align":23918},"ENTRYPOINT ",[30,28759,28760],{},"“python3”",[463,28762,28763,28766,28769],{},[509,28764,28765],{"align":23918},"EXPOSE",[509,28767,28768],{"align":23918},"声明镜像内服务监听的端口（不会自动映射）",[509,28770,28771],{"align":23918},"EXPOSE 80",[463,28773,28774,28777,28780],{},[509,28775,28776],{"align":23918},"VOLUME",[509,28778,28779],{"align":23918},"声明数据卷挂载点",[509,28781,28782,28783],{"align":23918},"VOLUME ",[30,28784,28785],{},"“\u002Fdata”",[463,28787,28788,28791,28794],{},[509,28789,28790],{"align":23918},"USER",[509,28792,28793],{"align":23918},"设置后续命令执行的用户",[509,28795,28796],{"align":23918},"USER appuser",[463,28798,28799,28802,28805],{},[509,28800,28801],{"align":23918},"ONBUILD",[509,28803,28804],{"align":23918},"当镜像作为其他镜像基础镜像时触发的构建指令",[509,28806,28807],{"align":23918},"ONBUILD COPY . \u002Fsrc",[463,28809,28810,28813,28816],{},[509,28811,28812],{"align":23918},"SHELL",[509,28814,28815],{"align":23918},"更改默认 shell，比如将 sh -c 改为 bash -c",[509,28817,28818,28819],{"align":23918},"SHELL ",[30,28820,28821],{},"“\u002Fbin\u002Fbash”, “-c”",[463,28823,28824,28827,28830],{},[509,28825,28826],{"align":23918},"HEALTHCHECK",[509,28828,28829],{"align":23918},"定义容器运行时的健康检查命令",[509,28831,28832,28833],{"align":23918},"`HEALTHCHECK CMD curl –fail ",[558,28834,28835],{"href":28835,"rel":28836},"http:\u002F\u002Flocalhost:8080",[24045],[463,28838,28839,28842,28845],{},[509,28840,28841],{"align":23918},"STOPSIGNAL",[509,28843,28844],{"align":23918},"容器停止时发送的信号",[509,28846,28847],{"align":23918},"STOPSIGNAL SIGKILL",[287,28849,28851],{"id":28850},"_62自己创建容器","6.2.自己创建容器",[22180,28853,28855],{"id":28854},"_621手动创建","6.2.1.手动创建",[157,28857,28858],{},"在x86电脑上编译x86的：",[20,28860,28862],{"className":22,"code":28861,"language":24,"meta":25,"style":25},"docker build -t ros-melodic-cuda118-cudnn8-bionic:latest .\n\ndocker build -t ros-noetic-focal:latest .\n\ndocker build -t ros-humble-jammy:latest .\n\ndocker build -t ros-jazzy-noble:latest .\n\ndocker build -t ros-humble-opencv411-cuda128-cudnn970-jammy:latest .\n\ndocker build -t ros-jazzy-opencv411-cuda128-cudnn970-noble:latest .\n",[27,28863,28864,28880,28884,28897,28901,28914,28918,28931,28935,28948,28952],{"__ignoreMap":25},[30,28865,28866,28868,28871,28874,28877],{"class":32,"line":33},[30,28867,26691],{"class":36},[30,28869,28870],{"class":74}," build",[30,28872,28873],{"class":40}," -t",[30,28875,28876],{"class":74}," ros-melodic-cuda118-cudnn8-bionic:latest",[30,28878,28879],{"class":74}," .\n",[30,28881,28882],{"class":32,"line":44},[30,28883,2582],{"emptyLinePlaceholder":245},[30,28885,28886,28888,28890,28892,28895],{"class":32,"line":52},[30,28887,26691],{"class":36},[30,28889,28870],{"class":74},[30,28891,28873],{"class":40},[30,28893,28894],{"class":74}," ros-noetic-focal:latest",[30,28896,28879],{"class":74},[30,28898,28899],{"class":32,"line":60},[30,28900,2582],{"emptyLinePlaceholder":245},[30,28902,28903,28905,28907,28909,28912],{"class":32,"line":68},[30,28904,26691],{"class":36},[30,28906,28870],{"class":74},[30,28908,28873],{"class":40},[30,28910,28911],{"class":74}," ros-humble-jammy:latest",[30,28913,28879],{"class":74},[30,28915,28916],{"class":32,"line":80},[30,28917,2582],{"emptyLinePlaceholder":245},[30,28919,28920,28922,28924,28926,28929],{"class":32,"line":88},[30,28921,26691],{"class":36},[30,28923,28870],{"class":74},[30,28925,28873],{"class":40},[30,28927,28928],{"class":74}," ros-jazzy-noble:latest",[30,28930,28879],{"class":74},[30,28932,28933],{"class":32,"line":96},[30,28934,2582],{"emptyLinePlaceholder":245},[30,28936,28937,28939,28941,28943,28946],{"class":32,"line":104},[30,28938,26691],{"class":36},[30,28940,28870],{"class":74},[30,28942,28873],{"class":40},[30,28944,28945],{"class":74}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[30,28947,28879],{"class":74},[30,28949,28950],{"class":32,"line":112},[30,28951,2582],{"emptyLinePlaceholder":245},[30,28953,28954,28956,28958,28960,28963],{"class":32,"line":123},[30,28955,26691],{"class":36},[30,28957,28870],{"class":74},[30,28959,28873],{"class":40},[30,28961,28962],{"class":74}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[30,28964,28879],{"class":74},[157,28966,28967],{},[160,28968],{"alt":25,"src":28969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[157,28971,28972],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[157,28974,28975],{},[160,28976],{"alt":25,"src":28977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[157,28979,28980],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[271,28982,28983],{},[150,28984,28985],{},"创建 Docker Hub 账户",[157,28987,28988],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[271,28990,28991],{"start":44},[150,28992,28993],{},"登录 Docker Hub",[157,28995,28996],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[20,28998,29000],{"className":22,"code":28999,"language":24,"meta":25,"style":25},"docker login\n",[27,29001,29002],{"__ignoreMap":25},[30,29003,29004,29006],{"class":32,"line":33},[30,29005,26691],{"class":36},[30,29007,29008],{"class":74}," login\n",[157,29010,29011],{},"输入你的 Docker Hub 用户名和密码进行验证。",[271,29013,29014],{},[150,29015,29016],{},"为你的镜像打标签",[157,29018,29019,29020,29023],{},"Docker Hub 使用 ",[27,29021,29022],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[20,29025,29027],{"className":22,"code":29026,"language":24,"meta":25,"style":25},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[27,29028,29029],{"__ignoreMap":25},[30,29030,29031,29033,29036,29038,29041,29044,29047,29049],{"class":32,"line":33},[30,29032,26691],{"class":36},[30,29034,29035],{"class":74}," tag",[30,29037,28928],{"class":74},[30,29039,29040],{"class":317}," \u003C",[30,29042,29043],{"class":74},"你的用户",[30,29045,29046],{"class":321},"名",[30,29048,1280],{"class":317},[30,29050,29051],{"class":74},"\u002Fros-jazzy-noble:latest\n",[157,29053,29054,29055,29058],{},"例如，如果你的 Docker Hub 用户名是 ",[27,29056,29057],{},"tungchiahui","，你应该执行：",[20,29060,29062],{"className":22,"code":29061,"language":24,"meta":25,"style":25},"docker tag ros-noetic-focal:latest tungchiahui\u002Fros-noetic-focal:latest\n\ndocker tag ros-humble-jammy:latest tungchiahui\u002Fros-humble-jammy:latest\n\ndocker tag ros-jazzy-noble:latest tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker tag ros-humble-opencv411-cuda128-cudnn970-jammy:latest \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker tag ros-jazzy-opencv411-cuda128-cudnn970-noble:latest tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[27,29063,29064,29075,29079,29090,29094,29105,29109,29120,29124],{"__ignoreMap":25},[30,29065,29066,29068,29070,29072],{"class":32,"line":33},[30,29067,26691],{"class":36},[30,29069,29035],{"class":74},[30,29071,28894],{"class":74},[30,29073,29074],{"class":74}," tungchiahui\u002Fros-noetic-focal:latest\n",[30,29076,29077],{"class":32,"line":44},[30,29078,2582],{"emptyLinePlaceholder":245},[30,29080,29081,29083,29085,29087],{"class":32,"line":52},[30,29082,26691],{"class":36},[30,29084,29035],{"class":74},[30,29086,28911],{"class":74},[30,29088,29089],{"class":74}," tungchiahui\u002Fros-humble-jammy:latest\n",[30,29091,29092],{"class":32,"line":60},[30,29093,2582],{"emptyLinePlaceholder":245},[30,29095,29096,29098,29100,29102],{"class":32,"line":68},[30,29097,26691],{"class":36},[30,29099,29035],{"class":74},[30,29101,28928],{"class":74},[30,29103,29104],{"class":74}," tungchiahui\u002Fros-jazzy-noble:latest\n",[30,29106,29107],{"class":32,"line":80},[30,29108,2582],{"emptyLinePlaceholder":245},[30,29110,29111,29113,29115,29117],{"class":32,"line":88},[30,29112,26691],{"class":36},[30,29114,29035],{"class":74},[30,29116,28945],{"class":74},[30,29118,29119],{"class":74}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[30,29121,29122],{"class":32,"line":96},[30,29123,2582],{"emptyLinePlaceholder":245},[30,29125,29126,29128,29130,29132],{"class":32,"line":104},[30,29127,26691],{"class":36},[30,29129,29035],{"class":74},[30,29131,28962],{"class":74},[30,29133,29134],{"class":74}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[271,29136,29137],{"start":44},[150,29138,29139],{},"推送镜像到 Docker Hub",[157,29141,29142],{},"使用以下命令将镜像推送到 Docker Hub：",[20,29144,29146],{"className":22,"code":29145,"language":24,"meta":25,"style":25},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[27,29147,29148],{"__ignoreMap":25},[30,29149,29150,29152,29155,29157,29159,29161,29163],{"class":32,"line":33},[30,29151,26691],{"class":36},[30,29153,29154],{"class":74}," push",[30,29156,29040],{"class":317},[30,29158,29043],{"class":74},[30,29160,29046],{"class":321},[30,29162,1280],{"class":317},[30,29164,29165],{"class":74},"\u002Fros-noetic-jazzy-noble:latest\n",[157,29167,14815],{},[20,29169,29171],{"className":22,"code":29170,"language":24,"meta":25,"style":25},"docker push tungchiahui\u002Fros-noetic-focal:latest\n\ndocker push tungchiahui\u002Fros-humble-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker push tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n\ndocker push tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[27,29172,29173,29181,29185,29193,29197,29205,29209,29218,29222,29230,29234],{"__ignoreMap":25},[30,29174,29175,29177,29179],{"class":32,"line":33},[30,29176,26691],{"class":36},[30,29178,29154],{"class":74},[30,29180,29074],{"class":74},[30,29182,29183],{"class":32,"line":44},[30,29184,2582],{"emptyLinePlaceholder":245},[30,29186,29187,29189,29191],{"class":32,"line":52},[30,29188,26691],{"class":36},[30,29190,29154],{"class":74},[30,29192,29089],{"class":74},[30,29194,29195],{"class":32,"line":60},[30,29196,2582],{"emptyLinePlaceholder":245},[30,29198,29199,29201,29203],{"class":32,"line":68},[30,29200,26691],{"class":36},[30,29202,29154],{"class":74},[30,29204,29104],{"class":74},[30,29206,29207],{"class":32,"line":80},[30,29208,2582],{"emptyLinePlaceholder":245},[30,29210,29211,29213,29215],{"class":32,"line":88},[30,29212,26691],{"class":36},[30,29214,29154],{"class":74},[30,29216,29217],{"class":74}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[30,29219,29220],{"class":32,"line":96},[30,29221,2582],{"emptyLinePlaceholder":245},[30,29223,29224,29226,29228],{"class":32,"line":104},[30,29225,26691],{"class":36},[30,29227,29154],{"class":74},[30,29229,29134],{"class":74},[30,29231,29232],{"class":32,"line":112},[30,29233,2582],{"emptyLinePlaceholder":245},[30,29235,29236,29238,29240],{"class":32,"line":123},[30,29237,26691],{"class":36},[30,29239,29154],{"class":74},[30,29241,29242],{"class":74}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[271,29244,29245],{"start":52},[150,29246,29247],{},"验证推送成功",[157,29249,29250],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[157,29252,29253],{},[469,29254,3966],{},[147,29256,29257,29260],{},[150,29258,29259],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[150,29261,29262],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[157,29264,29265],{},[160,29266],{"alt":25,"src":29267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[157,29269,29270],{},[160,29271],{"alt":25,"src":29272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22180,29274,29276],{"id":29275},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[157,29278,29279,29280,29283,29284,29287],{},"如果您想在 ",[469,29281,29282],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[469,29285,29286],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[157,29289,29290,29291],{},"1. ",[469,29292,29293],{},"启用 Docker 跨平台构建",[157,29295,29296],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[157,29298,29299],{},"第一步：启用 buildx（只需执行一次）",[20,29301,29303],{"className":22,"code":29302,"language":24,"meta":25,"style":25},"docker buildx create --name multiarch_builder --use\n",[27,29304,29305],{"__ignoreMap":25},[30,29306,29307,29309,29312,29315,29318,29321],{"class":32,"line":33},[30,29308,26691],{"class":36},[30,29310,29311],{"class":74}," buildx",[30,29313,29314],{"class":74}," create",[30,29316,29317],{"class":40}," --name",[30,29319,29320],{"class":74}," multiarch_builder",[30,29322,29323],{"class":40}," --use\n",[157,29325,29326],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[157,29328,29329],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[20,29331,29333],{"className":22,"code":29332,"language":24,"meta":25,"style":25},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[27,29334,29335],{"__ignoreMap":25},[30,29336,29337,29339,29341,29343,29346,29349,29352,29355],{"class":32,"line":33},[30,29338,26691],{"class":36},[30,29340,27368],{"class":74},[30,29342,27371],{"class":40},[30,29344,29345],{"class":40}," --privileged",[30,29347,29348],{"class":74}," multiarch\u002Fqemu-user-static",[30,29350,29351],{"class":40}," --reset",[30,29353,29354],{"class":40}," -p",[30,29356,29357],{"class":74}," yes\n",[157,29359,29360],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[157,29362,29363],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[20,29365,29367],{"className":22,"code":29366,"language":24,"meta":25,"style":25},"docker buildx build --platform linux\u002Famd64,linux\u002Farm64 -t \u003C你的镜像名>:\u003C标签> --push .\n\n# 例子：\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:noetic-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:humble-jammy \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:jazzy-noble \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble \\\n --push \\\n .\n\n  docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n",[27,29368,29369,29411,29415,29420,29430,29440,29449,29455,29459,29463,29473,29481,29490,29496,29500,29504,29514,29522,29531,29537,29541,29545,29555,29563,29572,29578,29582,29586,29596,29604,29613,29619,29623,29627,29637,29645,29654,29660,29664,29668,29678,29686,29695,29701,29705,29709,29719,29727,29736,29742,29746,29750,29760,29768,29777,29783,29787,29791,29802,29810,29819,29825],{"__ignoreMap":25},[30,29370,29371,29373,29375,29377,29380,29383,29385,29387,29390,29392,29394,29396,29398,29401,29404,29406,29409],{"class":32,"line":33},[30,29372,26691],{"class":36},[30,29374,29311],{"class":74},[30,29376,28870],{"class":74},[30,29378,29379],{"class":40}," --platform",[30,29381,29382],{"class":74}," linux\u002Famd64,linux\u002Farm64",[30,29384,28873],{"class":40},[30,29386,29040],{"class":317},[30,29388,29389],{"class":74},"你的镜像",[30,29391,29046],{"class":321},[30,29393,1280],{"class":317},[30,29395,1179],{"class":74},[30,29397,1230],{"class":317},[30,29399,29400],{"class":74},"标",[30,29402,29403],{"class":321},"签",[30,29405,1280],{"class":317},[30,29407,29408],{"class":40}," --push",[30,29410,28879],{"class":74},[30,29412,29413],{"class":32,"line":44},[30,29414,2582],{"emptyLinePlaceholder":245},[30,29416,29417],{"class":32,"line":52},[30,29418,29419],{"class":379},"# 例子：\n",[30,29421,29422,29424,29426,29428],{"class":32,"line":60},[30,29423,26691],{"class":36},[30,29425,29311],{"class":74},[30,29427,28870],{"class":74},[30,29429,41],{"class":40},[30,29431,29432,29435,29438],{"class":32,"line":68},[30,29433,29434],{"class":321},"--platform ",[30,29436,29437],{"class":74},"linux\u002Famd64,linux\u002Farm64",[30,29439,41],{"class":40},[30,29441,29442,29444,29447],{"class":32,"line":80},[30,29443,28873],{"class":40},[30,29445,29446],{"class":74}," tungchiahui\u002Fros:noetic-focal",[30,29448,41],{"class":40},[30,29450,29451,29453],{"class":32,"line":88},[30,29452,29408],{"class":40},[30,29454,41],{"class":40},[30,29456,29457],{"class":32,"line":96},[30,29458,28879],{"class":74},[30,29460,29461],{"class":32,"line":104},[30,29462,2582],{"emptyLinePlaceholder":245},[30,29464,29465,29467,29469,29471],{"class":32,"line":112},[30,29466,26691],{"class":36},[30,29468,29311],{"class":74},[30,29470,28870],{"class":74},[30,29472,41],{"class":40},[30,29474,29475,29477,29479],{"class":32,"line":123},[30,29476,29434],{"class":321},[30,29478,29437],{"class":74},[30,29480,41],{"class":40},[30,29482,29483,29485,29488],{"class":32,"line":131},[30,29484,28873],{"class":40},[30,29486,29487],{"class":74}," tungchiahui\u002Fros:humble-jammy",[30,29489,41],{"class":40},[30,29491,29492,29494],{"class":32,"line":142},[30,29493,29408],{"class":40},[30,29495,41],{"class":40},[30,29497,29498],{"class":32,"line":1811},[30,29499,28879],{"class":74},[30,29501,29502],{"class":32,"line":1825},[30,29503,2582],{"emptyLinePlaceholder":245},[30,29505,29506,29508,29510,29512],{"class":32,"line":1830},[30,29507,26691],{"class":36},[30,29509,29311],{"class":74},[30,29511,28870],{"class":74},[30,29513,41],{"class":40},[30,29515,29516,29518,29520],{"class":32,"line":1836},[30,29517,29434],{"class":321},[30,29519,29437],{"class":74},[30,29521,41],{"class":40},[30,29523,29524,29526,29529],{"class":32,"line":1857},[30,29525,28873],{"class":40},[30,29527,29528],{"class":74}," tungchiahui\u002Fros:jazzy-noble",[30,29530,41],{"class":40},[30,29532,29533,29535],{"class":32,"line":1862},[30,29534,29408],{"class":40},[30,29536,41],{"class":40},[30,29538,29539],{"class":32,"line":1876},[30,29540,28879],{"class":74},[30,29542,29543],{"class":32,"line":1881},[30,29544,2582],{"emptyLinePlaceholder":245},[30,29546,29547,29549,29551,29553],{"class":32,"line":1910},[30,29548,26458],{"class":36},[30,29550,29311],{"class":74},[30,29552,28870],{"class":74},[30,29554,41],{"class":40},[30,29556,29557,29559,29561],{"class":32,"line":1915},[30,29558,29434],{"class":321},[30,29560,29437],{"class":74},[30,29562,41],{"class":40},[30,29564,29565,29567,29570],{"class":32,"line":1932},[30,29566,28873],{"class":40},[30,29568,29569],{"class":74}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[30,29571,41],{"class":40},[30,29573,29574,29576],{"class":32,"line":1937},[30,29575,29408],{"class":40},[30,29577,41],{"class":40},[30,29579,29580],{"class":32,"line":1942},[30,29581,28879],{"class":74},[30,29583,29584],{"class":32,"line":1947},[30,29585,2582],{"emptyLinePlaceholder":245},[30,29587,29588,29590,29592,29594],{"class":32,"line":1961},[30,29589,26691],{"class":36},[30,29591,29311],{"class":74},[30,29593,28870],{"class":74},[30,29595,41],{"class":40},[30,29597,29598,29600,29602],{"class":32,"line":1966},[30,29599,29434],{"class":321},[30,29601,29437],{"class":74},[30,29603,41],{"class":40},[30,29605,29606,29608,29611],{"class":32,"line":2759},[30,29607,28873],{"class":40},[30,29609,29610],{"class":74}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[30,29612,41],{"class":40},[30,29614,29615,29617],{"class":32,"line":2773},[30,29616,29408],{"class":40},[30,29618,41],{"class":40},[30,29620,29621],{"class":32,"line":2781},[30,29622,28879],{"class":74},[30,29624,29625],{"class":32,"line":2786},[30,29626,2582],{"emptyLinePlaceholder":245},[30,29628,29629,29631,29633,29635],{"class":32,"line":2792},[30,29630,26458],{"class":36},[30,29632,29311],{"class":74},[30,29634,28870],{"class":74},[30,29636,41],{"class":40},[30,29638,29639,29641,29643],{"class":32,"line":2798},[30,29640,29434],{"class":321},[30,29642,29437],{"class":74},[30,29644,41],{"class":40},[30,29646,29647,29649,29652],{"class":32,"line":2803},[30,29648,28873],{"class":40},[30,29650,29651],{"class":74}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[30,29653,41],{"class":40},[30,29655,29656,29658],{"class":32,"line":8130},[30,29657,29408],{"class":40},[30,29659,41],{"class":40},[30,29661,29662],{"class":32,"line":8154},[30,29663,28879],{"class":74},[30,29665,29666],{"class":32,"line":8159},[30,29667,2582],{"emptyLinePlaceholder":245},[30,29669,29670,29672,29674,29676],{"class":32,"line":8165},[30,29671,26691],{"class":36},[30,29673,29311],{"class":74},[30,29675,28870],{"class":74},[30,29677,41],{"class":40},[30,29679,29680,29682,29684],{"class":32,"line":8192},[30,29681,29434],{"class":321},[30,29683,29437],{"class":74},[30,29685,41],{"class":40},[30,29687,29688,29690,29693],{"class":32,"line":8197},[30,29689,28873],{"class":40},[30,29691,29692],{"class":74}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[30,29694,41],{"class":40},[30,29696,29697,29699],{"class":32,"line":8203},[30,29698,29408],{"class":40},[30,29700,41],{"class":40},[30,29702,29703],{"class":32,"line":8215},[30,29704,28879],{"class":74},[30,29706,29707],{"class":32,"line":8227},[30,29708,2582],{"emptyLinePlaceholder":245},[30,29710,29711,29713,29715,29717],{"class":32,"line":8239},[30,29712,26691],{"class":36},[30,29714,29311],{"class":74},[30,29716,28870],{"class":74},[30,29718,41],{"class":40},[30,29720,29721,29723,29725],{"class":32,"line":9898},[30,29722,29434],{"class":321},[30,29724,29437],{"class":74},[30,29726,41],{"class":40},[30,29728,29729,29731,29734],{"class":32,"line":9923},[30,29730,28873],{"class":40},[30,29732,29733],{"class":74}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[30,29735,41],{"class":40},[30,29737,29738,29740],{"class":32,"line":9946},[30,29739,29408],{"class":40},[30,29741,41],{"class":40},[30,29743,29744],{"class":32,"line":9970},[30,29745,28879],{"class":74},[30,29747,29748],{"class":32,"line":9975},[30,29749,2582],{"emptyLinePlaceholder":245},[30,29751,29752,29754,29756,29758],{"class":32,"line":9980},[30,29753,26458],{"class":36},[30,29755,29311],{"class":74},[30,29757,28870],{"class":74},[30,29759,41],{"class":40},[30,29761,29762,29764,29766],{"class":32,"line":9985},[30,29763,29434],{"class":321},[30,29765,29437],{"class":74},[30,29767,41],{"class":40},[30,29769,29770,29772,29775],{"class":32,"line":9994},[30,29771,28873],{"class":40},[30,29773,29774],{"class":74}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[30,29776,41],{"class":40},[30,29778,29779,29781],{"class":32,"line":9999},[30,29780,29408],{"class":40},[30,29782,41],{"class":40},[30,29784,29785],{"class":32,"line":10005},[30,29786,28879],{"class":74},[30,29788,29789],{"class":32,"line":10026},[30,29790,2582],{"emptyLinePlaceholder":245},[30,29792,29793,29796,29798,29800],{"class":32,"line":10032},[30,29794,29795],{"class":36},"  docker",[30,29797,29311],{"class":74},[30,29799,28870],{"class":74},[30,29801,41],{"class":40},[30,29803,29804,29806,29808],{"class":32,"line":10046},[30,29805,29434],{"class":321},[30,29807,29437],{"class":74},[30,29809,41],{"class":40},[30,29811,29812,29814,29817],{"class":32,"line":10052},[30,29813,28873],{"class":40},[30,29815,29816],{"class":74}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[30,29818,41],{"class":40},[30,29820,29821,29823],{"class":32,"line":10079},[30,29822,29408],{"class":40},[30,29824,41],{"class":40},[30,29826,29827],{"class":32,"line":10088},[30,29828,28879],{"class":74},[157,29830,29831],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[157,29833,29834],{},[160,29835],{"alt":25,"src":29836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[157,29838,29839],{},[160,29840],{"alt":25,"src":29841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22180,29843,29845],{"id":29844},"_623清除构建缓存","6.2.3.清除构建缓存",[20,29847,29849],{"className":22,"code":29848,"language":24,"meta":25,"style":25},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[27,29850,29851,29856],{"__ignoreMap":25},[30,29852,29853],{"class":32,"line":33},[30,29854,29855],{"class":379},"# 清理BuildKit构建缓存\n",[30,29857,29858,29860,29863,29866],{"class":32,"line":44},[30,29859,26691],{"class":36},[30,29861,29862],{"class":74}," builder",[30,29864,29865],{"class":74}," prune",[30,29867,29868],{"class":40}," -f\n",[157,29870,29871],{},[160,29872],{"alt":25,"src":29873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[287,29875,29877],{"id":29876},"_63补充","6.3.补充",[22180,29879,29881],{"id":29880},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[157,29883,29884],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[157,29886,29887],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[157,29889,29890],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[20,29892,29894],{"className":22,"code":29893,"language":24,"meta":25,"style":25},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[27,29895,29896,29903],{"__ignoreMap":25},[30,29897,29898,29900],{"class":32,"line":33},[30,29899,27508],{"class":36},[30,29901,29902],{"class":74}," nginx\n",[30,29904,29905,29907,29910,29913,29915],{"class":32,"line":44},[30,29906,28693],{"class":36},[30,29908,29909],{"class":74}," echo",[30,29911,29912],{"class":74}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[30,29914,26360],{"class":317},[30,29916,29917],{"class":74}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[157,29919,29920],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[157,29922,29923],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[20,29925,29927],{"className":22,"code":29926,"language":24,"meta":25,"style":25},"docker build -t nginx:tuling .\n",[27,29928,29929],{"__ignoreMap":25},[30,29930,29931,29933,29935,29937,29940],{"class":32,"line":33},[30,29932,26691],{"class":36},[30,29934,28870],{"class":74},[30,29936,28873],{"class":40},[30,29938,29939],{"class":74}," nginx:tuling",[30,29941,28879],{"class":74},[157,29943,29944],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[157,29946,29947],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[20,29949,29951],{"className":22,"code":29950,"language":24,"meta":25,"style":25},"docker run -d -p 92:80 nginx:tuling\n",[27,29952,29953],{"__ignoreMap":25},[30,29954,29955,29957,29959,29962,29964,29967],{"class":32,"line":33},[30,29956,26691],{"class":36},[30,29958,27368],{"class":74},[30,29960,29961],{"class":40}," -d",[30,29963,29354],{"class":40},[30,29965,29966],{"class":74}," 92:80",[30,29968,29969],{"class":74}," nginx:tuling\n",[157,29971,29972,29973],{},"4、访问 ",[558,29974,29977],{"href":29975,"rel":29976},"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",[24045],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[157,29979,29980],{},[160,29981],{"alt":25,"src":29982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[157,29984,29985],{},[160,29986],{"alt":25,"src":29987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22180,29989,29991],{"id":29990},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[157,29993,29994],{},"只需要知道大体流程即可",[157,29996,29997],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[157,29999,30000],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[157,30002,30003],{},"2、在Dockerfile中添加以下内容",[20,30005,30007],{"className":26229,"code":30006,"language":26231,"meta":25,"style":25},"# 基于哪个镜像\nFrom java:8\n# 复制文件到容器\nADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n# 声明需要暴露的端口\nEXPOSE 8877\n# 配置容器启动后执行的命令\nENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[27,30008,30009,30014,30019,30024,30029,30034,30039,30044],{"__ignoreMap":25},[30,30010,30011],{"class":32,"line":33},[30,30012,30013],{},"# 基于哪个镜像\n",[30,30015,30016],{"class":32,"line":44},[30,30017,30018],{},"From java:8\n",[30,30020,30021],{"class":32,"line":52},[30,30022,30023],{},"# 复制文件到容器\n",[30,30025,30026],{"class":32,"line":60},[30,30027,30028],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[30,30030,30031],{"class":32,"line":68},[30,30032,30033],{},"# 声明需要暴露的端口\n",[30,30035,30036],{"class":32,"line":80},[30,30037,30038],{},"EXPOSE 8877\n",[30,30040,30041],{"class":32,"line":88},[30,30042,30043],{},"# 配置容器启动后执行的命令\n",[30,30045,30046],{"class":32,"line":96},[30,30047,30048],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[157,30050,30051],{},"3、使用docker build命令构建镜像",[20,30053,30055],{"className":22,"code":30054,"language":24,"meta":25,"style":25},"docker build -t tulingmall-member:0.0.5 .\n",[27,30056,30057],{"__ignoreMap":25},[30,30058,30059,30061,30063,30065,30068],{"class":32,"line":33},[30,30060,26691],{"class":36},[30,30062,28870],{"class":74},[30,30064,28873],{"class":40},[30,30066,30067],{"class":74}," tulingmall-member:0.0.5",[30,30069,28879],{"class":74},[157,30071,30072],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[157,30074,30075],{},[160,30076],{"alt":25,"src":30077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[157,30079,30080],{},"4、启动镜像，加-d可在后台启动",[20,30082,30084],{"className":22,"code":30083,"language":24,"meta":25,"style":25},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[27,30085,30086],{"__ignoreMap":25},[30,30087,30088,30090,30092,30094,30096,30099],{"class":32,"line":33},[30,30089,26691],{"class":36},[30,30091,27368],{"class":74},[30,30093,29961],{"class":40},[30,30095,29354],{"class":40},[30,30097,30098],{"class":74}," 8877:8877",[30,30100,30101],{"class":74}," tulingmall-member:0.0.5\n",[157,30103,30104],{},"加上JVM参数：",[20,30106,30108],{"className":22,"code":30107,"language":24,"meta":25,"style":25},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\ndocker run  -d -p 8877:8877 \\\n-e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848  \\\n-e JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'  \\\n--cap-add=SYS_PTRACE  \\\ntulingmall-member:0.0.5\n",[27,30109,30110,30115,30130,30140,30149,30156],{"__ignoreMap":25},[30,30111,30112],{"class":32,"line":33},[30,30113,30114],{"class":379},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[30,30116,30117,30119,30121,30124,30126,30128],{"class":32,"line":44},[30,30118,26691],{"class":36},[30,30120,27368],{"class":74},[30,30122,30123],{"class":40},"  -d",[30,30125,29354],{"class":40},[30,30127,30098],{"class":74},[30,30129,41],{"class":40},[30,30131,30132,30134,30137],{"class":32,"line":52},[30,30133,28266],{"class":321},[30,30135,30136],{"class":74},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[30,30138,30139],{"class":40},"  \\\n",[30,30141,30142,30144,30147],{"class":32,"line":60},[30,30143,28266],{"class":321},[30,30145,30146],{"class":74},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[30,30148,30139],{"class":40},[30,30150,30151,30154],{"class":32,"line":68},[30,30152,30153],{"class":321},"--cap-add=SYS_PTRACE  ",[30,30155,26313],{"class":40},[30,30157,30158],{"class":32,"line":80},[30,30159,30160],{"class":321},"tulingmall-member:0.0.5\n",[157,30162,30163],{},"5、访问会员服务接口",[157,30165,30166],{},[160,30167],{"alt":25,"src":30168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22180,30170,30172],{"id":30171},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[157,30174,30175],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[157,30177,30178,30179],{},"阿里云docker镜像仓库：",[558,30180,30181],{"href":30181,"rel":30182},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24045],[157,30184,30185],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[157,30187,30188],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[157,30190,30191],{},[160,30192],{"alt":25,"src":30193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[157,30195,30196],{},"要把镜像推送到镜像仓库",[20,30198,30200],{"className":22,"code":30199,"language":24,"meta":25,"style":25},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[27,30201,30202],{"__ignoreMap":25},[30,30203,30204,30206,30208,30210],{"class":32,"line":33},[30,30205,26691],{"class":36},[30,30207,29035],{"class":74},[30,30209,30067],{"class":74},[30,30211,30212],{"class":74}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[157,30214,30215],{},"最后将镜像推送到远程仓库",[20,30217,30219],{"className":22,"code":30218,"language":24,"meta":25,"style":25},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[27,30220,30221],{"__ignoreMap":25},[30,30222,30223,30225,30227],{"class":32,"line":33},[30,30224,26691],{"class":36},[30,30226,29154],{"class":74},[30,30228,30212],{"class":74},[234,30230,30231],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":44,"depth":44,"links":30233},[30234,30235,30236],{"id":28621,"depth":52,"text":28622},{"id":28850,"depth":52,"text":28851},{"id":29876,"depth":52,"text":29877},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28613,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30243,"title":30244,"body":30245,"description":25,"extension":243,"meta":30388,"navigation":245,"path":30389,"seo":30390,"stem":30391,"__hash__":30392},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30246,"toc":30386},[30247,30250,30255,30260,30263,30268,30273,30276,30281,30286,30289,30294,30297,30300,30303,30306,30309,30312,30332,30354,30357,30360,30380,30383],[10,30248,30244],{"id":30249},"_7vscode远程开发",[271,30251,30252],{},[150,30253,30254],{},"插件1：微软Docker工具",[157,30256,30257],{},[160,30258],{"alt":25,"src":30259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[157,30261,30262],{},"docker扩展插件已经进化为container tools了，请安装container tools",[157,30264,30265],{},[160,30266],{"alt":25,"src":30267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[271,30269,30270],{"start":44},[150,30271,30272],{},"插件2：微软Docker远程开发工具",[157,30274,30275],{},"下面这是远程开发的插件。",[157,30277,30278],{},[160,30279],{"alt":25,"src":30280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[157,30282,30283],{},[160,30284],{"alt":25,"src":30285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[157,30287,30288],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[157,30290,30291],{},[160,30292],{"alt":25,"src":30293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[157,30295,30296],{},"安装完拓展之后，vscode进行链接：",[157,30298,30299],{},"1.按ctrl+shift+p",[157,30301,30302],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[157,30304,30305],{},"3.选择目前运行的容器",[157,30307,30308],{},"4.VS Code 会在新窗口中打开并连接到容器",[157,30310,30311],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[20,30313,30315],{"className":22,"code":30314,"language":24,"meta":25,"style":25},"docker run -v 主机目录:容器目录 image-name\n",[27,30316,30317],{"__ignoreMap":25},[30,30318,30319,30321,30323,30326,30329],{"class":32,"line":33},[30,30320,26691],{"class":36},[30,30322,27368],{"class":74},[30,30324,30325],{"class":40}," -v",[30,30327,30328],{"class":74}," 主机目录:容器目录",[30,30330,30331],{"class":74}," image-name\n",[20,30333,30335],{"className":22,"code":30334,"language":24,"meta":25,"style":25},"docker run -it -v \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[27,30336,30337],{"__ignoreMap":25},[30,30338,30339,30341,30343,30346,30348,30351],{"class":32,"line":33},[30,30340,26691],{"class":36},[30,30342,27368],{"class":74},[30,30344,30345],{"class":40}," -it",[30,30347,30325],{"class":40},[30,30349,30350],{"class":74}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[30,30352,30353],{"class":74}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[157,30355,30356],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[157,30358,30359],{},"查看挂载情况：",[20,30361,30363],{"className":22,"code":30362,"language":24,"meta":25,"style":25},"mount | grep -i project\n",[27,30364,30365],{"__ignoreMap":25},[30,30366,30367,30370,30372,30375,30377],{"class":32,"line":33},[30,30368,30369],{"class":36},"mount",[30,30371,25282],{"class":317},[30,30373,30374],{"class":36}," grep",[30,30376,26568],{"class":40},[30,30378,30379],{"class":74}," project\n",[157,30381,30382],{},"也可以通过ls来进行查看",[234,30384,30385],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":44,"depth":44,"links":30387},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30244,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30394,"title":30395,"body":30396,"description":242,"extension":243,"meta":30400,"navigation":245,"path":30402,"seo":30403,"stem":30404,"__hash__":30405},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30397,"toc":30398},[],{"title":25,"searchDepth":44,"depth":44,"links":30399},[],{"category":30401},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30395,"description":242},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30407,"title":30408,"body":30409,"description":242,"extension":243,"meta":30413,"navigation":245,"path":30414,"seo":30415,"stem":30416,"__hash__":30417},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30410,"toc":30411},[],{"title":25,"searchDepth":44,"depth":44,"links":30412},[],{"category":30401},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30408,"description":242},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30419,"title":30420,"body":30421,"description":242,"extension":243,"meta":30714,"navigation":245,"path":30715,"seo":30716,"stem":30717,"__hash__":30718},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30422,"toc":30712},[30423,30426,30434,30449,30454,30505,30508,30514,30701,30706,30709],[10,30424,30420],{"id":30425},"_1验证深度学习环境",[157,30427,30428,30429],{},"关于环境的安装，看",[558,30430,30433],{"href":30431,"rel":30432},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24045],"Pytorch-->深度学习",[157,30435,30436,30437,30440,30441,30444,30445,30448],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[27,30438,30439],{},"pytorch-cuda=12.4"," 是一个“ ",[469,30442,30443],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[469,30446,30447],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[157,30450,30451],{},[160,30452],{"alt":25,"src":30453},"\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",[20,30455,30457],{"className":22,"code":30456,"language":24,"meta":25,"style":25},"# CUDA 12.4\nconda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia\n",[27,30458,30459,30464],{"__ignoreMap":25},[30,30460,30461],{"class":32,"line":33},[30,30462,30463],{"class":379},"# CUDA 12.4\n",[30,30465,30466,30469,30471,30474,30477,30480,30483,30486,30488,30491,30494,30497,30500,30502],{"class":32,"line":44},[30,30467,30468],{"class":36},"conda",[30,30470,24014],{"class":74},[30,30472,30473],{"class":74}," pytorch==",[30,30475,30476],{"class":40},"2.5.1",[30,30478,30479],{"class":74}," torchvision==",[30,30481,30482],{"class":40},"0.20.1",[30,30484,30485],{"class":74}," torchaudio==",[30,30487,30476],{"class":40},[30,30489,30490],{"class":74}," pytorch-cuda=",[30,30492,30493],{"class":40},"12.4",[30,30495,30496],{"class":40}," -c",[30,30498,30499],{"class":74}," pytorch",[30,30501,30496],{"class":40},[30,30503,30504],{"class":74}," nvidia\n",[157,30506,30507],{},"）：",[157,30509,30510],{},[558,30511,30512],{"href":30512,"rel":30513},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24045],[20,30515,30519],{"className":30516,"code":30517,"language":30518,"meta":25,"style":25},"language-python shiki shiki-themes github-light github-dark","# 对深度学习环境进行测试\nimport torch\n# 查看cuda是否被激活\nflag=torch.cuda.is_available()\nprint(\"cuda:\", flag)   #返回true的话说明被激活\n# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\nngpu=1\ndevice=torch.device(\"cuda:0\" if(torch.cuda.is_available() and ngpu>0) else \"cpu\")\nprint(device)\nprint(torch.cuda.get_device_name(0))\nprint(torch.rand(3,3).cuda())\n# 查看cuda和cudnn的版本\ncuda_version=torch.version.cuda\nprint(\"cuda version\",cuda_version)\ncudnn_version=torch.backends.cudnn.version()\nprint(\"cudnn version\",cudnn_version)\n","python",[27,30520,30521,30526,30534,30539,30549,30565,30570,30580,30617,30624,30636,30652,30657,30667,30679,30689],{"__ignoreMap":25},[30,30522,30523],{"class":32,"line":33},[30,30524,30525],{"class":379},"# 对深度学习环境进行测试\n",[30,30527,30528,30531],{"class":32,"line":44},[30,30529,30530],{"class":317},"import",[30,30532,30533],{"class":321}," torch\n",[30,30535,30536],{"class":32,"line":52},[30,30537,30538],{"class":379},"# 查看cuda是否被激活\n",[30,30540,30541,30544,30546],{"class":32,"line":60},[30,30542,30543],{"class":321},"flag",[30,30545,367],{"class":317},[30,30547,30548],{"class":321},"torch.cuda.is_available()\n",[30,30550,30551,30554,30556,30559,30562],{"class":32,"line":68},[30,30552,30553],{"class":40},"print",[30,30555,322],{"class":321},[30,30557,30558],{"class":74},"\"cuda:\"",[30,30560,30561],{"class":321},", flag)   ",[30,30563,30564],{"class":379},"#返回true的话说明被激活\n",[30,30566,30567],{"class":32,"line":80},[30,30568,30569],{"class":379},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[30,30571,30572,30575,30577],{"class":32,"line":88},[30,30573,30574],{"class":321},"ngpu",[30,30576,367],{"class":317},[30,30578,30579],{"class":40},"1\n",[30,30581,30582,30585,30587,30590,30593,30595,30598,30601,30604,30606,30608,30610,30612,30615],{"class":32,"line":96},[30,30583,30584],{"class":321},"device",[30,30586,367],{"class":317},[30,30588,30589],{"class":321},"torch.device(",[30,30591,30592],{"class":74},"\"cuda:0\"",[30,30594,1887],{"class":317},[30,30596,30597],{"class":321},"(torch.cuda.is_available() ",[30,30599,30600],{"class":317},"and",[30,30602,30603],{"class":321}," ngpu",[30,30605,1280],{"class":317},[30,30607,511],{"class":40},[30,30609,13896],{"class":321},[30,30611,1884],{"class":317},[30,30613,30614],{"class":74}," \"cpu\"",[30,30616,328],{"class":321},[30,30618,30619,30621],{"class":32,"line":104},[30,30620,30553],{"class":40},[30,30622,30623],{"class":321},"(device)\n",[30,30625,30626,30628,30631,30633],{"class":32,"line":112},[30,30627,30553],{"class":40},[30,30629,30630],{"class":321},"(torch.cuda.get_device_name(",[30,30632,511],{"class":40},[30,30634,30635],{"class":321},"))\n",[30,30637,30638,30640,30643,30645,30647,30649],{"class":32,"line":123},[30,30639,30553],{"class":40},[30,30641,30642],{"class":321},"(torch.rand(",[30,30644,392],{"class":40},[30,30646,698],{"class":321},[30,30648,392],{"class":40},[30,30650,30651],{"class":321},").cuda())\n",[30,30653,30654],{"class":32,"line":131},[30,30655,30656],{"class":379},"# 查看cuda和cudnn的版本\n",[30,30658,30659,30662,30664],{"class":32,"line":142},[30,30660,30661],{"class":321},"cuda_version",[30,30663,367],{"class":317},[30,30665,30666],{"class":321},"torch.version.cuda\n",[30,30668,30669,30671,30673,30676],{"class":32,"line":1811},[30,30670,30553],{"class":40},[30,30672,322],{"class":321},[30,30674,30675],{"class":74},"\"cuda version\"",[30,30677,30678],{"class":321},",cuda_version)\n",[30,30680,30681,30684,30686],{"class":32,"line":1825},[30,30682,30683],{"class":321},"cudnn_version",[30,30685,367],{"class":317},[30,30687,30688],{"class":321},"torch.backends.cudnn.version()\n",[30,30690,30691,30693,30695,30698],{"class":32,"line":1830},[30,30692,30553],{"class":40},[30,30694,322],{"class":321},[30,30696,30697],{"class":74},"\"cudnn version\"",[30,30699,30700],{"class":321},",cudnn_version)\n",[157,30702,30703],{},[160,30704],{"alt":25,"src":30705},"\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",[157,30707,30708],{},"cuda:0 指的是一块显卡",[234,30710,30711],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":25,"searchDepth":44,"depth":44,"links":30713},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30420,"description":242},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30720,"title":30721,"body":30722,"description":242,"extension":243,"meta":50526,"navigation":245,"path":50527,"seo":50528,"stem":50529,"__hash__":50530},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30723,"toc":50520},[30724,30727,30731,30735,30738,30743,30748,30751,30756,30761,30766,30769,30773,30778,30782,30787,30790,30795,30798,30801,30804,30807,30812,30815,30820,30825,30830,30835,30838,30842,30845,30850,31454,31459,31462,31467,31470,31473,31937,31940,31943,31946,31949,34000,34003,34008,34013,34808,34811,34816,35594,35598,37257,37261,37975,37979,37983,37988,37993,37998,38001,38006,38011,38016,38021,38026,38030,38035,39317,39322,39325,39328,39331,39486,39489,39492,40708,40713,41408,41412,41416,41421,41426,41429,41434,41439,41444,41449,41454,41459,41464,41469,41474,41479,41484,41489,41494,41499,41504,41509,41514,41519,41524,41529,41534,41539,41544,41549,41554,41559,41564,41569,41574,41579,41583,41587,41590,43068,43072,44719,44723,45417,45421,45424,45427,45971,45974,45978,45981,47378,47382,47385,47963,49750,49754,49757,50517],[10,30725,30721],{"id":30726},"_2经典神经网络",[287,30728,30730],{"id":30729},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22180,30732,30734],{"id":30733},"_211原理介绍","2.1.1.原理介绍",[157,30736,30737],{},"LeNet-5",[271,30739,30740],{},[150,30741,30742],{},"原理",[157,30744,30745],{},[160,30746],{"alt":25,"src":30747},"\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",[157,30749,30750],{},"B是batch批次；C是channel通道",[271,30752,30753],{"start":44},[150,30754,30755],{},"网络参数详细",[157,30757,30758],{},[160,30759],{"alt":25,"src":30760},"\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",[157,30762,30763],{},[160,30764],{"alt":25,"src":30765},"\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",[157,30767,30768],{},"AlexNet",[271,30770,30771],{},[150,30772,30742],{},[157,30774,30775],{},[160,30776],{"alt":25,"src":30777},"\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",[271,30779,30780],{"start":44},[150,30781,30755],{},[157,30783,30784],{},[160,30785],{"alt":25,"src":30786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[157,30788,30789],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[157,30791,30792],{},[160,30793],{"alt":25,"src":30794},"\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",[157,30796,30797],{},"数据处理中的图像增强操作:",[157,30799,30800],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[157,30802,30803],{},"①增加数据量，保证训练数据充足；②防止过拟合",[157,30805,30806],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[157,30808,30809],{},[160,30810],{"alt":25,"src":30811},"\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",[157,30813,30814],{},"提升网络精确度的方法：LRN正则化",[157,30816,30817],{},[160,30818],{"alt":25,"src":30819},"\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",[157,30821,30822],{},[160,30823],{"alt":25,"src":30824},"\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",[271,30826,30827],{"start":52},[150,30828,30829],{},"AlexNet的总结",[157,30831,30832],{},[160,30833],{"alt":25,"src":30834},"\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",[157,30836,30837],{},"比LeNet模型要深一丢丢",[22180,30839,30841],{"id":30840},"_212代码实现","2.1.2.代码实现",[157,30843,30844],{},"（1）LeNet",[271,30846,30847],{},[150,30848,30849],{},"模型搭建",[20,30851,30853],{"className":30516,"code":30852,"language":30518,"meta":25,"style":25},"# 导入库\nimport torch\n# 导入神经网络层\nfrom torch import nn\n# 导入展示神经网络参数的包\nfrom torchsummary import summary\n\nclass LeNet(nn.Module):\n    # 模型初始化:\n    # 定义一些网络层和激活函数\n    def __init__(self):\n        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n        super(LeNet,self).__init__()\n\n        # 定义网络层\n        self.c1=nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5,padding=2)\n        self.sig=nn.Sigmoid()\n        # 定义池化\n        self.s2=nn.AvgPool2d(kernel_size=2,stride=2)\n        self.c3=nn.Conv2d(in_channels=6,out_channels=16,kernel_size=5)\n        self.s4=nn.AvgPool2d(kernel_size=2,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n        # 定义全连接层\n        self.f5=nn.Linear(400,120)\n        self.f6=nn.Linear(120,84)\n        self.f7=nn.Linear(84,10)\n\n    # 写工具->写前向传播\n    def forward(self,x):\n        x=self.sig(self.c1(x))\n        x=self.s2(x)\n        x=self.sig(self.c3(x))\n        x=self.s4(x)\n        x=self.flatten(x)\n        x=self.sig(self.f5(x))\n        x=self.sig(self.f6(x))\n        x=self.f7(x)\n        return x\n\nif __name__==\"__main__\":\n    # 判断是否有cuda是否激活,有GPU会返回cuda\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 如果就是想指定用cpu用下方代码:\n    # device=\"cpu\"\n    # print(device)\n\n    # 实例化模型\n    # 将模型放到设备中去运行\n    model=LeNet().to(device)\n    print(summary(model,(1,28,28)))\n",[27,30854,30855,30860,30866,30871,30884,30889,30901,30905,30925,30930,30935,30946,30951,30970,30974,30979,31028,31040,31045,31074,31109,31136,31141,31153,31158,31178,31197,31216,31220,31225,31235,31252,31263,31278,31289,31300,31315,31330,31341,31348,31352,31366,31371,31394,31399,31404,31409,31413,31418,31423,31433],{"__ignoreMap":25},[30,30856,30857],{"class":32,"line":33},[30,30858,30859],{"class":379},"# 导入库\n",[30,30861,30862,30864],{"class":32,"line":44},[30,30863,30530],{"class":317},[30,30865,30533],{"class":321},[30,30867,30868],{"class":32,"line":52},[30,30869,30870],{"class":379},"# 导入神经网络层\n",[30,30872,30873,30876,30879,30881],{"class":32,"line":60},[30,30874,30875],{"class":317},"from",[30,30877,30878],{"class":321}," torch ",[30,30880,30530],{"class":317},[30,30882,30883],{"class":321}," nn\n",[30,30885,30886],{"class":32,"line":68},[30,30887,30888],{"class":379},"# 导入展示神经网络参数的包\n",[30,30890,30891,30893,30896,30898],{"class":32,"line":80},[30,30892,30875],{"class":317},[30,30894,30895],{"class":321}," torchsummary ",[30,30897,30530],{"class":317},[30,30899,30900],{"class":321}," summary\n",[30,30902,30903],{"class":32,"line":88},[30,30904,2582],{"emptyLinePlaceholder":245},[30,30906,30907,30909,30912,30914,30917,30919,30922],{"class":32,"line":96},[30,30908,14876],{"class":317},[30,30910,30911],{"class":36}," LeNet",[30,30913,322],{"class":321},[30,30915,30916],{"class":36},"nn",[30,30918,878],{"class":321},[30,30920,30921],{"class":36},"Module",[30,30923,30924],{"class":321},"):\n",[30,30926,30927],{"class":32,"line":104},[30,30928,30929],{"class":379},"    # 模型初始化:\n",[30,30931,30932],{"class":32,"line":112},[30,30933,30934],{"class":379},"    # 定义一些网络层和激活函数\n",[30,30936,30937,30940,30943],{"class":32,"line":123},[30,30938,30939],{"class":317},"    def",[30,30941,30942],{"class":40}," __init__",[30,30944,30945],{"class":321},"(self):\n",[30,30947,30948],{"class":32,"line":131},[30,30949,30950],{"class":379},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[30,30952,30953,30956,30959,30962,30965,30968],{"class":32,"line":142},[30,30954,30955],{"class":40},"        super",[30,30957,30958],{"class":321},"(LeNet,",[30,30960,30961],{"class":40},"self",[30,30963,30964],{"class":321},").",[30,30966,30967],{"class":40},"__init__",[30,30969,2158],{"class":321},[30,30971,30972],{"class":32,"line":1811},[30,30973,2582],{"emptyLinePlaceholder":245},[30,30975,30976],{"class":32,"line":1825},[30,30977,30978],{"class":379},"        # 定义网络层\n",[30,30980,30981,30984,30987,30989,30992,30995,30997,30999,31001,31004,31006,31008,31010,31013,31015,31017,31019,31022,31024,31026],{"class":32,"line":1830},[30,30982,30983],{"class":40},"        self",[30,30985,30986],{"class":321},".c1",[30,30988,367],{"class":317},[30,30990,30991],{"class":321},"nn.Conv2d(",[30,30993,30994],{"class":5398},"in_channels",[30,30996,367],{"class":317},[30,30998,537],{"class":40},[30,31000,698],{"class":321},[30,31002,31003],{"class":5398},"out_channels",[30,31005,367],{"class":317},[30,31007,664],{"class":40},[30,31009,698],{"class":321},[30,31011,31012],{"class":5398},"kernel_size",[30,31014,367],{"class":317},[30,31016,639],{"class":40},[30,31018,698],{"class":321},[30,31020,31021],{"class":5398},"padding",[30,31023,367],{"class":317},[30,31025,398],{"class":40},[30,31027,328],{"class":321},[30,31029,31030,31032,31035,31037],{"class":32,"line":1836},[30,31031,30983],{"class":40},[30,31033,31034],{"class":321},".sig",[30,31036,367],{"class":317},[30,31038,31039],{"class":321},"nn.Sigmoid()\n",[30,31041,31042],{"class":32,"line":1857},[30,31043,31044],{"class":379},"        # 定义池化\n",[30,31046,31047,31049,31052,31054,31057,31059,31061,31063,31065,31068,31070,31072],{"class":32,"line":1862},[30,31048,30983],{"class":40},[30,31050,31051],{"class":321},".s2",[30,31053,367],{"class":317},[30,31055,31056],{"class":321},"nn.AvgPool2d(",[30,31058,31012],{"class":5398},[30,31060,367],{"class":317},[30,31062,398],{"class":40},[30,31064,698],{"class":321},[30,31066,31067],{"class":5398},"stride",[30,31069,367],{"class":317},[30,31071,398],{"class":40},[30,31073,328],{"class":321},[30,31075,31076,31078,31081,31083,31085,31087,31089,31091,31093,31095,31097,31099,31101,31103,31105,31107],{"class":32,"line":1876},[30,31077,30983],{"class":40},[30,31079,31080],{"class":321},".c3",[30,31082,367],{"class":317},[30,31084,30991],{"class":321},[30,31086,30994],{"class":5398},[30,31088,367],{"class":317},[30,31090,664],{"class":40},[30,31092,698],{"class":321},[30,31094,31003],{"class":5398},[30,31096,367],{"class":317},[30,31098,921],{"class":40},[30,31100,698],{"class":321},[30,31102,31012],{"class":5398},[30,31104,367],{"class":317},[30,31106,639],{"class":40},[30,31108,328],{"class":321},[30,31110,31111,31113,31116,31118,31120,31122,31124,31126,31128,31130,31132,31134],{"class":32,"line":1881},[30,31112,30983],{"class":40},[30,31114,31115],{"class":321},".s4",[30,31117,367],{"class":317},[30,31119,31056],{"class":321},[30,31121,31012],{"class":5398},[30,31123,367],{"class":317},[30,31125,398],{"class":40},[30,31127,698],{"class":321},[30,31129,31067],{"class":5398},[30,31131,367],{"class":317},[30,31133,398],{"class":40},[30,31135,328],{"class":321},[30,31137,31138],{"class":32,"line":1910},[30,31139,31140],{"class":379},"        # 定义平展层\n",[30,31142,31143,31145,31148,31150],{"class":32,"line":1915},[30,31144,30983],{"class":40},[30,31146,31147],{"class":321},".flatten",[30,31149,367],{"class":317},[30,31151,31152],{"class":321},"nn.Flatten()\n",[30,31154,31155],{"class":32,"line":1932},[30,31156,31157],{"class":379},"        # 定义全连接层\n",[30,31159,31160,31162,31165,31167,31170,31172,31174,31176],{"class":32,"line":1937},[30,31161,30983],{"class":40},[30,31163,31164],{"class":321},".f5",[30,31166,367],{"class":317},[30,31168,31169],{"class":321},"nn.Linear(",[30,31171,4169],{"class":40},[30,31173,698],{"class":321},[30,31175,1137],{"class":40},[30,31177,328],{"class":321},[30,31179,31180,31182,31185,31187,31189,31191,31193,31195],{"class":32,"line":1942},[30,31181,30983],{"class":40},[30,31183,31184],{"class":321},".f6",[30,31186,367],{"class":317},[30,31188,31169],{"class":321},[30,31190,1137],{"class":40},[30,31192,698],{"class":321},[30,31194,1031],{"class":40},[30,31196,328],{"class":321},[30,31198,31199,31201,31204,31206,31208,31210,31212,31214],{"class":32,"line":1947},[30,31200,30983],{"class":40},[30,31202,31203],{"class":321},".f7",[30,31205,367],{"class":317},[30,31207,31169],{"class":321},[30,31209,1031],{"class":40},[30,31211,698],{"class":321},[30,31213,766],{"class":40},[30,31215,328],{"class":321},[30,31217,31218],{"class":32,"line":1961},[30,31219,2582],{"emptyLinePlaceholder":245},[30,31221,31222],{"class":32,"line":1966},[30,31223,31224],{"class":379},"    # 写工具->写前向传播\n",[30,31226,31227,31229,31232],{"class":32,"line":2759},[30,31228,30939],{"class":317},[30,31230,31231],{"class":36}," forward",[30,31233,31234],{"class":321},"(self,x):\n",[30,31236,31237,31240,31242,31244,31247,31249],{"class":32,"line":2773},[30,31238,31239],{"class":321},"        x",[30,31241,367],{"class":317},[30,31243,30961],{"class":40},[30,31245,31246],{"class":321},".sig(",[30,31248,30961],{"class":40},[30,31250,31251],{"class":321},".c1(x))\n",[30,31253,31254,31256,31258,31260],{"class":32,"line":2781},[30,31255,31239],{"class":321},[30,31257,367],{"class":317},[30,31259,30961],{"class":40},[30,31261,31262],{"class":321},".s2(x)\n",[30,31264,31265,31267,31269,31271,31273,31275],{"class":32,"line":2786},[30,31266,31239],{"class":321},[30,31268,367],{"class":317},[30,31270,30961],{"class":40},[30,31272,31246],{"class":321},[30,31274,30961],{"class":40},[30,31276,31277],{"class":321},".c3(x))\n",[30,31279,31280,31282,31284,31286],{"class":32,"line":2792},[30,31281,31239],{"class":321},[30,31283,367],{"class":317},[30,31285,30961],{"class":40},[30,31287,31288],{"class":321},".s4(x)\n",[30,31290,31291,31293,31295,31297],{"class":32,"line":2798},[30,31292,31239],{"class":321},[30,31294,367],{"class":317},[30,31296,30961],{"class":40},[30,31298,31299],{"class":321},".flatten(x)\n",[30,31301,31302,31304,31306,31308,31310,31312],{"class":32,"line":2803},[30,31303,31239],{"class":321},[30,31305,367],{"class":317},[30,31307,30961],{"class":40},[30,31309,31246],{"class":321},[30,31311,30961],{"class":40},[30,31313,31314],{"class":321},".f5(x))\n",[30,31316,31317,31319,31321,31323,31325,31327],{"class":32,"line":8130},[30,31318,31239],{"class":321},[30,31320,367],{"class":317},[30,31322,30961],{"class":40},[30,31324,31246],{"class":321},[30,31326,30961],{"class":40},[30,31328,31329],{"class":321},".f6(x))\n",[30,31331,31332,31334,31336,31338],{"class":32,"line":8154},[30,31333,31239],{"class":321},[30,31335,367],{"class":317},[30,31337,30961],{"class":40},[30,31339,31340],{"class":321},".f7(x)\n",[30,31342,31343,31345],{"class":32,"line":8159},[30,31344,14934],{"class":317},[30,31346,31347],{"class":321}," x\n",[30,31349,31350],{"class":32,"line":8165},[30,31351,2582],{"emptyLinePlaceholder":245},[30,31353,31354,31356,31359,31361,31364],{"class":32,"line":8192},[30,31355,1717],{"class":317},[30,31357,31358],{"class":40}," __name__",[30,31360,3131],{"class":317},[30,31362,31363],{"class":74},"\"__main__\"",[30,31365,3921],{"class":321},[30,31367,31368],{"class":32,"line":8197},[30,31369,31370],{"class":379},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[30,31372,31373,31376,31378,31380,31383,31385,31388,31390,31392],{"class":32,"line":8203},[30,31374,31375],{"class":321},"    device",[30,31377,367],{"class":317},[30,31379,30589],{"class":321},[30,31381,31382],{"class":74},"\"cuda\"",[30,31384,1887],{"class":317},[30,31386,31387],{"class":321}," torch.cuda.is_available() ",[30,31389,1884],{"class":317},[30,31391,30614],{"class":74},[30,31393,328],{"class":321},[30,31395,31396],{"class":32,"line":8215},[30,31397,31398],{"class":379},"    # 如果就是想指定用cpu用下方代码:\n",[30,31400,31401],{"class":32,"line":8227},[30,31402,31403],{"class":379},"    # device=\"cpu\"\n",[30,31405,31406],{"class":32,"line":8239},[30,31407,31408],{"class":379},"    # print(device)\n",[30,31410,31411],{"class":32,"line":9898},[30,31412,2582],{"emptyLinePlaceholder":245},[30,31414,31415],{"class":32,"line":9923},[30,31416,31417],{"class":379},"    # 实例化模型\n",[30,31419,31420],{"class":32,"line":9946},[30,31421,31422],{"class":379},"    # 将模型放到设备中去运行\n",[30,31424,31425,31428,31430],{"class":32,"line":9970},[30,31426,31427],{"class":321},"    model",[30,31429,367],{"class":317},[30,31431,31432],{"class":321},"LeNet().to(device)\n",[30,31434,31435,31438,31441,31443,31445,31447,31449,31451],{"class":32,"line":9975},[30,31436,31437],{"class":40},"    print",[30,31439,31440],{"class":321},"(summary(model,(",[30,31442,537],{"class":40},[30,31444,698],{"class":321},[30,31446,1221],{"class":40},[30,31448,698],{"class":321},[30,31450,1221],{"class":40},[30,31452,31453],{"class":321},")))\n",[157,31455,31456],{},[160,31457],{"alt":25,"src":31458},"\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",[157,31460,31461],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[271,31463,31464],{"start":44},[150,31465,31466],{},"训练",[157,31468,31469],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[157,31471,31472],{},"在训练之前可以将数据展示看一下",[20,31474,31476],{"className":30516,"code":31475,"language":30518,"meta":25,"style":25},"# 建立画图的函数，用于展示数据\n# torchvision中包含很多内置的数据集\nfrom sklearn.externals.array_api_compat.torch import squeeze\nfrom torchvision.datasets import FashionMNIST\nimport numpy as np\n# 引入处理数据集的包\nfrom torchvision import transforms\n# 从torch库中引入数据处理的包\nimport torch.utils.data as Data\n# 导入画图的库\nimport matplotlib.pyplot as plt\n\n\ntrain_data=FashionMNIST(root='.\u002Fdata',\n                        train=True,\n                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n                        transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                        download=True)\n\n# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\ntrain_loader=Data.DataLoader(dataset=train_data,\n                             batch_size=64,\n                             # 数据是否打乱\n                             shuffle=True,\n                             # 规定加载数据的进程\n                             num_workers=0)\n\n# 获得一个batch的数据\nfor step,(b_x,b_y) in enumerate(train_loader):\n    if step > 0:\n        break\n# squeeze()这个函数是去除张量中所有大小为1的维度\nbatch_x=b_x.squeeze().numpy()  #将四维张量移除所有维度为1的维度,并转换成numpy数组\nbatch_y=b_y.numpy()   #将张量转换成功numpy数组\nclass_label=train_data.classes  #训练集标签\n# print(class_label)\n\n# 可视化一个batch的图像\nplt.figure(figsize=(12,5))\nfor ii in np.arange(len(batch_y)):\n    plt.subplot(4,16,ii + 1)\n    plt.imshow(batch_x[ii,:,:],cmap=plt.cm.gray)\n    plt.title(class_label[batch_y[ii]],size=10)\n    plt.axis(\"off\")\n    plt.subplots_adjust(wspace=0.05)\nplt.show()\n",[27,31477,31478,31483,31488,31500,31512,31525,31530,31542,31547,31559,31564,31576,31580,31584,31605,31617,31622,31643,31654,31658,31663,31681,31692,31697,31708,31713,31724,31728,31733,31748,31761,31766,31771,31784,31797,31810,31815,31819,31824,31844,31861,31881,31894,31907,31917,31932],{"__ignoreMap":25},[30,31479,31480],{"class":32,"line":33},[30,31481,31482],{"class":379},"# 建立画图的函数，用于展示数据\n",[30,31484,31485],{"class":32,"line":44},[30,31486,31487],{"class":379},"# torchvision中包含很多内置的数据集\n",[30,31489,31490,31492,31495,31497],{"class":32,"line":52},[30,31491,30875],{"class":317},[30,31493,31494],{"class":321}," sklearn.externals.array_api_compat.torch ",[30,31496,30530],{"class":317},[30,31498,31499],{"class":321}," squeeze\n",[30,31501,31502,31504,31507,31509],{"class":32,"line":60},[30,31503,30875],{"class":317},[30,31505,31506],{"class":321}," torchvision.datasets ",[30,31508,30530],{"class":317},[30,31510,31511],{"class":321}," FashionMNIST\n",[30,31513,31514,31516,31519,31522],{"class":32,"line":68},[30,31515,30530],{"class":317},[30,31517,31518],{"class":321}," numpy ",[30,31520,31521],{"class":317},"as",[30,31523,31524],{"class":321}," np\n",[30,31526,31527],{"class":32,"line":80},[30,31528,31529],{"class":379},"# 引入处理数据集的包\n",[30,31531,31532,31534,31537,31539],{"class":32,"line":88},[30,31533,30875],{"class":317},[30,31535,31536],{"class":321}," torchvision ",[30,31538,30530],{"class":317},[30,31540,31541],{"class":321}," transforms\n",[30,31543,31544],{"class":32,"line":96},[30,31545,31546],{"class":379},"# 从torch库中引入数据处理的包\n",[30,31548,31549,31551,31554,31556],{"class":32,"line":104},[30,31550,30530],{"class":317},[30,31552,31553],{"class":321}," torch.utils.data ",[30,31555,31521],{"class":317},[30,31557,31558],{"class":321}," Data\n",[30,31560,31561],{"class":32,"line":112},[30,31562,31563],{"class":379},"# 导入画图的库\n",[30,31565,31566,31568,31571,31573],{"class":32,"line":123},[30,31567,30530],{"class":317},[30,31569,31570],{"class":321}," matplotlib.pyplot ",[30,31572,31521],{"class":317},[30,31574,31575],{"class":321}," plt\n",[30,31577,31578],{"class":32,"line":131},[30,31579,2582],{"emptyLinePlaceholder":245},[30,31581,31582],{"class":32,"line":142},[30,31583,2582],{"emptyLinePlaceholder":245},[30,31585,31586,31589,31591,31594,31597,31599,31602],{"class":32,"line":1811},[30,31587,31588],{"class":321},"train_data",[30,31590,367],{"class":317},[30,31592,31593],{"class":321},"FashionMNIST(",[30,31595,31596],{"class":5398},"root",[30,31598,367],{"class":317},[30,31600,31601],{"class":74},"'.\u002Fdata'",[30,31603,31604],{"class":321},",\n",[30,31606,31607,31610,31612,31615],{"class":32,"line":1825},[30,31608,31609],{"class":5398},"                        train",[30,31611,367],{"class":317},[30,31613,31614],{"class":40},"True",[30,31616,31604],{"class":321},[30,31618,31619],{"class":32,"line":1830},[30,31620,31621],{"class":379},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[30,31623,31624,31627,31629,31632,31635,31637,31640],{"class":32,"line":1836},[30,31625,31626],{"class":5398},"                        transform",[30,31628,367],{"class":317},[30,31630,31631],{"class":321},"transforms.Compose([transforms.Resize(",[30,31633,31634],{"class":5398},"size",[30,31636,367],{"class":317},[30,31638,31639],{"class":40},"224",[30,31641,31642],{"class":321},"),transforms.ToTensor()]),\n",[30,31644,31645,31648,31650,31652],{"class":32,"line":1857},[30,31646,31647],{"class":5398},"                        download",[30,31649,367],{"class":317},[30,31651,31614],{"class":40},[30,31653,328],{"class":321},[30,31655,31656],{"class":32,"line":1862},[30,31657,2582],{"emptyLinePlaceholder":245},[30,31659,31660],{"class":32,"line":1876},[30,31661,31662],{"class":379},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[30,31664,31665,31668,31670,31673,31676,31678],{"class":32,"line":1881},[30,31666,31667],{"class":321},"train_loader",[30,31669,367],{"class":317},[30,31671,31672],{"class":321},"Data.DataLoader(",[30,31674,31675],{"class":5398},"dataset",[30,31677,367],{"class":317},[30,31679,31680],{"class":321},"train_data,\n",[30,31682,31683,31686,31688,31690],{"class":32,"line":1910},[30,31684,31685],{"class":5398},"                             batch_size",[30,31687,367],{"class":317},[30,31689,523],{"class":40},[30,31691,31604],{"class":321},[30,31693,31694],{"class":32,"line":1915},[30,31695,31696],{"class":379},"                             # 数据是否打乱\n",[30,31698,31699,31702,31704,31706],{"class":32,"line":1932},[30,31700,31701],{"class":5398},"                             shuffle",[30,31703,367],{"class":317},[30,31705,31614],{"class":40},[30,31707,31604],{"class":321},[30,31709,31710],{"class":32,"line":1937},[30,31711,31712],{"class":379},"                             # 规定加载数据的进程\n",[30,31714,31715,31718,31720,31722],{"class":32,"line":1942},[30,31716,31717],{"class":5398},"                             num_workers",[30,31719,367],{"class":317},[30,31721,511],{"class":40},[30,31723,328],{"class":321},[30,31725,31726],{"class":32,"line":1947},[30,31727,2582],{"emptyLinePlaceholder":245},[30,31729,31730],{"class":32,"line":1961},[30,31731,31732],{"class":379},"# 获得一个batch的数据\n",[30,31734,31735,31737,31740,31742,31745],{"class":32,"line":1966},[30,31736,3207],{"class":317},[30,31738,31739],{"class":321}," step,(b_x,b_y) ",[30,31741,26181],{"class":317},[30,31743,31744],{"class":40}," enumerate",[30,31746,31747],{"class":321},"(train_loader):\n",[30,31749,31750,31752,31755,31757,31759],{"class":32,"line":2759},[30,31751,3283],{"class":317},[30,31753,31754],{"class":321}," step ",[30,31756,1280],{"class":317},[30,31758,4275],{"class":40},[30,31760,3921],{"class":321},[30,31762,31763],{"class":32,"line":2773},[30,31764,31765],{"class":317},"        break\n",[30,31767,31768],{"class":32,"line":2781},[30,31769,31770],{"class":379},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[30,31772,31773,31776,31778,31781],{"class":32,"line":2786},[30,31774,31775],{"class":321},"batch_x",[30,31777,367],{"class":317},[30,31779,31780],{"class":321},"b_x.squeeze().numpy()  ",[30,31782,31783],{"class":379},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[30,31785,31786,31789,31791,31794],{"class":32,"line":2792},[30,31787,31788],{"class":321},"batch_y",[30,31790,367],{"class":317},[30,31792,31793],{"class":321},"b_y.numpy()   ",[30,31795,31796],{"class":379},"#将张量转换成功numpy数组\n",[30,31798,31799,31802,31804,31807],{"class":32,"line":2798},[30,31800,31801],{"class":321},"class_label",[30,31803,367],{"class":317},[30,31805,31806],{"class":321},"train_data.classes  ",[30,31808,31809],{"class":379},"#训练集标签\n",[30,31811,31812],{"class":32,"line":2803},[30,31813,31814],{"class":379},"# print(class_label)\n",[30,31816,31817],{"class":32,"line":8130},[30,31818,2582],{"emptyLinePlaceholder":245},[30,31820,31821],{"class":32,"line":8154},[30,31822,31823],{"class":379},"# 可视化一个batch的图像\n",[30,31825,31826,31829,31832,31834,31836,31838,31840,31842],{"class":32,"line":8159},[30,31827,31828],{"class":321},"plt.figure(",[30,31830,31831],{"class":5398},"figsize",[30,31833,367],{"class":317},[30,31835,322],{"class":321},[30,31837,818],{"class":40},[30,31839,698],{"class":321},[30,31841,639],{"class":40},[30,31843,30635],{"class":321},[30,31845,31846,31848,31851,31853,31856,31858],{"class":32,"line":8165},[30,31847,3207],{"class":317},[30,31849,31850],{"class":321}," ii ",[30,31852,26181],{"class":317},[30,31854,31855],{"class":321}," np.arange(",[30,31857,7540],{"class":40},[30,31859,31860],{"class":321},"(batch_y)):\n",[30,31862,31863,31866,31868,31870,31872,31875,31877,31879],{"class":32,"line":8192},[30,31864,31865],{"class":321},"    plt.subplot(",[30,31867,613],{"class":40},[30,31869,698],{"class":321},[30,31871,921],{"class":40},[30,31873,31874],{"class":321},",ii ",[30,31876,801],{"class":317},[30,31878,25291],{"class":40},[30,31880,328],{"class":321},[30,31882,31883,31886,31889,31891],{"class":32,"line":8197},[30,31884,31885],{"class":321},"    plt.imshow(batch_x[ii,:,:],",[30,31887,31888],{"class":5398},"cmap",[30,31890,367],{"class":317},[30,31892,31893],{"class":321},"plt.cm.gray)\n",[30,31895,31896,31899,31901,31903,31905],{"class":32,"line":8203},[30,31897,31898],{"class":321},"    plt.title(class_label[batch_y[ii]],",[30,31900,31634],{"class":5398},[30,31902,367],{"class":317},[30,31904,766],{"class":40},[30,31906,328],{"class":321},[30,31908,31909,31912,31915],{"class":32,"line":8215},[30,31910,31911],{"class":321},"    plt.axis(",[30,31913,31914],{"class":74},"\"off\"",[30,31916,328],{"class":321},[30,31918,31919,31922,31925,31927,31930],{"class":32,"line":8227},[30,31920,31921],{"class":321},"    plt.subplots_adjust(",[30,31923,31924],{"class":5398},"wspace",[30,31926,367],{"class":317},[30,31928,31929],{"class":40},"0.05",[30,31931,328],{"class":321},[30,31933,31934],{"class":32,"line":8239},[30,31935,31936],{"class":321},"plt.show()\n",[157,31938,31939],{},"用matplotlib进行展示的过程可以后续再补",[157,31941,31942],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[157,31944,31945],{},"训练次数就是按照批次过整个训练集数据的次数",[157,31947,31948],{},"模型训练：",[20,31950,31952],{"className":30516,"code":31951,"language":30518,"meta":25,"style":25},"import copy\nimport time\n\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import LeNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output = model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab = torch.argmax(output, dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss = criterion(output, b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss += val_batch_loss.item() * b_x.size(0)\n                val_corrects += torch.sum(pre_lab == b_y.data)\n                # 当前用于验证的样本数量\n            val_num += b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数\n    # 加载最高准确率下的模型参数\n    # model.load_state_dict(best_model_wts)\n    torch.save(model.state_dict(best_model_wts), '.\u002Fbest_model.pth')\n    # 或者写成\n    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    LeNet=LeNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(LeNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[27,31953,31954,31961,31968,31972,31984,31990,32001,32011,32021,32031,32041,32046,32058,32068,32072,32076,32081,32092,32105,32116,32133,32144,32183,32199,32211,32222,32227,32238,32254,32265,32276,32287,32294,32298,32303,32308,32312,32317,32327,32348,32352,32356,32361,32366,32371,32391,32395,32400,32410,32414,32419,32428,32433,32438,32443,32453,32457,32461,32466,32471,32481,32486,32496,32501,32510,32515,32524,32529,32538,32542,32547,32557,32561,32565,32570,32585,32613,32628,32632,32637,32642,32651,32656,32665,32670,32679,32684,32693,32698,32707,32712,32721,32726,32739,32744,32754,32759,32769,32775,32781,32787,32793,32804,32810,32830,32836,32847,32853,32859,32865,32871,32877,32883,32889,32909,32915,32931,32937,32951,32957,32972,32978,32987,32993,33002,33008,33014,33023,33029,33040,33046,33065,33071,33082,33088,33108,33124,33130,33144,33150,33156,33167,33173,33179,33189,33195,33206,33212,33222,33227,33233,33282,33329,33334,33340,33359,33365,33385,33391,33397,33407,33412,33418,33434,33479,33485,33491,33497,33508,33514,33520,33526,33544,33558,33567,33576,33585,33594,33600,33606,33614,33619,33625,33636,33642,33662,33668,33674,33680,33697,33703,33709,33715,33721,33727,33754,33778,33784,33790,33796,33807,33818,33824,33841,33864,33887,33893,33898,33907,33917,33923,33928,33934,33947,33953,33964,33975,33994],{"__ignoreMap":25},[30,31955,31956,31958],{"class":32,"line":33},[30,31957,30530],{"class":317},[30,31959,31960],{"class":321}," copy\n",[30,31962,31963,31965],{"class":32,"line":44},[30,31964,30530],{"class":317},[30,31966,31967],{"class":321}," time\n",[30,31969,31970],{"class":32,"line":52},[30,31971,2582],{"emptyLinePlaceholder":245},[30,31973,31974,31976,31979,31981],{"class":32,"line":60},[30,31975,30530],{"class":317},[30,31977,31978],{"class":321}," pandas ",[30,31980,31521],{"class":317},[30,31982,31983],{"class":321}," pd\n",[30,31985,31986,31988],{"class":32,"line":68},[30,31987,30530],{"class":317},[30,31989,30533],{"class":321},[30,31991,31992,31994,31996,31998],{"class":32,"line":80},[30,31993,30875],{"class":317},[30,31995,31553],{"class":321},[30,31997,30530],{"class":317},[30,31999,32000],{"class":321}," Dataset\n",[30,32002,32003,32005,32007,32009],{"class":32,"line":88},[30,32004,30875],{"class":317},[30,32006,31506],{"class":321},[30,32008,30530],{"class":317},[30,32010,31511],{"class":321},[30,32012,32013,32015,32017,32019],{"class":32,"line":96},[30,32014,30875],{"class":317},[30,32016,31536],{"class":321},[30,32018,30530],{"class":317},[30,32020,31541],{"class":321},[30,32022,32023,32025,32027,32029],{"class":32,"line":104},[30,32024,30530],{"class":317},[30,32026,31553],{"class":321},[30,32028,31521],{"class":317},[30,32030,31558],{"class":321},[30,32032,32033,32035,32037,32039],{"class":32,"line":112},[30,32034,30530],{"class":317},[30,32036,31570],{"class":321},[30,32038,31521],{"class":317},[30,32040,31575],{"class":321},[30,32042,32043],{"class":32,"line":123},[30,32044,32045],{"class":379},"# 导入模型\n",[30,32047,32048,32050,32053,32055],{"class":32,"line":131},[30,32049,30875],{"class":317},[30,32051,32052],{"class":321}," model ",[30,32054,30530],{"class":317},[30,32056,32057],{"class":321}," LeNet\n",[30,32059,32060,32062,32064,32066],{"class":32,"line":142},[30,32061,30875],{"class":317},[30,32063,30878],{"class":321},[30,32065,30530],{"class":317},[30,32067,30883],{"class":321},[30,32069,32070],{"class":32,"line":1811},[30,32071,2582],{"emptyLinePlaceholder":245},[30,32073,32074],{"class":32,"line":1825},[30,32075,2582],{"emptyLinePlaceholder":245},[30,32077,32078],{"class":32,"line":1830},[30,32079,32080],{"class":379},"# 处理训练集与验证集函数--->划分数据集\n",[30,32082,32083,32086,32089],{"class":32,"line":1836},[30,32084,32085],{"class":317},"def",[30,32087,32088],{"class":36}," train_val_data_process",[30,32090,32091],{"class":321},"():\n",[30,32093,32094,32097,32099,32101,32103],{"class":32,"line":1857},[30,32095,32096],{"class":321},"    train_data",[30,32098,367],{"class":317},[30,32100,31593],{"class":321},[30,32102,31601],{"class":74},[30,32104,31604],{"class":321},[30,32106,32107,32110,32112,32114],{"class":32,"line":1862},[30,32108,32109],{"class":5398},"                            train",[30,32111,367],{"class":317},[30,32113,31614],{"class":40},[30,32115,31604],{"class":321},[30,32117,32118,32121,32123,32125,32127,32129,32131],{"class":32,"line":1876},[30,32119,32120],{"class":5398},"                            transform",[30,32122,367],{"class":317},[30,32124,31631],{"class":321},[30,32126,31634],{"class":5398},[30,32128,367],{"class":317},[30,32130,1221],{"class":40},[30,32132,31642],{"class":321},[30,32134,32135,32138,32140,32142],{"class":32,"line":1881},[30,32136,32137],{"class":5398},"                            download",[30,32139,367],{"class":317},[30,32141,31614],{"class":40},[30,32143,328],{"class":321},[30,32145,32146,32149,32151,32154,32157,32159,32162,32164,32166,32169,32171,32173,32176,32178,32180],{"class":32,"line":1910},[30,32147,32148],{"class":321},"    train_data,val_data",[30,32150,367],{"class":317},[30,32152,32153],{"class":321},"Data.random_split(train_data,[",[30,32155,32156],{"class":40},"round",[30,32158,322],{"class":321},[30,32160,32161],{"class":40},"0.8",[30,32163,775],{"class":317},[30,32165,7540],{"class":40},[30,32167,32168],{"class":321},"(train_data)),",[30,32170,32156],{"class":40},[30,32172,322],{"class":321},[30,32174,32175],{"class":40},"0.2",[30,32177,775],{"class":317},[30,32179,7540],{"class":40},[30,32181,32182],{"class":321},"(train_data))])\n",[30,32184,32185,32188,32190,32193,32195,32197],{"class":32,"line":1915},[30,32186,32187],{"class":321},"    train_dataloader ",[30,32189,367],{"class":317},[30,32191,32192],{"class":321}," Data.DataLoader(",[30,32194,31675],{"class":5398},[30,32196,367],{"class":317},[30,32198,31680],{"class":321},[30,32200,32201,32204,32206,32209],{"class":32,"line":1932},[30,32202,32203],{"class":5398},"                                       batch_size",[30,32205,367],{"class":317},[30,32207,32208],{"class":40},"128",[30,32210,31604],{"class":321},[30,32212,32213,32216,32218,32220],{"class":32,"line":1937},[30,32214,32215],{"class":5398},"                                       shuffle",[30,32217,367],{"class":317},[30,32219,31614],{"class":40},[30,32221,31604],{"class":321},[30,32223,32224],{"class":32,"line":1942},[30,32225,32226],{"class":379},"                                       # 规定8个进程\n",[30,32228,32229,32232,32234,32236],{"class":32,"line":1947},[30,32230,32231],{"class":5398},"                                       num_workers",[30,32233,367],{"class":317},[30,32235,715],{"class":40},[30,32237,328],{"class":321},[30,32239,32240,32243,32245,32247,32249,32251],{"class":32,"line":1961},[30,32241,32242],{"class":321},"    val_dataloader",[30,32244,367],{"class":317},[30,32246,31672],{"class":321},[30,32248,31675],{"class":5398},[30,32250,367],{"class":317},[30,32252,32253],{"class":321},"val_data,\n",[30,32255,32256,32259,32261,32263],{"class":32,"line":1966},[30,32257,32258],{"class":5398},"                                   batch_size",[30,32260,367],{"class":317},[30,32262,32208],{"class":40},[30,32264,31604],{"class":321},[30,32266,32267,32270,32272,32274],{"class":32,"line":2759},[30,32268,32269],{"class":5398},"                                   shuffle",[30,32271,367],{"class":317},[30,32273,31614],{"class":40},[30,32275,31604],{"class":321},[30,32277,32278,32281,32283,32285],{"class":32,"line":2773},[30,32279,32280],{"class":5398},"                                   num_workers",[30,32282,367],{"class":317},[30,32284,715],{"class":40},[30,32286,328],{"class":321},[30,32288,32289,32291],{"class":32,"line":2781},[30,32290,4272],{"class":317},[30,32292,32293],{"class":321}," train_dataloader,val_dataloader\n",[30,32295,32296],{"class":32,"line":2786},[30,32297,2582],{"emptyLinePlaceholder":245},[30,32299,32300],{"class":32,"line":2792},[30,32301,32302],{"class":379},"# 验证是否出错\n",[30,32304,32305],{"class":32,"line":2798},[30,32306,32307],{"class":379},"# train_val_data_process()\n",[30,32309,32310],{"class":32,"line":2803},[30,32311,2582],{"emptyLinePlaceholder":245},[30,32313,32314],{"class":32,"line":8130},[30,32315,32316],{"class":379},"# 定义模型训练函数\n",[30,32318,32319,32321,32324],{"class":32,"line":8154},[30,32320,32085],{"class":317},[30,32322,32323],{"class":36}," train_model_process",[30,32325,32326],{"class":321},"(model,train_dataloader,val_dataloader,num_epochs):\n",[30,32328,32329,32331,32333,32335,32337,32339,32341,32343,32346],{"class":32,"line":8159},[30,32330,31375],{"class":321},[30,32332,367],{"class":317},[30,32334,30589],{"class":321},[30,32336,31382],{"class":74},[30,32338,1887],{"class":317},[30,32340,31387],{"class":321},[30,32342,1884],{"class":317},[30,32344,32345],{"class":74}," 'cpu'",[30,32347,328],{"class":321},[30,32349,32350],{"class":32,"line":8165},[30,32351,2582],{"emptyLinePlaceholder":245},[30,32353,32354],{"class":32,"line":8192},[30,32355,2582],{"emptyLinePlaceholder":245},[30,32357,32358],{"class":32,"line":8197},[30,32359,32360],{"class":379},"    # 定义优化器\n",[30,32362,32363],{"class":32,"line":8203},[30,32364,32365],{"class":379},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[30,32367,32368],{"class":32,"line":8215},[30,32369,32370],{"class":379},"    # lr为学习率\n",[30,32372,32373,32376,32378,32381,32384,32386,32389],{"class":32,"line":8227},[30,32374,32375],{"class":321},"    optimizer",[30,32377,367],{"class":317},[30,32379,32380],{"class":321},"torch.optim.Adam(model.parameters(),",[30,32382,32383],{"class":5398},"lr",[30,32385,367],{"class":317},[30,32387,32388],{"class":40},"0.001",[30,32390,328],{"class":321},[30,32392,32393],{"class":32,"line":8239},[30,32394,2582],{"emptyLinePlaceholder":245},[30,32396,32397],{"class":32,"line":9898},[30,32398,32399],{"class":379},"    # 定义损失函数使用交叉熵损失函数\n",[30,32401,32402,32405,32407],{"class":32,"line":9923},[30,32403,32404],{"class":321},"    criterion",[30,32406,367],{"class":317},[30,32408,32409],{"class":321},"nn.CrossEntropyLoss()\n",[30,32411,32412],{"class":32,"line":9946},[30,32413,2582],{"emptyLinePlaceholder":245},[30,32415,32416],{"class":32,"line":9970},[30,32417,32418],{"class":379},"    # 将模型放到GPU中进行训练\n",[30,32420,32421,32423,32425],{"class":32,"line":9975},[30,32422,31427],{"class":321},[30,32424,367],{"class":317},[30,32426,32427],{"class":321},"model.to(device)\n",[30,32429,32430],{"class":32,"line":9980},[30,32431,32432],{"class":379},"    # 复制当前模型的参数\n",[30,32434,32435],{"class":32,"line":9985},[30,32436,32437],{"class":379},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[30,32439,32440],{"class":32,"line":9994},[30,32441,32442],{"class":379},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[30,32444,32445,32448,32450],{"class":32,"line":9999},[30,32446,32447],{"class":321},"    best_model_wts",[30,32449,367],{"class":317},[30,32451,32452],{"class":321},"copy.deepcopy(model.state_dict())\n",[30,32454,32455],{"class":32,"line":10005},[30,32456,2582],{"emptyLinePlaceholder":245},[30,32458,32459],{"class":32,"line":10026},[30,32460,2582],{"emptyLinePlaceholder":245},[30,32462,32463],{"class":32,"line":10032},[30,32464,32465],{"class":379},"    # 初始化参数\n",[30,32467,32468],{"class":32,"line":10046},[30,32469,32470],{"class":379},"    # 最高准确度\n",[30,32472,32473,32476,32478],{"class":32,"line":10052},[30,32474,32475],{"class":321},"    best_acc",[30,32477,367],{"class":317},[30,32479,32480],{"class":40},"0.0\n",[30,32482,32483],{"class":32,"line":10079},[30,32484,32485],{"class":379},"    # 训练集损失列表\n",[30,32487,32488,32491,32493],{"class":32,"line":10088},[30,32489,32490],{"class":321},"    train_loss_all",[30,32492,367],{"class":317},[30,32494,32495],{"class":321},"[]\n",[30,32497,32498],{"class":32,"line":10094},[30,32499,32500],{"class":379},"    # 验证集函数列表\n",[30,32502,32503,32506,32508],{"class":32,"line":10102},[30,32504,32505],{"class":321},"    val_loss_all",[30,32507,367],{"class":317},[30,32509,32495],{"class":321},[30,32511,32512],{"class":32,"line":10107},[30,32513,32514],{"class":379},"    # 训练集准确度列表\n",[30,32516,32517,32520,32522],{"class":32,"line":16786},[30,32518,32519],{"class":321},"    train_acc_all",[30,32521,367],{"class":317},[30,32523,32495],{"class":321},[30,32525,32526],{"class":32,"line":16792},[30,32527,32528],{"class":379},"    # 验证集准确度列表\n",[30,32530,32531,32534,32536],{"class":32,"line":16815},[30,32532,32533],{"class":321},"    val_acc_all",[30,32535,367],{"class":317},[30,32537,32495],{"class":321},[30,32539,32540],{"class":32,"line":16821},[30,32541,2582],{"emptyLinePlaceholder":245},[30,32543,32544],{"class":32,"line":16844},[30,32545,32546],{"class":379},"    # 保存当前时间--->方便看每轮训练的时间\n",[30,32548,32549,32552,32554],{"class":32,"line":16858},[30,32550,32551],{"class":321},"    since",[30,32553,367],{"class":317},[30,32555,32556],{"class":321},"time.time()\n",[30,32558,32559],{"class":32,"line":16878},[30,32560,2582],{"emptyLinePlaceholder":245},[30,32562,32563],{"class":32,"line":16884},[30,32564,2582],{"emptyLinePlaceholder":245},[30,32566,32567],{"class":32,"line":16895},[30,32568,32569],{"class":379},"    # 准备工作完成--->开始训练模型\n",[30,32571,32572,32574,32577,32579,32582],{"class":32,"line":16918},[30,32573,3383],{"class":317},[30,32575,32576],{"class":321}," epoch ",[30,32578,26181],{"class":317},[30,32580,32581],{"class":40}," range",[30,32583,32584],{"class":321},"(num_epochs):\n",[30,32586,32587,32590,32592,32595,32598,32600,32602,32604,32607,32609,32611],{"class":32,"line":16940},[30,32588,32589],{"class":40},"        print",[30,32591,322],{"class":321},[30,32593,32594],{"class":74},"\"Epoch ",[30,32596,32597],{"class":40},"{}",[30,32599,904],{"class":74},[30,32601,32597],{"class":40},[30,32603,571],{"class":74},[30,32605,32606],{"class":321},".format(epoch,num_epochs",[30,32608,852],{"class":317},[30,32610,537],{"class":40},[30,32612,30635],{"class":321},[30,32614,32615,32617,32619,32622,32624,32626],{"class":32,"line":16945},[30,32616,32589],{"class":40},[30,32618,322],{"class":321},[30,32620,32621],{"class":74},"\"-\"",[30,32623,775],{"class":317},[30,32625,766],{"class":40},[30,32627,328],{"class":321},[30,32629,32630],{"class":32,"line":16951},[30,32631,2582],{"emptyLinePlaceholder":245},[30,32633,32634],{"class":32,"line":16965},[30,32635,32636],{"class":379},"        # 初始化参数\n",[30,32638,32639],{"class":32,"line":16978},[30,32640,32641],{"class":379},"        # 训练集损失函数\n",[30,32643,32644,32647,32649],{"class":32,"line":16983},[30,32645,32646],{"class":321},"        train_loss",[30,32648,367],{"class":317},[30,32650,32480],{"class":40},[30,32652,32653],{"class":32,"line":16997},[30,32654,32655],{"class":379},"        # 训练集准确度\n",[30,32657,32658,32661,32663],{"class":32,"line":17002},[30,32659,32660],{"class":321},"        train_corrects",[30,32662,367],{"class":317},[30,32664,3267],{"class":40},[30,32666,32667],{"class":32,"line":17008},[30,32668,32669],{"class":379},"        # 验证集损失函数\n",[30,32671,32672,32675,32677],{"class":32,"line":17013},[30,32673,32674],{"class":321},"        val_loss",[30,32676,367],{"class":317},[30,32678,32480],{"class":40},[30,32680,32681],{"class":32,"line":17027},[30,32682,32683],{"class":379},"        # 验证集准确度\n",[30,32685,32686,32689,32691],{"class":32,"line":17032},[30,32687,32688],{"class":321},"        val_corrects",[30,32690,367],{"class":317},[30,32692,3267],{"class":40},[30,32694,32695],{"class":32,"line":17037},[30,32696,32697],{"class":379},"        # 训练集样本数量\n",[30,32699,32700,32703,32705],{"class":32,"line":17051},[30,32701,32702],{"class":321},"        train_num",[30,32704,367],{"class":317},[30,32706,3267],{"class":40},[30,32708,32709],{"class":32,"line":17063},[30,32710,32711],{"class":379},"        # 验证集样本数量\n",[30,32713,32714,32717,32719],{"class":32,"line":17068},[30,32715,32716],{"class":321},"        val_num",[30,32718,367],{"class":317},[30,32720,3267],{"class":40},[30,32722,32723],{"class":32,"line":17081},[30,32724,32725],{"class":379},"        # 将数据放到设备,并开始训练\n",[30,32727,32728,32730,32732,32734,32736],{"class":32,"line":17086},[30,32729,3585],{"class":317},[30,32731,31739],{"class":321},[30,32733,26181],{"class":317},[30,32735,31744],{"class":40},[30,32737,32738],{"class":321},"(train_dataloader):\n",[30,32740,32741],{"class":32,"line":17091},[30,32742,32743],{"class":379},"            # 将特征放入到训练设备\n",[30,32745,32746,32749,32751],{"class":32,"line":17096},[30,32747,32748],{"class":321},"            b_x",[30,32750,367],{"class":317},[30,32752,32753],{"class":321},"b_x.to(device)\n",[30,32755,32756],{"class":32,"line":17109},[30,32757,32758],{"class":379},"            # 将标签放入到训练设备当中\n",[30,32760,32761,32764,32766],{"class":32,"line":17114},[30,32762,32763],{"class":321},"            b_y",[30,32765,367],{"class":317},[30,32767,32768],{"class":321},"b_y.to(device)\n",[30,32770,32772],{"class":32,"line":32771},98,[30,32773,32774],{"class":379},"            # 设置模型为训练模式\n",[30,32776,32778],{"class":32,"line":32777},99,[30,32779,32780],{"class":321},"            model.train()\n",[30,32782,32784],{"class":32,"line":32783},100,[30,32785,32786],{"class":379},"            # 将数据放到模型当中,开始前向传播\n",[30,32788,32790],{"class":32,"line":32789},101,[30,32791,32792],{"class":379},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[30,32794,32796,32799,32801],{"class":32,"line":32795},102,[30,32797,32798],{"class":321},"            output",[30,32800,367],{"class":317},[30,32802,32803],{"class":321},"model(b_x)\n",[30,32805,32807],{"class":32,"line":32806},103,[30,32808,32809],{"class":379},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[30,32811,32813,32816,32818,32821,32824,32826,32828],{"class":32,"line":32812},104,[30,32814,32815],{"class":321},"            pre_lab",[30,32817,367],{"class":317},[30,32819,32820],{"class":321},"torch.argmax(output,",[30,32822,32823],{"class":5398},"dim",[30,32825,367],{"class":317},[30,32827,537],{"class":40},[30,32829,328],{"class":321},[30,32831,32833],{"class":32,"line":32832},105,[30,32834,32835],{"class":379},"            # 计算每一个batch的损失函数\n",[30,32837,32839,32842,32844],{"class":32,"line":32838},106,[30,32840,32841],{"class":321},"            loss",[30,32843,367],{"class":317},[30,32845,32846],{"class":321},"criterion(output,b_y)\n",[30,32848,32850],{"class":32,"line":32849},107,[30,32851,32852],{"class":379},"            # 将梯度初始化为0\n",[30,32854,32856],{"class":32,"line":32855},108,[30,32857,32858],{"class":321},"            optimizer.zero_grad()\n",[30,32860,32862],{"class":32,"line":32861},109,[30,32863,32864],{"class":379},"            # 梯度置为0后再进行反向传播\n",[30,32866,32868],{"class":32,"line":32867},110,[30,32869,32870],{"class":321},"            loss.backward()\n",[30,32872,32874],{"class":32,"line":32873},111,[30,32875,32876],{"class":379},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[30,32878,32880],{"class":32,"line":32879},112,[30,32881,32882],{"class":321},"            optimizer.step()\n",[30,32884,32886],{"class":32,"line":32885},113,[30,32887,32888],{"class":379},"            # loss.item()指的是batch的平均损失\n",[30,32890,32892,32895,32897,32900,32902,32905,32907],{"class":32,"line":32891},114,[30,32893,32894],{"class":321},"            train_loss",[30,32896,9659],{"class":317},[30,32898,32899],{"class":321},"loss.item()",[30,32901,775],{"class":317},[30,32903,32904],{"class":321},"b_x.size(",[30,32906,511],{"class":40},[30,32908,328],{"class":321},[30,32910,32912],{"class":32,"line":32911},115,[30,32913,32914],{"class":379},"            # 计算每个批次中正确预测的数量\n",[30,32916,32918,32921,32923,32926,32928],{"class":32,"line":32917},116,[30,32919,32920],{"class":321},"            train_corrects",[30,32922,9659],{"class":317},[30,32924,32925],{"class":321},"torch.sum(pre_lab",[30,32927,3131],{"class":317},[30,32929,32930],{"class":321},"b_y.data)\n",[30,32932,32934],{"class":32,"line":32933},117,[30,32935,32936],{"class":379},"            # 计算目前为止一共处理了多少样本\n",[30,32938,32940,32943,32945,32947,32949],{"class":32,"line":32939},118,[30,32941,32942],{"class":321},"            train_num",[30,32944,9659],{"class":317},[30,32946,32904],{"class":321},[30,32948,511],{"class":40},[30,32950,328],{"class":321},[30,32952,32954],{"class":32,"line":32953},119,[30,32955,32956],{"class":379},"        # 验证数据\n",[30,32958,32960,32962,32965,32967,32969],{"class":32,"line":32959},120,[30,32961,3585],{"class":317},[30,32963,32964],{"class":321}," step ,(b_x,b_y) ",[30,32966,26181],{"class":317},[30,32968,31744],{"class":40},[30,32970,32971],{"class":321},"(val_dataloader):\n",[30,32973,32975],{"class":32,"line":32974},121,[30,32976,32977],{"class":379},"            # 将特征放到验证设备当中\n",[30,32979,32981,32983,32985],{"class":32,"line":32980},122,[30,32982,32748],{"class":321},[30,32984,367],{"class":317},[30,32986,32753],{"class":321},[30,32988,32990],{"class":32,"line":32989},123,[30,32991,32992],{"class":379},"            # 将标签放到放到训练设备当中\n",[30,32994,32996,32998,33000],{"class":32,"line":32995},124,[30,32997,32763],{"class":321},[30,32999,367],{"class":317},[30,33001,32768],{"class":321},[30,33003,33005],{"class":32,"line":33004},125,[30,33006,33007],{"class":379},"            # 开启验证模式，设置模型为评估模式\n",[30,33009,33011],{"class":32,"line":33010},126,[30,33012,33013],{"class":321},"            model.eval()\n",[30,33015,33017,33020],{"class":32,"line":33016},127,[30,33018,33019],{"class":317},"            with",[30,33021,33022],{"class":321}," torch.no_grad():\n",[30,33024,33026],{"class":32,"line":33025},128,[30,33027,33028],{"class":379},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[30,33030,33032,33035,33037],{"class":32,"line":33031},129,[30,33033,33034],{"class":321},"                output ",[30,33036,367],{"class":317},[30,33038,33039],{"class":321}," model(b_x)\n",[30,33041,33043],{"class":32,"line":33042},130,[30,33044,33045],{"class":379},"                # 查找每一行中最大值对应的下标\n",[30,33047,33049,33052,33054,33057,33059,33061,33063],{"class":32,"line":33048},131,[30,33050,33051],{"class":321},"                pre_lab ",[30,33053,367],{"class":317},[30,33055,33056],{"class":321}," torch.argmax(output, ",[30,33058,32823],{"class":5398},[30,33060,367],{"class":317},[30,33062,537],{"class":40},[30,33064,328],{"class":321},[30,33066,33068],{"class":32,"line":33067},132,[30,33069,33070],{"class":379},"                # 计算验证集上的当前 batch 损失\n",[30,33072,33074,33077,33079],{"class":32,"line":33073},133,[30,33075,33076],{"class":321},"                val_batch_loss ",[30,33078,367],{"class":317},[30,33080,33081],{"class":321}," criterion(output, b_y)\n",[30,33083,33085],{"class":32,"line":33084},134,[30,33086,33087],{"class":379},"                # 对损失函数进行累加（按样本数加权）\n",[30,33089,33091,33094,33096,33099,33101,33104,33106],{"class":32,"line":33090},135,[30,33092,33093],{"class":321},"                val_loss ",[30,33095,9659],{"class":317},[30,33097,33098],{"class":321}," val_batch_loss.item() ",[30,33100,775],{"class":317},[30,33102,33103],{"class":321}," b_x.size(",[30,33105,511],{"class":40},[30,33107,328],{"class":321},[30,33109,33111,33114,33116,33119,33121],{"class":32,"line":33110},136,[30,33112,33113],{"class":321},"                val_corrects ",[30,33115,9659],{"class":317},[30,33117,33118],{"class":321}," torch.sum(pre_lab ",[30,33120,3131],{"class":317},[30,33122,33123],{"class":321}," b_y.data)\n",[30,33125,33127],{"class":32,"line":33126},137,[30,33128,33129],{"class":379},"                # 当前用于验证的样本数量\n",[30,33131,33133,33136,33138,33140,33142],{"class":32,"line":33132},138,[30,33134,33135],{"class":321},"            val_num ",[30,33137,9659],{"class":317},[30,33139,33103],{"class":321},[30,33141,511],{"class":40},[30,33143,328],{"class":321},[30,33145,33147],{"class":32,"line":33146},139,[30,33148,33149],{"class":379},"        # 计算并保存每一次迭代的loss值和准确率\n",[30,33151,33153],{"class":32,"line":33152},140,[30,33154,33155],{"class":379},"        # 计算并保存训练集的loss值\n",[30,33157,33159,33162,33164],{"class":32,"line":33158},141,[30,33160,33161],{"class":321},"        train_loss_all.append(train_loss",[30,33163,904],{"class":317},[30,33165,33166],{"class":321},"train_num)\n",[30,33168,33170],{"class":32,"line":33169},142,[30,33171,33172],{"class":379},"        # 取双精度\n",[30,33174,33176],{"class":32,"line":33175},143,[30,33177,33178],{"class":379},"        # 计算并保存训练集的准确率\n",[30,33180,33182,33185,33187],{"class":32,"line":33181},144,[30,33183,33184],{"class":321},"        train_acc_all.append(train_corrects.double().item()",[30,33186,904],{"class":317},[30,33188,33166],{"class":321},[30,33190,33192],{"class":32,"line":33191},145,[30,33193,33194],{"class":379},"        # 计算并保存验证集的loss值\n",[30,33196,33198,33201,33203],{"class":32,"line":33197},146,[30,33199,33200],{"class":321},"        val_loss_all.append(val_loss",[30,33202,904],{"class":317},[30,33204,33205],{"class":321},"val_num)\n",[30,33207,33209],{"class":32,"line":33208},147,[30,33210,33211],{"class":379},"        # 计算并保存验证集的准确率\n",[30,33213,33215,33218,33220],{"class":32,"line":33214},148,[30,33216,33217],{"class":321},"        val_acc_all.append(val_corrects.double().item()",[30,33219,904],{"class":317},[30,33221,33205],{"class":321},[30,33223,33225],{"class":32,"line":33224},149,[30,33226,2582],{"emptyLinePlaceholder":245},[30,33228,33230],{"class":32,"line":33229},150,[30,33231,33232],{"class":379},"        # 打印训练一轮的loss值和准确率\n",[30,33234,33236,33238,33240,33242,33244,33247,33249,33252,33254,33257,33259,33261,33263,33265,33268,33270,33272,33275,33277,33279],{"class":32,"line":33235},151,[30,33237,32589],{"class":40},[30,33239,322],{"class":321},[30,33241,3774],{"class":74},[30,33243,32597],{"class":40},[30,33245,33246],{"class":74},"train loss:",[30,33248,1216],{"class":40},[30,33250,33251],{"class":317},":.4f",[30,33253,1266],{"class":40},[30,33255,33256],{"class":74}," train acc:",[30,33258,1216],{"class":40},[30,33260,33251],{"class":317},[30,33262,1266],{"class":40},[30,33264,3774],{"class":74},[30,33266,33267],{"class":321},".format(epoch,train_loss_all[",[30,33269,852],{"class":317},[30,33271,537],{"class":40},[30,33273,33274],{"class":321},"],train_acc_all[",[30,33276,852],{"class":317},[30,33278,537],{"class":40},[30,33280,33281],{"class":321},"]))\n",[30,33283,33285,33287,33289,33291,33293,33296,33298,33300,33302,33305,33307,33309,33311,33313,33316,33318,33320,33323,33325,33327],{"class":32,"line":33284},152,[30,33286,32589],{"class":40},[30,33288,322],{"class":321},[30,33290,3774],{"class":74},[30,33292,32597],{"class":40},[30,33294,33295],{"class":74},"val loss:",[30,33297,1216],{"class":40},[30,33299,33251],{"class":317},[30,33301,1266],{"class":40},[30,33303,33304],{"class":74}," val acc:",[30,33306,1216],{"class":40},[30,33308,33251],{"class":317},[30,33310,1266],{"class":40},[30,33312,3774],{"class":74},[30,33314,33315],{"class":321},".format(epoch,val_loss_all[",[30,33317,852],{"class":317},[30,33319,537],{"class":40},[30,33321,33322],{"class":321},"],val_acc_all[",[30,33324,852],{"class":317},[30,33326,537],{"class":40},[30,33328,33281],{"class":321},[30,33330,33332],{"class":32,"line":33331},153,[30,33333,2582],{"emptyLinePlaceholder":245},[30,33335,33337],{"class":32,"line":33336},154,[30,33338,33339],{"class":379},"        # 判断准确度--->保存最优模型\n",[30,33341,33343,33345,33348,33350,33352,33354,33356],{"class":32,"line":33342},155,[30,33344,2679],{"class":317},[30,33346,33347],{"class":321}," val_acc_all[",[30,33349,852],{"class":317},[30,33351,537],{"class":40},[30,33353,1260],{"class":321},[30,33355,1280],{"class":317},[30,33357,33358],{"class":321},"best_acc:\n",[30,33360,33362],{"class":32,"line":33361},156,[30,33363,33364],{"class":379},"            # 保存当前模型准确度\n",[30,33366,33368,33371,33373,33375,33378,33380,33382],{"class":32,"line":33367},157,[30,33369,33370],{"class":321},"            best_acc:",[30,33372,361],{"class":40},[30,33374,367],{"class":317},[30,33376,33377],{"class":321},"val_acc_all[",[30,33379,852],{"class":317},[30,33381,537],{"class":40},[30,33383,33384],{"class":321},"]\n",[30,33386,33388],{"class":32,"line":33387},158,[30,33389,33390],{"class":379},"            # 保存当前的准确度\n",[30,33392,33394],{"class":32,"line":33393},159,[30,33395,33396],{"class":379},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[30,33398,33400,33403,33405],{"class":32,"line":33399},160,[30,33401,33402],{"class":321},"            best_model_wts",[30,33404,367],{"class":317},[30,33406,32452],{"class":321},[30,33408,33410],{"class":32,"line":33409},161,[30,33411,2582],{"emptyLinePlaceholder":245},[30,33413,33415],{"class":32,"line":33414},162,[30,33416,33417],{"class":379},"        # 计算耗时\n",[30,33419,33421,33424,33426,33429,33431],{"class":32,"line":33420},163,[30,33422,33423],{"class":321},"        time_use",[30,33425,367],{"class":317},[30,33427,33428],{"class":321},"time.time()",[30,33430,852],{"class":317},[30,33432,33433],{"class":321},"since\n",[30,33435,33437,33439,33441,33444,33446,33449,33451,33453,33455,33457,33459,33462,33465,33468,33470,33473,33475,33477],{"class":32,"line":33436},164,[30,33438,32589],{"class":40},[30,33440,322],{"class":321},[30,33442,33443],{"class":74},"'训练和验证耗费的时间",[30,33445,1216],{"class":40},[30,33447,33448],{"class":317},":.0f",[30,33450,1266],{"class":40},[30,33452,864],{"class":74},[30,33454,1216],{"class":40},[30,33456,33448],{"class":317},[30,33458,1266],{"class":40},[30,33460,33461],{"class":74},"s'",[30,33463,33464],{"class":321},".format(time_use",[30,33466,33467],{"class":317},"\u002F\u002F",[30,33469,1227],{"class":40},[30,33471,33472],{"class":321},",time_use",[30,33474,648],{"class":317},[30,33476,1227],{"class":40},[30,33478,30635],{"class":321},[30,33480,33482],{"class":32,"line":33481},165,[30,33483,33484],{"class":379},"    # 选择最优参数\n",[30,33486,33488],{"class":32,"line":33487},166,[30,33489,33490],{"class":379},"    # 加载最高准确率下的模型参数\n",[30,33492,33494],{"class":32,"line":33493},167,[30,33495,33496],{"class":379},"    # model.load_state_dict(best_model_wts)\n",[30,33498,33500,33503,33506],{"class":32,"line":33499},168,[30,33501,33502],{"class":321},"    torch.save(model.state_dict(best_model_wts), ",[30,33504,33505],{"class":74},"'.\u002Fbest_model.pth'",[30,33507,328],{"class":321},[30,33509,33511],{"class":32,"line":33510},169,[30,33512,33513],{"class":379},"    # 或者写成\n",[30,33515,33517],{"class":32,"line":33516},170,[30,33518,33519],{"class":379},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[30,33521,33523],{"class":32,"line":33522},171,[30,33524,33525],{"class":379},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[30,33527,33529,33532,33534,33537,33540,33542],{"class":32,"line":33528},172,[30,33530,33531],{"class":321},"    train_process",[30,33533,367],{"class":317},[30,33535,33536],{"class":321},"pd.DataFrame(",[30,33538,33539],{"class":5398},"data",[30,33541,367],{"class":317},[30,33543,1732],{"class":321},[30,33545,33547,33550,33552,33555],{"class":32,"line":33546},173,[30,33548,33549],{"class":74},"        \"epoch\"",[30,33551,1179],{"class":321},[30,33553,33554],{"class":40},"range",[30,33556,33557],{"class":321},"(num_epochs),\n",[30,33559,33561,33564],{"class":32,"line":33560},174,[30,33562,33563],{"class":74},"        \"train_loss_all\"",[30,33565,33566],{"class":321},":train_loss_all,\n",[30,33568,33570,33573],{"class":32,"line":33569},175,[30,33571,33572],{"class":74},"        \"val_loss_all\"",[30,33574,33575],{"class":321},":val_loss_all,\n",[30,33577,33579,33582],{"class":32,"line":33578},176,[30,33580,33581],{"class":74},"        \"train_acc_all\"",[30,33583,33584],{"class":321},":train_acc_all,\n",[30,33586,33588,33591],{"class":32,"line":33587},177,[30,33589,33590],{"class":74},"        \"val_acc_all\"",[30,33592,33593],{"class":321},":val_acc_all\n",[30,33595,33597],{"class":32,"line":33596},178,[30,33598,33599],{"class":321},"    })\n",[30,33601,33603],{"class":32,"line":33602},179,[30,33604,33605],{"class":379},"    # 返回训练保存的过程\n",[30,33607,33609,33611],{"class":32,"line":33608},180,[30,33610,4272],{"class":317},[30,33612,33613],{"class":321}," train_process\n",[30,33615,33617],{"class":32,"line":33616},181,[30,33618,2582],{"emptyLinePlaceholder":245},[30,33620,33622],{"class":32,"line":33621},182,[30,33623,33624],{"class":379},"# 将loss值和精度按照图片的形式展示出来\n",[30,33626,33628,33630,33633],{"class":32,"line":33627},183,[30,33629,32085],{"class":317},[30,33631,33632],{"class":36}," matplot_acc_loss",[30,33634,33635],{"class":321},"(train_process):\n",[30,33637,33639],{"class":32,"line":33638},184,[30,33640,33641],{"class":379},"    # 设置图的大小\n",[30,33643,33645,33648,33650,33652,33654,33656,33658,33660],{"class":32,"line":33644},185,[30,33646,33647],{"class":321},"    plt.figure(",[30,33649,31831],{"class":5398},[30,33651,367],{"class":317},[30,33653,322],{"class":321},[30,33655,818],{"class":40},[30,33657,698],{"class":321},[30,33659,613],{"class":40},[30,33661,30635],{"class":321},[30,33663,33665],{"class":32,"line":33664},186,[30,33666,33667],{"class":379},"    # 设置图中有几张图\n",[30,33669,33671],{"class":32,"line":33670},187,[30,33672,33673],{"class":379},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[30,33675,33677],{"class":32,"line":33676},188,[30,33678,33679],{"class":379},"    # ①loss图\n",[30,33681,33683,33685,33687,33689,33691,33693,33695],{"class":32,"line":33682},189,[30,33684,31865],{"class":321},[30,33686,537],{"class":40},[30,33688,698],{"class":321},[30,33690,398],{"class":40},[30,33692,698],{"class":321},[30,33694,537],{"class":40},[30,33696,328],{"class":321},[30,33698,33700],{"class":32,"line":33699},190,[30,33701,33702],{"class":379},"    # 补充:\n",[30,33704,33706],{"class":32,"line":33705},191,[30,33707,33708],{"class":379},"    # plt.subplot(nrows, ncols, index)\n",[30,33710,33712],{"class":32,"line":33711},192,[30,33713,33714],{"class":379},"    # nrows：行数\n",[30,33716,33718],{"class":32,"line":33717},193,[30,33719,33720],{"class":379},"    # ncols：列数\n",[30,33722,33724],{"class":32,"line":33723},194,[30,33725,33726],{"class":379},"    # index：目前选中第几个子图（从1开始）\n",[30,33728,33730,33733,33736,33739,33742,33744,33747,33749,33752],{"class":32,"line":33729},195,[30,33731,33732],{"class":321},"    plt.plot(train_process[",[30,33734,33735],{"class":74},"\"epoch\"",[30,33737,33738],{"class":321},"],train_process.train_loss_all,",[30,33740,33741],{"class":74},"'ro-'",[30,33743,698],{"class":321},[30,33745,33746],{"class":5398},"label",[30,33748,367],{"class":317},[30,33750,33751],{"class":74},"'train loss'",[30,33753,328],{"class":321},[30,33755,33757,33759,33761,33764,33767,33769,33771,33773,33776],{"class":32,"line":33756},196,[30,33758,33732],{"class":321},[30,33760,33735],{"class":74},[30,33762,33763],{"class":321},"],train_process.val_loss_all,",[30,33765,33766],{"class":74},"'bs--'",[30,33768,698],{"class":321},[30,33770,33746],{"class":5398},[30,33772,367],{"class":317},[30,33774,33775],{"class":74},"'val loss'",[30,33777,328],{"class":321},[30,33779,33781],{"class":32,"line":33780},197,[30,33782,33783],{"class":379},"    # 添加一个图例\n",[30,33785,33787],{"class":32,"line":33786},198,[30,33788,33789],{"class":321},"    plt.legend()\n",[30,33791,33793],{"class":32,"line":33792},199,[30,33794,33795],{"class":379},"    # 给轴添加标签\n",[30,33797,33799,33802,33805],{"class":32,"line":33798},200,[30,33800,33801],{"class":321},"    plt.xlabel(",[30,33803,33804],{"class":74},"'epoch'",[30,33806,328],{"class":321},[30,33808,33810,33813,33816],{"class":32,"line":33809},201,[30,33811,33812],{"class":321},"    plt.ylabel(",[30,33814,33815],{"class":74},"'loss'",[30,33817,328],{"class":321},[30,33819,33821],{"class":32,"line":33820},202,[30,33822,33823],{"class":379},"    # ②准确度图\n",[30,33825,33827,33829,33831,33833,33835,33837,33839],{"class":32,"line":33826},203,[30,33828,31865],{"class":321},[30,33830,537],{"class":40},[30,33832,698],{"class":321},[30,33834,398],{"class":40},[30,33836,698],{"class":321},[30,33838,398],{"class":40},[30,33840,328],{"class":321},[30,33842,33844,33846,33848,33851,33853,33855,33857,33859,33862],{"class":32,"line":33843},204,[30,33845,33732],{"class":321},[30,33847,33735],{"class":74},[30,33849,33850],{"class":321},"],train_process.train_acc_all,",[30,33852,33741],{"class":74},[30,33854,698],{"class":321},[30,33856,33746],{"class":5398},[30,33858,367],{"class":317},[30,33860,33861],{"class":74},"'train acc'",[30,33863,328],{"class":321},[30,33865,33867,33869,33871,33874,33876,33878,33880,33882,33885],{"class":32,"line":33866},205,[30,33868,33732],{"class":321},[30,33870,33735],{"class":74},[30,33872,33873],{"class":321},"],train_process.val_acc_all,",[30,33875,33766],{"class":74},[30,33877,698],{"class":321},[30,33879,33746],{"class":5398},[30,33881,367],{"class":317},[30,33883,33884],{"class":74},"'val acc'",[30,33886,328],{"class":321},[30,33888,33890],{"class":32,"line":33889},206,[30,33891,33892],{"class":379},"    # 添加图例\n",[30,33894,33896],{"class":32,"line":33895},207,[30,33897,33789],{"class":321},[30,33899,33901,33903,33905],{"class":32,"line":33900},208,[30,33902,33801],{"class":321},[30,33904,33735],{"class":74},[30,33906,328],{"class":321},[30,33908,33910,33912,33915],{"class":32,"line":33909},209,[30,33911,33812],{"class":321},[30,33913,33914],{"class":74},"\"acc\"",[30,33916,328],{"class":321},[30,33918,33920],{"class":32,"line":33919},210,[30,33921,33922],{"class":321},"    plt.show()\n",[30,33924,33926],{"class":32,"line":33925},211,[30,33927,2582],{"emptyLinePlaceholder":245},[30,33929,33931],{"class":32,"line":33930},212,[30,33932,33933],{"class":379},"# 正式开始训练:\n",[30,33935,33937,33939,33941,33943,33945],{"class":32,"line":33936},213,[30,33938,1717],{"class":317},[30,33940,31358],{"class":40},[30,33942,3131],{"class":317},[30,33944,31363],{"class":74},[30,33946,3921],{"class":321},[30,33948,33950],{"class":32,"line":33949},214,[30,33951,33952],{"class":379},"    # 将模型实例化\n",[30,33954,33956,33959,33961],{"class":32,"line":33955},215,[30,33957,33958],{"class":321},"    LeNet",[30,33960,367],{"class":317},[30,33962,33963],{"class":321},"LeNet()\n",[30,33965,33967,33970,33972],{"class":32,"line":33966},216,[30,33968,33969],{"class":321},"    train_dataloader,val_dataloader",[30,33971,367],{"class":317},[30,33973,33974],{"class":321},"train_val_data_process()\n",[30,33976,33978,33980,33982,33985,33988,33990,33992],{"class":32,"line":33977},217,[30,33979,33531],{"class":321},[30,33981,367],{"class":317},[30,33983,33984],{"class":321},"train_model_process(LeNet,train_dataloader,val_dataloader,",[30,33986,33987],{"class":5398},"num_epochs",[30,33989,367],{"class":317},[30,33991,1020],{"class":40},[30,33993,328],{"class":321},[30,33995,33997],{"class":32,"line":33996},218,[30,33998,33999],{"class":321},"    matplot_acc_loss(train_process)\n",[157,34001,34002],{},"画图的补充点学习：",[157,34004,34005],{},[160,34006],{"alt":25,"src":34007},"\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",[271,34009,34010],{"start":52},[150,34011,34012],{},"测试",[20,34014,34016],{"className":30516,"code":34015,"language":30518,"meta":25,"style":25},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import LeNet\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=LeNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[27,34017,34018,34024,34034,34046,34056,34061,34071,34081,34085,34090,34099,34116,34128,34145,34156,34172,34177,34188,34199,34210,34217,34221,34226,34236,34241,34258,34266,34270,34275,34284,34293,34297,34302,34307,34312,34319,34324,34336,34346,34356,34361,34365,34370,34379,34384,34400,34405,34410,34415,34429,34434,34448,34452,34457,34472,34477,34489,34493,34498,34510,34515,34523,34528,34533,34543,34548,34557,34562,34567,34571,34576,34581,34597,34605,34610,34615,34674,34680,34685,34696,34704,34712,34716,34721,34725,34730,34738,34743,34759,34764,34774,34784],{"__ignoreMap":25},[30,34019,34020,34022],{"class":32,"line":33},[30,34021,30530],{"class":317},[30,34023,30533],{"class":321},[30,34025,34026,34028,34030,34032],{"class":32,"line":44},[30,34027,30530],{"class":317},[30,34029,31553],{"class":321},[30,34031,31521],{"class":317},[30,34033,31558],{"class":321},[30,34035,34036,34038,34041,34043],{"class":32,"line":52},[30,34037,30875],{"class":317},[30,34039,34040],{"class":321}," jupyter_client.consoleapp ",[30,34042,30530],{"class":317},[30,34044,34045],{"class":321}," classes\n",[30,34047,34048,34050,34052,34054],{"class":32,"line":60},[30,34049,30875],{"class":317},[30,34051,31536],{"class":321},[30,34053,30530],{"class":317},[30,34055,31541],{"class":321},[30,34057,34058],{"class":32,"line":68},[30,34059,34060],{"class":379},"# 导入数据集\n",[30,34062,34063,34065,34067,34069],{"class":32,"line":80},[30,34064,30875],{"class":317},[30,34066,31506],{"class":321},[30,34068,30530],{"class":317},[30,34070,31511],{"class":321},[30,34072,34073,34075,34077,34079],{"class":32,"line":88},[30,34074,30875],{"class":317},[30,34076,32052],{"class":321},[30,34078,30530],{"class":317},[30,34080,32057],{"class":321},[30,34082,34083],{"class":32,"line":96},[30,34084,2582],{"emptyLinePlaceholder":245},[30,34086,34087],{"class":32,"line":104},[30,34088,34089],{"class":379},"# 测试数据处理\n",[30,34091,34092,34094,34097],{"class":32,"line":112},[30,34093,32085],{"class":317},[30,34095,34096],{"class":36}," test_data_process",[30,34098,32091],{"class":321},[30,34100,34101,34104,34106,34108,34110,34112,34114],{"class":32,"line":123},[30,34102,34103],{"class":321},"    test_data",[30,34105,367],{"class":317},[30,34107,31593],{"class":321},[30,34109,31596],{"class":5398},[30,34111,367],{"class":317},[30,34113,31601],{"class":74},[30,34115,31604],{"class":321},[30,34117,34118,34121,34123,34126],{"class":32,"line":131},[30,34119,34120],{"class":5398},"                           train",[30,34122,367],{"class":317},[30,34124,34125],{"class":40},"False",[30,34127,31604],{"class":321},[30,34129,34130,34133,34135,34137,34139,34141,34143],{"class":32,"line":142},[30,34131,34132],{"class":5398},"                           transform",[30,34134,367],{"class":317},[30,34136,31631],{"class":321},[30,34138,31634],{"class":5398},[30,34140,367],{"class":317},[30,34142,1221],{"class":40},[30,34144,31642],{"class":321},[30,34146,34147,34150,34152,34154],{"class":32,"line":1811},[30,34148,34149],{"class":5398},"                           download",[30,34151,367],{"class":317},[30,34153,31614],{"class":40},[30,34155,328],{"class":321},[30,34157,34158,34161,34163,34165,34167,34169],{"class":32,"line":1825},[30,34159,34160],{"class":321},"    test_dataloader",[30,34162,367],{"class":317},[30,34164,31672],{"class":321},[30,34166,31675],{"class":5398},[30,34168,367],{"class":317},[30,34170,34171],{"class":321},"test_data,\n",[30,34173,34174],{"class":32,"line":1830},[30,34175,34176],{"class":379},"                                    # 这里是一张一张进行测试\n",[30,34178,34179,34182,34184,34186],{"class":32,"line":1836},[30,34180,34181],{"class":5398},"                                    batch_size",[30,34183,367],{"class":317},[30,34185,537],{"class":40},[30,34187,31604],{"class":321},[30,34189,34190,34193,34195,34197],{"class":32,"line":1857},[30,34191,34192],{"class":5398},"                                    shuffle",[30,34194,367],{"class":317},[30,34196,31614],{"class":40},[30,34198,31604],{"class":321},[30,34200,34201,34204,34206,34208],{"class":32,"line":1862},[30,34202,34203],{"class":5398},"                                    num_workers",[30,34205,367],{"class":317},[30,34207,511],{"class":40},[30,34209,328],{"class":321},[30,34211,34212,34214],{"class":32,"line":1876},[30,34213,4272],{"class":317},[30,34215,34216],{"class":321}," test_dataloader\n",[30,34218,34219],{"class":32,"line":1881},[30,34220,2582],{"emptyLinePlaceholder":245},[30,34222,34223],{"class":32,"line":1910},[30,34224,34225],{"class":379},"# 定义模型测试函数\n",[30,34227,34228,34230,34233],{"class":32,"line":1915},[30,34229,32085],{"class":317},[30,34231,34232],{"class":36}," test_model_process",[30,34234,34235],{"class":321},"(model,test_dataloader):\n",[30,34237,34238],{"class":32,"line":1932},[30,34239,34240],{"class":379},"    # 将模型放到设备当中，先进行判断\n",[30,34242,34243,34245,34247,34249,34251,34253,34255],{"class":32,"line":1937},[30,34244,31375],{"class":321},[30,34246,367],{"class":317},[30,34248,31382],{"class":74},[30,34250,1887],{"class":317},[30,34252,31387],{"class":321},[30,34254,1884],{"class":317},[30,34256,34257],{"class":74}," \"cpu\"\n",[30,34259,34260,34262,34264],{"class":32,"line":1942},[30,34261,31427],{"class":321},[30,34263,367],{"class":317},[30,34265,32427],{"class":321},[30,34267,34268],{"class":32,"line":1947},[30,34269,2582],{"emptyLinePlaceholder":245},[30,34271,34272],{"class":32,"line":1961},[30,34273,34274],{"class":379},"    # 设置初始化参数\n",[30,34276,34277,34280,34282],{"class":32,"line":1966},[30,34278,34279],{"class":321},"    test_corrects",[30,34281,367],{"class":317},[30,34283,32480],{"class":40},[30,34285,34286,34289,34291],{"class":32,"line":2759},[30,34287,34288],{"class":321},"    test_num",[30,34290,367],{"class":317},[30,34292,3267],{"class":40},[30,34294,34295],{"class":32,"line":2773},[30,34296,2582],{"emptyLinePlaceholder":245},[30,34298,34299],{"class":32,"line":2781},[30,34300,34301],{"class":379},"    # 进行模型测试\n",[30,34303,34304],{"class":32,"line":2786},[30,34305,34306],{"class":379},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[30,34308,34309],{"class":32,"line":2792},[30,34310,34311],{"class":379},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[30,34313,34314,34317],{"class":32,"line":2798},[30,34315,34316],{"class":317},"    with",[30,34318,33022],{"class":321},[30,34320,34321],{"class":32,"line":2803},[30,34322,34323],{"class":379},"        # 从数据中进行\n",[30,34325,34326,34328,34331,34333],{"class":32,"line":8130},[30,34327,3585],{"class":317},[30,34329,34330],{"class":321}," test_data_x,test_data_y ",[30,34332,26181],{"class":317},[30,34334,34335],{"class":321}," test_dataloader:\n",[30,34337,34338,34341,34343],{"class":32,"line":8154},[30,34339,34340],{"class":321},"            test_data_x",[30,34342,367],{"class":317},[30,34344,34345],{"class":321},"test_data_x.to(device)\n",[30,34347,34348,34351,34353],{"class":32,"line":8159},[30,34349,34350],{"class":321},"            test_data_y",[30,34352,367],{"class":317},[30,34354,34355],{"class":321},"test_data_y.to(device)\n",[30,34357,34358],{"class":32,"line":8165},[30,34359,34360],{"class":379},"            # 设置为验证模式\n",[30,34362,34363],{"class":32,"line":8192},[30,34364,33013],{"class":321},[30,34366,34367],{"class":32,"line":8197},[30,34368,34369],{"class":379},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[30,34371,34372,34374,34376],{"class":32,"line":8203},[30,34373,32798],{"class":321},[30,34375,367],{"class":317},[30,34377,34378],{"class":321},"model(test_data_x)\n",[30,34380,34381],{"class":32,"line":8215},[30,34382,34383],{"class":379},"            # 查找每一行中最大值对应的下标\n",[30,34385,34386,34388,34390,34392,34394,34396,34398],{"class":32,"line":8227},[30,34387,32815],{"class":321},[30,34389,367],{"class":317},[30,34391,32820],{"class":321},[30,34393,32823],{"class":5398},[30,34395,367],{"class":317},[30,34397,537],{"class":40},[30,34399,328],{"class":321},[30,34401,34402],{"class":32,"line":8239},[30,34403,34404],{"class":379},"            # 计算正确率\n",[30,34406,34407],{"class":32,"line":9898},[30,34408,34409],{"class":379},"            # .data表示是一个不带梯度信息的tensor\n",[30,34411,34412],{"class":32,"line":9923},[30,34413,34414],{"class":379},"            # 如果预测正确，则准确度test_corrects加1\n",[30,34416,34417,34420,34422,34424,34426],{"class":32,"line":9946},[30,34418,34419],{"class":321},"            test_corrects",[30,34421,9659],{"class":317},[30,34423,32925],{"class":321},[30,34425,3131],{"class":317},[30,34427,34428],{"class":321},"test_data_y.data)\n",[30,34430,34431],{"class":32,"line":9970},[30,34432,34433],{"class":379},"            # 将所有的测试样本进行累计\n",[30,34435,34436,34439,34441,34444,34446],{"class":32,"line":9975},[30,34437,34438],{"class":321},"            test_num",[30,34440,9659],{"class":317},[30,34442,34443],{"class":321},"test_data_x.size(",[30,34445,511],{"class":40},[30,34447,328],{"class":321},[30,34449,34450],{"class":32,"line":9980},[30,34451,2582],{"emptyLinePlaceholder":245},[30,34453,34454],{"class":32,"line":9985},[30,34455,34456],{"class":379},"        # 计算准确度\n",[30,34458,34459,34462,34464,34467,34469],{"class":32,"line":9994},[30,34460,34461],{"class":321},"        test_acc",[30,34463,367],{"class":317},[30,34465,34466],{"class":321},"test_corrects.double().item()",[30,34468,904],{"class":317},[30,34470,34471],{"class":321},"test_num\n",[30,34473,34474],{"class":32,"line":9999},[30,34475,34476],{"class":379},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[30,34478,34479,34481,34483,34486],{"class":32,"line":10005},[30,34480,32589],{"class":40},[30,34482,322],{"class":321},[30,34484,34485],{"class":74},"\"测试的准确率：\"",[30,34487,34488],{"class":321},",test_acc)\n",[30,34490,34491],{"class":32,"line":10026},[30,34492,2582],{"emptyLinePlaceholder":245},[30,34494,34495],{"class":32,"line":10032},[30,34496,34497],{"class":379},"# 实现模型的测试功能\n",[30,34499,34500,34502,34504,34506,34508],{"class":32,"line":10046},[30,34501,1717],{"class":317},[30,34503,31358],{"class":40},[30,34505,3131],{"class":317},[30,34507,31363],{"class":74},[30,34509,3921],{"class":321},[30,34511,34512],{"class":32,"line":10052},[30,34513,34514],{"class":379},"    # 加载模型\n",[30,34516,34517,34519,34521],{"class":32,"line":10079},[30,34518,31427],{"class":321},[30,34520,367],{"class":317},[30,34522,33963],{"class":321},[30,34524,34525],{"class":32,"line":10088},[30,34526,34527],{"class":379},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[30,34529,34530],{"class":32,"line":10094},[30,34531,34532],{"class":379},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[30,34534,34535,34538,34541],{"class":32,"line":10102},[30,34536,34537],{"class":321},"    model.load_state_dict(torch.load(",[30,34539,34540],{"class":74},"'best_model.pth'",[30,34542,30635],{"class":321},[30,34544,34545],{"class":32,"line":10107},[30,34546,34547],{"class":379},"    # 数据加载\n",[30,34549,34550,34552,34554],{"class":32,"line":16786},[30,34551,34160],{"class":321},[30,34553,367],{"class":317},[30,34555,34556],{"class":321},"test_data_process()\n",[30,34558,34559],{"class":32,"line":16792},[30,34560,34561],{"class":379},"    # 加载模型测试的函数\n",[30,34563,34564],{"class":32,"line":16815},[30,34565,34566],{"class":321},"    test_model_process(model,test_dataloader)\n",[30,34568,34569],{"class":32,"line":16821},[30,34570,2582],{"emptyLinePlaceholder":245},[30,34572,34573],{"class":32,"line":16844},[30,34574,34575],{"class":379},"    # 验证集推理实现：\n",[30,34577,34578],{"class":32,"line":16858},[30,34579,34580],{"class":379},"    # 加载数据加载的更详细一些\n",[30,34582,34583,34585,34587,34589,34591,34593,34595],{"class":32,"line":16878},[30,34584,31375],{"class":321},[30,34586,367],{"class":317},[30,34588,31382],{"class":74},[30,34590,1887],{"class":317},[30,34592,31387],{"class":321},[30,34594,1884],{"class":317},[30,34596,34257],{"class":74},[30,34598,34599,34601,34603],{"class":32,"line":16884},[30,34600,31427],{"class":321},[30,34602,367],{"class":317},[30,34604,32427],{"class":321},[30,34606,34607],{"class":32,"line":16895},[30,34608,34609],{"class":379},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[30,34611,34612],{"class":32,"line":16918},[30,34613,34614],{"class":379},"    # 顺序不可改变\n",[30,34616,34617,34620,34622,34624,34627,34629,34632,34634,34637,34639,34642,34644,34647,34649,34652,34654,34657,34659,34662,34664,34667,34669,34672],{"class":32,"line":16940},[30,34618,34619],{"class":321},"    classes",[30,34621,367],{"class":317},[30,34623,1210],{"class":321},[30,34625,34626],{"class":74},"'T-shirt\u002Ftop'",[30,34628,698],{"class":321},[30,34630,34631],{"class":74},"'Trouser'",[30,34633,698],{"class":321},[30,34635,34636],{"class":74},"'Pullover'",[30,34638,698],{"class":321},[30,34640,34641],{"class":74},"'Dress'",[30,34643,698],{"class":321},[30,34645,34646],{"class":74},"'Coat'",[30,34648,698],{"class":321},[30,34650,34651],{"class":74},"'Sandal'",[30,34653,698],{"class":321},[30,34655,34656],{"class":74},"'Shirt'",[30,34658,698],{"class":321},[30,34660,34661],{"class":74},"'Sneaker'",[30,34663,698],{"class":321},[30,34665,34666],{"class":74},"'Bag'",[30,34668,698],{"class":321},[30,34670,34671],{"class":74},"'Ankle boot'",[30,34673,33384],{"class":321},[30,34675,34676,34678],{"class":32,"line":16945},[30,34677,34316],{"class":317},[30,34679,33022],{"class":321},[30,34681,34682],{"class":32,"line":16951},[30,34683,34684],{"class":379},"        # 将数据和标签都放到设备当中\n",[30,34686,34687,34689,34692,34694],{"class":32,"line":16965},[30,34688,3585],{"class":317},[30,34690,34691],{"class":321}," b_x,b_y ",[30,34693,26181],{"class":317},[30,34695,34335],{"class":321},[30,34697,34698,34700,34702],{"class":32,"line":16978},[30,34699,32748],{"class":321},[30,34701,367],{"class":317},[30,34703,32753],{"class":321},[30,34705,34706,34708,34710],{"class":32,"line":16983},[30,34707,32763],{"class":321},[30,34709,367],{"class":317},[30,34711,32768],{"class":321},[30,34713,34714],{"class":32,"line":16997},[30,34715,2582],{"emptyLinePlaceholder":245},[30,34717,34718],{"class":32,"line":17002},[30,34719,34720],{"class":379},"            # 设置模型为验证模式\n",[30,34722,34723],{"class":32,"line":17008},[30,34724,33013],{"class":321},[30,34726,34727],{"class":32,"line":17013},[30,34728,34729],{"class":379},"            # 模型推理结果\n",[30,34731,34732,34734,34736],{"class":32,"line":17027},[30,34733,32798],{"class":321},[30,34735,367],{"class":317},[30,34737,32803],{"class":321},[30,34739,34740],{"class":32,"line":17032},[30,34741,34742],{"class":379},"            # 获取最大下标，最大下标就是类别号\n",[30,34744,34745,34747,34749,34751,34753,34755,34757],{"class":32,"line":17037},[30,34746,32815],{"class":321},[30,34748,367],{"class":317},[30,34750,32820],{"class":321},[30,34752,32823],{"class":5398},[30,34754,367],{"class":317},[30,34756,537],{"class":40},[30,34758,328],{"class":321},[30,34760,34761],{"class":32,"line":17051},[30,34762,34763],{"class":379},"            # 取出张量中的数值\n",[30,34765,34766,34769,34771],{"class":32,"line":17063},[30,34767,34768],{"class":321},"            result",[30,34770,367],{"class":317},[30,34772,34773],{"class":321},"pre_lab.item()\n",[30,34775,34776,34779,34781],{"class":32,"line":17068},[30,34777,34778],{"class":321},"            label",[30,34780,367],{"class":317},[30,34782,34783],{"class":321},"b_y.item()\n",[30,34785,34786,34789,34791,34794,34797,34800,34802,34805],{"class":32,"line":17081},[30,34787,34788],{"class":40},"            print",[30,34790,322],{"class":321},[30,34792,34793],{"class":74},"\"预测值：\"",[30,34795,34796],{"class":321},",classes[result],",[30,34798,34799],{"class":74},"\"------\"",[30,34801,698],{"class":321},[30,34803,34804],{"class":74},"\"真实值：\"",[30,34806,34807],{"class":321},",classes[label])\n",[157,34809,34810],{},"（2）AlexNet",[271,34812,34813],{},[150,34814,34815],{},"神经网络构建",[20,34817,34819],{"className":30516,"code":34818,"language":30518,"meta":25,"style":25},"import torch\nfrom torch import nn\nfrom torchsummary import summary\nimport torch.nn.functional as F\n\nclass AlexNet(nn.Module):\n    def __init__(self):\n        super(AlexNet,self).__init__()\n        self.ReLu=nn.ReLU()\n        self.c1=nn.Conv2d(in_channels=1,out_channels=96,kernel_size=11,stride=4)\n        self.s2=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c3=nn.Conv2d(in_channels=96,out_channels=256,kernel_size=5,padding=2)\n        self.s4=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c5=nn.Conv2d(in_channels=256,out_channels=384,kernel_size=3,padding=1)\n        self.c6=nn.Conv2d(in_channels=384,out_channels=384,kernel_size=3,padding=1)\n        self.c7=nn.Conv2d(in_channels=384,out_channels=256,kernel_size=3,padding=1)\n        self.s8=nn.MaxPool2d(kernel_size=3,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n       # 定义全连接层\n        self.f1=nn.Linear(6*6*256,4096)\n        self.f2=nn.Linear(4096,4096)\n        self.f3=nn.Linear(4096,10)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.ReLu(self.c1(x))\n        x=self.s2(x)\n        x=self.ReLu(self.c3(x))\n        x=self.s4(x)\n        x=self.ReLu(self.c5(x))\n        x=self.ReLu(self.c6(x))\n        x=self.ReLu(self.c7(x))\n        x=self.s8(x)\n\n        # 展平加线性全连接层\n        x=self.flatten(x)\n        x=self.ReLu(self.f1(x))\n        # 还需要dropout对神经元随机进行失活\n        x=F.dropout(x,0.5)\n        x=self.ReLu(self.f2(x))\n        x=F.dropout(x,0.5)\n        # 直接输出\n        x=self.f3(x)\n        # 前向传播输出\n        return x\n# 定义主函数，用于测试神经网络是否可以正常工作\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 模型实例化，然后将实例化的模型放到设备中\n    model=AlexNet().to(device)\n    print(summary(model,(1,227,227)))\n",[27,34820,34821,34827,34837,34847,34859,34863,34880,34888,34903,34915,34957,34984,35027,35053,35097,35140,35183,35210,35214,35224,35229,35257,35276,35295,35299,35304,35312,35327,35337,35351,35361,35376,35391,35406,35417,35421,35426,35436,35451,35456,35470,35485,35497,35502,35513,35518,35524,35529,35541,35561,35566,35575],{"__ignoreMap":25},[30,34822,34823,34825],{"class":32,"line":33},[30,34824,30530],{"class":317},[30,34826,30533],{"class":321},[30,34828,34829,34831,34833,34835],{"class":32,"line":44},[30,34830,30875],{"class":317},[30,34832,30878],{"class":321},[30,34834,30530],{"class":317},[30,34836,30883],{"class":321},[30,34838,34839,34841,34843,34845],{"class":32,"line":52},[30,34840,30875],{"class":317},[30,34842,30895],{"class":321},[30,34844,30530],{"class":317},[30,34846,30900],{"class":321},[30,34848,34849,34851,34854,34856],{"class":32,"line":60},[30,34850,30530],{"class":317},[30,34852,34853],{"class":321}," torch.nn.functional ",[30,34855,31521],{"class":317},[30,34857,34858],{"class":321}," F\n",[30,34860,34861],{"class":32,"line":68},[30,34862,2582],{"emptyLinePlaceholder":245},[30,34864,34865,34867,34870,34872,34874,34876,34878],{"class":32,"line":80},[30,34866,14876],{"class":317},[30,34868,34869],{"class":36}," AlexNet",[30,34871,322],{"class":321},[30,34873,30916],{"class":36},[30,34875,878],{"class":321},[30,34877,30921],{"class":36},[30,34879,30924],{"class":321},[30,34881,34882,34884,34886],{"class":32,"line":88},[30,34883,30939],{"class":317},[30,34885,30942],{"class":40},[30,34887,30945],{"class":321},[30,34889,34890,34892,34895,34897,34899,34901],{"class":32,"line":96},[30,34891,30955],{"class":40},[30,34893,34894],{"class":321},"(AlexNet,",[30,34896,30961],{"class":40},[30,34898,30964],{"class":321},[30,34900,30967],{"class":40},[30,34902,2158],{"class":321},[30,34904,34905,34907,34910,34912],{"class":32,"line":104},[30,34906,30983],{"class":40},[30,34908,34909],{"class":321},".ReLu",[30,34911,367],{"class":317},[30,34913,34914],{"class":321},"nn.ReLU()\n",[30,34916,34917,34919,34921,34923,34925,34927,34929,34931,34933,34935,34937,34939,34941,34943,34945,34947,34949,34951,34953,34955],{"class":32,"line":112},[30,34918,30983],{"class":40},[30,34920,30986],{"class":321},[30,34922,367],{"class":317},[30,34924,30991],{"class":321},[30,34926,30994],{"class":5398},[30,34928,367],{"class":317},[30,34930,537],{"class":40},[30,34932,698],{"class":321},[30,34934,31003],{"class":5398},[30,34936,367],{"class":317},[30,34938,529],{"class":40},[30,34940,698],{"class":321},[30,34942,31012],{"class":5398},[30,34944,367],{"class":317},[30,34946,792],{"class":40},[30,34948,698],{"class":321},[30,34950,31067],{"class":5398},[30,34952,367],{"class":317},[30,34954,613],{"class":40},[30,34956,328],{"class":321},[30,34958,34959,34961,34963,34965,34968,34970,34972,34974,34976,34978,34980,34982],{"class":32,"line":123},[30,34960,30983],{"class":40},[30,34962,31051],{"class":321},[30,34964,367],{"class":317},[30,34966,34967],{"class":321},"nn.MaxPool2d(",[30,34969,31012],{"class":5398},[30,34971,367],{"class":317},[30,34973,392],{"class":40},[30,34975,698],{"class":321},[30,34977,31067],{"class":5398},[30,34979,367],{"class":317},[30,34981,398],{"class":40},[30,34983,328],{"class":321},[30,34985,34986,34988,34990,34992,34994,34996,34998,35000,35002,35004,35006,35009,35011,35013,35015,35017,35019,35021,35023,35025],{"class":32,"line":131},[30,34987,30983],{"class":40},[30,34989,31080],{"class":321},[30,34991,367],{"class":317},[30,34993,30991],{"class":321},[30,34995,30994],{"class":5398},[30,34997,367],{"class":317},[30,34999,529],{"class":40},[30,35001,698],{"class":321},[30,35003,31003],{"class":5398},[30,35005,367],{"class":317},[30,35007,35008],{"class":40},"256",[30,35010,698],{"class":321},[30,35012,31012],{"class":5398},[30,35014,367],{"class":317},[30,35016,639],{"class":40},[30,35018,698],{"class":321},[30,35020,31021],{"class":5398},[30,35022,367],{"class":317},[30,35024,398],{"class":40},[30,35026,328],{"class":321},[30,35028,35029,35031,35033,35035,35037,35039,35041,35043,35045,35047,35049,35051],{"class":32,"line":142},[30,35030,30983],{"class":40},[30,35032,31115],{"class":321},[30,35034,367],{"class":317},[30,35036,34967],{"class":321},[30,35038,31012],{"class":5398},[30,35040,367],{"class":317},[30,35042,392],{"class":40},[30,35044,698],{"class":321},[30,35046,31067],{"class":5398},[30,35048,367],{"class":317},[30,35050,398],{"class":40},[30,35052,328],{"class":321},[30,35054,35055,35057,35060,35062,35064,35066,35068,35070,35072,35074,35076,35079,35081,35083,35085,35087,35089,35091,35093,35095],{"class":32,"line":1811},[30,35056,30983],{"class":40},[30,35058,35059],{"class":321},".c5",[30,35061,367],{"class":317},[30,35063,30991],{"class":321},[30,35065,30994],{"class":5398},[30,35067,367],{"class":317},[30,35069,35008],{"class":40},[30,35071,698],{"class":321},[30,35073,31003],{"class":5398},[30,35075,367],{"class":317},[30,35077,35078],{"class":40},"384",[30,35080,698],{"class":321},[30,35082,31012],{"class":5398},[30,35084,367],{"class":317},[30,35086,392],{"class":40},[30,35088,698],{"class":321},[30,35090,31021],{"class":5398},[30,35092,367],{"class":317},[30,35094,537],{"class":40},[30,35096,328],{"class":321},[30,35098,35099,35101,35104,35106,35108,35110,35112,35114,35116,35118,35120,35122,35124,35126,35128,35130,35132,35134,35136,35138],{"class":32,"line":1825},[30,35100,30983],{"class":40},[30,35102,35103],{"class":321},".c6",[30,35105,367],{"class":317},[30,35107,30991],{"class":321},[30,35109,30994],{"class":5398},[30,35111,367],{"class":317},[30,35113,35078],{"class":40},[30,35115,698],{"class":321},[30,35117,31003],{"class":5398},[30,35119,367],{"class":317},[30,35121,35078],{"class":40},[30,35123,698],{"class":321},[30,35125,31012],{"class":5398},[30,35127,367],{"class":317},[30,35129,392],{"class":40},[30,35131,698],{"class":321},[30,35133,31021],{"class":5398},[30,35135,367],{"class":317},[30,35137,537],{"class":40},[30,35139,328],{"class":321},[30,35141,35142,35144,35147,35149,35151,35153,35155,35157,35159,35161,35163,35165,35167,35169,35171,35173,35175,35177,35179,35181],{"class":32,"line":1830},[30,35143,30983],{"class":40},[30,35145,35146],{"class":321},".c7",[30,35148,367],{"class":317},[30,35150,30991],{"class":321},[30,35152,30994],{"class":5398},[30,35154,367],{"class":317},[30,35156,35078],{"class":40},[30,35158,698],{"class":321},[30,35160,31003],{"class":5398},[30,35162,367],{"class":317},[30,35164,35008],{"class":40},[30,35166,698],{"class":321},[30,35168,31012],{"class":5398},[30,35170,367],{"class":317},[30,35172,392],{"class":40},[30,35174,698],{"class":321},[30,35176,31021],{"class":5398},[30,35178,367],{"class":317},[30,35180,537],{"class":40},[30,35182,328],{"class":321},[30,35184,35185,35187,35190,35192,35194,35196,35198,35200,35202,35204,35206,35208],{"class":32,"line":1836},[30,35186,30983],{"class":40},[30,35188,35189],{"class":321},".s8",[30,35191,367],{"class":317},[30,35193,34967],{"class":321},[30,35195,31012],{"class":5398},[30,35197,367],{"class":317},[30,35199,392],{"class":40},[30,35201,698],{"class":321},[30,35203,31067],{"class":5398},[30,35205,367],{"class":317},[30,35207,398],{"class":40},[30,35209,328],{"class":321},[30,35211,35212],{"class":32,"line":1857},[30,35213,31140],{"class":379},[30,35215,35216,35218,35220,35222],{"class":32,"line":1862},[30,35217,30983],{"class":40},[30,35219,31147],{"class":321},[30,35221,367],{"class":317},[30,35223,31152],{"class":321},[30,35225,35226],{"class":32,"line":1876},[30,35227,35228],{"class":379},"       # 定义全连接层\n",[30,35230,35231,35233,35236,35238,35240,35242,35244,35246,35248,35250,35252,35255],{"class":32,"line":1881},[30,35232,30983],{"class":40},[30,35234,35235],{"class":321},".f1",[30,35237,367],{"class":317},[30,35239,31169],{"class":321},[30,35241,664],{"class":40},[30,35243,775],{"class":317},[30,35245,664],{"class":40},[30,35247,775],{"class":317},[30,35249,35008],{"class":40},[30,35251,698],{"class":321},[30,35253,35254],{"class":40},"4096",[30,35256,328],{"class":321},[30,35258,35259,35261,35264,35266,35268,35270,35272,35274],{"class":32,"line":1910},[30,35260,30983],{"class":40},[30,35262,35263],{"class":321},".f2",[30,35265,367],{"class":317},[30,35267,31169],{"class":321},[30,35269,35254],{"class":40},[30,35271,698],{"class":321},[30,35273,35254],{"class":40},[30,35275,328],{"class":321},[30,35277,35278,35280,35283,35285,35287,35289,35291,35293],{"class":32,"line":1915},[30,35279,30983],{"class":40},[30,35281,35282],{"class":321},".f3",[30,35284,367],{"class":317},[30,35286,31169],{"class":321},[30,35288,35254],{"class":40},[30,35290,698],{"class":321},[30,35292,766],{"class":40},[30,35294,328],{"class":321},[30,35296,35297],{"class":32,"line":1932},[30,35298,2582],{"emptyLinePlaceholder":245},[30,35300,35301],{"class":32,"line":1937},[30,35302,35303],{"class":379},"    # 定义前向传播\n",[30,35305,35306,35308,35310],{"class":32,"line":1942},[30,35307,30939],{"class":317},[30,35309,31231],{"class":36},[30,35311,31234],{"class":321},[30,35313,35314,35316,35318,35320,35323,35325],{"class":32,"line":1947},[30,35315,31239],{"class":321},[30,35317,367],{"class":317},[30,35319,30961],{"class":40},[30,35321,35322],{"class":321},".ReLu(",[30,35324,30961],{"class":40},[30,35326,31251],{"class":321},[30,35328,35329,35331,35333,35335],{"class":32,"line":1961},[30,35330,31239],{"class":321},[30,35332,367],{"class":317},[30,35334,30961],{"class":40},[30,35336,31262],{"class":321},[30,35338,35339,35341,35343,35345,35347,35349],{"class":32,"line":1966},[30,35340,31239],{"class":321},[30,35342,367],{"class":317},[30,35344,30961],{"class":40},[30,35346,35322],{"class":321},[30,35348,30961],{"class":40},[30,35350,31277],{"class":321},[30,35352,35353,35355,35357,35359],{"class":32,"line":2759},[30,35354,31239],{"class":321},[30,35356,367],{"class":317},[30,35358,30961],{"class":40},[30,35360,31288],{"class":321},[30,35362,35363,35365,35367,35369,35371,35373],{"class":32,"line":2773},[30,35364,31239],{"class":321},[30,35366,367],{"class":317},[30,35368,30961],{"class":40},[30,35370,35322],{"class":321},[30,35372,30961],{"class":40},[30,35374,35375],{"class":321},".c5(x))\n",[30,35377,35378,35380,35382,35384,35386,35388],{"class":32,"line":2781},[30,35379,31239],{"class":321},[30,35381,367],{"class":317},[30,35383,30961],{"class":40},[30,35385,35322],{"class":321},[30,35387,30961],{"class":40},[30,35389,35390],{"class":321},".c6(x))\n",[30,35392,35393,35395,35397,35399,35401,35403],{"class":32,"line":2786},[30,35394,31239],{"class":321},[30,35396,367],{"class":317},[30,35398,30961],{"class":40},[30,35400,35322],{"class":321},[30,35402,30961],{"class":40},[30,35404,35405],{"class":321},".c7(x))\n",[30,35407,35408,35410,35412,35414],{"class":32,"line":2792},[30,35409,31239],{"class":321},[30,35411,367],{"class":317},[30,35413,30961],{"class":40},[30,35415,35416],{"class":321},".s8(x)\n",[30,35418,35419],{"class":32,"line":2798},[30,35420,2582],{"emptyLinePlaceholder":245},[30,35422,35423],{"class":32,"line":2803},[30,35424,35425],{"class":379},"        # 展平加线性全连接层\n",[30,35427,35428,35430,35432,35434],{"class":32,"line":8130},[30,35429,31239],{"class":321},[30,35431,367],{"class":317},[30,35433,30961],{"class":40},[30,35435,31299],{"class":321},[30,35437,35438,35440,35442,35444,35446,35448],{"class":32,"line":8154},[30,35439,31239],{"class":321},[30,35441,367],{"class":317},[30,35443,30961],{"class":40},[30,35445,35322],{"class":321},[30,35447,30961],{"class":40},[30,35449,35450],{"class":321},".f1(x))\n",[30,35452,35453],{"class":32,"line":8159},[30,35454,35455],{"class":379},"        # 还需要dropout对神经元随机进行失活\n",[30,35457,35458,35460,35462,35465,35468],{"class":32,"line":8165},[30,35459,31239],{"class":321},[30,35461,367],{"class":317},[30,35463,35464],{"class":321},"F.dropout(x,",[30,35466,35467],{"class":40},"0.5",[30,35469,328],{"class":321},[30,35471,35472,35474,35476,35478,35480,35482],{"class":32,"line":8192},[30,35473,31239],{"class":321},[30,35475,367],{"class":317},[30,35477,30961],{"class":40},[30,35479,35322],{"class":321},[30,35481,30961],{"class":40},[30,35483,35484],{"class":321},".f2(x))\n",[30,35486,35487,35489,35491,35493,35495],{"class":32,"line":8197},[30,35488,31239],{"class":321},[30,35490,367],{"class":317},[30,35492,35464],{"class":321},[30,35494,35467],{"class":40},[30,35496,328],{"class":321},[30,35498,35499],{"class":32,"line":8203},[30,35500,35501],{"class":379},"        # 直接输出\n",[30,35503,35504,35506,35508,35510],{"class":32,"line":8215},[30,35505,31239],{"class":321},[30,35507,367],{"class":317},[30,35509,30961],{"class":40},[30,35511,35512],{"class":321},".f3(x)\n",[30,35514,35515],{"class":32,"line":8227},[30,35516,35517],{"class":379},"        # 前向传播输出\n",[30,35519,35520,35522],{"class":32,"line":8239},[30,35521,14934],{"class":317},[30,35523,31347],{"class":321},[30,35525,35526],{"class":32,"line":9898},[30,35527,35528],{"class":379},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[30,35530,35531,35533,35535,35537,35539],{"class":32,"line":9923},[30,35532,1717],{"class":317},[30,35534,31358],{"class":40},[30,35536,3131],{"class":317},[30,35538,31363],{"class":74},[30,35540,3921],{"class":321},[30,35542,35543,35545,35547,35549,35551,35553,35555,35557,35559],{"class":32,"line":9946},[30,35544,31375],{"class":321},[30,35546,367],{"class":317},[30,35548,30589],{"class":321},[30,35550,31382],{"class":74},[30,35552,1887],{"class":317},[30,35554,31387],{"class":321},[30,35556,1884],{"class":317},[30,35558,30614],{"class":74},[30,35560,328],{"class":321},[30,35562,35563],{"class":32,"line":9970},[30,35564,35565],{"class":379},"    # 模型实例化，然后将实例化的模型放到设备中\n",[30,35567,35568,35570,35572],{"class":32,"line":9975},[30,35569,31427],{"class":321},[30,35571,367],{"class":317},[30,35573,35574],{"class":321},"AlexNet().to(device)\n",[30,35576,35577,35579,35581,35583,35585,35588,35590,35592],{"class":32,"line":9980},[30,35578,31437],{"class":40},[30,35580,31440],{"class":321},[30,35582,537],{"class":40},[30,35584,698],{"class":321},[30,35586,35587],{"class":40},"227",[30,35589,698],{"class":321},[30,35591,35587],{"class":40},[30,35593,31453],{"class":321},[271,35595,35596],{"start":44},[150,35597,31466],{},[20,35599,35601],{"className":30516,"code":35600,"language":30518,"meta":25,"style":25},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import AlexNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    AlexNet=AlexNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(AlexNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[27,35602,35603,35609,35615,35625,35631,35641,35651,35661,35671,35681,35685,35696,35706,35710,35714,35718,35726,35738,35748,35764,35774,35806,35820,35830,35840,35844,35854,35868,35878,35888,35898,35904,35908,35912,35916,35920,35924,35932,35952,35956,35960,35964,35968,35972,35988,35992,35996,36004,36008,36012,36020,36024,36028,36032,36040,36044,36048,36052,36056,36064,36068,36076,36080,36088,36092,36100,36104,36112,36116,36120,36128,36132,36136,36140,36152,36176,36190,36194,36198,36202,36210,36214,36222,36226,36234,36238,36246,36250,36258,36262,36270,36274,36286,36290,36298,36302,36310,36314,36318,36322,36326,36334,36338,36354,36358,36366,36370,36374,36378,36382,36386,36390,36394,36410,36414,36426,36430,36442,36446,36458,36462,36470,36474,36482,36486,36490,36495,36501,36505,36514,36518,36535,36539,36548,36552,36570,36583,36588,36601,36605,36609,36617,36621,36625,36633,36637,36645,36649,36657,36661,36665,36707,36749,36753,36757,36773,36777,36793,36797,36801,36809,36813,36817,36829,36867,36872,36877,36886,36890,36904,36914,36920,36926,36932,36938,36942,36946,36952,36956,36960,36968,36972,36990,36994,36998,37002,37018,37022,37026,37030,37034,37038,37058,37078,37082,37086,37090,37098,37106,37110,37126,37146,37166,37170,37174,37182,37190,37194,37198,37202,37214,37218,37228,37236,37253],{"__ignoreMap":25},[30,35604,35605,35607],{"class":32,"line":33},[30,35606,30530],{"class":317},[30,35608,31960],{"class":321},[30,35610,35611,35613],{"class":32,"line":44},[30,35612,30530],{"class":317},[30,35614,31967],{"class":321},[30,35616,35617,35619,35621,35623],{"class":32,"line":52},[30,35618,30530],{"class":317},[30,35620,31978],{"class":321},[30,35622,31521],{"class":317},[30,35624,31983],{"class":321},[30,35626,35627,35629],{"class":32,"line":60},[30,35628,30530],{"class":317},[30,35630,30533],{"class":321},[30,35632,35633,35635,35637,35639],{"class":32,"line":68},[30,35634,30875],{"class":317},[30,35636,31553],{"class":321},[30,35638,30530],{"class":317},[30,35640,32000],{"class":321},[30,35642,35643,35645,35647,35649],{"class":32,"line":80},[30,35644,30875],{"class":317},[30,35646,31506],{"class":321},[30,35648,30530],{"class":317},[30,35650,31511],{"class":321},[30,35652,35653,35655,35657,35659],{"class":32,"line":88},[30,35654,30875],{"class":317},[30,35656,31536],{"class":321},[30,35658,30530],{"class":317},[30,35660,31541],{"class":321},[30,35662,35663,35665,35667,35669],{"class":32,"line":96},[30,35664,30530],{"class":317},[30,35666,31553],{"class":321},[30,35668,31521],{"class":317},[30,35670,31558],{"class":321},[30,35672,35673,35675,35677,35679],{"class":32,"line":104},[30,35674,30530],{"class":317},[30,35676,31570],{"class":321},[30,35678,31521],{"class":317},[30,35680,31575],{"class":321},[30,35682,35683],{"class":32,"line":112},[30,35684,32045],{"class":379},[30,35686,35687,35689,35691,35693],{"class":32,"line":123},[30,35688,30875],{"class":317},[30,35690,32052],{"class":321},[30,35692,30530],{"class":317},[30,35694,35695],{"class":321}," AlexNet\n",[30,35697,35698,35700,35702,35704],{"class":32,"line":131},[30,35699,30875],{"class":317},[30,35701,30878],{"class":321},[30,35703,30530],{"class":317},[30,35705,30883],{"class":321},[30,35707,35708],{"class":32,"line":142},[30,35709,2582],{"emptyLinePlaceholder":245},[30,35711,35712],{"class":32,"line":1811},[30,35713,2582],{"emptyLinePlaceholder":245},[30,35715,35716],{"class":32,"line":1825},[30,35717,32080],{"class":379},[30,35719,35720,35722,35724],{"class":32,"line":1830},[30,35721,32085],{"class":317},[30,35723,32088],{"class":36},[30,35725,32091],{"class":321},[30,35727,35728,35730,35732,35734,35736],{"class":32,"line":1836},[30,35729,32096],{"class":321},[30,35731,367],{"class":317},[30,35733,31593],{"class":321},[30,35735,31601],{"class":74},[30,35737,31604],{"class":321},[30,35739,35740,35742,35744,35746],{"class":32,"line":1857},[30,35741,32109],{"class":5398},[30,35743,367],{"class":317},[30,35745,31614],{"class":40},[30,35747,31604],{"class":321},[30,35749,35750,35752,35754,35756,35758,35760,35762],{"class":32,"line":1862},[30,35751,32120],{"class":5398},[30,35753,367],{"class":317},[30,35755,31631],{"class":321},[30,35757,31634],{"class":5398},[30,35759,367],{"class":317},[30,35761,35587],{"class":40},[30,35763,31642],{"class":321},[30,35765,35766,35768,35770,35772],{"class":32,"line":1876},[30,35767,32137],{"class":5398},[30,35769,367],{"class":317},[30,35771,31614],{"class":40},[30,35773,328],{"class":321},[30,35775,35776,35778,35780,35782,35784,35786,35788,35790,35792,35794,35796,35798,35800,35802,35804],{"class":32,"line":1881},[30,35777,32148],{"class":321},[30,35779,367],{"class":317},[30,35781,32153],{"class":321},[30,35783,32156],{"class":40},[30,35785,322],{"class":321},[30,35787,32161],{"class":40},[30,35789,775],{"class":317},[30,35791,7540],{"class":40},[30,35793,32168],{"class":321},[30,35795,32156],{"class":40},[30,35797,322],{"class":321},[30,35799,32175],{"class":40},[30,35801,775],{"class":317},[30,35803,7540],{"class":40},[30,35805,32182],{"class":321},[30,35807,35808,35810,35812,35814,35816,35818],{"class":32,"line":1910},[30,35809,32187],{"class":321},[30,35811,367],{"class":317},[30,35813,32192],{"class":321},[30,35815,31675],{"class":5398},[30,35817,367],{"class":317},[30,35819,31680],{"class":321},[30,35821,35822,35824,35826,35828],{"class":32,"line":1915},[30,35823,32203],{"class":5398},[30,35825,367],{"class":317},[30,35827,32208],{"class":40},[30,35829,31604],{"class":321},[30,35831,35832,35834,35836,35838],{"class":32,"line":1932},[30,35833,32215],{"class":5398},[30,35835,367],{"class":317},[30,35837,31614],{"class":40},[30,35839,31604],{"class":321},[30,35841,35842],{"class":32,"line":1937},[30,35843,32226],{"class":379},[30,35845,35846,35848,35850,35852],{"class":32,"line":1942},[30,35847,32231],{"class":5398},[30,35849,367],{"class":317},[30,35851,715],{"class":40},[30,35853,328],{"class":321},[30,35855,35856,35858,35860,35862,35864,35866],{"class":32,"line":1947},[30,35857,32242],{"class":321},[30,35859,367],{"class":317},[30,35861,31672],{"class":321},[30,35863,31675],{"class":5398},[30,35865,367],{"class":317},[30,35867,32253],{"class":321},[30,35869,35870,35872,35874,35876],{"class":32,"line":1961},[30,35871,32258],{"class":5398},[30,35873,367],{"class":317},[30,35875,32208],{"class":40},[30,35877,31604],{"class":321},[30,35879,35880,35882,35884,35886],{"class":32,"line":1966},[30,35881,32269],{"class":5398},[30,35883,367],{"class":317},[30,35885,31614],{"class":40},[30,35887,31604],{"class":321},[30,35889,35890,35892,35894,35896],{"class":32,"line":2759},[30,35891,32280],{"class":5398},[30,35893,367],{"class":317},[30,35895,715],{"class":40},[30,35897,328],{"class":321},[30,35899,35900,35902],{"class":32,"line":2773},[30,35901,4272],{"class":317},[30,35903,32293],{"class":321},[30,35905,35906],{"class":32,"line":2781},[30,35907,2582],{"emptyLinePlaceholder":245},[30,35909,35910],{"class":32,"line":2786},[30,35911,32302],{"class":379},[30,35913,35914],{"class":32,"line":2792},[30,35915,32307],{"class":379},[30,35917,35918],{"class":32,"line":2798},[30,35919,2582],{"emptyLinePlaceholder":245},[30,35921,35922],{"class":32,"line":2803},[30,35923,32316],{"class":379},[30,35925,35926,35928,35930],{"class":32,"line":8130},[30,35927,32085],{"class":317},[30,35929,32323],{"class":36},[30,35931,32326],{"class":321},[30,35933,35934,35936,35938,35940,35942,35944,35946,35948,35950],{"class":32,"line":8154},[30,35935,31375],{"class":321},[30,35937,367],{"class":317},[30,35939,30589],{"class":321},[30,35941,31382],{"class":74},[30,35943,1887],{"class":317},[30,35945,31387],{"class":321},[30,35947,1884],{"class":317},[30,35949,32345],{"class":74},[30,35951,328],{"class":321},[30,35953,35954],{"class":32,"line":8159},[30,35955,2582],{"emptyLinePlaceholder":245},[30,35957,35958],{"class":32,"line":8165},[30,35959,2582],{"emptyLinePlaceholder":245},[30,35961,35962],{"class":32,"line":8192},[30,35963,32360],{"class":379},[30,35965,35966],{"class":32,"line":8197},[30,35967,32365],{"class":379},[30,35969,35970],{"class":32,"line":8203},[30,35971,32370],{"class":379},[30,35973,35974,35976,35978,35980,35982,35984,35986],{"class":32,"line":8215},[30,35975,32375],{"class":321},[30,35977,367],{"class":317},[30,35979,32380],{"class":321},[30,35981,32383],{"class":5398},[30,35983,367],{"class":317},[30,35985,32388],{"class":40},[30,35987,328],{"class":321},[30,35989,35990],{"class":32,"line":8227},[30,35991,2582],{"emptyLinePlaceholder":245},[30,35993,35994],{"class":32,"line":8239},[30,35995,32399],{"class":379},[30,35997,35998,36000,36002],{"class":32,"line":9898},[30,35999,32404],{"class":321},[30,36001,367],{"class":317},[30,36003,32409],{"class":321},[30,36005,36006],{"class":32,"line":9923},[30,36007,2582],{"emptyLinePlaceholder":245},[30,36009,36010],{"class":32,"line":9946},[30,36011,32418],{"class":379},[30,36013,36014,36016,36018],{"class":32,"line":9970},[30,36015,31427],{"class":321},[30,36017,367],{"class":317},[30,36019,32427],{"class":321},[30,36021,36022],{"class":32,"line":9975},[30,36023,32432],{"class":379},[30,36025,36026],{"class":32,"line":9980},[30,36027,32437],{"class":379},[30,36029,36030],{"class":32,"line":9985},[30,36031,32442],{"class":379},[30,36033,36034,36036,36038],{"class":32,"line":9994},[30,36035,32447],{"class":321},[30,36037,367],{"class":317},[30,36039,32452],{"class":321},[30,36041,36042],{"class":32,"line":9999},[30,36043,2582],{"emptyLinePlaceholder":245},[30,36045,36046],{"class":32,"line":10005},[30,36047,2582],{"emptyLinePlaceholder":245},[30,36049,36050],{"class":32,"line":10026},[30,36051,32465],{"class":379},[30,36053,36054],{"class":32,"line":10032},[30,36055,32470],{"class":379},[30,36057,36058,36060,36062],{"class":32,"line":10046},[30,36059,32475],{"class":321},[30,36061,367],{"class":317},[30,36063,32480],{"class":40},[30,36065,36066],{"class":32,"line":10052},[30,36067,32485],{"class":379},[30,36069,36070,36072,36074],{"class":32,"line":10079},[30,36071,32490],{"class":321},[30,36073,367],{"class":317},[30,36075,32495],{"class":321},[30,36077,36078],{"class":32,"line":10088},[30,36079,32500],{"class":379},[30,36081,36082,36084,36086],{"class":32,"line":10094},[30,36083,32505],{"class":321},[30,36085,367],{"class":317},[30,36087,32495],{"class":321},[30,36089,36090],{"class":32,"line":10102},[30,36091,32514],{"class":379},[30,36093,36094,36096,36098],{"class":32,"line":10107},[30,36095,32519],{"class":321},[30,36097,367],{"class":317},[30,36099,32495],{"class":321},[30,36101,36102],{"class":32,"line":16786},[30,36103,32528],{"class":379},[30,36105,36106,36108,36110],{"class":32,"line":16792},[30,36107,32533],{"class":321},[30,36109,367],{"class":317},[30,36111,32495],{"class":321},[30,36113,36114],{"class":32,"line":16815},[30,36115,2582],{"emptyLinePlaceholder":245},[30,36117,36118],{"class":32,"line":16821},[30,36119,32546],{"class":379},[30,36121,36122,36124,36126],{"class":32,"line":16844},[30,36123,32551],{"class":321},[30,36125,367],{"class":317},[30,36127,32556],{"class":321},[30,36129,36130],{"class":32,"line":16858},[30,36131,2582],{"emptyLinePlaceholder":245},[30,36133,36134],{"class":32,"line":16878},[30,36135,2582],{"emptyLinePlaceholder":245},[30,36137,36138],{"class":32,"line":16884},[30,36139,32569],{"class":379},[30,36141,36142,36144,36146,36148,36150],{"class":32,"line":16895},[30,36143,3383],{"class":317},[30,36145,32576],{"class":321},[30,36147,26181],{"class":317},[30,36149,32581],{"class":40},[30,36151,32584],{"class":321},[30,36153,36154,36156,36158,36160,36162,36164,36166,36168,36170,36172,36174],{"class":32,"line":16918},[30,36155,32589],{"class":40},[30,36157,322],{"class":321},[30,36159,32594],{"class":74},[30,36161,32597],{"class":40},[30,36163,904],{"class":74},[30,36165,32597],{"class":40},[30,36167,571],{"class":74},[30,36169,32606],{"class":321},[30,36171,852],{"class":317},[30,36173,537],{"class":40},[30,36175,30635],{"class":321},[30,36177,36178,36180,36182,36184,36186,36188],{"class":32,"line":16940},[30,36179,32589],{"class":40},[30,36181,322],{"class":321},[30,36183,32621],{"class":74},[30,36185,775],{"class":317},[30,36187,766],{"class":40},[30,36189,328],{"class":321},[30,36191,36192],{"class":32,"line":16945},[30,36193,2582],{"emptyLinePlaceholder":245},[30,36195,36196],{"class":32,"line":16951},[30,36197,32636],{"class":379},[30,36199,36200],{"class":32,"line":16965},[30,36201,32641],{"class":379},[30,36203,36204,36206,36208],{"class":32,"line":16978},[30,36205,32646],{"class":321},[30,36207,367],{"class":317},[30,36209,32480],{"class":40},[30,36211,36212],{"class":32,"line":16983},[30,36213,32655],{"class":379},[30,36215,36216,36218,36220],{"class":32,"line":16997},[30,36217,32660],{"class":321},[30,36219,367],{"class":317},[30,36221,3267],{"class":40},[30,36223,36224],{"class":32,"line":17002},[30,36225,32669],{"class":379},[30,36227,36228,36230,36232],{"class":32,"line":17008},[30,36229,32674],{"class":321},[30,36231,367],{"class":317},[30,36233,32480],{"class":40},[30,36235,36236],{"class":32,"line":17013},[30,36237,32683],{"class":379},[30,36239,36240,36242,36244],{"class":32,"line":17027},[30,36241,32688],{"class":321},[30,36243,367],{"class":317},[30,36245,3267],{"class":40},[30,36247,36248],{"class":32,"line":17032},[30,36249,32697],{"class":379},[30,36251,36252,36254,36256],{"class":32,"line":17037},[30,36253,32702],{"class":321},[30,36255,367],{"class":317},[30,36257,3267],{"class":40},[30,36259,36260],{"class":32,"line":17051},[30,36261,32711],{"class":379},[30,36263,36264,36266,36268],{"class":32,"line":17063},[30,36265,32716],{"class":321},[30,36267,367],{"class":317},[30,36269,3267],{"class":40},[30,36271,36272],{"class":32,"line":17068},[30,36273,32725],{"class":379},[30,36275,36276,36278,36280,36282,36284],{"class":32,"line":17081},[30,36277,3585],{"class":317},[30,36279,31739],{"class":321},[30,36281,26181],{"class":317},[30,36283,31744],{"class":40},[30,36285,32738],{"class":321},[30,36287,36288],{"class":32,"line":17086},[30,36289,32743],{"class":379},[30,36291,36292,36294,36296],{"class":32,"line":17091},[30,36293,32748],{"class":321},[30,36295,367],{"class":317},[30,36297,32753],{"class":321},[30,36299,36300],{"class":32,"line":17096},[30,36301,32758],{"class":379},[30,36303,36304,36306,36308],{"class":32,"line":17109},[30,36305,32763],{"class":321},[30,36307,367],{"class":317},[30,36309,32768],{"class":321},[30,36311,36312],{"class":32,"line":17114},[30,36313,32774],{"class":379},[30,36315,36316],{"class":32,"line":32771},[30,36317,32780],{"class":321},[30,36319,36320],{"class":32,"line":32777},[30,36321,32786],{"class":379},[30,36323,36324],{"class":32,"line":32783},[30,36325,32792],{"class":379},[30,36327,36328,36330,36332],{"class":32,"line":32789},[30,36329,32798],{"class":321},[30,36331,367],{"class":317},[30,36333,32803],{"class":321},[30,36335,36336],{"class":32,"line":32795},[30,36337,32809],{"class":379},[30,36339,36340,36342,36344,36346,36348,36350,36352],{"class":32,"line":32806},[30,36341,32815],{"class":321},[30,36343,367],{"class":317},[30,36345,32820],{"class":321},[30,36347,32823],{"class":5398},[30,36349,367],{"class":317},[30,36351,537],{"class":40},[30,36353,328],{"class":321},[30,36355,36356],{"class":32,"line":32812},[30,36357,32835],{"class":379},[30,36359,36360,36362,36364],{"class":32,"line":32832},[30,36361,32841],{"class":321},[30,36363,367],{"class":317},[30,36365,32846],{"class":321},[30,36367,36368],{"class":32,"line":32838},[30,36369,32852],{"class":379},[30,36371,36372],{"class":32,"line":32849},[30,36373,32858],{"class":321},[30,36375,36376],{"class":32,"line":32855},[30,36377,32864],{"class":379},[30,36379,36380],{"class":32,"line":32861},[30,36381,32870],{"class":321},[30,36383,36384],{"class":32,"line":32867},[30,36385,32876],{"class":379},[30,36387,36388],{"class":32,"line":32873},[30,36389,32882],{"class":321},[30,36391,36392],{"class":32,"line":32879},[30,36393,32888],{"class":379},[30,36395,36396,36398,36400,36402,36404,36406,36408],{"class":32,"line":32885},[30,36397,32894],{"class":321},[30,36399,9659],{"class":317},[30,36401,32899],{"class":321},[30,36403,775],{"class":317},[30,36405,32904],{"class":321},[30,36407,511],{"class":40},[30,36409,328],{"class":321},[30,36411,36412],{"class":32,"line":32891},[30,36413,32914],{"class":379},[30,36415,36416,36418,36420,36422,36424],{"class":32,"line":32911},[30,36417,32920],{"class":321},[30,36419,9659],{"class":317},[30,36421,32925],{"class":321},[30,36423,3131],{"class":317},[30,36425,32930],{"class":321},[30,36427,36428],{"class":32,"line":32917},[30,36429,32936],{"class":379},[30,36431,36432,36434,36436,36438,36440],{"class":32,"line":32933},[30,36433,32942],{"class":321},[30,36435,9659],{"class":317},[30,36437,32904],{"class":321},[30,36439,511],{"class":40},[30,36441,328],{"class":321},[30,36443,36444],{"class":32,"line":32939},[30,36445,32956],{"class":379},[30,36447,36448,36450,36452,36454,36456],{"class":32,"line":32953},[30,36449,3585],{"class":317},[30,36451,32964],{"class":321},[30,36453,26181],{"class":317},[30,36455,31744],{"class":40},[30,36457,32971],{"class":321},[30,36459,36460],{"class":32,"line":32959},[30,36461,32977],{"class":379},[30,36463,36464,36466,36468],{"class":32,"line":32974},[30,36465,32748],{"class":321},[30,36467,367],{"class":317},[30,36469,32753],{"class":321},[30,36471,36472],{"class":32,"line":32980},[30,36473,32992],{"class":379},[30,36475,36476,36478,36480],{"class":32,"line":32989},[30,36477,32763],{"class":321},[30,36479,367],{"class":317},[30,36481,32768],{"class":321},[30,36483,36484],{"class":32,"line":32995},[30,36485,33007],{"class":379},[30,36487,36488],{"class":32,"line":33004},[30,36489,33013],{"class":321},[30,36491,36492],{"class":32,"line":33010},[30,36493,36494],{"class":379},"            # 验证时不计算梯度以节省内存\u002F计算\n",[30,36496,36497,36499],{"class":32,"line":33016},[30,36498,33019],{"class":317},[30,36500,33022],{"class":321},[30,36502,36503],{"class":32,"line":33025},[30,36504,33028],{"class":379},[30,36506,36507,36510,36512],{"class":32,"line":33031},[30,36508,36509],{"class":321},"                output",[30,36511,367],{"class":317},[30,36513,32803],{"class":321},[30,36515,36516],{"class":32,"line":33042},[30,36517,33045],{"class":379},[30,36519,36520,36523,36525,36527,36529,36531,36533],{"class":32,"line":33048},[30,36521,36522],{"class":321},"                pre_lab",[30,36524,367],{"class":317},[30,36526,32820],{"class":321},[30,36528,32823],{"class":5398},[30,36530,367],{"class":317},[30,36532,537],{"class":40},[30,36534,328],{"class":321},[30,36536,36537],{"class":32,"line":33067},[30,36538,33070],{"class":379},[30,36540,36541,36544,36546],{"class":32,"line":33073},[30,36542,36543],{"class":321},"                val_batch_loss",[30,36545,367],{"class":317},[30,36547,32846],{"class":321},[30,36549,36550],{"class":32,"line":33084},[30,36551,33087],{"class":379},[30,36553,36554,36557,36559,36562,36564,36566,36568],{"class":32,"line":33090},[30,36555,36556],{"class":321},"                val_loss",[30,36558,9659],{"class":317},[30,36560,36561],{"class":321},"val_batch_loss.item()",[30,36563,775],{"class":317},[30,36565,32904],{"class":321},[30,36567,511],{"class":40},[30,36569,328],{"class":321},[30,36571,36572,36575,36577,36579,36581],{"class":32,"line":33110},[30,36573,36574],{"class":321},"                val_corrects",[30,36576,9659],{"class":317},[30,36578,32925],{"class":321},[30,36580,3131],{"class":317},[30,36582,32930],{"class":321},[30,36584,36585],{"class":32,"line":33126},[30,36586,36587],{"class":379},"            # 当前用于验证的样本数量\n",[30,36589,36590,36593,36595,36597,36599],{"class":32,"line":33132},[30,36591,36592],{"class":321},"            val_num",[30,36594,9659],{"class":317},[30,36596,32904],{"class":321},[30,36598,511],{"class":40},[30,36600,328],{"class":321},[30,36602,36603],{"class":32,"line":33146},[30,36604,33149],{"class":379},[30,36606,36607],{"class":32,"line":33152},[30,36608,33155],{"class":379},[30,36610,36611,36613,36615],{"class":32,"line":33158},[30,36612,33161],{"class":321},[30,36614,904],{"class":317},[30,36616,33166],{"class":321},[30,36618,36619],{"class":32,"line":33169},[30,36620,33172],{"class":379},[30,36622,36623],{"class":32,"line":33175},[30,36624,33178],{"class":379},[30,36626,36627,36629,36631],{"class":32,"line":33181},[30,36628,33184],{"class":321},[30,36630,904],{"class":317},[30,36632,33166],{"class":321},[30,36634,36635],{"class":32,"line":33191},[30,36636,33194],{"class":379},[30,36638,36639,36641,36643],{"class":32,"line":33197},[30,36640,33200],{"class":321},[30,36642,904],{"class":317},[30,36644,33205],{"class":321},[30,36646,36647],{"class":32,"line":33208},[30,36648,33211],{"class":379},[30,36650,36651,36653,36655],{"class":32,"line":33214},[30,36652,33217],{"class":321},[30,36654,904],{"class":317},[30,36656,33205],{"class":321},[30,36658,36659],{"class":32,"line":33224},[30,36660,2582],{"emptyLinePlaceholder":245},[30,36662,36663],{"class":32,"line":33229},[30,36664,33232],{"class":379},[30,36666,36667,36669,36671,36673,36675,36677,36679,36681,36683,36685,36687,36689,36691,36693,36695,36697,36699,36701,36703,36705],{"class":32,"line":33235},[30,36668,32589],{"class":40},[30,36670,322],{"class":321},[30,36672,3774],{"class":74},[30,36674,32597],{"class":40},[30,36676,33246],{"class":74},[30,36678,1216],{"class":40},[30,36680,33251],{"class":317},[30,36682,1266],{"class":40},[30,36684,33256],{"class":74},[30,36686,1216],{"class":40},[30,36688,33251],{"class":317},[30,36690,1266],{"class":40},[30,36692,3774],{"class":74},[30,36694,33267],{"class":321},[30,36696,852],{"class":317},[30,36698,537],{"class":40},[30,36700,33274],{"class":321},[30,36702,852],{"class":317},[30,36704,537],{"class":40},[30,36706,33281],{"class":321},[30,36708,36709,36711,36713,36715,36717,36719,36721,36723,36725,36727,36729,36731,36733,36735,36737,36739,36741,36743,36745,36747],{"class":32,"line":33284},[30,36710,32589],{"class":40},[30,36712,322],{"class":321},[30,36714,3774],{"class":74},[30,36716,32597],{"class":40},[30,36718,33295],{"class":74},[30,36720,1216],{"class":40},[30,36722,33251],{"class":317},[30,36724,1266],{"class":40},[30,36726,33304],{"class":74},[30,36728,1216],{"class":40},[30,36730,33251],{"class":317},[30,36732,1266],{"class":40},[30,36734,3774],{"class":74},[30,36736,33315],{"class":321},[30,36738,852],{"class":317},[30,36740,537],{"class":40},[30,36742,33322],{"class":321},[30,36744,852],{"class":317},[30,36746,537],{"class":40},[30,36748,33281],{"class":321},[30,36750,36751],{"class":32,"line":33331},[30,36752,2582],{"emptyLinePlaceholder":245},[30,36754,36755],{"class":32,"line":33336},[30,36756,33339],{"class":379},[30,36758,36759,36761,36763,36765,36767,36769,36771],{"class":32,"line":33342},[30,36760,2679],{"class":317},[30,36762,33347],{"class":321},[30,36764,852],{"class":317},[30,36766,537],{"class":40},[30,36768,1260],{"class":321},[30,36770,1280],{"class":317},[30,36772,33358],{"class":321},[30,36774,36775],{"class":32,"line":33361},[30,36776,33364],{"class":379},[30,36778,36779,36781,36783,36785,36787,36789,36791],{"class":32,"line":33367},[30,36780,33370],{"class":321},[30,36782,361],{"class":40},[30,36784,367],{"class":317},[30,36786,33377],{"class":321},[30,36788,852],{"class":317},[30,36790,537],{"class":40},[30,36792,33384],{"class":321},[30,36794,36795],{"class":32,"line":33387},[30,36796,33390],{"class":379},[30,36798,36799],{"class":32,"line":33393},[30,36800,33396],{"class":379},[30,36802,36803,36805,36807],{"class":32,"line":33399},[30,36804,33402],{"class":321},[30,36806,367],{"class":317},[30,36808,32452],{"class":321},[30,36810,36811],{"class":32,"line":33409},[30,36812,2582],{"emptyLinePlaceholder":245},[30,36814,36815],{"class":32,"line":33414},[30,36816,33417],{"class":379},[30,36818,36819,36821,36823,36825,36827],{"class":32,"line":33420},[30,36820,33423],{"class":321},[30,36822,367],{"class":317},[30,36824,33428],{"class":321},[30,36826,852],{"class":317},[30,36828,33433],{"class":321},[30,36830,36831,36833,36835,36837,36839,36841,36843,36845,36847,36849,36851,36853,36855,36857,36859,36861,36863,36865],{"class":32,"line":33436},[30,36832,32589],{"class":40},[30,36834,322],{"class":321},[30,36836,33443],{"class":74},[30,36838,1216],{"class":40},[30,36840,33448],{"class":317},[30,36842,1266],{"class":40},[30,36844,864],{"class":74},[30,36846,1216],{"class":40},[30,36848,33448],{"class":317},[30,36850,1266],{"class":40},[30,36852,33461],{"class":74},[30,36854,33464],{"class":321},[30,36856,33467],{"class":317},[30,36858,1227],{"class":40},[30,36860,33472],{"class":321},[30,36862,648],{"class":317},[30,36864,1227],{"class":40},[30,36866,30635],{"class":321},[30,36868,36869],{"class":32,"line":33481},[30,36870,36871],{"class":379},"    # 选择最优参数并保存\n",[30,36873,36874],{"class":32,"line":33487},[30,36875,36876],{"class":379},"    # 保存最佳模型权重字典\n",[30,36878,36879,36882,36884],{"class":32,"line":33493},[30,36880,36881],{"class":321},"    torch.save(best_model_wts,",[30,36883,33505],{"class":74},[30,36885,328],{"class":321},[30,36887,36888],{"class":32,"line":33499},[30,36889,33525],{"class":379},[30,36891,36892,36894,36896,36898,36900,36902],{"class":32,"line":33510},[30,36893,33531],{"class":321},[30,36895,367],{"class":317},[30,36897,33536],{"class":321},[30,36899,33539],{"class":5398},[30,36901,367],{"class":317},[30,36903,1732],{"class":321},[30,36905,36906,36908,36910,36912],{"class":32,"line":33516},[30,36907,33549],{"class":74},[30,36909,1179],{"class":321},[30,36911,33554],{"class":40},[30,36913,33557],{"class":321},[30,36915,36916,36918],{"class":32,"line":33522},[30,36917,33563],{"class":74},[30,36919,33566],{"class":321},[30,36921,36922,36924],{"class":32,"line":33528},[30,36923,33572],{"class":74},[30,36925,33575],{"class":321},[30,36927,36928,36930],{"class":32,"line":33546},[30,36929,33581],{"class":74},[30,36931,33584],{"class":321},[30,36933,36934,36936],{"class":32,"line":33560},[30,36935,33590],{"class":74},[30,36937,33593],{"class":321},[30,36939,36940],{"class":32,"line":33569},[30,36941,33599],{"class":321},[30,36943,36944],{"class":32,"line":33578},[30,36945,33605],{"class":379},[30,36947,36948,36950],{"class":32,"line":33587},[30,36949,4272],{"class":317},[30,36951,33613],{"class":321},[30,36953,36954],{"class":32,"line":33596},[30,36955,2582],{"emptyLinePlaceholder":245},[30,36957,36958],{"class":32,"line":33602},[30,36959,33624],{"class":379},[30,36961,36962,36964,36966],{"class":32,"line":33608},[30,36963,32085],{"class":317},[30,36965,33632],{"class":36},[30,36967,33635],{"class":321},[30,36969,36970],{"class":32,"line":33616},[30,36971,33641],{"class":379},[30,36973,36974,36976,36978,36980,36982,36984,36986,36988],{"class":32,"line":33621},[30,36975,33647],{"class":321},[30,36977,31831],{"class":5398},[30,36979,367],{"class":317},[30,36981,322],{"class":321},[30,36983,818],{"class":40},[30,36985,698],{"class":321},[30,36987,613],{"class":40},[30,36989,30635],{"class":321},[30,36991,36992],{"class":32,"line":33627},[30,36993,33667],{"class":379},[30,36995,36996],{"class":32,"line":33638},[30,36997,33673],{"class":379},[30,36999,37000],{"class":32,"line":33644},[30,37001,33679],{"class":379},[30,37003,37004,37006,37008,37010,37012,37014,37016],{"class":32,"line":33664},[30,37005,31865],{"class":321},[30,37007,537],{"class":40},[30,37009,698],{"class":321},[30,37011,398],{"class":40},[30,37013,698],{"class":321},[30,37015,537],{"class":40},[30,37017,328],{"class":321},[30,37019,37020],{"class":32,"line":33670},[30,37021,33702],{"class":379},[30,37023,37024],{"class":32,"line":33676},[30,37025,33708],{"class":379},[30,37027,37028],{"class":32,"line":33682},[30,37029,33714],{"class":379},[30,37031,37032],{"class":32,"line":33699},[30,37033,33720],{"class":379},[30,37035,37036],{"class":32,"line":33705},[30,37037,33726],{"class":379},[30,37039,37040,37042,37044,37046,37048,37050,37052,37054,37056],{"class":32,"line":33711},[30,37041,33732],{"class":321},[30,37043,33735],{"class":74},[30,37045,33738],{"class":321},[30,37047,33741],{"class":74},[30,37049,698],{"class":321},[30,37051,33746],{"class":5398},[30,37053,367],{"class":317},[30,37055,33751],{"class":74},[30,37057,328],{"class":321},[30,37059,37060,37062,37064,37066,37068,37070,37072,37074,37076],{"class":32,"line":33717},[30,37061,33732],{"class":321},[30,37063,33735],{"class":74},[30,37065,33763],{"class":321},[30,37067,33766],{"class":74},[30,37069,698],{"class":321},[30,37071,33746],{"class":5398},[30,37073,367],{"class":317},[30,37075,33775],{"class":74},[30,37077,328],{"class":321},[30,37079,37080],{"class":32,"line":33723},[30,37081,33783],{"class":379},[30,37083,37084],{"class":32,"line":33729},[30,37085,33789],{"class":321},[30,37087,37088],{"class":32,"line":33756},[30,37089,33795],{"class":379},[30,37091,37092,37094,37096],{"class":32,"line":33780},[30,37093,33801],{"class":321},[30,37095,33804],{"class":74},[30,37097,328],{"class":321},[30,37099,37100,37102,37104],{"class":32,"line":33786},[30,37101,33812],{"class":321},[30,37103,33815],{"class":74},[30,37105,328],{"class":321},[30,37107,37108],{"class":32,"line":33792},[30,37109,33823],{"class":379},[30,37111,37112,37114,37116,37118,37120,37122,37124],{"class":32,"line":33798},[30,37113,31865],{"class":321},[30,37115,537],{"class":40},[30,37117,698],{"class":321},[30,37119,398],{"class":40},[30,37121,698],{"class":321},[30,37123,398],{"class":40},[30,37125,328],{"class":321},[30,37127,37128,37130,37132,37134,37136,37138,37140,37142,37144],{"class":32,"line":33809},[30,37129,33732],{"class":321},[30,37131,33735],{"class":74},[30,37133,33850],{"class":321},[30,37135,33741],{"class":74},[30,37137,698],{"class":321},[30,37139,33746],{"class":5398},[30,37141,367],{"class":317},[30,37143,33861],{"class":74},[30,37145,328],{"class":321},[30,37147,37148,37150,37152,37154,37156,37158,37160,37162,37164],{"class":32,"line":33820},[30,37149,33732],{"class":321},[30,37151,33735],{"class":74},[30,37153,33873],{"class":321},[30,37155,33766],{"class":74},[30,37157,698],{"class":321},[30,37159,33746],{"class":5398},[30,37161,367],{"class":317},[30,37163,33884],{"class":74},[30,37165,328],{"class":321},[30,37167,37168],{"class":32,"line":33826},[30,37169,33892],{"class":379},[30,37171,37172],{"class":32,"line":33843},[30,37173,33789],{"class":321},[30,37175,37176,37178,37180],{"class":32,"line":33866},[30,37177,33801],{"class":321},[30,37179,33735],{"class":74},[30,37181,328],{"class":321},[30,37183,37184,37186,37188],{"class":32,"line":33889},[30,37185,33812],{"class":321},[30,37187,33914],{"class":74},[30,37189,328],{"class":321},[30,37191,37192],{"class":32,"line":33895},[30,37193,33922],{"class":321},[30,37195,37196],{"class":32,"line":33900},[30,37197,2582],{"emptyLinePlaceholder":245},[30,37199,37200],{"class":32,"line":33909},[30,37201,33933],{"class":379},[30,37203,37204,37206,37208,37210,37212],{"class":32,"line":33919},[30,37205,1717],{"class":317},[30,37207,31358],{"class":40},[30,37209,3131],{"class":317},[30,37211,31363],{"class":74},[30,37213,3921],{"class":321},[30,37215,37216],{"class":32,"line":33925},[30,37217,33952],{"class":379},[30,37219,37220,37223,37225],{"class":32,"line":33930},[30,37221,37222],{"class":321},"    AlexNet",[30,37224,367],{"class":317},[30,37226,37227],{"class":321},"AlexNet()\n",[30,37229,37230,37232,37234],{"class":32,"line":33936},[30,37231,33969],{"class":321},[30,37233,367],{"class":317},[30,37235,33974],{"class":321},[30,37237,37238,37240,37242,37245,37247,37249,37251],{"class":32,"line":33949},[30,37239,33531],{"class":321},[30,37241,367],{"class":317},[30,37243,37244],{"class":321},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[30,37246,33987],{"class":5398},[30,37248,367],{"class":317},[30,37250,1020],{"class":40},[30,37252,328],{"class":321},[30,37254,37255],{"class":32,"line":33955},[30,37256,33999],{"class":321},[271,37258,37259],{"start":52},[150,37260,34012],{},[20,37262,37264],{"className":30516,"code":37263,"language":30518,"meta":25,"style":25},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import AlexNet\nfrom 练习.AlexNet.model import AlexNet\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=AlexNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[27,37265,37266,37272,37282,37292,37302,37306,37316,37326,37337,37341,37345,37349,37357,37373,37383,37399,37409,37423,37427,37437,37447,37457,37463,37467,37471,37479,37483,37499,37507,37511,37515,37523,37531,37535,37539,37543,37547,37553,37557,37567,37575,37583,37587,37591,37595,37603,37607,37623,37627,37631,37635,37647,37651,37663,37667,37671,37683,37687,37697,37701,37705,37717,37721,37729,37733,37737,37745,37749,37757,37761,37765,37769,37773,37777,37793,37801,37805,37809,37857,37863,37867,37877,37885,37893,37897,37901,37905,37909,37917,37921,37937,37941,37949,37957],{"__ignoreMap":25},[30,37267,37268,37270],{"class":32,"line":33},[30,37269,30530],{"class":317},[30,37271,30533],{"class":321},[30,37273,37274,37276,37278,37280],{"class":32,"line":44},[30,37275,30530],{"class":317},[30,37277,31553],{"class":321},[30,37279,31521],{"class":317},[30,37281,31558],{"class":321},[30,37283,37284,37286,37288,37290],{"class":32,"line":52},[30,37285,30875],{"class":317},[30,37287,34040],{"class":321},[30,37289,30530],{"class":317},[30,37291,34045],{"class":321},[30,37293,37294,37296,37298,37300],{"class":32,"line":60},[30,37295,30875],{"class":317},[30,37297,31536],{"class":321},[30,37299,30530],{"class":317},[30,37301,31541],{"class":321},[30,37303,37304],{"class":32,"line":68},[30,37305,34060],{"class":379},[30,37307,37308,37310,37312,37314],{"class":32,"line":80},[30,37309,30875],{"class":317},[30,37311,31506],{"class":321},[30,37313,30530],{"class":317},[30,37315,31511],{"class":321},[30,37317,37318,37320,37322,37324],{"class":32,"line":88},[30,37319,30875],{"class":317},[30,37321,32052],{"class":321},[30,37323,30530],{"class":317},[30,37325,35695],{"class":321},[30,37327,37328,37330,37333,37335],{"class":32,"line":96},[30,37329,30875],{"class":317},[30,37331,37332],{"class":321}," 练习.AlexNet.model ",[30,37334,30530],{"class":317},[30,37336,35695],{"class":321},[30,37338,37339],{"class":32,"line":104},[30,37340,2582],{"emptyLinePlaceholder":245},[30,37342,37343],{"class":32,"line":112},[30,37344,2582],{"emptyLinePlaceholder":245},[30,37346,37347],{"class":32,"line":123},[30,37348,34089],{"class":379},[30,37350,37351,37353,37355],{"class":32,"line":131},[30,37352,32085],{"class":317},[30,37354,34096],{"class":36},[30,37356,32091],{"class":321},[30,37358,37359,37361,37363,37365,37367,37369,37371],{"class":32,"line":142},[30,37360,34103],{"class":321},[30,37362,367],{"class":317},[30,37364,31593],{"class":321},[30,37366,31596],{"class":5398},[30,37368,367],{"class":317},[30,37370,31601],{"class":74},[30,37372,31604],{"class":321},[30,37374,37375,37377,37379,37381],{"class":32,"line":1811},[30,37376,34120],{"class":5398},[30,37378,367],{"class":317},[30,37380,34125],{"class":40},[30,37382,31604],{"class":321},[30,37384,37385,37387,37389,37391,37393,37395,37397],{"class":32,"line":1825},[30,37386,34132],{"class":5398},[30,37388,367],{"class":317},[30,37390,31631],{"class":321},[30,37392,31634],{"class":5398},[30,37394,367],{"class":317},[30,37396,35587],{"class":40},[30,37398,31642],{"class":321},[30,37400,37401,37403,37405,37407],{"class":32,"line":1830},[30,37402,34149],{"class":5398},[30,37404,367],{"class":317},[30,37406,31614],{"class":40},[30,37408,328],{"class":321},[30,37410,37411,37413,37415,37417,37419,37421],{"class":32,"line":1836},[30,37412,34160],{"class":321},[30,37414,367],{"class":317},[30,37416,31672],{"class":321},[30,37418,31675],{"class":5398},[30,37420,367],{"class":317},[30,37422,34171],{"class":321},[30,37424,37425],{"class":32,"line":1857},[30,37426,34176],{"class":379},[30,37428,37429,37431,37433,37435],{"class":32,"line":1862},[30,37430,34181],{"class":5398},[30,37432,367],{"class":317},[30,37434,537],{"class":40},[30,37436,31604],{"class":321},[30,37438,37439,37441,37443,37445],{"class":32,"line":1876},[30,37440,34192],{"class":5398},[30,37442,367],{"class":317},[30,37444,31614],{"class":40},[30,37446,31604],{"class":321},[30,37448,37449,37451,37453,37455],{"class":32,"line":1881},[30,37450,34203],{"class":5398},[30,37452,367],{"class":317},[30,37454,511],{"class":40},[30,37456,328],{"class":321},[30,37458,37459,37461],{"class":32,"line":1910},[30,37460,4272],{"class":317},[30,37462,34216],{"class":321},[30,37464,37465],{"class":32,"line":1915},[30,37466,2582],{"emptyLinePlaceholder":245},[30,37468,37469],{"class":32,"line":1932},[30,37470,34225],{"class":379},[30,37472,37473,37475,37477],{"class":32,"line":1937},[30,37474,32085],{"class":317},[30,37476,34232],{"class":36},[30,37478,34235],{"class":321},[30,37480,37481],{"class":32,"line":1942},[30,37482,34240],{"class":379},[30,37484,37485,37487,37489,37491,37493,37495,37497],{"class":32,"line":1947},[30,37486,31375],{"class":321},[30,37488,367],{"class":317},[30,37490,31382],{"class":74},[30,37492,1887],{"class":317},[30,37494,31387],{"class":321},[30,37496,1884],{"class":317},[30,37498,34257],{"class":74},[30,37500,37501,37503,37505],{"class":32,"line":1961},[30,37502,31427],{"class":321},[30,37504,367],{"class":317},[30,37506,32427],{"class":321},[30,37508,37509],{"class":32,"line":1966},[30,37510,2582],{"emptyLinePlaceholder":245},[30,37512,37513],{"class":32,"line":2759},[30,37514,34274],{"class":379},[30,37516,37517,37519,37521],{"class":32,"line":2773},[30,37518,34279],{"class":321},[30,37520,367],{"class":317},[30,37522,32480],{"class":40},[30,37524,37525,37527,37529],{"class":32,"line":2781},[30,37526,34288],{"class":321},[30,37528,367],{"class":317},[30,37530,3267],{"class":40},[30,37532,37533],{"class":32,"line":2786},[30,37534,2582],{"emptyLinePlaceholder":245},[30,37536,37537],{"class":32,"line":2792},[30,37538,34301],{"class":379},[30,37540,37541],{"class":32,"line":2798},[30,37542,34306],{"class":379},[30,37544,37545],{"class":32,"line":2803},[30,37546,34311],{"class":379},[30,37548,37549,37551],{"class":32,"line":8130},[30,37550,34316],{"class":317},[30,37552,33022],{"class":321},[30,37554,37555],{"class":32,"line":8154},[30,37556,34323],{"class":379},[30,37558,37559,37561,37563,37565],{"class":32,"line":8159},[30,37560,3585],{"class":317},[30,37562,34330],{"class":321},[30,37564,26181],{"class":317},[30,37566,34335],{"class":321},[30,37568,37569,37571,37573],{"class":32,"line":8165},[30,37570,34340],{"class":321},[30,37572,367],{"class":317},[30,37574,34345],{"class":321},[30,37576,37577,37579,37581],{"class":32,"line":8192},[30,37578,34350],{"class":321},[30,37580,367],{"class":317},[30,37582,34355],{"class":321},[30,37584,37585],{"class":32,"line":8197},[30,37586,34360],{"class":379},[30,37588,37589],{"class":32,"line":8203},[30,37590,33013],{"class":321},[30,37592,37593],{"class":32,"line":8215},[30,37594,34369],{"class":379},[30,37596,37597,37599,37601],{"class":32,"line":8227},[30,37598,32798],{"class":321},[30,37600,367],{"class":317},[30,37602,34378],{"class":321},[30,37604,37605],{"class":32,"line":8239},[30,37606,34383],{"class":379},[30,37608,37609,37611,37613,37615,37617,37619,37621],{"class":32,"line":9898},[30,37610,32815],{"class":321},[30,37612,367],{"class":317},[30,37614,32820],{"class":321},[30,37616,32823],{"class":5398},[30,37618,367],{"class":317},[30,37620,537],{"class":40},[30,37622,328],{"class":321},[30,37624,37625],{"class":32,"line":9923},[30,37626,34404],{"class":379},[30,37628,37629],{"class":32,"line":9946},[30,37630,34409],{"class":379},[30,37632,37633],{"class":32,"line":9970},[30,37634,34414],{"class":379},[30,37636,37637,37639,37641,37643,37645],{"class":32,"line":9975},[30,37638,34419],{"class":321},[30,37640,9659],{"class":317},[30,37642,32925],{"class":321},[30,37644,3131],{"class":317},[30,37646,34428],{"class":321},[30,37648,37649],{"class":32,"line":9980},[30,37650,34433],{"class":379},[30,37652,37653,37655,37657,37659,37661],{"class":32,"line":9985},[30,37654,34438],{"class":321},[30,37656,9659],{"class":317},[30,37658,34443],{"class":321},[30,37660,511],{"class":40},[30,37662,328],{"class":321},[30,37664,37665],{"class":32,"line":9994},[30,37666,2582],{"emptyLinePlaceholder":245},[30,37668,37669],{"class":32,"line":9999},[30,37670,34456],{"class":379},[30,37672,37673,37675,37677,37679,37681],{"class":32,"line":10005},[30,37674,34461],{"class":321},[30,37676,367],{"class":317},[30,37678,34466],{"class":321},[30,37680,904],{"class":317},[30,37682,34471],{"class":321},[30,37684,37685],{"class":32,"line":10026},[30,37686,34476],{"class":379},[30,37688,37689,37691,37693,37695],{"class":32,"line":10032},[30,37690,32589],{"class":40},[30,37692,322],{"class":321},[30,37694,34485],{"class":74},[30,37696,34488],{"class":321},[30,37698,37699],{"class":32,"line":10046},[30,37700,2582],{"emptyLinePlaceholder":245},[30,37702,37703],{"class":32,"line":10052},[30,37704,34497],{"class":379},[30,37706,37707,37709,37711,37713,37715],{"class":32,"line":10079},[30,37708,1717],{"class":317},[30,37710,31358],{"class":40},[30,37712,3131],{"class":317},[30,37714,31363],{"class":74},[30,37716,3921],{"class":321},[30,37718,37719],{"class":32,"line":10088},[30,37720,34514],{"class":379},[30,37722,37723,37725,37727],{"class":32,"line":10094},[30,37724,31427],{"class":321},[30,37726,367],{"class":317},[30,37728,37227],{"class":321},[30,37730,37731],{"class":32,"line":10102},[30,37732,34527],{"class":379},[30,37734,37735],{"class":32,"line":10107},[30,37736,34532],{"class":379},[30,37738,37739,37741,37743],{"class":32,"line":16786},[30,37740,34537],{"class":321},[30,37742,34540],{"class":74},[30,37744,30635],{"class":321},[30,37746,37747],{"class":32,"line":16792},[30,37748,34547],{"class":379},[30,37750,37751,37753,37755],{"class":32,"line":16815},[30,37752,34160],{"class":321},[30,37754,367],{"class":317},[30,37756,34556],{"class":321},[30,37758,37759],{"class":32,"line":16821},[30,37760,34561],{"class":379},[30,37762,37763],{"class":32,"line":16844},[30,37764,34566],{"class":321},[30,37766,37767],{"class":32,"line":16858},[30,37768,2582],{"emptyLinePlaceholder":245},[30,37770,37771],{"class":32,"line":16878},[30,37772,34575],{"class":379},[30,37774,37775],{"class":32,"line":16884},[30,37776,34580],{"class":379},[30,37778,37779,37781,37783,37785,37787,37789,37791],{"class":32,"line":16895},[30,37780,31375],{"class":321},[30,37782,367],{"class":317},[30,37784,31382],{"class":74},[30,37786,1887],{"class":317},[30,37788,31387],{"class":321},[30,37790,1884],{"class":317},[30,37792,34257],{"class":74},[30,37794,37795,37797,37799],{"class":32,"line":16918},[30,37796,31427],{"class":321},[30,37798,367],{"class":317},[30,37800,32427],{"class":321},[30,37802,37803],{"class":32,"line":16940},[30,37804,34609],{"class":379},[30,37806,37807],{"class":32,"line":16945},[30,37808,34614],{"class":379},[30,37810,37811,37813,37815,37817,37819,37821,37823,37825,37827,37829,37831,37833,37835,37837,37839,37841,37843,37845,37847,37849,37851,37853,37855],{"class":32,"line":16951},[30,37812,34619],{"class":321},[30,37814,367],{"class":317},[30,37816,1210],{"class":321},[30,37818,34626],{"class":74},[30,37820,698],{"class":321},[30,37822,34631],{"class":74},[30,37824,698],{"class":321},[30,37826,34636],{"class":74},[30,37828,698],{"class":321},[30,37830,34641],{"class":74},[30,37832,698],{"class":321},[30,37834,34646],{"class":74},[30,37836,698],{"class":321},[30,37838,34651],{"class":74},[30,37840,698],{"class":321},[30,37842,34656],{"class":74},[30,37844,698],{"class":321},[30,37846,34661],{"class":74},[30,37848,698],{"class":321},[30,37850,34666],{"class":74},[30,37852,698],{"class":321},[30,37854,34671],{"class":74},[30,37856,33384],{"class":321},[30,37858,37859,37861],{"class":32,"line":16965},[30,37860,34316],{"class":317},[30,37862,33022],{"class":321},[30,37864,37865],{"class":32,"line":16978},[30,37866,34684],{"class":379},[30,37868,37869,37871,37873,37875],{"class":32,"line":16983},[30,37870,3585],{"class":317},[30,37872,34691],{"class":321},[30,37874,26181],{"class":317},[30,37876,34335],{"class":321},[30,37878,37879,37881,37883],{"class":32,"line":16997},[30,37880,32748],{"class":321},[30,37882,367],{"class":317},[30,37884,32753],{"class":321},[30,37886,37887,37889,37891],{"class":32,"line":17002},[30,37888,32763],{"class":321},[30,37890,367],{"class":317},[30,37892,32768],{"class":321},[30,37894,37895],{"class":32,"line":17008},[30,37896,2582],{"emptyLinePlaceholder":245},[30,37898,37899],{"class":32,"line":17013},[30,37900,34720],{"class":379},[30,37902,37903],{"class":32,"line":17027},[30,37904,33013],{"class":321},[30,37906,37907],{"class":32,"line":17032},[30,37908,34729],{"class":379},[30,37910,37911,37913,37915],{"class":32,"line":17037},[30,37912,32798],{"class":321},[30,37914,367],{"class":317},[30,37916,32803],{"class":321},[30,37918,37919],{"class":32,"line":17051},[30,37920,34742],{"class":379},[30,37922,37923,37925,37927,37929,37931,37933,37935],{"class":32,"line":17063},[30,37924,32815],{"class":321},[30,37926,367],{"class":317},[30,37928,32820],{"class":321},[30,37930,32823],{"class":5398},[30,37932,367],{"class":317},[30,37934,537],{"class":40},[30,37936,328],{"class":321},[30,37938,37939],{"class":32,"line":17068},[30,37940,34763],{"class":379},[30,37942,37943,37945,37947],{"class":32,"line":17081},[30,37944,34768],{"class":321},[30,37946,367],{"class":317},[30,37948,34773],{"class":321},[30,37950,37951,37953,37955],{"class":32,"line":17086},[30,37952,34778],{"class":321},[30,37954,367],{"class":317},[30,37956,34783],{"class":321},[30,37958,37959,37961,37963,37965,37967,37969,37971,37973],{"class":32,"line":17091},[30,37960,34788],{"class":40},[30,37962,322],{"class":321},[30,37964,34793],{"class":74},[30,37966,34796],{"class":321},[30,37968,34799],{"class":74},[30,37970,698],{"class":321},[30,37972,34804],{"class":74},[30,37974,34807],{"class":321},[287,37976,37978],{"id":37977},"_22vgg","2.2.VGG",[22180,37980,37982],{"id":37981},"_221原理","2.2.1.原理",[157,37984,37985],{},[160,37986],{"alt":25,"src":37987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[157,37989,37990],{},[160,37991],{"alt":25,"src":37992},"\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",[157,37994,37995],{},[160,37996],{"alt":25,"src":37997},"\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",[157,37999,38000],{},"参数详细描述：",[157,38002,38003],{},[160,38004],{"alt":25,"src":38005},"\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",[157,38007,38008],{},[160,38009],{"alt":25,"src":38010},"\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",[157,38012,38013],{},[160,38014],{"alt":25,"src":38015},"\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",[157,38017,38018],{},[160,38019],{"alt":25,"src":38020},"\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",[157,38022,38023],{},[160,38024],{"alt":25,"src":38025},"\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",[22180,38027,38029],{"id":38028},"_222代码实现","2.2.2.代码实现",[271,38031,38032],{},[150,38033,38034],{},"网络搭建",[20,38036,38038],{"className":30516,"code":38037,"language":30518,"meta":25,"style":25},"import torch\nfrom sympy.core.sympify import kernS\nfrom torch import nn\nfrom torchsummary import summary\n\nclass VGG16(nn.Module):\n    def __init__(self):\n        super(VGG16, self).__init__()\n        # 按照块来进行搭建神经网络层,按照序列来写\n        # 这里用的是灰度图\n        self.block1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第二层\n        self.block2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=128,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第三层\n        self.block3=nn.Sequential(\n            nn.Conv2d(in_channels=128,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第四层\n        self.block4=nn.Sequential(\n            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第五层\n        self.block5=nn.Sequential(\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 全连接层\n        self.block6=nn.Sequential(\n            # 平展操作\n            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n            nn.Flatten(),\n            nn.Linear(7*7*512,256),\n            nn.ReLU(),\n            nn.Linear(256,128),\n            nn.ReLU(),\n            nn.Linear(128,10)\n        )\n\n        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n        # 循环遍历模型\n        for m in self.modules():\n            # print(m)\n            if isinstance(m,nn.Conv2d):\n                # 凯明初始化,初始化w,对应的激活函数是relu\n                nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n                # 判断b参数是否存在\n                if m.bias is not None:\n                    # 如果参数不存在的化初始化b=0\n                    nn.init.constant_(m.bias,0)\n            # 全连接层初始化\n            elif isinstance(m,nn.Linear):\n                # 这个初始化方法是利用的是正太分布的方式\n                # 均值为0，方差为0.01\n                nn.init.normal_(m.weight,0,0.01)\n                # 初始化b参数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.block1(x)\n        x=self.block2(x)\n        x=self.block3(x)\n        x=self.block4(x)\n        x=self.block5(x)\n        x=self.block6(x)\n        return x\n\n# 验证模型\nif __name__=='__main__':\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    print(device)\n    model=VGG16().to(device)\n    print(summary(model,(1,224,224)))\n",[27,38039,38040,38046,38058,38068,38078,38082,38099,38107,38126,38131,38136,38148,38186,38191,38227,38231,38260,38265,38270,38281,38317,38321,38357,38361,38389,38393,38398,38409,38445,38449,38485,38489,38525,38529,38557,38561,38566,38577,38614,38618,38654,38658,38694,38698,38726,38730,38735,38746,38782,38786,38822,38826,38862,38866,38894,38898,38903,38914,38919,38924,38929,38950,38954,38966,38970,38982,38986,38990,38995,39000,39015,39020,39030,39035,39050,39055,39074,39079,39088,39093,39103,39108,39113,39127,39132,39146,39154,39158,39162,39170,39181,39192,39203,39214,39225,39236,39242,39246,39251,39264,39284,39290,39299],{"__ignoreMap":25},[30,38041,38042,38044],{"class":32,"line":33},[30,38043,30530],{"class":317},[30,38045,30533],{"class":321},[30,38047,38048,38050,38053,38055],{"class":32,"line":44},[30,38049,30875],{"class":317},[30,38051,38052],{"class":321}," sympy.core.sympify ",[30,38054,30530],{"class":317},[30,38056,38057],{"class":321}," kernS\n",[30,38059,38060,38062,38064,38066],{"class":32,"line":52},[30,38061,30875],{"class":317},[30,38063,30878],{"class":321},[30,38065,30530],{"class":317},[30,38067,30883],{"class":321},[30,38069,38070,38072,38074,38076],{"class":32,"line":60},[30,38071,30875],{"class":317},[30,38073,30895],{"class":321},[30,38075,30530],{"class":317},[30,38077,30900],{"class":321},[30,38079,38080],{"class":32,"line":68},[30,38081,2582],{"emptyLinePlaceholder":245},[30,38083,38084,38086,38089,38091,38093,38095,38097],{"class":32,"line":80},[30,38085,14876],{"class":317},[30,38087,38088],{"class":36}," VGG16",[30,38090,322],{"class":321},[30,38092,30916],{"class":36},[30,38094,878],{"class":321},[30,38096,30921],{"class":36},[30,38098,30924],{"class":321},[30,38100,38101,38103,38105],{"class":32,"line":88},[30,38102,30939],{"class":317},[30,38104,30942],{"class":40},[30,38106,30945],{"class":321},[30,38108,38109,38111,38113,38116,38118,38120,38122,38124],{"class":32,"line":96},[30,38110,30955],{"class":40},[30,38112,322],{"class":321},[30,38114,38115],{"class":40},"VGG16",[30,38117,12617],{"class":321},[30,38119,30961],{"class":40},[30,38121,30964],{"class":321},[30,38123,30967],{"class":40},[30,38125,2158],{"class":321},[30,38127,38128],{"class":32,"line":104},[30,38129,38130],{"class":379},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[30,38132,38133],{"class":32,"line":112},[30,38134,38135],{"class":379},"        # 这里用的是灰度图\n",[30,38137,38138,38140,38143,38145],{"class":32,"line":123},[30,38139,30983],{"class":40},[30,38141,38142],{"class":321},".block1",[30,38144,367],{"class":317},[30,38146,38147],{"class":321},"nn.Sequential(\n",[30,38149,38150,38153,38155,38157,38159,38161,38163,38165,38167,38169,38171,38173,38175,38177,38179,38181,38183],{"class":32,"line":131},[30,38151,38152],{"class":321},"            nn.Conv2d(",[30,38154,30994],{"class":5398},[30,38156,367],{"class":317},[30,38158,537],{"class":40},[30,38160,698],{"class":321},[30,38162,31003],{"class":5398},[30,38164,367],{"class":317},[30,38166,523],{"class":40},[30,38168,698],{"class":321},[30,38170,31012],{"class":5398},[30,38172,367],{"class":317},[30,38174,392],{"class":40},[30,38176,698],{"class":321},[30,38178,31021],{"class":5398},[30,38180,367],{"class":317},[30,38182,537],{"class":40},[30,38184,38185],{"class":321},"),\n",[30,38187,38188],{"class":32,"line":142},[30,38189,38190],{"class":321},"            nn.ReLU(),\n",[30,38192,38193,38195,38197,38199,38201,38203,38205,38207,38209,38211,38213,38215,38217,38219,38221,38223,38225],{"class":32,"line":1811},[30,38194,38152],{"class":321},[30,38196,30994],{"class":5398},[30,38198,367],{"class":317},[30,38200,523],{"class":40},[30,38202,698],{"class":321},[30,38204,31003],{"class":5398},[30,38206,367],{"class":317},[30,38208,523],{"class":40},[30,38210,698],{"class":321},[30,38212,31012],{"class":5398},[30,38214,367],{"class":317},[30,38216,392],{"class":40},[30,38218,698],{"class":321},[30,38220,31021],{"class":5398},[30,38222,367],{"class":317},[30,38224,537],{"class":40},[30,38226,38185],{"class":321},[30,38228,38229],{"class":32,"line":1825},[30,38230,38190],{"class":321},[30,38232,38233,38236,38238,38240,38242,38244,38246,38248,38250,38252,38254,38256,38258],{"class":32,"line":1830},[30,38234,38235],{"class":321},"            nn.MaxPool2d(",[30,38237,31012],{"class":5398},[30,38239,367],{"class":317},[30,38241,398],{"class":40},[30,38243,698],{"class":321},[30,38245,31067],{"class":5398},[30,38247,367],{"class":317},[30,38249,398],{"class":40},[30,38251,698],{"class":321},[30,38253,31021],{"class":5398},[30,38255,367],{"class":317},[30,38257,511],{"class":40},[30,38259,328],{"class":321},[30,38261,38262],{"class":32,"line":1836},[30,38263,38264],{"class":321},"        )\n",[30,38266,38267],{"class":32,"line":1857},[30,38268,38269],{"class":379},"        # 第二层\n",[30,38271,38272,38274,38277,38279],{"class":32,"line":1862},[30,38273,30983],{"class":40},[30,38275,38276],{"class":321},".block2",[30,38278,367],{"class":317},[30,38280,38147],{"class":321},[30,38282,38283,38285,38287,38289,38291,38293,38295,38297,38299,38301,38303,38305,38307,38309,38311,38313,38315],{"class":32,"line":1876},[30,38284,38152],{"class":321},[30,38286,30994],{"class":5398},[30,38288,367],{"class":317},[30,38290,523],{"class":40},[30,38292,698],{"class":321},[30,38294,31003],{"class":5398},[30,38296,367],{"class":317},[30,38298,32208],{"class":40},[30,38300,698],{"class":321},[30,38302,31012],{"class":5398},[30,38304,367],{"class":317},[30,38306,392],{"class":40},[30,38308,698],{"class":321},[30,38310,31021],{"class":5398},[30,38312,367],{"class":317},[30,38314,537],{"class":40},[30,38316,38185],{"class":321},[30,38318,38319],{"class":32,"line":1881},[30,38320,38190],{"class":321},[30,38322,38323,38325,38327,38329,38331,38333,38335,38337,38339,38341,38343,38345,38347,38349,38351,38353,38355],{"class":32,"line":1910},[30,38324,38152],{"class":321},[30,38326,30994],{"class":5398},[30,38328,367],{"class":317},[30,38330,32208],{"class":40},[30,38332,698],{"class":321},[30,38334,31003],{"class":5398},[30,38336,367],{"class":317},[30,38338,32208],{"class":40},[30,38340,698],{"class":321},[30,38342,31012],{"class":5398},[30,38344,367],{"class":317},[30,38346,392],{"class":40},[30,38348,698],{"class":321},[30,38350,31021],{"class":5398},[30,38352,367],{"class":317},[30,38354,537],{"class":40},[30,38356,38185],{"class":321},[30,38358,38359],{"class":32,"line":1915},[30,38360,38190],{"class":321},[30,38362,38363,38365,38367,38369,38371,38373,38375,38377,38379,38381,38383,38385,38387],{"class":32,"line":1932},[30,38364,38235],{"class":321},[30,38366,31012],{"class":5398},[30,38368,367],{"class":317},[30,38370,398],{"class":40},[30,38372,698],{"class":321},[30,38374,31067],{"class":5398},[30,38376,367],{"class":317},[30,38378,398],{"class":40},[30,38380,698],{"class":321},[30,38382,31021],{"class":5398},[30,38384,367],{"class":317},[30,38386,511],{"class":40},[30,38388,328],{"class":321},[30,38390,38391],{"class":32,"line":1937},[30,38392,38264],{"class":321},[30,38394,38395],{"class":32,"line":1942},[30,38396,38397],{"class":379},"        # 第三层\n",[30,38399,38400,38402,38405,38407],{"class":32,"line":1947},[30,38401,30983],{"class":40},[30,38403,38404],{"class":321},".block3",[30,38406,367],{"class":317},[30,38408,38147],{"class":321},[30,38410,38411,38413,38415,38417,38419,38421,38423,38425,38427,38429,38431,38433,38435,38437,38439,38441,38443],{"class":32,"line":1961},[30,38412,38152],{"class":321},[30,38414,30994],{"class":5398},[30,38416,367],{"class":317},[30,38418,32208],{"class":40},[30,38420,698],{"class":321},[30,38422,31003],{"class":5398},[30,38424,367],{"class":317},[30,38426,35008],{"class":40},[30,38428,698],{"class":321},[30,38430,31012],{"class":5398},[30,38432,367],{"class":317},[30,38434,392],{"class":40},[30,38436,698],{"class":321},[30,38438,31021],{"class":5398},[30,38440,367],{"class":317},[30,38442,537],{"class":40},[30,38444,38185],{"class":321},[30,38446,38447],{"class":32,"line":1966},[30,38448,38190],{"class":321},[30,38450,38451,38453,38455,38457,38459,38461,38463,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483],{"class":32,"line":2759},[30,38452,38152],{"class":321},[30,38454,30994],{"class":5398},[30,38456,367],{"class":317},[30,38458,35008],{"class":40},[30,38460,698],{"class":321},[30,38462,31003],{"class":5398},[30,38464,367],{"class":317},[30,38466,35008],{"class":40},[30,38468,698],{"class":321},[30,38470,31012],{"class":5398},[30,38472,367],{"class":317},[30,38474,392],{"class":40},[30,38476,698],{"class":321},[30,38478,31021],{"class":5398},[30,38480,367],{"class":317},[30,38482,537],{"class":40},[30,38484,38185],{"class":321},[30,38486,38487],{"class":32,"line":2773},[30,38488,38190],{"class":321},[30,38490,38491,38493,38495,38497,38499,38501,38503,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523],{"class":32,"line":2781},[30,38492,38152],{"class":321},[30,38494,30994],{"class":5398},[30,38496,367],{"class":317},[30,38498,35008],{"class":40},[30,38500,698],{"class":321},[30,38502,31003],{"class":5398},[30,38504,367],{"class":317},[30,38506,35008],{"class":40},[30,38508,698],{"class":321},[30,38510,31012],{"class":5398},[30,38512,367],{"class":317},[30,38514,392],{"class":40},[30,38516,698],{"class":321},[30,38518,31021],{"class":5398},[30,38520,367],{"class":317},[30,38522,537],{"class":40},[30,38524,38185],{"class":321},[30,38526,38527],{"class":32,"line":2786},[30,38528,38190],{"class":321},[30,38530,38531,38533,38535,38537,38539,38541,38543,38545,38547,38549,38551,38553,38555],{"class":32,"line":2792},[30,38532,38235],{"class":321},[30,38534,31012],{"class":5398},[30,38536,367],{"class":317},[30,38538,398],{"class":40},[30,38540,698],{"class":321},[30,38542,31067],{"class":5398},[30,38544,367],{"class":317},[30,38546,398],{"class":40},[30,38548,698],{"class":321},[30,38550,31021],{"class":5398},[30,38552,367],{"class":317},[30,38554,511],{"class":40},[30,38556,328],{"class":321},[30,38558,38559],{"class":32,"line":2798},[30,38560,38264],{"class":321},[30,38562,38563],{"class":32,"line":2803},[30,38564,38565],{"class":379},"        # 第四层\n",[30,38567,38568,38570,38573,38575],{"class":32,"line":8130},[30,38569,30983],{"class":40},[30,38571,38572],{"class":321},".block4",[30,38574,367],{"class":317},[30,38576,38147],{"class":321},[30,38578,38579,38581,38583,38585,38587,38589,38591,38593,38596,38598,38600,38602,38604,38606,38608,38610,38612],{"class":32,"line":8154},[30,38580,38152],{"class":321},[30,38582,30994],{"class":5398},[30,38584,367],{"class":317},[30,38586,35008],{"class":40},[30,38588,698],{"class":321},[30,38590,31003],{"class":5398},[30,38592,367],{"class":317},[30,38594,38595],{"class":40},"512",[30,38597,698],{"class":321},[30,38599,31012],{"class":5398},[30,38601,367],{"class":317},[30,38603,392],{"class":40},[30,38605,698],{"class":321},[30,38607,31021],{"class":5398},[30,38609,367],{"class":317},[30,38611,537],{"class":40},[30,38613,38185],{"class":321},[30,38615,38616],{"class":32,"line":8159},[30,38617,38190],{"class":321},[30,38619,38620,38622,38624,38626,38628,38630,38632,38634,38636,38638,38640,38642,38644,38646,38648,38650,38652],{"class":32,"line":8165},[30,38621,38152],{"class":321},[30,38623,30994],{"class":5398},[30,38625,367],{"class":317},[30,38627,38595],{"class":40},[30,38629,698],{"class":321},[30,38631,31003],{"class":5398},[30,38633,367],{"class":317},[30,38635,38595],{"class":40},[30,38637,698],{"class":321},[30,38639,31012],{"class":5398},[30,38641,367],{"class":317},[30,38643,392],{"class":40},[30,38645,698],{"class":321},[30,38647,31021],{"class":5398},[30,38649,367],{"class":317},[30,38651,537],{"class":40},[30,38653,38185],{"class":321},[30,38655,38656],{"class":32,"line":8192},[30,38657,38190],{"class":321},[30,38659,38660,38662,38664,38666,38668,38670,38672,38674,38676,38678,38680,38682,38684,38686,38688,38690,38692],{"class":32,"line":8197},[30,38661,38152],{"class":321},[30,38663,30994],{"class":5398},[30,38665,367],{"class":317},[30,38667,38595],{"class":40},[30,38669,698],{"class":321},[30,38671,31003],{"class":5398},[30,38673,367],{"class":317},[30,38675,38595],{"class":40},[30,38677,698],{"class":321},[30,38679,31012],{"class":5398},[30,38681,367],{"class":317},[30,38683,392],{"class":40},[30,38685,698],{"class":321},[30,38687,31021],{"class":5398},[30,38689,367],{"class":317},[30,38691,537],{"class":40},[30,38693,38185],{"class":321},[30,38695,38696],{"class":32,"line":8203},[30,38697,38190],{"class":321},[30,38699,38700,38702,38704,38706,38708,38710,38712,38714,38716,38718,38720,38722,38724],{"class":32,"line":8215},[30,38701,38235],{"class":321},[30,38703,31012],{"class":5398},[30,38705,367],{"class":317},[30,38707,398],{"class":40},[30,38709,698],{"class":321},[30,38711,31067],{"class":5398},[30,38713,367],{"class":317},[30,38715,398],{"class":40},[30,38717,698],{"class":321},[30,38719,31021],{"class":5398},[30,38721,367],{"class":317},[30,38723,511],{"class":40},[30,38725,328],{"class":321},[30,38727,38728],{"class":32,"line":8227},[30,38729,38264],{"class":321},[30,38731,38732],{"class":32,"line":8239},[30,38733,38734],{"class":379},"        # 第五层\n",[30,38736,38737,38739,38742,38744],{"class":32,"line":9898},[30,38738,30983],{"class":40},[30,38740,38741],{"class":321},".block5",[30,38743,367],{"class":317},[30,38745,38147],{"class":321},[30,38747,38748,38750,38752,38754,38756,38758,38760,38762,38764,38766,38768,38770,38772,38774,38776,38778,38780],{"class":32,"line":9923},[30,38749,38152],{"class":321},[30,38751,30994],{"class":5398},[30,38753,367],{"class":317},[30,38755,38595],{"class":40},[30,38757,698],{"class":321},[30,38759,31003],{"class":5398},[30,38761,367],{"class":317},[30,38763,38595],{"class":40},[30,38765,698],{"class":321},[30,38767,31012],{"class":5398},[30,38769,367],{"class":317},[30,38771,392],{"class":40},[30,38773,698],{"class":321},[30,38775,31021],{"class":5398},[30,38777,367],{"class":317},[30,38779,537],{"class":40},[30,38781,38185],{"class":321},[30,38783,38784],{"class":32,"line":9946},[30,38785,38190],{"class":321},[30,38787,38788,38790,38792,38794,38796,38798,38800,38802,38804,38806,38808,38810,38812,38814,38816,38818,38820],{"class":32,"line":9970},[30,38789,38152],{"class":321},[30,38791,30994],{"class":5398},[30,38793,367],{"class":317},[30,38795,38595],{"class":40},[30,38797,698],{"class":321},[30,38799,31003],{"class":5398},[30,38801,367],{"class":317},[30,38803,38595],{"class":40},[30,38805,698],{"class":321},[30,38807,31012],{"class":5398},[30,38809,367],{"class":317},[30,38811,392],{"class":40},[30,38813,698],{"class":321},[30,38815,31021],{"class":5398},[30,38817,367],{"class":317},[30,38819,537],{"class":40},[30,38821,38185],{"class":321},[30,38823,38824],{"class":32,"line":9975},[30,38825,38190],{"class":321},[30,38827,38828,38830,38832,38834,38836,38838,38840,38842,38844,38846,38848,38850,38852,38854,38856,38858,38860],{"class":32,"line":9980},[30,38829,38152],{"class":321},[30,38831,30994],{"class":5398},[30,38833,367],{"class":317},[30,38835,38595],{"class":40},[30,38837,698],{"class":321},[30,38839,31003],{"class":5398},[30,38841,367],{"class":317},[30,38843,38595],{"class":40},[30,38845,698],{"class":321},[30,38847,31012],{"class":5398},[30,38849,367],{"class":317},[30,38851,392],{"class":40},[30,38853,698],{"class":321},[30,38855,31021],{"class":5398},[30,38857,367],{"class":317},[30,38859,537],{"class":40},[30,38861,38185],{"class":321},[30,38863,38864],{"class":32,"line":9985},[30,38865,38190],{"class":321},[30,38867,38868,38870,38872,38874,38876,38878,38880,38882,38884,38886,38888,38890,38892],{"class":32,"line":9994},[30,38869,38235],{"class":321},[30,38871,31012],{"class":5398},[30,38873,367],{"class":317},[30,38875,398],{"class":40},[30,38877,698],{"class":321},[30,38879,31067],{"class":5398},[30,38881,367],{"class":317},[30,38883,398],{"class":40},[30,38885,698],{"class":321},[30,38887,31021],{"class":5398},[30,38889,367],{"class":317},[30,38891,511],{"class":40},[30,38893,328],{"class":321},[30,38895,38896],{"class":32,"line":9999},[30,38897,38264],{"class":321},[30,38899,38900],{"class":32,"line":10005},[30,38901,38902],{"class":379},"        # 全连接层\n",[30,38904,38905,38907,38910,38912],{"class":32,"line":10026},[30,38906,30983],{"class":40},[30,38908,38909],{"class":321},".block6",[30,38911,367],{"class":317},[30,38913,38147],{"class":321},[30,38915,38916],{"class":32,"line":10032},[30,38917,38918],{"class":379},"            # 平展操作\n",[30,38920,38921],{"class":32,"line":10046},[30,38922,38923],{"class":379},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[30,38925,38926],{"class":32,"line":10052},[30,38927,38928],{"class":321},"            nn.Flatten(),\n",[30,38930,38931,38934,38936,38938,38940,38942,38944,38946,38948],{"class":32,"line":10079},[30,38932,38933],{"class":321},"            nn.Linear(",[30,38935,689],{"class":40},[30,38937,775],{"class":317},[30,38939,689],{"class":40},[30,38941,775],{"class":317},[30,38943,38595],{"class":40},[30,38945,698],{"class":321},[30,38947,35008],{"class":40},[30,38949,38185],{"class":321},[30,38951,38952],{"class":32,"line":10088},[30,38953,38190],{"class":321},[30,38955,38956,38958,38960,38962,38964],{"class":32,"line":10094},[30,38957,38933],{"class":321},[30,38959,35008],{"class":40},[30,38961,698],{"class":321},[30,38963,32208],{"class":40},[30,38965,38185],{"class":321},[30,38967,38968],{"class":32,"line":10102},[30,38969,38190],{"class":321},[30,38971,38972,38974,38976,38978,38980],{"class":32,"line":10107},[30,38973,38933],{"class":321},[30,38975,32208],{"class":40},[30,38977,698],{"class":321},[30,38979,766],{"class":40},[30,38981,328],{"class":321},[30,38983,38984],{"class":32,"line":16786},[30,38985,38264],{"class":321},[30,38987,38988],{"class":32,"line":16792},[30,38989,2582],{"emptyLinePlaceholder":245},[30,38991,38992],{"class":32,"line":16815},[30,38993,38994],{"class":379},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[30,38996,38997],{"class":32,"line":16821},[30,38998,38999],{"class":379},"        # 循环遍历模型\n",[30,39001,39002,39004,39007,39009,39012],{"class":32,"line":16844},[30,39003,3585],{"class":317},[30,39005,39006],{"class":321}," m ",[30,39008,26181],{"class":317},[30,39010,39011],{"class":40}," self",[30,39013,39014],{"class":321},".modules():\n",[30,39016,39017],{"class":32,"line":16858},[30,39018,39019],{"class":379},"            # print(m)\n",[30,39021,39022,39024,39027],{"class":32,"line":16878},[30,39023,4824],{"class":317},[30,39025,39026],{"class":40}," isinstance",[30,39028,39029],{"class":321},"(m,nn.Conv2d):\n",[30,39031,39032],{"class":32,"line":16884},[30,39033,39034],{"class":379},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[30,39036,39037,39040,39043,39045,39048],{"class":32,"line":16895},[30,39038,39039],{"class":321},"                nn.init.kaiming_normal_(m.weight,",[30,39041,39042],{"class":5398},"nonlinearity",[30,39044,367],{"class":317},[30,39046,39047],{"class":74},"'relu'",[30,39049,328],{"class":321},[30,39051,39052],{"class":32,"line":16918},[30,39053,39054],{"class":379},"                # 判断b参数是否存在\n",[30,39056,39057,39060,39063,39066,39069,39072],{"class":32,"line":16940},[30,39058,39059],{"class":317},"                if",[30,39061,39062],{"class":321}," m.bias ",[30,39064,39065],{"class":317},"is",[30,39067,39068],{"class":317}," not",[30,39070,39071],{"class":40}," None",[30,39073,3921],{"class":321},[30,39075,39076],{"class":32,"line":16945},[30,39077,39078],{"class":379},"                    # 如果参数不存在的化初始化b=0\n",[30,39080,39081,39084,39086],{"class":32,"line":16951},[30,39082,39083],{"class":321},"                    nn.init.constant_(m.bias,",[30,39085,511],{"class":40},[30,39087,328],{"class":321},[30,39089,39090],{"class":32,"line":16965},[30,39091,39092],{"class":379},"            # 全连接层初始化\n",[30,39094,39095,39098,39100],{"class":32,"line":16978},[30,39096,39097],{"class":317},"            elif",[30,39099,39026],{"class":40},[30,39101,39102],{"class":321},"(m,nn.Linear):\n",[30,39104,39105],{"class":32,"line":16983},[30,39106,39107],{"class":379},"                # 这个初始化方法是利用的是正太分布的方式\n",[30,39109,39110],{"class":32,"line":16997},[30,39111,39112],{"class":379},"                # 均值为0，方差为0.01\n",[30,39114,39115,39118,39120,39122,39125],{"class":32,"line":17002},[30,39116,39117],{"class":321},"                nn.init.normal_(m.weight,",[30,39119,511],{"class":40},[30,39121,698],{"class":321},[30,39123,39124],{"class":40},"0.01",[30,39126,328],{"class":321},[30,39128,39129],{"class":32,"line":17008},[30,39130,39131],{"class":379},"                # 初始化b参数\n",[30,39133,39134,39136,39138,39140,39142,39144],{"class":32,"line":17013},[30,39135,39059],{"class":317},[30,39137,39062],{"class":321},[30,39139,39065],{"class":317},[30,39141,39068],{"class":317},[30,39143,39071],{"class":40},[30,39145,3921],{"class":321},[30,39147,39148,39150,39152],{"class":32,"line":17027},[30,39149,39083],{"class":321},[30,39151,511],{"class":40},[30,39153,328],{"class":321},[30,39155,39156],{"class":32,"line":17032},[30,39157,2582],{"emptyLinePlaceholder":245},[30,39159,39160],{"class":32,"line":17037},[30,39161,35303],{"class":379},[30,39163,39164,39166,39168],{"class":32,"line":17051},[30,39165,30939],{"class":317},[30,39167,31231],{"class":36},[30,39169,31234],{"class":321},[30,39171,39172,39174,39176,39178],{"class":32,"line":17063},[30,39173,31239],{"class":321},[30,39175,367],{"class":317},[30,39177,30961],{"class":40},[30,39179,39180],{"class":321},".block1(x)\n",[30,39182,39183,39185,39187,39189],{"class":32,"line":17068},[30,39184,31239],{"class":321},[30,39186,367],{"class":317},[30,39188,30961],{"class":40},[30,39190,39191],{"class":321},".block2(x)\n",[30,39193,39194,39196,39198,39200],{"class":32,"line":17081},[30,39195,31239],{"class":321},[30,39197,367],{"class":317},[30,39199,30961],{"class":40},[30,39201,39202],{"class":321},".block3(x)\n",[30,39204,39205,39207,39209,39211],{"class":32,"line":17086},[30,39206,31239],{"class":321},[30,39208,367],{"class":317},[30,39210,30961],{"class":40},[30,39212,39213],{"class":321},".block4(x)\n",[30,39215,39216,39218,39220,39222],{"class":32,"line":17091},[30,39217,31239],{"class":321},[30,39219,367],{"class":317},[30,39221,30961],{"class":40},[30,39223,39224],{"class":321},".block5(x)\n",[30,39226,39227,39229,39231,39233],{"class":32,"line":17096},[30,39228,31239],{"class":321},[30,39230,367],{"class":317},[30,39232,30961],{"class":40},[30,39234,39235],{"class":321},".block6(x)\n",[30,39237,39238,39240],{"class":32,"line":17109},[30,39239,14934],{"class":317},[30,39241,31347],{"class":321},[30,39243,39244],{"class":32,"line":17114},[30,39245,2582],{"emptyLinePlaceholder":245},[30,39247,39248],{"class":32,"line":32771},[30,39249,39250],{"class":379},"# 验证模型\n",[30,39252,39253,39255,39257,39259,39262],{"class":32,"line":32777},[30,39254,1717],{"class":317},[30,39256,31358],{"class":40},[30,39258,3131],{"class":317},[30,39260,39261],{"class":74},"'__main__'",[30,39263,3921],{"class":321},[30,39265,39266,39268,39270,39272,39274,39276,39278,39280,39282],{"class":32,"line":32783},[30,39267,31375],{"class":321},[30,39269,367],{"class":317},[30,39271,30589],{"class":321},[30,39273,31382],{"class":74},[30,39275,1887],{"class":317},[30,39277,31387],{"class":321},[30,39279,1884],{"class":317},[30,39281,30614],{"class":74},[30,39283,328],{"class":321},[30,39285,39286,39288],{"class":32,"line":32789},[30,39287,31437],{"class":40},[30,39289,30623],{"class":321},[30,39291,39292,39294,39296],{"class":32,"line":32795},[30,39293,31427],{"class":321},[30,39295,367],{"class":317},[30,39297,39298],{"class":321},"VGG16().to(device)\n",[30,39300,39301,39303,39305,39307,39309,39311,39313,39315],{"class":32,"line":32806},[30,39302,31437],{"class":40},[30,39304,31440],{"class":321},[30,39306,537],{"class":40},[30,39308,698],{"class":321},[30,39310,31639],{"class":40},[30,39312,698],{"class":321},[30,39314,31639],{"class":40},[30,39316,31453],{"class":321},[271,39318,39319],{"start":44},[150,39320,39321],{},"训练代码",[157,39323,39324],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[157,39326,39327],{},"解决方式:",[157,39329,39330],{},"①权重初始化",[20,39332,39334],{"className":30516,"code":39333,"language":30518,"meta":25,"style":25},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n# 循环遍历模型\nfor m in self.modules():\n    # print(m)\n    if isinstance(m,nn.Conv2d):\n        # 凯明初始化,初始化w,对应的激活函数是relu\n        nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n        # 判断b参数是否存在\n        if m.bias is not None:\n            # 如果参数不存在的化初始化b=0\n            nn.init.constant_(m.bias,0)\n    # 全连接层初始化\n    elif isinstance(m,nn.Linear):\n        # 这个初始化方法是利用的是正太分布的方式\n        # 均值为0，方差为0.01\n        nn.init.normal_(m.weight,0,0.01)\n        # 初始化b参数\n        if m.bias is not None:\n            nn.init.constant_(m.bias,0)\n",[27,39335,39336,39341,39346,39358,39363,39371,39376,39389,39394,39408,39413,39422,39427,39436,39441,39446,39459,39464,39478],{"__ignoreMap":25},[30,39337,39338],{"class":32,"line":33},[30,39339,39340],{"class":379},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[30,39342,39343],{"class":32,"line":44},[30,39344,39345],{"class":379},"# 循环遍历模型\n",[30,39347,39348,39350,39352,39354,39356],{"class":32,"line":52},[30,39349,3207],{"class":317},[30,39351,39006],{"class":321},[30,39353,26181],{"class":317},[30,39355,39011],{"class":40},[30,39357,39014],{"class":321},[30,39359,39360],{"class":32,"line":60},[30,39361,39362],{"class":379},"    # print(m)\n",[30,39364,39365,39367,39369],{"class":32,"line":68},[30,39366,3283],{"class":317},[30,39368,39026],{"class":40},[30,39370,39029],{"class":321},[30,39372,39373],{"class":32,"line":80},[30,39374,39375],{"class":379},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[30,39377,39378,39381,39383,39385,39387],{"class":32,"line":88},[30,39379,39380],{"class":321},"        nn.init.kaiming_normal_(m.weight,",[30,39382,39042],{"class":5398},[30,39384,367],{"class":317},[30,39386,39047],{"class":74},[30,39388,328],{"class":321},[30,39390,39391],{"class":32,"line":96},[30,39392,39393],{"class":379},"        # 判断b参数是否存在\n",[30,39395,39396,39398,39400,39402,39404,39406],{"class":32,"line":104},[30,39397,2679],{"class":317},[30,39399,39062],{"class":321},[30,39401,39065],{"class":317},[30,39403,39068],{"class":317},[30,39405,39071],{"class":40},[30,39407,3921],{"class":321},[30,39409,39410],{"class":32,"line":112},[30,39411,39412],{"class":379},"            # 如果参数不存在的化初始化b=0\n",[30,39414,39415,39418,39420],{"class":32,"line":123},[30,39416,39417],{"class":321},"            nn.init.constant_(m.bias,",[30,39419,511],{"class":40},[30,39421,328],{"class":321},[30,39423,39424],{"class":32,"line":131},[30,39425,39426],{"class":379},"    # 全连接层初始化\n",[30,39428,39429,39432,39434],{"class":32,"line":142},[30,39430,39431],{"class":317},"    elif",[30,39433,39026],{"class":40},[30,39435,39102],{"class":321},[30,39437,39438],{"class":32,"line":1811},[30,39439,39440],{"class":379},"        # 这个初始化方法是利用的是正太分布的方式\n",[30,39442,39443],{"class":32,"line":1825},[30,39444,39445],{"class":379},"        # 均值为0，方差为0.01\n",[30,39447,39448,39451,39453,39455,39457],{"class":32,"line":1830},[30,39449,39450],{"class":321},"        nn.init.normal_(m.weight,",[30,39452,511],{"class":40},[30,39454,698],{"class":321},[30,39456,39124],{"class":40},[30,39458,328],{"class":321},[30,39460,39461],{"class":32,"line":1836},[30,39462,39463],{"class":379},"        # 初始化b参数\n",[30,39465,39466,39468,39470,39472,39474,39476],{"class":32,"line":1857},[30,39467,2679],{"class":317},[30,39469,39062],{"class":321},[30,39471,39065],{"class":317},[30,39473,39068],{"class":317},[30,39475,39071],{"class":40},[30,39477,3921],{"class":321},[30,39479,39480,39482,39484],{"class":32,"line":1862},[30,39481,39417],{"class":321},[30,39483,511],{"class":40},[30,39485,328],{"class":321},[157,39487,39488],{},"②尽可能地增加批次",[157,39490,39491],{},"训练完整代码：",[20,39493,39494],{"className":30516,"code":38037,"language":30518,"meta":25,"style":25},[27,39495,39496,39502,39512,39522,39532,39536,39552,39560,39578,39582,39586,39596,39632,39636,39672,39676,39704,39708,39712,39722,39758,39762,39798,39802,39830,39834,39838,39848,39884,39888,39924,39928,39964,39968,39996,40000,40004,40014,40050,40054,40090,40094,40130,40134,40162,40166,40170,40180,40216,40220,40256,40260,40296,40300,40328,40332,40336,40346,40350,40354,40358,40378,40382,40394,40398,40410,40414,40418,40422,40426,40438,40442,40450,40454,40466,40470,40484,40488,40496,40500,40508,40512,40516,40528,40532,40546,40554,40558,40562,40570,40580,40590,40600,40610,40620,40630,40636,40640,40644,40656,40676,40682,40690],{"__ignoreMap":25},[30,39497,39498,39500],{"class":32,"line":33},[30,39499,30530],{"class":317},[30,39501,30533],{"class":321},[30,39503,39504,39506,39508,39510],{"class":32,"line":44},[30,39505,30875],{"class":317},[30,39507,38052],{"class":321},[30,39509,30530],{"class":317},[30,39511,38057],{"class":321},[30,39513,39514,39516,39518,39520],{"class":32,"line":52},[30,39515,30875],{"class":317},[30,39517,30878],{"class":321},[30,39519,30530],{"class":317},[30,39521,30883],{"class":321},[30,39523,39524,39526,39528,39530],{"class":32,"line":60},[30,39525,30875],{"class":317},[30,39527,30895],{"class":321},[30,39529,30530],{"class":317},[30,39531,30900],{"class":321},[30,39533,39534],{"class":32,"line":68},[30,39535,2582],{"emptyLinePlaceholder":245},[30,39537,39538,39540,39542,39544,39546,39548,39550],{"class":32,"line":80},[30,39539,14876],{"class":317},[30,39541,38088],{"class":36},[30,39543,322],{"class":321},[30,39545,30916],{"class":36},[30,39547,878],{"class":321},[30,39549,30921],{"class":36},[30,39551,30924],{"class":321},[30,39553,39554,39556,39558],{"class":32,"line":88},[30,39555,30939],{"class":317},[30,39557,30942],{"class":40},[30,39559,30945],{"class":321},[30,39561,39562,39564,39566,39568,39570,39572,39574,39576],{"class":32,"line":96},[30,39563,30955],{"class":40},[30,39565,322],{"class":321},[30,39567,38115],{"class":40},[30,39569,12617],{"class":321},[30,39571,30961],{"class":40},[30,39573,30964],{"class":321},[30,39575,30967],{"class":40},[30,39577,2158],{"class":321},[30,39579,39580],{"class":32,"line":104},[30,39581,38130],{"class":379},[30,39583,39584],{"class":32,"line":112},[30,39585,38135],{"class":379},[30,39587,39588,39590,39592,39594],{"class":32,"line":123},[30,39589,30983],{"class":40},[30,39591,38142],{"class":321},[30,39593,367],{"class":317},[30,39595,38147],{"class":321},[30,39597,39598,39600,39602,39604,39606,39608,39610,39612,39614,39616,39618,39620,39622,39624,39626,39628,39630],{"class":32,"line":131},[30,39599,38152],{"class":321},[30,39601,30994],{"class":5398},[30,39603,367],{"class":317},[30,39605,537],{"class":40},[30,39607,698],{"class":321},[30,39609,31003],{"class":5398},[30,39611,367],{"class":317},[30,39613,523],{"class":40},[30,39615,698],{"class":321},[30,39617,31012],{"class":5398},[30,39619,367],{"class":317},[30,39621,392],{"class":40},[30,39623,698],{"class":321},[30,39625,31021],{"class":5398},[30,39627,367],{"class":317},[30,39629,537],{"class":40},[30,39631,38185],{"class":321},[30,39633,39634],{"class":32,"line":142},[30,39635,38190],{"class":321},[30,39637,39638,39640,39642,39644,39646,39648,39650,39652,39654,39656,39658,39660,39662,39664,39666,39668,39670],{"class":32,"line":1811},[30,39639,38152],{"class":321},[30,39641,30994],{"class":5398},[30,39643,367],{"class":317},[30,39645,523],{"class":40},[30,39647,698],{"class":321},[30,39649,31003],{"class":5398},[30,39651,367],{"class":317},[30,39653,523],{"class":40},[30,39655,698],{"class":321},[30,39657,31012],{"class":5398},[30,39659,367],{"class":317},[30,39661,392],{"class":40},[30,39663,698],{"class":321},[30,39665,31021],{"class":5398},[30,39667,367],{"class":317},[30,39669,537],{"class":40},[30,39671,38185],{"class":321},[30,39673,39674],{"class":32,"line":1825},[30,39675,38190],{"class":321},[30,39677,39678,39680,39682,39684,39686,39688,39690,39692,39694,39696,39698,39700,39702],{"class":32,"line":1830},[30,39679,38235],{"class":321},[30,39681,31012],{"class":5398},[30,39683,367],{"class":317},[30,39685,398],{"class":40},[30,39687,698],{"class":321},[30,39689,31067],{"class":5398},[30,39691,367],{"class":317},[30,39693,398],{"class":40},[30,39695,698],{"class":321},[30,39697,31021],{"class":5398},[30,39699,367],{"class":317},[30,39701,511],{"class":40},[30,39703,328],{"class":321},[30,39705,39706],{"class":32,"line":1836},[30,39707,38264],{"class":321},[30,39709,39710],{"class":32,"line":1857},[30,39711,38269],{"class":379},[30,39713,39714,39716,39718,39720],{"class":32,"line":1862},[30,39715,30983],{"class":40},[30,39717,38276],{"class":321},[30,39719,367],{"class":317},[30,39721,38147],{"class":321},[30,39723,39724,39726,39728,39730,39732,39734,39736,39738,39740,39742,39744,39746,39748,39750,39752,39754,39756],{"class":32,"line":1876},[30,39725,38152],{"class":321},[30,39727,30994],{"class":5398},[30,39729,367],{"class":317},[30,39731,523],{"class":40},[30,39733,698],{"class":321},[30,39735,31003],{"class":5398},[30,39737,367],{"class":317},[30,39739,32208],{"class":40},[30,39741,698],{"class":321},[30,39743,31012],{"class":5398},[30,39745,367],{"class":317},[30,39747,392],{"class":40},[30,39749,698],{"class":321},[30,39751,31021],{"class":5398},[30,39753,367],{"class":317},[30,39755,537],{"class":40},[30,39757,38185],{"class":321},[30,39759,39760],{"class":32,"line":1881},[30,39761,38190],{"class":321},[30,39763,39764,39766,39768,39770,39772,39774,39776,39778,39780,39782,39784,39786,39788,39790,39792,39794,39796],{"class":32,"line":1910},[30,39765,38152],{"class":321},[30,39767,30994],{"class":5398},[30,39769,367],{"class":317},[30,39771,32208],{"class":40},[30,39773,698],{"class":321},[30,39775,31003],{"class":5398},[30,39777,367],{"class":317},[30,39779,32208],{"class":40},[30,39781,698],{"class":321},[30,39783,31012],{"class":5398},[30,39785,367],{"class":317},[30,39787,392],{"class":40},[30,39789,698],{"class":321},[30,39791,31021],{"class":5398},[30,39793,367],{"class":317},[30,39795,537],{"class":40},[30,39797,38185],{"class":321},[30,39799,39800],{"class":32,"line":1915},[30,39801,38190],{"class":321},[30,39803,39804,39806,39808,39810,39812,39814,39816,39818,39820,39822,39824,39826,39828],{"class":32,"line":1932},[30,39805,38235],{"class":321},[30,39807,31012],{"class":5398},[30,39809,367],{"class":317},[30,39811,398],{"class":40},[30,39813,698],{"class":321},[30,39815,31067],{"class":5398},[30,39817,367],{"class":317},[30,39819,398],{"class":40},[30,39821,698],{"class":321},[30,39823,31021],{"class":5398},[30,39825,367],{"class":317},[30,39827,511],{"class":40},[30,39829,328],{"class":321},[30,39831,39832],{"class":32,"line":1937},[30,39833,38264],{"class":321},[30,39835,39836],{"class":32,"line":1942},[30,39837,38397],{"class":379},[30,39839,39840,39842,39844,39846],{"class":32,"line":1947},[30,39841,30983],{"class":40},[30,39843,38404],{"class":321},[30,39845,367],{"class":317},[30,39847,38147],{"class":321},[30,39849,39850,39852,39854,39856,39858,39860,39862,39864,39866,39868,39870,39872,39874,39876,39878,39880,39882],{"class":32,"line":1961},[30,39851,38152],{"class":321},[30,39853,30994],{"class":5398},[30,39855,367],{"class":317},[30,39857,32208],{"class":40},[30,39859,698],{"class":321},[30,39861,31003],{"class":5398},[30,39863,367],{"class":317},[30,39865,35008],{"class":40},[30,39867,698],{"class":321},[30,39869,31012],{"class":5398},[30,39871,367],{"class":317},[30,39873,392],{"class":40},[30,39875,698],{"class":321},[30,39877,31021],{"class":5398},[30,39879,367],{"class":317},[30,39881,537],{"class":40},[30,39883,38185],{"class":321},[30,39885,39886],{"class":32,"line":1966},[30,39887,38190],{"class":321},[30,39889,39890,39892,39894,39896,39898,39900,39902,39904,39906,39908,39910,39912,39914,39916,39918,39920,39922],{"class":32,"line":2759},[30,39891,38152],{"class":321},[30,39893,30994],{"class":5398},[30,39895,367],{"class":317},[30,39897,35008],{"class":40},[30,39899,698],{"class":321},[30,39901,31003],{"class":5398},[30,39903,367],{"class":317},[30,39905,35008],{"class":40},[30,39907,698],{"class":321},[30,39909,31012],{"class":5398},[30,39911,367],{"class":317},[30,39913,392],{"class":40},[30,39915,698],{"class":321},[30,39917,31021],{"class":5398},[30,39919,367],{"class":317},[30,39921,537],{"class":40},[30,39923,38185],{"class":321},[30,39925,39926],{"class":32,"line":2773},[30,39927,38190],{"class":321},[30,39929,39930,39932,39934,39936,39938,39940,39942,39944,39946,39948,39950,39952,39954,39956,39958,39960,39962],{"class":32,"line":2781},[30,39931,38152],{"class":321},[30,39933,30994],{"class":5398},[30,39935,367],{"class":317},[30,39937,35008],{"class":40},[30,39939,698],{"class":321},[30,39941,31003],{"class":5398},[30,39943,367],{"class":317},[30,39945,35008],{"class":40},[30,39947,698],{"class":321},[30,39949,31012],{"class":5398},[30,39951,367],{"class":317},[30,39953,392],{"class":40},[30,39955,698],{"class":321},[30,39957,31021],{"class":5398},[30,39959,367],{"class":317},[30,39961,537],{"class":40},[30,39963,38185],{"class":321},[30,39965,39966],{"class":32,"line":2786},[30,39967,38190],{"class":321},[30,39969,39970,39972,39974,39976,39978,39980,39982,39984,39986,39988,39990,39992,39994],{"class":32,"line":2792},[30,39971,38235],{"class":321},[30,39973,31012],{"class":5398},[30,39975,367],{"class":317},[30,39977,398],{"class":40},[30,39979,698],{"class":321},[30,39981,31067],{"class":5398},[30,39983,367],{"class":317},[30,39985,398],{"class":40},[30,39987,698],{"class":321},[30,39989,31021],{"class":5398},[30,39991,367],{"class":317},[30,39993,511],{"class":40},[30,39995,328],{"class":321},[30,39997,39998],{"class":32,"line":2798},[30,39999,38264],{"class":321},[30,40001,40002],{"class":32,"line":2803},[30,40003,38565],{"class":379},[30,40005,40006,40008,40010,40012],{"class":32,"line":8130},[30,40007,30983],{"class":40},[30,40009,38572],{"class":321},[30,40011,367],{"class":317},[30,40013,38147],{"class":321},[30,40015,40016,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036,40038,40040,40042,40044,40046,40048],{"class":32,"line":8154},[30,40017,38152],{"class":321},[30,40019,30994],{"class":5398},[30,40021,367],{"class":317},[30,40023,35008],{"class":40},[30,40025,698],{"class":321},[30,40027,31003],{"class":5398},[30,40029,367],{"class":317},[30,40031,38595],{"class":40},[30,40033,698],{"class":321},[30,40035,31012],{"class":5398},[30,40037,367],{"class":317},[30,40039,392],{"class":40},[30,40041,698],{"class":321},[30,40043,31021],{"class":5398},[30,40045,367],{"class":317},[30,40047,537],{"class":40},[30,40049,38185],{"class":321},[30,40051,40052],{"class":32,"line":8159},[30,40053,38190],{"class":321},[30,40055,40056,40058,40060,40062,40064,40066,40068,40070,40072,40074,40076,40078,40080,40082,40084,40086,40088],{"class":32,"line":8165},[30,40057,38152],{"class":321},[30,40059,30994],{"class":5398},[30,40061,367],{"class":317},[30,40063,38595],{"class":40},[30,40065,698],{"class":321},[30,40067,31003],{"class":5398},[30,40069,367],{"class":317},[30,40071,38595],{"class":40},[30,40073,698],{"class":321},[30,40075,31012],{"class":5398},[30,40077,367],{"class":317},[30,40079,392],{"class":40},[30,40081,698],{"class":321},[30,40083,31021],{"class":5398},[30,40085,367],{"class":317},[30,40087,537],{"class":40},[30,40089,38185],{"class":321},[30,40091,40092],{"class":32,"line":8192},[30,40093,38190],{"class":321},[30,40095,40096,40098,40100,40102,40104,40106,40108,40110,40112,40114,40116,40118,40120,40122,40124,40126,40128],{"class":32,"line":8197},[30,40097,38152],{"class":321},[30,40099,30994],{"class":5398},[30,40101,367],{"class":317},[30,40103,38595],{"class":40},[30,40105,698],{"class":321},[30,40107,31003],{"class":5398},[30,40109,367],{"class":317},[30,40111,38595],{"class":40},[30,40113,698],{"class":321},[30,40115,31012],{"class":5398},[30,40117,367],{"class":317},[30,40119,392],{"class":40},[30,40121,698],{"class":321},[30,40123,31021],{"class":5398},[30,40125,367],{"class":317},[30,40127,537],{"class":40},[30,40129,38185],{"class":321},[30,40131,40132],{"class":32,"line":8203},[30,40133,38190],{"class":321},[30,40135,40136,40138,40140,40142,40144,40146,40148,40150,40152,40154,40156,40158,40160],{"class":32,"line":8215},[30,40137,38235],{"class":321},[30,40139,31012],{"class":5398},[30,40141,367],{"class":317},[30,40143,398],{"class":40},[30,40145,698],{"class":321},[30,40147,31067],{"class":5398},[30,40149,367],{"class":317},[30,40151,398],{"class":40},[30,40153,698],{"class":321},[30,40155,31021],{"class":5398},[30,40157,367],{"class":317},[30,40159,511],{"class":40},[30,40161,328],{"class":321},[30,40163,40164],{"class":32,"line":8227},[30,40165,38264],{"class":321},[30,40167,40168],{"class":32,"line":8239},[30,40169,38734],{"class":379},[30,40171,40172,40174,40176,40178],{"class":32,"line":9898},[30,40173,30983],{"class":40},[30,40175,38741],{"class":321},[30,40177,367],{"class":317},[30,40179,38147],{"class":321},[30,40181,40182,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210,40212,40214],{"class":32,"line":9923},[30,40183,38152],{"class":321},[30,40185,30994],{"class":5398},[30,40187,367],{"class":317},[30,40189,38595],{"class":40},[30,40191,698],{"class":321},[30,40193,31003],{"class":5398},[30,40195,367],{"class":317},[30,40197,38595],{"class":40},[30,40199,698],{"class":321},[30,40201,31012],{"class":5398},[30,40203,367],{"class":317},[30,40205,392],{"class":40},[30,40207,698],{"class":321},[30,40209,31021],{"class":5398},[30,40211,367],{"class":317},[30,40213,537],{"class":40},[30,40215,38185],{"class":321},[30,40217,40218],{"class":32,"line":9946},[30,40219,38190],{"class":321},[30,40221,40222,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242,40244,40246,40248,40250,40252,40254],{"class":32,"line":9970},[30,40223,38152],{"class":321},[30,40225,30994],{"class":5398},[30,40227,367],{"class":317},[30,40229,38595],{"class":40},[30,40231,698],{"class":321},[30,40233,31003],{"class":5398},[30,40235,367],{"class":317},[30,40237,38595],{"class":40},[30,40239,698],{"class":321},[30,40241,31012],{"class":5398},[30,40243,367],{"class":317},[30,40245,392],{"class":40},[30,40247,698],{"class":321},[30,40249,31021],{"class":5398},[30,40251,367],{"class":317},[30,40253,537],{"class":40},[30,40255,38185],{"class":321},[30,40257,40258],{"class":32,"line":9975},[30,40259,38190],{"class":321},[30,40261,40262,40264,40266,40268,40270,40272,40274,40276,40278,40280,40282,40284,40286,40288,40290,40292,40294],{"class":32,"line":9980},[30,40263,38152],{"class":321},[30,40265,30994],{"class":5398},[30,40267,367],{"class":317},[30,40269,38595],{"class":40},[30,40271,698],{"class":321},[30,40273,31003],{"class":5398},[30,40275,367],{"class":317},[30,40277,38595],{"class":40},[30,40279,698],{"class":321},[30,40281,31012],{"class":5398},[30,40283,367],{"class":317},[30,40285,392],{"class":40},[30,40287,698],{"class":321},[30,40289,31021],{"class":5398},[30,40291,367],{"class":317},[30,40293,537],{"class":40},[30,40295,38185],{"class":321},[30,40297,40298],{"class":32,"line":9985},[30,40299,38190],{"class":321},[30,40301,40302,40304,40306,40308,40310,40312,40314,40316,40318,40320,40322,40324,40326],{"class":32,"line":9994},[30,40303,38235],{"class":321},[30,40305,31012],{"class":5398},[30,40307,367],{"class":317},[30,40309,398],{"class":40},[30,40311,698],{"class":321},[30,40313,31067],{"class":5398},[30,40315,367],{"class":317},[30,40317,398],{"class":40},[30,40319,698],{"class":321},[30,40321,31021],{"class":5398},[30,40323,367],{"class":317},[30,40325,511],{"class":40},[30,40327,328],{"class":321},[30,40329,40330],{"class":32,"line":9999},[30,40331,38264],{"class":321},[30,40333,40334],{"class":32,"line":10005},[30,40335,38902],{"class":379},[30,40337,40338,40340,40342,40344],{"class":32,"line":10026},[30,40339,30983],{"class":40},[30,40341,38909],{"class":321},[30,40343,367],{"class":317},[30,40345,38147],{"class":321},[30,40347,40348],{"class":32,"line":10032},[30,40349,38918],{"class":379},[30,40351,40352],{"class":32,"line":10046},[30,40353,38923],{"class":379},[30,40355,40356],{"class":32,"line":10052},[30,40357,38928],{"class":321},[30,40359,40360,40362,40364,40366,40368,40370,40372,40374,40376],{"class":32,"line":10079},[30,40361,38933],{"class":321},[30,40363,689],{"class":40},[30,40365,775],{"class":317},[30,40367,689],{"class":40},[30,40369,775],{"class":317},[30,40371,38595],{"class":40},[30,40373,698],{"class":321},[30,40375,35008],{"class":40},[30,40377,38185],{"class":321},[30,40379,40380],{"class":32,"line":10088},[30,40381,38190],{"class":321},[30,40383,40384,40386,40388,40390,40392],{"class":32,"line":10094},[30,40385,38933],{"class":321},[30,40387,35008],{"class":40},[30,40389,698],{"class":321},[30,40391,32208],{"class":40},[30,40393,38185],{"class":321},[30,40395,40396],{"class":32,"line":10102},[30,40397,38190],{"class":321},[30,40399,40400,40402,40404,40406,40408],{"class":32,"line":10107},[30,40401,38933],{"class":321},[30,40403,32208],{"class":40},[30,40405,698],{"class":321},[30,40407,766],{"class":40},[30,40409,328],{"class":321},[30,40411,40412],{"class":32,"line":16786},[30,40413,38264],{"class":321},[30,40415,40416],{"class":32,"line":16792},[30,40417,2582],{"emptyLinePlaceholder":245},[30,40419,40420],{"class":32,"line":16815},[30,40421,38994],{"class":379},[30,40423,40424],{"class":32,"line":16821},[30,40425,38999],{"class":379},[30,40427,40428,40430,40432,40434,40436],{"class":32,"line":16844},[30,40429,3585],{"class":317},[30,40431,39006],{"class":321},[30,40433,26181],{"class":317},[30,40435,39011],{"class":40},[30,40437,39014],{"class":321},[30,40439,40440],{"class":32,"line":16858},[30,40441,39019],{"class":379},[30,40443,40444,40446,40448],{"class":32,"line":16878},[30,40445,4824],{"class":317},[30,40447,39026],{"class":40},[30,40449,39029],{"class":321},[30,40451,40452],{"class":32,"line":16884},[30,40453,39034],{"class":379},[30,40455,40456,40458,40460,40462,40464],{"class":32,"line":16895},[30,40457,39039],{"class":321},[30,40459,39042],{"class":5398},[30,40461,367],{"class":317},[30,40463,39047],{"class":74},[30,40465,328],{"class":321},[30,40467,40468],{"class":32,"line":16918},[30,40469,39054],{"class":379},[30,40471,40472,40474,40476,40478,40480,40482],{"class":32,"line":16940},[30,40473,39059],{"class":317},[30,40475,39062],{"class":321},[30,40477,39065],{"class":317},[30,40479,39068],{"class":317},[30,40481,39071],{"class":40},[30,40483,3921],{"class":321},[30,40485,40486],{"class":32,"line":16945},[30,40487,39078],{"class":379},[30,40489,40490,40492,40494],{"class":32,"line":16951},[30,40491,39083],{"class":321},[30,40493,511],{"class":40},[30,40495,328],{"class":321},[30,40497,40498],{"class":32,"line":16965},[30,40499,39092],{"class":379},[30,40501,40502,40504,40506],{"class":32,"line":16978},[30,40503,39097],{"class":317},[30,40505,39026],{"class":40},[30,40507,39102],{"class":321},[30,40509,40510],{"class":32,"line":16983},[30,40511,39107],{"class":379},[30,40513,40514],{"class":32,"line":16997},[30,40515,39112],{"class":379},[30,40517,40518,40520,40522,40524,40526],{"class":32,"line":17002},[30,40519,39117],{"class":321},[30,40521,511],{"class":40},[30,40523,698],{"class":321},[30,40525,39124],{"class":40},[30,40527,328],{"class":321},[30,40529,40530],{"class":32,"line":17008},[30,40531,39131],{"class":379},[30,40533,40534,40536,40538,40540,40542,40544],{"class":32,"line":17013},[30,40535,39059],{"class":317},[30,40537,39062],{"class":321},[30,40539,39065],{"class":317},[30,40541,39068],{"class":317},[30,40543,39071],{"class":40},[30,40545,3921],{"class":321},[30,40547,40548,40550,40552],{"class":32,"line":17027},[30,40549,39083],{"class":321},[30,40551,511],{"class":40},[30,40553,328],{"class":321},[30,40555,40556],{"class":32,"line":17032},[30,40557,2582],{"emptyLinePlaceholder":245},[30,40559,40560],{"class":32,"line":17037},[30,40561,35303],{"class":379},[30,40563,40564,40566,40568],{"class":32,"line":17051},[30,40565,30939],{"class":317},[30,40567,31231],{"class":36},[30,40569,31234],{"class":321},[30,40571,40572,40574,40576,40578],{"class":32,"line":17063},[30,40573,31239],{"class":321},[30,40575,367],{"class":317},[30,40577,30961],{"class":40},[30,40579,39180],{"class":321},[30,40581,40582,40584,40586,40588],{"class":32,"line":17068},[30,40583,31239],{"class":321},[30,40585,367],{"class":317},[30,40587,30961],{"class":40},[30,40589,39191],{"class":321},[30,40591,40592,40594,40596,40598],{"class":32,"line":17081},[30,40593,31239],{"class":321},[30,40595,367],{"class":317},[30,40597,30961],{"class":40},[30,40599,39202],{"class":321},[30,40601,40602,40604,40606,40608],{"class":32,"line":17086},[30,40603,31239],{"class":321},[30,40605,367],{"class":317},[30,40607,30961],{"class":40},[30,40609,39213],{"class":321},[30,40611,40612,40614,40616,40618],{"class":32,"line":17091},[30,40613,31239],{"class":321},[30,40615,367],{"class":317},[30,40617,30961],{"class":40},[30,40619,39224],{"class":321},[30,40621,40622,40624,40626,40628],{"class":32,"line":17096},[30,40623,31239],{"class":321},[30,40625,367],{"class":317},[30,40627,30961],{"class":40},[30,40629,39235],{"class":321},[30,40631,40632,40634],{"class":32,"line":17109},[30,40633,14934],{"class":317},[30,40635,31347],{"class":321},[30,40637,40638],{"class":32,"line":17114},[30,40639,2582],{"emptyLinePlaceholder":245},[30,40641,40642],{"class":32,"line":32771},[30,40643,39250],{"class":379},[30,40645,40646,40648,40650,40652,40654],{"class":32,"line":32777},[30,40647,1717],{"class":317},[30,40649,31358],{"class":40},[30,40651,3131],{"class":317},[30,40653,39261],{"class":74},[30,40655,3921],{"class":321},[30,40657,40658,40660,40662,40664,40666,40668,40670,40672,40674],{"class":32,"line":32783},[30,40659,31375],{"class":321},[30,40661,367],{"class":317},[30,40663,30589],{"class":321},[30,40665,31382],{"class":74},[30,40667,1887],{"class":317},[30,40669,31387],{"class":321},[30,40671,1884],{"class":317},[30,40673,30614],{"class":74},[30,40675,328],{"class":321},[30,40677,40678,40680],{"class":32,"line":32789},[30,40679,31437],{"class":40},[30,40681,30623],{"class":321},[30,40683,40684,40686,40688],{"class":32,"line":32795},[30,40685,31427],{"class":321},[30,40687,367],{"class":317},[30,40689,39298],{"class":321},[30,40691,40692,40694,40696,40698,40700,40702,40704,40706],{"class":32,"line":32806},[30,40693,31437],{"class":40},[30,40695,31440],{"class":321},[30,40697,537],{"class":40},[30,40699,698],{"class":321},[30,40701,31639],{"class":40},[30,40703,698],{"class":321},[30,40705,31639],{"class":40},[30,40707,31453],{"class":321},[271,40709,40710],{"start":52},[150,40711,40712],{},"测试代码",[20,40714,40716],{"className":30516,"code":40715,"language":30518,"meta":25,"style":25},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import VGG16\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=VGG16()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[27,40717,40718,40724,40734,40744,40748,40758,40769,40773,40777,40781,40789,40805,40815,40831,40841,40855,40859,40869,40879,40889,40895,40899,40903,40911,40915,40931,40939,40943,40947,40955,40963,40967,40971,40975,40979,40985,40989,40999,41007,41015,41019,41023,41027,41035,41039,41055,41059,41063,41067,41079,41083,41095,41099,41103,41115,41119,41129,41133,41137,41149,41153,41162,41166,41170,41178,41182,41190,41194,41198,41202,41206,41210,41226,41234,41238,41242,41290,41296,41300,41310,41318,41326,41330,41334,41338,41342,41350,41354,41370,41374,41382,41390],{"__ignoreMap":25},[30,40719,40720,40722],{"class":32,"line":33},[30,40721,30530],{"class":317},[30,40723,30533],{"class":321},[30,40725,40726,40728,40730,40732],{"class":32,"line":44},[30,40727,30530],{"class":317},[30,40729,31553],{"class":321},[30,40731,31521],{"class":317},[30,40733,31558],{"class":321},[30,40735,40736,40738,40740,40742],{"class":32,"line":52},[30,40737,30875],{"class":317},[30,40739,31536],{"class":321},[30,40741,30530],{"class":317},[30,40743,31541],{"class":321},[30,40745,40746],{"class":32,"line":60},[30,40747,34060],{"class":379},[30,40749,40750,40752,40754,40756],{"class":32,"line":68},[30,40751,30875],{"class":317},[30,40753,31506],{"class":321},[30,40755,30530],{"class":317},[30,40757,31511],{"class":321},[30,40759,40760,40762,40764,40766],{"class":32,"line":80},[30,40761,30875],{"class":317},[30,40763,32052],{"class":321},[30,40765,30530],{"class":317},[30,40767,40768],{"class":40}," VGG16\n",[30,40770,40771],{"class":32,"line":88},[30,40772,2582],{"emptyLinePlaceholder":245},[30,40774,40775],{"class":32,"line":96},[30,40776,2582],{"emptyLinePlaceholder":245},[30,40778,40779],{"class":32,"line":104},[30,40780,34089],{"class":379},[30,40782,40783,40785,40787],{"class":32,"line":112},[30,40784,32085],{"class":317},[30,40786,34096],{"class":36},[30,40788,32091],{"class":321},[30,40790,40791,40793,40795,40797,40799,40801,40803],{"class":32,"line":123},[30,40792,34103],{"class":321},[30,40794,367],{"class":317},[30,40796,31593],{"class":321},[30,40798,31596],{"class":5398},[30,40800,367],{"class":317},[30,40802,31601],{"class":74},[30,40804,31604],{"class":321},[30,40806,40807,40809,40811,40813],{"class":32,"line":131},[30,40808,34120],{"class":5398},[30,40810,367],{"class":317},[30,40812,34125],{"class":40},[30,40814,31604],{"class":321},[30,40816,40817,40819,40821,40823,40825,40827,40829],{"class":32,"line":142},[30,40818,34132],{"class":5398},[30,40820,367],{"class":317},[30,40822,31631],{"class":321},[30,40824,31634],{"class":5398},[30,40826,367],{"class":317},[30,40828,31639],{"class":40},[30,40830,31642],{"class":321},[30,40832,40833,40835,40837,40839],{"class":32,"line":1811},[30,40834,34149],{"class":5398},[30,40836,367],{"class":317},[30,40838,31614],{"class":40},[30,40840,328],{"class":321},[30,40842,40843,40845,40847,40849,40851,40853],{"class":32,"line":1825},[30,40844,34160],{"class":321},[30,40846,367],{"class":317},[30,40848,31672],{"class":321},[30,40850,31675],{"class":5398},[30,40852,367],{"class":317},[30,40854,34171],{"class":321},[30,40856,40857],{"class":32,"line":1830},[30,40858,34176],{"class":379},[30,40860,40861,40863,40865,40867],{"class":32,"line":1836},[30,40862,34181],{"class":5398},[30,40864,367],{"class":317},[30,40866,537],{"class":40},[30,40868,31604],{"class":321},[30,40870,40871,40873,40875,40877],{"class":32,"line":1857},[30,40872,34192],{"class":5398},[30,40874,367],{"class":317},[30,40876,31614],{"class":40},[30,40878,31604],{"class":321},[30,40880,40881,40883,40885,40887],{"class":32,"line":1862},[30,40882,34203],{"class":5398},[30,40884,367],{"class":317},[30,40886,511],{"class":40},[30,40888,328],{"class":321},[30,40890,40891,40893],{"class":32,"line":1876},[30,40892,4272],{"class":317},[30,40894,34216],{"class":321},[30,40896,40897],{"class":32,"line":1881},[30,40898,2582],{"emptyLinePlaceholder":245},[30,40900,40901],{"class":32,"line":1910},[30,40902,34225],{"class":379},[30,40904,40905,40907,40909],{"class":32,"line":1915},[30,40906,32085],{"class":317},[30,40908,34232],{"class":36},[30,40910,34235],{"class":321},[30,40912,40913],{"class":32,"line":1932},[30,40914,34240],{"class":379},[30,40916,40917,40919,40921,40923,40925,40927,40929],{"class":32,"line":1937},[30,40918,31375],{"class":321},[30,40920,367],{"class":317},[30,40922,31382],{"class":74},[30,40924,1887],{"class":317},[30,40926,31387],{"class":321},[30,40928,1884],{"class":317},[30,40930,34257],{"class":74},[30,40932,40933,40935,40937],{"class":32,"line":1942},[30,40934,31427],{"class":321},[30,40936,367],{"class":317},[30,40938,32427],{"class":321},[30,40940,40941],{"class":32,"line":1947},[30,40942,2582],{"emptyLinePlaceholder":245},[30,40944,40945],{"class":32,"line":1961},[30,40946,34274],{"class":379},[30,40948,40949,40951,40953],{"class":32,"line":1966},[30,40950,34279],{"class":321},[30,40952,367],{"class":317},[30,40954,32480],{"class":40},[30,40956,40957,40959,40961],{"class":32,"line":2759},[30,40958,34288],{"class":321},[30,40960,367],{"class":317},[30,40962,3267],{"class":40},[30,40964,40965],{"class":32,"line":2773},[30,40966,2582],{"emptyLinePlaceholder":245},[30,40968,40969],{"class":32,"line":2781},[30,40970,34301],{"class":379},[30,40972,40973],{"class":32,"line":2786},[30,40974,34306],{"class":379},[30,40976,40977],{"class":32,"line":2792},[30,40978,34311],{"class":379},[30,40980,40981,40983],{"class":32,"line":2798},[30,40982,34316],{"class":317},[30,40984,33022],{"class":321},[30,40986,40987],{"class":32,"line":2803},[30,40988,34323],{"class":379},[30,40990,40991,40993,40995,40997],{"class":32,"line":8130},[30,40992,3585],{"class":317},[30,40994,34330],{"class":321},[30,40996,26181],{"class":317},[30,40998,34335],{"class":321},[30,41000,41001,41003,41005],{"class":32,"line":8154},[30,41002,34340],{"class":321},[30,41004,367],{"class":317},[30,41006,34345],{"class":321},[30,41008,41009,41011,41013],{"class":32,"line":8159},[30,41010,34350],{"class":321},[30,41012,367],{"class":317},[30,41014,34355],{"class":321},[30,41016,41017],{"class":32,"line":8165},[30,41018,34360],{"class":379},[30,41020,41021],{"class":32,"line":8192},[30,41022,33013],{"class":321},[30,41024,41025],{"class":32,"line":8197},[30,41026,34369],{"class":379},[30,41028,41029,41031,41033],{"class":32,"line":8203},[30,41030,32798],{"class":321},[30,41032,367],{"class":317},[30,41034,34378],{"class":321},[30,41036,41037],{"class":32,"line":8215},[30,41038,34383],{"class":379},[30,41040,41041,41043,41045,41047,41049,41051,41053],{"class":32,"line":8227},[30,41042,32815],{"class":321},[30,41044,367],{"class":317},[30,41046,32820],{"class":321},[30,41048,32823],{"class":5398},[30,41050,367],{"class":317},[30,41052,537],{"class":40},[30,41054,328],{"class":321},[30,41056,41057],{"class":32,"line":8239},[30,41058,34404],{"class":379},[30,41060,41061],{"class":32,"line":9898},[30,41062,34409],{"class":379},[30,41064,41065],{"class":32,"line":9923},[30,41066,34414],{"class":379},[30,41068,41069,41071,41073,41075,41077],{"class":32,"line":9946},[30,41070,34419],{"class":321},[30,41072,9659],{"class":317},[30,41074,32925],{"class":321},[30,41076,3131],{"class":317},[30,41078,34428],{"class":321},[30,41080,41081],{"class":32,"line":9970},[30,41082,34433],{"class":379},[30,41084,41085,41087,41089,41091,41093],{"class":32,"line":9975},[30,41086,34438],{"class":321},[30,41088,9659],{"class":317},[30,41090,34443],{"class":321},[30,41092,511],{"class":40},[30,41094,328],{"class":321},[30,41096,41097],{"class":32,"line":9980},[30,41098,2582],{"emptyLinePlaceholder":245},[30,41100,41101],{"class":32,"line":9985},[30,41102,34456],{"class":379},[30,41104,41105,41107,41109,41111,41113],{"class":32,"line":9994},[30,41106,34461],{"class":321},[30,41108,367],{"class":317},[30,41110,34466],{"class":321},[30,41112,904],{"class":317},[30,41114,34471],{"class":321},[30,41116,41117],{"class":32,"line":9999},[30,41118,34476],{"class":379},[30,41120,41121,41123,41125,41127],{"class":32,"line":10005},[30,41122,32589],{"class":40},[30,41124,322],{"class":321},[30,41126,34485],{"class":74},[30,41128,34488],{"class":321},[30,41130,41131],{"class":32,"line":10026},[30,41132,2582],{"emptyLinePlaceholder":245},[30,41134,41135],{"class":32,"line":10032},[30,41136,34497],{"class":379},[30,41138,41139,41141,41143,41145,41147],{"class":32,"line":10046},[30,41140,1717],{"class":317},[30,41142,31358],{"class":40},[30,41144,3131],{"class":317},[30,41146,31363],{"class":74},[30,41148,3921],{"class":321},[30,41150,41151],{"class":32,"line":10052},[30,41152,34514],{"class":379},[30,41154,41155,41157,41159],{"class":32,"line":10079},[30,41156,31427],{"class":321},[30,41158,367],{"class":317},[30,41160,41161],{"class":321},"VGG16()\n",[30,41163,41164],{"class":32,"line":10088},[30,41165,34527],{"class":379},[30,41167,41168],{"class":32,"line":10094},[30,41169,34532],{"class":379},[30,41171,41172,41174,41176],{"class":32,"line":10102},[30,41173,34537],{"class":321},[30,41175,34540],{"class":74},[30,41177,30635],{"class":321},[30,41179,41180],{"class":32,"line":10107},[30,41181,34547],{"class":379},[30,41183,41184,41186,41188],{"class":32,"line":16786},[30,41185,34160],{"class":321},[30,41187,367],{"class":317},[30,41189,34556],{"class":321},[30,41191,41192],{"class":32,"line":16792},[30,41193,34561],{"class":379},[30,41195,41196],{"class":32,"line":16815},[30,41197,34566],{"class":321},[30,41199,41200],{"class":32,"line":16821},[30,41201,2582],{"emptyLinePlaceholder":245},[30,41203,41204],{"class":32,"line":16844},[30,41205,34575],{"class":379},[30,41207,41208],{"class":32,"line":16858},[30,41209,34580],{"class":379},[30,41211,41212,41214,41216,41218,41220,41222,41224],{"class":32,"line":16878},[30,41213,31375],{"class":321},[30,41215,367],{"class":317},[30,41217,31382],{"class":74},[30,41219,1887],{"class":317},[30,41221,31387],{"class":321},[30,41223,1884],{"class":317},[30,41225,34257],{"class":74},[30,41227,41228,41230,41232],{"class":32,"line":16884},[30,41229,31427],{"class":321},[30,41231,367],{"class":317},[30,41233,32427],{"class":321},[30,41235,41236],{"class":32,"line":16895},[30,41237,34609],{"class":379},[30,41239,41240],{"class":32,"line":16918},[30,41241,34614],{"class":379},[30,41243,41244,41246,41248,41250,41252,41254,41256,41258,41260,41262,41264,41266,41268,41270,41272,41274,41276,41278,41280,41282,41284,41286,41288],{"class":32,"line":16940},[30,41245,34619],{"class":321},[30,41247,367],{"class":317},[30,41249,1210],{"class":321},[30,41251,34626],{"class":74},[30,41253,698],{"class":321},[30,41255,34631],{"class":74},[30,41257,698],{"class":321},[30,41259,34636],{"class":74},[30,41261,698],{"class":321},[30,41263,34641],{"class":74},[30,41265,698],{"class":321},[30,41267,34646],{"class":74},[30,41269,698],{"class":321},[30,41271,34651],{"class":74},[30,41273,698],{"class":321},[30,41275,34656],{"class":74},[30,41277,698],{"class":321},[30,41279,34661],{"class":74},[30,41281,698],{"class":321},[30,41283,34666],{"class":74},[30,41285,698],{"class":321},[30,41287,34671],{"class":74},[30,41289,33384],{"class":321},[30,41291,41292,41294],{"class":32,"line":16945},[30,41293,34316],{"class":317},[30,41295,33022],{"class":321},[30,41297,41298],{"class":32,"line":16951},[30,41299,34684],{"class":379},[30,41301,41302,41304,41306,41308],{"class":32,"line":16965},[30,41303,3585],{"class":317},[30,41305,34691],{"class":321},[30,41307,26181],{"class":317},[30,41309,34335],{"class":321},[30,41311,41312,41314,41316],{"class":32,"line":16978},[30,41313,32748],{"class":321},[30,41315,367],{"class":317},[30,41317,32753],{"class":321},[30,41319,41320,41322,41324],{"class":32,"line":16983},[30,41321,32763],{"class":321},[30,41323,367],{"class":317},[30,41325,32768],{"class":321},[30,41327,41328],{"class":32,"line":16997},[30,41329,2582],{"emptyLinePlaceholder":245},[30,41331,41332],{"class":32,"line":17002},[30,41333,34720],{"class":379},[30,41335,41336],{"class":32,"line":17008},[30,41337,33013],{"class":321},[30,41339,41340],{"class":32,"line":17013},[30,41341,34729],{"class":379},[30,41343,41344,41346,41348],{"class":32,"line":17027},[30,41345,32798],{"class":321},[30,41347,367],{"class":317},[30,41349,32803],{"class":321},[30,41351,41352],{"class":32,"line":17032},[30,41353,34742],{"class":379},[30,41355,41356,41358,41360,41362,41364,41366,41368],{"class":32,"line":17037},[30,41357,32815],{"class":321},[30,41359,367],{"class":317},[30,41361,32820],{"class":321},[30,41363,32823],{"class":5398},[30,41365,367],{"class":317},[30,41367,537],{"class":40},[30,41369,328],{"class":321},[30,41371,41372],{"class":32,"line":17051},[30,41373,34763],{"class":379},[30,41375,41376,41378,41380],{"class":32,"line":17063},[30,41377,34768],{"class":321},[30,41379,367],{"class":317},[30,41381,34773],{"class":321},[30,41383,41384,41386,41388],{"class":32,"line":17068},[30,41385,34778],{"class":321},[30,41387,367],{"class":317},[30,41389,34783],{"class":321},[30,41391,41392,41394,41396,41398,41400,41402,41404,41406],{"class":32,"line":17081},[30,41393,34788],{"class":40},[30,41395,322],{"class":321},[30,41397,34793],{"class":74},[30,41399,34796],{"class":321},[30,41401,34799],{"class":74},[30,41403,698],{"class":321},[30,41405,34804],{"class":74},[30,41407,34807],{"class":321},[287,41409,41411],{"id":41410},"_23googlenet","2.3.GoogLeNet",[22180,41413,41415],{"id":41414},"_231原理","2.3.1.原理",[271,41417,41418],{},[150,41419,41420],{},"网络结构",[157,41422,41423],{},[160,41424],{"alt":25,"src":41425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[157,41427,41428],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[157,41430,41431],{},[160,41432],{"alt":25,"src":41433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[157,41435,41436],{},[160,41437],{"alt":25,"src":41438},"\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",[157,41440,41441],{},[160,41442],{"alt":25,"src":41443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[271,41445,41446],{"start":44},[150,41447,41448],{},"1x1卷积的优点",[157,41450,41451],{},[160,41452],{"alt":25,"src":41453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[271,41455,41456],{"start":52},[150,41457,41458],{},"全局平均池化层优点",[157,41460,41461],{},[160,41462],{"alt":25,"src":41463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[157,41465,41466],{},[160,41467],{"alt":25,"src":41468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[271,41470,41471],{"start":60},[150,41472,41473],{},"参数详细描述",[157,41475,41476],{},[160,41477],{"alt":25,"src":41478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[157,41480,41481],{},[160,41482],{"alt":25,"src":41483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[157,41485,41486],{},[160,41487],{"alt":25,"src":41488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[157,41490,41491],{},[160,41492],{"alt":25,"src":41493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[157,41495,41496],{},[160,41497],{"alt":25,"src":41498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[157,41500,41501],{},[160,41502],{"alt":25,"src":41503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[157,41505,41506],{},[160,41507],{"alt":25,"src":41508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[157,41510,41511],{},[160,41512],{"alt":25,"src":41513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[157,41515,41516],{},[160,41517],{"alt":25,"src":41518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[157,41520,41521],{},[160,41522],{"alt":25,"src":41523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[157,41525,41526],{},[160,41527],{"alt":25,"src":41528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[157,41530,41531],{},[160,41532],{"alt":25,"src":41533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[157,41535,41536],{},[160,41537],{"alt":25,"src":41538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[157,41540,41541],{},[160,41542],{"alt":25,"src":41543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[157,41545,41546],{},[160,41547],{"alt":25,"src":41548},"\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",[157,41550,41551],{},[160,41552],{"alt":25,"src":41553},"\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",[157,41555,41556],{},[160,41557],{"alt":25,"src":41558},"\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",[157,41560,41561],{},[160,41562],{"alt":25,"src":41563},"\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",[157,41565,41566],{},[160,41567],{"alt":25,"src":41568},"\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",[157,41570,41571],{},[160,41572],{"alt":25,"src":41573},"\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",[157,41575,41576],{},[160,41577],{"alt":25,"src":41578},"\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",[22180,41580,41582],{"id":41581},"_232代码实现","2.3.2.代码实现",[271,41584,41585],{},[150,41586,30849],{},[157,41588,41589],{},"根据原理一步一步搭建即可",[20,41591,41593],{"className":30516,"code":41592,"language":30518,"meta":25,"style":25},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,10)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[27,41594,41595,41601,41611,41621,41625,41642,41651,41666,41676,41681,41714,41719,41756,41803,41808,41844,41891,41896,41901,41936,41968,41972,41980,41996,42020,42045,42066,42071,42086,42090,42094,42099,42116,42121,42130,42145,42156,42200,42204,42232,42236,42247,42275,42279,42316,42320,42348,42352,42363,42399,42431,42459,42463,42474,42508,42540,42572,42605,42639,42667,42671,42682,42715,42747,42761,42765,42778,42782,42787,42799,42807,42829,42834,42839,42844,42849,42854,42859,42873,42881,42890,42903,42918,42927,42931,42939,42950,42961,42972,42983,42994,43000,43004,43009,43021,43041,43050],{"__ignoreMap":25},[30,41596,41597,41599],{"class":32,"line":33},[30,41598,30530],{"class":317},[30,41600,30533],{"class":321},[30,41602,41603,41605,41607,41609],{"class":32,"line":44},[30,41604,30875],{"class":317},[30,41606,30878],{"class":321},[30,41608,30530],{"class":317},[30,41610,30883],{"class":321},[30,41612,41613,41615,41617,41619],{"class":32,"line":52},[30,41614,30875],{"class":317},[30,41616,30895],{"class":321},[30,41618,30530],{"class":317},[30,41620,30900],{"class":321},[30,41622,41623],{"class":32,"line":60},[30,41624,2582],{"emptyLinePlaceholder":245},[30,41626,41627,41629,41632,41634,41636,41638,41640],{"class":32,"line":68},[30,41628,14876],{"class":317},[30,41630,41631],{"class":36}," Inception",[30,41633,322],{"class":321},[30,41635,30916],{"class":36},[30,41637,878],{"class":321},[30,41639,30921],{"class":36},[30,41641,30924],{"class":321},[30,41643,41644,41646,41648],{"class":32,"line":80},[30,41645,30939],{"class":317},[30,41647,30942],{"class":40},[30,41649,41650],{"class":321},"(self,in_channels,c1,c2,c3,c4):\n",[30,41652,41653,41655,41658,41660,41662,41664],{"class":32,"line":88},[30,41654,30955],{"class":40},[30,41656,41657],{"class":321},"(Inception,",[30,41659,30961],{"class":40},[30,41661,30964],{"class":321},[30,41663,30967],{"class":40},[30,41665,2158],{"class":321},[30,41667,41668,41670,41672,41674],{"class":32,"line":96},[30,41669,30983],{"class":40},[30,41671,34909],{"class":321},[30,41673,367],{"class":317},[30,41675,34914],{"class":321},[30,41677,41678],{"class":32,"line":104},[30,41679,41680],{"class":379},"        # 路线1：定义1*1卷积\n",[30,41682,41683,41685,41688,41690,41692,41694,41696,41699,41701,41703,41706,41708,41710,41712],{"class":32,"line":112},[30,41684,30983],{"class":40},[30,41686,41687],{"class":321},".p1_1",[30,41689,367],{"class":317},[30,41691,30991],{"class":321},[30,41693,30994],{"class":5398},[30,41695,367],{"class":317},[30,41697,41698],{"class":321},"in_channels,",[30,41700,31003],{"class":5398},[30,41702,367],{"class":317},[30,41704,41705],{"class":321},"c1,",[30,41707,31012],{"class":5398},[30,41709,367],{"class":317},[30,41711,537],{"class":40},[30,41713,328],{"class":321},[30,41715,41716],{"class":32,"line":123},[30,41717,41718],{"class":379},"        # 路线2：定义1*1卷积和3*3\n",[30,41720,41721,41723,41726,41728,41730,41732,41734,41736,41738,41740,41743,41745,41748,41750,41752,41754],{"class":32,"line":131},[30,41722,30983],{"class":40},[30,41724,41725],{"class":321},".p2_1",[30,41727,367],{"class":317},[30,41729,30991],{"class":321},[30,41731,30994],{"class":5398},[30,41733,367],{"class":317},[30,41735,41698],{"class":321},[30,41737,31003],{"class":5398},[30,41739,367],{"class":317},[30,41741,41742],{"class":321},"c2[",[30,41744,511],{"class":40},[30,41746,41747],{"class":321},"],",[30,41749,31012],{"class":5398},[30,41751,367],{"class":317},[30,41753,537],{"class":40},[30,41755,328],{"class":321},[30,41757,41758,41760,41763,41765,41767,41769,41771,41773,41775,41777,41779,41781,41783,41785,41787,41789,41791,41793,41795,41797,41799,41801],{"class":32,"line":142},[30,41759,30983],{"class":40},[30,41761,41762],{"class":321},".p2_2",[30,41764,367],{"class":317},[30,41766,30991],{"class":321},[30,41768,30994],{"class":5398},[30,41770,367],{"class":317},[30,41772,41742],{"class":321},[30,41774,511],{"class":40},[30,41776,41747],{"class":321},[30,41778,31003],{"class":5398},[30,41780,367],{"class":317},[30,41782,41742],{"class":321},[30,41784,537],{"class":40},[30,41786,41747],{"class":321},[30,41788,31012],{"class":5398},[30,41790,367],{"class":317},[30,41792,392],{"class":40},[30,41794,698],{"class":321},[30,41796,31021],{"class":5398},[30,41798,367],{"class":317},[30,41800,537],{"class":40},[30,41802,328],{"class":321},[30,41804,41805],{"class":32,"line":1811},[30,41806,41807],{"class":379},"        # 路线3：定义1*1卷积和5*5\n",[30,41809,41810,41812,41815,41817,41819,41821,41823,41825,41827,41829,41832,41834,41836,41838,41840,41842],{"class":32,"line":1825},[30,41811,30983],{"class":40},[30,41813,41814],{"class":321},".p3_1",[30,41816,367],{"class":317},[30,41818,30991],{"class":321},[30,41820,30994],{"class":5398},[30,41822,367],{"class":317},[30,41824,41698],{"class":321},[30,41826,31003],{"class":5398},[30,41828,367],{"class":317},[30,41830,41831],{"class":321},"c3[",[30,41833,511],{"class":40},[30,41835,41747],{"class":321},[30,41837,31012],{"class":5398},[30,41839,367],{"class":317},[30,41841,537],{"class":40},[30,41843,328],{"class":321},[30,41845,41846,41848,41851,41853,41855,41857,41859,41861,41863,41865,41867,41869,41871,41873,41875,41877,41879,41881,41883,41885,41887,41889],{"class":32,"line":1830},[30,41847,30983],{"class":40},[30,41849,41850],{"class":321},".p3_2",[30,41852,367],{"class":317},[30,41854,30991],{"class":321},[30,41856,30994],{"class":5398},[30,41858,367],{"class":317},[30,41860,41831],{"class":321},[30,41862,511],{"class":40},[30,41864,41747],{"class":321},[30,41866,31003],{"class":5398},[30,41868,367],{"class":317},[30,41870,41831],{"class":321},[30,41872,537],{"class":40},[30,41874,41747],{"class":321},[30,41876,31012],{"class":5398},[30,41878,367],{"class":317},[30,41880,639],{"class":40},[30,41882,698],{"class":321},[30,41884,31021],{"class":5398},[30,41886,367],{"class":317},[30,41888,398],{"class":40},[30,41890,328],{"class":321},[30,41892,41893],{"class":32,"line":1836},[30,41894,41895],{"class":379},"        # 路线4：定义3*3最大池化和1*1卷积\n",[30,41897,41898],{"class":32,"line":1857},[30,41899,41900],{"class":379},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[30,41902,41903,41905,41908,41910,41912,41914,41916,41918,41920,41922,41924,41926,41928,41930,41932,41934],{"class":32,"line":1862},[30,41904,30983],{"class":40},[30,41906,41907],{"class":321},".p4_1",[30,41909,367],{"class":317},[30,41911,34967],{"class":321},[30,41913,31012],{"class":5398},[30,41915,367],{"class":317},[30,41917,392],{"class":40},[30,41919,698],{"class":321},[30,41921,31067],{"class":5398},[30,41923,367],{"class":317},[30,41925,537],{"class":40},[30,41927,698],{"class":321},[30,41929,31021],{"class":5398},[30,41931,367],{"class":317},[30,41933,537],{"class":40},[30,41935,328],{"class":321},[30,41937,41938,41940,41943,41945,41947,41949,41951,41953,41955,41957,41960,41962,41964,41966],{"class":32,"line":1876},[30,41939,30983],{"class":40},[30,41941,41942],{"class":321},".p4_2",[30,41944,367],{"class":317},[30,41946,30991],{"class":321},[30,41948,30994],{"class":5398},[30,41950,367],{"class":317},[30,41952,41698],{"class":321},[30,41954,31003],{"class":5398},[30,41956,367],{"class":317},[30,41958,41959],{"class":321},"c4,",[30,41961,31012],{"class":5398},[30,41963,367],{"class":317},[30,41965,537],{"class":40},[30,41967,328],{"class":321},[30,41969,41970],{"class":32,"line":1881},[30,41971,2582],{"emptyLinePlaceholder":245},[30,41973,41974,41976,41978],{"class":32,"line":1910},[30,41975,30939],{"class":317},[30,41977,31231],{"class":36},[30,41979,31234],{"class":321},[30,41981,41982,41985,41987,41989,41991,41993],{"class":32,"line":1915},[30,41983,41984],{"class":321},"        p1",[30,41986,367],{"class":317},[30,41988,30961],{"class":40},[30,41990,35322],{"class":321},[30,41992,30961],{"class":40},[30,41994,41995],{"class":321},".p1_1(x))\n",[30,41997,41998,42000,42002,42004,42006,42008,42011,42013,42015,42017],{"class":32,"line":1932},[30,41999,7267],{"class":321},[30,42001,367],{"class":317},[30,42003,30961],{"class":40},[30,42005,35322],{"class":321},[30,42007,30961],{"class":40},[30,42009,42010],{"class":321},".p2_2(",[30,42012,30961],{"class":40},[30,42014,35322],{"class":321},[30,42016,30961],{"class":40},[30,42018,42019],{"class":321},".p2_1(x))))\n",[30,42021,42022,42025,42027,42029,42031,42033,42036,42038,42040,42042],{"class":32,"line":1937},[30,42023,42024],{"class":321},"        p3",[30,42026,367],{"class":317},[30,42028,30961],{"class":40},[30,42030,35322],{"class":321},[30,42032,30961],{"class":40},[30,42034,42035],{"class":321},".p3_2(",[30,42037,30961],{"class":40},[30,42039,35322],{"class":321},[30,42041,30961],{"class":40},[30,42043,42044],{"class":321},".p3_1(x))))\n",[30,42046,42047,42050,42052,42054,42056,42058,42061,42063],{"class":32,"line":1942},[30,42048,42049],{"class":321},"        p4",[30,42051,367],{"class":317},[30,42053,30961],{"class":40},[30,42055,35322],{"class":321},[30,42057,30961],{"class":40},[30,42059,42060],{"class":321},".p4_2(",[30,42062,30961],{"class":40},[30,42064,42065],{"class":321},".p4_1(x)))\n",[30,42067,42068],{"class":32,"line":1947},[30,42069,42070],{"class":379},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[30,42072,42073,42075,42078,42080,42082,42084],{"class":32,"line":1961},[30,42074,14934],{"class":317},[30,42076,42077],{"class":321}," torch.cat((p1,p2,p3,p4),",[30,42079,32823],{"class":5398},[30,42081,367],{"class":317},[30,42083,537],{"class":40},[30,42085,328],{"class":321},[30,42087,42088],{"class":32,"line":1966},[30,42089,2582],{"emptyLinePlaceholder":245},[30,42091,42092],{"class":32,"line":2759},[30,42093,2582],{"emptyLinePlaceholder":245},[30,42095,42096],{"class":32,"line":2773},[30,42097,42098],{"class":379},"# 搭建GoogLeNet网络\n",[30,42100,42101,42103,42106,42108,42110,42112,42114],{"class":32,"line":2781},[30,42102,14876],{"class":317},[30,42104,42105],{"class":36}," GoogLeNet",[30,42107,322],{"class":321},[30,42109,30916],{"class":36},[30,42111,878],{"class":321},[30,42113,30921],{"class":36},[30,42115,30924],{"class":321},[30,42117,42118],{"class":32,"line":2786},[30,42119,42120],{"class":379},"    # 必须把Inception导入到里边\n",[30,42122,42123,42125,42127],{"class":32,"line":2792},[30,42124,30939],{"class":317},[30,42126,30942],{"class":40},[30,42128,42129],{"class":321},"(self,Inception):\n",[30,42131,42132,42134,42137,42139,42141,42143],{"class":32,"line":2798},[30,42133,30955],{"class":40},[30,42135,42136],{"class":321},"(GoogLeNet,",[30,42138,30961],{"class":40},[30,42140,30964],{"class":321},[30,42142,30967],{"class":40},[30,42144,2158],{"class":321},[30,42146,42147,42149,42152,42154],{"class":32,"line":2803},[30,42148,30983],{"class":40},[30,42150,42151],{"class":321},".b1",[30,42153,367],{"class":317},[30,42155,38147],{"class":321},[30,42157,42158,42160,42162,42164,42166,42168,42170,42172,42174,42176,42178,42180,42182,42184,42186,42188,42190,42192,42194,42196,42198],{"class":32,"line":8130},[30,42159,38152],{"class":321},[30,42161,30994],{"class":5398},[30,42163,367],{"class":317},[30,42165,537],{"class":40},[30,42167,698],{"class":321},[30,42169,31003],{"class":5398},[30,42171,367],{"class":317},[30,42173,523],{"class":40},[30,42175,698],{"class":321},[30,42177,31012],{"class":5398},[30,42179,367],{"class":317},[30,42181,689],{"class":40},[30,42183,698],{"class":321},[30,42185,31067],{"class":5398},[30,42187,367],{"class":317},[30,42189,398],{"class":40},[30,42191,698],{"class":321},[30,42193,31021],{"class":5398},[30,42195,367],{"class":317},[30,42197,392],{"class":40},[30,42199,38185],{"class":321},[30,42201,42202],{"class":32,"line":8154},[30,42203,38190],{"class":321},[30,42205,42206,42208,42210,42212,42214,42216,42218,42220,42222,42224,42226,42228,42230],{"class":32,"line":8159},[30,42207,38235],{"class":321},[30,42209,31012],{"class":5398},[30,42211,367],{"class":317},[30,42213,392],{"class":40},[30,42215,698],{"class":321},[30,42217,31067],{"class":5398},[30,42219,367],{"class":317},[30,42221,398],{"class":40},[30,42223,698],{"class":321},[30,42225,31021],{"class":5398},[30,42227,367],{"class":317},[30,42229,537],{"class":40},[30,42231,328],{"class":321},[30,42233,42234],{"class":32,"line":8165},[30,42235,38264],{"class":321},[30,42237,42238,42240,42243,42245],{"class":32,"line":8192},[30,42239,30983],{"class":40},[30,42241,42242],{"class":321},".b2",[30,42244,367],{"class":317},[30,42246,38147],{"class":321},[30,42248,42249,42251,42253,42255,42257,42259,42261,42263,42265,42267,42269,42271,42273],{"class":32,"line":8197},[30,42250,38152],{"class":321},[30,42252,30994],{"class":5398},[30,42254,367],{"class":317},[30,42256,523],{"class":40},[30,42258,698],{"class":321},[30,42260,31003],{"class":5398},[30,42262,367],{"class":317},[30,42264,523],{"class":40},[30,42266,698],{"class":321},[30,42268,31012],{"class":5398},[30,42270,367],{"class":317},[30,42272,537],{"class":40},[30,42274,38185],{"class":321},[30,42276,42277],{"class":32,"line":8203},[30,42278,38190],{"class":321},[30,42280,42281,42283,42285,42287,42289,42291,42293,42295,42298,42300,42302,42304,42306,42308,42310,42312,42314],{"class":32,"line":8215},[30,42282,38152],{"class":321},[30,42284,30994],{"class":5398},[30,42286,367],{"class":317},[30,42288,523],{"class":40},[30,42290,698],{"class":321},[30,42292,31003],{"class":5398},[30,42294,367],{"class":317},[30,42296,42297],{"class":40},"192",[30,42299,698],{"class":321},[30,42301,31012],{"class":5398},[30,42303,367],{"class":317},[30,42305,392],{"class":40},[30,42307,698],{"class":321},[30,42309,31021],{"class":5398},[30,42311,367],{"class":317},[30,42313,537],{"class":40},[30,42315,38185],{"class":321},[30,42317,42318],{"class":32,"line":8227},[30,42319,38190],{"class":321},[30,42321,42322,42324,42326,42328,42330,42332,42334,42336,42338,42340,42342,42344,42346],{"class":32,"line":8239},[30,42323,38235],{"class":321},[30,42325,31012],{"class":5398},[30,42327,367],{"class":317},[30,42329,392],{"class":40},[30,42331,698],{"class":321},[30,42333,31067],{"class":5398},[30,42335,367],{"class":317},[30,42337,398],{"class":40},[30,42339,698],{"class":321},[30,42341,31021],{"class":5398},[30,42343,367],{"class":317},[30,42345,537],{"class":40},[30,42347,328],{"class":321},[30,42349,42350],{"class":32,"line":9898},[30,42351,38264],{"class":321},[30,42353,42354,42356,42359,42361],{"class":32,"line":9923},[30,42355,30983],{"class":40},[30,42357,42358],{"class":321},".b3",[30,42360,367],{"class":317},[30,42362,38147],{"class":321},[30,42364,42365,42368,42370,42372,42374,42377,42379,42381,42383,42386,42388,42390,42392,42395,42397],{"class":32,"line":9946},[30,42366,42367],{"class":321},"            Inception(",[30,42369,42297],{"class":40},[30,42371,698],{"class":321},[30,42373,523],{"class":40},[30,42375,42376],{"class":321},",(",[30,42378,529],{"class":40},[30,42380,698],{"class":321},[30,42382,32208],{"class":40},[30,42384,42385],{"class":321},"),(",[30,42387,921],{"class":40},[30,42389,698],{"class":321},[30,42391,517],{"class":40},[30,42393,42394],{"class":321},"),",[30,42396,517],{"class":40},[30,42398,38185],{"class":321},[30,42400,42401,42403,42405,42407,42409,42411,42413,42415,42417,42419,42421,42423,42425,42427,42429],{"class":32,"line":9970},[30,42402,42367],{"class":321},[30,42404,35008],{"class":40},[30,42406,698],{"class":321},[30,42408,32208],{"class":40},[30,42410,42376],{"class":321},[30,42412,32208],{"class":40},[30,42414,698],{"class":321},[30,42416,42297],{"class":40},[30,42418,42385],{"class":321},[30,42420,517],{"class":40},[30,42422,698],{"class":321},[30,42424,529],{"class":40},[30,42426,42394],{"class":321},[30,42428,523],{"class":40},[30,42430,38185],{"class":321},[30,42432,42433,42435,42437,42439,42441,42443,42445,42447,42449,42451,42453,42455,42457],{"class":32,"line":9975},[30,42434,38235],{"class":321},[30,42436,31012],{"class":5398},[30,42438,367],{"class":317},[30,42440,392],{"class":40},[30,42442,698],{"class":321},[30,42444,31067],{"class":5398},[30,42446,367],{"class":317},[30,42448,398],{"class":40},[30,42450,698],{"class":321},[30,42452,31021],{"class":5398},[30,42454,367],{"class":317},[30,42456,537],{"class":40},[30,42458,328],{"class":321},[30,42460,42461],{"class":32,"line":9980},[30,42462,38264],{"class":321},[30,42464,42465,42467,42470,42472],{"class":32,"line":9985},[30,42466,30983],{"class":40},[30,42468,42469],{"class":321},".b4",[30,42471,367],{"class":317},[30,42473,38147],{"class":321},[30,42475,42476,42478,42481,42483,42485,42487,42489,42491,42494,42496,42498,42500,42502,42504,42506],{"class":32,"line":9994},[30,42477,42367],{"class":321},[30,42479,42480],{"class":40},"480",[30,42482,698],{"class":321},[30,42484,42297],{"class":40},[30,42486,42376],{"class":321},[30,42488,529],{"class":40},[30,42490,698],{"class":321},[30,42492,42493],{"class":40},"208",[30,42495,42385],{"class":321},[30,42497,921],{"class":40},[30,42499,698],{"class":321},[30,42501,927],{"class":40},[30,42503,42394],{"class":321},[30,42505,523],{"class":40},[30,42507,38185],{"class":321},[30,42509,42510,42512,42514,42516,42518,42520,42522,42524,42526,42528,42530,42532,42534,42536,42538],{"class":32,"line":9999},[30,42511,42367],{"class":321},[30,42513,38595],{"class":40},[30,42515,698],{"class":321},[30,42517,21230],{"class":40},[30,42519,42376],{"class":321},[30,42521,938],{"class":40},[30,42523,698],{"class":321},[30,42525,31639],{"class":40},[30,42527,42385],{"class":321},[30,42529,1120],{"class":40},[30,42531,698],{"class":321},[30,42533,523],{"class":40},[30,42535,42394],{"class":321},[30,42537,523],{"class":40},[30,42539,38185],{"class":321},[30,42541,42542,42544,42546,42548,42550,42552,42554,42556,42558,42560,42562,42564,42566,42568,42570],{"class":32,"line":10005},[30,42543,42367],{"class":321},[30,42545,38595],{"class":40},[30,42547,698],{"class":321},[30,42549,32208],{"class":40},[30,42551,42376],{"class":321},[30,42553,32208],{"class":40},[30,42555,698],{"class":321},[30,42557,35008],{"class":40},[30,42559,42385],{"class":321},[30,42561,1120],{"class":40},[30,42563,698],{"class":321},[30,42565,523],{"class":40},[30,42567,42394],{"class":321},[30,42569,523],{"class":40},[30,42571,38185],{"class":321},[30,42573,42574,42576,42578,42580,42582,42584,42586,42588,42591,42593,42595,42597,42599,42601,42603],{"class":32,"line":10026},[30,42575,42367],{"class":321},[30,42577,38595],{"class":40},[30,42579,698],{"class":321},[30,42581,938],{"class":40},[30,42583,42376],{"class":321},[30,42585,32208],{"class":40},[30,42587,698],{"class":321},[30,42589,42590],{"class":40},"288",[30,42592,42385],{"class":321},[30,42594,517],{"class":40},[30,42596,698],{"class":321},[30,42598,523],{"class":40},[30,42600,42394],{"class":321},[30,42602,523],{"class":40},[30,42604,38185],{"class":321},[30,42606,42607,42609,42612,42614,42616,42618,42620,42622,42625,42627,42629,42631,42633,42635,42637],{"class":32,"line":10032},[30,42608,42367],{"class":321},[30,42610,42611],{"class":40},"528",[30,42613,698],{"class":321},[30,42615,35008],{"class":40},[30,42617,42376],{"class":321},[30,42619,21230],{"class":40},[30,42621,698],{"class":321},[30,42623,42624],{"class":40},"320",[30,42626,42385],{"class":321},[30,42628,517],{"class":40},[30,42630,698],{"class":321},[30,42632,32208],{"class":40},[30,42634,42394],{"class":321},[30,42636,32208],{"class":40},[30,42638,38185],{"class":321},[30,42640,42641,42643,42645,42647,42649,42651,42653,42655,42657,42659,42661,42663,42665],{"class":32,"line":10046},[30,42642,38235],{"class":321},[30,42644,31012],{"class":5398},[30,42646,367],{"class":317},[30,42648,392],{"class":40},[30,42650,698],{"class":321},[30,42652,31067],{"class":5398},[30,42654,367],{"class":317},[30,42656,398],{"class":40},[30,42658,698],{"class":321},[30,42660,31021],{"class":5398},[30,42662,367],{"class":317},[30,42664,537],{"class":40},[30,42666,328],{"class":321},[30,42668,42669],{"class":32,"line":10052},[30,42670,38264],{"class":321},[30,42672,42673,42675,42678,42680],{"class":32,"line":10079},[30,42674,30983],{"class":40},[30,42676,42677],{"class":321},".b5",[30,42679,367],{"class":317},[30,42681,38147],{"class":321},[30,42683,42684,42686,42689,42691,42693,42695,42697,42699,42701,42703,42705,42707,42709,42711,42713],{"class":32,"line":10088},[30,42685,42367],{"class":321},[30,42687,42688],{"class":40},"832",[30,42690,698],{"class":321},[30,42692,35008],{"class":40},[30,42694,42376],{"class":321},[30,42696,21230],{"class":40},[30,42698,698],{"class":321},[30,42700,42624],{"class":40},[30,42702,42385],{"class":321},[30,42704,517],{"class":40},[30,42706,698],{"class":321},[30,42708,32208],{"class":40},[30,42710,42394],{"class":321},[30,42712,32208],{"class":40},[30,42714,38185],{"class":321},[30,42716,42717,42719,42721,42723,42725,42727,42729,42731,42733,42735,42737,42739,42741,42743,42745],{"class":32,"line":10094},[30,42718,42367],{"class":321},[30,42720,42688],{"class":40},[30,42722,698],{"class":321},[30,42724,35078],{"class":40},[30,42726,42376],{"class":321},[30,42728,42297],{"class":40},[30,42730,698],{"class":321},[30,42732,35078],{"class":40},[30,42734,42385],{"class":321},[30,42736,927],{"class":40},[30,42738,698],{"class":321},[30,42740,32208],{"class":40},[30,42742,42394],{"class":321},[30,42744,32208],{"class":40},[30,42746,38185],{"class":321},[30,42748,42749,42752,42754,42756,42758],{"class":32,"line":10102},[30,42750,42751],{"class":321},"            nn.AdaptiveAvgPool2d((",[30,42753,537],{"class":40},[30,42755,698],{"class":321},[30,42757,537],{"class":40},[30,42759,42760],{"class":321},")),\n",[30,42762,42763],{"class":32,"line":10107},[30,42764,38928],{"class":321},[30,42766,42767,42769,42772,42774,42776],{"class":32,"line":16786},[30,42768,38933],{"class":321},[30,42770,42771],{"class":40},"1024",[30,42773,698],{"class":321},[30,42775,766],{"class":40},[30,42777,328],{"class":321},[30,42779,42780],{"class":32,"line":16792},[30,42781,38264],{"class":321},[30,42783,42784],{"class":32,"line":16815},[30,42785,42786],{"class":379},"        # 对模型参数初始化\n",[30,42788,42789,42791,42793,42795,42797],{"class":32,"line":16821},[30,42790,3585],{"class":317},[30,42792,39006],{"class":321},[30,42794,26181],{"class":317},[30,42796,39011],{"class":40},[30,42798,39014],{"class":321},[30,42800,42801,42803,42805],{"class":32,"line":16844},[30,42802,4824],{"class":317},[30,42804,39026],{"class":40},[30,42806,39029],{"class":321},[30,42808,42809,42811,42814,42816,42819,42821,42823,42825,42827],{"class":32,"line":16858},[30,42810,39039],{"class":321},[30,42812,42813],{"class":5398},"mode",[30,42815,367],{"class":317},[30,42817,42818],{"class":74},"'fan_out'",[30,42820,698],{"class":321},[30,42822,39042],{"class":5398},[30,42824,367],{"class":317},[30,42826,39047],{"class":74},[30,42828,328],{"class":321},[30,42830,42831],{"class":32,"line":16878},[30,42832,42833],{"class":379},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[30,42835,42836],{"class":32,"line":16884},[30,42837,42838],{"class":379},"                # ② mode = 'fan_out'决定使用的fan值：\n",[30,42840,42841],{"class":32,"line":16895},[30,42842,42843],{"class":379},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[30,42845,42846],{"class":32,"line":16918},[30,42847,42848],{"class":379},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[30,42850,42851],{"class":32,"line":16940},[30,42852,42853],{"class":379},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[30,42855,42856],{"class":32,"line":16945},[30,42857,42858],{"class":379},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[30,42860,42861,42863,42865,42867,42869,42871],{"class":32,"line":16951},[30,42862,39059],{"class":317},[30,42864,39062],{"class":321},[30,42866,39065],{"class":317},[30,42868,39068],{"class":317},[30,42870,39071],{"class":40},[30,42872,3921],{"class":321},[30,42874,42875,42877,42879],{"class":32,"line":16965},[30,42876,39083],{"class":321},[30,42878,511],{"class":40},[30,42880,328],{"class":321},[30,42882,42883,42886,42888],{"class":32,"line":16978},[30,42884,42885],{"class":317},"                elif",[30,42887,39026],{"class":40},[30,42889,39102],{"class":321},[30,42891,42892,42895,42897,42899,42901],{"class":32,"line":16983},[30,42893,42894],{"class":321},"                    nn.init.normal_(m.weight,",[30,42896,511],{"class":40},[30,42898,698],{"class":321},[30,42900,39124],{"class":40},[30,42902,328],{"class":321},[30,42904,42905,42908,42910,42912,42914,42916],{"class":32,"line":16997},[30,42906,42907],{"class":317},"                    if",[30,42909,39062],{"class":321},[30,42911,39065],{"class":317},[30,42913,39068],{"class":317},[30,42915,39071],{"class":40},[30,42917,3921],{"class":321},[30,42919,42920,42923,42925],{"class":32,"line":17002},[30,42921,42922],{"class":321},"                        nn.init.constant_(m.bias,",[30,42924,511],{"class":40},[30,42926,328],{"class":321},[30,42928,42929],{"class":32,"line":17008},[30,42930,35303],{"class":379},[30,42932,42933,42935,42937],{"class":32,"line":17013},[30,42934,30939],{"class":317},[30,42936,31231],{"class":36},[30,42938,31234],{"class":321},[30,42940,42941,42943,42945,42947],{"class":32,"line":17027},[30,42942,31239],{"class":321},[30,42944,367],{"class":317},[30,42946,30961],{"class":40},[30,42948,42949],{"class":321},".b1(x)\n",[30,42951,42952,42954,42956,42958],{"class":32,"line":17032},[30,42953,31239],{"class":321},[30,42955,367],{"class":317},[30,42957,30961],{"class":40},[30,42959,42960],{"class":321},".b2(x)\n",[30,42962,42963,42965,42967,42969],{"class":32,"line":17037},[30,42964,31239],{"class":321},[30,42966,367],{"class":317},[30,42968,30961],{"class":40},[30,42970,42971],{"class":321},".b3(x)\n",[30,42973,42974,42976,42978,42980],{"class":32,"line":17051},[30,42975,31239],{"class":321},[30,42977,367],{"class":317},[30,42979,30961],{"class":40},[30,42981,42982],{"class":321},".b4(x)\n",[30,42984,42985,42987,42989,42991],{"class":32,"line":17063},[30,42986,31239],{"class":321},[30,42988,367],{"class":317},[30,42990,30961],{"class":40},[30,42992,42993],{"class":321},".b5(x)\n",[30,42995,42996,42998],{"class":32,"line":17068},[30,42997,14934],{"class":317},[30,42999,31347],{"class":321},[30,43001,43002],{"class":32,"line":17081},[30,43003,2582],{"emptyLinePlaceholder":245},[30,43005,43006],{"class":32,"line":17086},[30,43007,43008],{"class":379},"# 模型展示\n",[30,43010,43011,43013,43015,43017,43019],{"class":32,"line":17091},[30,43012,1717],{"class":317},[30,43014,31358],{"class":40},[30,43016,3131],{"class":317},[30,43018,31363],{"class":74},[30,43020,3921],{"class":321},[30,43022,43023,43025,43027,43029,43031,43033,43035,43037,43039],{"class":32,"line":17096},[30,43024,31375],{"class":321},[30,43026,367],{"class":317},[30,43028,30589],{"class":321},[30,43030,31382],{"class":74},[30,43032,1887],{"class":317},[30,43034,31387],{"class":321},[30,43036,1884],{"class":317},[30,43038,30614],{"class":74},[30,43040,328],{"class":321},[30,43042,43043,43045,43047],{"class":32,"line":17109},[30,43044,31427],{"class":321},[30,43046,367],{"class":317},[30,43048,43049],{"class":321},"GoogLeNet(Inception).to(device)\n",[30,43051,43052,43054,43056,43058,43060,43062,43064,43066],{"class":32,"line":17114},[30,43053,31437],{"class":40},[30,43055,31440],{"class":321},[30,43057,537],{"class":40},[30,43059,698],{"class":321},[30,43061,31639],{"class":40},[30,43063,698],{"class":321},[30,43065,31639],{"class":40},[30,43067,31453],{"class":321},[271,43069,43070],{"start":44},[150,43071,39321],{},[20,43073,43075],{"className":30516,"code":43074,"language":30518,"meta":25,"style":25},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=30)\n    matplot_acc_loss(train_process)\n",[27,43076,43077,43083,43089,43099,43105,43115,43125,43135,43145,43155,43159,43170,43180,43184,43188,43192,43200,43212,43222,43238,43248,43280,43294,43304,43314,43318,43328,43342,43352,43362,43372,43378,43382,43386,43390,43394,43398,43406,43426,43430,43434,43438,43442,43446,43462,43466,43470,43478,43482,43486,43494,43498,43502,43506,43514,43518,43522,43526,43530,43538,43542,43550,43554,43562,43566,43574,43578,43586,43590,43594,43602,43606,43610,43614,43626,43650,43664,43668,43672,43676,43684,43688,43696,43700,43708,43712,43720,43724,43732,43736,43744,43748,43760,43764,43772,43776,43784,43788,43792,43796,43800,43808,43812,43828,43832,43840,43844,43848,43852,43856,43860,43864,43868,43884,43888,43900,43904,43916,43920,43932,43936,43944,43948,43956,43960,43964,43968,43974,43978,43986,43990,44006,44010,44018,44022,44038,44050,44054,44066,44070,44074,44082,44086,44090,44098,44102,44110,44114,44122,44126,44130,44172,44214,44218,44222,44238,44242,44258,44262,44266,44274,44278,44282,44294,44332,44336,44340,44348,44352,44366,44376,44382,44388,44394,44400,44404,44408,44414,44418,44422,44430,44434,44452,44456,44460,44464,44480,44484,44488,44492,44496,44500,44520,44540,44544,44548,44552,44560,44568,44572,44588,44608,44628,44632,44636,44644,44652,44656,44660,44664,44676,44680,44690,44698,44715],{"__ignoreMap":25},[30,43078,43079,43081],{"class":32,"line":33},[30,43080,30530],{"class":317},[30,43082,31960],{"class":321},[30,43084,43085,43087],{"class":32,"line":44},[30,43086,30530],{"class":317},[30,43088,31967],{"class":321},[30,43090,43091,43093,43095,43097],{"class":32,"line":52},[30,43092,30530],{"class":317},[30,43094,31978],{"class":321},[30,43096,31521],{"class":317},[30,43098,31983],{"class":321},[30,43100,43101,43103],{"class":32,"line":60},[30,43102,30530],{"class":317},[30,43104,30533],{"class":321},[30,43106,43107,43109,43111,43113],{"class":32,"line":68},[30,43108,30875],{"class":317},[30,43110,31553],{"class":321},[30,43112,30530],{"class":317},[30,43114,32000],{"class":321},[30,43116,43117,43119,43121,43123],{"class":32,"line":80},[30,43118,30875],{"class":317},[30,43120,31506],{"class":321},[30,43122,30530],{"class":317},[30,43124,31511],{"class":321},[30,43126,43127,43129,43131,43133],{"class":32,"line":88},[30,43128,30875],{"class":317},[30,43130,31536],{"class":321},[30,43132,30530],{"class":317},[30,43134,31541],{"class":321},[30,43136,43137,43139,43141,43143],{"class":32,"line":96},[30,43138,30530],{"class":317},[30,43140,31553],{"class":321},[30,43142,31521],{"class":317},[30,43144,31558],{"class":321},[30,43146,43147,43149,43151,43153],{"class":32,"line":104},[30,43148,30530],{"class":317},[30,43150,31570],{"class":321},[30,43152,31521],{"class":317},[30,43154,31575],{"class":321},[30,43156,43157],{"class":32,"line":112},[30,43158,32045],{"class":379},[30,43160,43161,43163,43165,43167],{"class":32,"line":123},[30,43162,30875],{"class":317},[30,43164,32052],{"class":321},[30,43166,30530],{"class":317},[30,43168,43169],{"class":321}," GoogLeNet, Inception\n",[30,43171,43172,43174,43176,43178],{"class":32,"line":131},[30,43173,30875],{"class":317},[30,43175,30878],{"class":321},[30,43177,30530],{"class":317},[30,43179,30883],{"class":321},[30,43181,43182],{"class":32,"line":142},[30,43183,2582],{"emptyLinePlaceholder":245},[30,43185,43186],{"class":32,"line":1811},[30,43187,2582],{"emptyLinePlaceholder":245},[30,43189,43190],{"class":32,"line":1825},[30,43191,32080],{"class":379},[30,43193,43194,43196,43198],{"class":32,"line":1830},[30,43195,32085],{"class":317},[30,43197,32088],{"class":36},[30,43199,32091],{"class":321},[30,43201,43202,43204,43206,43208,43210],{"class":32,"line":1836},[30,43203,32096],{"class":321},[30,43205,367],{"class":317},[30,43207,31593],{"class":321},[30,43209,31601],{"class":74},[30,43211,31604],{"class":321},[30,43213,43214,43216,43218,43220],{"class":32,"line":1857},[30,43215,32109],{"class":5398},[30,43217,367],{"class":317},[30,43219,31614],{"class":40},[30,43221,31604],{"class":321},[30,43223,43224,43226,43228,43230,43232,43234,43236],{"class":32,"line":1862},[30,43225,32120],{"class":5398},[30,43227,367],{"class":317},[30,43229,31631],{"class":321},[30,43231,31634],{"class":5398},[30,43233,367],{"class":317},[30,43235,35587],{"class":40},[30,43237,31642],{"class":321},[30,43239,43240,43242,43244,43246],{"class":32,"line":1876},[30,43241,32137],{"class":5398},[30,43243,367],{"class":317},[30,43245,31614],{"class":40},[30,43247,328],{"class":321},[30,43249,43250,43252,43254,43256,43258,43260,43262,43264,43266,43268,43270,43272,43274,43276,43278],{"class":32,"line":1881},[30,43251,32148],{"class":321},[30,43253,367],{"class":317},[30,43255,32153],{"class":321},[30,43257,32156],{"class":40},[30,43259,322],{"class":321},[30,43261,32161],{"class":40},[30,43263,775],{"class":317},[30,43265,7540],{"class":40},[30,43267,32168],{"class":321},[30,43269,32156],{"class":40},[30,43271,322],{"class":321},[30,43273,32175],{"class":40},[30,43275,775],{"class":317},[30,43277,7540],{"class":40},[30,43279,32182],{"class":321},[30,43281,43282,43284,43286,43288,43290,43292],{"class":32,"line":1910},[30,43283,32187],{"class":321},[30,43285,367],{"class":317},[30,43287,32192],{"class":321},[30,43289,31675],{"class":5398},[30,43291,367],{"class":317},[30,43293,31680],{"class":321},[30,43295,43296,43298,43300,43302],{"class":32,"line":1915},[30,43297,32203],{"class":5398},[30,43299,367],{"class":317},[30,43301,517],{"class":40},[30,43303,31604],{"class":321},[30,43305,43306,43308,43310,43312],{"class":32,"line":1932},[30,43307,32215],{"class":5398},[30,43309,367],{"class":317},[30,43311,31614],{"class":40},[30,43313,31604],{"class":321},[30,43315,43316],{"class":32,"line":1937},[30,43317,32226],{"class":379},[30,43319,43320,43322,43324,43326],{"class":32,"line":1942},[30,43321,32231],{"class":5398},[30,43323,367],{"class":317},[30,43325,715],{"class":40},[30,43327,328],{"class":321},[30,43329,43330,43332,43334,43336,43338,43340],{"class":32,"line":1947},[30,43331,32242],{"class":321},[30,43333,367],{"class":317},[30,43335,31672],{"class":321},[30,43337,31675],{"class":5398},[30,43339,367],{"class":317},[30,43341,32253],{"class":321},[30,43343,43344,43346,43348,43350],{"class":32,"line":1961},[30,43345,32258],{"class":5398},[30,43347,367],{"class":317},[30,43349,517],{"class":40},[30,43351,31604],{"class":321},[30,43353,43354,43356,43358,43360],{"class":32,"line":1966},[30,43355,32269],{"class":5398},[30,43357,367],{"class":317},[30,43359,31614],{"class":40},[30,43361,31604],{"class":321},[30,43363,43364,43366,43368,43370],{"class":32,"line":2759},[30,43365,32280],{"class":5398},[30,43367,367],{"class":317},[30,43369,715],{"class":40},[30,43371,328],{"class":321},[30,43373,43374,43376],{"class":32,"line":2773},[30,43375,4272],{"class":317},[30,43377,32293],{"class":321},[30,43379,43380],{"class":32,"line":2781},[30,43381,2582],{"emptyLinePlaceholder":245},[30,43383,43384],{"class":32,"line":2786},[30,43385,32302],{"class":379},[30,43387,43388],{"class":32,"line":2792},[30,43389,32307],{"class":379},[30,43391,43392],{"class":32,"line":2798},[30,43393,2582],{"emptyLinePlaceholder":245},[30,43395,43396],{"class":32,"line":2803},[30,43397,32316],{"class":379},[30,43399,43400,43402,43404],{"class":32,"line":8130},[30,43401,32085],{"class":317},[30,43403,32323],{"class":36},[30,43405,32326],{"class":321},[30,43407,43408,43410,43412,43414,43416,43418,43420,43422,43424],{"class":32,"line":8154},[30,43409,31375],{"class":321},[30,43411,367],{"class":317},[30,43413,30589],{"class":321},[30,43415,31382],{"class":74},[30,43417,1887],{"class":317},[30,43419,31387],{"class":321},[30,43421,1884],{"class":317},[30,43423,32345],{"class":74},[30,43425,328],{"class":321},[30,43427,43428],{"class":32,"line":8159},[30,43429,2582],{"emptyLinePlaceholder":245},[30,43431,43432],{"class":32,"line":8165},[30,43433,2582],{"emptyLinePlaceholder":245},[30,43435,43436],{"class":32,"line":8192},[30,43437,32360],{"class":379},[30,43439,43440],{"class":32,"line":8197},[30,43441,32365],{"class":379},[30,43443,43444],{"class":32,"line":8203},[30,43445,32370],{"class":379},[30,43447,43448,43450,43452,43454,43456,43458,43460],{"class":32,"line":8215},[30,43449,32375],{"class":321},[30,43451,367],{"class":317},[30,43453,32380],{"class":321},[30,43455,32383],{"class":5398},[30,43457,367],{"class":317},[30,43459,32388],{"class":40},[30,43461,328],{"class":321},[30,43463,43464],{"class":32,"line":8227},[30,43465,2582],{"emptyLinePlaceholder":245},[30,43467,43468],{"class":32,"line":8239},[30,43469,32399],{"class":379},[30,43471,43472,43474,43476],{"class":32,"line":9898},[30,43473,32404],{"class":321},[30,43475,367],{"class":317},[30,43477,32409],{"class":321},[30,43479,43480],{"class":32,"line":9923},[30,43481,2582],{"emptyLinePlaceholder":245},[30,43483,43484],{"class":32,"line":9946},[30,43485,32418],{"class":379},[30,43487,43488,43490,43492],{"class":32,"line":9970},[30,43489,31427],{"class":321},[30,43491,367],{"class":317},[30,43493,32427],{"class":321},[30,43495,43496],{"class":32,"line":9975},[30,43497,32432],{"class":379},[30,43499,43500],{"class":32,"line":9980},[30,43501,32437],{"class":379},[30,43503,43504],{"class":32,"line":9985},[30,43505,32442],{"class":379},[30,43507,43508,43510,43512],{"class":32,"line":9994},[30,43509,32447],{"class":321},[30,43511,367],{"class":317},[30,43513,32452],{"class":321},[30,43515,43516],{"class":32,"line":9999},[30,43517,2582],{"emptyLinePlaceholder":245},[30,43519,43520],{"class":32,"line":10005},[30,43521,2582],{"emptyLinePlaceholder":245},[30,43523,43524],{"class":32,"line":10026},[30,43525,32465],{"class":379},[30,43527,43528],{"class":32,"line":10032},[30,43529,32470],{"class":379},[30,43531,43532,43534,43536],{"class":32,"line":10046},[30,43533,32475],{"class":321},[30,43535,367],{"class":317},[30,43537,32480],{"class":40},[30,43539,43540],{"class":32,"line":10052},[30,43541,32485],{"class":379},[30,43543,43544,43546,43548],{"class":32,"line":10079},[30,43545,32490],{"class":321},[30,43547,367],{"class":317},[30,43549,32495],{"class":321},[30,43551,43552],{"class":32,"line":10088},[30,43553,32500],{"class":379},[30,43555,43556,43558,43560],{"class":32,"line":10094},[30,43557,32505],{"class":321},[30,43559,367],{"class":317},[30,43561,32495],{"class":321},[30,43563,43564],{"class":32,"line":10102},[30,43565,32514],{"class":379},[30,43567,43568,43570,43572],{"class":32,"line":10107},[30,43569,32519],{"class":321},[30,43571,367],{"class":317},[30,43573,32495],{"class":321},[30,43575,43576],{"class":32,"line":16786},[30,43577,32528],{"class":379},[30,43579,43580,43582,43584],{"class":32,"line":16792},[30,43581,32533],{"class":321},[30,43583,367],{"class":317},[30,43585,32495],{"class":321},[30,43587,43588],{"class":32,"line":16815},[30,43589,2582],{"emptyLinePlaceholder":245},[30,43591,43592],{"class":32,"line":16821},[30,43593,32546],{"class":379},[30,43595,43596,43598,43600],{"class":32,"line":16844},[30,43597,32551],{"class":321},[30,43599,367],{"class":317},[30,43601,32556],{"class":321},[30,43603,43604],{"class":32,"line":16858},[30,43605,2582],{"emptyLinePlaceholder":245},[30,43607,43608],{"class":32,"line":16878},[30,43609,2582],{"emptyLinePlaceholder":245},[30,43611,43612],{"class":32,"line":16884},[30,43613,32569],{"class":379},[30,43615,43616,43618,43620,43622,43624],{"class":32,"line":16895},[30,43617,3383],{"class":317},[30,43619,32576],{"class":321},[30,43621,26181],{"class":317},[30,43623,32581],{"class":40},[30,43625,32584],{"class":321},[30,43627,43628,43630,43632,43634,43636,43638,43640,43642,43644,43646,43648],{"class":32,"line":16918},[30,43629,32589],{"class":40},[30,43631,322],{"class":321},[30,43633,32594],{"class":74},[30,43635,32597],{"class":40},[30,43637,904],{"class":74},[30,43639,32597],{"class":40},[30,43641,571],{"class":74},[30,43643,32606],{"class":321},[30,43645,852],{"class":317},[30,43647,537],{"class":40},[30,43649,30635],{"class":321},[30,43651,43652,43654,43656,43658,43660,43662],{"class":32,"line":16940},[30,43653,32589],{"class":40},[30,43655,322],{"class":321},[30,43657,32621],{"class":74},[30,43659,775],{"class":317},[30,43661,766],{"class":40},[30,43663,328],{"class":321},[30,43665,43666],{"class":32,"line":16945},[30,43667,2582],{"emptyLinePlaceholder":245},[30,43669,43670],{"class":32,"line":16951},[30,43671,32636],{"class":379},[30,43673,43674],{"class":32,"line":16965},[30,43675,32641],{"class":379},[30,43677,43678,43680,43682],{"class":32,"line":16978},[30,43679,32646],{"class":321},[30,43681,367],{"class":317},[30,43683,32480],{"class":40},[30,43685,43686],{"class":32,"line":16983},[30,43687,32655],{"class":379},[30,43689,43690,43692,43694],{"class":32,"line":16997},[30,43691,32660],{"class":321},[30,43693,367],{"class":317},[30,43695,3267],{"class":40},[30,43697,43698],{"class":32,"line":17002},[30,43699,32669],{"class":379},[30,43701,43702,43704,43706],{"class":32,"line":17008},[30,43703,32674],{"class":321},[30,43705,367],{"class":317},[30,43707,32480],{"class":40},[30,43709,43710],{"class":32,"line":17013},[30,43711,32683],{"class":379},[30,43713,43714,43716,43718],{"class":32,"line":17027},[30,43715,32688],{"class":321},[30,43717,367],{"class":317},[30,43719,3267],{"class":40},[30,43721,43722],{"class":32,"line":17032},[30,43723,32697],{"class":379},[30,43725,43726,43728,43730],{"class":32,"line":17037},[30,43727,32702],{"class":321},[30,43729,367],{"class":317},[30,43731,3267],{"class":40},[30,43733,43734],{"class":32,"line":17051},[30,43735,32711],{"class":379},[30,43737,43738,43740,43742],{"class":32,"line":17063},[30,43739,32716],{"class":321},[30,43741,367],{"class":317},[30,43743,3267],{"class":40},[30,43745,43746],{"class":32,"line":17068},[30,43747,32725],{"class":379},[30,43749,43750,43752,43754,43756,43758],{"class":32,"line":17081},[30,43751,3585],{"class":317},[30,43753,31739],{"class":321},[30,43755,26181],{"class":317},[30,43757,31744],{"class":40},[30,43759,32738],{"class":321},[30,43761,43762],{"class":32,"line":17086},[30,43763,32743],{"class":379},[30,43765,43766,43768,43770],{"class":32,"line":17091},[30,43767,32748],{"class":321},[30,43769,367],{"class":317},[30,43771,32753],{"class":321},[30,43773,43774],{"class":32,"line":17096},[30,43775,32758],{"class":379},[30,43777,43778,43780,43782],{"class":32,"line":17109},[30,43779,32763],{"class":321},[30,43781,367],{"class":317},[30,43783,32768],{"class":321},[30,43785,43786],{"class":32,"line":17114},[30,43787,32774],{"class":379},[30,43789,43790],{"class":32,"line":32771},[30,43791,32780],{"class":321},[30,43793,43794],{"class":32,"line":32777},[30,43795,32786],{"class":379},[30,43797,43798],{"class":32,"line":32783},[30,43799,32792],{"class":379},[30,43801,43802,43804,43806],{"class":32,"line":32789},[30,43803,32798],{"class":321},[30,43805,367],{"class":317},[30,43807,32803],{"class":321},[30,43809,43810],{"class":32,"line":32795},[30,43811,32809],{"class":379},[30,43813,43814,43816,43818,43820,43822,43824,43826],{"class":32,"line":32806},[30,43815,32815],{"class":321},[30,43817,367],{"class":317},[30,43819,32820],{"class":321},[30,43821,32823],{"class":5398},[30,43823,367],{"class":317},[30,43825,537],{"class":40},[30,43827,328],{"class":321},[30,43829,43830],{"class":32,"line":32812},[30,43831,32835],{"class":379},[30,43833,43834,43836,43838],{"class":32,"line":32832},[30,43835,32841],{"class":321},[30,43837,367],{"class":317},[30,43839,32846],{"class":321},[30,43841,43842],{"class":32,"line":32838},[30,43843,32852],{"class":379},[30,43845,43846],{"class":32,"line":32849},[30,43847,32858],{"class":321},[30,43849,43850],{"class":32,"line":32855},[30,43851,32864],{"class":379},[30,43853,43854],{"class":32,"line":32861},[30,43855,32870],{"class":321},[30,43857,43858],{"class":32,"line":32867},[30,43859,32876],{"class":379},[30,43861,43862],{"class":32,"line":32873},[30,43863,32882],{"class":321},[30,43865,43866],{"class":32,"line":32879},[30,43867,32888],{"class":379},[30,43869,43870,43872,43874,43876,43878,43880,43882],{"class":32,"line":32885},[30,43871,32894],{"class":321},[30,43873,9659],{"class":317},[30,43875,32899],{"class":321},[30,43877,775],{"class":317},[30,43879,32904],{"class":321},[30,43881,511],{"class":40},[30,43883,328],{"class":321},[30,43885,43886],{"class":32,"line":32891},[30,43887,32914],{"class":379},[30,43889,43890,43892,43894,43896,43898],{"class":32,"line":32911},[30,43891,32920],{"class":321},[30,43893,9659],{"class":317},[30,43895,32925],{"class":321},[30,43897,3131],{"class":317},[30,43899,32930],{"class":321},[30,43901,43902],{"class":32,"line":32917},[30,43903,32936],{"class":379},[30,43905,43906,43908,43910,43912,43914],{"class":32,"line":32933},[30,43907,32942],{"class":321},[30,43909,9659],{"class":317},[30,43911,32904],{"class":321},[30,43913,511],{"class":40},[30,43915,328],{"class":321},[30,43917,43918],{"class":32,"line":32939},[30,43919,32956],{"class":379},[30,43921,43922,43924,43926,43928,43930],{"class":32,"line":32953},[30,43923,3585],{"class":317},[30,43925,32964],{"class":321},[30,43927,26181],{"class":317},[30,43929,31744],{"class":40},[30,43931,32971],{"class":321},[30,43933,43934],{"class":32,"line":32959},[30,43935,32977],{"class":379},[30,43937,43938,43940,43942],{"class":32,"line":32974},[30,43939,32748],{"class":321},[30,43941,367],{"class":317},[30,43943,32753],{"class":321},[30,43945,43946],{"class":32,"line":32980},[30,43947,32992],{"class":379},[30,43949,43950,43952,43954],{"class":32,"line":32989},[30,43951,32763],{"class":321},[30,43953,367],{"class":317},[30,43955,32768],{"class":321},[30,43957,43958],{"class":32,"line":32995},[30,43959,33007],{"class":379},[30,43961,43962],{"class":32,"line":33004},[30,43963,33013],{"class":321},[30,43965,43966],{"class":32,"line":33010},[30,43967,36494],{"class":379},[30,43969,43970,43972],{"class":32,"line":33016},[30,43971,33019],{"class":317},[30,43973,33022],{"class":321},[30,43975,43976],{"class":32,"line":33025},[30,43977,33028],{"class":379},[30,43979,43980,43982,43984],{"class":32,"line":33031},[30,43981,36509],{"class":321},[30,43983,367],{"class":317},[30,43985,32803],{"class":321},[30,43987,43988],{"class":32,"line":33042},[30,43989,33045],{"class":379},[30,43991,43992,43994,43996,43998,44000,44002,44004],{"class":32,"line":33048},[30,43993,36522],{"class":321},[30,43995,367],{"class":317},[30,43997,32820],{"class":321},[30,43999,32823],{"class":5398},[30,44001,367],{"class":317},[30,44003,537],{"class":40},[30,44005,328],{"class":321},[30,44007,44008],{"class":32,"line":33067},[30,44009,33070],{"class":379},[30,44011,44012,44014,44016],{"class":32,"line":33073},[30,44013,36543],{"class":321},[30,44015,367],{"class":317},[30,44017,32846],{"class":321},[30,44019,44020],{"class":32,"line":33084},[30,44021,33087],{"class":379},[30,44023,44024,44026,44028,44030,44032,44034,44036],{"class":32,"line":33090},[30,44025,36556],{"class":321},[30,44027,9659],{"class":317},[30,44029,36561],{"class":321},[30,44031,775],{"class":317},[30,44033,32904],{"class":321},[30,44035,511],{"class":40},[30,44037,328],{"class":321},[30,44039,44040,44042,44044,44046,44048],{"class":32,"line":33110},[30,44041,36574],{"class":321},[30,44043,9659],{"class":317},[30,44045,32925],{"class":321},[30,44047,3131],{"class":317},[30,44049,32930],{"class":321},[30,44051,44052],{"class":32,"line":33126},[30,44053,36587],{"class":379},[30,44055,44056,44058,44060,44062,44064],{"class":32,"line":33132},[30,44057,36592],{"class":321},[30,44059,9659],{"class":317},[30,44061,32904],{"class":321},[30,44063,511],{"class":40},[30,44065,328],{"class":321},[30,44067,44068],{"class":32,"line":33146},[30,44069,33149],{"class":379},[30,44071,44072],{"class":32,"line":33152},[30,44073,33155],{"class":379},[30,44075,44076,44078,44080],{"class":32,"line":33158},[30,44077,33161],{"class":321},[30,44079,904],{"class":317},[30,44081,33166],{"class":321},[30,44083,44084],{"class":32,"line":33169},[30,44085,33172],{"class":379},[30,44087,44088],{"class":32,"line":33175},[30,44089,33178],{"class":379},[30,44091,44092,44094,44096],{"class":32,"line":33181},[30,44093,33184],{"class":321},[30,44095,904],{"class":317},[30,44097,33166],{"class":321},[30,44099,44100],{"class":32,"line":33191},[30,44101,33194],{"class":379},[30,44103,44104,44106,44108],{"class":32,"line":33197},[30,44105,33200],{"class":321},[30,44107,904],{"class":317},[30,44109,33205],{"class":321},[30,44111,44112],{"class":32,"line":33208},[30,44113,33211],{"class":379},[30,44115,44116,44118,44120],{"class":32,"line":33214},[30,44117,33217],{"class":321},[30,44119,904],{"class":317},[30,44121,33205],{"class":321},[30,44123,44124],{"class":32,"line":33224},[30,44125,2582],{"emptyLinePlaceholder":245},[30,44127,44128],{"class":32,"line":33229},[30,44129,33232],{"class":379},[30,44131,44132,44134,44136,44138,44140,44142,44144,44146,44148,44150,44152,44154,44156,44158,44160,44162,44164,44166,44168,44170],{"class":32,"line":33235},[30,44133,32589],{"class":40},[30,44135,322],{"class":321},[30,44137,3774],{"class":74},[30,44139,32597],{"class":40},[30,44141,33246],{"class":74},[30,44143,1216],{"class":40},[30,44145,33251],{"class":317},[30,44147,1266],{"class":40},[30,44149,33256],{"class":74},[30,44151,1216],{"class":40},[30,44153,33251],{"class":317},[30,44155,1266],{"class":40},[30,44157,3774],{"class":74},[30,44159,33267],{"class":321},[30,44161,852],{"class":317},[30,44163,537],{"class":40},[30,44165,33274],{"class":321},[30,44167,852],{"class":317},[30,44169,537],{"class":40},[30,44171,33281],{"class":321},[30,44173,44174,44176,44178,44180,44182,44184,44186,44188,44190,44192,44194,44196,44198,44200,44202,44204,44206,44208,44210,44212],{"class":32,"line":33284},[30,44175,32589],{"class":40},[30,44177,322],{"class":321},[30,44179,3774],{"class":74},[30,44181,32597],{"class":40},[30,44183,33295],{"class":74},[30,44185,1216],{"class":40},[30,44187,33251],{"class":317},[30,44189,1266],{"class":40},[30,44191,33304],{"class":74},[30,44193,1216],{"class":40},[30,44195,33251],{"class":317},[30,44197,1266],{"class":40},[30,44199,3774],{"class":74},[30,44201,33315],{"class":321},[30,44203,852],{"class":317},[30,44205,537],{"class":40},[30,44207,33322],{"class":321},[30,44209,852],{"class":317},[30,44211,537],{"class":40},[30,44213,33281],{"class":321},[30,44215,44216],{"class":32,"line":33331},[30,44217,2582],{"emptyLinePlaceholder":245},[30,44219,44220],{"class":32,"line":33336},[30,44221,33339],{"class":379},[30,44223,44224,44226,44228,44230,44232,44234,44236],{"class":32,"line":33342},[30,44225,2679],{"class":317},[30,44227,33347],{"class":321},[30,44229,852],{"class":317},[30,44231,537],{"class":40},[30,44233,1260],{"class":321},[30,44235,1280],{"class":317},[30,44237,33358],{"class":321},[30,44239,44240],{"class":32,"line":33361},[30,44241,33364],{"class":379},[30,44243,44244,44246,44248,44250,44252,44254,44256],{"class":32,"line":33367},[30,44245,33370],{"class":321},[30,44247,361],{"class":40},[30,44249,367],{"class":317},[30,44251,33377],{"class":321},[30,44253,852],{"class":317},[30,44255,537],{"class":40},[30,44257,33384],{"class":321},[30,44259,44260],{"class":32,"line":33387},[30,44261,33390],{"class":379},[30,44263,44264],{"class":32,"line":33393},[30,44265,33396],{"class":379},[30,44267,44268,44270,44272],{"class":32,"line":33399},[30,44269,33402],{"class":321},[30,44271,367],{"class":317},[30,44273,32452],{"class":321},[30,44275,44276],{"class":32,"line":33409},[30,44277,2582],{"emptyLinePlaceholder":245},[30,44279,44280],{"class":32,"line":33414},[30,44281,33417],{"class":379},[30,44283,44284,44286,44288,44290,44292],{"class":32,"line":33420},[30,44285,33423],{"class":321},[30,44287,367],{"class":317},[30,44289,33428],{"class":321},[30,44291,852],{"class":317},[30,44293,33433],{"class":321},[30,44295,44296,44298,44300,44302,44304,44306,44308,44310,44312,44314,44316,44318,44320,44322,44324,44326,44328,44330],{"class":32,"line":33436},[30,44297,32589],{"class":40},[30,44299,322],{"class":321},[30,44301,33443],{"class":74},[30,44303,1216],{"class":40},[30,44305,33448],{"class":317},[30,44307,1266],{"class":40},[30,44309,864],{"class":74},[30,44311,1216],{"class":40},[30,44313,33448],{"class":317},[30,44315,1266],{"class":40},[30,44317,33461],{"class":74},[30,44319,33464],{"class":321},[30,44321,33467],{"class":317},[30,44323,1227],{"class":40},[30,44325,33472],{"class":321},[30,44327,648],{"class":317},[30,44329,1227],{"class":40},[30,44331,30635],{"class":321},[30,44333,44334],{"class":32,"line":33481},[30,44335,36871],{"class":379},[30,44337,44338],{"class":32,"line":33487},[30,44339,36876],{"class":379},[30,44341,44342,44344,44346],{"class":32,"line":33493},[30,44343,36881],{"class":321},[30,44345,33505],{"class":74},[30,44347,328],{"class":321},[30,44349,44350],{"class":32,"line":33499},[30,44351,33525],{"class":379},[30,44353,44354,44356,44358,44360,44362,44364],{"class":32,"line":33510},[30,44355,33531],{"class":321},[30,44357,367],{"class":317},[30,44359,33536],{"class":321},[30,44361,33539],{"class":5398},[30,44363,367],{"class":317},[30,44365,1732],{"class":321},[30,44367,44368,44370,44372,44374],{"class":32,"line":33516},[30,44369,33549],{"class":74},[30,44371,1179],{"class":321},[30,44373,33554],{"class":40},[30,44375,33557],{"class":321},[30,44377,44378,44380],{"class":32,"line":33522},[30,44379,33563],{"class":74},[30,44381,33566],{"class":321},[30,44383,44384,44386],{"class":32,"line":33528},[30,44385,33572],{"class":74},[30,44387,33575],{"class":321},[30,44389,44390,44392],{"class":32,"line":33546},[30,44391,33581],{"class":74},[30,44393,33584],{"class":321},[30,44395,44396,44398],{"class":32,"line":33560},[30,44397,33590],{"class":74},[30,44399,33593],{"class":321},[30,44401,44402],{"class":32,"line":33569},[30,44403,33599],{"class":321},[30,44405,44406],{"class":32,"line":33578},[30,44407,33605],{"class":379},[30,44409,44410,44412],{"class":32,"line":33587},[30,44411,4272],{"class":317},[30,44413,33613],{"class":321},[30,44415,44416],{"class":32,"line":33596},[30,44417,2582],{"emptyLinePlaceholder":245},[30,44419,44420],{"class":32,"line":33602},[30,44421,33624],{"class":379},[30,44423,44424,44426,44428],{"class":32,"line":33608},[30,44425,32085],{"class":317},[30,44427,33632],{"class":36},[30,44429,33635],{"class":321},[30,44431,44432],{"class":32,"line":33616},[30,44433,33641],{"class":379},[30,44435,44436,44438,44440,44442,44444,44446,44448,44450],{"class":32,"line":33621},[30,44437,33647],{"class":321},[30,44439,31831],{"class":5398},[30,44441,367],{"class":317},[30,44443,322],{"class":321},[30,44445,818],{"class":40},[30,44447,698],{"class":321},[30,44449,613],{"class":40},[30,44451,30635],{"class":321},[30,44453,44454],{"class":32,"line":33627},[30,44455,33667],{"class":379},[30,44457,44458],{"class":32,"line":33638},[30,44459,33673],{"class":379},[30,44461,44462],{"class":32,"line":33644},[30,44463,33679],{"class":379},[30,44465,44466,44468,44470,44472,44474,44476,44478],{"class":32,"line":33664},[30,44467,31865],{"class":321},[30,44469,537],{"class":40},[30,44471,698],{"class":321},[30,44473,398],{"class":40},[30,44475,698],{"class":321},[30,44477,537],{"class":40},[30,44479,328],{"class":321},[30,44481,44482],{"class":32,"line":33670},[30,44483,33702],{"class":379},[30,44485,44486],{"class":32,"line":33676},[30,44487,33708],{"class":379},[30,44489,44490],{"class":32,"line":33682},[30,44491,33714],{"class":379},[30,44493,44494],{"class":32,"line":33699},[30,44495,33720],{"class":379},[30,44497,44498],{"class":32,"line":33705},[30,44499,33726],{"class":379},[30,44501,44502,44504,44506,44508,44510,44512,44514,44516,44518],{"class":32,"line":33711},[30,44503,33732],{"class":321},[30,44505,33735],{"class":74},[30,44507,33738],{"class":321},[30,44509,33741],{"class":74},[30,44511,698],{"class":321},[30,44513,33746],{"class":5398},[30,44515,367],{"class":317},[30,44517,33751],{"class":74},[30,44519,328],{"class":321},[30,44521,44522,44524,44526,44528,44530,44532,44534,44536,44538],{"class":32,"line":33717},[30,44523,33732],{"class":321},[30,44525,33735],{"class":74},[30,44527,33763],{"class":321},[30,44529,33766],{"class":74},[30,44531,698],{"class":321},[30,44533,33746],{"class":5398},[30,44535,367],{"class":317},[30,44537,33775],{"class":74},[30,44539,328],{"class":321},[30,44541,44542],{"class":32,"line":33723},[30,44543,33783],{"class":379},[30,44545,44546],{"class":32,"line":33729},[30,44547,33789],{"class":321},[30,44549,44550],{"class":32,"line":33756},[30,44551,33795],{"class":379},[30,44553,44554,44556,44558],{"class":32,"line":33780},[30,44555,33801],{"class":321},[30,44557,33804],{"class":74},[30,44559,328],{"class":321},[30,44561,44562,44564,44566],{"class":32,"line":33786},[30,44563,33812],{"class":321},[30,44565,33815],{"class":74},[30,44567,328],{"class":321},[30,44569,44570],{"class":32,"line":33792},[30,44571,33823],{"class":379},[30,44573,44574,44576,44578,44580,44582,44584,44586],{"class":32,"line":33798},[30,44575,31865],{"class":321},[30,44577,537],{"class":40},[30,44579,698],{"class":321},[30,44581,398],{"class":40},[30,44583,698],{"class":321},[30,44585,398],{"class":40},[30,44587,328],{"class":321},[30,44589,44590,44592,44594,44596,44598,44600,44602,44604,44606],{"class":32,"line":33809},[30,44591,33732],{"class":321},[30,44593,33735],{"class":74},[30,44595,33850],{"class":321},[30,44597,33741],{"class":74},[30,44599,698],{"class":321},[30,44601,33746],{"class":5398},[30,44603,367],{"class":317},[30,44605,33861],{"class":74},[30,44607,328],{"class":321},[30,44609,44610,44612,44614,44616,44618,44620,44622,44624,44626],{"class":32,"line":33820},[30,44611,33732],{"class":321},[30,44613,33735],{"class":74},[30,44615,33873],{"class":321},[30,44617,33766],{"class":74},[30,44619,698],{"class":321},[30,44621,33746],{"class":5398},[30,44623,367],{"class":317},[30,44625,33884],{"class":74},[30,44627,328],{"class":321},[30,44629,44630],{"class":32,"line":33826},[30,44631,33892],{"class":379},[30,44633,44634],{"class":32,"line":33843},[30,44635,33789],{"class":321},[30,44637,44638,44640,44642],{"class":32,"line":33866},[30,44639,33801],{"class":321},[30,44641,33735],{"class":74},[30,44643,328],{"class":321},[30,44645,44646,44648,44650],{"class":32,"line":33889},[30,44647,33812],{"class":321},[30,44649,33914],{"class":74},[30,44651,328],{"class":321},[30,44653,44654],{"class":32,"line":33895},[30,44655,33922],{"class":321},[30,44657,44658],{"class":32,"line":33900},[30,44659,2582],{"emptyLinePlaceholder":245},[30,44661,44662],{"class":32,"line":33909},[30,44663,33933],{"class":379},[30,44665,44666,44668,44670,44672,44674],{"class":32,"line":33919},[30,44667,1717],{"class":317},[30,44669,31358],{"class":40},[30,44671,3131],{"class":317},[30,44673,31363],{"class":74},[30,44675,3921],{"class":321},[30,44677,44678],{"class":32,"line":33925},[30,44679,33952],{"class":379},[30,44681,44682,44685,44687],{"class":32,"line":33930},[30,44683,44684],{"class":321},"    GoogLeNet",[30,44686,367],{"class":317},[30,44688,44689],{"class":321},"GoogLeNet(Inception)\n",[30,44691,44692,44694,44696],{"class":32,"line":33936},[30,44693,33969],{"class":321},[30,44695,367],{"class":317},[30,44697,33974],{"class":321},[30,44699,44700,44702,44704,44707,44709,44711,44713],{"class":32,"line":33949},[30,44701,33531],{"class":321},[30,44703,367],{"class":317},[30,44705,44706],{"class":321},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[30,44708,33987],{"class":5398},[30,44710,367],{"class":317},[30,44712,1271],{"class":40},[30,44714,328],{"class":321},[30,44716,44717],{"class":32,"line":33955},[30,44718,33999],{"class":321},[271,44720,44721],{"start":52},[150,44722,40712],{},[20,44724,44726],{"className":30516,"code":44725,"language":30518,"meta":25,"style":25},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import GoogLeNet,Inception\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[27,44727,44728,44734,44744,44754,44758,44768,44779,44783,44787,44791,44799,44815,44825,44841,44851,44865,44869,44879,44889,44899,44905,44909,44913,44921,44925,44941,44949,44953,44957,44965,44973,44977,44981,44985,44989,44995,44999,45009,45017,45025,45029,45033,45037,45045,45049,45065,45069,45073,45077,45089,45093,45105,45109,45113,45125,45129,45139,45143,45147,45159,45163,45171,45175,45179,45187,45191,45199,45203,45207,45211,45215,45219,45235,45243,45247,45251,45299,45305,45309,45319,45327,45335,45339,45343,45347,45351,45359,45363,45379,45383,45391,45399],{"__ignoreMap":25},[30,44729,44730,44732],{"class":32,"line":33},[30,44731,30530],{"class":317},[30,44733,30533],{"class":321},[30,44735,44736,44738,44740,44742],{"class":32,"line":44},[30,44737,30530],{"class":317},[30,44739,31553],{"class":321},[30,44741,31521],{"class":317},[30,44743,31558],{"class":321},[30,44745,44746,44748,44750,44752],{"class":32,"line":52},[30,44747,30875],{"class":317},[30,44749,31536],{"class":321},[30,44751,30530],{"class":317},[30,44753,31541],{"class":321},[30,44755,44756],{"class":32,"line":60},[30,44757,34060],{"class":379},[30,44759,44760,44762,44764,44766],{"class":32,"line":68},[30,44761,30875],{"class":317},[30,44763,31506],{"class":321},[30,44765,30530],{"class":317},[30,44767,31511],{"class":321},[30,44769,44770,44772,44774,44776],{"class":32,"line":80},[30,44771,30875],{"class":317},[30,44773,32052],{"class":321},[30,44775,30530],{"class":317},[30,44777,44778],{"class":321}," GoogLeNet,Inception\n",[30,44780,44781],{"class":32,"line":88},[30,44782,2582],{"emptyLinePlaceholder":245},[30,44784,44785],{"class":32,"line":96},[30,44786,2582],{"emptyLinePlaceholder":245},[30,44788,44789],{"class":32,"line":104},[30,44790,34089],{"class":379},[30,44792,44793,44795,44797],{"class":32,"line":112},[30,44794,32085],{"class":317},[30,44796,34096],{"class":36},[30,44798,32091],{"class":321},[30,44800,44801,44803,44805,44807,44809,44811,44813],{"class":32,"line":123},[30,44802,34103],{"class":321},[30,44804,367],{"class":317},[30,44806,31593],{"class":321},[30,44808,31596],{"class":5398},[30,44810,367],{"class":317},[30,44812,31601],{"class":74},[30,44814,31604],{"class":321},[30,44816,44817,44819,44821,44823],{"class":32,"line":131},[30,44818,34120],{"class":5398},[30,44820,367],{"class":317},[30,44822,34125],{"class":40},[30,44824,31604],{"class":321},[30,44826,44827,44829,44831,44833,44835,44837,44839],{"class":32,"line":142},[30,44828,34132],{"class":5398},[30,44830,367],{"class":317},[30,44832,31631],{"class":321},[30,44834,31634],{"class":5398},[30,44836,367],{"class":317},[30,44838,35587],{"class":40},[30,44840,31642],{"class":321},[30,44842,44843,44845,44847,44849],{"class":32,"line":1811},[30,44844,34149],{"class":5398},[30,44846,367],{"class":317},[30,44848,31614],{"class":40},[30,44850,328],{"class":321},[30,44852,44853,44855,44857,44859,44861,44863],{"class":32,"line":1825},[30,44854,34160],{"class":321},[30,44856,367],{"class":317},[30,44858,31672],{"class":321},[30,44860,31675],{"class":5398},[30,44862,367],{"class":317},[30,44864,34171],{"class":321},[30,44866,44867],{"class":32,"line":1830},[30,44868,34176],{"class":379},[30,44870,44871,44873,44875,44877],{"class":32,"line":1836},[30,44872,34181],{"class":5398},[30,44874,367],{"class":317},[30,44876,537],{"class":40},[30,44878,31604],{"class":321},[30,44880,44881,44883,44885,44887],{"class":32,"line":1857},[30,44882,34192],{"class":5398},[30,44884,367],{"class":317},[30,44886,31614],{"class":40},[30,44888,31604],{"class":321},[30,44890,44891,44893,44895,44897],{"class":32,"line":1862},[30,44892,34203],{"class":5398},[30,44894,367],{"class":317},[30,44896,511],{"class":40},[30,44898,328],{"class":321},[30,44900,44901,44903],{"class":32,"line":1876},[30,44902,4272],{"class":317},[30,44904,34216],{"class":321},[30,44906,44907],{"class":32,"line":1881},[30,44908,2582],{"emptyLinePlaceholder":245},[30,44910,44911],{"class":32,"line":1910},[30,44912,34225],{"class":379},[30,44914,44915,44917,44919],{"class":32,"line":1915},[30,44916,32085],{"class":317},[30,44918,34232],{"class":36},[30,44920,34235],{"class":321},[30,44922,44923],{"class":32,"line":1932},[30,44924,34240],{"class":379},[30,44926,44927,44929,44931,44933,44935,44937,44939],{"class":32,"line":1937},[30,44928,31375],{"class":321},[30,44930,367],{"class":317},[30,44932,31382],{"class":74},[30,44934,1887],{"class":317},[30,44936,31387],{"class":321},[30,44938,1884],{"class":317},[30,44940,34257],{"class":74},[30,44942,44943,44945,44947],{"class":32,"line":1942},[30,44944,31427],{"class":321},[30,44946,367],{"class":317},[30,44948,32427],{"class":321},[30,44950,44951],{"class":32,"line":1947},[30,44952,2582],{"emptyLinePlaceholder":245},[30,44954,44955],{"class":32,"line":1961},[30,44956,34274],{"class":379},[30,44958,44959,44961,44963],{"class":32,"line":1966},[30,44960,34279],{"class":321},[30,44962,367],{"class":317},[30,44964,32480],{"class":40},[30,44966,44967,44969,44971],{"class":32,"line":2759},[30,44968,34288],{"class":321},[30,44970,367],{"class":317},[30,44972,3267],{"class":40},[30,44974,44975],{"class":32,"line":2773},[30,44976,2582],{"emptyLinePlaceholder":245},[30,44978,44979],{"class":32,"line":2781},[30,44980,34301],{"class":379},[30,44982,44983],{"class":32,"line":2786},[30,44984,34306],{"class":379},[30,44986,44987],{"class":32,"line":2792},[30,44988,34311],{"class":379},[30,44990,44991,44993],{"class":32,"line":2798},[30,44992,34316],{"class":317},[30,44994,33022],{"class":321},[30,44996,44997],{"class":32,"line":2803},[30,44998,34323],{"class":379},[30,45000,45001,45003,45005,45007],{"class":32,"line":8130},[30,45002,3585],{"class":317},[30,45004,34330],{"class":321},[30,45006,26181],{"class":317},[30,45008,34335],{"class":321},[30,45010,45011,45013,45015],{"class":32,"line":8154},[30,45012,34340],{"class":321},[30,45014,367],{"class":317},[30,45016,34345],{"class":321},[30,45018,45019,45021,45023],{"class":32,"line":8159},[30,45020,34350],{"class":321},[30,45022,367],{"class":317},[30,45024,34355],{"class":321},[30,45026,45027],{"class":32,"line":8165},[30,45028,34360],{"class":379},[30,45030,45031],{"class":32,"line":8192},[30,45032,33013],{"class":321},[30,45034,45035],{"class":32,"line":8197},[30,45036,34369],{"class":379},[30,45038,45039,45041,45043],{"class":32,"line":8203},[30,45040,32798],{"class":321},[30,45042,367],{"class":317},[30,45044,34378],{"class":321},[30,45046,45047],{"class":32,"line":8215},[30,45048,34383],{"class":379},[30,45050,45051,45053,45055,45057,45059,45061,45063],{"class":32,"line":8227},[30,45052,32815],{"class":321},[30,45054,367],{"class":317},[30,45056,32820],{"class":321},[30,45058,32823],{"class":5398},[30,45060,367],{"class":317},[30,45062,537],{"class":40},[30,45064,328],{"class":321},[30,45066,45067],{"class":32,"line":8239},[30,45068,34404],{"class":379},[30,45070,45071],{"class":32,"line":9898},[30,45072,34409],{"class":379},[30,45074,45075],{"class":32,"line":9923},[30,45076,34414],{"class":379},[30,45078,45079,45081,45083,45085,45087],{"class":32,"line":9946},[30,45080,34419],{"class":321},[30,45082,9659],{"class":317},[30,45084,32925],{"class":321},[30,45086,3131],{"class":317},[30,45088,34428],{"class":321},[30,45090,45091],{"class":32,"line":9970},[30,45092,34433],{"class":379},[30,45094,45095,45097,45099,45101,45103],{"class":32,"line":9975},[30,45096,34438],{"class":321},[30,45098,9659],{"class":317},[30,45100,34443],{"class":321},[30,45102,511],{"class":40},[30,45104,328],{"class":321},[30,45106,45107],{"class":32,"line":9980},[30,45108,2582],{"emptyLinePlaceholder":245},[30,45110,45111],{"class":32,"line":9985},[30,45112,34456],{"class":379},[30,45114,45115,45117,45119,45121,45123],{"class":32,"line":9994},[30,45116,34461],{"class":321},[30,45118,367],{"class":317},[30,45120,34466],{"class":321},[30,45122,904],{"class":317},[30,45124,34471],{"class":321},[30,45126,45127],{"class":32,"line":9999},[30,45128,34476],{"class":379},[30,45130,45131,45133,45135,45137],{"class":32,"line":10005},[30,45132,32589],{"class":40},[30,45134,322],{"class":321},[30,45136,34485],{"class":74},[30,45138,34488],{"class":321},[30,45140,45141],{"class":32,"line":10026},[30,45142,2582],{"emptyLinePlaceholder":245},[30,45144,45145],{"class":32,"line":10032},[30,45146,34497],{"class":379},[30,45148,45149,45151,45153,45155,45157],{"class":32,"line":10046},[30,45150,1717],{"class":317},[30,45152,31358],{"class":40},[30,45154,3131],{"class":317},[30,45156,31363],{"class":74},[30,45158,3921],{"class":321},[30,45160,45161],{"class":32,"line":10052},[30,45162,34514],{"class":379},[30,45164,45165,45167,45169],{"class":32,"line":10079},[30,45166,31427],{"class":321},[30,45168,367],{"class":317},[30,45170,44689],{"class":321},[30,45172,45173],{"class":32,"line":10088},[30,45174,34527],{"class":379},[30,45176,45177],{"class":32,"line":10094},[30,45178,34532],{"class":379},[30,45180,45181,45183,45185],{"class":32,"line":10102},[30,45182,34537],{"class":321},[30,45184,34540],{"class":74},[30,45186,30635],{"class":321},[30,45188,45189],{"class":32,"line":10107},[30,45190,34547],{"class":379},[30,45192,45193,45195,45197],{"class":32,"line":16786},[30,45194,34160],{"class":321},[30,45196,367],{"class":317},[30,45198,34556],{"class":321},[30,45200,45201],{"class":32,"line":16792},[30,45202,34561],{"class":379},[30,45204,45205],{"class":32,"line":16815},[30,45206,34566],{"class":321},[30,45208,45209],{"class":32,"line":16821},[30,45210,2582],{"emptyLinePlaceholder":245},[30,45212,45213],{"class":32,"line":16844},[30,45214,34575],{"class":379},[30,45216,45217],{"class":32,"line":16858},[30,45218,34580],{"class":379},[30,45220,45221,45223,45225,45227,45229,45231,45233],{"class":32,"line":16878},[30,45222,31375],{"class":321},[30,45224,367],{"class":317},[30,45226,31382],{"class":74},[30,45228,1887],{"class":317},[30,45230,31387],{"class":321},[30,45232,1884],{"class":317},[30,45234,34257],{"class":74},[30,45236,45237,45239,45241],{"class":32,"line":16884},[30,45238,31427],{"class":321},[30,45240,367],{"class":317},[30,45242,32427],{"class":321},[30,45244,45245],{"class":32,"line":16895},[30,45246,34609],{"class":379},[30,45248,45249],{"class":32,"line":16918},[30,45250,34614],{"class":379},[30,45252,45253,45255,45257,45259,45261,45263,45265,45267,45269,45271,45273,45275,45277,45279,45281,45283,45285,45287,45289,45291,45293,45295,45297],{"class":32,"line":16940},[30,45254,34619],{"class":321},[30,45256,367],{"class":317},[30,45258,1210],{"class":321},[30,45260,34626],{"class":74},[30,45262,698],{"class":321},[30,45264,34631],{"class":74},[30,45266,698],{"class":321},[30,45268,34636],{"class":74},[30,45270,698],{"class":321},[30,45272,34641],{"class":74},[30,45274,698],{"class":321},[30,45276,34646],{"class":74},[30,45278,698],{"class":321},[30,45280,34651],{"class":74},[30,45282,698],{"class":321},[30,45284,34656],{"class":74},[30,45286,698],{"class":321},[30,45288,34661],{"class":74},[30,45290,698],{"class":321},[30,45292,34666],{"class":74},[30,45294,698],{"class":321},[30,45296,34671],{"class":74},[30,45298,33384],{"class":321},[30,45300,45301,45303],{"class":32,"line":16945},[30,45302,34316],{"class":317},[30,45304,33022],{"class":321},[30,45306,45307],{"class":32,"line":16951},[30,45308,34684],{"class":379},[30,45310,45311,45313,45315,45317],{"class":32,"line":16965},[30,45312,3585],{"class":317},[30,45314,34691],{"class":321},[30,45316,26181],{"class":317},[30,45318,34335],{"class":321},[30,45320,45321,45323,45325],{"class":32,"line":16978},[30,45322,32748],{"class":321},[30,45324,367],{"class":317},[30,45326,32753],{"class":321},[30,45328,45329,45331,45333],{"class":32,"line":16983},[30,45330,32763],{"class":321},[30,45332,367],{"class":317},[30,45334,32768],{"class":321},[30,45336,45337],{"class":32,"line":16997},[30,45338,2582],{"emptyLinePlaceholder":245},[30,45340,45341],{"class":32,"line":17002},[30,45342,34720],{"class":379},[30,45344,45345],{"class":32,"line":17008},[30,45346,33013],{"class":321},[30,45348,45349],{"class":32,"line":17013},[30,45350,34729],{"class":379},[30,45352,45353,45355,45357],{"class":32,"line":17027},[30,45354,32798],{"class":321},[30,45356,367],{"class":317},[30,45358,32803],{"class":321},[30,45360,45361],{"class":32,"line":17032},[30,45362,34742],{"class":379},[30,45364,45365,45367,45369,45371,45373,45375,45377],{"class":32,"line":17037},[30,45366,32815],{"class":321},[30,45368,367],{"class":317},[30,45370,32820],{"class":321},[30,45372,32823],{"class":5398},[30,45374,367],{"class":317},[30,45376,537],{"class":40},[30,45378,328],{"class":321},[30,45380,45381],{"class":32,"line":17051},[30,45382,34763],{"class":379},[30,45384,45385,45387,45389],{"class":32,"line":17063},[30,45386,34768],{"class":321},[30,45388,367],{"class":317},[30,45390,34773],{"class":321},[30,45392,45393,45395,45397],{"class":32,"line":17068},[30,45394,34778],{"class":321},[30,45396,367],{"class":317},[30,45398,34783],{"class":321},[30,45400,45401,45403,45405,45407,45409,45411,45413,45415],{"class":32,"line":17081},[30,45402,34788],{"class":40},[30,45404,322],{"class":321},[30,45406,34793],{"class":74},[30,45408,34796],{"class":321},[30,45410,34799],{"class":74},[30,45412,698],{"class":321},[30,45414,34804],{"class":74},[30,45416,34807],{"class":321},[287,45418,45420],{"id":45419},"_24训练自己的数据集","2.4.训练自己的数据集",[157,45422,45423],{},"猫狗分类任务",[157,45425,45426],{},"划分数据集和验证集",[20,45428,45430],{"className":30516,"code":45429,"language":30518,"meta":25,"style":25},"# 创建脚本，用于划分数据集和验证集\nimport os\n# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\nfrom shutil import copy\nimport random\n\ndef mkfile(file):\n    if not os.path.exists(file):\n        os.makedirs(file)\n\n# 获取data文件夹下所有文件夹名（即需要分类的类名）\nfile_path='data_cat_dog'\nflower_class=[cla for cla in os.listdir(file_path)]\n\n# 创建训练集train文件夹\nmkfile('data\u002Ftrain')\nfor cla in flower_class:\n    mkfile('data\u002Ftrain\u002F'+cla)\n\n# 创建验证集val文件夹\nmkfile('data\u002Ftest')\nfor cla in flower_class:\n    mkfile('data\u002Ftest\u002F'+cla)\n\n# 划分比例，训练集：测试集=9：1\nsplit_rate=0.1\n\n# 遍历所有类别的全部图像并按比例分成训练集和验证集\n# cla_path：当前类别的原始图片路径\n# images：当前类别下所有图片的文件名列表\n# num：该类别图片总数\n# eval_index：从 images 随机抽取 10% 的图片作为验证集\n\nfor cla in flower_class:\n    cla_path = file_path + '\u002F' + cla + '\u002F'  # 某一类别的子目录\n    images = os.listdir(cla_path)  # iamges 列表存储了该目录下所有图像的名称\n    num = len(images)\n    eval_index = random.sample(images, k=int(num * split_rate))  # 从images列表中随机抽取 k 个图像名称\n    # 遍历该类别下的所有图片\n    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n    for index, image in enumerate(images):\n        # eval_index 中保存验证集val的图像名称\n        if image in eval_index:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftest\u002F' + cla\n            copy(image_path, new_path)  # 将选中的图像复制到新路径\n\n        # 其余的图像保存在训练集train中\n        else:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftrain\u002F' + cla\n            copy(image_path, new_path)\n            # 打印进度条信息\n            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n        print(\"\\r[{}] processing [{}\u002F{}]\".format(cla, index + 1, num), end=\"\")  # processing bar\n    print()\n\nprint(\"processing done!\")\n",[27,45431,45432,45437,45444,45449,45460,45467,45471,45481,45495,45504,45508,45513,45523,45543,45547,45552,45562,45573,45586,45590,45595,45604,45614,45625,45629,45634,45644,45648,45653,45658,45663,45668,45673,45677,45687,45714,45727,45739,45766,45771,45776,45790,45795,45807,45822,45837,45845,45849,45854,45860,45872,45885,45890,45895,45900,45950,45956,45960],{"__ignoreMap":25},[30,45433,45434],{"class":32,"line":33},[30,45435,45436],{"class":379},"# 创建脚本，用于划分数据集和验证集\n",[30,45438,45439,45441],{"class":32,"line":44},[30,45440,30530],{"class":317},[30,45442,45443],{"class":321}," os\n",[30,45445,45446],{"class":32,"line":52},[30,45447,45448],{"class":379},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[30,45450,45451,45453,45456,45458],{"class":32,"line":60},[30,45452,30875],{"class":317},[30,45454,45455],{"class":321}," shutil ",[30,45457,30530],{"class":317},[30,45459,31960],{"class":321},[30,45461,45462,45464],{"class":32,"line":68},[30,45463,30530],{"class":317},[30,45465,45466],{"class":321}," random\n",[30,45468,45469],{"class":32,"line":80},[30,45470,2582],{"emptyLinePlaceholder":245},[30,45472,45473,45475,45478],{"class":32,"line":88},[30,45474,32085],{"class":317},[30,45476,45477],{"class":36}," mkfile",[30,45479,45480],{"class":321},"(file):\n",[30,45482,45483,45485,45487,45490,45493],{"class":32,"line":96},[30,45484,3283],{"class":317},[30,45486,39068],{"class":317},[30,45488,45489],{"class":321}," os.path.exists(",[30,45491,45492],{"class":5398},"file",[30,45494,30924],{"class":321},[30,45496,45497,45500,45502],{"class":32,"line":104},[30,45498,45499],{"class":321},"        os.makedirs(",[30,45501,45492],{"class":5398},[30,45503,328],{"class":321},[30,45505,45506],{"class":32,"line":112},[30,45507,2582],{"emptyLinePlaceholder":245},[30,45509,45510],{"class":32,"line":123},[30,45511,45512],{"class":379},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[30,45514,45515,45518,45520],{"class":32,"line":131},[30,45516,45517],{"class":321},"file_path",[30,45519,367],{"class":317},[30,45521,45522],{"class":74},"'data_cat_dog'\n",[30,45524,45525,45528,45530,45533,45535,45538,45540],{"class":32,"line":142},[30,45526,45527],{"class":321},"flower_class",[30,45529,367],{"class":317},[30,45531,45532],{"class":321},"[cla ",[30,45534,3207],{"class":317},[30,45536,45537],{"class":321}," cla ",[30,45539,26181],{"class":317},[30,45541,45542],{"class":321}," os.listdir(file_path)]\n",[30,45544,45545],{"class":32,"line":1811},[30,45546,2582],{"emptyLinePlaceholder":245},[30,45548,45549],{"class":32,"line":1825},[30,45550,45551],{"class":379},"# 创建训练集train文件夹\n",[30,45553,45554,45557,45560],{"class":32,"line":1830},[30,45555,45556],{"class":321},"mkfile(",[30,45558,45559],{"class":74},"'data\u002Ftrain'",[30,45561,328],{"class":321},[30,45563,45564,45566,45568,45570],{"class":32,"line":1836},[30,45565,3207],{"class":317},[30,45567,45537],{"class":321},[30,45569,26181],{"class":317},[30,45571,45572],{"class":321}," flower_class:\n",[30,45574,45575,45578,45581,45583],{"class":32,"line":1857},[30,45576,45577],{"class":321},"    mkfile(",[30,45579,45580],{"class":74},"'data\u002Ftrain\u002F'",[30,45582,801],{"class":317},[30,45584,45585],{"class":321},"cla)\n",[30,45587,45588],{"class":32,"line":1862},[30,45589,2582],{"emptyLinePlaceholder":245},[30,45591,45592],{"class":32,"line":1876},[30,45593,45594],{"class":379},"# 创建验证集val文件夹\n",[30,45596,45597,45599,45602],{"class":32,"line":1881},[30,45598,45556],{"class":321},[30,45600,45601],{"class":74},"'data\u002Ftest'",[30,45603,328],{"class":321},[30,45605,45606,45608,45610,45612],{"class":32,"line":1910},[30,45607,3207],{"class":317},[30,45609,45537],{"class":321},[30,45611,26181],{"class":317},[30,45613,45572],{"class":321},[30,45615,45616,45618,45621,45623],{"class":32,"line":1915},[30,45617,45577],{"class":321},[30,45619,45620],{"class":74},"'data\u002Ftest\u002F'",[30,45622,801],{"class":317},[30,45624,45585],{"class":321},[30,45626,45627],{"class":32,"line":1932},[30,45628,2582],{"emptyLinePlaceholder":245},[30,45630,45631],{"class":32,"line":1937},[30,45632,45633],{"class":379},"# 划分比例，训练集：测试集=9：1\n",[30,45635,45636,45639,45641],{"class":32,"line":1942},[30,45637,45638],{"class":321},"split_rate",[30,45640,367],{"class":317},[30,45642,45643],{"class":40},"0.1\n",[30,45645,45646],{"class":32,"line":1947},[30,45647,2582],{"emptyLinePlaceholder":245},[30,45649,45650],{"class":32,"line":1961},[30,45651,45652],{"class":379},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[30,45654,45655],{"class":32,"line":1966},[30,45656,45657],{"class":379},"# cla_path：当前类别的原始图片路径\n",[30,45659,45660],{"class":32,"line":2759},[30,45661,45662],{"class":379},"# images：当前类别下所有图片的文件名列表\n",[30,45664,45665],{"class":32,"line":2773},[30,45666,45667],{"class":379},"# num：该类别图片总数\n",[30,45669,45670],{"class":32,"line":2781},[30,45671,45672],{"class":379},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[30,45674,45675],{"class":32,"line":2786},[30,45676,2582],{"emptyLinePlaceholder":245},[30,45678,45679,45681,45683,45685],{"class":32,"line":2792},[30,45680,3207],{"class":317},[30,45682,45537],{"class":321},[30,45684,26181],{"class":317},[30,45686,45572],{"class":321},[30,45688,45689,45692,45694,45697,45699,45702,45705,45707,45709,45711],{"class":32,"line":2798},[30,45690,45691],{"class":321},"    cla_path ",[30,45693,367],{"class":317},[30,45695,45696],{"class":321}," file_path ",[30,45698,801],{"class":317},[30,45700,45701],{"class":74}," '\u002F'",[30,45703,45704],{"class":317}," +",[30,45706,45537],{"class":321},[30,45708,801],{"class":317},[30,45710,45701],{"class":74},[30,45712,45713],{"class":379},"  # 某一类别的子目录\n",[30,45715,45716,45719,45721,45724],{"class":32,"line":2803},[30,45717,45718],{"class":321},"    images ",[30,45720,367],{"class":317},[30,45722,45723],{"class":321}," os.listdir(cla_path)  ",[30,45725,45726],{"class":379},"# iamges 列表存储了该目录下所有图像的名称\n",[30,45728,45729,45732,45734,45736],{"class":32,"line":8130},[30,45730,45731],{"class":321},"    num ",[30,45733,367],{"class":317},[30,45735,7513],{"class":40},[30,45737,45738],{"class":321},"(images)\n",[30,45740,45741,45744,45746,45749,45751,45753,45755,45758,45760,45763],{"class":32,"line":8154},[30,45742,45743],{"class":321},"    eval_index ",[30,45745,367],{"class":317},[30,45747,45748],{"class":321}," random.sample(images, ",[30,45750,813],{"class":5398},[30,45752,367],{"class":317},[30,45754,325],{"class":40},[30,45756,45757],{"class":321},"(num ",[30,45759,775],{"class":317},[30,45761,45762],{"class":321}," split_rate))  ",[30,45764,45765],{"class":379},"# 从images列表中随机抽取 k 个图像名称\n",[30,45767,45768],{"class":32,"line":8159},[30,45769,45770],{"class":379},"    # 遍历该类别下的所有图片\n",[30,45772,45773],{"class":32,"line":8165},[30,45774,45775],{"class":379},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[30,45777,45778,45780,45783,45785,45787],{"class":32,"line":8192},[30,45779,3383],{"class":317},[30,45781,45782],{"class":321}," index, image ",[30,45784,26181],{"class":317},[30,45786,31744],{"class":40},[30,45788,45789],{"class":321},"(images):\n",[30,45791,45792],{"class":32,"line":8197},[30,45793,45794],{"class":379},"        # eval_index 中保存验证集val的图像名称\n",[30,45796,45797,45799,45802,45804],{"class":32,"line":8203},[30,45798,2679],{"class":317},[30,45800,45801],{"class":321}," image ",[30,45803,26181],{"class":317},[30,45805,45806],{"class":321}," eval_index:\n",[30,45808,45809,45812,45814,45817,45819],{"class":32,"line":8215},[30,45810,45811],{"class":321},"            image_path ",[30,45813,367],{"class":317},[30,45815,45816],{"class":321}," cla_path ",[30,45818,801],{"class":317},[30,45820,45821],{"class":321}," image\n",[30,45823,45824,45827,45829,45832,45834],{"class":32,"line":8227},[30,45825,45826],{"class":321},"            new_path ",[30,45828,367],{"class":317},[30,45830,45831],{"class":74}," 'data\u002Ftest\u002F'",[30,45833,45704],{"class":317},[30,45835,45836],{"class":321}," cla\n",[30,45838,45839,45842],{"class":32,"line":8239},[30,45840,45841],{"class":321},"            copy(image_path, new_path)  ",[30,45843,45844],{"class":379},"# 将选中的图像复制到新路径\n",[30,45846,45847],{"class":32,"line":9898},[30,45848,2582],{"emptyLinePlaceholder":245},[30,45850,45851],{"class":32,"line":9923},[30,45852,45853],{"class":379},"        # 其余的图像保存在训练集train中\n",[30,45855,45856,45858],{"class":32,"line":9946},[30,45857,2716],{"class":317},[30,45859,3921],{"class":321},[30,45861,45862,45864,45866,45868,45870],{"class":32,"line":9970},[30,45863,45811],{"class":321},[30,45865,367],{"class":317},[30,45867,45816],{"class":321},[30,45869,801],{"class":317},[30,45871,45821],{"class":321},[30,45873,45874,45876,45878,45881,45883],{"class":32,"line":9975},[30,45875,45826],{"class":321},[30,45877,367],{"class":317},[30,45879,45880],{"class":74}," 'data\u002Ftrain\u002F'",[30,45882,45704],{"class":317},[30,45884,45836],{"class":321},[30,45886,45887],{"class":32,"line":9980},[30,45888,45889],{"class":321},"            copy(image_path, new_path)\n",[30,45891,45892],{"class":32,"line":9985},[30,45893,45894],{"class":379},"            # 打印进度条信息\n",[30,45896,45897],{"class":32,"line":9994},[30,45898,45899],{"class":379},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[30,45901,45902,45904,45906,45908,45911,45913,45915,45918,45920,45922,45924,45927,45930,45932,45934,45937,45940,45942,45944,45947],{"class":32,"line":9999},[30,45903,32589],{"class":40},[30,45905,322],{"class":321},[30,45907,571],{"class":74},[30,45909,45910],{"class":40},"\\r",[30,45912,1210],{"class":74},[30,45914,32597],{"class":40},[30,45916,45917],{"class":74},"] processing [",[30,45919,32597],{"class":40},[30,45921,904],{"class":74},[30,45923,32597],{"class":40},[30,45925,45926],{"class":74},"]\"",[30,45928,45929],{"class":321},".format(cla, index ",[30,45931,801],{"class":317},[30,45933,25291],{"class":40},[30,45935,45936],{"class":321},", num), ",[30,45938,45939],{"class":5398},"end",[30,45941,367],{"class":317},[30,45943,7834],{"class":74},[30,45945,45946],{"class":321},")  ",[30,45948,45949],{"class":379},"# processing bar\n",[30,45951,45952,45954],{"class":32,"line":10005},[30,45953,31437],{"class":40},[30,45955,2158],{"class":321},[30,45957,45958],{"class":32,"line":10026},[30,45959,2582],{"emptyLinePlaceholder":245},[30,45961,45962,45964,45966,45969],{"class":32,"line":10032},[30,45963,30553],{"class":40},[30,45965,322],{"class":321},[30,45967,45968],{"class":74},"\"processing done!\"",[30,45970,328],{"class":321},[157,45972,45973],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22180,45975,45977],{"id":45976},"_242模型代码","2.4.2.模型代码",[157,45979,45980],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[20,45982,45984],{"className":30516,"code":45983,"language":30518,"meta":25,"style":25},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=3,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,2)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[27,45985,45986,45992,46002,46012,46016,46032,46040,46054,46064,46068,46098,46102,46136,46182,46186,46220,46266,46270,46274,46308,46338,46342,46350,46364,46386,46408,46426,46430,46444,46448,46452,46468,46472,46480,46494,46504,46548,46552,46580,46584,46594,46622,46626,46662,46666,46694,46698,46708,46740,46772,46800,46804,46814,46846,46878,46910,46942,46974,47002,47006,47016,47048,47080,47092,47096,47108,47112,47116,47128,47136,47156,47160,47164,47168,47172,47176,47180,47194,47202,47210,47222,47236,47244,47248,47256,47266,47276,47286,47296,47306,47312,47316,47320,47332,47352,47360],{"__ignoreMap":25},[30,45987,45988,45990],{"class":32,"line":33},[30,45989,30530],{"class":317},[30,45991,30533],{"class":321},[30,45993,45994,45996,45998,46000],{"class":32,"line":44},[30,45995,30875],{"class":317},[30,45997,30878],{"class":321},[30,45999,30530],{"class":317},[30,46001,30883],{"class":321},[30,46003,46004,46006,46008,46010],{"class":32,"line":52},[30,46005,30875],{"class":317},[30,46007,30895],{"class":321},[30,46009,30530],{"class":317},[30,46011,30900],{"class":321},[30,46013,46014],{"class":32,"line":60},[30,46015,2582],{"emptyLinePlaceholder":245},[30,46017,46018,46020,46022,46024,46026,46028,46030],{"class":32,"line":68},[30,46019,14876],{"class":317},[30,46021,41631],{"class":36},[30,46023,322],{"class":321},[30,46025,30916],{"class":36},[30,46027,878],{"class":321},[30,46029,30921],{"class":36},[30,46031,30924],{"class":321},[30,46033,46034,46036,46038],{"class":32,"line":80},[30,46035,30939],{"class":317},[30,46037,30942],{"class":40},[30,46039,41650],{"class":321},[30,46041,46042,46044,46046,46048,46050,46052],{"class":32,"line":88},[30,46043,30955],{"class":40},[30,46045,41657],{"class":321},[30,46047,30961],{"class":40},[30,46049,30964],{"class":321},[30,46051,30967],{"class":40},[30,46053,2158],{"class":321},[30,46055,46056,46058,46060,46062],{"class":32,"line":96},[30,46057,30983],{"class":40},[30,46059,34909],{"class":321},[30,46061,367],{"class":317},[30,46063,34914],{"class":321},[30,46065,46066],{"class":32,"line":104},[30,46067,41680],{"class":379},[30,46069,46070,46072,46074,46076,46078,46080,46082,46084,46086,46088,46090,46092,46094,46096],{"class":32,"line":112},[30,46071,30983],{"class":40},[30,46073,41687],{"class":321},[30,46075,367],{"class":317},[30,46077,30991],{"class":321},[30,46079,30994],{"class":5398},[30,46081,367],{"class":317},[30,46083,41698],{"class":321},[30,46085,31003],{"class":5398},[30,46087,367],{"class":317},[30,46089,41705],{"class":321},[30,46091,31012],{"class":5398},[30,46093,367],{"class":317},[30,46095,537],{"class":40},[30,46097,328],{"class":321},[30,46099,46100],{"class":32,"line":123},[30,46101,41718],{"class":379},[30,46103,46104,46106,46108,46110,46112,46114,46116,46118,46120,46122,46124,46126,46128,46130,46132,46134],{"class":32,"line":131},[30,46105,30983],{"class":40},[30,46107,41725],{"class":321},[30,46109,367],{"class":317},[30,46111,30991],{"class":321},[30,46113,30994],{"class":5398},[30,46115,367],{"class":317},[30,46117,41698],{"class":321},[30,46119,31003],{"class":5398},[30,46121,367],{"class":317},[30,46123,41742],{"class":321},[30,46125,511],{"class":40},[30,46127,41747],{"class":321},[30,46129,31012],{"class":5398},[30,46131,367],{"class":317},[30,46133,537],{"class":40},[30,46135,328],{"class":321},[30,46137,46138,46140,46142,46144,46146,46148,46150,46152,46154,46156,46158,46160,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180],{"class":32,"line":142},[30,46139,30983],{"class":40},[30,46141,41762],{"class":321},[30,46143,367],{"class":317},[30,46145,30991],{"class":321},[30,46147,30994],{"class":5398},[30,46149,367],{"class":317},[30,46151,41742],{"class":321},[30,46153,511],{"class":40},[30,46155,41747],{"class":321},[30,46157,31003],{"class":5398},[30,46159,367],{"class":317},[30,46161,41742],{"class":321},[30,46163,537],{"class":40},[30,46165,41747],{"class":321},[30,46167,31012],{"class":5398},[30,46169,367],{"class":317},[30,46171,392],{"class":40},[30,46173,698],{"class":321},[30,46175,31021],{"class":5398},[30,46177,367],{"class":317},[30,46179,537],{"class":40},[30,46181,328],{"class":321},[30,46183,46184],{"class":32,"line":1811},[30,46185,41807],{"class":379},[30,46187,46188,46190,46192,46194,46196,46198,46200,46202,46204,46206,46208,46210,46212,46214,46216,46218],{"class":32,"line":1825},[30,46189,30983],{"class":40},[30,46191,41814],{"class":321},[30,46193,367],{"class":317},[30,46195,30991],{"class":321},[30,46197,30994],{"class":5398},[30,46199,367],{"class":317},[30,46201,41698],{"class":321},[30,46203,31003],{"class":5398},[30,46205,367],{"class":317},[30,46207,41831],{"class":321},[30,46209,511],{"class":40},[30,46211,41747],{"class":321},[30,46213,31012],{"class":5398},[30,46215,367],{"class":317},[30,46217,537],{"class":40},[30,46219,328],{"class":321},[30,46221,46222,46224,46226,46228,46230,46232,46234,46236,46238,46240,46242,46244,46246,46248,46250,46252,46254,46256,46258,46260,46262,46264],{"class":32,"line":1830},[30,46223,30983],{"class":40},[30,46225,41850],{"class":321},[30,46227,367],{"class":317},[30,46229,30991],{"class":321},[30,46231,30994],{"class":5398},[30,46233,367],{"class":317},[30,46235,41831],{"class":321},[30,46237,511],{"class":40},[30,46239,41747],{"class":321},[30,46241,31003],{"class":5398},[30,46243,367],{"class":317},[30,46245,41831],{"class":321},[30,46247,537],{"class":40},[30,46249,41747],{"class":321},[30,46251,31012],{"class":5398},[30,46253,367],{"class":317},[30,46255,639],{"class":40},[30,46257,698],{"class":321},[30,46259,31021],{"class":5398},[30,46261,367],{"class":317},[30,46263,398],{"class":40},[30,46265,328],{"class":321},[30,46267,46268],{"class":32,"line":1836},[30,46269,41895],{"class":379},[30,46271,46272],{"class":32,"line":1857},[30,46273,41900],{"class":379},[30,46275,46276,46278,46280,46282,46284,46286,46288,46290,46292,46294,46296,46298,46300,46302,46304,46306],{"class":32,"line":1862},[30,46277,30983],{"class":40},[30,46279,41907],{"class":321},[30,46281,367],{"class":317},[30,46283,34967],{"class":321},[30,46285,31012],{"class":5398},[30,46287,367],{"class":317},[30,46289,392],{"class":40},[30,46291,698],{"class":321},[30,46293,31067],{"class":5398},[30,46295,367],{"class":317},[30,46297,537],{"class":40},[30,46299,698],{"class":321},[30,46301,31021],{"class":5398},[30,46303,367],{"class":317},[30,46305,537],{"class":40},[30,46307,328],{"class":321},[30,46309,46310,46312,46314,46316,46318,46320,46322,46324,46326,46328,46330,46332,46334,46336],{"class":32,"line":1876},[30,46311,30983],{"class":40},[30,46313,41942],{"class":321},[30,46315,367],{"class":317},[30,46317,30991],{"class":321},[30,46319,30994],{"class":5398},[30,46321,367],{"class":317},[30,46323,41698],{"class":321},[30,46325,31003],{"class":5398},[30,46327,367],{"class":317},[30,46329,41959],{"class":321},[30,46331,31012],{"class":5398},[30,46333,367],{"class":317},[30,46335,537],{"class":40},[30,46337,328],{"class":321},[30,46339,46340],{"class":32,"line":1881},[30,46341,2582],{"emptyLinePlaceholder":245},[30,46343,46344,46346,46348],{"class":32,"line":1910},[30,46345,30939],{"class":317},[30,46347,31231],{"class":36},[30,46349,31234],{"class":321},[30,46351,46352,46354,46356,46358,46360,46362],{"class":32,"line":1915},[30,46353,41984],{"class":321},[30,46355,367],{"class":317},[30,46357,30961],{"class":40},[30,46359,35322],{"class":321},[30,46361,30961],{"class":40},[30,46363,41995],{"class":321},[30,46365,46366,46368,46370,46372,46374,46376,46378,46380,46382,46384],{"class":32,"line":1932},[30,46367,7267],{"class":321},[30,46369,367],{"class":317},[30,46371,30961],{"class":40},[30,46373,35322],{"class":321},[30,46375,30961],{"class":40},[30,46377,42010],{"class":321},[30,46379,30961],{"class":40},[30,46381,35322],{"class":321},[30,46383,30961],{"class":40},[30,46385,42019],{"class":321},[30,46387,46388,46390,46392,46394,46396,46398,46400,46402,46404,46406],{"class":32,"line":1937},[30,46389,42024],{"class":321},[30,46391,367],{"class":317},[30,46393,30961],{"class":40},[30,46395,35322],{"class":321},[30,46397,30961],{"class":40},[30,46399,42035],{"class":321},[30,46401,30961],{"class":40},[30,46403,35322],{"class":321},[30,46405,30961],{"class":40},[30,46407,42044],{"class":321},[30,46409,46410,46412,46414,46416,46418,46420,46422,46424],{"class":32,"line":1942},[30,46411,42049],{"class":321},[30,46413,367],{"class":317},[30,46415,30961],{"class":40},[30,46417,35322],{"class":321},[30,46419,30961],{"class":40},[30,46421,42060],{"class":321},[30,46423,30961],{"class":40},[30,46425,42065],{"class":321},[30,46427,46428],{"class":32,"line":1947},[30,46429,42070],{"class":379},[30,46431,46432,46434,46436,46438,46440,46442],{"class":32,"line":1961},[30,46433,14934],{"class":317},[30,46435,42077],{"class":321},[30,46437,32823],{"class":5398},[30,46439,367],{"class":317},[30,46441,537],{"class":40},[30,46443,328],{"class":321},[30,46445,46446],{"class":32,"line":1966},[30,46447,2582],{"emptyLinePlaceholder":245},[30,46449,46450],{"class":32,"line":2759},[30,46451,42098],{"class":379},[30,46453,46454,46456,46458,46460,46462,46464,46466],{"class":32,"line":2773},[30,46455,14876],{"class":317},[30,46457,42105],{"class":36},[30,46459,322],{"class":321},[30,46461,30916],{"class":36},[30,46463,878],{"class":321},[30,46465,30921],{"class":36},[30,46467,30924],{"class":321},[30,46469,46470],{"class":32,"line":2781},[30,46471,42120],{"class":379},[30,46473,46474,46476,46478],{"class":32,"line":2786},[30,46475,30939],{"class":317},[30,46477,30942],{"class":40},[30,46479,42129],{"class":321},[30,46481,46482,46484,46486,46488,46490,46492],{"class":32,"line":2792},[30,46483,30955],{"class":40},[30,46485,42136],{"class":321},[30,46487,30961],{"class":40},[30,46489,30964],{"class":321},[30,46491,30967],{"class":40},[30,46493,2158],{"class":321},[30,46495,46496,46498,46500,46502],{"class":32,"line":2798},[30,46497,30983],{"class":40},[30,46499,42151],{"class":321},[30,46501,367],{"class":317},[30,46503,38147],{"class":321},[30,46505,46506,46508,46510,46512,46514,46516,46518,46520,46522,46524,46526,46528,46530,46532,46534,46536,46538,46540,46542,46544,46546],{"class":32,"line":2803},[30,46507,38152],{"class":321},[30,46509,30994],{"class":5398},[30,46511,367],{"class":317},[30,46513,392],{"class":40},[30,46515,698],{"class":321},[30,46517,31003],{"class":5398},[30,46519,367],{"class":317},[30,46521,523],{"class":40},[30,46523,698],{"class":321},[30,46525,31012],{"class":5398},[30,46527,367],{"class":317},[30,46529,689],{"class":40},[30,46531,698],{"class":321},[30,46533,31067],{"class":5398},[30,46535,367],{"class":317},[30,46537,398],{"class":40},[30,46539,698],{"class":321},[30,46541,31021],{"class":5398},[30,46543,367],{"class":317},[30,46545,392],{"class":40},[30,46547,38185],{"class":321},[30,46549,46550],{"class":32,"line":8130},[30,46551,38190],{"class":321},[30,46553,46554,46556,46558,46560,46562,46564,46566,46568,46570,46572,46574,46576,46578],{"class":32,"line":8154},[30,46555,38235],{"class":321},[30,46557,31012],{"class":5398},[30,46559,367],{"class":317},[30,46561,392],{"class":40},[30,46563,698],{"class":321},[30,46565,31067],{"class":5398},[30,46567,367],{"class":317},[30,46569,398],{"class":40},[30,46571,698],{"class":321},[30,46573,31021],{"class":5398},[30,46575,367],{"class":317},[30,46577,537],{"class":40},[30,46579,328],{"class":321},[30,46581,46582],{"class":32,"line":8159},[30,46583,38264],{"class":321},[30,46585,46586,46588,46590,46592],{"class":32,"line":8165},[30,46587,30983],{"class":40},[30,46589,42242],{"class":321},[30,46591,367],{"class":317},[30,46593,38147],{"class":321},[30,46595,46596,46598,46600,46602,46604,46606,46608,46610,46612,46614,46616,46618,46620],{"class":32,"line":8192},[30,46597,38152],{"class":321},[30,46599,30994],{"class":5398},[30,46601,367],{"class":317},[30,46603,523],{"class":40},[30,46605,698],{"class":321},[30,46607,31003],{"class":5398},[30,46609,367],{"class":317},[30,46611,523],{"class":40},[30,46613,698],{"class":321},[30,46615,31012],{"class":5398},[30,46617,367],{"class":317},[30,46619,537],{"class":40},[30,46621,38185],{"class":321},[30,46623,46624],{"class":32,"line":8197},[30,46625,38190],{"class":321},[30,46627,46628,46630,46632,46634,46636,46638,46640,46642,46644,46646,46648,46650,46652,46654,46656,46658,46660],{"class":32,"line":8203},[30,46629,38152],{"class":321},[30,46631,30994],{"class":5398},[30,46633,367],{"class":317},[30,46635,523],{"class":40},[30,46637,698],{"class":321},[30,46639,31003],{"class":5398},[30,46641,367],{"class":317},[30,46643,42297],{"class":40},[30,46645,698],{"class":321},[30,46647,31012],{"class":5398},[30,46649,367],{"class":317},[30,46651,392],{"class":40},[30,46653,698],{"class":321},[30,46655,31021],{"class":5398},[30,46657,367],{"class":317},[30,46659,537],{"class":40},[30,46661,38185],{"class":321},[30,46663,46664],{"class":32,"line":8215},[30,46665,38190],{"class":321},[30,46667,46668,46670,46672,46674,46676,46678,46680,46682,46684,46686,46688,46690,46692],{"class":32,"line":8227},[30,46669,38235],{"class":321},[30,46671,31012],{"class":5398},[30,46673,367],{"class":317},[30,46675,392],{"class":40},[30,46677,698],{"class":321},[30,46679,31067],{"class":5398},[30,46681,367],{"class":317},[30,46683,398],{"class":40},[30,46685,698],{"class":321},[30,46687,31021],{"class":5398},[30,46689,367],{"class":317},[30,46691,537],{"class":40},[30,46693,328],{"class":321},[30,46695,46696],{"class":32,"line":8239},[30,46697,38264],{"class":321},[30,46699,46700,46702,46704,46706],{"class":32,"line":9898},[30,46701,30983],{"class":40},[30,46703,42358],{"class":321},[30,46705,367],{"class":317},[30,46707,38147],{"class":321},[30,46709,46710,46712,46714,46716,46718,46720,46722,46724,46726,46728,46730,46732,46734,46736,46738],{"class":32,"line":9923},[30,46711,42367],{"class":321},[30,46713,42297],{"class":40},[30,46715,698],{"class":321},[30,46717,523],{"class":40},[30,46719,42376],{"class":321},[30,46721,529],{"class":40},[30,46723,698],{"class":321},[30,46725,32208],{"class":40},[30,46727,42385],{"class":321},[30,46729,921],{"class":40},[30,46731,698],{"class":321},[30,46733,517],{"class":40},[30,46735,42394],{"class":321},[30,46737,517],{"class":40},[30,46739,38185],{"class":321},[30,46741,46742,46744,46746,46748,46750,46752,46754,46756,46758,46760,46762,46764,46766,46768,46770],{"class":32,"line":9946},[30,46743,42367],{"class":321},[30,46745,35008],{"class":40},[30,46747,698],{"class":321},[30,46749,32208],{"class":40},[30,46751,42376],{"class":321},[30,46753,32208],{"class":40},[30,46755,698],{"class":321},[30,46757,42297],{"class":40},[30,46759,42385],{"class":321},[30,46761,517],{"class":40},[30,46763,698],{"class":321},[30,46765,529],{"class":40},[30,46767,42394],{"class":321},[30,46769,523],{"class":40},[30,46771,38185],{"class":321},[30,46773,46774,46776,46778,46780,46782,46784,46786,46788,46790,46792,46794,46796,46798],{"class":32,"line":9970},[30,46775,38235],{"class":321},[30,46777,31012],{"class":5398},[30,46779,367],{"class":317},[30,46781,392],{"class":40},[30,46783,698],{"class":321},[30,46785,31067],{"class":5398},[30,46787,367],{"class":317},[30,46789,398],{"class":40},[30,46791,698],{"class":321},[30,46793,31021],{"class":5398},[30,46795,367],{"class":317},[30,46797,537],{"class":40},[30,46799,328],{"class":321},[30,46801,46802],{"class":32,"line":9975},[30,46803,38264],{"class":321},[30,46805,46806,46808,46810,46812],{"class":32,"line":9980},[30,46807,30983],{"class":40},[30,46809,42469],{"class":321},[30,46811,367],{"class":317},[30,46813,38147],{"class":321},[30,46815,46816,46818,46820,46822,46824,46826,46828,46830,46832,46834,46836,46838,46840,46842,46844],{"class":32,"line":9985},[30,46817,42367],{"class":321},[30,46819,42480],{"class":40},[30,46821,698],{"class":321},[30,46823,42297],{"class":40},[30,46825,42376],{"class":321},[30,46827,529],{"class":40},[30,46829,698],{"class":321},[30,46831,42493],{"class":40},[30,46833,42385],{"class":321},[30,46835,921],{"class":40},[30,46837,698],{"class":321},[30,46839,927],{"class":40},[30,46841,42394],{"class":321},[30,46843,523],{"class":40},[30,46845,38185],{"class":321},[30,46847,46848,46850,46852,46854,46856,46858,46860,46862,46864,46866,46868,46870,46872,46874,46876],{"class":32,"line":9994},[30,46849,42367],{"class":321},[30,46851,38595],{"class":40},[30,46853,698],{"class":321},[30,46855,21230],{"class":40},[30,46857,42376],{"class":321},[30,46859,938],{"class":40},[30,46861,698],{"class":321},[30,46863,31639],{"class":40},[30,46865,42385],{"class":321},[30,46867,1120],{"class":40},[30,46869,698],{"class":321},[30,46871,523],{"class":40},[30,46873,42394],{"class":321},[30,46875,523],{"class":40},[30,46877,38185],{"class":321},[30,46879,46880,46882,46884,46886,46888,46890,46892,46894,46896,46898,46900,46902,46904,46906,46908],{"class":32,"line":9999},[30,46881,42367],{"class":321},[30,46883,38595],{"class":40},[30,46885,698],{"class":321},[30,46887,32208],{"class":40},[30,46889,42376],{"class":321},[30,46891,32208],{"class":40},[30,46893,698],{"class":321},[30,46895,35008],{"class":40},[30,46897,42385],{"class":321},[30,46899,1120],{"class":40},[30,46901,698],{"class":321},[30,46903,523],{"class":40},[30,46905,42394],{"class":321},[30,46907,523],{"class":40},[30,46909,38185],{"class":321},[30,46911,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934,46936,46938,46940],{"class":32,"line":10005},[30,46913,42367],{"class":321},[30,46915,38595],{"class":40},[30,46917,698],{"class":321},[30,46919,938],{"class":40},[30,46921,42376],{"class":321},[30,46923,32208],{"class":40},[30,46925,698],{"class":321},[30,46927,42590],{"class":40},[30,46929,42385],{"class":321},[30,46931,517],{"class":40},[30,46933,698],{"class":321},[30,46935,523],{"class":40},[30,46937,42394],{"class":321},[30,46939,523],{"class":40},[30,46941,38185],{"class":321},[30,46943,46944,46946,46948,46950,46952,46954,46956,46958,46960,46962,46964,46966,46968,46970,46972],{"class":32,"line":10026},[30,46945,42367],{"class":321},[30,46947,42611],{"class":40},[30,46949,698],{"class":321},[30,46951,35008],{"class":40},[30,46953,42376],{"class":321},[30,46955,21230],{"class":40},[30,46957,698],{"class":321},[30,46959,42624],{"class":40},[30,46961,42385],{"class":321},[30,46963,517],{"class":40},[30,46965,698],{"class":321},[30,46967,32208],{"class":40},[30,46969,42394],{"class":321},[30,46971,32208],{"class":40},[30,46973,38185],{"class":321},[30,46975,46976,46978,46980,46982,46984,46986,46988,46990,46992,46994,46996,46998,47000],{"class":32,"line":10032},[30,46977,38235],{"class":321},[30,46979,31012],{"class":5398},[30,46981,367],{"class":317},[30,46983,392],{"class":40},[30,46985,698],{"class":321},[30,46987,31067],{"class":5398},[30,46989,367],{"class":317},[30,46991,398],{"class":40},[30,46993,698],{"class":321},[30,46995,31021],{"class":5398},[30,46997,367],{"class":317},[30,46999,537],{"class":40},[30,47001,328],{"class":321},[30,47003,47004],{"class":32,"line":10046},[30,47005,38264],{"class":321},[30,47007,47008,47010,47012,47014],{"class":32,"line":10052},[30,47009,30983],{"class":40},[30,47011,42677],{"class":321},[30,47013,367],{"class":317},[30,47015,38147],{"class":321},[30,47017,47018,47020,47022,47024,47026,47028,47030,47032,47034,47036,47038,47040,47042,47044,47046],{"class":32,"line":10079},[30,47019,42367],{"class":321},[30,47021,42688],{"class":40},[30,47023,698],{"class":321},[30,47025,35008],{"class":40},[30,47027,42376],{"class":321},[30,47029,21230],{"class":40},[30,47031,698],{"class":321},[30,47033,42624],{"class":40},[30,47035,42385],{"class":321},[30,47037,517],{"class":40},[30,47039,698],{"class":321},[30,47041,32208],{"class":40},[30,47043,42394],{"class":321},[30,47045,32208],{"class":40},[30,47047,38185],{"class":321},[30,47049,47050,47052,47054,47056,47058,47060,47062,47064,47066,47068,47070,47072,47074,47076,47078],{"class":32,"line":10088},[30,47051,42367],{"class":321},[30,47053,42688],{"class":40},[30,47055,698],{"class":321},[30,47057,35078],{"class":40},[30,47059,42376],{"class":321},[30,47061,42297],{"class":40},[30,47063,698],{"class":321},[30,47065,35078],{"class":40},[30,47067,42385],{"class":321},[30,47069,927],{"class":40},[30,47071,698],{"class":321},[30,47073,32208],{"class":40},[30,47075,42394],{"class":321},[30,47077,32208],{"class":40},[30,47079,38185],{"class":321},[30,47081,47082,47084,47086,47088,47090],{"class":32,"line":10094},[30,47083,42751],{"class":321},[30,47085,537],{"class":40},[30,47087,698],{"class":321},[30,47089,537],{"class":40},[30,47091,42760],{"class":321},[30,47093,47094],{"class":32,"line":10102},[30,47095,38928],{"class":321},[30,47097,47098,47100,47102,47104,47106],{"class":32,"line":10107},[30,47099,38933],{"class":321},[30,47101,42771],{"class":40},[30,47103,698],{"class":321},[30,47105,398],{"class":40},[30,47107,328],{"class":321},[30,47109,47110],{"class":32,"line":16786},[30,47111,38264],{"class":321},[30,47113,47114],{"class":32,"line":16792},[30,47115,42786],{"class":379},[30,47117,47118,47120,47122,47124,47126],{"class":32,"line":16815},[30,47119,3585],{"class":317},[30,47121,39006],{"class":321},[30,47123,26181],{"class":317},[30,47125,39011],{"class":40},[30,47127,39014],{"class":321},[30,47129,47130,47132,47134],{"class":32,"line":16821},[30,47131,4824],{"class":317},[30,47133,39026],{"class":40},[30,47135,39029],{"class":321},[30,47137,47138,47140,47142,47144,47146,47148,47150,47152,47154],{"class":32,"line":16844},[30,47139,39039],{"class":321},[30,47141,42813],{"class":5398},[30,47143,367],{"class":317},[30,47145,42818],{"class":74},[30,47147,698],{"class":321},[30,47149,39042],{"class":5398},[30,47151,367],{"class":317},[30,47153,39047],{"class":74},[30,47155,328],{"class":321},[30,47157,47158],{"class":32,"line":16858},[30,47159,42833],{"class":379},[30,47161,47162],{"class":32,"line":16878},[30,47163,42838],{"class":379},[30,47165,47166],{"class":32,"line":16884},[30,47167,42843],{"class":379},[30,47169,47170],{"class":32,"line":16895},[30,47171,42848],{"class":379},[30,47173,47174],{"class":32,"line":16918},[30,47175,42853],{"class":379},[30,47177,47178],{"class":32,"line":16940},[30,47179,42858],{"class":379},[30,47181,47182,47184,47186,47188,47190,47192],{"class":32,"line":16945},[30,47183,39059],{"class":317},[30,47185,39062],{"class":321},[30,47187,39065],{"class":317},[30,47189,39068],{"class":317},[30,47191,39071],{"class":40},[30,47193,3921],{"class":321},[30,47195,47196,47198,47200],{"class":32,"line":16951},[30,47197,39083],{"class":321},[30,47199,511],{"class":40},[30,47201,328],{"class":321},[30,47203,47204,47206,47208],{"class":32,"line":16965},[30,47205,42885],{"class":317},[30,47207,39026],{"class":40},[30,47209,39102],{"class":321},[30,47211,47212,47214,47216,47218,47220],{"class":32,"line":16978},[30,47213,42894],{"class":321},[30,47215,511],{"class":40},[30,47217,698],{"class":321},[30,47219,39124],{"class":40},[30,47221,328],{"class":321},[30,47223,47224,47226,47228,47230,47232,47234],{"class":32,"line":16983},[30,47225,42907],{"class":317},[30,47227,39062],{"class":321},[30,47229,39065],{"class":317},[30,47231,39068],{"class":317},[30,47233,39071],{"class":40},[30,47235,3921],{"class":321},[30,47237,47238,47240,47242],{"class":32,"line":16997},[30,47239,42922],{"class":321},[30,47241,511],{"class":40},[30,47243,328],{"class":321},[30,47245,47246],{"class":32,"line":17002},[30,47247,35303],{"class":379},[30,47249,47250,47252,47254],{"class":32,"line":17008},[30,47251,30939],{"class":317},[30,47253,31231],{"class":36},[30,47255,31234],{"class":321},[30,47257,47258,47260,47262,47264],{"class":32,"line":17013},[30,47259,31239],{"class":321},[30,47261,367],{"class":317},[30,47263,30961],{"class":40},[30,47265,42949],{"class":321},[30,47267,47268,47270,47272,47274],{"class":32,"line":17027},[30,47269,31239],{"class":321},[30,47271,367],{"class":317},[30,47273,30961],{"class":40},[30,47275,42960],{"class":321},[30,47277,47278,47280,47282,47284],{"class":32,"line":17032},[30,47279,31239],{"class":321},[30,47281,367],{"class":317},[30,47283,30961],{"class":40},[30,47285,42971],{"class":321},[30,47287,47288,47290,47292,47294],{"class":32,"line":17037},[30,47289,31239],{"class":321},[30,47291,367],{"class":317},[30,47293,30961],{"class":40},[30,47295,42982],{"class":321},[30,47297,47298,47300,47302,47304],{"class":32,"line":17051},[30,47299,31239],{"class":321},[30,47301,367],{"class":317},[30,47303,30961],{"class":40},[30,47305,42993],{"class":321},[30,47307,47308,47310],{"class":32,"line":17063},[30,47309,14934],{"class":317},[30,47311,31347],{"class":321},[30,47313,47314],{"class":32,"line":17068},[30,47315,2582],{"emptyLinePlaceholder":245},[30,47317,47318],{"class":32,"line":17081},[30,47319,43008],{"class":379},[30,47321,47322,47324,47326,47328,47330],{"class":32,"line":17086},[30,47323,1717],{"class":317},[30,47325,31358],{"class":40},[30,47327,3131],{"class":317},[30,47329,31363],{"class":74},[30,47331,3921],{"class":321},[30,47333,47334,47336,47338,47340,47342,47344,47346,47348,47350],{"class":32,"line":17091},[30,47335,31375],{"class":321},[30,47337,367],{"class":317},[30,47339,30589],{"class":321},[30,47341,31382],{"class":74},[30,47343,1887],{"class":317},[30,47345,31387],{"class":321},[30,47347,1884],{"class":317},[30,47349,30614],{"class":74},[30,47351,328],{"class":321},[30,47353,47354,47356,47358],{"class":32,"line":17096},[30,47355,31427],{"class":321},[30,47357,367],{"class":317},[30,47359,43049],{"class":321},[30,47361,47362,47364,47366,47368,47370,47372,47374,47376],{"class":32,"line":17109},[30,47363,31437],{"class":40},[30,47365,31440],{"class":321},[30,47367,537],{"class":40},[30,47369,698],{"class":321},[30,47371,31639],{"class":40},[30,47373,698],{"class":321},[30,47375,31639],{"class":40},[30,47377,31453],{"class":321},[22180,47379,47381],{"id":47380},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[157,47383,47384],{},"计算图片的均值与方差，用于训练中归一化处理操作",[20,47386,47388],{"className":30516,"code":47387,"language":30518,"meta":25,"style":25},"# PIL（Python Imaging Library）里的 Image 用来读取图片\nfrom PIL import Image\n# os 用来处理文件夹和文件路径\nimport os\n# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\nimport numpy as np\n\n# 文件夹路径，包含所有图片文件\nfolder_path = 'data_cat_dog'\n\n# 初始化累积变量\ntotal_pixels = 0\nsum_normalized_pixel_values = np.zeros(3)  # 如果是RGB图像，需要三个通道的均值和方差\n\n# 遍历文件夹中的图片文件\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):  # 可根据实际情况添加其他格式\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n\n            # print(image_path)\n            # print(normalized_image_array.shape)\n            # 累积归一化后的像素值和像素数量\n            total_pixels += normalized_image_array.size\n            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n            sum_normalized_pixel_values += np.sum(normalized_image_array, axis=(0, 1))\n\n# 用像素总和\u002F像素总数 就得到每个通道的均值\nmean = sum_normalized_pixel_values \u002F total_pixels\n\nsum_squared_diff = np.zeros(3)\n\n# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n# os.path.join(root, filename)：得到每张图片的完整路径\n# Image.open(image_path)：打开图片\n# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n            # print(normalized_image_array.shape)\n            # print(mean.shape)\n            # print(image_path)\n\n            try:\n                diff = (normalized_image_array - mean) ** 2\n                sum_squared_diff += np.sum(diff, axis=(0, 1))\n            except:\n                print(f\"捕获到自定义异常\")\n            # diff = (normalized_image_array - mean) ** 2\n            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n\nvariance = sum_squared_diff \u002F total_pixels\n\nprint(\"Mean:\", mean)\nprint(\"Variance:\", variance)\n\n",[27,47389,47390,47395,47408,47413,47419,47424,47434,47438,47443,47453,47457,47462,47472,47489,47493,47498,47510,47522,47553,47562,47572,47582,47586,47591,47606,47610,47615,47620,47625,47635,47640,47665,47669,47674,47689,47693,47706,47710,47715,47720,47725,47730,47735,47745,47755,47778,47786,47794,47802,47806,47818,47822,47827,47831,47835,47842,47862,47886,47893,47907,47912,47917,47921,47935,47939,47951],{"__ignoreMap":25},[30,47391,47392],{"class":32,"line":33},[30,47393,47394],{"class":379},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[30,47396,47397,47399,47402,47405],{"class":32,"line":44},[30,47398,30875],{"class":317},[30,47400,47401],{"class":40}," PIL",[30,47403,47404],{"class":317}," import",[30,47406,47407],{"class":321}," Image\n",[30,47409,47410],{"class":32,"line":52},[30,47411,47412],{"class":379},"# os 用来处理文件夹和文件路径\n",[30,47414,47415,47417],{"class":32,"line":60},[30,47416,30530],{"class":317},[30,47418,45443],{"class":321},[30,47420,47421],{"class":32,"line":68},[30,47422,47423],{"class":379},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[30,47425,47426,47428,47430,47432],{"class":32,"line":80},[30,47427,30530],{"class":317},[30,47429,31518],{"class":321},[30,47431,31521],{"class":317},[30,47433,31524],{"class":321},[30,47435,47436],{"class":32,"line":88},[30,47437,2582],{"emptyLinePlaceholder":245},[30,47439,47440],{"class":32,"line":96},[30,47441,47442],{"class":379},"# 文件夹路径，包含所有图片文件\n",[30,47444,47445,47448,47450],{"class":32,"line":104},[30,47446,47447],{"class":321},"folder_path ",[30,47449,367],{"class":317},[30,47451,47452],{"class":74}," 'data_cat_dog'\n",[30,47454,47455],{"class":32,"line":112},[30,47456,2582],{"emptyLinePlaceholder":245},[30,47458,47459],{"class":32,"line":123},[30,47460,47461],{"class":379},"# 初始化累积变量\n",[30,47463,47464,47467,47469],{"class":32,"line":131},[30,47465,47466],{"class":321},"total_pixels ",[30,47468,367],{"class":317},[30,47470,47471],{"class":40}," 0\n",[30,47473,47474,47477,47479,47482,47484,47486],{"class":32,"line":142},[30,47475,47476],{"class":321},"sum_normalized_pixel_values ",[30,47478,367],{"class":317},[30,47480,47481],{"class":321}," np.zeros(",[30,47483,392],{"class":40},[30,47485,45946],{"class":321},[30,47487,47488],{"class":379},"# 如果是RGB图像，需要三个通道的均值和方差\n",[30,47490,47491],{"class":32,"line":1811},[30,47492,2582],{"emptyLinePlaceholder":245},[30,47494,47495],{"class":32,"line":1825},[30,47496,47497],{"class":379},"# 遍历文件夹中的图片文件\n",[30,47499,47500,47502,47505,47507],{"class":32,"line":1830},[30,47501,3207],{"class":317},[30,47503,47504],{"class":321}," root, dirs, files ",[30,47506,26181],{"class":317},[30,47508,47509],{"class":321}," os.walk(folder_path):\n",[30,47511,47512,47514,47517,47519],{"class":32,"line":1836},[30,47513,3383],{"class":317},[30,47515,47516],{"class":321}," filename ",[30,47518,26181],{"class":317},[30,47520,47521],{"class":321}," files:\n",[30,47523,47524,47526,47529,47532,47534,47537,47539,47542,47544,47547,47550],{"class":32,"line":1857},[30,47525,2679],{"class":317},[30,47527,47528],{"class":321}," filename.endswith((",[30,47530,47531],{"class":74},"'.jpg'",[30,47533,12617],{"class":321},[30,47535,47536],{"class":74},"'.jpeg'",[30,47538,12617],{"class":321},[30,47540,47541],{"class":74},"'.png'",[30,47543,12617],{"class":321},[30,47545,47546],{"class":74},"'.bmp'",[30,47548,47549],{"class":321},")):  ",[30,47551,47552],{"class":379},"# 可根据实际情况添加其他格式\n",[30,47554,47555,47557,47559],{"class":32,"line":1862},[30,47556,45811],{"class":321},[30,47558,367],{"class":317},[30,47560,47561],{"class":321}," os.path.join(root, filename)\n",[30,47563,47564,47567,47569],{"class":32,"line":1876},[30,47565,47566],{"class":321},"            image ",[30,47568,367],{"class":317},[30,47570,47571],{"class":321}," Image.open(image_path)\n",[30,47573,47574,47577,47579],{"class":32,"line":1881},[30,47575,47576],{"class":321},"            image_array ",[30,47578,367],{"class":317},[30,47580,47581],{"class":321}," np.array(image)\n",[30,47583,47584],{"class":32,"line":1910},[30,47585,2582],{"emptyLinePlaceholder":245},[30,47587,47588],{"class":32,"line":1915},[30,47589,47590],{"class":379},"            # 归一化像素值到0-1之间\n",[30,47592,47593,47596,47598,47601,47603],{"class":32,"line":1932},[30,47594,47595],{"class":321},"            normalized_image_array ",[30,47597,367],{"class":317},[30,47599,47600],{"class":321}," image_array ",[30,47602,904],{"class":317},[30,47604,47605],{"class":40}," 255.0\n",[30,47607,47608],{"class":32,"line":1937},[30,47609,2582],{"emptyLinePlaceholder":245},[30,47611,47612],{"class":32,"line":1942},[30,47613,47614],{"class":379},"            # print(image_path)\n",[30,47616,47617],{"class":32,"line":1947},[30,47618,47619],{"class":379},"            # print(normalized_image_array.shape)\n",[30,47621,47622],{"class":32,"line":1961},[30,47623,47624],{"class":379},"            # 累积归一化后的像素值和像素数量\n",[30,47626,47627,47630,47632],{"class":32,"line":1966},[30,47628,47629],{"class":321},"            total_pixels ",[30,47631,9659],{"class":317},[30,47633,47634],{"class":321}," normalized_image_array.size\n",[30,47636,47637],{"class":32,"line":2759},[30,47638,47639],{"class":379},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[30,47641,47642,47645,47647,47650,47653,47655,47657,47659,47661,47663],{"class":32,"line":2773},[30,47643,47644],{"class":321},"            sum_normalized_pixel_values ",[30,47646,9659],{"class":317},[30,47648,47649],{"class":321}," np.sum(normalized_image_array, ",[30,47651,47652],{"class":5398},"axis",[30,47654,367],{"class":317},[30,47656,322],{"class":321},[30,47658,511],{"class":40},[30,47660,12617],{"class":321},[30,47662,537],{"class":40},[30,47664,30635],{"class":321},[30,47666,47667],{"class":32,"line":2781},[30,47668,2582],{"emptyLinePlaceholder":245},[30,47670,47671],{"class":32,"line":2786},[30,47672,47673],{"class":379},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[30,47675,47676,47679,47681,47684,47686],{"class":32,"line":2792},[30,47677,47678],{"class":321},"mean ",[30,47680,367],{"class":317},[30,47682,47683],{"class":321}," sum_normalized_pixel_values ",[30,47685,904],{"class":317},[30,47687,47688],{"class":321}," total_pixels\n",[30,47690,47691],{"class":32,"line":2798},[30,47692,2582],{"emptyLinePlaceholder":245},[30,47694,47695,47698,47700,47702,47704],{"class":32,"line":2803},[30,47696,47697],{"class":321},"sum_squared_diff ",[30,47699,367],{"class":317},[30,47701,47481],{"class":321},[30,47703,392],{"class":40},[30,47705,328],{"class":321},[30,47707,47708],{"class":32,"line":8130},[30,47709,2582],{"emptyLinePlaceholder":245},[30,47711,47712],{"class":32,"line":8154},[30,47713,47714],{"class":379},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[30,47716,47717],{"class":32,"line":8159},[30,47718,47719],{"class":379},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[30,47721,47722],{"class":32,"line":8165},[30,47723,47724],{"class":379},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[30,47726,47727],{"class":32,"line":8192},[30,47728,47729],{"class":379},"# Image.open(image_path)：打开图片\n",[30,47731,47732],{"class":32,"line":8197},[30,47733,47734],{"class":379},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[30,47736,47737,47739,47741,47743],{"class":32,"line":8203},[30,47738,3207],{"class":317},[30,47740,47504],{"class":321},[30,47742,26181],{"class":317},[30,47744,47509],{"class":321},[30,47746,47747,47749,47751,47753],{"class":32,"line":8215},[30,47748,3383],{"class":317},[30,47750,47516],{"class":321},[30,47752,26181],{"class":317},[30,47754,47521],{"class":321},[30,47756,47757,47759,47761,47763,47765,47767,47769,47771,47773,47775],{"class":32,"line":8227},[30,47758,2679],{"class":317},[30,47760,47528],{"class":321},[30,47762,47531],{"class":74},[30,47764,12617],{"class":321},[30,47766,47536],{"class":74},[30,47768,12617],{"class":321},[30,47770,47541],{"class":74},[30,47772,12617],{"class":321},[30,47774,47546],{"class":74},[30,47776,47777],{"class":321},")):\n",[30,47779,47780,47782,47784],{"class":32,"line":8239},[30,47781,45811],{"class":321},[30,47783,367],{"class":317},[30,47785,47561],{"class":321},[30,47787,47788,47790,47792],{"class":32,"line":9898},[30,47789,47566],{"class":321},[30,47791,367],{"class":317},[30,47793,47571],{"class":321},[30,47795,47796,47798,47800],{"class":32,"line":9923},[30,47797,47576],{"class":321},[30,47799,367],{"class":317},[30,47801,47581],{"class":321},[30,47803,47804],{"class":32,"line":9946},[30,47805,47590],{"class":379},[30,47807,47808,47810,47812,47814,47816],{"class":32,"line":9970},[30,47809,47595],{"class":321},[30,47811,367],{"class":317},[30,47813,47600],{"class":321},[30,47815,904],{"class":317},[30,47817,47605],{"class":40},[30,47819,47820],{"class":32,"line":9975},[30,47821,47619],{"class":379},[30,47823,47824],{"class":32,"line":9980},[30,47825,47826],{"class":379},"            # print(mean.shape)\n",[30,47828,47829],{"class":32,"line":9985},[30,47830,47614],{"class":379},[30,47832,47833],{"class":32,"line":9994},[30,47834,2582],{"emptyLinePlaceholder":245},[30,47836,47837,47840],{"class":32,"line":9999},[30,47838,47839],{"class":317},"            try",[30,47841,3921],{"class":321},[30,47843,47844,47847,47849,47852,47854,47857,47859],{"class":32,"line":10005},[30,47845,47846],{"class":321},"                diff ",[30,47848,367],{"class":317},[30,47850,47851],{"class":321}," (normalized_image_array ",[30,47853,852],{"class":317},[30,47855,47856],{"class":321}," mean) ",[30,47858,10843],{"class":317},[30,47860,47861],{"class":40}," 2\n",[30,47863,47864,47867,47869,47872,47874,47876,47878,47880,47882,47884],{"class":32,"line":10026},[30,47865,47866],{"class":321},"                sum_squared_diff ",[30,47868,9659],{"class":317},[30,47870,47871],{"class":321}," np.sum(diff, ",[30,47873,47652],{"class":5398},[30,47875,367],{"class":317},[30,47877,322],{"class":321},[30,47879,511],{"class":40},[30,47881,12617],{"class":321},[30,47883,537],{"class":40},[30,47885,30635],{"class":321},[30,47887,47888,47891],{"class":32,"line":10032},[30,47889,47890],{"class":317},"            except",[30,47892,3921],{"class":321},[30,47894,47895,47898,47900,47902,47905],{"class":32,"line":10046},[30,47896,47897],{"class":40},"                print",[30,47899,322],{"class":321},[30,47901,373],{"class":317},[30,47903,47904],{"class":74},"\"捕获到自定义异常\"",[30,47906,328],{"class":321},[30,47908,47909],{"class":32,"line":10052},[30,47910,47911],{"class":379},"            # diff = (normalized_image_array - mean) ** 2\n",[30,47913,47914],{"class":32,"line":10079},[30,47915,47916],{"class":379},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[30,47918,47919],{"class":32,"line":10088},[30,47920,2582],{"emptyLinePlaceholder":245},[30,47922,47923,47926,47928,47931,47933],{"class":32,"line":10094},[30,47924,47925],{"class":321},"variance ",[30,47927,367],{"class":317},[30,47929,47930],{"class":321}," sum_squared_diff ",[30,47932,904],{"class":317},[30,47934,47688],{"class":321},[30,47936,47937],{"class":32,"line":10102},[30,47938,2582],{"emptyLinePlaceholder":245},[30,47940,47941,47943,47945,47948],{"class":32,"line":10107},[30,47942,30553],{"class":40},[30,47944,322],{"class":321},[30,47946,47947],{"class":74},"\"Mean:\"",[30,47949,47950],{"class":321},", mean)\n",[30,47952,47953,47955,47957,47960],{"class":32,"line":16786},[30,47954,30553],{"class":40},[30,47956,322],{"class":321},[30,47958,47959],{"class":74},"\"Variance:\"",[30,47961,47962],{"class":321},", variance)\n",[20,47964,47966],{"className":30516,"code":47965,"language":30518,"meta":25,"style":25},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import ImageFolder # 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftrain\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    train_data=ImageFolder(ROOT_PATH,transform=train_transform)\n\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=60)\n    matplot_acc_loss(train_process)\n",[27,47967,47968,47974,47980,47990,47996,48006,48020,48030,48040,48050,48054,48064,48074,48078,48082,48090,48095,48100,48119,48123,48128,48133,48138,48143,48184,48189,48199,48204,48217,48222,48227,48232,48237,48242,48246,48251,48256,48278,48282,48314,48328,48338,48348,48352,48362,48376,48386,48396,48406,48412,48416,48420,48424,48428,48432,48440,48460,48464,48468,48472,48476,48492,48496,48500,48508,48512,48516,48524,48528,48532,48536,48544,48548,48552,48556,48564,48568,48576,48580,48588,48592,48600,48604,48612,48616,48620,48628,48632,48636,48648,48672,48686,48690,48694,48698,48706,48710,48718,48722,48730,48734,48742,48746,48754,48758,48766,48770,48782,48786,48794,48798,48806,48810,48814,48818,48822,48830,48834,48850,48854,48862,48866,48870,48874,48878,48882,48886,48890,48906,48910,48922,48926,48938,48942,48954,48958,48966,48970,48978,48982,48986,48990,48996,49000,49008,49012,49028,49032,49040,49044,49060,49072,49076,49088,49092,49096,49104,49108,49112,49120,49124,49132,49136,49144,49148,49152,49194,49236,49240,49244,49260,49264,49280,49284,49288,49296,49300,49304,49316,49354,49358,49362,49370,49374,49388,49398,49404,49410,49416,49422,49426,49430,49436,49440,49444,49452,49456,49474,49478,49482,49486,49502,49506,49510,49514,49518,49522,49542,49562,49566,49570,49574,49582,49590,49594,49610,49630,49650,49654,49659,49668,49677,49682,49687,49692,49705,49710,49719,49728,49745],{"__ignoreMap":25},[30,47969,47970,47972],{"class":32,"line":33},[30,47971,30530],{"class":317},[30,47973,31960],{"class":321},[30,47975,47976,47978],{"class":32,"line":44},[30,47977,30530],{"class":317},[30,47979,31967],{"class":321},[30,47981,47982,47984,47986,47988],{"class":32,"line":52},[30,47983,30530],{"class":317},[30,47985,31978],{"class":321},[30,47987,31521],{"class":317},[30,47989,31983],{"class":321},[30,47991,47992,47994],{"class":32,"line":60},[30,47993,30530],{"class":317},[30,47995,30533],{"class":321},[30,47997,47998,48000,48002,48004],{"class":32,"line":68},[30,47999,30875],{"class":317},[30,48001,31553],{"class":321},[30,48003,30530],{"class":317},[30,48005,32000],{"class":321},[30,48007,48008,48010,48012,48014,48017],{"class":32,"line":80},[30,48009,30875],{"class":317},[30,48011,31506],{"class":321},[30,48013,30530],{"class":317},[30,48015,48016],{"class":321}," ImageFolder ",[30,48018,48019],{"class":379},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[30,48021,48022,48024,48026,48028],{"class":32,"line":88},[30,48023,30875],{"class":317},[30,48025,31536],{"class":321},[30,48027,30530],{"class":317},[30,48029,31541],{"class":321},[30,48031,48032,48034,48036,48038],{"class":32,"line":96},[30,48033,30530],{"class":317},[30,48035,31553],{"class":321},[30,48037,31521],{"class":317},[30,48039,31558],{"class":321},[30,48041,48042,48044,48046,48048],{"class":32,"line":104},[30,48043,30530],{"class":317},[30,48045,31570],{"class":321},[30,48047,31521],{"class":317},[30,48049,31575],{"class":321},[30,48051,48052],{"class":32,"line":112},[30,48053,32045],{"class":379},[30,48055,48056,48058,48060,48062],{"class":32,"line":123},[30,48057,30875],{"class":317},[30,48059,32052],{"class":321},[30,48061,30530],{"class":317},[30,48063,43169],{"class":321},[30,48065,48066,48068,48070,48072],{"class":32,"line":131},[30,48067,30875],{"class":317},[30,48069,30878],{"class":321},[30,48071,30530],{"class":317},[30,48073,30883],{"class":321},[30,48075,48076],{"class":32,"line":142},[30,48077,2582],{"emptyLinePlaceholder":245},[30,48079,48080],{"class":32,"line":1811},[30,48081,32080],{"class":379},[30,48083,48084,48086,48088],{"class":32,"line":1825},[30,48085,32085],{"class":317},[30,48087,32088],{"class":36},[30,48089,32091],{"class":321},[30,48091,48092],{"class":32,"line":1830},[30,48093,48094],{"class":379},"    # 导入自己的数据集，并进行数据处理\n",[30,48096,48097],{"class":32,"line":1836},[30,48098,48099],{"class":379},"    # 定义数据集的路径\n",[30,48101,48102,48105,48107,48109,48111,48113,48117],{"class":32,"line":1857},[30,48103,48104],{"class":40},"    ROOT_PATH",[30,48106,367],{"class":317},[30,48108,990],{"class":317},[30,48110,571],{"class":74},[30,48112,878],{"class":40},[30,48114,48116],{"class":48115},"sA_wV","\u002Fdata\u002Ftrain",[30,48118,25306],{"class":74},[30,48120,48121],{"class":32,"line":1862},[30,48122,2582],{"emptyLinePlaceholder":245},[30,48124,48125],{"class":32,"line":1876},[30,48126,48127],{"class":379},"    # 定义归一化方法\n",[30,48129,48130],{"class":32,"line":1881},[30,48131,48132],{"class":379},"    # 这里需要先计算一下数据集的均值和方差\n",[30,48134,48135],{"class":32,"line":1910},[30,48136,48137],{"class":379},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[30,48139,48140],{"class":32,"line":1915},[30,48141,48142],{"class":379},"    # 第一个参数是均值，第二个参数是方差\n",[30,48144,48145,48148,48150,48153,48156,48158,48161,48163,48166,48169,48172,48174,48177,48179,48182],{"class":32,"line":1932},[30,48146,48147],{"class":321},"    normalize",[30,48149,367],{"class":317},[30,48151,48152],{"class":321},"transforms.Normalize([",[30,48154,48155],{"class":40},"0.162",[30,48157,698],{"class":321},[30,48159,48160],{"class":40},"0.151",[30,48162,698],{"class":321},[30,48164,48165],{"class":40},"0.138",[30,48167,48168],{"class":321},"],[",[30,48170,48171],{"class":40},"0.058",[30,48173,698],{"class":321},[30,48175,48176],{"class":40},"0.052",[30,48178,698],{"class":321},[30,48180,48181],{"class":40},"0.048",[30,48183,4839],{"class":321},[30,48185,48186],{"class":32,"line":1937},[30,48187,48188],{"class":379},"    # 定义数据集处理方法变量\n",[30,48190,48191,48194,48196],{"class":32,"line":1942},[30,48192,48193],{"class":321},"    train_transform",[30,48195,367],{"class":317},[30,48197,48198],{"class":321},"transforms.Compose([\n",[30,48200,48201],{"class":32,"line":1947},[30,48202,48203],{"class":379},"        # 调整图像大小为224*224\n",[30,48205,48206,48209,48211,48213,48215],{"class":32,"line":1961},[30,48207,48208],{"class":321},"        transforms.Resize((",[30,48210,31639],{"class":40},[30,48212,698],{"class":321},[30,48214,31639],{"class":40},[30,48216,42760],{"class":321},[30,48218,48219],{"class":32,"line":1966},[30,48220,48221],{"class":379},"        # 将图像转换为张量\n",[30,48223,48224],{"class":32,"line":2759},[30,48225,48226],{"class":321},"        transforms.ToTensor(),\n",[30,48228,48229],{"class":32,"line":2773},[30,48230,48231],{"class":321},"        normalize])\n",[30,48233,48234],{"class":32,"line":2781},[30,48235,48236],{"class":379},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[30,48238,48239],{"class":32,"line":2786},[30,48240,48241],{"class":379},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[30,48243,48244],{"class":32,"line":2792},[30,48245,2582],{"emptyLinePlaceholder":245},[30,48247,48248],{"class":32,"line":2798},[30,48249,48250],{"class":379},"    # 加载数据集\n",[30,48252,48253],{"class":32,"line":2803},[30,48254,48255],{"class":379},"    # 传入数据集路径与处理方法\n",[30,48257,48258,48260,48262,48265,48268,48270,48273,48275],{"class":32,"line":8130},[30,48259,32096],{"class":321},[30,48261,367],{"class":317},[30,48263,48264],{"class":321},"ImageFolder(",[30,48266,48267],{"class":40},"ROOT_PATH",[30,48269,698],{"class":321},[30,48271,48272],{"class":5398},"transform",[30,48274,367],{"class":317},[30,48276,48277],{"class":321},"train_transform)\n",[30,48279,48280],{"class":32,"line":8154},[30,48281,2582],{"emptyLinePlaceholder":245},[30,48283,48284,48286,48288,48290,48292,48294,48296,48298,48300,48302,48304,48306,48308,48310,48312],{"class":32,"line":8159},[30,48285,32148],{"class":321},[30,48287,367],{"class":317},[30,48289,32153],{"class":321},[30,48291,32156],{"class":40},[30,48293,322],{"class":321},[30,48295,32161],{"class":40},[30,48297,775],{"class":317},[30,48299,7540],{"class":40},[30,48301,32168],{"class":321},[30,48303,32156],{"class":40},[30,48305,322],{"class":321},[30,48307,32175],{"class":40},[30,48309,775],{"class":317},[30,48311,7540],{"class":40},[30,48313,32182],{"class":321},[30,48315,48316,48318,48320,48322,48324,48326],{"class":32,"line":8165},[30,48317,32187],{"class":321},[30,48319,367],{"class":317},[30,48321,32192],{"class":321},[30,48323,31675],{"class":5398},[30,48325,367],{"class":317},[30,48327,31680],{"class":321},[30,48329,48330,48332,48334,48336],{"class":32,"line":8192},[30,48331,32203],{"class":5398},[30,48333,367],{"class":317},[30,48335,517],{"class":40},[30,48337,31604],{"class":321},[30,48339,48340,48342,48344,48346],{"class":32,"line":8197},[30,48341,32215],{"class":5398},[30,48343,367],{"class":317},[30,48345,31614],{"class":40},[30,48347,31604],{"class":321},[30,48349,48350],{"class":32,"line":8203},[30,48351,32226],{"class":379},[30,48353,48354,48356,48358,48360],{"class":32,"line":8215},[30,48355,32231],{"class":5398},[30,48357,367],{"class":317},[30,48359,715],{"class":40},[30,48361,328],{"class":321},[30,48363,48364,48366,48368,48370,48372,48374],{"class":32,"line":8227},[30,48365,32242],{"class":321},[30,48367,367],{"class":317},[30,48369,31672],{"class":321},[30,48371,31675],{"class":5398},[30,48373,367],{"class":317},[30,48375,32253],{"class":321},[30,48377,48378,48380,48382,48384],{"class":32,"line":8239},[30,48379,32258],{"class":5398},[30,48381,367],{"class":317},[30,48383,517],{"class":40},[30,48385,31604],{"class":321},[30,48387,48388,48390,48392,48394],{"class":32,"line":9898},[30,48389,32269],{"class":5398},[30,48391,367],{"class":317},[30,48393,31614],{"class":40},[30,48395,31604],{"class":321},[30,48397,48398,48400,48402,48404],{"class":32,"line":9923},[30,48399,32280],{"class":5398},[30,48401,367],{"class":317},[30,48403,715],{"class":40},[30,48405,328],{"class":321},[30,48407,48408,48410],{"class":32,"line":9946},[30,48409,4272],{"class":317},[30,48411,32293],{"class":321},[30,48413,48414],{"class":32,"line":9970},[30,48415,2582],{"emptyLinePlaceholder":245},[30,48417,48418],{"class":32,"line":9975},[30,48419,32302],{"class":379},[30,48421,48422],{"class":32,"line":9980},[30,48423,32307],{"class":379},[30,48425,48426],{"class":32,"line":9985},[30,48427,2582],{"emptyLinePlaceholder":245},[30,48429,48430],{"class":32,"line":9994},[30,48431,32316],{"class":379},[30,48433,48434,48436,48438],{"class":32,"line":9999},[30,48435,32085],{"class":317},[30,48437,32323],{"class":36},[30,48439,32326],{"class":321},[30,48441,48442,48444,48446,48448,48450,48452,48454,48456,48458],{"class":32,"line":10005},[30,48443,31375],{"class":321},[30,48445,367],{"class":317},[30,48447,30589],{"class":321},[30,48449,31382],{"class":74},[30,48451,1887],{"class":317},[30,48453,31387],{"class":321},[30,48455,1884],{"class":317},[30,48457,32345],{"class":74},[30,48459,328],{"class":321},[30,48461,48462],{"class":32,"line":10026},[30,48463,2582],{"emptyLinePlaceholder":245},[30,48465,48466],{"class":32,"line":10032},[30,48467,32360],{"class":379},[30,48469,48470],{"class":32,"line":10046},[30,48471,32365],{"class":379},[30,48473,48474],{"class":32,"line":10052},[30,48475,32370],{"class":379},[30,48477,48478,48480,48482,48484,48486,48488,48490],{"class":32,"line":10079},[30,48479,32375],{"class":321},[30,48481,367],{"class":317},[30,48483,32380],{"class":321},[30,48485,32383],{"class":5398},[30,48487,367],{"class":317},[30,48489,32388],{"class":40},[30,48491,328],{"class":321},[30,48493,48494],{"class":32,"line":10088},[30,48495,2582],{"emptyLinePlaceholder":245},[30,48497,48498],{"class":32,"line":10094},[30,48499,32399],{"class":379},[30,48501,48502,48504,48506],{"class":32,"line":10102},[30,48503,32404],{"class":321},[30,48505,367],{"class":317},[30,48507,32409],{"class":321},[30,48509,48510],{"class":32,"line":10107},[30,48511,2582],{"emptyLinePlaceholder":245},[30,48513,48514],{"class":32,"line":16786},[30,48515,32418],{"class":379},[30,48517,48518,48520,48522],{"class":32,"line":16792},[30,48519,31427],{"class":321},[30,48521,367],{"class":317},[30,48523,32427],{"class":321},[30,48525,48526],{"class":32,"line":16815},[30,48527,32432],{"class":379},[30,48529,48530],{"class":32,"line":16821},[30,48531,32437],{"class":379},[30,48533,48534],{"class":32,"line":16844},[30,48535,32442],{"class":379},[30,48537,48538,48540,48542],{"class":32,"line":16858},[30,48539,32447],{"class":321},[30,48541,367],{"class":317},[30,48543,32452],{"class":321},[30,48545,48546],{"class":32,"line":16878},[30,48547,2582],{"emptyLinePlaceholder":245},[30,48549,48550],{"class":32,"line":16884},[30,48551,32465],{"class":379},[30,48553,48554],{"class":32,"line":16895},[30,48555,32470],{"class":379},[30,48557,48558,48560,48562],{"class":32,"line":16918},[30,48559,32475],{"class":321},[30,48561,367],{"class":317},[30,48563,32480],{"class":40},[30,48565,48566],{"class":32,"line":16940},[30,48567,32485],{"class":379},[30,48569,48570,48572,48574],{"class":32,"line":16945},[30,48571,32490],{"class":321},[30,48573,367],{"class":317},[30,48575,32495],{"class":321},[30,48577,48578],{"class":32,"line":16951},[30,48579,32500],{"class":379},[30,48581,48582,48584,48586],{"class":32,"line":16965},[30,48583,32505],{"class":321},[30,48585,367],{"class":317},[30,48587,32495],{"class":321},[30,48589,48590],{"class":32,"line":16978},[30,48591,32514],{"class":379},[30,48593,48594,48596,48598],{"class":32,"line":16983},[30,48595,32519],{"class":321},[30,48597,367],{"class":317},[30,48599,32495],{"class":321},[30,48601,48602],{"class":32,"line":16997},[30,48603,32528],{"class":379},[30,48605,48606,48608,48610],{"class":32,"line":17002},[30,48607,32533],{"class":321},[30,48609,367],{"class":317},[30,48611,32495],{"class":321},[30,48613,48614],{"class":32,"line":17008},[30,48615,2582],{"emptyLinePlaceholder":245},[30,48617,48618],{"class":32,"line":17013},[30,48619,32546],{"class":379},[30,48621,48622,48624,48626],{"class":32,"line":17027},[30,48623,32551],{"class":321},[30,48625,367],{"class":317},[30,48627,32556],{"class":321},[30,48629,48630],{"class":32,"line":17032},[30,48631,2582],{"emptyLinePlaceholder":245},[30,48633,48634],{"class":32,"line":17037},[30,48635,32569],{"class":379},[30,48637,48638,48640,48642,48644,48646],{"class":32,"line":17051},[30,48639,3383],{"class":317},[30,48641,32576],{"class":321},[30,48643,26181],{"class":317},[30,48645,32581],{"class":40},[30,48647,32584],{"class":321},[30,48649,48650,48652,48654,48656,48658,48660,48662,48664,48666,48668,48670],{"class":32,"line":17063},[30,48651,32589],{"class":40},[30,48653,322],{"class":321},[30,48655,32594],{"class":74},[30,48657,32597],{"class":40},[30,48659,904],{"class":74},[30,48661,32597],{"class":40},[30,48663,571],{"class":74},[30,48665,32606],{"class":321},[30,48667,852],{"class":317},[30,48669,537],{"class":40},[30,48671,30635],{"class":321},[30,48673,48674,48676,48678,48680,48682,48684],{"class":32,"line":17068},[30,48675,32589],{"class":40},[30,48677,322],{"class":321},[30,48679,32621],{"class":74},[30,48681,775],{"class":317},[30,48683,766],{"class":40},[30,48685,328],{"class":321},[30,48687,48688],{"class":32,"line":17081},[30,48689,2582],{"emptyLinePlaceholder":245},[30,48691,48692],{"class":32,"line":17086},[30,48693,32636],{"class":379},[30,48695,48696],{"class":32,"line":17091},[30,48697,32641],{"class":379},[30,48699,48700,48702,48704],{"class":32,"line":17096},[30,48701,32646],{"class":321},[30,48703,367],{"class":317},[30,48705,32480],{"class":40},[30,48707,48708],{"class":32,"line":17109},[30,48709,32655],{"class":379},[30,48711,48712,48714,48716],{"class":32,"line":17114},[30,48713,32660],{"class":321},[30,48715,367],{"class":317},[30,48717,3267],{"class":40},[30,48719,48720],{"class":32,"line":32771},[30,48721,32669],{"class":379},[30,48723,48724,48726,48728],{"class":32,"line":32777},[30,48725,32674],{"class":321},[30,48727,367],{"class":317},[30,48729,32480],{"class":40},[30,48731,48732],{"class":32,"line":32783},[30,48733,32683],{"class":379},[30,48735,48736,48738,48740],{"class":32,"line":32789},[30,48737,32688],{"class":321},[30,48739,367],{"class":317},[30,48741,3267],{"class":40},[30,48743,48744],{"class":32,"line":32795},[30,48745,32697],{"class":379},[30,48747,48748,48750,48752],{"class":32,"line":32806},[30,48749,32702],{"class":321},[30,48751,367],{"class":317},[30,48753,3267],{"class":40},[30,48755,48756],{"class":32,"line":32812},[30,48757,32711],{"class":379},[30,48759,48760,48762,48764],{"class":32,"line":32832},[30,48761,32716],{"class":321},[30,48763,367],{"class":317},[30,48765,3267],{"class":40},[30,48767,48768],{"class":32,"line":32838},[30,48769,32725],{"class":379},[30,48771,48772,48774,48776,48778,48780],{"class":32,"line":32849},[30,48773,3585],{"class":317},[30,48775,31739],{"class":321},[30,48777,26181],{"class":317},[30,48779,31744],{"class":40},[30,48781,32738],{"class":321},[30,48783,48784],{"class":32,"line":32855},[30,48785,32743],{"class":379},[30,48787,48788,48790,48792],{"class":32,"line":32861},[30,48789,32748],{"class":321},[30,48791,367],{"class":317},[30,48793,32753],{"class":321},[30,48795,48796],{"class":32,"line":32867},[30,48797,32758],{"class":379},[30,48799,48800,48802,48804],{"class":32,"line":32873},[30,48801,32763],{"class":321},[30,48803,367],{"class":317},[30,48805,32768],{"class":321},[30,48807,48808],{"class":32,"line":32879},[30,48809,32774],{"class":379},[30,48811,48812],{"class":32,"line":32885},[30,48813,32780],{"class":321},[30,48815,48816],{"class":32,"line":32891},[30,48817,32786],{"class":379},[30,48819,48820],{"class":32,"line":32911},[30,48821,32792],{"class":379},[30,48823,48824,48826,48828],{"class":32,"line":32917},[30,48825,32798],{"class":321},[30,48827,367],{"class":317},[30,48829,32803],{"class":321},[30,48831,48832],{"class":32,"line":32933},[30,48833,32809],{"class":379},[30,48835,48836,48838,48840,48842,48844,48846,48848],{"class":32,"line":32939},[30,48837,32815],{"class":321},[30,48839,367],{"class":317},[30,48841,32820],{"class":321},[30,48843,32823],{"class":5398},[30,48845,367],{"class":317},[30,48847,537],{"class":40},[30,48849,328],{"class":321},[30,48851,48852],{"class":32,"line":32953},[30,48853,32835],{"class":379},[30,48855,48856,48858,48860],{"class":32,"line":32959},[30,48857,32841],{"class":321},[30,48859,367],{"class":317},[30,48861,32846],{"class":321},[30,48863,48864],{"class":32,"line":32974},[30,48865,32852],{"class":379},[30,48867,48868],{"class":32,"line":32980},[30,48869,32858],{"class":321},[30,48871,48872],{"class":32,"line":32989},[30,48873,32864],{"class":379},[30,48875,48876],{"class":32,"line":32995},[30,48877,32870],{"class":321},[30,48879,48880],{"class":32,"line":33004},[30,48881,32876],{"class":379},[30,48883,48884],{"class":32,"line":33010},[30,48885,32882],{"class":321},[30,48887,48888],{"class":32,"line":33016},[30,48889,32888],{"class":379},[30,48891,48892,48894,48896,48898,48900,48902,48904],{"class":32,"line":33025},[30,48893,32894],{"class":321},[30,48895,9659],{"class":317},[30,48897,32899],{"class":321},[30,48899,775],{"class":317},[30,48901,32904],{"class":321},[30,48903,511],{"class":40},[30,48905,328],{"class":321},[30,48907,48908],{"class":32,"line":33031},[30,48909,32914],{"class":379},[30,48911,48912,48914,48916,48918,48920],{"class":32,"line":33042},[30,48913,32920],{"class":321},[30,48915,9659],{"class":317},[30,48917,32925],{"class":321},[30,48919,3131],{"class":317},[30,48921,32930],{"class":321},[30,48923,48924],{"class":32,"line":33048},[30,48925,32936],{"class":379},[30,48927,48928,48930,48932,48934,48936],{"class":32,"line":33067},[30,48929,32942],{"class":321},[30,48931,9659],{"class":317},[30,48933,32904],{"class":321},[30,48935,511],{"class":40},[30,48937,328],{"class":321},[30,48939,48940],{"class":32,"line":33073},[30,48941,32956],{"class":379},[30,48943,48944,48946,48948,48950,48952],{"class":32,"line":33084},[30,48945,3585],{"class":317},[30,48947,32964],{"class":321},[30,48949,26181],{"class":317},[30,48951,31744],{"class":40},[30,48953,32971],{"class":321},[30,48955,48956],{"class":32,"line":33090},[30,48957,32977],{"class":379},[30,48959,48960,48962,48964],{"class":32,"line":33110},[30,48961,32748],{"class":321},[30,48963,367],{"class":317},[30,48965,32753],{"class":321},[30,48967,48968],{"class":32,"line":33126},[30,48969,32992],{"class":379},[30,48971,48972,48974,48976],{"class":32,"line":33132},[30,48973,32763],{"class":321},[30,48975,367],{"class":317},[30,48977,32768],{"class":321},[30,48979,48980],{"class":32,"line":33146},[30,48981,33007],{"class":379},[30,48983,48984],{"class":32,"line":33152},[30,48985,33013],{"class":321},[30,48987,48988],{"class":32,"line":33158},[30,48989,36494],{"class":379},[30,48991,48992,48994],{"class":32,"line":33169},[30,48993,33019],{"class":317},[30,48995,33022],{"class":321},[30,48997,48998],{"class":32,"line":33175},[30,48999,33028],{"class":379},[30,49001,49002,49004,49006],{"class":32,"line":33181},[30,49003,36509],{"class":321},[30,49005,367],{"class":317},[30,49007,32803],{"class":321},[30,49009,49010],{"class":32,"line":33191},[30,49011,33045],{"class":379},[30,49013,49014,49016,49018,49020,49022,49024,49026],{"class":32,"line":33197},[30,49015,36522],{"class":321},[30,49017,367],{"class":317},[30,49019,32820],{"class":321},[30,49021,32823],{"class":5398},[30,49023,367],{"class":317},[30,49025,537],{"class":40},[30,49027,328],{"class":321},[30,49029,49030],{"class":32,"line":33208},[30,49031,33070],{"class":379},[30,49033,49034,49036,49038],{"class":32,"line":33214},[30,49035,36543],{"class":321},[30,49037,367],{"class":317},[30,49039,32846],{"class":321},[30,49041,49042],{"class":32,"line":33224},[30,49043,33087],{"class":379},[30,49045,49046,49048,49050,49052,49054,49056,49058],{"class":32,"line":33229},[30,49047,36556],{"class":321},[30,49049,9659],{"class":317},[30,49051,36561],{"class":321},[30,49053,775],{"class":317},[30,49055,32904],{"class":321},[30,49057,511],{"class":40},[30,49059,328],{"class":321},[30,49061,49062,49064,49066,49068,49070],{"class":32,"line":33235},[30,49063,36574],{"class":321},[30,49065,9659],{"class":317},[30,49067,32925],{"class":321},[30,49069,3131],{"class":317},[30,49071,32930],{"class":321},[30,49073,49074],{"class":32,"line":33284},[30,49075,36587],{"class":379},[30,49077,49078,49080,49082,49084,49086],{"class":32,"line":33331},[30,49079,36592],{"class":321},[30,49081,9659],{"class":317},[30,49083,32904],{"class":321},[30,49085,511],{"class":40},[30,49087,328],{"class":321},[30,49089,49090],{"class":32,"line":33336},[30,49091,33149],{"class":379},[30,49093,49094],{"class":32,"line":33342},[30,49095,33155],{"class":379},[30,49097,49098,49100,49102],{"class":32,"line":33361},[30,49099,33161],{"class":321},[30,49101,904],{"class":317},[30,49103,33166],{"class":321},[30,49105,49106],{"class":32,"line":33367},[30,49107,33172],{"class":379},[30,49109,49110],{"class":32,"line":33387},[30,49111,33178],{"class":379},[30,49113,49114,49116,49118],{"class":32,"line":33393},[30,49115,33184],{"class":321},[30,49117,904],{"class":317},[30,49119,33166],{"class":321},[30,49121,49122],{"class":32,"line":33399},[30,49123,33194],{"class":379},[30,49125,49126,49128,49130],{"class":32,"line":33409},[30,49127,33200],{"class":321},[30,49129,904],{"class":317},[30,49131,33205],{"class":321},[30,49133,49134],{"class":32,"line":33414},[30,49135,33211],{"class":379},[30,49137,49138,49140,49142],{"class":32,"line":33420},[30,49139,33217],{"class":321},[30,49141,904],{"class":317},[30,49143,33205],{"class":321},[30,49145,49146],{"class":32,"line":33436},[30,49147,2582],{"emptyLinePlaceholder":245},[30,49149,49150],{"class":32,"line":33481},[30,49151,33232],{"class":379},[30,49153,49154,49156,49158,49160,49162,49164,49166,49168,49170,49172,49174,49176,49178,49180,49182,49184,49186,49188,49190,49192],{"class":32,"line":33487},[30,49155,32589],{"class":40},[30,49157,322],{"class":321},[30,49159,3774],{"class":74},[30,49161,32597],{"class":40},[30,49163,33246],{"class":74},[30,49165,1216],{"class":40},[30,49167,33251],{"class":317},[30,49169,1266],{"class":40},[30,49171,33256],{"class":74},[30,49173,1216],{"class":40},[30,49175,33251],{"class":317},[30,49177,1266],{"class":40},[30,49179,3774],{"class":74},[30,49181,33267],{"class":321},[30,49183,852],{"class":317},[30,49185,537],{"class":40},[30,49187,33274],{"class":321},[30,49189,852],{"class":317},[30,49191,537],{"class":40},[30,49193,33281],{"class":321},[30,49195,49196,49198,49200,49202,49204,49206,49208,49210,49212,49214,49216,49218,49220,49222,49224,49226,49228,49230,49232,49234],{"class":32,"line":33493},[30,49197,32589],{"class":40},[30,49199,322],{"class":321},[30,49201,3774],{"class":74},[30,49203,32597],{"class":40},[30,49205,33295],{"class":74},[30,49207,1216],{"class":40},[30,49209,33251],{"class":317},[30,49211,1266],{"class":40},[30,49213,33304],{"class":74},[30,49215,1216],{"class":40},[30,49217,33251],{"class":317},[30,49219,1266],{"class":40},[30,49221,3774],{"class":74},[30,49223,33315],{"class":321},[30,49225,852],{"class":317},[30,49227,537],{"class":40},[30,49229,33322],{"class":321},[30,49231,852],{"class":317},[30,49233,537],{"class":40},[30,49235,33281],{"class":321},[30,49237,49238],{"class":32,"line":33499},[30,49239,2582],{"emptyLinePlaceholder":245},[30,49241,49242],{"class":32,"line":33510},[30,49243,33339],{"class":379},[30,49245,49246,49248,49250,49252,49254,49256,49258],{"class":32,"line":33516},[30,49247,2679],{"class":317},[30,49249,33347],{"class":321},[30,49251,852],{"class":317},[30,49253,537],{"class":40},[30,49255,1260],{"class":321},[30,49257,1280],{"class":317},[30,49259,33358],{"class":321},[30,49261,49262],{"class":32,"line":33522},[30,49263,33364],{"class":379},[30,49265,49266,49268,49270,49272,49274,49276,49278],{"class":32,"line":33528},[30,49267,33370],{"class":321},[30,49269,361],{"class":40},[30,49271,367],{"class":317},[30,49273,33377],{"class":321},[30,49275,852],{"class":317},[30,49277,537],{"class":40},[30,49279,33384],{"class":321},[30,49281,49282],{"class":32,"line":33546},[30,49283,33390],{"class":379},[30,49285,49286],{"class":32,"line":33560},[30,49287,33396],{"class":379},[30,49289,49290,49292,49294],{"class":32,"line":33569},[30,49291,33402],{"class":321},[30,49293,367],{"class":317},[30,49295,32452],{"class":321},[30,49297,49298],{"class":32,"line":33578},[30,49299,2582],{"emptyLinePlaceholder":245},[30,49301,49302],{"class":32,"line":33587},[30,49303,33417],{"class":379},[30,49305,49306,49308,49310,49312,49314],{"class":32,"line":33596},[30,49307,33423],{"class":321},[30,49309,367],{"class":317},[30,49311,33428],{"class":321},[30,49313,852],{"class":317},[30,49315,33433],{"class":321},[30,49317,49318,49320,49322,49324,49326,49328,49330,49332,49334,49336,49338,49340,49342,49344,49346,49348,49350,49352],{"class":32,"line":33602},[30,49319,32589],{"class":40},[30,49321,322],{"class":321},[30,49323,33443],{"class":74},[30,49325,1216],{"class":40},[30,49327,33448],{"class":317},[30,49329,1266],{"class":40},[30,49331,864],{"class":74},[30,49333,1216],{"class":40},[30,49335,33448],{"class":317},[30,49337,1266],{"class":40},[30,49339,33461],{"class":74},[30,49341,33464],{"class":321},[30,49343,33467],{"class":317},[30,49345,1227],{"class":40},[30,49347,33472],{"class":321},[30,49349,648],{"class":317},[30,49351,1227],{"class":40},[30,49353,30635],{"class":321},[30,49355,49356],{"class":32,"line":33608},[30,49357,36871],{"class":379},[30,49359,49360],{"class":32,"line":33616},[30,49361,36876],{"class":379},[30,49363,49364,49366,49368],{"class":32,"line":33621},[30,49365,36881],{"class":321},[30,49367,33505],{"class":74},[30,49369,328],{"class":321},[30,49371,49372],{"class":32,"line":33627},[30,49373,33525],{"class":379},[30,49375,49376,49378,49380,49382,49384,49386],{"class":32,"line":33638},[30,49377,33531],{"class":321},[30,49379,367],{"class":317},[30,49381,33536],{"class":321},[30,49383,33539],{"class":5398},[30,49385,367],{"class":317},[30,49387,1732],{"class":321},[30,49389,49390,49392,49394,49396],{"class":32,"line":33644},[30,49391,33549],{"class":74},[30,49393,1179],{"class":321},[30,49395,33554],{"class":40},[30,49397,33557],{"class":321},[30,49399,49400,49402],{"class":32,"line":33664},[30,49401,33563],{"class":74},[30,49403,33566],{"class":321},[30,49405,49406,49408],{"class":32,"line":33670},[30,49407,33572],{"class":74},[30,49409,33575],{"class":321},[30,49411,49412,49414],{"class":32,"line":33676},[30,49413,33581],{"class":74},[30,49415,33584],{"class":321},[30,49417,49418,49420],{"class":32,"line":33682},[30,49419,33590],{"class":74},[30,49421,33593],{"class":321},[30,49423,49424],{"class":32,"line":33699},[30,49425,33599],{"class":321},[30,49427,49428],{"class":32,"line":33705},[30,49429,33605],{"class":379},[30,49431,49432,49434],{"class":32,"line":33711},[30,49433,4272],{"class":317},[30,49435,33613],{"class":321},[30,49437,49438],{"class":32,"line":33717},[30,49439,2582],{"emptyLinePlaceholder":245},[30,49441,49442],{"class":32,"line":33723},[30,49443,33624],{"class":379},[30,49445,49446,49448,49450],{"class":32,"line":33729},[30,49447,32085],{"class":317},[30,49449,33632],{"class":36},[30,49451,33635],{"class":321},[30,49453,49454],{"class":32,"line":33756},[30,49455,33641],{"class":379},[30,49457,49458,49460,49462,49464,49466,49468,49470,49472],{"class":32,"line":33780},[30,49459,33647],{"class":321},[30,49461,31831],{"class":5398},[30,49463,367],{"class":317},[30,49465,322],{"class":321},[30,49467,818],{"class":40},[30,49469,698],{"class":321},[30,49471,613],{"class":40},[30,49473,30635],{"class":321},[30,49475,49476],{"class":32,"line":33786},[30,49477,33667],{"class":379},[30,49479,49480],{"class":32,"line":33792},[30,49481,33673],{"class":379},[30,49483,49484],{"class":32,"line":33798},[30,49485,33679],{"class":379},[30,49487,49488,49490,49492,49494,49496,49498,49500],{"class":32,"line":33809},[30,49489,31865],{"class":321},[30,49491,537],{"class":40},[30,49493,698],{"class":321},[30,49495,398],{"class":40},[30,49497,698],{"class":321},[30,49499,537],{"class":40},[30,49501,328],{"class":321},[30,49503,49504],{"class":32,"line":33820},[30,49505,33702],{"class":379},[30,49507,49508],{"class":32,"line":33826},[30,49509,33708],{"class":379},[30,49511,49512],{"class":32,"line":33843},[30,49513,33714],{"class":379},[30,49515,49516],{"class":32,"line":33866},[30,49517,33720],{"class":379},[30,49519,49520],{"class":32,"line":33889},[30,49521,33726],{"class":379},[30,49523,49524,49526,49528,49530,49532,49534,49536,49538,49540],{"class":32,"line":33895},[30,49525,33732],{"class":321},[30,49527,33735],{"class":74},[30,49529,33738],{"class":321},[30,49531,33741],{"class":74},[30,49533,698],{"class":321},[30,49535,33746],{"class":5398},[30,49537,367],{"class":317},[30,49539,33751],{"class":74},[30,49541,328],{"class":321},[30,49543,49544,49546,49548,49550,49552,49554,49556,49558,49560],{"class":32,"line":33900},[30,49545,33732],{"class":321},[30,49547,33735],{"class":74},[30,49549,33763],{"class":321},[30,49551,33766],{"class":74},[30,49553,698],{"class":321},[30,49555,33746],{"class":5398},[30,49557,367],{"class":317},[30,49559,33775],{"class":74},[30,49561,328],{"class":321},[30,49563,49564],{"class":32,"line":33909},[30,49565,33783],{"class":379},[30,49567,49568],{"class":32,"line":33919},[30,49569,33789],{"class":321},[30,49571,49572],{"class":32,"line":33925},[30,49573,33795],{"class":379},[30,49575,49576,49578,49580],{"class":32,"line":33930},[30,49577,33801],{"class":321},[30,49579,33804],{"class":74},[30,49581,328],{"class":321},[30,49583,49584,49586,49588],{"class":32,"line":33936},[30,49585,33812],{"class":321},[30,49587,33815],{"class":74},[30,49589,328],{"class":321},[30,49591,49592],{"class":32,"line":33949},[30,49593,33823],{"class":379},[30,49595,49596,49598,49600,49602,49604,49606,49608],{"class":32,"line":33955},[30,49597,31865],{"class":321},[30,49599,537],{"class":40},[30,49601,698],{"class":321},[30,49603,398],{"class":40},[30,49605,698],{"class":321},[30,49607,398],{"class":40},[30,49609,328],{"class":321},[30,49611,49612,49614,49616,49618,49620,49622,49624,49626,49628],{"class":32,"line":33966},[30,49613,33732],{"class":321},[30,49615,33735],{"class":74},[30,49617,33850],{"class":321},[30,49619,33741],{"class":74},[30,49621,698],{"class":321},[30,49623,33746],{"class":5398},[30,49625,367],{"class":317},[30,49627,33861],{"class":74},[30,49629,328],{"class":321},[30,49631,49632,49634,49636,49638,49640,49642,49644,49646,49648],{"class":32,"line":33977},[30,49633,33732],{"class":321},[30,49635,33735],{"class":74},[30,49637,33873],{"class":321},[30,49639,33766],{"class":74},[30,49641,698],{"class":321},[30,49643,33746],{"class":5398},[30,49645,367],{"class":317},[30,49647,33884],{"class":74},[30,49649,328],{"class":321},[30,49651,49652],{"class":32,"line":33996},[30,49653,33892],{"class":379},[30,49655,49657],{"class":32,"line":49656},219,[30,49658,33789],{"class":321},[30,49660,49662,49664,49666],{"class":32,"line":49661},220,[30,49663,33801],{"class":321},[30,49665,33735],{"class":74},[30,49667,328],{"class":321},[30,49669,49671,49673,49675],{"class":32,"line":49670},221,[30,49672,33812],{"class":321},[30,49674,33914],{"class":74},[30,49676,328],{"class":321},[30,49678,49680],{"class":32,"line":49679},222,[30,49681,33922],{"class":321},[30,49683,49685],{"class":32,"line":49684},223,[30,49686,2582],{"emptyLinePlaceholder":245},[30,49688,49690],{"class":32,"line":49689},224,[30,49691,33933],{"class":379},[30,49693,49695,49697,49699,49701,49703],{"class":32,"line":49694},225,[30,49696,1717],{"class":317},[30,49698,31358],{"class":40},[30,49700,3131],{"class":317},[30,49702,31363],{"class":74},[30,49704,3921],{"class":321},[30,49706,49708],{"class":32,"line":49707},226,[30,49709,33952],{"class":379},[30,49711,49713,49715,49717],{"class":32,"line":49712},227,[30,49714,44684],{"class":321},[30,49716,367],{"class":317},[30,49718,44689],{"class":321},[30,49720,49722,49724,49726],{"class":32,"line":49721},228,[30,49723,33969],{"class":321},[30,49725,367],{"class":317},[30,49727,33974],{"class":321},[30,49729,49731,49733,49735,49737,49739,49741,49743],{"class":32,"line":49730},229,[30,49732,33531],{"class":321},[30,49734,367],{"class":317},[30,49736,44706],{"class":321},[30,49738,33987],{"class":5398},[30,49740,367],{"class":317},[30,49742,1227],{"class":40},[30,49744,328],{"class":321},[30,49746,49748],{"class":32,"line":49747},230,[30,49749,33999],{"class":321},[22180,49751,49753],{"id":49752},"_242测试代码","2.4.2.测试代码",[157,49755,49756],{},"使用测试集进行测试与推理",[20,49758,49760],{"className":30516,"code":49759,"language":30518,"meta":25,"style":25},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\nfrom torchvision.datasets import ImageFolder\nfrom model import GoogLeNet,Inception\n\n# 测试数据处理\ndef test_data_process():\n   # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftest\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    test_data=ImageFolder(ROOT_PATH,transform=train_transform)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['猫','狗']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[27,49761,49762,49768,49778,49788,49799,49809,49813,49817,49825,49830,49834,49851,49855,49859,49863,49867,49871,49903,49907,49915,49919,49931,49935,49939,49943,49947,49951,49955,49959,49963,49981,49995,49999,50009,50019,50029,50035,50039,50043,50051,50055,50071,50079,50083,50087,50095,50103,50107,50111,50115,50119,50125,50129,50139,50147,50155,50159,50163,50167,50175,50179,50195,50199,50203,50207,50219,50223,50235,50239,50243,50255,50259,50269,50273,50277,50289,50293,50301,50305,50309,50317,50321,50329,50333,50337,50341,50345,50349,50365,50373,50377,50381,50399,50405,50409,50419,50427,50435,50439,50443,50447,50451,50459,50463,50479,50483,50491,50499],{"__ignoreMap":25},[30,49763,49764,49766],{"class":32,"line":33},[30,49765,30530],{"class":317},[30,49767,30533],{"class":321},[30,49769,49770,49772,49774,49776],{"class":32,"line":44},[30,49771,30530],{"class":317},[30,49773,31553],{"class":321},[30,49775,31521],{"class":317},[30,49777,31558],{"class":321},[30,49779,49780,49782,49784,49786],{"class":32,"line":52},[30,49781,30875],{"class":317},[30,49783,31536],{"class":321},[30,49785,30530],{"class":317},[30,49787,31541],{"class":321},[30,49789,49790,49792,49794,49796],{"class":32,"line":60},[30,49791,30875],{"class":317},[30,49793,31506],{"class":321},[30,49795,30530],{"class":317},[30,49797,49798],{"class":321}," ImageFolder\n",[30,49800,49801,49803,49805,49807],{"class":32,"line":68},[30,49802,30875],{"class":317},[30,49804,32052],{"class":321},[30,49806,30530],{"class":317},[30,49808,44778],{"class":321},[30,49810,49811],{"class":32,"line":80},[30,49812,2582],{"emptyLinePlaceholder":245},[30,49814,49815],{"class":32,"line":88},[30,49816,34089],{"class":379},[30,49818,49819,49821,49823],{"class":32,"line":96},[30,49820,32085],{"class":317},[30,49822,34096],{"class":36},[30,49824,32091],{"class":321},[30,49826,49827],{"class":32,"line":104},[30,49828,49829],{"class":379},"   # 导入自己的数据集，并进行数据处理\n",[30,49831,49832],{"class":32,"line":112},[30,49833,48099],{"class":379},[30,49835,49836,49838,49840,49842,49844,49846,49849],{"class":32,"line":123},[30,49837,48104],{"class":40},[30,49839,367],{"class":317},[30,49841,990],{"class":317},[30,49843,571],{"class":74},[30,49845,878],{"class":40},[30,49847,49848],{"class":48115},"\u002Fdata\u002Ftest",[30,49850,25306],{"class":74},[30,49852,49853],{"class":32,"line":131},[30,49854,2582],{"emptyLinePlaceholder":245},[30,49856,49857],{"class":32,"line":142},[30,49858,48127],{"class":379},[30,49860,49861],{"class":32,"line":1811},[30,49862,48132],{"class":379},[30,49864,49865],{"class":32,"line":1825},[30,49866,48137],{"class":379},[30,49868,49869],{"class":32,"line":1830},[30,49870,48142],{"class":379},[30,49872,49873,49875,49877,49879,49881,49883,49885,49887,49889,49891,49893,49895,49897,49899,49901],{"class":32,"line":1836},[30,49874,48147],{"class":321},[30,49876,367],{"class":317},[30,49878,48152],{"class":321},[30,49880,48155],{"class":40},[30,49882,698],{"class":321},[30,49884,48160],{"class":40},[30,49886,698],{"class":321},[30,49888,48165],{"class":40},[30,49890,48168],{"class":321},[30,49892,48171],{"class":40},[30,49894,698],{"class":321},[30,49896,48176],{"class":40},[30,49898,698],{"class":321},[30,49900,48181],{"class":40},[30,49902,4839],{"class":321},[30,49904,49905],{"class":32,"line":1857},[30,49906,48188],{"class":379},[30,49908,49909,49911,49913],{"class":32,"line":1862},[30,49910,48193],{"class":321},[30,49912,367],{"class":317},[30,49914,48198],{"class":321},[30,49916,49917],{"class":32,"line":1876},[30,49918,48203],{"class":379},[30,49920,49921,49923,49925,49927,49929],{"class":32,"line":1881},[30,49922,48208],{"class":321},[30,49924,31639],{"class":40},[30,49926,698],{"class":321},[30,49928,31639],{"class":40},[30,49930,42760],{"class":321},[30,49932,49933],{"class":32,"line":1910},[30,49934,48221],{"class":379},[30,49936,49937],{"class":32,"line":1915},[30,49938,48226],{"class":321},[30,49940,49941],{"class":32,"line":1932},[30,49942,48231],{"class":321},[30,49944,49945],{"class":32,"line":1937},[30,49946,48236],{"class":379},[30,49948,49949],{"class":32,"line":1942},[30,49950,48241],{"class":379},[30,49952,49953],{"class":32,"line":1947},[30,49954,2582],{"emptyLinePlaceholder":245},[30,49956,49957],{"class":32,"line":1961},[30,49958,48250],{"class":379},[30,49960,49961],{"class":32,"line":1966},[30,49962,48255],{"class":379},[30,49964,49965,49967,49969,49971,49973,49975,49977,49979],{"class":32,"line":2759},[30,49966,34103],{"class":321},[30,49968,367],{"class":317},[30,49970,48264],{"class":321},[30,49972,48267],{"class":40},[30,49974,698],{"class":321},[30,49976,48272],{"class":5398},[30,49978,367],{"class":317},[30,49980,48277],{"class":321},[30,49982,49983,49985,49987,49989,49991,49993],{"class":32,"line":2773},[30,49984,34160],{"class":321},[30,49986,367],{"class":317},[30,49988,31672],{"class":321},[30,49990,31675],{"class":5398},[30,49992,367],{"class":317},[30,49994,34171],{"class":321},[30,49996,49997],{"class":32,"line":2781},[30,49998,34176],{"class":379},[30,50000,50001,50003,50005,50007],{"class":32,"line":2786},[30,50002,34181],{"class":5398},[30,50004,367],{"class":317},[30,50006,537],{"class":40},[30,50008,31604],{"class":321},[30,50010,50011,50013,50015,50017],{"class":32,"line":2792},[30,50012,34192],{"class":5398},[30,50014,367],{"class":317},[30,50016,31614],{"class":40},[30,50018,31604],{"class":321},[30,50020,50021,50023,50025,50027],{"class":32,"line":2798},[30,50022,34203],{"class":5398},[30,50024,367],{"class":317},[30,50026,511],{"class":40},[30,50028,328],{"class":321},[30,50030,50031,50033],{"class":32,"line":2803},[30,50032,4272],{"class":317},[30,50034,34216],{"class":321},[30,50036,50037],{"class":32,"line":8130},[30,50038,2582],{"emptyLinePlaceholder":245},[30,50040,50041],{"class":32,"line":8154},[30,50042,34225],{"class":379},[30,50044,50045,50047,50049],{"class":32,"line":8159},[30,50046,32085],{"class":317},[30,50048,34232],{"class":36},[30,50050,34235],{"class":321},[30,50052,50053],{"class":32,"line":8165},[30,50054,34240],{"class":379},[30,50056,50057,50059,50061,50063,50065,50067,50069],{"class":32,"line":8192},[30,50058,31375],{"class":321},[30,50060,367],{"class":317},[30,50062,31382],{"class":74},[30,50064,1887],{"class":317},[30,50066,31387],{"class":321},[30,50068,1884],{"class":317},[30,50070,34257],{"class":74},[30,50072,50073,50075,50077],{"class":32,"line":8197},[30,50074,31427],{"class":321},[30,50076,367],{"class":317},[30,50078,32427],{"class":321},[30,50080,50081],{"class":32,"line":8203},[30,50082,2582],{"emptyLinePlaceholder":245},[30,50084,50085],{"class":32,"line":8215},[30,50086,34274],{"class":379},[30,50088,50089,50091,50093],{"class":32,"line":8227},[30,50090,34279],{"class":321},[30,50092,367],{"class":317},[30,50094,32480],{"class":40},[30,50096,50097,50099,50101],{"class":32,"line":8239},[30,50098,34288],{"class":321},[30,50100,367],{"class":317},[30,50102,3267],{"class":40},[30,50104,50105],{"class":32,"line":9898},[30,50106,2582],{"emptyLinePlaceholder":245},[30,50108,50109],{"class":32,"line":9923},[30,50110,34301],{"class":379},[30,50112,50113],{"class":32,"line":9946},[30,50114,34306],{"class":379},[30,50116,50117],{"class":32,"line":9970},[30,50118,34311],{"class":379},[30,50120,50121,50123],{"class":32,"line":9975},[30,50122,34316],{"class":317},[30,50124,33022],{"class":321},[30,50126,50127],{"class":32,"line":9980},[30,50128,34323],{"class":379},[30,50130,50131,50133,50135,50137],{"class":32,"line":9985},[30,50132,3585],{"class":317},[30,50134,34330],{"class":321},[30,50136,26181],{"class":317},[30,50138,34335],{"class":321},[30,50140,50141,50143,50145],{"class":32,"line":9994},[30,50142,34340],{"class":321},[30,50144,367],{"class":317},[30,50146,34345],{"class":321},[30,50148,50149,50151,50153],{"class":32,"line":9999},[30,50150,34350],{"class":321},[30,50152,367],{"class":317},[30,50154,34355],{"class":321},[30,50156,50157],{"class":32,"line":10005},[30,50158,34360],{"class":379},[30,50160,50161],{"class":32,"line":10026},[30,50162,33013],{"class":321},[30,50164,50165],{"class":32,"line":10032},[30,50166,34369],{"class":379},[30,50168,50169,50171,50173],{"class":32,"line":10046},[30,50170,32798],{"class":321},[30,50172,367],{"class":317},[30,50174,34378],{"class":321},[30,50176,50177],{"class":32,"line":10052},[30,50178,34383],{"class":379},[30,50180,50181,50183,50185,50187,50189,50191,50193],{"class":32,"line":10079},[30,50182,32815],{"class":321},[30,50184,367],{"class":317},[30,50186,32820],{"class":321},[30,50188,32823],{"class":5398},[30,50190,367],{"class":317},[30,50192,537],{"class":40},[30,50194,328],{"class":321},[30,50196,50197],{"class":32,"line":10088},[30,50198,34404],{"class":379},[30,50200,50201],{"class":32,"line":10094},[30,50202,34409],{"class":379},[30,50204,50205],{"class":32,"line":10102},[30,50206,34414],{"class":379},[30,50208,50209,50211,50213,50215,50217],{"class":32,"line":10107},[30,50210,34419],{"class":321},[30,50212,9659],{"class":317},[30,50214,32925],{"class":321},[30,50216,3131],{"class":317},[30,50218,34428],{"class":321},[30,50220,50221],{"class":32,"line":16786},[30,50222,34433],{"class":379},[30,50224,50225,50227,50229,50231,50233],{"class":32,"line":16792},[30,50226,34438],{"class":321},[30,50228,9659],{"class":317},[30,50230,34443],{"class":321},[30,50232,511],{"class":40},[30,50234,328],{"class":321},[30,50236,50237],{"class":32,"line":16815},[30,50238,2582],{"emptyLinePlaceholder":245},[30,50240,50241],{"class":32,"line":16821},[30,50242,34456],{"class":379},[30,50244,50245,50247,50249,50251,50253],{"class":32,"line":16844},[30,50246,34461],{"class":321},[30,50248,367],{"class":317},[30,50250,34466],{"class":321},[30,50252,904],{"class":317},[30,50254,34471],{"class":321},[30,50256,50257],{"class":32,"line":16858},[30,50258,34476],{"class":379},[30,50260,50261,50263,50265,50267],{"class":32,"line":16878},[30,50262,32589],{"class":40},[30,50264,322],{"class":321},[30,50266,34485],{"class":74},[30,50268,34488],{"class":321},[30,50270,50271],{"class":32,"line":16884},[30,50272,2582],{"emptyLinePlaceholder":245},[30,50274,50275],{"class":32,"line":16895},[30,50276,34497],{"class":379},[30,50278,50279,50281,50283,50285,50287],{"class":32,"line":16918},[30,50280,1717],{"class":317},[30,50282,31358],{"class":40},[30,50284,3131],{"class":317},[30,50286,31363],{"class":74},[30,50288,3921],{"class":321},[30,50290,50291],{"class":32,"line":16940},[30,50292,34514],{"class":379},[30,50294,50295,50297,50299],{"class":32,"line":16945},[30,50296,31427],{"class":321},[30,50298,367],{"class":317},[30,50300,44689],{"class":321},[30,50302,50303],{"class":32,"line":16951},[30,50304,34527],{"class":379},[30,50306,50307],{"class":32,"line":16965},[30,50308,34532],{"class":379},[30,50310,50311,50313,50315],{"class":32,"line":16978},[30,50312,34537],{"class":321},[30,50314,34540],{"class":74},[30,50316,30635],{"class":321},[30,50318,50319],{"class":32,"line":16983},[30,50320,34547],{"class":379},[30,50322,50323,50325,50327],{"class":32,"line":16997},[30,50324,34160],{"class":321},[30,50326,367],{"class":317},[30,50328,34556],{"class":321},[30,50330,50331],{"class":32,"line":17002},[30,50332,34561],{"class":379},[30,50334,50335],{"class":32,"line":17008},[30,50336,34566],{"class":321},[30,50338,50339],{"class":32,"line":17013},[30,50340,2582],{"emptyLinePlaceholder":245},[30,50342,50343],{"class":32,"line":17027},[30,50344,34575],{"class":379},[30,50346,50347],{"class":32,"line":17032},[30,50348,34580],{"class":379},[30,50350,50351,50353,50355,50357,50359,50361,50363],{"class":32,"line":17037},[30,50352,31375],{"class":321},[30,50354,367],{"class":317},[30,50356,31382],{"class":74},[30,50358,1887],{"class":317},[30,50360,31387],{"class":321},[30,50362,1884],{"class":317},[30,50364,34257],{"class":74},[30,50366,50367,50369,50371],{"class":32,"line":17051},[30,50368,31427],{"class":321},[30,50370,367],{"class":317},[30,50372,32427],{"class":321},[30,50374,50375],{"class":32,"line":17063},[30,50376,34609],{"class":379},[30,50378,50379],{"class":32,"line":17068},[30,50380,34614],{"class":379},[30,50382,50383,50385,50387,50389,50392,50394,50397],{"class":32,"line":17081},[30,50384,34619],{"class":321},[30,50386,367],{"class":317},[30,50388,1210],{"class":321},[30,50390,50391],{"class":74},"'猫'",[30,50393,698],{"class":321},[30,50395,50396],{"class":74},"'狗'",[30,50398,33384],{"class":321},[30,50400,50401,50403],{"class":32,"line":17086},[30,50402,34316],{"class":317},[30,50404,33022],{"class":321},[30,50406,50407],{"class":32,"line":17091},[30,50408,34684],{"class":379},[30,50410,50411,50413,50415,50417],{"class":32,"line":17096},[30,50412,3585],{"class":317},[30,50414,34691],{"class":321},[30,50416,26181],{"class":317},[30,50418,34335],{"class":321},[30,50420,50421,50423,50425],{"class":32,"line":17109},[30,50422,32748],{"class":321},[30,50424,367],{"class":317},[30,50426,32753],{"class":321},[30,50428,50429,50431,50433],{"class":32,"line":17114},[30,50430,32763],{"class":321},[30,50432,367],{"class":317},[30,50434,32768],{"class":321},[30,50436,50437],{"class":32,"line":32771},[30,50438,2582],{"emptyLinePlaceholder":245},[30,50440,50441],{"class":32,"line":32777},[30,50442,34720],{"class":379},[30,50444,50445],{"class":32,"line":32783},[30,50446,33013],{"class":321},[30,50448,50449],{"class":32,"line":32789},[30,50450,34729],{"class":379},[30,50452,50453,50455,50457],{"class":32,"line":32795},[30,50454,32798],{"class":321},[30,50456,367],{"class":317},[30,50458,32803],{"class":321},[30,50460,50461],{"class":32,"line":32806},[30,50462,34742],{"class":379},[30,50464,50465,50467,50469,50471,50473,50475,50477],{"class":32,"line":32812},[30,50466,32815],{"class":321},[30,50468,367],{"class":317},[30,50470,32820],{"class":321},[30,50472,32823],{"class":5398},[30,50474,367],{"class":317},[30,50476,537],{"class":40},[30,50478,328],{"class":321},[30,50480,50481],{"class":32,"line":32832},[30,50482,34763],{"class":379},[30,50484,50485,50487,50489],{"class":32,"line":32838},[30,50486,34768],{"class":321},[30,50488,367],{"class":317},[30,50490,34773],{"class":321},[30,50492,50493,50495,50497],{"class":32,"line":32849},[30,50494,34778],{"class":321},[30,50496,367],{"class":317},[30,50498,34783],{"class":321},[30,50500,50501,50503,50505,50507,50509,50511,50513,50515],{"class":32,"line":32855},[30,50502,34788],{"class":40},[30,50504,322],{"class":321},[30,50506,34793],{"class":74},[30,50508,34796],{"class":321},[30,50510,34799],{"class":74},[30,50512,698],{"class":321},[30,50514,34804],{"class":74},[30,50516,34807],{"class":321},[234,50518,50519],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":25,"searchDepth":44,"depth":44,"links":50521},[50522,50523,50524,50525],{"id":30729,"depth":52,"text":30730},{"id":37977,"depth":52,"text":37978},{"id":41410,"depth":52,"text":41411},{"id":45419,"depth":52,"text":45420},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30721,"description":242},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50532,"title":50533,"body":50534,"description":242,"extension":243,"meta":50541,"navigation":245,"path":50542,"seo":50543,"stem":50544,"__hash__":50545},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50535,"toc":50539},[50536],[10,50537,50533],{"id":50538},"_3yolo模型学习",{"title":25,"searchDepth":44,"depth":44,"links":50540},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50533,"description":242},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50547,"title":50548,"body":50549,"description":50556,"extension":243,"meta":50557,"navigation":245,"path":50559,"seo":50560,"stem":50561,"__hash__":50562},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50550,"toc":50554},[50551],[157,50552,50553],{},"yolo模型还未补充",{"title":25,"searchDepth":44,"depth":44,"links":50555},[],"深度学习学习",{"category":50558},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50548,"description":50556},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50564,"title":50565,"body":50566,"description":242,"extension":243,"meta":50591,"navigation":245,"path":50592,"seo":50593,"stem":50594,"__hash__":50595},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50567,"toc":50589},[50568,50571,50574,50579,50586],[10,50569,50565],{"id":50570},"_1工具",[157,50572,50573],{},"提示错误插件：有问题会提前报错",[157,50575,50576],{},[160,50577],{"alt":25,"src":50578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[157,50580,50581],{},[558,50582,50585],{"href":50583,"rel":50584},"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",[24045],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[157,50587,50588],{},"alt键加上下箭头可以实现语句的移动",{"title":25,"searchDepth":44,"depth":44,"links":50590},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50565,"description":242},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50597,"title":50598,"body":50599,"description":242,"extension":243,"meta":53463,"navigation":245,"path":53464,"seo":53465,"stem":53466,"__hash__":53467},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50600,"toc":53414},[50601,50604,50608,50612,50617,50620,50625,50629,50636,50641,50648,50653,50660,50665,50669,50674,50677,50681,50686,50690,50695,50698,50701,50704,50707,50710,50713,50716,50719,50724,50729,50734,50738,50741,50744,50748,50753,50756,50764,50769,50786,50794,50799,50804,50809,50814,50819,50822,50827,50832,50836,50845,50850,50855,50859,50864,50867,50871,50876,50884,50889,50894,50897,50902,50907,50912,50915,50918,50921,50926,50931,50934,50939,50942,50947,50950,50953,50956,50961,50964,50967,50982,50987,50992,50997,51000,51003,51006,51020,51023,51028,51033,51036,51039,51042,51045,51048,51051,51054,51058,51062,51067,51071,51074,51079,51084,51087,51092,51095,51099,51104,51107,51110,51113,51116,51119,51122,51125,51128,51131,51135,51140,51145,51150,51153,51156,51160,51165,51168,51172,51175,51178,51183,51186,51189,51193,51197,51200,51205,51210,51213,51242,51247,51252,51257,51262,51266,51271,51275,51280,51283,51287,51291,51296,51300,51305,51310,51314,51319,51322,51324,51327,51332,51336,51341,51345,51349,51354,51359,51364,51369,51373,51378,51383,51388,51391,51394,51399,51402,51407,51412,51417,51422,51426,52233,52237,52580,52585,52588,52591,52594,52597,52600,52603,52606,52609,52611,52614,52616,52619,52623,52628,52631,52634,52637,52641,52646,52651,52671,52674,52678,52683,52688,52705,52709,52738,52742,52764,52766,52805,52813,52819,52823,52826,52829,52834,52839,52842,52845,52848,52853,52858,52861,52864,52867,52870,52873,52876,52879,52882,52885,52888,52891,52893,52896,52899,52902,52905,52908,52911,52914,52917,52921,52926,52929,52934,52937,52940,52943,52946,52949,52952,52955,52957,52960,52963,52966,52969,52972,52975,52979,52982,52991,52994,52999,53002,53007,53010,53013,53016,53019,53022,53025,53028,53032,53036,53039,53042,53047,53052,53057,53061,53066,53071,53074,53077,53080,53083,53086,53091,53094,53099,53101,53106,53109,53113,53118,53121,53124,53129,53133,53136,53141,53144,53147,53176,53181,53184,53187,53190,53193,53196,53200,53203,53289,53293,53296,53301,53306,53313,53316,53319,53322,53325,53328,53333,53338,53341,53344,53347,53350,53353,53356,53359,53362,53365,53367,53370,53374,53379,53384,53389,53392,53397,53402,53405,53408,53411],[10,50602,50598],{"id":50603},"_2基础语法",[15,50605,50607],{"id":50606},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[287,50609,50611],{"id":50610},"_211-js组成","2.1.1 js组成",[271,50613,50614],{},[150,50615,50616],{},"js是编程语言，html和css不是编程语言，是标记语言",[157,50618,50619],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[271,50621,50622],{"start":44},[150,50623,50624],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[287,50626,50628],{"id":50627},"_212-js书写位置","2.1.2 js书写位置",[271,50630,50631],{},[150,50632,50633],{},[469,50634,50635],{},"内部 JavaScript",[157,50637,50638],{},[160,50639],{"alt":25,"src":50640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[271,50642,50643],{"start":44},[150,50644,50645],{},[469,50646,50647],{},"外部 JavaScript",[157,50649,50650],{},[160,50651],{"alt":25,"src":50652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[271,50654,50655],{"start":52},[150,50656,50657],{},[469,50658,50659],{},"内联 JavaScript",[157,50661,50662],{},[160,50663],{"alt":25,"src":50664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[287,50666,50668],{"id":50667},"_213-javascript注释","2.1.3 JavaScript注释",[157,50670,50671],{},[160,50672],{"alt":25,"src":50673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[157,50675,50676],{},"alt+shift+a一定要记住！",[287,50678,50680],{"id":50679},"_214-javascript结束符","2.1.4 JavaScript结束符",[157,50682,50683],{},[160,50684],{"alt":25,"src":50685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[287,50687,50689],{"id":50688},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[271,50691,50692],{},[150,50693,50694],{},"输出语法：",[157,50696,50697],{},"①document.write('要出的内容')",[157,50699,50700],{},"向body内输出内容；",[157,50702,50703],{},"如果输出的内容写的是标签，也会被解析cheng",[157,50705,50706],{},"②alert('要出的内容')",[157,50708,50709],{},"页面弹出警告对话框",[157,50711,50712],{},"③console.log('控制台打印')",[157,50714,50715],{},"控制台输出语法，程序员调试使用",[157,50717,50718],{},"输入log就行，自动生成：",[157,50720,50721],{},[160,50722],{"alt":25,"src":50723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[271,50725,50726],{"start":44},[150,50727,50728],{},"输入语法：",[157,50730,50731],{},[160,50732],{"alt":25,"src":50733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[287,50735,50737],{"id":50736},"_2116-字面量","21.1.6 字面量",[157,50739,50740],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[157,50742,50743],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[15,50745,50747],{"id":50746},"_22-变量","2.2 变量",[271,50749,50750],{},[150,50751,50752],{},"变量声明",[157,50754,50755],{},"let 变量名",[147,50757,50758,50761],{},[150,50759,50760],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[150,50762,50763],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[271,50765,50766],{"start":44},[150,50767,50768],{},"变量赋值",[20,50770,50774],{"className":50771,"code":50772,"language":50773,"meta":25,"style":25},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[27,50775,50776,50781],{"__ignoreMap":25},[30,50777,50778],{"class":32,"line":33},[30,50779,50780],{"class":321},"let age\n",[30,50782,50783],{"class":32,"line":44},[30,50784,50785],{"class":321},"age=18\n",[271,50787,50788,50791],{"start":52},[150,50789,50790],{},"连这些（变量的初始化）：let age=18",[150,50792,50793],{},"更新变量",[157,50795,50796],{},[160,50797],{"alt":25,"src":50798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[271,50800,50801],{"start":68},[150,50802,50803],{},"声明多个变量",[157,50805,50806],{},[160,50807],{"alt":25,"src":50808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[271,50810,50811],{"start":80},[150,50812,50813],{},"变量命名规则与规范",[157,50815,50816],{},[160,50817],{"alt":25,"src":50818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[157,50820,50821],{},"遵守小驼峰！",[271,50823,50824],{"start":88},[150,50825,50826],{},"变量拓展-let和var的区别",[157,50828,50829],{},[160,50830],{"alt":25,"src":50831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[15,50833,50835],{"id":50834},"_23-数组","2.3 数组",[20,50837,50839],{"className":50771,"code":50838,"language":50773,"meta":25,"style":25},"let arr = []\n",[27,50840,50841],{"__ignoreMap":25},[30,50842,50843],{"class":32,"line":33},[30,50844,50838],{"class":321},[157,50846,50847],{},[160,50848],{"alt":25,"src":50849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[157,50851,50852],{},[160,50853],{"alt":25,"src":50854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[15,50856,50858],{"id":50857},"_24-常量","2.4 常量",[157,50860,50861],{},[160,50862],{"alt":25,"src":50863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[157,50865,50866],{},"const — 类似于 let ，但是变量的值无法被修改",[15,50868,50870],{"id":50869},"_25-数据类型","2.5 数据类型",[157,50872,50873],{},[160,50874],{"alt":25,"src":50875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[271,50877,50878,50881],{},[150,50879,50880],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[150,50882,50883],{},"算数运算符：",[157,50885,50886],{},[160,50887],{"alt":25,"src":50888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[271,50890,50891],{"start":52},[150,50892,50893],{},"数字类型（Number）",[157,50895,50896],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[157,50898,50899],{},[160,50900],{"alt":25,"src":50901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[271,50903,50904],{"start":60},[150,50905,50906],{},"字符串类型（string）",[157,50908,50909],{},[160,50910],{"alt":25,"src":50911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[157,50913,50914],{},"反引号也是可以使用的",[157,50916,50917],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[157,50919,50920],{},"例如：document.write(\"我今年\"+age+\"岁\")",[271,50922,50923],{"start":68},[150,50924,50925],{},"模板字符串",[157,50927,50928],{},[160,50929],{"alt":25,"src":50930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[157,50932,50933],{},"类似于python的字符串格式化",[271,50935,50936],{"start":80},[150,50937,50938],{},"布尔类型",[157,50940,50941],{},"true 和 false",[271,50943,50944],{"start":88},[150,50945,50946],{},"未定义类型（underfined）",[157,50948,50949],{},"表示没有赋值",[157,50951,50952],{},"未定义类型是比较特殊的类型，只有一个值undefined",[157,50954,50955],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[271,50957,50958],{"start":96},[150,50959,50960],{},"null（空类型）",[157,50962,50963],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[157,50965,50966],{},"赋值了，但是内容为空",[20,50968,50970],{"className":50771,"code":50969,"language":50773,"meta":25,"style":25},"typeof null\n输出的是'object'，是一个对象数据类型\n",[27,50971,50972,50977],{"__ignoreMap":25},[30,50973,50974],{"class":32,"line":33},[30,50975,50976],{"class":321},"typeof null\n",[30,50978,50979],{"class":32,"line":44},[30,50980,50981],{"class":321},"输出的是'object'，是一个对象数据类型\n",[271,50983,50984],{"start":104},[150,50985,50986],{},"控制台检测数据类型",[157,50988,50989],{},[160,50990],{"alt":25,"src":50991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[271,50993,50994],{"start":112},[150,50995,50996],{},"类型转换",[157,50998,50999],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[157,51001,51002],{},"转换方式：隐式转换和显示转换",[157,51004,51005],{},"①隐式转换",[147,51007,51008,51011,51014,51017],{},[150,51009,51010],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[150,51012,51013],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[150,51015,51016],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[150,51018,51019],{},"任何数据和字符串相加结果都是字符串",[157,51021,51022],{},"②显示转换",[157,51024,51025],{},[160,51026],{"alt":25,"src":51027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[157,51029,51030],{},[160,51031],{"alt":25,"src":51032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[157,51034,51035],{},"在输入的时候要用好隐式转换，简单写起来",[157,51037,51038],{},"let num = +prompt(’请输入数字：‘)",[157,51040,51041],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[157,51043,51044],{},"console.log(parseInt('12.333px'))",[157,51046,51047],{},"输出为：12",[157,51049,51050],{},"console.log(parseInt('a'a'a12.333px'))",[157,51052,51053],{},"输出：NaN",[15,51055,51057],{"id":51056},"_26-运算符","2.6 运算符",[287,51059,51061],{"id":51060},"_261-赋值运算符","2.6.1 赋值运算符",[157,51063,51064],{},[160,51065],{"alt":25,"src":51066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[287,51068,51070],{"id":51069},"_262-一元运算符","2.6.2 一元运算符",[157,51072,51073],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[157,51075,51076],{},[160,51077],{"alt":25,"src":51078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[157,51080,51081],{},[160,51082],{"alt":25,"src":51083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[157,51085,51086],{},"两者的区别：",[157,51088,51089],{},[160,51090],{"alt":25,"src":51091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[157,51093,51094],{},"前置先自加；后置后加，代码执行完之后再加",[287,51096,51098],{"id":51097},"_263-比较运算符","2.6.3 比较运算符",[157,51100,51101],{},[160,51102],{"alt":25,"src":51103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[157,51105,51106],{},"比较运算符也有隐式转换",[157,51108,51109],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[157,51111,51112],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[157,51114,51115],{},"要使用三等，开发的时候",[157,51117,51118],{},"NaN不等于任何人，包括它自己",[157,51120,51121],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[157,51123,51124],{},"7\u002F10=0.7",[157,51126,51127],{},"最后：0.5+0.2=0.7",[157,51129,51130],{},"字符串比较，比较的是字符对应的ASCII码",[287,51132,51134],{"id":51133},"_264-逻辑运算符","2.6.4 逻辑运算符",[157,51136,51137],{},[160,51138],{"alt":25,"src":51139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[157,51141,51142],{},[160,51143],{"alt":25,"src":51144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[157,51146,51147],{},[160,51148],{"alt":25,"src":51149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[157,51151,51152],{},"上述题目选D",[157,51154,51155],{},"与真2假1；或真1假2",[287,51157,51159],{"id":51158},"_265-运算符优先级","2.6.5 运算符优先级",[157,51161,51162],{},[160,51163],{"alt":25,"src":51164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[157,51166,51167],{},"先算逻辑与，后算逻辑或",[15,51169,51171],{"id":51170},"_27-语句","2.7 语句",[157,51173,51174],{},"表达式：是可以被求值的代码，会有结果给我们",[157,51176,51177],{},"语句：语句是可以被执行的代码，例如prompt()",[157,51179,51180],{},[160,51181],{"alt":25,"src":51182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[157,51184,51185],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[157,51187,51188],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[287,51190,51192],{"id":51191},"_271-分支语句","2.7.1 分支语句",[22180,51194,51196],{"id":51195},"_2711-if分支语句","2.7.1.1 if分支语句",[157,51198,51199],{},"if语句单行简单的话，可以不写{}，写在一行就行",[271,51201,51202],{},[150,51203,51204],{},"单分支语句",[157,51206,51207],{},[160,51208],{"alt":25,"src":51209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[157,51211,51212],{},"除了0，所有数字都为真",[20,51214,51216],{"className":50771,"code":51215,"language":50773,"meta":25,"style":25},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[27,51217,51218,51223,51228,51233,51237],{"__ignoreMap":25},[30,51219,51220],{"class":32,"line":33},[30,51221,51222],{"class":321},"if（0) {\n",[30,51224,51225],{"class":32,"line":44},[30,51226,51227],{"class":321},"    let a=1\n",[30,51229,51230],{"class":32,"line":52},[30,51231,51232],{"class":321},"    alert(typeof a)\n",[30,51234,51235],{"class":32,"line":60},[30,51236,1751],{"class":321},[30,51238,51239],{"class":32,"line":68},[30,51240,51241],{"class":321},"不输出，括号为假\n",[271,51243,51244],{"start":44},[150,51245,51246],{},"双分支语句",[157,51248,51249],{},[160,51250],{"alt":25,"src":51251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[271,51253,51254],{"start":52},[150,51255,51256],{},"多分支语句",[157,51258,51259],{},[160,51260],{"alt":25,"src":51261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22180,51263,51265],{"id":51264},"_2712-三元运算符","2.7.1.2 三元运算符",[157,51267,51268],{},[160,51269],{"alt":25,"src":51270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22180,51272,51274],{"id":51273},"_2713-switch语句","2.7.1.3 switch语句",[157,51276,51277],{},[160,51278],{"alt":25,"src":51279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[157,51281,51282],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[287,51284,51286],{"id":51285},"_272-循环语句","2.7.2 循环语句",[22180,51288,51290],{"id":51289},"_2721-断点演示","2.7.2.1 断点演示",[157,51292,51293],{},[160,51294],{"alt":25,"src":51295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22180,51297,51299],{"id":51298},"_2722-while循环","2.7.2.2 while循环",[157,51301,51302],{},[160,51303],{"alt":25,"src":51304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[157,51306,51307],{},[160,51308],{"alt":25,"src":51309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22180,51311,51313],{"id":51312},"_2723-for循环","2.7.2.3 for循环",[157,51315,51316],{},[160,51317],{"alt":25,"src":51318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[157,51320,51321],{},"for(;;) {",[157,51323,1266],{},[157,51325,51326],{},"表示无限循环",[157,51328,51329],{},[160,51330],{"alt":25,"src":51331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22180,51333,51335],{"id":51334},"_2724-循环的退出","2.7.2.4 循环的退出",[157,51337,51338],{},[160,51339],{"alt":25,"src":51340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[15,51342,51344],{"id":51343},"_28-数组","2.8 数组",[287,51346,51348],{"id":51347},"_281-基础认识","2.8.1 基础认识",[157,51350,51351],{},[160,51352],{"alt":25,"src":51353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[157,51355,51356],{},[160,51357],{"alt":25,"src":51358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[157,51360,51361],{},[160,51362],{"alt":25,"src":51363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[157,51365,51366],{},[160,51367],{"alt":25,"src":51368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[287,51370,51372],{"id":51371},"_282-操作数组","2.8.2 操作数组",[157,51374,51375],{},[160,51376],{"alt":25,"src":51377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[271,51379,51380],{},[150,51381,51382],{},"添加元素",[157,51384,51385],{},[160,51386],{"alt":25,"src":51387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[157,51389,51390],{},"console.log(arr.push('green'))",[157,51392,51393],{},"输出结果：为新数组的长度",[157,51395,51396],{},[160,51397],{"alt":25,"src":51398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[157,51400,51401],{},"push用的非常多，一定要记住",[271,51403,51404],{},[150,51405,51406],{},"删除元素",[157,51408,51409],{},[160,51410],{"alt":25,"src":51411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[157,51413,51414],{},[160,51415],{"alt":25,"src":51416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[157,51418,51419],{},[160,51420],{"alt":25,"src":51421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[287,51423,51425],{"id":51424},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[20,51427,51429],{"className":50771,"code":51428,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n        }\n\n        .box {\n            display: flex;\n            width: 700px;\n            height: 300px;\n            border-left: 1px solid pink;\n            border-bottom: 1px solid pink;\n            margin: 50px auto;\n            justify-content: space-around;\n            align-items: flex-end;\n            text-align: center;\n        }\n\n        .box>div {\n            display: flex;\n            width: 50px;\n            background-color: pink;\n            flex-direction: column;\n            justify-content: space-between;\n        }\n\n        .box div span {\n\n            margin-top: -20px;\n        }\n\n        .box div h4 {\n            margin-bottom: -35px;\n            width: 70px;\n            margin-left: -10px;\n        }\n    \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n\n    \u003Cscript>\n        \u002F\u002F 1. 四次弹框效果\n        \u002F\u002F 声明一个新的数组\n        let arr = []\n        for (let i = 1; i \u003C= 4; i++) {\n            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n            \u002F\u002F arr.push(num)\n            arr.push(prompt(`请输入第${i}季度的数据:`))\n            \u002F\u002F push记得加小括号，不是等号赋值的形式\n        }\n        \u002F\u002F console.log(arr)  ['123','135','345','234']\n        \u002F\u002F 盒子开头\n        document.write(` \u003Cdiv class=\"box\">`)\n\n        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n        for (let i = 0; i \u003C arr.length; i++) {\n            document.write(`\n              \u003Cdiv style=\"height: ${arr[i]}px;\">\n                \u003Cspan>${arr[i]}\u003C\u002Fspan>\n                \u003Ch4>第${i + 1}季度\u003C\u002Fh4>\n              \u003C\u002Fdiv>          \n            `)\n        }\n        \u002F\u002F 盒子结尾\n        document.write(` \u003C\u002Fdiv>`)\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,51430,51431,51446,51462,51466,51475,51493,51517,51539,51553,51561,51568,51580,51591,51595,51599,51606,51618,51633,51646,51665,51682,51697,51709,51721,51733,51737,51741,51752,51762,51774,51786,51798,51809,51813,51817,51829,51833,51847,51851,51855,51866,51880,51892,51906,51910,51919,51928,51932,51941,51945,51954,51959,51964,51977,52005,52010,52015,52040,52045,52049,52054,52059,52074,52078,52083,52113,52125,52141,52157,52171,52176,52183,52187,52192,52205,52213,52221,52225],{"__ignoreMap":25},[30,51432,51433,51436,51440,51443],{"class":32,"line":33},[30,51434,51435],{"class":321},"\u003C!",[30,51437,51439],{"class":51438},"s9eBZ","DOCTYPE",[30,51441,51442],{"class":36}," html",[30,51444,51445],{"class":321},">\n",[30,51447,51448,51450,51452,51455,51457,51460],{"class":32,"line":44},[30,51449,1230],{"class":321},[30,51451,50773],{"class":51438},[30,51453,51454],{"class":36}," lang",[30,51456,367],{"class":321},[30,51458,51459],{"class":74},"\"en\"",[30,51461,51445],{"class":321},[30,51463,51464],{"class":32,"line":52},[30,51465,2582],{"emptyLinePlaceholder":245},[30,51467,51468,51470,51473],{"class":32,"line":60},[30,51469,1230],{"class":321},[30,51471,51472],{"class":51438},"head",[30,51474,51445],{"class":321},[30,51476,51477,51480,51483,51486,51488,51491],{"class":32,"line":68},[30,51478,51479],{"class":321},"    \u003C",[30,51481,51482],{"class":51438},"meta",[30,51484,51485],{"class":36}," charset",[30,51487,367],{"class":321},[30,51489,51490],{"class":74},"\"UTF-8\"",[30,51492,51445],{"class":321},[30,51494,51495,51497,51499,51502,51504,51507,51510,51512,51515],{"class":32,"line":80},[30,51496,51479],{"class":321},[30,51498,51482],{"class":51438},[30,51500,51501],{"class":36}," http-equiv",[30,51503,367],{"class":321},[30,51505,51506],{"class":74},"\"X-UA-Compatible\"",[30,51508,51509],{"class":36}," content",[30,51511,367],{"class":321},[30,51513,51514],{"class":74},"\"IE=edge\"",[30,51516,51445],{"class":321},[30,51518,51519,51521,51523,51525,51527,51530,51532,51534,51537],{"class":32,"line":88},[30,51520,51479],{"class":321},[30,51522,51482],{"class":51438},[30,51524,15102],{"class":36},[30,51526,367],{"class":321},[30,51528,51529],{"class":74},"\"viewport\"",[30,51531,51509],{"class":36},[30,51533,367],{"class":321},[30,51535,51536],{"class":74},"\"width=device-width, initial-scale=1.0\"",[30,51538,51445],{"class":321},[30,51540,51541,51543,51546,51549,51551],{"class":32,"line":96},[30,51542,51479],{"class":321},[30,51544,51545],{"class":51438},"title",[30,51547,51548],{"class":321},">Document\u003C\u002F",[30,51550,51545],{"class":51438},[30,51552,51445],{"class":321},[30,51554,51555,51557,51559],{"class":32,"line":104},[30,51556,51479],{"class":321},[30,51558,234],{"class":51438},[30,51560,51445],{"class":321},[30,51562,51563,51566],{"class":32,"line":112},[30,51564,51565],{"class":51438},"        *",[30,51567,15754],{"class":321},[30,51569,51570,51573,51576,51578],{"class":32,"line":123},[30,51571,51572],{"class":40},"            margin",[30,51574,51575],{"class":321},": ",[30,51577,511],{"class":40},[30,51579,1480],{"class":321},[30,51581,51582,51585,51587,51589],{"class":32,"line":131},[30,51583,51584],{"class":40},"            padding",[30,51586,51575],{"class":321},[30,51588,511],{"class":40},[30,51590,1480],{"class":321},[30,51592,51593],{"class":32,"line":142},[30,51594,2711],{"class":321},[30,51596,51597],{"class":32,"line":1811},[30,51598,2582],{"emptyLinePlaceholder":245},[30,51600,51601,51604],{"class":32,"line":1825},[30,51602,51603],{"class":36},"        .box",[30,51605,15754],{"class":321},[30,51607,51608,51611,51613,51616],{"class":32,"line":1830},[30,51609,51610],{"class":40},"            display",[30,51612,51575],{"class":321},[30,51614,51615],{"class":40},"flex",[30,51617,1480],{"class":321},[30,51619,51620,51623,51625,51628,51631],{"class":32,"line":1836},[30,51621,51622],{"class":40},"            width",[30,51624,51575],{"class":321},[30,51626,51627],{"class":40},"700",[30,51629,51630],{"class":317},"px",[30,51632,1480],{"class":321},[30,51634,51635,51638,51640,51642,51644],{"class":32,"line":1857},[30,51636,51637],{"class":40},"            height",[30,51639,51575],{"class":321},[30,51641,4155],{"class":40},[30,51643,51630],{"class":317},[30,51645,1480],{"class":321},[30,51647,51648,51651,51653,51655,51657,51660,51663],{"class":32,"line":1862},[30,51649,51650],{"class":40},"            border-left",[30,51652,51575],{"class":321},[30,51654,537],{"class":40},[30,51656,51630],{"class":317},[30,51658,51659],{"class":40}," solid",[30,51661,51662],{"class":40}," pink",[30,51664,1480],{"class":321},[30,51666,51667,51670,51672,51674,51676,51678,51680],{"class":32,"line":1876},[30,51668,51669],{"class":40},"            border-bottom",[30,51671,51575],{"class":321},[30,51673,537],{"class":40},[30,51675,51630],{"class":317},[30,51677,51659],{"class":40},[30,51679,51662],{"class":40},[30,51681,1480],{"class":321},[30,51683,51684,51686,51688,51690,51692,51695],{"class":32,"line":1881},[30,51685,51572],{"class":40},[30,51687,51575],{"class":321},[30,51689,976],{"class":40},[30,51691,51630],{"class":317},[30,51693,51694],{"class":40}," auto",[30,51696,1480],{"class":321},[30,51698,51699,51702,51704,51707],{"class":32,"line":1910},[30,51700,51701],{"class":40},"            justify-content",[30,51703,51575],{"class":321},[30,51705,51706],{"class":40},"space-around",[30,51708,1480],{"class":321},[30,51710,51711,51714,51716,51719],{"class":32,"line":1915},[30,51712,51713],{"class":40},"            align-items",[30,51715,51575],{"class":321},[30,51717,51718],{"class":40},"flex-end",[30,51720,1480],{"class":321},[30,51722,51723,51726,51728,51731],{"class":32,"line":1932},[30,51724,51725],{"class":40},"            text-align",[30,51727,51575],{"class":321},[30,51729,51730],{"class":40},"center",[30,51732,1480],{"class":321},[30,51734,51735],{"class":32,"line":1937},[30,51736,2711],{"class":321},[30,51738,51739],{"class":32,"line":1942},[30,51740,2582],{"emptyLinePlaceholder":245},[30,51742,51743,51745,51747,51750],{"class":32,"line":1947},[30,51744,51603],{"class":36},[30,51746,1280],{"class":317},[30,51748,51749],{"class":51438},"div",[30,51751,15754],{"class":321},[30,51753,51754,51756,51758,51760],{"class":32,"line":1961},[30,51755,51610],{"class":40},[30,51757,51575],{"class":321},[30,51759,51615],{"class":40},[30,51761,1480],{"class":321},[30,51763,51764,51766,51768,51770,51772],{"class":32,"line":1966},[30,51765,51622],{"class":40},[30,51767,51575],{"class":321},[30,51769,976],{"class":40},[30,51771,51630],{"class":317},[30,51773,1480],{"class":321},[30,51775,51776,51779,51781,51784],{"class":32,"line":2759},[30,51777,51778],{"class":40},"            background-color",[30,51780,51575],{"class":321},[30,51782,51783],{"class":40},"pink",[30,51785,1480],{"class":321},[30,51787,51788,51791,51793,51796],{"class":32,"line":2773},[30,51789,51790],{"class":40},"            flex-direction",[30,51792,51575],{"class":321},[30,51794,51795],{"class":40},"column",[30,51797,1480],{"class":321},[30,51799,51800,51802,51804,51807],{"class":32,"line":2781},[30,51801,51701],{"class":40},[30,51803,51575],{"class":321},[30,51805,51806],{"class":40},"space-between",[30,51808,1480],{"class":321},[30,51810,51811],{"class":32,"line":2786},[30,51812,2711],{"class":321},[30,51814,51815],{"class":32,"line":2792},[30,51816,2582],{"emptyLinePlaceholder":245},[30,51818,51819,51821,51824,51827],{"class":32,"line":2798},[30,51820,51603],{"class":36},[30,51822,51823],{"class":51438}," div",[30,51825,51826],{"class":51438}," span",[30,51828,15754],{"class":321},[30,51830,51831],{"class":32,"line":2803},[30,51832,2582],{"emptyLinePlaceholder":245},[30,51834,51835,51838,51840,51843,51845],{"class":32,"line":8130},[30,51836,51837],{"class":40},"            margin-top",[30,51839,51575],{"class":321},[30,51841,51842],{"class":40},"-20",[30,51844,51630],{"class":317},[30,51846,1480],{"class":321},[30,51848,51849],{"class":32,"line":8154},[30,51850,2711],{"class":321},[30,51852,51853],{"class":32,"line":8159},[30,51854,2582],{"emptyLinePlaceholder":245},[30,51856,51857,51859,51861,51864],{"class":32,"line":8165},[30,51858,51603],{"class":36},[30,51860,51823],{"class":51438},[30,51862,51863],{"class":51438}," h4",[30,51865,15754],{"class":321},[30,51867,51868,51871,51873,51876,51878],{"class":32,"line":8192},[30,51869,51870],{"class":40},"            margin-bottom",[30,51872,51575],{"class":321},[30,51874,51875],{"class":40},"-35",[30,51877,51630],{"class":317},[30,51879,1480],{"class":321},[30,51881,51882,51884,51886,51888,51890],{"class":32,"line":8197},[30,51883,51622],{"class":40},[30,51885,51575],{"class":321},[30,51887,676],{"class":40},[30,51889,51630],{"class":317},[30,51891,1480],{"class":321},[30,51893,51894,51897,51899,51902,51904],{"class":32,"line":8203},[30,51895,51896],{"class":40},"            margin-left",[30,51898,51575],{"class":321},[30,51900,51901],{"class":40},"-10",[30,51903,51630],{"class":317},[30,51905,1480],{"class":321},[30,51907,51908],{"class":32,"line":8215},[30,51909,2711],{"class":321},[30,51911,51912,51915,51917],{"class":32,"line":8227},[30,51913,51914],{"class":321},"    \u003C\u002F",[30,51916,234],{"class":51438},[30,51918,51445],{"class":321},[30,51920,51921,51924,51926],{"class":32,"line":8239},[30,51922,51923],{"class":321},"\u003C\u002F",[30,51925,51472],{"class":51438},[30,51927,51445],{"class":321},[30,51929,51930],{"class":32,"line":9898},[30,51931,2582],{"emptyLinePlaceholder":245},[30,51933,51934,51936,51939],{"class":32,"line":9923},[30,51935,1230],{"class":321},[30,51937,51938],{"class":51438},"body",[30,51940,51445],{"class":321},[30,51942,51943],{"class":32,"line":9946},[30,51944,2582],{"emptyLinePlaceholder":245},[30,51946,51947,51949,51952],{"class":32,"line":9970},[30,51948,51479],{"class":321},[30,51950,51951],{"class":51438},"script",[30,51953,51445],{"class":321},[30,51955,51956],{"class":32,"line":9975},[30,51957,51958],{"class":379},"        \u002F\u002F 1. 四次弹框效果\n",[30,51960,51961],{"class":32,"line":9980},[30,51962,51963],{"class":379},"        \u002F\u002F 声明一个新的数组\n",[30,51965,51966,51969,51972,51974],{"class":32,"line":9985},[30,51967,51968],{"class":317},"        let",[30,51970,51971],{"class":321}," arr ",[30,51973,367],{"class":317},[30,51975,51976],{"class":321}," []\n",[30,51978,51979,51981,51983,51986,51988,51990,51992,51994,51996,51999,52001,52003],{"class":32,"line":9994},[30,51980,3585],{"class":317},[30,51982,1841],{"class":321},[30,51984,51985],{"class":317},"let",[30,51987,9620],{"class":321},[30,51989,367],{"class":317},[30,51991,25291],{"class":40},[30,51993,9627],{"class":321},[30,51995,1774],{"class":317},[30,51997,51998],{"class":40}," 4",[30,52000,3396],{"class":321},[30,52002,2474],{"class":317},[30,52004,12624],{"class":321},[30,52006,52007],{"class":32,"line":9999},[30,52008,52009],{"class":379},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[30,52011,52012],{"class":32,"line":10005},[30,52013,52014],{"class":379},"            \u002F\u002F arr.push(num)\n",[30,52016,52017,52020,52023,52025,52028,52030,52033,52035,52038],{"class":32,"line":10026},[30,52018,52019],{"class":321},"            arr.",[30,52021,52022],{"class":36},"push",[30,52024,322],{"class":321},[30,52026,52027],{"class":36},"prompt",[30,52029,322],{"class":321},[30,52031,52032],{"class":74},"`请输入第${",[30,52034,761],{"class":321},[30,52036,52037],{"class":74},"}季度的数据:`",[30,52039,30635],{"class":321},[30,52041,52042],{"class":32,"line":10032},[30,52043,52044],{"class":379},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[30,52046,52047],{"class":32,"line":10046},[30,52048,2711],{"class":321},[30,52050,52051],{"class":32,"line":10052},[30,52052,52053],{"class":379},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[30,52055,52056],{"class":32,"line":10079},[30,52057,52058],{"class":379},"        \u002F\u002F 盒子开头\n",[30,52060,52061,52064,52067,52069,52072],{"class":32,"line":10088},[30,52062,52063],{"class":321},"        document.",[30,52065,52066],{"class":36},"write",[30,52068,322],{"class":321},[30,52070,52071],{"class":74},"` \u003Cdiv class=\"box\">`",[30,52073,328],{"class":321},[30,52075,52076],{"class":32,"line":10094},[30,52077,2582],{"emptyLinePlaceholder":245},[30,52079,52080],{"class":32,"line":10102},[30,52081,52082],{"class":379},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[30,52084,52085,52087,52089,52091,52093,52095,52097,52099,52101,52104,52107,52109,52111],{"class":32,"line":10107},[30,52086,3585],{"class":317},[30,52088,1841],{"class":321},[30,52090,51985],{"class":317},[30,52092,9620],{"class":321},[30,52094,367],{"class":317},[30,52096,4275],{"class":40},[30,52098,9627],{"class":321},[30,52100,1230],{"class":317},[30,52102,52103],{"class":321}," arr.",[30,52105,52106],{"class":40},"length",[30,52108,3396],{"class":321},[30,52110,2474],{"class":317},[30,52112,12624],{"class":321},[30,52114,52115,52118,52120,52122],{"class":32,"line":16786},[30,52116,52117],{"class":321},"            document.",[30,52119,52066],{"class":36},[30,52121,322],{"class":321},[30,52123,52124],{"class":74},"`\n",[30,52126,52127,52130,52132,52134,52136,52138],{"class":32,"line":16792},[30,52128,52129],{"class":74},"              \u003Cdiv style=\"height: ${",[30,52131,4062],{"class":321},[30,52133,1210],{"class":74},[30,52135,761],{"class":321},[30,52137,1260],{"class":74},[30,52139,52140],{"class":74},"}px;\">\n",[30,52142,52143,52146,52148,52150,52152,52154],{"class":32,"line":16815},[30,52144,52145],{"class":74},"                \u003Cspan>${",[30,52147,4062],{"class":321},[30,52149,1210],{"class":74},[30,52151,761],{"class":321},[30,52153,1260],{"class":74},[30,52155,52156],{"class":74},"}\u003C\u002Fspan>\n",[30,52158,52159,52162,52164,52166,52168],{"class":32,"line":16821},[30,52160,52161],{"class":74},"                \u003Ch4>第${",[30,52163,761],{"class":321},[30,52165,45704],{"class":317},[30,52167,25291],{"class":40},[30,52169,52170],{"class":74},"}季度\u003C\u002Fh4>\n",[30,52172,52173],{"class":32,"line":16844},[30,52174,52175],{"class":74},"              \u003C\u002Fdiv>          \n",[30,52177,52178,52181],{"class":32,"line":16858},[30,52179,52180],{"class":74},"            `",[30,52182,328],{"class":321},[30,52184,52185],{"class":32,"line":16878},[30,52186,2711],{"class":321},[30,52188,52189],{"class":32,"line":16884},[30,52190,52191],{"class":379},"        \u002F\u002F 盒子结尾\n",[30,52193,52194,52196,52198,52200,52203],{"class":32,"line":16895},[30,52195,52063],{"class":321},[30,52197,52066],{"class":36},[30,52199,322],{"class":321},[30,52201,52202],{"class":74},"` \u003C\u002Fdiv>`",[30,52204,328],{"class":321},[30,52206,52207,52209,52211],{"class":32,"line":16918},[30,52208,51914],{"class":321},[30,52210,51951],{"class":51438},[30,52212,51445],{"class":321},[30,52214,52215,52217,52219],{"class":32,"line":16940},[30,52216,51923],{"class":321},[30,52218,51938],{"class":51438},[30,52220,51445],{"class":321},[30,52222,52223],{"class":32,"line":16945},[30,52224,2582],{"emptyLinePlaceholder":245},[30,52226,52227,52229,52231],{"class":32,"line":16951},[30,52228,51923],{"class":321},[30,52230,50773],{"class":51438},[30,52232,51445],{"class":321},[287,52234,52236],{"id":52235},"_284-冒泡排序","2.8.4 冒泡排序",[20,52238,52240],{"className":50771,"code":52239,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    let arr = [5, 4, 3, 2, 1]\n    for (let i = 0; i \u003C arr.length - 1; i++) {\n      for (let j = 0; j \u003C arr.length - i - 1; j++) {\n        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n        if (arr[j] > arr[j + 1]) {\n          \u002F\u002F 交换两个变量\n          let tmp = arr[j]\n          arr[j] = arr[j + 1]\n          arr[j + 1] = tmp\n        }\n      }\n    }\n    document.write(arr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,52241,52242,52252,52266,52270,52278,52293,52313,52325,52333,52337,52345,52353,52385,52418,52455,52460,52479,52484,52497,52512,52528,52532,52537,52541,52551,52560,52568,52572],{"__ignoreMap":25},[30,52243,52244,52246,52248,52250],{"class":32,"line":33},[30,52245,51435],{"class":321},[30,52247,51439],{"class":51438},[30,52249,51442],{"class":36},[30,52251,51445],{"class":321},[30,52253,52254,52256,52258,52260,52262,52264],{"class":32,"line":44},[30,52255,1230],{"class":321},[30,52257,50773],{"class":51438},[30,52259,51454],{"class":36},[30,52261,367],{"class":321},[30,52263,51459],{"class":74},[30,52265,51445],{"class":321},[30,52267,52268],{"class":32,"line":52},[30,52269,2582],{"emptyLinePlaceholder":245},[30,52271,52272,52274,52276],{"class":32,"line":60},[30,52273,1230],{"class":321},[30,52275,51472],{"class":51438},[30,52277,51445],{"class":321},[30,52279,52280,52283,52285,52287,52289,52291],{"class":32,"line":68},[30,52281,52282],{"class":321},"  \u003C",[30,52284,51482],{"class":51438},[30,52286,51485],{"class":36},[30,52288,367],{"class":321},[30,52290,51490],{"class":74},[30,52292,51445],{"class":321},[30,52294,52295,52297,52299,52301,52303,52305,52307,52309,52311],{"class":32,"line":80},[30,52296,52282],{"class":321},[30,52298,51482],{"class":51438},[30,52300,15102],{"class":36},[30,52302,367],{"class":321},[30,52304,51529],{"class":74},[30,52306,51509],{"class":36},[30,52308,367],{"class":321},[30,52310,51536],{"class":74},[30,52312,51445],{"class":321},[30,52314,52315,52317,52319,52321,52323],{"class":32,"line":88},[30,52316,52282],{"class":321},[30,52318,51545],{"class":51438},[30,52320,51548],{"class":321},[30,52322,51545],{"class":51438},[30,52324,51445],{"class":321},[30,52326,52327,52329,52331],{"class":32,"line":96},[30,52328,51923],{"class":321},[30,52330,51472],{"class":51438},[30,52332,51445],{"class":321},[30,52334,52335],{"class":32,"line":104},[30,52336,2582],{"emptyLinePlaceholder":245},[30,52338,52339,52341,52343],{"class":32,"line":112},[30,52340,1230],{"class":321},[30,52342,51938],{"class":51438},[30,52344,51445],{"class":321},[30,52346,52347,52349,52351],{"class":32,"line":123},[30,52348,52282],{"class":321},[30,52350,51951],{"class":51438},[30,52352,51445],{"class":321},[30,52354,52355,52358,52360,52362,52365,52367,52369,52371,52373,52375,52377,52379,52381,52383],{"class":32,"line":131},[30,52356,52357],{"class":317},"    let",[30,52359,51971],{"class":321},[30,52361,367],{"class":317},[30,52363,52364],{"class":321}," [",[30,52366,639],{"class":40},[30,52368,12617],{"class":321},[30,52370,613],{"class":40},[30,52372,12617],{"class":321},[30,52374,392],{"class":40},[30,52376,12617],{"class":321},[30,52378,398],{"class":40},[30,52380,12617],{"class":321},[30,52382,537],{"class":40},[30,52384,33384],{"class":321},[30,52386,52387,52389,52391,52393,52395,52397,52399,52401,52403,52405,52407,52410,52412,52414,52416],{"class":32,"line":142},[30,52388,3383],{"class":317},[30,52390,1841],{"class":321},[30,52392,51985],{"class":317},[30,52394,9620],{"class":321},[30,52396,367],{"class":317},[30,52398,4275],{"class":40},[30,52400,9627],{"class":321},[30,52402,1230],{"class":317},[30,52404,52103],{"class":321},[30,52406,52106],{"class":40},[30,52408,52409],{"class":317}," -",[30,52411,25291],{"class":40},[30,52413,3396],{"class":321},[30,52415,2474],{"class":317},[30,52417,12624],{"class":321},[30,52419,52420,52423,52425,52427,52429,52431,52433,52435,52437,52439,52441,52443,52445,52447,52449,52451,52453],{"class":32,"line":1811},[30,52421,52422],{"class":317},"      for",[30,52424,1841],{"class":321},[30,52426,51985],{"class":317},[30,52428,9682],{"class":321},[30,52430,367],{"class":317},[30,52432,4275],{"class":40},[30,52434,9689],{"class":321},[30,52436,1230],{"class":317},[30,52438,52103],{"class":321},[30,52440,52106],{"class":40},[30,52442,52409],{"class":317},[30,52444,9620],{"class":321},[30,52446,852],{"class":317},[30,52448,25291],{"class":40},[30,52450,9696],{"class":321},[30,52452,2474],{"class":317},[30,52454,12624],{"class":321},[30,52456,52457],{"class":32,"line":1825},[30,52458,52459],{"class":379},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[30,52461,52462,52464,52467,52469,52472,52474,52476],{"class":32,"line":1830},[30,52463,2679],{"class":317},[30,52465,52466],{"class":321}," (arr[j] ",[30,52468,1280],{"class":317},[30,52470,52471],{"class":321}," arr[j ",[30,52473,801],{"class":317},[30,52475,25291],{"class":40},[30,52477,52478],{"class":321},"]) {\n",[30,52480,52481],{"class":32,"line":1836},[30,52482,52483],{"class":379},"          \u002F\u002F 交换两个变量\n",[30,52485,52486,52489,52492,52494],{"class":32,"line":1857},[30,52487,52488],{"class":317},"          let",[30,52490,52491],{"class":321}," tmp ",[30,52493,367],{"class":317},[30,52495,52496],{"class":321}," arr[j]\n",[30,52498,52499,52502,52504,52506,52508,52510],{"class":32,"line":1862},[30,52500,52501],{"class":321},"          arr[j] ",[30,52503,367],{"class":317},[30,52505,52471],{"class":321},[30,52507,801],{"class":317},[30,52509,25291],{"class":40},[30,52511,33384],{"class":321},[30,52513,52514,52517,52519,52521,52523,52525],{"class":32,"line":1876},[30,52515,52516],{"class":321},"          arr[j ",[30,52518,801],{"class":317},[30,52520,25291],{"class":40},[30,52522,4625],{"class":321},[30,52524,367],{"class":317},[30,52526,52527],{"class":321}," tmp\n",[30,52529,52530],{"class":32,"line":1881},[30,52531,2711],{"class":321},[30,52533,52534],{"class":32,"line":1910},[30,52535,52536],{"class":321},"      }\n",[30,52538,52539],{"class":32,"line":1915},[30,52540,2369],{"class":321},[30,52542,52543,52546,52548],{"class":32,"line":1932},[30,52544,52545],{"class":321},"    document.",[30,52547,52066],{"class":36},[30,52549,52550],{"class":321},"(arr)\n",[30,52552,52553,52556,52558],{"class":32,"line":1937},[30,52554,52555],{"class":321},"  \u003C\u002F",[30,52557,51951],{"class":51438},[30,52559,51445],{"class":321},[30,52561,52562,52564,52566],{"class":32,"line":1942},[30,52563,51923],{"class":321},[30,52565,51938],{"class":51438},[30,52567,51445],{"class":321},[30,52569,52570],{"class":32,"line":1947},[30,52571,2582],{"emptyLinePlaceholder":245},[30,52573,52574,52576,52578],{"class":32,"line":1961},[30,52575,51923],{"class":321},[30,52577,50773],{"class":51438},[30,52579,51445],{"class":321},[157,52581,52582],{},[160,52583],{"alt":25,"src":52584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[157,52586,52587],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[157,52589,52590],{},"let arr = [4, 2, 5, 1, 3]",[157,52592,52593],{},"\u002F\u002F 1.升序排列写法",[157,52595,52596],{},"arr.sort(function (a, b) {",[157,52598,52599],{},"return a - b",[157,52601,52602],{},"})",[157,52604,52605],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[157,52607,52608],{},"\u002F\u002F 降序排列写法",[157,52610,52596],{},[157,52612,52613],{},"return b - a",[157,52615,52602],{},[157,52617,52618],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[15,52620,52622],{"id":52621},"_29-函数","2.9 函数",[157,52624,52625],{},[160,52626],{"alt":25,"src":52627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[157,52629,52630],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[157,52632,52633],{},"函数的声明用function",[157,52635,52636],{},"函数里边可以嵌套函数",[287,52638,52640],{"id":52639},"_291-函数传参","2.9.1 函数传参",[157,52642,52643],{},[160,52644],{"alt":25,"src":52645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[157,52647,52648],{},[160,52649],{"alt":25,"src":52650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[147,52652,52653,52656,52659,52662,52665,52668],{},[150,52654,52655],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[150,52657,52658],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[150,52660,52661],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[150,52663,52664],{},"开发中尽量保持形参和实参个数一致",[150,52666,52667],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[150,52669,52670],{},"形参只在函数中有用，所以不需要进行声明这个变量",[157,52672,52673],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[287,52675,52677],{"id":52676},"_292-函数的返回值","2.9.2 函数的返回值",[157,52679,52680],{},[160,52681],{"alt":25,"src":52682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[157,52684,52685],{},[160,52686],{"alt":25,"src":52687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[147,52689,52690,52693,52696,52699,52702],{},[150,52691,52692],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[150,52694,52695],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[150,52697,52698],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[150,52700,52701],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[150,52703,52704],{},"断点调试:进入函数内部看执行过程F11",[287,52706,52708],{"id":52707},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[20,52710,52712],{"className":50771,"code":52711,"language":50773,"meta":25,"style":25},"    function fn(a, b) {\n      console.log(a + b);\n    }\n    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[27,52713,52714,52719,52724,52728,52733],{"__ignoreMap":25},[30,52715,52716],{"class":32,"line":33},[30,52717,52718],{"class":321},"    function fn(a, b) {\n",[30,52720,52721],{"class":32,"line":44},[30,52722,52723],{"class":321},"      console.log(a + b);\n",[30,52725,52726],{"class":32,"line":52},[30,52727,2369],{"class":321},[30,52729,52730],{"class":32,"line":60},[30,52731,52732],{"class":321},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[30,52734,52735],{"class":32,"line":68},[30,52736,52737],{"class":321},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[287,52739,52741],{"id":52740},"_294-作用域","2.9.4 作用域",[147,52743,52744,52750,52755,52758,52761],{},[150,52745,52746,52747],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[469,52748,52749],{},"作用域",[150,52751,52752],{},[469,52753,52754],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[150,52756,52757],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[150,52759,52760],{},"函数内部可以直接所使用全局变量",[150,52762,52763],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[157,52765,14815],{},[20,52767,52769],{"className":50771,"code":52768,"language":50773,"meta":25,"style":25},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[27,52770,52771,52776,52781,52785,52790,52795,52800],{"__ignoreMap":25},[30,52772,52773],{"class":32,"line":33},[30,52774,52775],{"class":321},"    function fun() {\n",[30,52777,52778],{"class":32,"line":44},[30,52779,52780],{"class":321},"      num = 10\n",[30,52782,52783],{"class":32,"line":52},[30,52784,2369],{"class":321},[30,52786,52787],{"class":32,"line":60},[30,52788,52789],{"class":321},"    fun()\n",[30,52791,52792],{"class":32,"line":68},[30,52793,52794],{"class":321},"    console.log(num)\n",[30,52796,52797],{"class":32,"line":80},[30,52798,52799],{"class":321},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[30,52801,52802],{"class":32,"line":88},[30,52803,52804],{"class":321},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[147,52806,52807,52810],{},[150,52808,52809],{},"函数内部的形参可以看做是局部变量",[150,52811,52812],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[157,52814,52815,52816],{},"变量访问原则： ",[469,52817,52818],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[287,52820,52822],{"id":52821},"_295-匿名函数","2.9.5 匿名函数",[157,52824,52825],{},"函数可以分为具名函数和匿名函数",[157,52827,52828],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[271,52830,52831],{},[150,52832,52833],{},"函数表达式",[157,52835,52836],{},[160,52837],{"alt":25,"src":52838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[157,52840,52841],{},"里边也可以写参数",[157,52843,52844],{},"具名函数调用位置可以随意调整；",[157,52846,52847],{},"匿名函数函数表达式形式只能在声明后才可以使用",[271,52849,52850],{"start":44},[150,52851,52852],{},"立即执行函数",[157,52854,52855],{},[160,52856],{"alt":25,"src":52857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[157,52859,52860],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[157,52862,52863],{},"写法：两个小括号，然后在第一个小括号中写function",[157,52865,52866],{},"(function () {})();",[157,52868,52869],{},"不要落下最后的;",[157,52871,52872],{},"立即执行函数必须要加;",[157,52874,52875],{},"分号写前写后都没问题",[157,52877,52878],{},"写前：",[157,52880,52881],{},"(function() {})()",[157,52883,52884],{},";(function () {})();",[157,52886,52887],{},"写后:",[157,52889,52890],{},"(function() {})();",[157,52892,52866],{},[157,52894,52895],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[157,52897,52898],{},"还有一种写法：",[157,52900,52901],{},"(function(){}());",[157,52903,52904],{},"或者:",[157,52906,52907],{},"!function(){}();",[157,52909,52910],{},"立即执行函数有时候也是可以加名字的：",[157,52912,52913],{},"(function flexible(window,document) {}(window,document));",[157,52915,52916],{},"省一些调用方法",[287,52918,52920],{"id":52919},"_296-逻辑中断","2.9.6 逻辑中断!!!",[157,52922,52923],{},[160,52924],{"alt":25,"src":52925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[157,52927,52928],{},"这样就不用非得给x,y初始化了",[157,52930,52931],{},[160,52932],{"alt":25,"src":52933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[157,52935,52936],{},"代码执行时先看左边",[157,52938,52939],{},"例如：console.log(false && 3+5)",[157,52941,52942],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[157,52944,52945],{},"&&都是真时，就返回最后一个真值",[157,52947,52948],{},"console.log(11 && 22)",[157,52950,52951],{},"输出22",[157,52953,52954],{},"逻辑与：遇真则真",[157,52956,14815],{},[157,52958,52959],{},"let age=1",[157,52961,52962],{},"console.log(11 || age++)",[157,52964,52965],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[157,52967,52968],{},"console.log(11 || 22)",[157,52970,52971],{},"||逻辑或遇到真就直接输出，输出结果为11",[157,52973,52974],{},"||如果都是假的话，就取最后一个假的值了",[287,52976,52978],{"id":52977},"_297-转换为boolean型","2.9.7 转换为Boolean型",[157,52980,52981],{},"显示转换：",[157,52983,52984,52987,52988],{},[469,52985,52986],{},"记忆","： ",[469,52989,52990],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[157,52992,52993],{},"空字符串为假，其他字符串全为真",[157,52995,52996],{},[160,52997],{"alt":25,"src":52998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[157,53000,53001],{},"隐式转换：",[157,53003,53004],{},[160,53005],{"alt":25,"src":53006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[157,53008,53009],{},"隐式转换:",[157,53011,53012],{},"null+3=3",[157,53014,53015],{},"undefined+3=NaN",[157,53017,53018],{},"null==undefined 输出true,他两个都当0看",[157,53020,53021],{},"null===undefined 输出false",[157,53023,53024],{},"undefined做任何操作都是NaN",[157,53026,53027],{},"NaN不等于NaN，NaN表示计算错误",[15,53029,53031],{"id":53030},"_210-对象","2.10 对象",[287,53033,53035],{"id":53034},"_2101-对象的介绍","2.10.1 对象的介绍",[157,53037,53038],{},"对象也是一种数据类型，里边的数据是无序的",[157,53040,53041],{},"对象由属性和方法组成",[157,53043,53044],{},[160,53045],{"alt":25,"src":53046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[157,53048,53049],{},[160,53050],{"alt":25,"src":53051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[157,53053,53054],{},[160,53055],{"alt":25,"src":53056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[287,53058,53060],{"id":53059},"_2102-对象属性","2.10.2 对象属性",[157,53062,53063],{},[160,53064],{"alt":25,"src":53065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[271,53067,53068],{},[150,53069,53070],{},"查询对象",[157,53072,53073],{},"对象名.属性 goods.uname",[157,53075,53076],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[157,53078,53079],{},"不带字符串的属性名也可以使用 对象名['属性名']",[157,53081,53082],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[157,53084,53085],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[271,53087,53088],{"start":44},[150,53089,53090],{},"重新赋值",[157,53092,53093],{},"对象名.属性=新值",[271,53095,53096],{"start":52},[150,53097,53098],{},"增加新数据",[157,53100,53093],{},[271,53102,53103],{"start":60},[150,53104,53105],{},"删除对象中的属性",[157,53107,53108],{},"delete 对象名.属性",[287,53110,53112],{"id":53111},"_2103-对象方法","2.10.3 对象方法",[157,53114,53115],{},[160,53116],{"alt":25,"src":53117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[157,53119,53120],{},"后边跟的是匿名函数",[157,53122,53123],{},"对象外面的叫函数；对象内部的叫方法",[157,53125,53126],{},[160,53127],{"alt":25,"src":53128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[287,53130,53132],{"id":53131},"_2104-遍历对象","2.10.4 遍历对象",[157,53134,53135],{},"理解为加括号的python字典遍历",[157,53137,53138],{},[160,53139],{"alt":25,"src":53140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[157,53142,53143],{},"k是字符串类型",[157,53145,53146],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[20,53148,53150],{"className":50771,"code":53149,"language":50773,"meta":25,"style":25},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[27,53151,53152,53157,53162,53167,53172],{"__ignoreMap":25},[30,53153,53154],{"class":32,"line":33},[30,53155,53156],{"class":321},"   let arr = [1, 2, 3]\n",[30,53158,53159],{"class":32,"line":44},[30,53160,53161],{"class":321},"    for (let k in arr) {\n",[30,53163,53164],{"class":32,"line":52},[30,53165,53166],{"class":321},"      console.log(k)\n",[30,53168,53169],{"class":32,"line":60},[30,53170,53171],{"class":321},"      console.log(arr[k])\n",[30,53173,53174],{"class":32,"line":68},[30,53175,2369],{"class":321},[157,53177,53178],{},[160,53179],{"alt":25,"src":53180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[157,53182,53183],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[157,53185,53186],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[157,53188,53189],{},"for in 得到的k是属性名",[51951,53191,53192],{},"\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",[157,53194,53195],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[287,53197,53199],{"id":53198},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[157,53201,53202],{},"数组中放对象信息",[20,53204,53208],{"className":53205,"code":53206,"language":53207,"meta":25,"style":25},"language-xml shiki shiki-themes github-light github-dark","\u003Cscript>\n    let students = [\n      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n    ]\n    for (let i = 0; i \u003C students.length; i++) {\n      for (let k in students[i]) {\n        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n        \u002F\u002F输出每个人的名字：\n        \u002F\u002Fconsole.log(students[i].name)\n      }\n    }\n  \u003C\u002Fscript>\n","xml",[27,53209,53210,53218,53223,53228,53233,53238,53243,53248,53253,53258,53263,53268,53273,53277,53281],{"__ignoreMap":25},[30,53211,53212,53214,53216],{"class":32,"line":33},[30,53213,1230],{"class":321},[30,53215,51951],{"class":51438},[30,53217,51445],{"class":321},[30,53219,53220],{"class":32,"line":44},[30,53221,53222],{"class":321},"    let students = [\n",[30,53224,53225],{"class":32,"line":52},[30,53226,53227],{"class":321},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[30,53229,53230],{"class":32,"line":60},[30,53231,53232],{"class":321},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[30,53234,53235],{"class":32,"line":68},[30,53236,53237],{"class":321},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[30,53239,53240],{"class":32,"line":80},[30,53241,53242],{"class":321},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[30,53244,53245],{"class":32,"line":88},[30,53246,53247],{"class":321},"    ]\n",[30,53249,53250],{"class":32,"line":96},[30,53251,53252],{"class":321},"    for (let i = 0; i \u003C students.length; i++) {\n",[30,53254,53255],{"class":32,"line":104},[30,53256,53257],{"class":321},"      for (let k in students[i]) {\n",[30,53259,53260],{"class":32,"line":112},[30,53261,53262],{"class":321},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[30,53264,53265],{"class":32,"line":123},[30,53266,53267],{"class":321},"        \u002F\u002F输出每个人的名字：\n",[30,53269,53270],{"class":32,"line":131},[30,53271,53272],{"class":321},"        \u002F\u002Fconsole.log(students[i].name)\n",[30,53274,53275],{"class":32,"line":142},[30,53276,52536],{"class":321},[30,53278,53279],{"class":32,"line":1811},[30,53280,2369],{"class":321},[30,53282,53283,53285,53287],{"class":32,"line":1825},[30,53284,52555],{"class":321},[30,53286,51951],{"class":51438},[30,53288,51445],{"class":321},[287,53290,53292],{"id":53291},"_2106-内置对象","2.10.6 内置对象",[157,53294,53295],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[271,53297,53298],{},[150,53299,53300],{},"数学对象Math",[157,53302,53303],{},[160,53304],{"alt":25,"src":53305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[157,53307,53308],{},[558,53309,53312],{"href":53310,"rel":53311},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24045],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[157,53314,53315],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[157,53317,53318],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[157,53320,53321],{},"数组不可以使用Math中的max,min来求最大值与最小值",[157,53323,53324],{},"null是一个空对象，可以认为：null类似于let obj={}",[157,53326,53327],{},"null属于对象数据类型",[271,53329,53330],{"start":44},[150,53331,53332],{},"生成任意范围随机数",[157,53334,53335],{},[160,53336],{"alt":25,"src":53337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[157,53339,53340],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[157,53342,53343],{},"乘以几就取不到几",[157,53345,53346],{},"取数组中的随机元素：",[157,53348,53349],{},"let arr = ['red', 'green', 'blue']",[157,53351,53352],{},"let random = Math.floor(Math.random() * arr.length)",[157,53354,53355],{},"console.log(arr[random])",[157,53357,53358],{},"这个函数得到的是全闭区间",[157,53360,53361],{},"function getRandom(N, M) {",[157,53363,53364],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[157,53366,1266],{},[157,53368,53369],{},"console.log(getRandom(4, 8))",[287,53371,53373],{"id":53372},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[157,53375,53376],{},[160,53377],{"alt":25,"src":53378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[157,53380,53381],{},[160,53382],{"alt":25,"src":53383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[157,53385,53386],{},[160,53387],{"alt":25,"src":53388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[157,53390,53391],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[157,53393,53394],{},[160,53395],{"alt":25,"src":53396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[157,53398,53399],{},[160,53400],{"alt":25,"src":53401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[157,53403,53404],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[157,53406,53407],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[157,53409,53410],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[234,53412,53413],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":44,"depth":44,"links":53415},[53416,53424,53425,53426,53427,53428,53435,53439,53445,53454],{"id":50606,"depth":44,"text":50607,"children":53417},[53418,53419,53420,53421,53422,53423],{"id":50610,"depth":52,"text":50611},{"id":50627,"depth":52,"text":50628},{"id":50667,"depth":52,"text":50668},{"id":50679,"depth":52,"text":50680},{"id":50688,"depth":52,"text":50689},{"id":50736,"depth":52,"text":50737},{"id":50746,"depth":44,"text":50747},{"id":50834,"depth":44,"text":50835},{"id":50857,"depth":44,"text":50858},{"id":50869,"depth":44,"text":50870},{"id":51056,"depth":44,"text":51057,"children":53429},[53430,53431,53432,53433,53434],{"id":51060,"depth":52,"text":51061},{"id":51069,"depth":52,"text":51070},{"id":51097,"depth":52,"text":51098},{"id":51133,"depth":52,"text":51134},{"id":51158,"depth":52,"text":51159},{"id":51170,"depth":44,"text":51171,"children":53436},[53437,53438],{"id":51191,"depth":52,"text":51192},{"id":51285,"depth":52,"text":51286},{"id":51343,"depth":44,"text":51344,"children":53440},[53441,53442,53443,53444],{"id":51347,"depth":52,"text":51348},{"id":51371,"depth":52,"text":51372},{"id":51424,"depth":52,"text":51425},{"id":52235,"depth":52,"text":52236},{"id":52621,"depth":44,"text":52622,"children":53446},[53447,53448,53449,53450,53451,53452,53453],{"id":52639,"depth":52,"text":52640},{"id":52676,"depth":52,"text":52677},{"id":52707,"depth":52,"text":52708},{"id":52740,"depth":52,"text":52741},{"id":52821,"depth":52,"text":52822},{"id":52919,"depth":52,"text":52920},{"id":52977,"depth":52,"text":52978},{"id":53030,"depth":44,"text":53031,"children":53455},[53456,53457,53458,53459,53460,53461,53462],{"id":53034,"depth":52,"text":53035},{"id":53059,"depth":52,"text":53060},{"id":53111,"depth":52,"text":53112},{"id":53131,"depth":52,"text":53132},{"id":53198,"depth":52,"text":53199},{"id":53291,"depth":52,"text":53292},{"id":53372,"depth":52,"text":53373},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50598,"description":242},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53469,"title":53470,"body":53471,"description":242,"extension":243,"meta":76811,"navigation":245,"path":76812,"seo":76813,"stem":76814,"__hash__":76815},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53472,"toc":76751},[53473,53476,53479,53482,53487,53490,53493,53496,53500,53504,53510,53515,53523,53530,53533,53537,53542,53547,53552,53555,53558,53569,53572,53576,53579,53582,53587,53592,53597,53600,53603,53695,53698,53703,53706,53711,53714,53717,53722,53725,53730,53734,53737,53751,53755,53760,53763,53766,53770,53775,53778,53782,53786,53791,53795,53800,53803,53806,53809,53812,53815,53818,53823,53828,53856,53859,53862,53865,53870,53873,53876,53879,53882,53886,53915,53919,53924,53929,53932,53935,53938,53943,54058,54063,54068,54229,54234,54237,54241,54246,54251,54254,54257,54260,54263,54266,54269,54272,54275,54278,54281,54284,54287,54290,54293,54295,54298,54301,54304,54309,54313,54710,54713,54719,54723,54728,56010,56015,56018,56021,56024,56029,57225,57229,57235,57240,57243,57248,57253,57257,57261,57266,57269,57274,57277,57280,57284,58192,58195,58199,58420,58423,58426,58429,58655,58658,58882,58885,58889,58894,58897,58900,59128,59131,59164,59167,59171,59176,59180,59183,59186,59189,59192,59195,59198,59201,59206,60486,60490,60493,61586,61590,61593,61596,61599,61602,61606,61609,61612,61614,61622,63103,63107,63110,63113,63116,63325,63328,63332,63336,63341,63346,63349,63352,63357,63361,63366,63369,63478,63482,63487,63492,63495,63498,63502,63507,63512,63517,63520,63523,63534,63537,63542,63547,63550,63553,63626,63630,63635,63638,63640,63651,63655,63660,64986,64989,64992,64995,64997,65000,65003,65006,65009,65012,65015,65018,65021,65024,65027,65030,65033,65035,65037,65040,65044,66138,66141,66144,66160,66174,66177,66182,66188,66193,66197,66201,66206,66210,66215,66657,66662,66665,66669,66674,66677,66680,66684,66689,66693,66698,66703,66707,66712,66717,66720,66725,66730,66734,66739,66744,66848,66851,66855,66860,67226,67229,67232,67235,67238,67241,67244,67247,67250,68546,68550,68555,68560,68563,68566,68569,68572,68574,68579,68584,68587,68591,68596,68601,68606,68609,68612,68615,68618,68621,68626,68629,68633,68638,68643,68647,68652,68655,68660,68663,68666,68669,68672,68675,68680,68683,68686,68689,68692,68696,68701,68704,68708,68713,68716,68719,68723,68752,68755,68759,68763,68768,68772,68777,68780,68783,68786,68789,68792,68795,68798,68801,68804,68807,68810,68813,68816,68819,68823,68828,68833,68836,68840,68844,68849,68852,68856,68859,68862,68867,68872,68877,68882,68887,68890,68893,68898,68903,68907,68912,68915,68920,68923,68926,68929,68932,68937,68940,68949,68953,68958,68961,68964,68968,68971,68976,68980,68983,68989,68995,68999,69025,69028,70589,70592,71088,71091,71096,71101,71106,71110,71115,71120,71125,71129,71134,71137,71140,71143,71146,71150,71153,71158,71161,71166,71170,71175,71178,71183,71188,71193,71196,71199,71204,71209,71212,71215,71219,71222,71227,71230,71235,71238,71243,71248,71253,71256,71261,71326,71329,71340,71344,71349,71521,71525,71530,71533,71536,71539,71543,71554,71558,71561,71566,71571,71574,71577,71580,71583,71586,71588,71591,71594,71597,71602,71605,71610,71613,71617,71620,71623,71637,71641,71644,71699,71704,71707,71710,71715,71718,71722,71727,71857,71861,71866,71871,71952,71957,71961,71964,71969,71974,71980,71983,71986,71989,71993,71998,72001,72012,72016,72033,75080,75084,75087,75090,75093,75114,75118,75121,75129,75132,75137,75140,75143,75148,75153,75157,75178,75182,75187,75190,75193,75196,75199,75203,75208,75211,75215,75220,75223,75228,75231,75236,75239,75244,76447,76451,76456,76459,76464,76748],[10,53474,53470],{"id":53475},"_3web-apis",[157,53477,53478],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[157,53480,53481],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[157,53483,53484],{},[160,53485],{"alt":25,"src":53486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[157,53488,53489],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[157,53491,53492],{},"建议数组和对象使用 const 来声明",[157,53494,53495],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[15,53497,53499],{"id":53498},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[287,53501,53503],{"id":53502},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[157,53505,53506,53509],{},[27,53507,53508],{},"document"," = HTML 文件解析后的对象化表示；",[157,53511,53512,53514],{},[27,53513,53508],{}," ≠ HTML 文件本身",[157,53516,53517,53522],{},[469,53518,53519],{},[27,53520,53521],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[157,53524,53525,53529],{},[469,53526,53527],{},[27,53528,53508],{}," ：容器里的内容，代表当前加载的网页（DOM）",[157,53531,53532],{},"document实际上为window.document的简写",[287,53534,53536],{"id":53535},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[157,53538,53539],{},[160,53540],{"alt":25,"src":53541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[157,53543,53544],{},[160,53545],{"alt":25,"src":53546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[157,53548,53549],{},[160,53550],{"alt":25,"src":53551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[157,53553,53554],{},"console.dir()",[157,53556,53557],{},"dir用来打印对象",[147,53559,53560,53563,53566],{},[150,53561,53562],{},"任何一个标签，都是一个对象",[150,53564,53565],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[150,53567,53568],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[157,53570,53571],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[287,53573,53575],{"id":53574},"_312-获取dom对象","3.1.2 获取DoM对象",[157,53577,53578],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[157,53580,53581],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[157,53583,53584],{},[469,53585,53586],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[271,53588,53589],{},[150,53590,53591],{},"利用CSS选择器来获取标签元素",[157,53593,53594],{},[160,53595],{"alt":25,"src":53596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[157,53598,53599],{},"里边的选择器必须必须加引号！！！",[157,53601,53602],{},"只选择第一个元素",[20,53604,53606],{"className":53205,"code":53605,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cdiv class=\"box\">123\u003C\u002Fdiv>\n  \u003Cdiv class=\"box\">456\u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1.获取匹配的第一个元素\n    const box = document.querySelector('div')\n    console.dir(box)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,53607,53608,53616,53637,53656,53664,53669,53674,53679,53687],{"__ignoreMap":25},[30,53609,53610,53612,53614],{"class":32,"line":33},[30,53611,1230],{"class":321},[30,53613,51938],{"class":51438},[30,53615,51445],{"class":321},[30,53617,53618,53620,53622,53625,53627,53630,53633,53635],{"class":32,"line":44},[30,53619,52282],{"class":321},[30,53621,51749],{"class":51438},[30,53623,53624],{"class":36}," class",[30,53626,367],{"class":321},[30,53628,53629],{"class":74},"\"box\"",[30,53631,53632],{"class":321},">123\u003C\u002F",[30,53634,51749],{"class":51438},[30,53636,51445],{"class":321},[30,53638,53639,53641,53643,53645,53647,53649,53652,53654],{"class":32,"line":52},[30,53640,52282],{"class":321},[30,53642,51749],{"class":51438},[30,53644,53624],{"class":36},[30,53646,367],{"class":321},[30,53648,53629],{"class":74},[30,53650,53651],{"class":321},">456\u003C\u002F",[30,53653,51749],{"class":51438},[30,53655,51445],{"class":321},[30,53657,53658,53660,53662],{"class":32,"line":60},[30,53659,52282],{"class":321},[30,53661,51951],{"class":51438},[30,53663,51445],{"class":321},[30,53665,53666],{"class":32,"line":68},[30,53667,53668],{"class":321},"    \u002F\u002F 1.获取匹配的第一个元素\n",[30,53670,53671],{"class":32,"line":80},[30,53672,53673],{"class":321},"    const box = document.querySelector('div')\n",[30,53675,53676],{"class":32,"line":88},[30,53677,53678],{"class":321},"    console.dir(box)\n",[30,53680,53681,53683,53685],{"class":32,"line":96},[30,53682,52555],{"class":321},[30,53684,51951],{"class":51438},[30,53686,51445],{"class":321},[30,53688,53689,53691,53693],{"class":32,"line":104},[30,53690,51923],{"class":321},[30,53692,51938],{"class":51438},[30,53694,51445],{"class":321},[157,53696,53697],{},"只选123，不选456",[157,53699,53700],{},[160,53701],{"alt":25,"src":53702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[157,53704,53705],{},"返回的是一个数组的集合，不能对其进行直接修改",[157,53707,53708],{},[160,53709],{"alt":25,"src":53710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[157,53712,53713],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[157,53715,53716],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[271,53718,53719],{"start":44},[150,53720,53721],{},"其他方法来获取标签元素",[157,53723,53724],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[157,53726,53727],{},[160,53728],{"alt":25,"src":53729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[287,53731,53733],{"id":53732},"_313-操作元素的内容","3.1.3 操作元素的内容",[157,53735,53736],{},"设置修改DOM元素内容有两种方式：",[147,53738,53739,53742,53745,53748],{},[150,53740,53741],{},"元素.innerText=''",[150,53743,53744],{},"元素.innerHTML=''",[150,53746,53747],{},"不写字符串输出数字也是可以的",[150,53749,53750],{},"元素.innerHtml=1",[22180,53752,53754],{"id":53753},"_3131-innertext","3.1.3.1 innerText",[157,53756,53757],{},[160,53758],{"alt":25,"src":53759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[157,53761,53762],{},"思路：实现了修改盒子中的内容！",[157,53764,53765],{},"它只显示纯文本，不解析标签",[22180,53767,53769],{"id":53768},"_3132-innerhtml","3.1.3.2 innerHTML",[157,53771,53772],{},[160,53773],{"alt":25,"src":53774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[157,53776,53777],{},"相比于innerText，他的强大之处在于可以解析标签",[287,53779,53781],{"id":53780},"_314-操作元素属性","3.1.4 操作元素属性",[22180,53783,53785],{"id":53784},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[157,53787,53788],{},[160,53789],{"alt":25,"src":53790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22180,53792,53794],{"id":53793},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[157,53796,53797],{},[160,53798],{"alt":25,"src":53799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[157,53801,53802],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[157,53804,53805],{},"div.style.backgroundColor = 'hotpink'",[157,53807,53808],{},"如果按照css的写法，-表示减，就会出错",[157,53810,53811],{},"body元素不需要再获取，直接用就行！！！！！！",[157,53813,53814],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[157,53816,53817],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[157,53819,53820],{},[160,53821],{"alt":25,"src":53822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[157,53824,53825],{},[160,53826],{"alt":25,"src":53827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[271,53829,53830,53833,53836,53839,53842,53845],{},[150,53831,53832],{},"className这个方式就是修改很多样式的时候来使用的！",[150,53834,53835],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[150,53837,53838],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[150,53840,53841],{},"className为属性名，如果还用class的话就导致与关键字冲突",[150,53843,53844],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[150,53846,53847,53848,53853],{},"解析标签的时候就变为了",[51749,53849],{"className":53850},[53851,53852],"nav","box",[53854,53855],"br",{},[157,53857,53858],{},"例子：",[51749,53860],{"className":53861},[53851],[51951,53863,53864],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[157,53866,53867],{},[160,53868],{"alt":25,"src":53869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[157,53871,53872],{},"追加和删除类名用classList",[157,53874,53875],{},"常用于类似于开关的操作",[157,53877,53878],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[157,53880,53881],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22180,53883,53885],{"id":53884},"_3143-牢记点","3.1.4.3 牢记点",[271,53887,53888,53891,53894,53897,53900,53903,53906,53909,53912],{},[150,53889,53890],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[150,53892,53893],{},"使用style属性操作css时不要忘记引号",[150,53895,53896],{},"使用className或者classList时也不要忘记引号",[150,53898,53899],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[150,53901,53902],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[150,53904,53905],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[150,53907,53908],{},"若： let arr=['1','2',3] arr[0]=1",[150,53910,53911],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[150,53913,53914],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[287,53916,53918],{"id":53917},"_315-操作表单元素","3.1.5 操作表单元素",[271,53920,53921],{},[150,53922,53923],{},"天生的属性",[157,53925,53926],{},[160,53927],{"alt":25,"src":53928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[157,53930,53931],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[157,53933,53934],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[157,53936,53937],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[157,53939,53940],{},[160,53941],{"alt":25,"src":53942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[20,53944,53946],{"className":50771,"code":53945,"language":50773,"meta":25,"style":25},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n\u003Cinput type=\"checkbox\" name=\"\" id=\"\" checked>\n不选的话：\nconst input = document.querySelector('input')\ninput.checked=false\n这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n\n禁用按钮：\n它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n\u003Cbutton disabled>点击\u003C\u002Fbutton>\n\u003Cbutton>点击\u003C\u002Fbutton>\nconst bt = document.querySelector('button')\nbt.disabled = false\n",[27,53947,53948,53953,53985,53990,53995,54000,54005,54009,54014,54019,54036,54048,54053],{"__ignoreMap":25},[30,53949,53950],{"class":32,"line":33},[30,53951,53952],{"class":321},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[30,53954,53955,53957,53960,53963,53965,53968,53970,53972,53974,53976,53978,53980,53983],{"class":32,"line":44},[30,53956,1230],{"class":321},[30,53958,53959],{"class":51438},"input",[30,53961,53962],{"class":36}," type",[30,53964,367],{"class":321},[30,53966,53967],{"class":74},"\"checkbox\"",[30,53969,15102],{"class":36},[30,53971,367],{"class":321},[30,53973,7834],{"class":74},[30,53975,15141],{"class":36},[30,53977,367],{"class":321},[30,53979,7834],{"class":74},[30,53981,53982],{"class":36}," checked",[30,53984,51445],{"class":321},[30,53986,53987],{"class":32,"line":52},[30,53988,53989],{"class":321},"不选的话：\n",[30,53991,53992],{"class":32,"line":60},[30,53993,53994],{"class":321},"const input = document.querySelector('input')\n",[30,53996,53997],{"class":32,"line":68},[30,53998,53999],{"class":321},"input.checked=false\n",[30,54001,54002],{"class":32,"line":80},[30,54003,54004],{"class":321},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[30,54006,54007],{"class":32,"line":88},[30,54008,2582],{"emptyLinePlaceholder":245},[30,54010,54011],{"class":32,"line":96},[30,54012,54013],{"class":321},"禁用按钮：\n",[30,54015,54016],{"class":32,"line":104},[30,54017,54018],{"class":321},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[30,54020,54021,54023,54026,54029,54032,54034],{"class":32,"line":112},[30,54022,1230],{"class":321},[30,54024,54025],{"class":51438},"button",[30,54027,54028],{"class":36}," disabled",[30,54030,54031],{"class":321},">点击\u003C\u002F",[30,54033,54025],{"class":51438},[30,54035,51445],{"class":321},[30,54037,54038,54040,54042,54044,54046],{"class":32,"line":123},[30,54039,1230],{"class":321},[30,54041,54025],{"class":51438},[30,54043,54031],{"class":321},[30,54045,54025],{"class":51438},[30,54047,51445],{"class":321},[30,54049,54050],{"class":32,"line":131},[30,54051,54052],{"class":321},"const bt = document.querySelector('button')\n",[30,54054,54055],{"class":32,"line":142},[30,54056,54057],{"class":321},"bt.disabled = false\n",[271,54059,54060],{"start":44},[150,54061,54062],{},"自定义属性",[157,54064,54065],{},[160,54066],{"alt":25,"src":54067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[20,54069,54071],{"className":53205,"code":54070,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cdiv data-id=\"1\" data-spm=\"我不知道\">1\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"2\">2\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"3\">3\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"4\">4\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"5\">5\u003C\u002Fdiv>\n  \u003Cscript>\n    const one = document.querySelector('div')\n    console.log(one.dataset)\n    console.log(one.dataset.id)\n    console.log(one.dataset.spm)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,54072,54073,54081,54109,54128,54147,54166,54185,54193,54198,54203,54208,54213,54221],{"__ignoreMap":25},[30,54074,54075,54077,54079],{"class":32,"line":33},[30,54076,1230],{"class":321},[30,54078,51938],{"class":51438},[30,54080,51445],{"class":321},[30,54082,54083,54085,54087,54090,54092,54094,54097,54099,54102,54105,54107],{"class":32,"line":44},[30,54084,52282],{"class":321},[30,54086,51749],{"class":51438},[30,54088,54089],{"class":36}," data-id",[30,54091,367],{"class":321},[30,54093,3860],{"class":74},[30,54095,54096],{"class":36}," data-spm",[30,54098,367],{"class":321},[30,54100,54101],{"class":74},"\"我不知道\"",[30,54103,54104],{"class":321},">1\u003C\u002F",[30,54106,51749],{"class":51438},[30,54108,51445],{"class":321},[30,54110,54111,54113,54115,54117,54119,54121,54124,54126],{"class":32,"line":52},[30,54112,52282],{"class":321},[30,54114,51749],{"class":51438},[30,54116,54089],{"class":36},[30,54118,367],{"class":321},[30,54120,3883],{"class":74},[30,54122,54123],{"class":321},">2\u003C\u002F",[30,54125,51749],{"class":51438},[30,54127,51445],{"class":321},[30,54129,54130,54132,54134,54136,54138,54140,54143,54145],{"class":32,"line":60},[30,54131,52282],{"class":321},[30,54133,51749],{"class":51438},[30,54135,54089],{"class":36},[30,54137,367],{"class":321},[30,54139,3896],{"class":74},[30,54141,54142],{"class":321},">3\u003C\u002F",[30,54144,51749],{"class":51438},[30,54146,51445],{"class":321},[30,54148,54149,54151,54153,54155,54157,54159,54162,54164],{"class":32,"line":68},[30,54150,52282],{"class":321},[30,54152,51749],{"class":51438},[30,54154,54089],{"class":36},[30,54156,367],{"class":321},[30,54158,3909],{"class":74},[30,54160,54161],{"class":321},">4\u003C\u002F",[30,54163,51749],{"class":51438},[30,54165,51445],{"class":321},[30,54167,54168,54170,54172,54174,54176,54178,54181,54183],{"class":32,"line":80},[30,54169,52282],{"class":321},[30,54171,51749],{"class":51438},[30,54173,54089],{"class":36},[30,54175,367],{"class":321},[30,54177,3930],{"class":74},[30,54179,54180],{"class":321},">5\u003C\u002F",[30,54182,51749],{"class":51438},[30,54184,51445],{"class":321},[30,54186,54187,54189,54191],{"class":32,"line":88},[30,54188,52282],{"class":321},[30,54190,51951],{"class":51438},[30,54192,51445],{"class":321},[30,54194,54195],{"class":32,"line":96},[30,54196,54197],{"class":321},"    const one = document.querySelector('div')\n",[30,54199,54200],{"class":32,"line":104},[30,54201,54202],{"class":321},"    console.log(one.dataset)\n",[30,54204,54205],{"class":32,"line":112},[30,54206,54207],{"class":321},"    console.log(one.dataset.id)\n",[30,54209,54210],{"class":32,"line":123},[30,54211,54212],{"class":321},"    console.log(one.dataset.spm)\n",[30,54214,54215,54217,54219],{"class":32,"line":131},[30,54216,52555],{"class":321},[30,54218,51951],{"class":51438},[30,54220,51445],{"class":321},[30,54222,54223,54225,54227],{"class":32,"line":142},[30,54224,51923],{"class":321},[30,54226,51938],{"class":51438},[30,54228,51445],{"class":321},[157,54230,54231],{},[160,54232],{"alt":25,"src":54233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[157,54235,54236],{},"document.querySelector选择的是第一个对象（元素）",[287,54238,54240],{"id":54239},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[157,54242,54243],{},[160,54244],{"alt":25,"src":54245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[157,54247,54248],{},[160,54249],{"alt":25,"src":54250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[157,54252,54253],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51951,54255,54256],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[157,54258,54259],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51951,54261,54262],{},"\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",[157,54264,54265],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[157,54267,54268],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[157,54270,54271],{},"单位为毫秒！！！",[157,54273,54274],{},"可以搭配匿名函数来用！！！",[157,54276,54277],{},"setInterval(function () {",[157,54279,54280],{},"alert('两秒执行一次')",[157,54282,54283],{},"}, 2000)",[157,54285,54286],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[157,54288,54289],{},"function fn() {",[157,54291,54292],{},"document.write(1)",[157,54294,1266],{},[157,54296,54297],{},"setInterval(fn, 1000)",[157,54299,54300],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[157,54302,54303],{},"setInterval('fn()', 1000)",[157,54305,54306],{},[160,54307],{"alt":25,"src":54308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22180,54310,54312],{"id":54311},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[20,54314,54316],{"className":50771,"code":54315,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctextarea name=\"\" id=\"\" cols=\"30\" rows=\"10\">\n        用户注册协议\n        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n    \u003C\u002Ftextarea>\n  \u003Cbr>\n  \u003Cbutton class=\"btn\" disabled>我已经阅读用户协议(5)\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1. 获取元素\n    const btn = document.querySelector('.btn')\n    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n    \u002F\u002F 2. 倒计时\n    let i = 5\n    \u002F\u002F 2.1 开启定时器\n    let n = setInterval(function () {\n      i--\n      btn.innerHTML = `我已经阅读用户协议(${i})`\n      if (i === 0) {\n        clearInterval(n)  \u002F\u002F 关闭定时器\n        \u002F\u002F 定时器停了，我就可以开按钮\n        btn.disabled = false\n        btn.innerHTML = '同意'\n      }\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,54317,54318,54328,54342,54346,54354,54368,54388,54400,54408,54412,54420,54457,54462,54467,54472,54480,54488,54510,54518,54523,54545,54550,54555,54566,54571,54591,54599,54614,54629,54640,54645,54655,54665,54669,54678,54682,54690,54698,54702],{"__ignoreMap":25},[30,54319,54320,54322,54324,54326],{"class":32,"line":33},[30,54321,51435],{"class":321},[30,54323,51439],{"class":51438},[30,54325,51442],{"class":36},[30,54327,51445],{"class":321},[30,54329,54330,54332,54334,54336,54338,54340],{"class":32,"line":44},[30,54331,1230],{"class":321},[30,54333,50773],{"class":51438},[30,54335,51454],{"class":36},[30,54337,367],{"class":321},[30,54339,51459],{"class":74},[30,54341,51445],{"class":321},[30,54343,54344],{"class":32,"line":52},[30,54345,2582],{"emptyLinePlaceholder":245},[30,54347,54348,54350,54352],{"class":32,"line":60},[30,54349,1230],{"class":321},[30,54351,51472],{"class":51438},[30,54353,51445],{"class":321},[30,54355,54356,54358,54360,54362,54364,54366],{"class":32,"line":68},[30,54357,52282],{"class":321},[30,54359,51482],{"class":51438},[30,54361,51485],{"class":36},[30,54363,367],{"class":321},[30,54365,51490],{"class":74},[30,54367,51445],{"class":321},[30,54369,54370,54372,54374,54376,54378,54380,54382,54384,54386],{"class":32,"line":80},[30,54371,52282],{"class":321},[30,54373,51482],{"class":51438},[30,54375,15102],{"class":36},[30,54377,367],{"class":321},[30,54379,51529],{"class":74},[30,54381,51509],{"class":36},[30,54383,367],{"class":321},[30,54385,51536],{"class":74},[30,54387,51445],{"class":321},[30,54389,54390,54392,54394,54396,54398],{"class":32,"line":88},[30,54391,52282],{"class":321},[30,54393,51545],{"class":51438},[30,54395,51548],{"class":321},[30,54397,51545],{"class":51438},[30,54399,51445],{"class":321},[30,54401,54402,54404,54406],{"class":32,"line":96},[30,54403,51923],{"class":321},[30,54405,51472],{"class":51438},[30,54407,51445],{"class":321},[30,54409,54410],{"class":32,"line":104},[30,54411,2582],{"emptyLinePlaceholder":245},[30,54413,54414,54416,54418],{"class":32,"line":112},[30,54415,1230],{"class":321},[30,54417,51938],{"class":51438},[30,54419,51445],{"class":321},[30,54421,54422,54424,54427,54429,54431,54433,54435,54437,54439,54442,54444,54447,54450,54452,54455],{"class":32,"line":123},[30,54423,52282],{"class":321},[30,54425,54426],{"class":51438},"textarea",[30,54428,15102],{"class":36},[30,54430,367],{"class":321},[30,54432,7834],{"class":74},[30,54434,15141],{"class":36},[30,54436,367],{"class":321},[30,54438,7834],{"class":74},[30,54440,54441],{"class":36}," cols",[30,54443,367],{"class":321},[30,54445,54446],{"class":74},"\"30\"",[30,54448,54449],{"class":36}," rows",[30,54451,367],{"class":321},[30,54453,54454],{"class":74},"\"10\"",[30,54456,51445],{"class":321},[30,54458,54459],{"class":32,"line":131},[30,54460,54461],{"class":321},"        用户注册协议\n",[30,54463,54464],{"class":32,"line":142},[30,54465,54466],{"class":321},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[30,54468,54469],{"class":32,"line":1811},[30,54470,54471],{"class":321},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[30,54473,54474,54476,54478],{"class":32,"line":1825},[30,54475,51914],{"class":321},[30,54477,54426],{"class":51438},[30,54479,51445],{"class":321},[30,54481,54482,54484,54486],{"class":32,"line":1830},[30,54483,52282],{"class":321},[30,54485,53854],{"class":51438},[30,54487,51445],{"class":321},[30,54489,54490,54492,54494,54496,54498,54501,54503,54506,54508],{"class":32,"line":1836},[30,54491,52282],{"class":321},[30,54493,54025],{"class":51438},[30,54495,53624],{"class":36},[30,54497,367],{"class":321},[30,54499,54500],{"class":74},"\"btn\"",[30,54502,54028],{"class":36},[30,54504,54505],{"class":321},">我已经阅读用户协议(5)\u003C\u002F",[30,54507,54025],{"class":51438},[30,54509,51445],{"class":321},[30,54511,54512,54514,54516],{"class":32,"line":1857},[30,54513,52282],{"class":321},[30,54515,51951],{"class":51438},[30,54517,51445],{"class":321},[30,54519,54520],{"class":32,"line":1862},[30,54521,54522],{"class":379},"    \u002F\u002F 1. 获取元素\n",[30,54524,54525,54527,54530,54532,54535,54538,54540,54543],{"class":32,"line":1876},[30,54526,11403],{"class":317},[30,54528,54529],{"class":40}," btn",[30,54531,13746],{"class":317},[30,54533,54534],{"class":321}," document.",[30,54536,54537],{"class":36},"querySelector",[30,54539,322],{"class":321},[30,54541,54542],{"class":74},"'.btn'",[30,54544,328],{"class":321},[30,54546,54547],{"class":32,"line":1881},[30,54548,54549],{"class":379},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[30,54551,54552],{"class":32,"line":1910},[30,54553,54554],{"class":379},"    \u002F\u002F 2. 倒计时\n",[30,54556,54557,54559,54561,54563],{"class":32,"line":1915},[30,54558,52357],{"class":317},[30,54560,9620],{"class":321},[30,54562,367],{"class":317},[30,54564,54565],{"class":40}," 5\n",[30,54567,54568],{"class":32,"line":1932},[30,54569,54570],{"class":379},"    \u002F\u002F 2.1 开启定时器\n",[30,54572,54573,54575,54578,54580,54583,54585,54588],{"class":32,"line":1937},[30,54574,52357],{"class":317},[30,54576,54577],{"class":321}," n ",[30,54579,367],{"class":317},[30,54581,54582],{"class":36}," setInterval",[30,54584,322],{"class":321},[30,54586,54587],{"class":317},"function",[30,54589,54590],{"class":321}," () {\n",[30,54592,54593,54596],{"class":32,"line":1942},[30,54594,54595],{"class":321},"      i",[30,54597,54598],{"class":317},"--\n",[30,54600,54601,54604,54606,54609,54611],{"class":32,"line":1947},[30,54602,54603],{"class":321},"      btn.innerHTML ",[30,54605,367],{"class":317},[30,54607,54608],{"class":74}," `我已经阅读用户协议(${",[30,54610,761],{"class":321},[30,54612,54613],{"class":74},"})`\n",[30,54615,54616,54619,54622,54625,54627],{"class":32,"line":1961},[30,54617,54618],{"class":317},"      if",[30,54620,54621],{"class":321}," (i ",[30,54623,54624],{"class":317},"===",[30,54626,4275],{"class":40},[30,54628,12624],{"class":321},[30,54630,54631,54634,54637],{"class":32,"line":1966},[30,54632,54633],{"class":36},"        clearInterval",[30,54635,54636],{"class":321},"(n)  ",[30,54638,54639],{"class":379},"\u002F\u002F 关闭定时器\n",[30,54641,54642],{"class":32,"line":2759},[30,54643,54644],{"class":379},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[30,54646,54647,54650,54652],{"class":32,"line":2773},[30,54648,54649],{"class":321},"        btn.disabled ",[30,54651,367],{"class":317},[30,54653,54654],{"class":40}," false\n",[30,54656,54657,54660,54662],{"class":32,"line":2781},[30,54658,54659],{"class":321},"        btn.innerHTML ",[30,54661,367],{"class":317},[30,54663,54664],{"class":74}," '同意'\n",[30,54666,54667],{"class":32,"line":2786},[30,54668,52536],{"class":321},[30,54670,54671,54674,54676],{"class":32,"line":2792},[30,54672,54673],{"class":321},"    }, ",[30,54675,6592],{"class":40},[30,54677,328],{"class":321},[30,54679,54680],{"class":32,"line":2798},[30,54681,2582],{"emptyLinePlaceholder":245},[30,54683,54684,54686,54688],{"class":32,"line":2803},[30,54685,52555],{"class":321},[30,54687,51951],{"class":51438},[30,54689,51445],{"class":321},[30,54691,54692,54694,54696],{"class":32,"line":8130},[30,54693,51923],{"class":321},[30,54695,51938],{"class":51438},[30,54697,51445],{"class":321},[30,54699,54700],{"class":32,"line":8154},[30,54701,2582],{"emptyLinePlaceholder":245},[30,54703,54704,54706,54708],{"class":32,"line":8159},[30,54705,51923],{"class":321},[30,54707,50773],{"class":51438},[30,54709,51445],{"class":321},[157,54711,54712],{},"不要一直想着用死循环,避免死循环",[157,54714,54715,54718],{},[27,54716,54717],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22180,54720,54722],{"id":54721},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[271,54724,54725],{},[150,54726,54727],{},"法1",[20,54729,54731],{"className":50771,"code":54730,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const arrImage = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const color = document.querySelector('.slider-footer')\n    const lis = document.querySelectorAll('.slider-footer ul li')\n    let i = 1\n    let timer = setInterval(function () {\n      img.src = arrImage[i].url\n      p.innerHTML = arrImage[i].title\n      color.style.backgroundColor = arrImage[i].color\n      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n      \u002F\u002F li.classList.add('activate')\n      \u002F\u002F lis[i + 1].classList.add('activate')\n      \u002F\u002F lis[i].classList.remove('activate')\n      document.querySelector('.activate')?.classList.toggle('activate')\n      lis[i].classList.add('activate')\n\n      i = (i + 1) % arrImage.length\n\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,54732,54733,54743,54757,54761,54769,54783,54803,54815,54823,54829,54840,54851,54855,54859,54866,54878,54882,54886,54893,54905,54919,54932,54946,54950,54954,54961,54972,54983,54994,55006,55018,55030,55034,55038,55046,55056,55069,55081,55094,55098,55102,55109,55119,55131,55143,55154,55165,55175,55187,55199,55203,55207,55216,55228,55240,55268,55281,55285,55289,55296,55307,55311,55319,55327,55331,55339,55353,55368,55392,55400,55415,55428,55436,55457,55469,55481,55493,55505,55517,55529,55541,55550,55558,55566,55574,55586,55609,55628,55647,55666,55685,55704,55723,55743,55747,55767,55786,55806,55827,55838,55855,55865,55875,55885,55890,55895,55900,55905,55930,55943,55947,55970,55974,55982,55990,55998,56002],{"__ignoreMap":25},[30,54734,54735,54737,54739,54741],{"class":32,"line":33},[30,54736,51435],{"class":321},[30,54738,51439],{"class":51438},[30,54740,51442],{"class":36},[30,54742,51445],{"class":321},[30,54744,54745,54747,54749,54751,54753,54755],{"class":32,"line":44},[30,54746,1230],{"class":321},[30,54748,50773],{"class":51438},[30,54750,51454],{"class":36},[30,54752,367],{"class":321},[30,54754,51459],{"class":74},[30,54756,51445],{"class":321},[30,54758,54759],{"class":32,"line":52},[30,54760,2582],{"emptyLinePlaceholder":245},[30,54762,54763,54765,54767],{"class":32,"line":60},[30,54764,1230],{"class":321},[30,54766,51472],{"class":51438},[30,54768,51445],{"class":321},[30,54770,54771,54773,54775,54777,54779,54781],{"class":32,"line":68},[30,54772,52282],{"class":321},[30,54774,51482],{"class":51438},[30,54776,51485],{"class":36},[30,54778,367],{"class":321},[30,54780,51490],{"class":74},[30,54782,51445],{"class":321},[30,54784,54785,54787,54789,54791,54793,54795,54797,54799,54801],{"class":32,"line":80},[30,54786,52282],{"class":321},[30,54788,51482],{"class":51438},[30,54790,15102],{"class":36},[30,54792,367],{"class":321},[30,54794,51529],{"class":74},[30,54796,51509],{"class":36},[30,54798,367],{"class":321},[30,54800,51536],{"class":74},[30,54802,51445],{"class":321},[30,54804,54805,54807,54809,54811,54813],{"class":32,"line":88},[30,54806,52282],{"class":321},[30,54808,51545],{"class":51438},[30,54810,51548],{"class":321},[30,54812,51545],{"class":51438},[30,54814,51445],{"class":321},[30,54816,54817,54819,54821],{"class":32,"line":96},[30,54818,52282],{"class":321},[30,54820,234],{"class":51438},[30,54822,51445],{"class":321},[30,54824,54825,54827],{"class":32,"line":104},[30,54826,6585],{"class":51438},[30,54828,15754],{"class":321},[30,54830,54831,54834,54836,54838],{"class":32,"line":112},[30,54832,54833],{"class":40},"      padding",[30,54835,51575],{"class":321},[30,54837,511],{"class":40},[30,54839,1480],{"class":321},[30,54841,54842,54845,54847,54849],{"class":32,"line":123},[30,54843,54844],{"class":40},"      margin",[30,54846,51575],{"class":321},[30,54848,511],{"class":40},[30,54850,1480],{"class":321},[30,54852,54853],{"class":32,"line":131},[30,54854,2369],{"class":321},[30,54856,54857],{"class":32,"line":142},[30,54858,2582],{"emptyLinePlaceholder":245},[30,54860,54861,54864],{"class":32,"line":1811},[30,54862,54863],{"class":51438},"    li",[30,54865,15754],{"class":321},[30,54867,54868,54871,54873,54876],{"class":32,"line":1825},[30,54869,54870],{"class":40},"      list-style",[30,54872,51575],{"class":321},[30,54874,54875],{"class":40},"none",[30,54877,1480],{"class":321},[30,54879,54880],{"class":32,"line":1830},[30,54881,2369],{"class":321},[30,54883,54884],{"class":32,"line":1836},[30,54885,2582],{"emptyLinePlaceholder":245},[30,54887,54888,54891],{"class":32,"line":1857},[30,54889,54890],{"class":36},"    .box",[30,54892,15754],{"class":321},[30,54894,54895,54898,54900,54903],{"class":32,"line":1862},[30,54896,54897],{"class":40},"      position",[30,54899,51575],{"class":321},[30,54901,54902],{"class":40},"relative",[30,54904,1480],{"class":321},[30,54906,54907,54910,54912,54915,54917],{"class":32,"line":1876},[30,54908,54909],{"class":40},"      width",[30,54911,51575],{"class":321},[30,54913,54914],{"class":40},"976",[30,54916,51630],{"class":317},[30,54918,1480],{"class":321},[30,54920,54921,54924,54926,54928,54930],{"class":32,"line":1881},[30,54922,54923],{"class":40},"      height",[30,54925,51575],{"class":321},[30,54927,1725],{"class":40},[30,54929,51630],{"class":317},[30,54931,1480],{"class":321},[30,54933,54934,54936,54938,54940,54942,54944],{"class":32,"line":1910},[30,54935,54844],{"class":40},[30,54937,51575],{"class":321},[30,54939,631],{"class":40},[30,54941,51630],{"class":317},[30,54943,51694],{"class":40},[30,54945,1480],{"class":321},[30,54947,54948],{"class":32,"line":1915},[30,54949,2369],{"class":321},[30,54951,54952],{"class":32,"line":1932},[30,54953,2582],{"emptyLinePlaceholder":245},[30,54955,54956,54959],{"class":32,"line":1937},[30,54957,54958],{"class":36},"    .slider-footer",[30,54960,15754],{"class":321},[30,54962,54963,54965,54967,54970],{"class":32,"line":1942},[30,54964,54897],{"class":40},[30,54966,51575],{"class":321},[30,54968,54969],{"class":40},"absolute",[30,54971,1480],{"class":321},[30,54973,54974,54977,54979,54981],{"class":32,"line":1947},[30,54975,54976],{"class":40},"      left",[30,54978,51575],{"class":321},[30,54980,511],{"class":40},[30,54982,1480],{"class":321},[30,54984,54985,54988,54990,54992],{"class":32,"line":1961},[30,54986,54987],{"class":40},"      bottom",[30,54989,51575],{"class":321},[30,54991,511],{"class":40},[30,54993,1480],{"class":321},[30,54995,54996,54998,55000,55002,55004],{"class":32,"line":1966},[30,54997,54909],{"class":40},[30,54999,51575],{"class":321},[30,55001,631],{"class":40},[30,55003,648],{"class":317},[30,55005,1480],{"class":321},[30,55007,55008,55010,55012,55014,55016],{"class":32,"line":2759},[30,55009,54923],{"class":40},[30,55011,51575],{"class":321},[30,55013,895],{"class":40},[30,55015,648],{"class":317},[30,55017,1480],{"class":321},[30,55019,55020,55023,55025,55028],{"class":32,"line":2773},[30,55021,55022],{"class":40},"      background-color",[30,55024,51575],{"class":321},[30,55026,55027],{"class":40},"skyblue",[30,55029,1480],{"class":321},[30,55031,55032],{"class":32,"line":2781},[30,55033,2369],{"class":321},[30,55035,55036],{"class":32,"line":2786},[30,55037,2582],{"emptyLinePlaceholder":245},[30,55039,55040,55042,55044],{"class":32,"line":2792},[30,55041,54958],{"class":36},[30,55043,7007],{"class":51438},[30,55045,15754],{"class":321},[30,55047,55048,55050,55052,55054],{"class":32,"line":2798},[30,55049,54897],{"class":40},[30,55051,51575],{"class":321},[30,55053,54969],{"class":40},[30,55055,1480],{"class":321},[30,55057,55058,55061,55063,55065,55067],{"class":32,"line":2803},[30,55059,55060],{"class":40},"      font-size",[30,55062,51575],{"class":321},[30,55064,1221],{"class":40},[30,55066,51630],{"class":317},[30,55068,1480],{"class":321},[30,55070,55071,55073,55075,55077,55079],{"class":32,"line":8130},[30,55072,54976],{"class":40},[30,55074,51575],{"class":321},[30,55076,1020],{"class":40},[30,55078,51630],{"class":317},[30,55080,1480],{"class":321},[30,55082,55083,55086,55088,55090,55092],{"class":32,"line":8154},[30,55084,55085],{"class":40},"      top",[30,55087,51575],{"class":321},[30,55089,639],{"class":40},[30,55091,51630],{"class":317},[30,55093,1480],{"class":321},[30,55095,55096],{"class":32,"line":8159},[30,55097,2369],{"class":321},[30,55099,55100],{"class":32,"line":8165},[30,55101,2582],{"emptyLinePlaceholder":245},[30,55103,55104,55107],{"class":32,"line":8192},[30,55105,55106],{"class":51438},"    ul",[30,55108,15754],{"class":321},[30,55110,55111,55113,55115,55117],{"class":32,"line":8197},[30,55112,54897],{"class":40},[30,55114,51575],{"class":321},[30,55116,54969],{"class":40},[30,55118,1480],{"class":321},[30,55120,55121,55123,55125,55127,55129],{"class":32,"line":8203},[30,55122,55085],{"class":40},[30,55124,51575],{"class":321},[30,55126,1101],{"class":40},[30,55128,51630],{"class":317},[30,55130,1480],{"class":321},[30,55132,55133,55135,55137,55139,55141],{"class":32,"line":8215},[30,55134,54976],{"class":40},[30,55136,51575],{"class":321},[30,55138,1020],{"class":40},[30,55140,51630],{"class":317},[30,55142,1480],{"class":321},[30,55144,55145,55148,55150,55152],{"class":32,"line":8227},[30,55146,55147],{"class":40},"      display",[30,55149,51575],{"class":321},[30,55151,51615],{"class":40},[30,55153,1480],{"class":321},[30,55155,55156,55159,55161,55163],{"class":32,"line":8239},[30,55157,55158],{"class":40},"      justify-content",[30,55160,51575],{"class":321},[30,55162,51806],{"class":40},[30,55164,1480],{"class":321},[30,55166,55167,55169,55171,55173],{"class":32,"line":9898},[30,55168,54897],{"class":40},[30,55170,51575],{"class":321},[30,55172,54969],{"class":40},[30,55174,1480],{"class":321},[30,55176,55177,55179,55181,55183,55185],{"class":32,"line":9923},[30,55178,54909],{"class":40},[30,55180,51575],{"class":321},[30,55182,4174],{"class":40},[30,55184,51630],{"class":317},[30,55186,1480],{"class":321},[30,55188,55189,55191,55193,55195,55197],{"class":32,"line":9946},[30,55190,54923],{"class":40},[30,55192,51575],{"class":321},[30,55194,1020],{"class":40},[30,55196,51630],{"class":317},[30,55198,1480],{"class":321},[30,55200,55201],{"class":32,"line":9970},[30,55202,2369],{"class":321},[30,55204,55205],{"class":32,"line":9975},[30,55206,2582],{"emptyLinePlaceholder":245},[30,55208,55209,55211,55214],{"class":32,"line":9980},[30,55210,55106],{"class":51438},[30,55212,55213],{"class":51438}," li",[30,55215,15754],{"class":321},[30,55217,55218,55220,55222,55224,55226],{"class":32,"line":9985},[30,55219,54909],{"class":40},[30,55221,51575],{"class":321},[30,55223,1020],{"class":40},[30,55225,51630],{"class":317},[30,55227,1480],{"class":321},[30,55229,55230,55232,55234,55236,55238],{"class":32,"line":9994},[30,55231,54923],{"class":40},[30,55233,51575],{"class":321},[30,55235,1020],{"class":40},[30,55237,51630],{"class":317},[30,55239,1480],{"class":321},[30,55241,55242,55244,55246,55249,55251,55253,55255,55257,55259,55261,55263,55266],{"class":32,"line":9999},[30,55243,55022],{"class":40},[30,55245,51575],{"class":321},[30,55247,55248],{"class":40},"rgba",[30,55250,322],{"class":321},[30,55252,511],{"class":40},[30,55254,12617],{"class":321},[30,55256,511],{"class":40},[30,55258,12617],{"class":321},[30,55260,511],{"class":40},[30,55262,12617],{"class":321},[30,55264,55265],{"class":40},".4",[30,55267,2901],{"class":321},[30,55269,55270,55273,55275,55277,55279],{"class":32,"line":10005},[30,55271,55272],{"class":40},"      border-radius",[30,55274,51575],{"class":321},[30,55276,766],{"class":40},[30,55278,51630],{"class":317},[30,55280,1480],{"class":321},[30,55282,55283],{"class":32,"line":10026},[30,55284,2369],{"class":321},[30,55286,55287],{"class":32,"line":10032},[30,55288,2582],{"emptyLinePlaceholder":245},[30,55290,55291,55294],{"class":32,"line":10046},[30,55292,55293],{"class":36},"    .activate",[30,55295,15754],{"class":321},[30,55297,55298,55300,55302,55305],{"class":32,"line":10052},[30,55299,55022],{"class":40},[30,55301,51575],{"class":321},[30,55303,55304],{"class":40},"#f7f7f7",[30,55306,1480],{"class":321},[30,55308,55309],{"class":32,"line":10079},[30,55310,2369],{"class":321},[30,55312,55313,55315,55317],{"class":32,"line":10088},[30,55314,52555],{"class":321},[30,55316,234],{"class":51438},[30,55318,51445],{"class":321},[30,55320,55321,55323,55325],{"class":32,"line":10094},[30,55322,51923],{"class":321},[30,55324,51472],{"class":51438},[30,55326,51445],{"class":321},[30,55328,55329],{"class":32,"line":10102},[30,55330,2582],{"emptyLinePlaceholder":245},[30,55332,55333,55335,55337],{"class":32,"line":10107},[30,55334,1230],{"class":321},[30,55336,51938],{"class":51438},[30,55338,51445],{"class":321},[30,55340,55341,55343,55345,55347,55349,55351],{"class":32,"line":16786},[30,55342,52282],{"class":321},[30,55344,51749],{"class":51438},[30,55346,53624],{"class":36},[30,55348,367],{"class":321},[30,55350,53629],{"class":74},[30,55352,51445],{"class":321},[30,55354,55355,55357,55359,55361,55363,55366],{"class":32,"line":16792},[30,55356,51479],{"class":321},[30,55358,51749],{"class":51438},[30,55360,53624],{"class":36},[30,55362,367],{"class":321},[30,55364,55365],{"class":74},"\"slider-wrapper\"",[30,55367,51445],{"class":321},[30,55369,55370,55373,55375,55378,55380,55383,55386,55388,55390],{"class":32,"line":16815},[30,55371,55372],{"class":321},"      \u003C",[30,55374,160],{"class":51438},[30,55376,55377],{"class":36}," src",[30,55379,367],{"class":321},[30,55381,55382],{"class":74},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[30,55384,55385],{"class":36}," alt",[30,55387,367],{"class":321},[30,55389,7834],{"class":74},[30,55391,51445],{"class":321},[30,55393,55394,55396,55398],{"class":32,"line":16821},[30,55395,51914],{"class":321},[30,55397,51749],{"class":51438},[30,55399,51445],{"class":321},[30,55401,55402,55404,55406,55408,55410,55413],{"class":32,"line":16844},[30,55403,51479],{"class":321},[30,55405,51749],{"class":51438},[30,55407,53624],{"class":36},[30,55409,367],{"class":321},[30,55411,55412],{"class":74},"\"slider-footer\"",[30,55414,51445],{"class":321},[30,55416,55417,55419,55421,55424,55426],{"class":32,"line":16858},[30,55418,55372],{"class":321},[30,55420,157],{"class":51438},[30,55422,55423],{"class":321},">对人类来说会不会太超前了?\u003C\u002F",[30,55425,157],{"class":51438},[30,55427,51445],{"class":321},[30,55429,55430,55432,55434],{"class":32,"line":16878},[30,55431,55372],{"class":321},[30,55433,147],{"class":51438},[30,55435,51445],{"class":321},[30,55437,55438,55441,55443,55445,55447,55450,55453,55455],{"class":32,"line":16884},[30,55439,55440],{"class":321},"        \u003C",[30,55442,150],{"class":51438},[30,55444,53624],{"class":36},[30,55446,367],{"class":321},[30,55448,55449],{"class":74},"\"activate\"",[30,55451,55452],{"class":321},">\u003C\u002F",[30,55454,150],{"class":51438},[30,55456,51445],{"class":321},[30,55458,55459,55461,55463,55465,55467],{"class":32,"line":16895},[30,55460,55440],{"class":321},[30,55462,150],{"class":51438},[30,55464,55452],{"class":321},[30,55466,150],{"class":51438},[30,55468,51445],{"class":321},[30,55470,55471,55473,55475,55477,55479],{"class":32,"line":16918},[30,55472,55440],{"class":321},[30,55474,150],{"class":51438},[30,55476,55452],{"class":321},[30,55478,150],{"class":51438},[30,55480,51445],{"class":321},[30,55482,55483,55485,55487,55489,55491],{"class":32,"line":16940},[30,55484,55440],{"class":321},[30,55486,150],{"class":51438},[30,55488,55452],{"class":321},[30,55490,150],{"class":51438},[30,55492,51445],{"class":321},[30,55494,55495,55497,55499,55501,55503],{"class":32,"line":16945},[30,55496,55440],{"class":321},[30,55498,150],{"class":51438},[30,55500,55452],{"class":321},[30,55502,150],{"class":51438},[30,55504,51445],{"class":321},[30,55506,55507,55509,55511,55513,55515],{"class":32,"line":16951},[30,55508,55440],{"class":321},[30,55510,150],{"class":51438},[30,55512,55452],{"class":321},[30,55514,150],{"class":51438},[30,55516,51445],{"class":321},[30,55518,55519,55521,55523,55525,55527],{"class":32,"line":16965},[30,55520,55440],{"class":321},[30,55522,150],{"class":51438},[30,55524,55452],{"class":321},[30,55526,150],{"class":51438},[30,55528,51445],{"class":321},[30,55530,55531,55533,55535,55537,55539],{"class":32,"line":16978},[30,55532,55440],{"class":321},[30,55534,150],{"class":51438},[30,55536,55452],{"class":321},[30,55538,150],{"class":51438},[30,55540,51445],{"class":321},[30,55542,55543,55546,55548],{"class":32,"line":16983},[30,55544,55545],{"class":321},"      \u003C\u002F",[30,55547,147],{"class":51438},[30,55549,51445],{"class":321},[30,55551,55552,55554,55556],{"class":32,"line":16997},[30,55553,51914],{"class":321},[30,55555,51749],{"class":51438},[30,55557,51445],{"class":321},[30,55559,55560,55562,55564],{"class":32,"line":17002},[30,55561,52555],{"class":321},[30,55563,51749],{"class":51438},[30,55565,51445],{"class":321},[30,55567,55568,55570,55572],{"class":32,"line":17008},[30,55569,52282],{"class":321},[30,55571,51951],{"class":51438},[30,55573,51445],{"class":321},[30,55575,55576,55578,55581,55583],{"class":32,"line":17013},[30,55577,11403],{"class":317},[30,55579,55580],{"class":40}," arrImage",[30,55582,13746],{"class":317},[30,55584,55585],{"class":321}," [\n",[30,55587,55588,55591,55594,55597,55600,55603,55606],{"class":32,"line":17027},[30,55589,55590],{"class":321},"      { url: ",[30,55592,55593],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[30,55595,55596],{"class":321},", title: ",[30,55598,55599],{"class":74},"'对人类来说会不会太超前了?'",[30,55601,55602],{"class":321},", color: ",[30,55604,55605],{"class":74},"'rgba(100,67,68)'",[30,55607,55608],{"class":321}," },\n",[30,55610,55611,55613,55616,55618,55621,55623,55626],{"class":32,"line":17032},[30,55612,55590],{"class":321},[30,55614,55615],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[30,55617,55596],{"class":321},[30,55619,55620],{"class":74},"'开启剑与雪的黑暗传说!'",[30,55622,55602],{"class":321},[30,55624,55625],{"class":74},"'rgba(43,35,26)'",[30,55627,55608],{"class":321},[30,55629,55630,55632,55635,55637,55640,55642,55645],{"class":32,"line":17037},[30,55631,55590],{"class":321},[30,55633,55634],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[30,55636,55596],{"class":321},[30,55638,55639],{"class":74},"'真正的jo厨出现了!'",[30,55641,55602],{"class":321},[30,55643,55644],{"class":74},"'rgba(36,31,33)'",[30,55646,55608],{"class":321},[30,55648,55649,55651,55654,55656,55659,55661,55664],{"class":32,"line":17051},[30,55650,55590],{"class":321},[30,55652,55653],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[30,55655,55596],{"class":321},[30,55657,55658],{"class":74},"'李玉刚:让世界通过b站看到东方大国文化'",[30,55660,55602],{"class":321},[30,55662,55663],{"class":74},"'rgba(139,98,66)'",[30,55665,55608],{"class":321},[30,55667,55668,55670,55673,55675,55678,55680,55683],{"class":32,"line":17063},[30,55669,55590],{"class":321},[30,55671,55672],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[30,55674,55596],{"class":321},[30,55676,55677],{"class":74},"'快来分享你的寒假日常吧'",[30,55679,55602],{"class":321},[30,55681,55682],{"class":74},"'rgba(67,90,92)'",[30,55684,55608],{"class":321},[30,55686,55687,55689,55692,55694,55697,55699,55702],{"class":32,"line":17068},[30,55688,55590],{"class":321},[30,55690,55691],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[30,55693,55596],{"class":321},[30,55695,55696],{"class":74},"'哔哩哔哩小年YEAR'",[30,55698,55602],{"class":321},[30,55700,55701],{"class":74},"'rgba(166,131,143)'",[30,55703,55608],{"class":321},[30,55705,55706,55708,55711,55713,55716,55718,55721],{"class":32,"line":17081},[30,55707,55590],{"class":321},[30,55709,55710],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[30,55712,55596],{"class":321},[30,55714,55715],{"class":74},"'一站式解决你的电脑配置问题'",[30,55717,55602],{"class":321},[30,55719,55720],{"class":74},"'rgba(53,29,25)'",[30,55722,55608],{"class":321},[30,55724,55725,55727,55730,55732,55735,55737,55740],{"class":32,"line":17086},[30,55726,55590],{"class":321},[30,55728,55729],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[30,55731,55596],{"class":321},[30,55733,55734],{"class":74},"'谁不想和小猫咪贴贴呢?'",[30,55736,55602],{"class":321},[30,55738,55739],{"class":74},"'rgba(99,72,114)'",[30,55741,55742],{"class":321}," }\n",[30,55744,55745],{"class":32,"line":17091},[30,55746,53247],{"class":321},[30,55748,55749,55751,55754,55756,55758,55760,55762,55765],{"class":32,"line":17096},[30,55750,11403],{"class":317},[30,55752,55753],{"class":40}," img",[30,55755,13746],{"class":317},[30,55757,54534],{"class":321},[30,55759,54537],{"class":36},[30,55761,322],{"class":321},[30,55763,55764],{"class":74},"'.slider-wrapper img'",[30,55766,328],{"class":321},[30,55768,55769,55771,55773,55775,55777,55779,55781,55784],{"class":32,"line":17109},[30,55770,11403],{"class":317},[30,55772,7007],{"class":40},[30,55774,13746],{"class":317},[30,55776,54534],{"class":321},[30,55778,54537],{"class":36},[30,55780,322],{"class":321},[30,55782,55783],{"class":74},"'.slider-footer p'",[30,55785,328],{"class":321},[30,55787,55788,55790,55793,55795,55797,55799,55801,55804],{"class":32,"line":17114},[30,55789,11403],{"class":317},[30,55791,55792],{"class":40}," color",[30,55794,13746],{"class":317},[30,55796,54534],{"class":321},[30,55798,54537],{"class":36},[30,55800,322],{"class":321},[30,55802,55803],{"class":74},"'.slider-footer'",[30,55805,328],{"class":321},[30,55807,55808,55810,55813,55815,55817,55820,55822,55825],{"class":32,"line":32771},[30,55809,11403],{"class":317},[30,55811,55812],{"class":40}," lis",[30,55814,13746],{"class":317},[30,55816,54534],{"class":321},[30,55818,55819],{"class":36},"querySelectorAll",[30,55821,322],{"class":321},[30,55823,55824],{"class":74},"'.slider-footer ul li'",[30,55826,328],{"class":321},[30,55828,55829,55831,55833,55835],{"class":32,"line":32777},[30,55830,52357],{"class":317},[30,55832,9620],{"class":321},[30,55834,367],{"class":317},[30,55836,55837],{"class":40}," 1\n",[30,55839,55840,55842,55845,55847,55849,55851,55853],{"class":32,"line":32783},[30,55841,52357],{"class":317},[30,55843,55844],{"class":321}," timer ",[30,55846,367],{"class":317},[30,55848,54582],{"class":36},[30,55850,322],{"class":321},[30,55852,54587],{"class":317},[30,55854,54590],{"class":321},[30,55856,55857,55860,55862],{"class":32,"line":32789},[30,55858,55859],{"class":321},"      img.src ",[30,55861,367],{"class":317},[30,55863,55864],{"class":321}," arrImage[i].url\n",[30,55866,55867,55870,55872],{"class":32,"line":32795},[30,55868,55869],{"class":321},"      p.innerHTML ",[30,55871,367],{"class":317},[30,55873,55874],{"class":321}," arrImage[i].title\n",[30,55876,55877,55880,55882],{"class":32,"line":32806},[30,55878,55879],{"class":321},"      color.style.backgroundColor ",[30,55881,367],{"class":317},[30,55883,55884],{"class":321}," arrImage[i].color\n",[30,55886,55887],{"class":32,"line":32812},[30,55888,55889],{"class":379},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[30,55891,55892],{"class":32,"line":32832},[30,55893,55894],{"class":379},"      \u002F\u002F li.classList.add('activate')\n",[30,55896,55897],{"class":32,"line":32838},[30,55898,55899],{"class":379},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[30,55901,55902],{"class":32,"line":32849},[30,55903,55904],{"class":379},"      \u002F\u002F lis[i].classList.remove('activate')\n",[30,55906,55907,55910,55912,55914,55917,55920,55923,55925,55928],{"class":32,"line":32855},[30,55908,55909],{"class":321},"      document.",[30,55911,54537],{"class":36},[30,55913,322],{"class":321},[30,55915,55916],{"class":74},"'.activate'",[30,55918,55919],{"class":321},")?.classList.",[30,55921,55922],{"class":36},"toggle",[30,55924,322],{"class":321},[30,55926,55927],{"class":74},"'activate'",[30,55929,328],{"class":321},[30,55931,55932,55935,55937,55939,55941],{"class":32,"line":32861},[30,55933,55934],{"class":321},"      lis[i].classList.",[30,55936,5516],{"class":36},[30,55938,322],{"class":321},[30,55940,55927],{"class":74},[30,55942,328],{"class":321},[30,55944,55945],{"class":32,"line":32867},[30,55946,2582],{"emptyLinePlaceholder":245},[30,55948,55949,55952,55954,55956,55958,55960,55962,55964,55967],{"class":32,"line":32873},[30,55950,55951],{"class":321},"      i ",[30,55953,367],{"class":317},[30,55955,54621],{"class":321},[30,55957,801],{"class":317},[30,55959,25291],{"class":40},[30,55961,13896],{"class":321},[30,55963,648],{"class":317},[30,55965,55966],{"class":321}," arrImage.",[30,55968,55969],{"class":40},"length\n",[30,55971,55972],{"class":32,"line":32879},[30,55973,2582],{"emptyLinePlaceholder":245},[30,55975,55976,55978,55980],{"class":32,"line":32885},[30,55977,54673],{"class":321},[30,55979,6592],{"class":40},[30,55981,328],{"class":321},[30,55983,55984,55986,55988],{"class":32,"line":32891},[30,55985,52555],{"class":321},[30,55987,51951],{"class":51438},[30,55989,51445],{"class":321},[30,55991,55992,55994,55996],{"class":32,"line":32911},[30,55993,51923],{"class":321},[30,55995,51938],{"class":51438},[30,55997,51445],{"class":321},[30,55999,56000],{"class":32,"line":32917},[30,56001,2582],{"emptyLinePlaceholder":245},[30,56003,56004,56006,56008],{"class":32,"line":32933},[30,56005,51923],{"class":321},[30,56007,50773],{"class":51438},[30,56009,51445],{"class":321},[157,56011,56012],{},[160,56013],{"alt":25,"src":56014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[157,56016,56017],{},"?.就是短路保护,确保输出正常进行",[157,56019,56020],{},"不要忘记取余%,有时候可以用",[157,56022,56023],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[271,56025,56026],{"start":44},[150,56027,56028],{},"法2",[20,56030,56032],{"className":50771,"code":56031,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const sliderData = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    \u002F\u002F 1.获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    let i = 0\n    \u002F\u002F 2.开启定时器\n    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n    setInterval(function () {\n      i++\n      if (i >= sliderData.length) {\n        i = 0\n      }\n      \u002F\u002F 更换图片路径\n      img.src = sliderData[i].url\n      \u002F\u002F 把文字写到p里面\n      p.innerHTML = sliderData[i].title\n      \u002F\u002F 小圆点\n      \u002F\u002F 先删除以前的active\n      \u002F\u002F 只让当前li添加active\n      document.querySelector('.slider-footer .activate').classList.remove('activate')\n      document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`).classList.add('activate')\n\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,56033,56034,56044,56058,56062,56070,56084,56104,56116,56124,56130,56140,56150,56154,56158,56164,56174,56178,56182,56188,56198,56210,56222,56236,56240,56244,56250,56260,56270,56280,56292,56304,56314,56318,56322,56330,56340,56352,56364,56376,56380,56384,56390,56400,56412,56424,56434,56444,56454,56466,56478,56482,56486,56494,56506,56518,56544,56556,56560,56564,56570,56580,56584,56592,56600,56604,56612,56626,56640,56660,56668,56682,56694,56702,56720,56732,56744,56756,56768,56780,56792,56804,56812,56820,56828,56836,56847,56863,56879,56895,56911,56927,56943,56959,56975,56979,56984,57002,57020,57030,57035,57040,57051,57057,57072,57081,57085,57090,57099,57104,57113,57118,57123,57128,57151,57181,57185,57193,57197,57205,57213,57217],{"__ignoreMap":25},[30,56035,56036,56038,56040,56042],{"class":32,"line":33},[30,56037,51435],{"class":321},[30,56039,51439],{"class":51438},[30,56041,51442],{"class":36},[30,56043,51445],{"class":321},[30,56045,56046,56048,56050,56052,56054,56056],{"class":32,"line":44},[30,56047,1230],{"class":321},[30,56049,50773],{"class":51438},[30,56051,51454],{"class":36},[30,56053,367],{"class":321},[30,56055,51459],{"class":74},[30,56057,51445],{"class":321},[30,56059,56060],{"class":32,"line":52},[30,56061,2582],{"emptyLinePlaceholder":245},[30,56063,56064,56066,56068],{"class":32,"line":60},[30,56065,1230],{"class":321},[30,56067,51472],{"class":51438},[30,56069,51445],{"class":321},[30,56071,56072,56074,56076,56078,56080,56082],{"class":32,"line":68},[30,56073,52282],{"class":321},[30,56075,51482],{"class":51438},[30,56077,51485],{"class":36},[30,56079,367],{"class":321},[30,56081,51490],{"class":74},[30,56083,51445],{"class":321},[30,56085,56086,56088,56090,56092,56094,56096,56098,56100,56102],{"class":32,"line":80},[30,56087,52282],{"class":321},[30,56089,51482],{"class":51438},[30,56091,15102],{"class":36},[30,56093,367],{"class":321},[30,56095,51529],{"class":74},[30,56097,51509],{"class":36},[30,56099,367],{"class":321},[30,56101,51536],{"class":74},[30,56103,51445],{"class":321},[30,56105,56106,56108,56110,56112,56114],{"class":32,"line":88},[30,56107,52282],{"class":321},[30,56109,51545],{"class":51438},[30,56111,51548],{"class":321},[30,56113,51545],{"class":51438},[30,56115,51445],{"class":321},[30,56117,56118,56120,56122],{"class":32,"line":96},[30,56119,52282],{"class":321},[30,56121,234],{"class":51438},[30,56123,51445],{"class":321},[30,56125,56126,56128],{"class":32,"line":104},[30,56127,6585],{"class":51438},[30,56129,15754],{"class":321},[30,56131,56132,56134,56136,56138],{"class":32,"line":112},[30,56133,54833],{"class":40},[30,56135,51575],{"class":321},[30,56137,511],{"class":40},[30,56139,1480],{"class":321},[30,56141,56142,56144,56146,56148],{"class":32,"line":123},[30,56143,54844],{"class":40},[30,56145,51575],{"class":321},[30,56147,511],{"class":40},[30,56149,1480],{"class":321},[30,56151,56152],{"class":32,"line":131},[30,56153,2369],{"class":321},[30,56155,56156],{"class":32,"line":142},[30,56157,2582],{"emptyLinePlaceholder":245},[30,56159,56160,56162],{"class":32,"line":1811},[30,56161,54863],{"class":51438},[30,56163,15754],{"class":321},[30,56165,56166,56168,56170,56172],{"class":32,"line":1825},[30,56167,54870],{"class":40},[30,56169,51575],{"class":321},[30,56171,54875],{"class":40},[30,56173,1480],{"class":321},[30,56175,56176],{"class":32,"line":1830},[30,56177,2369],{"class":321},[30,56179,56180],{"class":32,"line":1836},[30,56181,2582],{"emptyLinePlaceholder":245},[30,56183,56184,56186],{"class":32,"line":1857},[30,56185,54890],{"class":36},[30,56187,15754],{"class":321},[30,56189,56190,56192,56194,56196],{"class":32,"line":1862},[30,56191,54897],{"class":40},[30,56193,51575],{"class":321},[30,56195,54902],{"class":40},[30,56197,1480],{"class":321},[30,56199,56200,56202,56204,56206,56208],{"class":32,"line":1876},[30,56201,54909],{"class":40},[30,56203,51575],{"class":321},[30,56205,54914],{"class":40},[30,56207,51630],{"class":317},[30,56209,1480],{"class":321},[30,56211,56212,56214,56216,56218,56220],{"class":32,"line":1881},[30,56213,54923],{"class":40},[30,56215,51575],{"class":321},[30,56217,1725],{"class":40},[30,56219,51630],{"class":317},[30,56221,1480],{"class":321},[30,56223,56224,56226,56228,56230,56232,56234],{"class":32,"line":1910},[30,56225,54844],{"class":40},[30,56227,51575],{"class":321},[30,56229,631],{"class":40},[30,56231,51630],{"class":317},[30,56233,51694],{"class":40},[30,56235,1480],{"class":321},[30,56237,56238],{"class":32,"line":1915},[30,56239,2369],{"class":321},[30,56241,56242],{"class":32,"line":1932},[30,56243,2582],{"emptyLinePlaceholder":245},[30,56245,56246,56248],{"class":32,"line":1937},[30,56247,54958],{"class":36},[30,56249,15754],{"class":321},[30,56251,56252,56254,56256,56258],{"class":32,"line":1942},[30,56253,54897],{"class":40},[30,56255,51575],{"class":321},[30,56257,54969],{"class":40},[30,56259,1480],{"class":321},[30,56261,56262,56264,56266,56268],{"class":32,"line":1947},[30,56263,54976],{"class":40},[30,56265,51575],{"class":321},[30,56267,511],{"class":40},[30,56269,1480],{"class":321},[30,56271,56272,56274,56276,56278],{"class":32,"line":1961},[30,56273,54987],{"class":40},[30,56275,51575],{"class":321},[30,56277,511],{"class":40},[30,56279,1480],{"class":321},[30,56281,56282,56284,56286,56288,56290],{"class":32,"line":1966},[30,56283,54909],{"class":40},[30,56285,51575],{"class":321},[30,56287,631],{"class":40},[30,56289,648],{"class":317},[30,56291,1480],{"class":321},[30,56293,56294,56296,56298,56300,56302],{"class":32,"line":2759},[30,56295,54923],{"class":40},[30,56297,51575],{"class":321},[30,56299,895],{"class":40},[30,56301,648],{"class":317},[30,56303,1480],{"class":321},[30,56305,56306,56308,56310,56312],{"class":32,"line":2773},[30,56307,55022],{"class":40},[30,56309,51575],{"class":321},[30,56311,55027],{"class":40},[30,56313,1480],{"class":321},[30,56315,56316],{"class":32,"line":2781},[30,56317,2369],{"class":321},[30,56319,56320],{"class":32,"line":2786},[30,56321,2582],{"emptyLinePlaceholder":245},[30,56323,56324,56326,56328],{"class":32,"line":2792},[30,56325,54958],{"class":36},[30,56327,7007],{"class":51438},[30,56329,15754],{"class":321},[30,56331,56332,56334,56336,56338],{"class":32,"line":2798},[30,56333,54897],{"class":40},[30,56335,51575],{"class":321},[30,56337,54969],{"class":40},[30,56339,1480],{"class":321},[30,56341,56342,56344,56346,56348,56350],{"class":32,"line":2803},[30,56343,55060],{"class":40},[30,56345,51575],{"class":321},[30,56347,1221],{"class":40},[30,56349,51630],{"class":317},[30,56351,1480],{"class":321},[30,56353,56354,56356,56358,56360,56362],{"class":32,"line":8130},[30,56355,54976],{"class":40},[30,56357,51575],{"class":321},[30,56359,1020],{"class":40},[30,56361,51630],{"class":317},[30,56363,1480],{"class":321},[30,56365,56366,56368,56370,56372,56374],{"class":32,"line":8154},[30,56367,55085],{"class":40},[30,56369,51575],{"class":321},[30,56371,639],{"class":40},[30,56373,51630],{"class":317},[30,56375,1480],{"class":321},[30,56377,56378],{"class":32,"line":8159},[30,56379,2369],{"class":321},[30,56381,56382],{"class":32,"line":8165},[30,56383,2582],{"emptyLinePlaceholder":245},[30,56385,56386,56388],{"class":32,"line":8192},[30,56387,55106],{"class":51438},[30,56389,15754],{"class":321},[30,56391,56392,56394,56396,56398],{"class":32,"line":8197},[30,56393,54897],{"class":40},[30,56395,51575],{"class":321},[30,56397,54969],{"class":40},[30,56399,1480],{"class":321},[30,56401,56402,56404,56406,56408,56410],{"class":32,"line":8203},[30,56403,55085],{"class":40},[30,56405,51575],{"class":321},[30,56407,1101],{"class":40},[30,56409,51630],{"class":317},[30,56411,1480],{"class":321},[30,56413,56414,56416,56418,56420,56422],{"class":32,"line":8215},[30,56415,54976],{"class":40},[30,56417,51575],{"class":321},[30,56419,1020],{"class":40},[30,56421,51630],{"class":317},[30,56423,1480],{"class":321},[30,56425,56426,56428,56430,56432],{"class":32,"line":8227},[30,56427,55147],{"class":40},[30,56429,51575],{"class":321},[30,56431,51615],{"class":40},[30,56433,1480],{"class":321},[30,56435,56436,56438,56440,56442],{"class":32,"line":8239},[30,56437,55158],{"class":40},[30,56439,51575],{"class":321},[30,56441,51806],{"class":40},[30,56443,1480],{"class":321},[30,56445,56446,56448,56450,56452],{"class":32,"line":9898},[30,56447,54897],{"class":40},[30,56449,51575],{"class":321},[30,56451,54969],{"class":40},[30,56453,1480],{"class":321},[30,56455,56456,56458,56460,56462,56464],{"class":32,"line":9923},[30,56457,54909],{"class":40},[30,56459,51575],{"class":321},[30,56461,4174],{"class":40},[30,56463,51630],{"class":317},[30,56465,1480],{"class":321},[30,56467,56468,56470,56472,56474,56476],{"class":32,"line":9946},[30,56469,54923],{"class":40},[30,56471,51575],{"class":321},[30,56473,1020],{"class":40},[30,56475,51630],{"class":317},[30,56477,1480],{"class":321},[30,56479,56480],{"class":32,"line":9970},[30,56481,2369],{"class":321},[30,56483,56484],{"class":32,"line":9975},[30,56485,2582],{"emptyLinePlaceholder":245},[30,56487,56488,56490,56492],{"class":32,"line":9980},[30,56489,55106],{"class":51438},[30,56491,55213],{"class":51438},[30,56493,15754],{"class":321},[30,56495,56496,56498,56500,56502,56504],{"class":32,"line":9985},[30,56497,54909],{"class":40},[30,56499,51575],{"class":321},[30,56501,1020],{"class":40},[30,56503,51630],{"class":317},[30,56505,1480],{"class":321},[30,56507,56508,56510,56512,56514,56516],{"class":32,"line":9994},[30,56509,54923],{"class":40},[30,56511,51575],{"class":321},[30,56513,1020],{"class":40},[30,56515,51630],{"class":317},[30,56517,1480],{"class":321},[30,56519,56520,56522,56524,56526,56528,56530,56532,56534,56536,56538,56540,56542],{"class":32,"line":9999},[30,56521,55022],{"class":40},[30,56523,51575],{"class":321},[30,56525,55248],{"class":40},[30,56527,322],{"class":321},[30,56529,511],{"class":40},[30,56531,12617],{"class":321},[30,56533,511],{"class":40},[30,56535,12617],{"class":321},[30,56537,511],{"class":40},[30,56539,12617],{"class":321},[30,56541,55265],{"class":40},[30,56543,2901],{"class":321},[30,56545,56546,56548,56550,56552,56554],{"class":32,"line":10005},[30,56547,55272],{"class":40},[30,56549,51575],{"class":321},[30,56551,766],{"class":40},[30,56553,51630],{"class":317},[30,56555,1480],{"class":321},[30,56557,56558],{"class":32,"line":10026},[30,56559,2369],{"class":321},[30,56561,56562],{"class":32,"line":10032},[30,56563,2582],{"emptyLinePlaceholder":245},[30,56565,56566,56568],{"class":32,"line":10046},[30,56567,55293],{"class":36},[30,56569,15754],{"class":321},[30,56571,56572,56574,56576,56578],{"class":32,"line":10052},[30,56573,55022],{"class":40},[30,56575,51575],{"class":321},[30,56577,55304],{"class":40},[30,56579,1480],{"class":321},[30,56581,56582],{"class":32,"line":10079},[30,56583,2369],{"class":321},[30,56585,56586,56588,56590],{"class":32,"line":10088},[30,56587,52555],{"class":321},[30,56589,234],{"class":51438},[30,56591,51445],{"class":321},[30,56593,56594,56596,56598],{"class":32,"line":10094},[30,56595,51923],{"class":321},[30,56597,51472],{"class":51438},[30,56599,51445],{"class":321},[30,56601,56602],{"class":32,"line":10102},[30,56603,2582],{"emptyLinePlaceholder":245},[30,56605,56606,56608,56610],{"class":32,"line":10107},[30,56607,1230],{"class":321},[30,56609,51938],{"class":51438},[30,56611,51445],{"class":321},[30,56613,56614,56616,56618,56620,56622,56624],{"class":32,"line":16786},[30,56615,52282],{"class":321},[30,56617,51749],{"class":51438},[30,56619,53624],{"class":36},[30,56621,367],{"class":321},[30,56623,53629],{"class":74},[30,56625,51445],{"class":321},[30,56627,56628,56630,56632,56634,56636,56638],{"class":32,"line":16792},[30,56629,51479],{"class":321},[30,56631,51749],{"class":51438},[30,56633,53624],{"class":36},[30,56635,367],{"class":321},[30,56637,55365],{"class":74},[30,56639,51445],{"class":321},[30,56641,56642,56644,56646,56648,56650,56652,56654,56656,56658],{"class":32,"line":16815},[30,56643,55372],{"class":321},[30,56645,160],{"class":51438},[30,56647,55377],{"class":36},[30,56649,367],{"class":321},[30,56651,55382],{"class":74},[30,56653,55385],{"class":36},[30,56655,367],{"class":321},[30,56657,7834],{"class":74},[30,56659,51445],{"class":321},[30,56661,56662,56664,56666],{"class":32,"line":16821},[30,56663,51914],{"class":321},[30,56665,51749],{"class":51438},[30,56667,51445],{"class":321},[30,56669,56670,56672,56674,56676,56678,56680],{"class":32,"line":16844},[30,56671,51479],{"class":321},[30,56673,51749],{"class":51438},[30,56675,53624],{"class":36},[30,56677,367],{"class":321},[30,56679,55412],{"class":74},[30,56681,51445],{"class":321},[30,56683,56684,56686,56688,56690,56692],{"class":32,"line":16858},[30,56685,55372],{"class":321},[30,56687,157],{"class":51438},[30,56689,55423],{"class":321},[30,56691,157],{"class":51438},[30,56693,51445],{"class":321},[30,56695,56696,56698,56700],{"class":32,"line":16878},[30,56697,55372],{"class":321},[30,56699,147],{"class":51438},[30,56701,51445],{"class":321},[30,56703,56704,56706,56708,56710,56712,56714,56716,56718],{"class":32,"line":16884},[30,56705,55440],{"class":321},[30,56707,150],{"class":51438},[30,56709,53624],{"class":36},[30,56711,367],{"class":321},[30,56713,55449],{"class":74},[30,56715,55452],{"class":321},[30,56717,150],{"class":51438},[30,56719,51445],{"class":321},[30,56721,56722,56724,56726,56728,56730],{"class":32,"line":16895},[30,56723,55440],{"class":321},[30,56725,150],{"class":51438},[30,56727,55452],{"class":321},[30,56729,150],{"class":51438},[30,56731,51445],{"class":321},[30,56733,56734,56736,56738,56740,56742],{"class":32,"line":16918},[30,56735,55440],{"class":321},[30,56737,150],{"class":51438},[30,56739,55452],{"class":321},[30,56741,150],{"class":51438},[30,56743,51445],{"class":321},[30,56745,56746,56748,56750,56752,56754],{"class":32,"line":16940},[30,56747,55440],{"class":321},[30,56749,150],{"class":51438},[30,56751,55452],{"class":321},[30,56753,150],{"class":51438},[30,56755,51445],{"class":321},[30,56757,56758,56760,56762,56764,56766],{"class":32,"line":16945},[30,56759,55440],{"class":321},[30,56761,150],{"class":51438},[30,56763,55452],{"class":321},[30,56765,150],{"class":51438},[30,56767,51445],{"class":321},[30,56769,56770,56772,56774,56776,56778],{"class":32,"line":16951},[30,56771,55440],{"class":321},[30,56773,150],{"class":51438},[30,56775,55452],{"class":321},[30,56777,150],{"class":51438},[30,56779,51445],{"class":321},[30,56781,56782,56784,56786,56788,56790],{"class":32,"line":16965},[30,56783,55440],{"class":321},[30,56785,150],{"class":51438},[30,56787,55452],{"class":321},[30,56789,150],{"class":51438},[30,56791,51445],{"class":321},[30,56793,56794,56796,56798,56800,56802],{"class":32,"line":16978},[30,56795,55440],{"class":321},[30,56797,150],{"class":51438},[30,56799,55452],{"class":321},[30,56801,150],{"class":51438},[30,56803,51445],{"class":321},[30,56805,56806,56808,56810],{"class":32,"line":16983},[30,56807,55545],{"class":321},[30,56809,147],{"class":51438},[30,56811,51445],{"class":321},[30,56813,56814,56816,56818],{"class":32,"line":16997},[30,56815,51914],{"class":321},[30,56817,51749],{"class":51438},[30,56819,51445],{"class":321},[30,56821,56822,56824,56826],{"class":32,"line":17002},[30,56823,52555],{"class":321},[30,56825,51749],{"class":51438},[30,56827,51445],{"class":321},[30,56829,56830,56832,56834],{"class":32,"line":17008},[30,56831,52282],{"class":321},[30,56833,51951],{"class":51438},[30,56835,51445],{"class":321},[30,56837,56838,56840,56843,56845],{"class":32,"line":17013},[30,56839,11403],{"class":317},[30,56841,56842],{"class":40}," sliderData",[30,56844,13746],{"class":317},[30,56846,55585],{"class":321},[30,56848,56849,56851,56853,56855,56857,56859,56861],{"class":32,"line":17027},[30,56850,55590],{"class":321},[30,56852,55593],{"class":74},[30,56854,55596],{"class":321},[30,56856,55599],{"class":74},[30,56858,55602],{"class":321},[30,56860,55605],{"class":74},[30,56862,55608],{"class":321},[30,56864,56865,56867,56869,56871,56873,56875,56877],{"class":32,"line":17032},[30,56866,55590],{"class":321},[30,56868,55615],{"class":74},[30,56870,55596],{"class":321},[30,56872,55620],{"class":74},[30,56874,55602],{"class":321},[30,56876,55625],{"class":74},[30,56878,55608],{"class":321},[30,56880,56881,56883,56885,56887,56889,56891,56893],{"class":32,"line":17037},[30,56882,55590],{"class":321},[30,56884,55634],{"class":74},[30,56886,55596],{"class":321},[30,56888,55639],{"class":74},[30,56890,55602],{"class":321},[30,56892,55644],{"class":74},[30,56894,55608],{"class":321},[30,56896,56897,56899,56901,56903,56905,56907,56909],{"class":32,"line":17051},[30,56898,55590],{"class":321},[30,56900,55653],{"class":74},[30,56902,55596],{"class":321},[30,56904,55658],{"class":74},[30,56906,55602],{"class":321},[30,56908,55663],{"class":74},[30,56910,55608],{"class":321},[30,56912,56913,56915,56917,56919,56921,56923,56925],{"class":32,"line":17063},[30,56914,55590],{"class":321},[30,56916,55672],{"class":74},[30,56918,55596],{"class":321},[30,56920,55677],{"class":74},[30,56922,55602],{"class":321},[30,56924,55682],{"class":74},[30,56926,55608],{"class":321},[30,56928,56929,56931,56933,56935,56937,56939,56941],{"class":32,"line":17068},[30,56930,55590],{"class":321},[30,56932,55691],{"class":74},[30,56934,55596],{"class":321},[30,56936,55696],{"class":74},[30,56938,55602],{"class":321},[30,56940,55701],{"class":74},[30,56942,55608],{"class":321},[30,56944,56945,56947,56949,56951,56953,56955,56957],{"class":32,"line":17081},[30,56946,55590],{"class":321},[30,56948,55710],{"class":74},[30,56950,55596],{"class":321},[30,56952,55715],{"class":74},[30,56954,55602],{"class":321},[30,56956,55720],{"class":74},[30,56958,55608],{"class":321},[30,56960,56961,56963,56965,56967,56969,56971,56973],{"class":32,"line":17086},[30,56962,55590],{"class":321},[30,56964,55729],{"class":74},[30,56966,55596],{"class":321},[30,56968,55734],{"class":74},[30,56970,55602],{"class":321},[30,56972,55739],{"class":74},[30,56974,55742],{"class":321},[30,56976,56977],{"class":32,"line":17091},[30,56978,53247],{"class":321},[30,56980,56981],{"class":32,"line":17096},[30,56982,56983],{"class":379},"    \u002F\u002F 1.获取元素\n",[30,56985,56986,56988,56990,56992,56994,56996,56998,57000],{"class":32,"line":17109},[30,56987,11403],{"class":317},[30,56989,55753],{"class":40},[30,56991,13746],{"class":317},[30,56993,54534],{"class":321},[30,56995,54537],{"class":36},[30,56997,322],{"class":321},[30,56999,55764],{"class":74},[30,57001,328],{"class":321},[30,57003,57004,57006,57008,57010,57012,57014,57016,57018],{"class":32,"line":17114},[30,57005,11403],{"class":317},[30,57007,7007],{"class":40},[30,57009,13746],{"class":317},[30,57011,54534],{"class":321},[30,57013,54537],{"class":36},[30,57015,322],{"class":321},[30,57017,55783],{"class":74},[30,57019,328],{"class":321},[30,57021,57022,57024,57026,57028],{"class":32,"line":32771},[30,57023,52357],{"class":317},[30,57025,9620],{"class":321},[30,57027,367],{"class":317},[30,57029,47471],{"class":40},[30,57031,57032],{"class":32,"line":32777},[30,57033,57034],{"class":379},"    \u002F\u002F 2.开启定时器\n",[30,57036,57037],{"class":32,"line":32783},[30,57038,57039],{"class":379},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[30,57041,57042,57045,57047,57049],{"class":32,"line":32789},[30,57043,57044],{"class":36},"    setInterval",[30,57046,322],{"class":321},[30,57048,54587],{"class":317},[30,57050,54590],{"class":321},[30,57052,57053,57055],{"class":32,"line":32795},[30,57054,54595],{"class":321},[30,57056,2884],{"class":317},[30,57058,57059,57061,57063,57065,57068,57070],{"class":32,"line":32806},[30,57060,54618],{"class":317},[30,57062,54621],{"class":321},[30,57064,1893],{"class":317},[30,57066,57067],{"class":321}," sliderData.",[30,57069,52106],{"class":40},[30,57071,12624],{"class":321},[30,57073,57074,57077,57079],{"class":32,"line":32812},[30,57075,57076],{"class":321},"        i ",[30,57078,367],{"class":317},[30,57080,47471],{"class":40},[30,57082,57083],{"class":32,"line":32832},[30,57084,52536],{"class":321},[30,57086,57087],{"class":32,"line":32838},[30,57088,57089],{"class":379},"      \u002F\u002F 更换图片路径\n",[30,57091,57092,57094,57096],{"class":32,"line":32849},[30,57093,55859],{"class":321},[30,57095,367],{"class":317},[30,57097,57098],{"class":321}," sliderData[i].url\n",[30,57100,57101],{"class":32,"line":32855},[30,57102,57103],{"class":379},"      \u002F\u002F 把文字写到p里面\n",[30,57105,57106,57108,57110],{"class":32,"line":32861},[30,57107,55869],{"class":321},[30,57109,367],{"class":317},[30,57111,57112],{"class":321}," sliderData[i].title\n",[30,57114,57115],{"class":32,"line":32867},[30,57116,57117],{"class":379},"      \u002F\u002F 小圆点\n",[30,57119,57120],{"class":32,"line":32873},[30,57121,57122],{"class":379},"      \u002F\u002F 先删除以前的active\n",[30,57124,57125],{"class":32,"line":32879},[30,57126,57127],{"class":379},"      \u002F\u002F 只让当前li添加active\n",[30,57129,57130,57132,57134,57136,57139,57142,57145,57147,57149],{"class":32,"line":32885},[30,57131,55909],{"class":321},[30,57133,54537],{"class":36},[30,57135,322],{"class":321},[30,57137,57138],{"class":74},"'.slider-footer .activate'",[30,57140,57141],{"class":321},").classList.",[30,57143,57144],{"class":36},"remove",[30,57146,322],{"class":321},[30,57148,55927],{"class":74},[30,57150,328],{"class":321},[30,57152,57153,57155,57157,57159,57162,57164,57166,57168,57171,57173,57175,57177,57179],{"class":32,"line":32891},[30,57154,55909],{"class":321},[30,57156,54537],{"class":36},[30,57158,322],{"class":321},[30,57160,57161],{"class":74},"`.slider-footer ul li:nth-child(${",[30,57163,761],{"class":321},[30,57165,45704],{"class":317},[30,57167,25291],{"class":40},[30,57169,57170],{"class":74},"})`",[30,57172,57141],{"class":321},[30,57174,5516],{"class":36},[30,57176,322],{"class":321},[30,57178,55927],{"class":74},[30,57180,328],{"class":321},[30,57182,57183],{"class":32,"line":32911},[30,57184,2582],{"emptyLinePlaceholder":245},[30,57186,57187,57189,57191],{"class":32,"line":32917},[30,57188,54673],{"class":321},[30,57190,6592],{"class":40},[30,57192,328],{"class":321},[30,57194,57195],{"class":32,"line":32933},[30,57196,2582],{"emptyLinePlaceholder":245},[30,57198,57199,57201,57203],{"class":32,"line":32939},[30,57200,52555],{"class":321},[30,57202,51951],{"class":51438},[30,57204,51445],{"class":321},[30,57206,57207,57209,57211],{"class":32,"line":32953},[30,57208,51923],{"class":321},[30,57210,51938],{"class":51438},[30,57212,51445],{"class":321},[30,57214,57215],{"class":32,"line":32959},[30,57216,2582],{"emptyLinePlaceholder":245},[30,57218,57219,57221,57223],{"class":32,"line":32974},[30,57220,51923],{"class":321},[30,57222,50773],{"class":51438},[30,57224,51445],{"class":321},[287,57226,57228],{"id":57227},"_317-重要知识点","3.1.7 重要知识点",[157,57230,57231,57232],{},"浏览器在渲染文本时， ",[469,57233,57234],{},"没有空格或换行符就没有“断行点”",[157,57236,57237],{},[160,57238],{"alt":25,"src":57239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[157,57241,57242],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[157,57244,57245],{},[160,57246],{"alt":25,"src":57247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[157,57249,57250],{},[160,57251],{"alt":25,"src":57252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[15,57254,57256],{"id":57255},"_32-dom事件基础","3.2 DOM事件基础",[287,57258,57260],{"id":57259},"_321-事件监听","3.2.1 事件监听",[157,57262,57263],{},[160,57264],{"alt":25,"src":57265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[157,57267,57268],{},"事件监听有响应的发生",[157,57270,57271],{},[160,57272],{"alt":25,"src":57273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[157,57275,57276],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[157,57278,57279],{},"对于有名函数,要执行的函数名后边不要加()",[287,57281,57283],{"id":57282},"_322-随机点名案例","3.2.2 随机点名案例",[20,57285,57287],{"className":50771,"code":57286,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    h2 {\n      text-align: center;\n    }\n\n    .box {\n      width: 600px;\n      margin: 50px auto;\n      display: flex;\n      font-size: 25px;\n      line-height: 40px;\n    }\n\n    .qs {\n\n      width: 450px;\n      height: 40px;\n      color: red;\n\n    }\n\n    .btns {\n      text-align: center;\n    }\n\n    .btns button {\n      width: 120px;\n      height: 35px;\n      margin: 0 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>随机点名\u003C\u002Fh2>\n  \u003Cdiv class=\"box\">\n    \u003Cspan>名字是：\u003C\u002Fspan>\n    \u003Cdiv class=\"qs\">这里显示姓名\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"btns\">\n    \u003Cbutton class=\"start\">开始\u003C\u002Fbutton>\n    \u003Cbutton class=\"end\">结束\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003Cscript>\n    \u002F\u002F 数据数组\n    const arr = ['马超', '黄忠', '赵云', '关羽', '张飞']\n    const qs = document.querySelector('.qs')\n    \u002F\u002F 1.业务1.开始按钮模块\n    const start = document.querySelector('.start')\n    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n    let timerId = 0\n    \u002F\u002F 随机号要全局变量\n    let random = 0\n    \u002F\u002F 1.1 添加点击事件\n    start.addEventListener('click', function () {\n      timerId = setInterval(function () {\n        \u002F\u002F 随机数\n        random = parseInt(Math.random() * arr.length)\n        qs.innerHTML = arr[random]\n      }, 35)\n      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n      if (arr.length === 1) {\n        \u002F\u002F start.disabled = true\n        \u002F\u002F end.disabled = true\n        \u002F\u002F 可以合起来写\n        start.disabled = end.disabled = true\n      }\n    })\n    \u002F\u002F 1.2 关闭按钮模块\n    const end = document.querySelector('.end')\n    end.addEventListener('click', function () {\n      clearInterval(timerId)\n      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n      arr.splice(random, 1)\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,57288,57289,57299,57313,57317,57325,57339,57359,57371,57379,57385,57395,57405,57409,57413,57420,57431,57435,57439,57445,57457,57471,57481,57493,57506,57510,57514,57521,57525,57538,57550,57562,57566,57570,57574,57581,57591,57595,57599,57608,57620,57632,57647,57651,57659,57667,57671,57679,57692,57706,57719,57739,57747,57762,57782,57802,57810,57814,57822,57827,57863,57883,57888,57907,57912,57923,57928,57939,57944,57963,57978,57983,58009,58019,58028,58033,58049,58054,58059,58064,58079,58083,58087,58092,58111,58128,58136,58141,58156,58160,58164,58172,58180,58184],{"__ignoreMap":25},[30,57290,57291,57293,57295,57297],{"class":32,"line":33},[30,57292,51435],{"class":321},[30,57294,51439],{"class":51438},[30,57296,51442],{"class":36},[30,57298,51445],{"class":321},[30,57300,57301,57303,57305,57307,57309,57311],{"class":32,"line":44},[30,57302,1230],{"class":321},[30,57304,50773],{"class":51438},[30,57306,51454],{"class":36},[30,57308,367],{"class":321},[30,57310,51459],{"class":74},[30,57312,51445],{"class":321},[30,57314,57315],{"class":32,"line":52},[30,57316,2582],{"emptyLinePlaceholder":245},[30,57318,57319,57321,57323],{"class":32,"line":60},[30,57320,1230],{"class":321},[30,57322,51472],{"class":51438},[30,57324,51445],{"class":321},[30,57326,57327,57329,57331,57333,57335,57337],{"class":32,"line":68},[30,57328,52282],{"class":321},[30,57330,51482],{"class":51438},[30,57332,51485],{"class":36},[30,57334,367],{"class":321},[30,57336,51490],{"class":74},[30,57338,51445],{"class":321},[30,57340,57341,57343,57345,57347,57349,57351,57353,57355,57357],{"class":32,"line":80},[30,57342,52282],{"class":321},[30,57344,51482],{"class":51438},[30,57346,15102],{"class":36},[30,57348,367],{"class":321},[30,57350,51529],{"class":74},[30,57352,51509],{"class":36},[30,57354,367],{"class":321},[30,57356,51536],{"class":74},[30,57358,51445],{"class":321},[30,57360,57361,57363,57365,57367,57369],{"class":32,"line":88},[30,57362,52282],{"class":321},[30,57364,51545],{"class":51438},[30,57366,51548],{"class":321},[30,57368,51545],{"class":51438},[30,57370,51445],{"class":321},[30,57372,57373,57375,57377],{"class":32,"line":96},[30,57374,52282],{"class":321},[30,57376,234],{"class":51438},[30,57378,51445],{"class":321},[30,57380,57381,57383],{"class":32,"line":104},[30,57382,6585],{"class":51438},[30,57384,15754],{"class":321},[30,57386,57387,57389,57391,57393],{"class":32,"line":112},[30,57388,54844],{"class":40},[30,57390,51575],{"class":321},[30,57392,511],{"class":40},[30,57394,1480],{"class":321},[30,57396,57397,57399,57401,57403],{"class":32,"line":123},[30,57398,54833],{"class":40},[30,57400,51575],{"class":321},[30,57402,511],{"class":40},[30,57404,1480],{"class":321},[30,57406,57407],{"class":32,"line":131},[30,57408,2369],{"class":321},[30,57410,57411],{"class":32,"line":142},[30,57412,2582],{"emptyLinePlaceholder":245},[30,57414,57415,57418],{"class":32,"line":1811},[30,57416,57417],{"class":51438},"    h2",[30,57419,15754],{"class":321},[30,57421,57422,57425,57427,57429],{"class":32,"line":1825},[30,57423,57424],{"class":40},"      text-align",[30,57426,51575],{"class":321},[30,57428,51730],{"class":40},[30,57430,1480],{"class":321},[30,57432,57433],{"class":32,"line":1830},[30,57434,2369],{"class":321},[30,57436,57437],{"class":32,"line":1836},[30,57438,2582],{"emptyLinePlaceholder":245},[30,57440,57441,57443],{"class":32,"line":1857},[30,57442,54890],{"class":36},[30,57444,15754],{"class":321},[30,57446,57447,57449,57451,57453,57455],{"class":32,"line":1862},[30,57448,54909],{"class":40},[30,57450,51575],{"class":321},[30,57452,1725],{"class":40},[30,57454,51630],{"class":317},[30,57456,1480],{"class":321},[30,57458,57459,57461,57463,57465,57467,57469],{"class":32,"line":1876},[30,57460,54844],{"class":40},[30,57462,51575],{"class":321},[30,57464,976],{"class":40},[30,57466,51630],{"class":317},[30,57468,51694],{"class":40},[30,57470,1480],{"class":321},[30,57472,57473,57475,57477,57479],{"class":32,"line":1881},[30,57474,55147],{"class":40},[30,57476,51575],{"class":321},[30,57478,51615],{"class":40},[30,57480,1480],{"class":321},[30,57482,57483,57485,57487,57489,57491],{"class":32,"line":1910},[30,57484,55060],{"class":40},[30,57486,51575],{"class":321},[30,57488,1145],{"class":40},[30,57490,51630],{"class":317},[30,57492,1480],{"class":321},[30,57494,57495,57498,57500,57502,57504],{"class":32,"line":1915},[30,57496,57497],{"class":40},"      line-height",[30,57499,51575],{"class":321},[30,57501,721],{"class":40},[30,57503,51630],{"class":317},[30,57505,1480],{"class":321},[30,57507,57508],{"class":32,"line":1932},[30,57509,2369],{"class":321},[30,57511,57512],{"class":32,"line":1937},[30,57513,2582],{"emptyLinePlaceholder":245},[30,57515,57516,57519],{"class":32,"line":1942},[30,57517,57518],{"class":36},"    .qs",[30,57520,15754],{"class":321},[30,57522,57523],{"class":32,"line":1947},[30,57524,2582],{"emptyLinePlaceholder":245},[30,57526,57527,57529,57531,57534,57536],{"class":32,"line":1961},[30,57528,54909],{"class":40},[30,57530,51575],{"class":321},[30,57532,57533],{"class":40},"450",[30,57535,51630],{"class":317},[30,57537,1480],{"class":321},[30,57539,57540,57542,57544,57546,57548],{"class":32,"line":1966},[30,57541,54923],{"class":40},[30,57543,51575],{"class":321},[30,57545,721],{"class":40},[30,57547,51630],{"class":317},[30,57549,1480],{"class":321},[30,57551,57552,57555,57557,57560],{"class":32,"line":2759},[30,57553,57554],{"class":40},"      color",[30,57556,51575],{"class":321},[30,57558,57559],{"class":40},"red",[30,57561,1480],{"class":321},[30,57563,57564],{"class":32,"line":2773},[30,57565,2582],{"emptyLinePlaceholder":245},[30,57567,57568],{"class":32,"line":2781},[30,57569,2369],{"class":321},[30,57571,57572],{"class":32,"line":2786},[30,57573,2582],{"emptyLinePlaceholder":245},[30,57575,57576,57579],{"class":32,"line":2792},[30,57577,57578],{"class":36},"    .btns",[30,57580,15754],{"class":321},[30,57582,57583,57585,57587,57589],{"class":32,"line":2798},[30,57584,57424],{"class":40},[30,57586,51575],{"class":321},[30,57588,51730],{"class":40},[30,57590,1480],{"class":321},[30,57592,57593],{"class":32,"line":2803},[30,57594,2369],{"class":321},[30,57596,57597],{"class":32,"line":8130},[30,57598,2582],{"emptyLinePlaceholder":245},[30,57600,57601,57603,57606],{"class":32,"line":8154},[30,57602,57578],{"class":36},[30,57604,57605],{"class":51438}," button",[30,57607,15754],{"class":321},[30,57609,57610,57612,57614,57616,57618],{"class":32,"line":8159},[30,57611,54909],{"class":40},[30,57613,51575],{"class":321},[30,57615,1137],{"class":40},[30,57617,51630],{"class":317},[30,57619,1480],{"class":321},[30,57621,57622,57624,57626,57628,57630],{"class":32,"line":8165},[30,57623,54923],{"class":40},[30,57625,51575],{"class":321},[30,57627,593],{"class":40},[30,57629,51630],{"class":317},[30,57631,1480],{"class":321},[30,57633,57634,57636,57638,57640,57643,57645],{"class":32,"line":8192},[30,57635,54844],{"class":40},[30,57637,51575],{"class":321},[30,57639,511],{"class":40},[30,57641,57642],{"class":40}," 50",[30,57644,51630],{"class":317},[30,57646,1480],{"class":321},[30,57648,57649],{"class":32,"line":8197},[30,57650,2369],{"class":321},[30,57652,57653,57655,57657],{"class":32,"line":8203},[30,57654,52555],{"class":321},[30,57656,234],{"class":51438},[30,57658,51445],{"class":321},[30,57660,57661,57663,57665],{"class":32,"line":8215},[30,57662,51923],{"class":321},[30,57664,51472],{"class":51438},[30,57666,51445],{"class":321},[30,57668,57669],{"class":32,"line":8227},[30,57670,2582],{"emptyLinePlaceholder":245},[30,57672,57673,57675,57677],{"class":32,"line":8239},[30,57674,1230],{"class":321},[30,57676,51938],{"class":51438},[30,57678,51445],{"class":321},[30,57680,57681,57683,57685,57688,57690],{"class":32,"line":9898},[30,57682,52282],{"class":321},[30,57684,15],{"class":51438},[30,57686,57687],{"class":321},">随机点名\u003C\u002F",[30,57689,15],{"class":51438},[30,57691,51445],{"class":321},[30,57693,57694,57696,57698,57700,57702,57704],{"class":32,"line":9923},[30,57695,52282],{"class":321},[30,57697,51749],{"class":51438},[30,57699,53624],{"class":36},[30,57701,367],{"class":321},[30,57703,53629],{"class":74},[30,57705,51445],{"class":321},[30,57707,57708,57710,57712,57715,57717],{"class":32,"line":9946},[30,57709,51479],{"class":321},[30,57711,30],{"class":51438},[30,57713,57714],{"class":321},">名字是：\u003C\u002F",[30,57716,30],{"class":51438},[30,57718,51445],{"class":321},[30,57720,57721,57723,57725,57727,57729,57732,57735,57737],{"class":32,"line":9970},[30,57722,51479],{"class":321},[30,57724,51749],{"class":51438},[30,57726,53624],{"class":36},[30,57728,367],{"class":321},[30,57730,57731],{"class":74},"\"qs\"",[30,57733,57734],{"class":321},">这里显示姓名\u003C\u002F",[30,57736,51749],{"class":51438},[30,57738,51445],{"class":321},[30,57740,57741,57743,57745],{"class":32,"line":9975},[30,57742,52555],{"class":321},[30,57744,51749],{"class":51438},[30,57746,51445],{"class":321},[30,57748,57749,57751,57753,57755,57757,57760],{"class":32,"line":9980},[30,57750,52282],{"class":321},[30,57752,51749],{"class":51438},[30,57754,53624],{"class":36},[30,57756,367],{"class":321},[30,57758,57759],{"class":74},"\"btns\"",[30,57761,51445],{"class":321},[30,57763,57764,57766,57768,57770,57772,57775,57778,57780],{"class":32,"line":9985},[30,57765,51479],{"class":321},[30,57767,54025],{"class":51438},[30,57769,53624],{"class":36},[30,57771,367],{"class":321},[30,57773,57774],{"class":74},"\"start\"",[30,57776,57777],{"class":321},">开始\u003C\u002F",[30,57779,54025],{"class":51438},[30,57781,51445],{"class":321},[30,57783,57784,57786,57788,57790,57792,57795,57798,57800],{"class":32,"line":9994},[30,57785,51479],{"class":321},[30,57787,54025],{"class":51438},[30,57789,53624],{"class":36},[30,57791,367],{"class":321},[30,57793,57794],{"class":74},"\"end\"",[30,57796,57797],{"class":321},">结束\u003C\u002F",[30,57799,54025],{"class":51438},[30,57801,51445],{"class":321},[30,57803,57804,57806,57808],{"class":32,"line":9999},[30,57805,52555],{"class":321},[30,57807,51749],{"class":51438},[30,57809,51445],{"class":321},[30,57811,57812],{"class":32,"line":10005},[30,57813,2582],{"emptyLinePlaceholder":245},[30,57815,57816,57818,57820],{"class":32,"line":10026},[30,57817,52282],{"class":321},[30,57819,51951],{"class":51438},[30,57821,51445],{"class":321},[30,57823,57824],{"class":32,"line":10032},[30,57825,57826],{"class":379},"    \u002F\u002F 数据数组\n",[30,57828,57829,57831,57834,57836,57838,57841,57843,57846,57848,57851,57853,57856,57858,57861],{"class":32,"line":10046},[30,57830,11403],{"class":317},[30,57832,57833],{"class":40}," arr",[30,57835,13746],{"class":317},[30,57837,52364],{"class":321},[30,57839,57840],{"class":74},"'马超'",[30,57842,12617],{"class":321},[30,57844,57845],{"class":74},"'黄忠'",[30,57847,12617],{"class":321},[30,57849,57850],{"class":74},"'赵云'",[30,57852,12617],{"class":321},[30,57854,57855],{"class":74},"'关羽'",[30,57857,12617],{"class":321},[30,57859,57860],{"class":74},"'张飞'",[30,57862,33384],{"class":321},[30,57864,57865,57867,57870,57872,57874,57876,57878,57881],{"class":32,"line":10052},[30,57866,11403],{"class":317},[30,57868,57869],{"class":40}," qs",[30,57871,13746],{"class":317},[30,57873,54534],{"class":321},[30,57875,54537],{"class":36},[30,57877,322],{"class":321},[30,57879,57880],{"class":74},"'.qs'",[30,57882,328],{"class":321},[30,57884,57885],{"class":32,"line":10079},[30,57886,57887],{"class":379},"    \u002F\u002F 1.业务1.开始按钮模块\n",[30,57889,57890,57892,57894,57896,57898,57900,57902,57905],{"class":32,"line":10088},[30,57891,11403],{"class":317},[30,57893,4366],{"class":40},[30,57895,13746],{"class":317},[30,57897,54534],{"class":321},[30,57899,54537],{"class":36},[30,57901,322],{"class":321},[30,57903,57904],{"class":74},"'.start'",[30,57906,328],{"class":321},[30,57908,57909],{"class":32,"line":10094},[30,57910,57911],{"class":379},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[30,57913,57914,57916,57919,57921],{"class":32,"line":10102},[30,57915,52357],{"class":317},[30,57917,57918],{"class":321}," timerId ",[30,57920,367],{"class":317},[30,57922,47471],{"class":40},[30,57924,57925],{"class":32,"line":10107},[30,57926,57927],{"class":379},"    \u002F\u002F 随机号要全局变量\n",[30,57929,57930,57932,57935,57937],{"class":32,"line":16786},[30,57931,52357],{"class":317},[30,57933,57934],{"class":321}," random ",[30,57936,367],{"class":317},[30,57938,47471],{"class":40},[30,57940,57941],{"class":32,"line":16792},[30,57942,57943],{"class":379},"    \u002F\u002F 1.1 添加点击事件\n",[30,57945,57946,57949,57952,57954,57957,57959,57961],{"class":32,"line":16815},[30,57947,57948],{"class":321},"    start.",[30,57950,57951],{"class":36},"addEventListener",[30,57953,322],{"class":321},[30,57955,57956],{"class":74},"'click'",[30,57958,12617],{"class":321},[30,57960,54587],{"class":317},[30,57962,54590],{"class":321},[30,57964,57965,57968,57970,57972,57974,57976],{"class":32,"line":16821},[30,57966,57967],{"class":321},"      timerId ",[30,57969,367],{"class":317},[30,57971,54582],{"class":36},[30,57973,322],{"class":321},[30,57975,54587],{"class":317},[30,57977,54590],{"class":321},[30,57979,57980],{"class":32,"line":16844},[30,57981,57982],{"class":379},"        \u002F\u002F 随机数\n",[30,57984,57985,57988,57990,57993,57996,57999,58001,58003,58005,58007],{"class":32,"line":16858},[30,57986,57987],{"class":321},"        random ",[30,57989,367],{"class":317},[30,57991,57992],{"class":36}," parseInt",[30,57994,57995],{"class":321},"(Math.",[30,57997,57998],{"class":36},"random",[30,58000,13232],{"class":321},[30,58002,775],{"class":317},[30,58004,52103],{"class":321},[30,58006,52106],{"class":40},[30,58008,328],{"class":321},[30,58010,58011,58014,58016],{"class":32,"line":16878},[30,58012,58013],{"class":321},"        qs.innerHTML ",[30,58015,367],{"class":317},[30,58017,58018],{"class":321}," arr[random]\n",[30,58020,58021,58024,58026],{"class":32,"line":16884},[30,58022,58023],{"class":321},"      }, ",[30,58025,593],{"class":40},[30,58027,328],{"class":321},[30,58029,58030],{"class":32,"line":16895},[30,58031,58032],{"class":379},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[30,58034,58035,58037,58040,58042,58045,58047],{"class":32,"line":16918},[30,58036,54618],{"class":317},[30,58038,58039],{"class":321}," (arr.",[30,58041,52106],{"class":40},[30,58043,58044],{"class":317}," ===",[30,58046,25291],{"class":40},[30,58048,12624],{"class":321},[30,58050,58051],{"class":32,"line":16940},[30,58052,58053],{"class":379},"        \u002F\u002F start.disabled = true\n",[30,58055,58056],{"class":32,"line":16945},[30,58057,58058],{"class":379},"        \u002F\u002F end.disabled = true\n",[30,58060,58061],{"class":32,"line":16951},[30,58062,58063],{"class":379},"        \u002F\u002F 可以合起来写\n",[30,58065,58066,58069,58071,58074,58076],{"class":32,"line":16965},[30,58067,58068],{"class":321},"        start.disabled ",[30,58070,367],{"class":317},[30,58072,58073],{"class":321}," end.disabled ",[30,58075,367],{"class":317},[30,58077,58078],{"class":40}," true\n",[30,58080,58081],{"class":32,"line":16978},[30,58082,52536],{"class":321},[30,58084,58085],{"class":32,"line":16983},[30,58086,33599],{"class":321},[30,58088,58089],{"class":32,"line":16997},[30,58090,58091],{"class":379},"    \u002F\u002F 1.2 关闭按钮模块\n",[30,58093,58094,58096,58098,58100,58102,58104,58106,58109],{"class":32,"line":17002},[30,58095,11403],{"class":317},[30,58097,4382],{"class":40},[30,58099,13746],{"class":317},[30,58101,54534],{"class":321},[30,58103,54537],{"class":36},[30,58105,322],{"class":321},[30,58107,58108],{"class":74},"'.end'",[30,58110,328],{"class":321},[30,58112,58113,58116,58118,58120,58122,58124,58126],{"class":32,"line":17008},[30,58114,58115],{"class":321},"    end.",[30,58117,57951],{"class":36},[30,58119,322],{"class":321},[30,58121,57956],{"class":74},[30,58123,12617],{"class":321},[30,58125,54587],{"class":317},[30,58127,54590],{"class":321},[30,58129,58130,58133],{"class":32,"line":17013},[30,58131,58132],{"class":36},"      clearInterval",[30,58134,58135],{"class":321},"(timerId)\n",[30,58137,58138],{"class":32,"line":17027},[30,58139,58140],{"class":379},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[30,58142,58143,58146,58149,58152,58154],{"class":32,"line":17032},[30,58144,58145],{"class":321},"      arr.",[30,58147,58148],{"class":36},"splice",[30,58150,58151],{"class":321},"(random, ",[30,58153,537],{"class":40},[30,58155,328],{"class":321},[30,58157,58158],{"class":32,"line":17037},[30,58159,33599],{"class":321},[30,58161,58162],{"class":32,"line":17051},[30,58163,2582],{"emptyLinePlaceholder":245},[30,58165,58166,58168,58170],{"class":32,"line":17063},[30,58167,52555],{"class":321},[30,58169,51951],{"class":51438},[30,58171,51445],{"class":321},[30,58173,58174,58176,58178],{"class":32,"line":17068},[30,58175,51923],{"class":321},[30,58177,51938],{"class":51438},[30,58179,51445],{"class":321},[30,58181,58182],{"class":32,"line":17081},[30,58183,2582],{"emptyLinePlaceholder":245},[30,58185,58186,58188,58190],{"class":32,"line":17086},[30,58187,51923],{"class":321},[30,58189,50773],{"class":51438},[30,58191,51445],{"class":321},[157,58193,58194],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[287,58196,58198],{"id":58197},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[20,58200,58202],{"className":50771,"code":58201,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,58203,58204,58214,58228,58232,58240,58254,58274,58286,58294,58298,58306,58318,58326,58345,58362,58378,58388,58392,58400,58408,58412],{"__ignoreMap":25},[30,58205,58206,58208,58210,58212],{"class":32,"line":33},[30,58207,51435],{"class":321},[30,58209,51439],{"class":51438},[30,58211,51442],{"class":36},[30,58213,51445],{"class":321},[30,58215,58216,58218,58220,58222,58224,58226],{"class":32,"line":44},[30,58217,1230],{"class":321},[30,58219,50773],{"class":51438},[30,58221,51454],{"class":36},[30,58223,367],{"class":321},[30,58225,51459],{"class":74},[30,58227,51445],{"class":321},[30,58229,58230],{"class":32,"line":52},[30,58231,2582],{"emptyLinePlaceholder":245},[30,58233,58234,58236,58238],{"class":32,"line":60},[30,58235,1230],{"class":321},[30,58237,51472],{"class":51438},[30,58239,51445],{"class":321},[30,58241,58242,58244,58246,58248,58250,58252],{"class":32,"line":68},[30,58243,52282],{"class":321},[30,58245,51482],{"class":51438},[30,58247,51485],{"class":36},[30,58249,367],{"class":321},[30,58251,51490],{"class":74},[30,58253,51445],{"class":321},[30,58255,58256,58258,58260,58262,58264,58266,58268,58270,58272],{"class":32,"line":80},[30,58257,52282],{"class":321},[30,58259,51482],{"class":51438},[30,58261,15102],{"class":36},[30,58263,367],{"class":321},[30,58265,51529],{"class":74},[30,58267,51509],{"class":36},[30,58269,367],{"class":321},[30,58271,51536],{"class":74},[30,58273,51445],{"class":321},[30,58275,58276,58278,58280,58282,58284],{"class":32,"line":88},[30,58277,52282],{"class":321},[30,58279,51545],{"class":51438},[30,58281,51548],{"class":321},[30,58283,51545],{"class":51438},[30,58285,51445],{"class":321},[30,58287,58288,58290,58292],{"class":32,"line":96},[30,58289,51923],{"class":321},[30,58291,51472],{"class":51438},[30,58293,51445],{"class":321},[30,58295,58296],{"class":32,"line":104},[30,58297,2582],{"emptyLinePlaceholder":245},[30,58299,58300,58302,58304],{"class":32,"line":112},[30,58301,1230],{"class":321},[30,58303,51938],{"class":51438},[30,58305,51445],{"class":321},[30,58307,58308,58310,58312,58314,58316],{"class":32,"line":123},[30,58309,52282],{"class":321},[30,58311,54025],{"class":51438},[30,58313,54031],{"class":321},[30,58315,54025],{"class":51438},[30,58317,51445],{"class":321},[30,58319,58320,58322,58324],{"class":32,"line":131},[30,58321,52282],{"class":321},[30,58323,51951],{"class":51438},[30,58325,51445],{"class":321},[30,58327,58328,58330,58332,58334,58336,58338,58340,58343],{"class":32,"line":142},[30,58329,11403],{"class":317},[30,58331,54529],{"class":40},[30,58333,13746],{"class":317},[30,58335,54534],{"class":321},[30,58337,54537],{"class":36},[30,58339,322],{"class":321},[30,58341,58342],{"class":74},"'button'",[30,58344,328],{"class":321},[30,58346,58347,58350,58352,58354,58356,58358,58360],{"class":32,"line":1811},[30,58348,58349],{"class":321},"    btn.",[30,58351,57951],{"class":36},[30,58353,322],{"class":321},[30,58355,57956],{"class":74},[30,58357,12617],{"class":321},[30,58359,54587],{"class":317},[30,58361,54590],{"class":321},[30,58363,58364,58367,58369,58371,58374,58376],{"class":32,"line":1825},[30,58365,58366],{"class":317},"      const",[30,58368,2422],{"class":40},[30,58370,13746],{"class":317},[30,58372,58373],{"class":321}," Math.",[30,58375,57998],{"class":36},[30,58377,2158],{"class":321},[30,58379,58380,58383,58386],{"class":32,"line":1830},[30,58381,58382],{"class":321},"      console.",[30,58384,58385],{"class":36},"log",[30,58387,335],{"class":321},[30,58389,58390],{"class":32,"line":1836},[30,58391,33599],{"class":321},[30,58393,58394,58396,58398],{"class":32,"line":1857},[30,58395,52555],{"class":321},[30,58397,51951],{"class":51438},[30,58399,51445],{"class":321},[30,58401,58402,58404,58406],{"class":32,"line":1862},[30,58403,51923],{"class":321},[30,58405,51938],{"class":51438},[30,58407,51445],{"class":321},[30,58409,58410],{"class":32,"line":1876},[30,58411,2582],{"emptyLinePlaceholder":245},[30,58413,58414,58416,58418],{"class":32,"line":1881},[30,58415,51923],{"class":321},[30,58417,50773],{"class":51438},[30,58419,51445],{"class":321},[157,58421,58422],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[157,58424,58425],{},"常量不可以重新赋值",[157,58427,58428],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[20,58430,58432],{"className":50771,"code":58431,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,58433,58434,58444,58458,58462,58470,58484,58504,58516,58524,58528,58536,58548,58556,58567,58585,58601,58615,58623,58627,58635,58643,58647],{"__ignoreMap":25},[30,58435,58436,58438,58440,58442],{"class":32,"line":33},[30,58437,51435],{"class":321},[30,58439,51439],{"class":51438},[30,58441,51442],{"class":36},[30,58443,51445],{"class":321},[30,58445,58446,58448,58450,58452,58454,58456],{"class":32,"line":44},[30,58447,1230],{"class":321},[30,58449,50773],{"class":51438},[30,58451,51454],{"class":36},[30,58453,367],{"class":321},[30,58455,51459],{"class":74},[30,58457,51445],{"class":321},[30,58459,58460],{"class":32,"line":52},[30,58461,2582],{"emptyLinePlaceholder":245},[30,58463,58464,58466,58468],{"class":32,"line":60},[30,58465,1230],{"class":321},[30,58467,51472],{"class":51438},[30,58469,51445],{"class":321},[30,58471,58472,58474,58476,58478,58480,58482],{"class":32,"line":68},[30,58473,52282],{"class":321},[30,58475,51482],{"class":51438},[30,58477,51485],{"class":36},[30,58479,367],{"class":321},[30,58481,51490],{"class":74},[30,58483,51445],{"class":321},[30,58485,58486,58488,58490,58492,58494,58496,58498,58500,58502],{"class":32,"line":80},[30,58487,52282],{"class":321},[30,58489,51482],{"class":51438},[30,58491,15102],{"class":36},[30,58493,367],{"class":321},[30,58495,51529],{"class":74},[30,58497,51509],{"class":36},[30,58499,367],{"class":321},[30,58501,51536],{"class":74},[30,58503,51445],{"class":321},[30,58505,58506,58508,58510,58512,58514],{"class":32,"line":88},[30,58507,52282],{"class":321},[30,58509,51545],{"class":51438},[30,58511,51548],{"class":321},[30,58513,51545],{"class":51438},[30,58515,51445],{"class":321},[30,58517,58518,58520,58522],{"class":32,"line":96},[30,58519,51923],{"class":321},[30,58521,51472],{"class":51438},[30,58523,51445],{"class":321},[30,58525,58526],{"class":32,"line":104},[30,58527,2582],{"emptyLinePlaceholder":245},[30,58529,58530,58532,58534],{"class":32,"line":112},[30,58531,1230],{"class":321},[30,58533,51938],{"class":51438},[30,58535,51445],{"class":321},[30,58537,58538,58540,58542,58544,58546],{"class":32,"line":123},[30,58539,52282],{"class":321},[30,58541,54025],{"class":51438},[30,58543,54031],{"class":321},[30,58545,54025],{"class":51438},[30,58547,51445],{"class":321},[30,58549,58550,58552,58554],{"class":32,"line":131},[30,58551,52282],{"class":321},[30,58553,51951],{"class":51438},[30,58555,51445],{"class":321},[30,58557,58558,58560,58562,58564],{"class":32,"line":142},[30,58559,11403],{"class":317},[30,58561,2422],{"class":40},[30,58563,13746],{"class":317},[30,58565,58566],{"class":40}," 10\n",[30,58568,58569,58571,58573,58575,58577,58579,58581,58583],{"class":32,"line":1811},[30,58570,11403],{"class":317},[30,58572,54529],{"class":40},[30,58574,13746],{"class":317},[30,58576,54534],{"class":321},[30,58578,54537],{"class":36},[30,58580,322],{"class":321},[30,58582,58342],{"class":74},[30,58584,328],{"class":321},[30,58586,58587,58589,58591,58593,58595,58597,58599],{"class":32,"line":1825},[30,58588,58349],{"class":321},[30,58590,57951],{"class":36},[30,58592,322],{"class":321},[30,58594,57956],{"class":74},[30,58596,12617],{"class":321},[30,58598,54587],{"class":317},[30,58600,54590],{"class":321},[30,58602,58603,58605,58607,58609,58611,58613],{"class":32,"line":1830},[30,58604,58366],{"class":317},[30,58606,2422],{"class":40},[30,58608,13746],{"class":317},[30,58610,58373],{"class":321},[30,58612,57998],{"class":36},[30,58614,2158],{"class":321},[30,58616,58617,58619,58621],{"class":32,"line":1836},[30,58618,58382],{"class":321},[30,58620,58385],{"class":36},[30,58622,335],{"class":321},[30,58624,58625],{"class":32,"line":1857},[30,58626,33599],{"class":321},[30,58628,58629,58631,58633],{"class":32,"line":1862},[30,58630,52555],{"class":321},[30,58632,51951],{"class":51438},[30,58634,51445],{"class":321},[30,58636,58637,58639,58641],{"class":32,"line":1876},[30,58638,51923],{"class":321},[30,58640,51938],{"class":51438},[30,58642,51445],{"class":321},[30,58644,58645],{"class":32,"line":1881},[30,58646,2582],{"emptyLinePlaceholder":245},[30,58648,58649,58651,58653],{"class":32,"line":1910},[30,58650,51923],{"class":321},[30,58652,50773],{"class":51438},[30,58654,51445],{"class":321},[157,58656,58657],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[20,58659,58661],{"className":50771,"code":58660,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,58662,58663,58673,58687,58691,58699,58713,58733,58745,58753,58757,58765,58777,58785,58795,58813,58829,58842,58850,58854,58862,58870,58874],{"__ignoreMap":25},[30,58664,58665,58667,58669,58671],{"class":32,"line":33},[30,58666,51435],{"class":321},[30,58668,51439],{"class":51438},[30,58670,51442],{"class":36},[30,58672,51445],{"class":321},[30,58674,58675,58677,58679,58681,58683,58685],{"class":32,"line":44},[30,58676,1230],{"class":321},[30,58678,50773],{"class":51438},[30,58680,51454],{"class":36},[30,58682,367],{"class":321},[30,58684,51459],{"class":74},[30,58686,51445],{"class":321},[30,58688,58689],{"class":32,"line":52},[30,58690,2582],{"emptyLinePlaceholder":245},[30,58692,58693,58695,58697],{"class":32,"line":60},[30,58694,1230],{"class":321},[30,58696,51472],{"class":51438},[30,58698,51445],{"class":321},[30,58700,58701,58703,58705,58707,58709,58711],{"class":32,"line":68},[30,58702,52282],{"class":321},[30,58704,51482],{"class":51438},[30,58706,51485],{"class":36},[30,58708,367],{"class":321},[30,58710,51490],{"class":74},[30,58712,51445],{"class":321},[30,58714,58715,58717,58719,58721,58723,58725,58727,58729,58731],{"class":32,"line":80},[30,58716,52282],{"class":321},[30,58718,51482],{"class":51438},[30,58720,15102],{"class":36},[30,58722,367],{"class":321},[30,58724,51529],{"class":74},[30,58726,51509],{"class":36},[30,58728,367],{"class":321},[30,58730,51536],{"class":74},[30,58732,51445],{"class":321},[30,58734,58735,58737,58739,58741,58743],{"class":32,"line":88},[30,58736,52282],{"class":321},[30,58738,51545],{"class":51438},[30,58740,51548],{"class":321},[30,58742,51545],{"class":51438},[30,58744,51445],{"class":321},[30,58746,58747,58749,58751],{"class":32,"line":96},[30,58748,51923],{"class":321},[30,58750,51472],{"class":51438},[30,58752,51445],{"class":321},[30,58754,58755],{"class":32,"line":104},[30,58756,2582],{"emptyLinePlaceholder":245},[30,58758,58759,58761,58763],{"class":32,"line":112},[30,58760,1230],{"class":321},[30,58762,51938],{"class":51438},[30,58764,51445],{"class":321},[30,58766,58767,58769,58771,58773,58775],{"class":32,"line":123},[30,58768,52282],{"class":321},[30,58770,54025],{"class":51438},[30,58772,54031],{"class":321},[30,58774,54025],{"class":51438},[30,58776,51445],{"class":321},[30,58778,58779,58781,58783],{"class":32,"line":131},[30,58780,52282],{"class":321},[30,58782,51951],{"class":51438},[30,58784,51445],{"class":321},[30,58786,58787,58789,58791,58793],{"class":32,"line":142},[30,58788,11403],{"class":317},[30,58790,2422],{"class":40},[30,58792,13746],{"class":317},[30,58794,58566],{"class":40},[30,58796,58797,58799,58801,58803,58805,58807,58809,58811],{"class":32,"line":1811},[30,58798,11403],{"class":317},[30,58800,54529],{"class":40},[30,58802,13746],{"class":317},[30,58804,54534],{"class":321},[30,58806,54537],{"class":36},[30,58808,322],{"class":321},[30,58810,58342],{"class":74},[30,58812,328],{"class":321},[30,58814,58815,58817,58819,58821,58823,58825,58827],{"class":32,"line":1825},[30,58816,58349],{"class":321},[30,58818,57951],{"class":36},[30,58820,322],{"class":321},[30,58822,57956],{"class":74},[30,58824,12617],{"class":321},[30,58826,54587],{"class":317},[30,58828,54590],{"class":321},[30,58830,58831,58834,58836,58838,58840],{"class":32,"line":1830},[30,58832,58833],{"class":321},"      num ",[30,58835,367],{"class":317},[30,58837,58373],{"class":321},[30,58839,57998],{"class":36},[30,58841,2158],{"class":321},[30,58843,58844,58846,58848],{"class":32,"line":1836},[30,58845,58382],{"class":321},[30,58847,58385],{"class":36},[30,58849,335],{"class":321},[30,58851,58852],{"class":32,"line":1857},[30,58853,33599],{"class":321},[30,58855,58856,58858,58860],{"class":32,"line":1862},[30,58857,52555],{"class":321},[30,58859,51951],{"class":51438},[30,58861,51445],{"class":321},[30,58863,58864,58866,58868],{"class":32,"line":1876},[30,58865,51923],{"class":321},[30,58867,51938],{"class":51438},[30,58869,51445],{"class":321},[30,58871,58872],{"class":32,"line":1881},[30,58873,2582],{"emptyLinePlaceholder":245},[30,58875,58876,58878,58880],{"class":32,"line":1910},[30,58877,51923],{"class":321},[30,58879,50773],{"class":51438},[30,58881,51445],{"class":321},[157,58883,58884],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[287,58886,58888],{"id":58887},"_324-事件监听版本","3.2.4 事件监听版本",[157,58890,58891],{},[160,58892],{"alt":25,"src":58893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[157,58895,58896],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[157,58898,58899],{},"这种方式会覆盖前边的事件监听:",[20,58901,58903],{"className":50771,"code":58902,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.onclick = function () {\n      alert(11)\n    }\n    btn.onclick = function () {\n      alert(22)\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,58904,58905,58915,58929,58933,58941,58955,58975,58987,58995,58999,59007,59019,59027,59045,59059,59070,59074,59086,59096,59100,59108,59116,59120],{"__ignoreMap":25},[30,58906,58907,58909,58911,58913],{"class":32,"line":33},[30,58908,51435],{"class":321},[30,58910,51439],{"class":51438},[30,58912,51442],{"class":36},[30,58914,51445],{"class":321},[30,58916,58917,58919,58921,58923,58925,58927],{"class":32,"line":44},[30,58918,1230],{"class":321},[30,58920,50773],{"class":51438},[30,58922,51454],{"class":36},[30,58924,367],{"class":321},[30,58926,51459],{"class":74},[30,58928,51445],{"class":321},[30,58930,58931],{"class":32,"line":52},[30,58932,2582],{"emptyLinePlaceholder":245},[30,58934,58935,58937,58939],{"class":32,"line":60},[30,58936,1230],{"class":321},[30,58938,51472],{"class":51438},[30,58940,51445],{"class":321},[30,58942,58943,58945,58947,58949,58951,58953],{"class":32,"line":68},[30,58944,52282],{"class":321},[30,58946,51482],{"class":51438},[30,58948,51485],{"class":36},[30,58950,367],{"class":321},[30,58952,51490],{"class":74},[30,58954,51445],{"class":321},[30,58956,58957,58959,58961,58963,58965,58967,58969,58971,58973],{"class":32,"line":80},[30,58958,52282],{"class":321},[30,58960,51482],{"class":51438},[30,58962,15102],{"class":36},[30,58964,367],{"class":321},[30,58966,51529],{"class":74},[30,58968,51509],{"class":36},[30,58970,367],{"class":321},[30,58972,51536],{"class":74},[30,58974,51445],{"class":321},[30,58976,58977,58979,58981,58983,58985],{"class":32,"line":88},[30,58978,52282],{"class":321},[30,58980,51545],{"class":51438},[30,58982,51548],{"class":321},[30,58984,51545],{"class":51438},[30,58986,51445],{"class":321},[30,58988,58989,58991,58993],{"class":32,"line":96},[30,58990,51923],{"class":321},[30,58992,51472],{"class":51438},[30,58994,51445],{"class":321},[30,58996,58997],{"class":32,"line":104},[30,58998,2582],{"emptyLinePlaceholder":245},[30,59000,59001,59003,59005],{"class":32,"line":112},[30,59002,1230],{"class":321},[30,59004,51938],{"class":51438},[30,59006,51445],{"class":321},[30,59008,59009,59011,59013,59015,59017],{"class":32,"line":123},[30,59010,52282],{"class":321},[30,59012,54025],{"class":51438},[30,59014,54031],{"class":321},[30,59016,54025],{"class":51438},[30,59018,51445],{"class":321},[30,59020,59021,59023,59025],{"class":32,"line":131},[30,59022,52282],{"class":321},[30,59024,51951],{"class":51438},[30,59026,51445],{"class":321},[30,59028,59029,59031,59033,59035,59037,59039,59041,59043],{"class":32,"line":142},[30,59030,11403],{"class":317},[30,59032,54529],{"class":40},[30,59034,13746],{"class":317},[30,59036,54534],{"class":321},[30,59038,54537],{"class":36},[30,59040,322],{"class":321},[30,59042,58342],{"class":74},[30,59044,328],{"class":321},[30,59046,59047,59049,59052,59054,59057],{"class":32,"line":1811},[30,59048,58349],{"class":321},[30,59050,59051],{"class":36},"onclick",[30,59053,13746],{"class":317},[30,59055,59056],{"class":317}," function",[30,59058,54590],{"class":321},[30,59060,59061,59064,59066,59068],{"class":32,"line":1825},[30,59062,59063],{"class":36},"      alert",[30,59065,322],{"class":321},[30,59067,792],{"class":40},[30,59069,328],{"class":321},[30,59071,59072],{"class":32,"line":1830},[30,59073,2369],{"class":321},[30,59075,59076,59078,59080,59082,59084],{"class":32,"line":1836},[30,59077,58349],{"class":321},[30,59079,59051],{"class":36},[30,59081,13746],{"class":317},[30,59083,59056],{"class":317},[30,59085,54590],{"class":321},[30,59087,59088,59090,59092,59094],{"class":32,"line":1857},[30,59089,59063],{"class":36},[30,59091,322],{"class":321},[30,59093,1070],{"class":40},[30,59095,328],{"class":321},[30,59097,59098],{"class":32,"line":1862},[30,59099,2369],{"class":321},[30,59101,59102,59104,59106],{"class":32,"line":1876},[30,59103,52555],{"class":321},[30,59105,51951],{"class":51438},[30,59107,51445],{"class":321},[30,59109,59110,59112,59114],{"class":32,"line":1881},[30,59111,51923],{"class":321},[30,59113,51938],{"class":51438},[30,59115,51445],{"class":321},[30,59117,59118],{"class":32,"line":1910},[30,59119,2582],{"emptyLinePlaceholder":245},[30,59121,59122,59124,59126],{"class":32,"line":1915},[30,59123,51923],{"class":321},[30,59125,50773],{"class":51438},[30,59127,51445],{"class":321},[157,59129,59130],{},"只要点击就输出结果为22,前边11被覆盖了",[20,59132,59134],{"className":50771,"code":59133,"language":50773,"meta":25,"style":25},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[27,59135,59136,59141,59146,59150,59155,59160],{"__ignoreMap":25},[30,59137,59138],{"class":32,"line":33},[30,59139,59140],{"class":321},"  btn.addEventListener('click', function () {\n",[30,59142,59143],{"class":32,"line":44},[30,59144,59145],{"class":321},"      alert(11)\n",[30,59147,59148],{"class":32,"line":52},[30,59149,33599],{"class":321},[30,59151,59152],{"class":32,"line":60},[30,59153,59154],{"class":321},"    btn.addEventListener('click', function () {\n",[30,59156,59157],{"class":32,"line":68},[30,59158,59159],{"class":321},"      alert(22)\n",[30,59161,59162],{"class":32,"line":80},[30,59163,33599],{"class":321},[157,59165,59166],{},"点击第一次输出11,第二次点击为22",[287,59168,59170],{"id":59169},"_325-事件类型","3.2.5 事件类型",[157,59172,59173],{},[160,59174],{"alt":25,"src":59175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22180,59177,59179],{"id":59178},"_3251-鼠标事件","3.2.5.1 鼠标事件",[157,59181,59182],{},"补充知识:",[157,59184,59185],{},"轮播图自动播放模块,可以使用",[157,59187,59188],{},"let timerId = setInterval(function () {",[157,59190,59191],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[157,59193,59194],{},"用js方法模拟进行点击事件,click必须加()",[157,59196,59197],{},"next.click()",[157,59199,59200],{},"}, 1000)",[157,59202,59203],{},[160,59204],{"alt":25,"src":59205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[20,59207,59209],{"className":53205,"code":59208,"language":53207,"meta":25,"style":25},"\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>轮播图点击切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      box-sizing: border-box;\n    }\n\n    .slider {\n      width: 560px;\n      height: 400px;\n      overflow: hidden;\n    }\n\n    .slider-wrapper {\n      width: 100%;\n      height: 320px;\n    }\n\n    .slider-wrapper img {\n      width: 100%;\n      height: 100%;\n      display: block;\n    }\n\n    .slider-footer {\n      height: 80px;\n      background-color: rgb(100, 67, 68);\n      padding: 12px 12px 0 12px;\n      position: relative;\n    }\n\n    .slider-footer .toggle {\n      position: absolute;\n      right: 0;\n      top: 12px;\n      display: flex;\n    }\n\n    .slider-footer .toggle button {\n      margin-right: 12px;\n      width: 28px;\n      height: 28px;\n      appearance: none;\n      border: none;\n      background: rgba(255, 255, 255, 0.1);\n      color: #fff;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n\n    .slider-footer .toggle button:hover {\n      background: rgba(255, 255, 255, 0.2);\n    }\n\n    .slider-footer p {\n      margin: 0;\n      color: #fff;\n      font-size: 18px;\n      margin-bottom: 10px;\n    }\n\n    .slider-indicator {\n      margin: 0;\n      padding: 0;\n      list-style: none;\n      display: flex;\n      align-items: center;\n    }\n\n    .slider-indicator li {\n      width: 8px;\n      height: 8px;\n      margin: 4px;\n      border-radius: 50%;\n      background: #fff;\n      opacity: 0.4;\n      cursor: pointer;\n    }\n\n    .slider-indicator li.active {\n      width: 12px;\n      height: 12px;\n      opacity: 1;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"slider\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\" \u002F>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了？\u003C\u002Fp>\n      \u003Cul class=\"slider-indicator\">\n        \u003Cli class=\"active\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n      \u003Cdiv class=\"toggle\">\n        \u003Cbutton class=\"prev\">&lt;\u003C\u002Fbutton>\n        \u003Cbutton class=\"next\">&gt;\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. 初始数据\n    const data = [\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n    ]\n    \u002F\u002F 获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const footer = document.querySelector('.slider-footer')\n    \u002F\u002F 1. 右按钮业务\n    \u002F\u002F 1.1 获取右侧按钮 \n    const next = document.querySelector('.next')\n    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n    \u002F\u002F 1.2 注册点击事件\n\n    next.addEventListener('click', function () {\n      \u002F\u002F console.log(11)\n      i++\n      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n      \u002F\u002F if (i >= 8) {\n      \u002F\u002F   i = 0\n      \u002F\u002F }\n      i = i >= data.length ? 0 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 2. 左侧按钮业务\n    \u002F\u002F 2.1 获取左侧按钮 \n    const prev = document.querySelector('.prev')\n    \u002F\u002F 1.2 注册点击事件\n    prev.addEventListener('click', function () {\n      i--\n      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n      \u002F\u002F if (i \u003C 0) {\n      \u002F\u002F   i = 7\n      \u002F\u002F }\n      i = i \u003C 0 ? data.length - 1 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 声明一个渲染的函数作为复用\n    function toggle() {\n      \u002F\u002F 1.4 渲染对应的数据\n      img.src = data[i].url\n      p.innerHTML = data[i].title\n      footer.style.backgroundColor = data[i].color\n      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n      document.querySelector('.slider-indicator .active').classList.remove('active')\n      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n    }\n\n    \u002F\u002F 3. 自动播放模块\n    let timerId = setInterval(function () {\n      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n      next.click()\n    }, 1000)\n\n    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n    const slider = document.querySelector('.slider')\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseenter', function () {\n      \u002F\u002F 停止定时器\n      clearInterval(timerId)\n    })\n\n    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseleave', function () {\n      \u002F\u002F 停止定时器\n      if (timerId) clearInterval(timerId)\n      \u002F\u002F 开启定时器\n      timerId = setInterval(function () {\n        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n        next.click()\n      }, 1000)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,59210,59211,59215,59225,59239,59243,59251,59266,59286,59306,59319,59327,59332,59337,59341,59345,59350,59355,59360,59365,59369,59373,59378,59383,59388,59392,59396,59401,59405,59410,59415,59419,59423,59428,59433,59438,59443,59448,59452,59456,59461,59466,59471,59476,59481,59485,59489,59494,59499,59504,59509,59514,59519,59524,59529,59534,59539,59543,59547,59552,59557,59561,59565,59570,59575,59579,59584,59589,59593,59597,59602,59606,59611,59616,59620,59625,59629,59633,59638,59643,59648,59653,59658,59663,59668,59672,59676,59680,59685,59690,59695,59700,59704,59712,59720,59724,59732,59747,59761,59782,59790,59804,59817,59832,59851,59863,59875,59887,59899,59911,59923,59935,59943,59958,59982,60006,60014,60022,60030,60038,60043,60048,60053,60058,60063,60068,60073,60078,60083,60088,60092,60097,60102,60107,60112,60117,60122,60127,60132,60137,60141,60146,60151,60156,60161,60166,60171,60176,60181,60186,60191,60196,60201,60205,60209,60214,60219,60224,60228,60233,60238,60243,60248,60253,60257,60262,60266,60270,60274,60278,60282,60286,60291,60296,60301,60306,60311,60316,60321,60326,60331,60335,60339,60344,60349,60354,60359,60364,60368,60373,60378,60383,60388,60393,60398,60402,60406,60411,60415,60420,60424,60429,60434,60439,60444,60449,60454,60458,60466,60474,60478],{"__ignoreMap":25},[30,59212,59213],{"class":32,"line":33},[30,59214,2582],{"emptyLinePlaceholder":245},[30,59216,59217,59219,59221,59223],{"class":32,"line":44},[30,59218,51435],{"class":321},[30,59220,51439],{"class":317},[30,59222,51442],{"class":40},[30,59224,51445],{"class":321},[30,59226,59227,59229,59231,59233,59235,59237],{"class":32,"line":52},[30,59228,1230],{"class":321},[30,59230,50773],{"class":51438},[30,59232,51454],{"class":36},[30,59234,367],{"class":321},[30,59236,51459],{"class":74},[30,59238,51445],{"class":321},[30,59240,59241],{"class":32,"line":60},[30,59242,2582],{"emptyLinePlaceholder":245},[30,59244,59245,59247,59249],{"class":32,"line":68},[30,59246,1230],{"class":321},[30,59248,51472],{"class":51438},[30,59250,51445],{"class":321},[30,59252,59253,59255,59257,59259,59261,59263],{"class":32,"line":80},[30,59254,52282],{"class":321},[30,59256,51482],{"class":51438},[30,59258,51485],{"class":36},[30,59260,367],{"class":321},[30,59262,51490],{"class":74},[30,59264,59265],{"class":321}," \u002F>\n",[30,59267,59268,59270,59272,59274,59276,59278,59280,59282,59284],{"class":32,"line":88},[30,59269,52282],{"class":321},[30,59271,51482],{"class":51438},[30,59273,51501],{"class":36},[30,59275,367],{"class":321},[30,59277,51506],{"class":74},[30,59279,51509],{"class":36},[30,59281,367],{"class":321},[30,59283,51514],{"class":74},[30,59285,59265],{"class":321},[30,59287,59288,59290,59292,59294,59296,59298,59300,59302,59304],{"class":32,"line":96},[30,59289,52282],{"class":321},[30,59291,51482],{"class":51438},[30,59293,15102],{"class":36},[30,59295,367],{"class":321},[30,59297,51529],{"class":74},[30,59299,51509],{"class":36},[30,59301,367],{"class":321},[30,59303,51536],{"class":74},[30,59305,59265],{"class":321},[30,59307,59308,59310,59312,59315,59317],{"class":32,"line":104},[30,59309,52282],{"class":321},[30,59311,51545],{"class":51438},[30,59313,59314],{"class":321},">轮播图点击切换\u003C\u002F",[30,59316,51545],{"class":51438},[30,59318,51445],{"class":321},[30,59320,59321,59323,59325],{"class":32,"line":112},[30,59322,52282],{"class":321},[30,59324,234],{"class":51438},[30,59326,51445],{"class":321},[30,59328,59329],{"class":32,"line":123},[30,59330,59331],{"class":321},"    * {\n",[30,59333,59334],{"class":32,"line":131},[30,59335,59336],{"class":321},"      box-sizing: border-box;\n",[30,59338,59339],{"class":32,"line":142},[30,59340,2369],{"class":321},[30,59342,59343],{"class":32,"line":1811},[30,59344,2582],{"emptyLinePlaceholder":245},[30,59346,59347],{"class":32,"line":1825},[30,59348,59349],{"class":321},"    .slider {\n",[30,59351,59352],{"class":32,"line":1830},[30,59353,59354],{"class":321},"      width: 560px;\n",[30,59356,59357],{"class":32,"line":1836},[30,59358,59359],{"class":321},"      height: 400px;\n",[30,59361,59362],{"class":32,"line":1857},[30,59363,59364],{"class":321},"      overflow: hidden;\n",[30,59366,59367],{"class":32,"line":1862},[30,59368,2369],{"class":321},[30,59370,59371],{"class":32,"line":1876},[30,59372,2582],{"emptyLinePlaceholder":245},[30,59374,59375],{"class":32,"line":1881},[30,59376,59377],{"class":321},"    .slider-wrapper {\n",[30,59379,59380],{"class":32,"line":1910},[30,59381,59382],{"class":321},"      width: 100%;\n",[30,59384,59385],{"class":32,"line":1915},[30,59386,59387],{"class":321},"      height: 320px;\n",[30,59389,59390],{"class":32,"line":1932},[30,59391,2369],{"class":321},[30,59393,59394],{"class":32,"line":1937},[30,59395,2582],{"emptyLinePlaceholder":245},[30,59397,59398],{"class":32,"line":1942},[30,59399,59400],{"class":321},"    .slider-wrapper img {\n",[30,59402,59403],{"class":32,"line":1947},[30,59404,59382],{"class":321},[30,59406,59407],{"class":32,"line":1961},[30,59408,59409],{"class":321},"      height: 100%;\n",[30,59411,59412],{"class":32,"line":1966},[30,59413,59414],{"class":321},"      display: block;\n",[30,59416,59417],{"class":32,"line":2759},[30,59418,2369],{"class":321},[30,59420,59421],{"class":32,"line":2773},[30,59422,2582],{"emptyLinePlaceholder":245},[30,59424,59425],{"class":32,"line":2781},[30,59426,59427],{"class":321},"    .slider-footer {\n",[30,59429,59430],{"class":32,"line":2786},[30,59431,59432],{"class":321},"      height: 80px;\n",[30,59434,59435],{"class":32,"line":2792},[30,59436,59437],{"class":321},"      background-color: rgb(100, 67, 68);\n",[30,59439,59440],{"class":32,"line":2798},[30,59441,59442],{"class":321},"      padding: 12px 12px 0 12px;\n",[30,59444,59445],{"class":32,"line":2803},[30,59446,59447],{"class":321},"      position: relative;\n",[30,59449,59450],{"class":32,"line":8130},[30,59451,2369],{"class":321},[30,59453,59454],{"class":32,"line":8154},[30,59455,2582],{"emptyLinePlaceholder":245},[30,59457,59458],{"class":32,"line":8159},[30,59459,59460],{"class":321},"    .slider-footer .toggle {\n",[30,59462,59463],{"class":32,"line":8165},[30,59464,59465],{"class":321},"      position: absolute;\n",[30,59467,59468],{"class":32,"line":8192},[30,59469,59470],{"class":321},"      right: 0;\n",[30,59472,59473],{"class":32,"line":8197},[30,59474,59475],{"class":321},"      top: 12px;\n",[30,59477,59478],{"class":32,"line":8203},[30,59479,59480],{"class":321},"      display: flex;\n",[30,59482,59483],{"class":32,"line":8215},[30,59484,2369],{"class":321},[30,59486,59487],{"class":32,"line":8227},[30,59488,2582],{"emptyLinePlaceholder":245},[30,59490,59491],{"class":32,"line":8239},[30,59492,59493],{"class":321},"    .slider-footer .toggle button {\n",[30,59495,59496],{"class":32,"line":9898},[30,59497,59498],{"class":321},"      margin-right: 12px;\n",[30,59500,59501],{"class":32,"line":9923},[30,59502,59503],{"class":321},"      width: 28px;\n",[30,59505,59506],{"class":32,"line":9946},[30,59507,59508],{"class":321},"      height: 28px;\n",[30,59510,59511],{"class":32,"line":9970},[30,59512,59513],{"class":321},"      appearance: none;\n",[30,59515,59516],{"class":32,"line":9975},[30,59517,59518],{"class":321},"      border: none;\n",[30,59520,59521],{"class":32,"line":9980},[30,59522,59523],{"class":321},"      background: rgba(255, 255, 255, 0.1);\n",[30,59525,59526],{"class":32,"line":9985},[30,59527,59528],{"class":321},"      color: #fff;\n",[30,59530,59531],{"class":32,"line":9994},[30,59532,59533],{"class":321},"      border-radius: 4px;\n",[30,59535,59536],{"class":32,"line":9999},[30,59537,59538],{"class":321},"      cursor: pointer;\n",[30,59540,59541],{"class":32,"line":10005},[30,59542,2369],{"class":321},[30,59544,59545],{"class":32,"line":10026},[30,59546,2582],{"emptyLinePlaceholder":245},[30,59548,59549],{"class":32,"line":10032},[30,59550,59551],{"class":321},"    .slider-footer .toggle button:hover {\n",[30,59553,59554],{"class":32,"line":10046},[30,59555,59556],{"class":321},"      background: rgba(255, 255, 255, 0.2);\n",[30,59558,59559],{"class":32,"line":10052},[30,59560,2369],{"class":321},[30,59562,59563],{"class":32,"line":10079},[30,59564,2582],{"emptyLinePlaceholder":245},[30,59566,59567],{"class":32,"line":10088},[30,59568,59569],{"class":321},"    .slider-footer p {\n",[30,59571,59572],{"class":32,"line":10094},[30,59573,59574],{"class":321},"      margin: 0;\n",[30,59576,59577],{"class":32,"line":10102},[30,59578,59528],{"class":321},[30,59580,59581],{"class":32,"line":10107},[30,59582,59583],{"class":321},"      font-size: 18px;\n",[30,59585,59586],{"class":32,"line":16786},[30,59587,59588],{"class":321},"      margin-bottom: 10px;\n",[30,59590,59591],{"class":32,"line":16792},[30,59592,2369],{"class":321},[30,59594,59595],{"class":32,"line":16815},[30,59596,2582],{"emptyLinePlaceholder":245},[30,59598,59599],{"class":32,"line":16821},[30,59600,59601],{"class":321},"    .slider-indicator {\n",[30,59603,59604],{"class":32,"line":16844},[30,59605,59574],{"class":321},[30,59607,59608],{"class":32,"line":16858},[30,59609,59610],{"class":321},"      padding: 0;\n",[30,59612,59613],{"class":32,"line":16878},[30,59614,59615],{"class":321},"      list-style: none;\n",[30,59617,59618],{"class":32,"line":16884},[30,59619,59480],{"class":321},[30,59621,59622],{"class":32,"line":16895},[30,59623,59624],{"class":321},"      align-items: center;\n",[30,59626,59627],{"class":32,"line":16918},[30,59628,2369],{"class":321},[30,59630,59631],{"class":32,"line":16940},[30,59632,2582],{"emptyLinePlaceholder":245},[30,59634,59635],{"class":32,"line":16945},[30,59636,59637],{"class":321},"    .slider-indicator li {\n",[30,59639,59640],{"class":32,"line":16951},[30,59641,59642],{"class":321},"      width: 8px;\n",[30,59644,59645],{"class":32,"line":16965},[30,59646,59647],{"class":321},"      height: 8px;\n",[30,59649,59650],{"class":32,"line":16978},[30,59651,59652],{"class":321},"      margin: 4px;\n",[30,59654,59655],{"class":32,"line":16983},[30,59656,59657],{"class":321},"      border-radius: 50%;\n",[30,59659,59660],{"class":32,"line":16997},[30,59661,59662],{"class":321},"      background: #fff;\n",[30,59664,59665],{"class":32,"line":17002},[30,59666,59667],{"class":321},"      opacity: 0.4;\n",[30,59669,59670],{"class":32,"line":17008},[30,59671,59538],{"class":321},[30,59673,59674],{"class":32,"line":17013},[30,59675,2369],{"class":321},[30,59677,59678],{"class":32,"line":17027},[30,59679,2582],{"emptyLinePlaceholder":245},[30,59681,59682],{"class":32,"line":17032},[30,59683,59684],{"class":321},"    .slider-indicator li.active {\n",[30,59686,59687],{"class":32,"line":17037},[30,59688,59689],{"class":321},"      width: 12px;\n",[30,59691,59692],{"class":32,"line":17051},[30,59693,59694],{"class":321},"      height: 12px;\n",[30,59696,59697],{"class":32,"line":17063},[30,59698,59699],{"class":321},"      opacity: 1;\n",[30,59701,59702],{"class":32,"line":17068},[30,59703,2369],{"class":321},[30,59705,59706,59708,59710],{"class":32,"line":17081},[30,59707,52555],{"class":321},[30,59709,234],{"class":51438},[30,59711,51445],{"class":321},[30,59713,59714,59716,59718],{"class":32,"line":17086},[30,59715,51923],{"class":321},[30,59717,51472],{"class":51438},[30,59719,51445],{"class":321},[30,59721,59722],{"class":32,"line":17091},[30,59723,2582],{"emptyLinePlaceholder":245},[30,59725,59726,59728,59730],{"class":32,"line":17096},[30,59727,1230],{"class":321},[30,59729,51938],{"class":51438},[30,59731,51445],{"class":321},[30,59733,59734,59736,59738,59740,59742,59745],{"class":32,"line":17109},[30,59735,52282],{"class":321},[30,59737,51749],{"class":51438},[30,59739,53624],{"class":36},[30,59741,367],{"class":321},[30,59743,59744],{"class":74},"\"slider\"",[30,59746,51445],{"class":321},[30,59748,59749,59751,59753,59755,59757,59759],{"class":32,"line":17114},[30,59750,51479],{"class":321},[30,59752,51749],{"class":51438},[30,59754,53624],{"class":36},[30,59756,367],{"class":321},[30,59758,55365],{"class":74},[30,59760,51445],{"class":321},[30,59762,59763,59765,59767,59769,59771,59774,59776,59778,59780],{"class":32,"line":32771},[30,59764,55372],{"class":321},[30,59766,160],{"class":51438},[30,59768,55377],{"class":36},[30,59770,367],{"class":321},[30,59772,59773],{"class":74},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[30,59775,55385],{"class":36},[30,59777,367],{"class":321},[30,59779,7834],{"class":74},[30,59781,59265],{"class":321},[30,59783,59784,59786,59788],{"class":32,"line":32777},[30,59785,51914],{"class":321},[30,59787,51749],{"class":51438},[30,59789,51445],{"class":321},[30,59791,59792,59794,59796,59798,59800,59802],{"class":32,"line":32783},[30,59793,51479],{"class":321},[30,59795,51749],{"class":51438},[30,59797,53624],{"class":36},[30,59799,367],{"class":321},[30,59801,55412],{"class":74},[30,59803,51445],{"class":321},[30,59805,59806,59808,59810,59813,59815],{"class":32,"line":32789},[30,59807,55372],{"class":321},[30,59809,157],{"class":51438},[30,59811,59812],{"class":321},">对人类来说会不会太超前了？\u003C\u002F",[30,59814,157],{"class":51438},[30,59816,51445],{"class":321},[30,59818,59819,59821,59823,59825,59827,59830],{"class":32,"line":32795},[30,59820,55372],{"class":321},[30,59822,147],{"class":51438},[30,59824,53624],{"class":36},[30,59826,367],{"class":321},[30,59828,59829],{"class":74},"\"slider-indicator\"",[30,59831,51445],{"class":321},[30,59833,59834,59836,59838,59840,59842,59845,59847,59849],{"class":32,"line":32806},[30,59835,55440],{"class":321},[30,59837,150],{"class":51438},[30,59839,53624],{"class":36},[30,59841,367],{"class":321},[30,59843,59844],{"class":74},"\"active\"",[30,59846,55452],{"class":321},[30,59848,150],{"class":51438},[30,59850,51445],{"class":321},[30,59852,59853,59855,59857,59859,59861],{"class":32,"line":32812},[30,59854,55440],{"class":321},[30,59856,150],{"class":51438},[30,59858,55452],{"class":321},[30,59860,150],{"class":51438},[30,59862,51445],{"class":321},[30,59864,59865,59867,59869,59871,59873],{"class":32,"line":32832},[30,59866,55440],{"class":321},[30,59868,150],{"class":51438},[30,59870,55452],{"class":321},[30,59872,150],{"class":51438},[30,59874,51445],{"class":321},[30,59876,59877,59879,59881,59883,59885],{"class":32,"line":32838},[30,59878,55440],{"class":321},[30,59880,150],{"class":51438},[30,59882,55452],{"class":321},[30,59884,150],{"class":51438},[30,59886,51445],{"class":321},[30,59888,59889,59891,59893,59895,59897],{"class":32,"line":32849},[30,59890,55440],{"class":321},[30,59892,150],{"class":51438},[30,59894,55452],{"class":321},[30,59896,150],{"class":51438},[30,59898,51445],{"class":321},[30,59900,59901,59903,59905,59907,59909],{"class":32,"line":32855},[30,59902,55440],{"class":321},[30,59904,150],{"class":51438},[30,59906,55452],{"class":321},[30,59908,150],{"class":51438},[30,59910,51445],{"class":321},[30,59912,59913,59915,59917,59919,59921],{"class":32,"line":32861},[30,59914,55440],{"class":321},[30,59916,150],{"class":51438},[30,59918,55452],{"class":321},[30,59920,150],{"class":51438},[30,59922,51445],{"class":321},[30,59924,59925,59927,59929,59931,59933],{"class":32,"line":32867},[30,59926,55440],{"class":321},[30,59928,150],{"class":51438},[30,59930,55452],{"class":321},[30,59932,150],{"class":51438},[30,59934,51445],{"class":321},[30,59936,59937,59939,59941],{"class":32,"line":32873},[30,59938,55545],{"class":321},[30,59940,147],{"class":51438},[30,59942,51445],{"class":321},[30,59944,59945,59947,59949,59951,59953,59956],{"class":32,"line":32879},[30,59946,55372],{"class":321},[30,59948,51749],{"class":51438},[30,59950,53624],{"class":36},[30,59952,367],{"class":321},[30,59954,59955],{"class":74},"\"toggle\"",[30,59957,51445],{"class":321},[30,59959,59960,59962,59964,59966,59968,59971,59973,59976,59978,59980],{"class":32,"line":32885},[30,59961,55440],{"class":321},[30,59963,54025],{"class":51438},[30,59965,53624],{"class":36},[30,59967,367],{"class":321},[30,59969,59970],{"class":74},"\"prev\"",[30,59972,1280],{"class":321},[30,59974,59975],{"class":40},"&lt;",[30,59977,51923],{"class":321},[30,59979,54025],{"class":51438},[30,59981,51445],{"class":321},[30,59983,59984,59986,59988,59990,59992,59995,59997,60000,60002,60004],{"class":32,"line":32891},[30,59985,55440],{"class":321},[30,59987,54025],{"class":51438},[30,59989,53624],{"class":36},[30,59991,367],{"class":321},[30,59993,59994],{"class":74},"\"next\"",[30,59996,1280],{"class":321},[30,59998,59999],{"class":40},"&gt;",[30,60001,51923],{"class":321},[30,60003,54025],{"class":51438},[30,60005,51445],{"class":321},[30,60007,60008,60010,60012],{"class":32,"line":32911},[30,60009,55545],{"class":321},[30,60011,51749],{"class":51438},[30,60013,51445],{"class":321},[30,60015,60016,60018,60020],{"class":32,"line":32917},[30,60017,51914],{"class":321},[30,60019,51749],{"class":51438},[30,60021,51445],{"class":321},[30,60023,60024,60026,60028],{"class":32,"line":32933},[30,60025,52555],{"class":321},[30,60027,51749],{"class":51438},[30,60029,51445],{"class":321},[30,60031,60032,60034,60036],{"class":32,"line":32939},[30,60033,52282],{"class":321},[30,60035,51951],{"class":51438},[30,60037,51445],{"class":321},[30,60039,60040],{"class":32,"line":32953},[30,60041,60042],{"class":321},"    \u002F\u002F 1. 初始数据\n",[30,60044,60045],{"class":32,"line":32959},[30,60046,60047],{"class":321},"    const data = [\n",[30,60049,60050],{"class":32,"line":32974},[30,60051,60052],{"class":321},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[30,60054,60055],{"class":32,"line":32980},[30,60056,60057],{"class":321},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[30,60059,60060],{"class":32,"line":32989},[30,60061,60062],{"class":321},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[30,60064,60065],{"class":32,"line":32995},[30,60066,60067],{"class":321},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[30,60069,60070],{"class":32,"line":33004},[30,60071,60072],{"class":321},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[30,60074,60075],{"class":32,"line":33010},[30,60076,60077],{"class":321},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[30,60079,60080],{"class":32,"line":33016},[30,60081,60082],{"class":321},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[30,60084,60085],{"class":32,"line":33025},[30,60086,60087],{"class":321},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[30,60089,60090],{"class":32,"line":33031},[30,60091,53247],{"class":321},[30,60093,60094],{"class":32,"line":33042},[30,60095,60096],{"class":321},"    \u002F\u002F 获取元素\n",[30,60098,60099],{"class":32,"line":33048},[30,60100,60101],{"class":321},"    const img = document.querySelector('.slider-wrapper img')\n",[30,60103,60104],{"class":32,"line":33067},[30,60105,60106],{"class":321},"    const p = document.querySelector('.slider-footer p')\n",[30,60108,60109],{"class":32,"line":33073},[30,60110,60111],{"class":321},"    const footer = document.querySelector('.slider-footer')\n",[30,60113,60114],{"class":32,"line":33084},[30,60115,60116],{"class":321},"    \u002F\u002F 1. 右按钮业务\n",[30,60118,60119],{"class":32,"line":33090},[30,60120,60121],{"class":321},"    \u002F\u002F 1.1 获取右侧按钮 \n",[30,60123,60124],{"class":32,"line":33110},[30,60125,60126],{"class":321},"    const next = document.querySelector('.next')\n",[30,60128,60129],{"class":32,"line":33126},[30,60130,60131],{"class":321},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[30,60133,60134],{"class":32,"line":33132},[30,60135,60136],{"class":321},"    \u002F\u002F 1.2 注册点击事件\n",[30,60138,60139],{"class":32,"line":33146},[30,60140,2582],{"emptyLinePlaceholder":245},[30,60142,60143],{"class":32,"line":33152},[30,60144,60145],{"class":321},"    next.addEventListener('click', function () {\n",[30,60147,60148],{"class":32,"line":33158},[30,60149,60150],{"class":321},"      \u002F\u002F console.log(11)\n",[30,60152,60153],{"class":32,"line":33169},[30,60154,60155],{"class":321},"      i++\n",[30,60157,60158],{"class":32,"line":33175},[30,60159,60160],{"class":321},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[30,60162,60163],{"class":32,"line":33181},[30,60164,60165],{"class":321},"      \u002F\u002F if (i >= 8) {\n",[30,60167,60168],{"class":32,"line":33191},[30,60169,60170],{"class":321},"      \u002F\u002F   i = 0\n",[30,60172,60173],{"class":32,"line":33197},[30,60174,60175],{"class":321},"      \u002F\u002F }\n",[30,60177,60178],{"class":32,"line":33208},[30,60179,60180],{"class":321},"      i = i >= data.length ? 0 : i\n",[30,60182,60183],{"class":32,"line":33214},[30,60184,60185],{"class":321},"      \u002F\u002F 1.3 得到对应的对象\n",[30,60187,60188],{"class":32,"line":33224},[30,60189,60190],{"class":321},"      \u002F\u002F console.log(data[i])\n",[30,60192,60193],{"class":32,"line":33229},[30,60194,60195],{"class":321},"      \u002F\u002F 调用函数\n",[30,60197,60198],{"class":32,"line":33235},[30,60199,60200],{"class":321},"      toggle()\n",[30,60202,60203],{"class":32,"line":33284},[30,60204,33599],{"class":321},[30,60206,60207],{"class":32,"line":33331},[30,60208,2582],{"emptyLinePlaceholder":245},[30,60210,60211],{"class":32,"line":33336},[30,60212,60213],{"class":321},"    \u002F\u002F 2. 左侧按钮业务\n",[30,60215,60216],{"class":32,"line":33342},[30,60217,60218],{"class":321},"    \u002F\u002F 2.1 获取左侧按钮 \n",[30,60220,60221],{"class":32,"line":33361},[30,60222,60223],{"class":321},"    const prev = document.querySelector('.prev')\n",[30,60225,60226],{"class":32,"line":33367},[30,60227,60136],{"class":321},[30,60229,60230],{"class":32,"line":33387},[30,60231,60232],{"class":321},"    prev.addEventListener('click', function () {\n",[30,60234,60235],{"class":32,"line":33393},[30,60236,60237],{"class":321},"      i--\n",[30,60239,60240],{"class":32,"line":33399},[30,60241,60242],{"class":321},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[30,60244,60245],{"class":32,"line":33409},[30,60246,60247],{"class":321},"      \u002F\u002F if (i \u003C 0) {\n",[30,60249,60250],{"class":32,"line":33414},[30,60251,60252],{"class":321},"      \u002F\u002F   i = 7\n",[30,60254,60255],{"class":32,"line":33420},[30,60256,60175],{"class":321},[30,60258,60259],{"class":32,"line":33436},[30,60260,60261],{"class":321},"      i = i \u003C 0 ? data.length - 1 : i\n",[30,60263,60264],{"class":32,"line":33481},[30,60265,60185],{"class":321},[30,60267,60268],{"class":32,"line":33487},[30,60269,60190],{"class":321},[30,60271,60272],{"class":32,"line":33493},[30,60273,60195],{"class":321},[30,60275,60276],{"class":32,"line":33499},[30,60277,60200],{"class":321},[30,60279,60280],{"class":32,"line":33510},[30,60281,33599],{"class":321},[30,60283,60284],{"class":32,"line":33516},[30,60285,2582],{"emptyLinePlaceholder":245},[30,60287,60288],{"class":32,"line":33522},[30,60289,60290],{"class":321},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[30,60292,60293],{"class":32,"line":33528},[30,60294,60295],{"class":321},"    function toggle() {\n",[30,60297,60298],{"class":32,"line":33546},[30,60299,60300],{"class":321},"      \u002F\u002F 1.4 渲染对应的数据\n",[30,60302,60303],{"class":32,"line":33560},[30,60304,60305],{"class":321},"      img.src = data[i].url\n",[30,60307,60308],{"class":32,"line":33569},[30,60309,60310],{"class":321},"      p.innerHTML = data[i].title\n",[30,60312,60313],{"class":32,"line":33578},[30,60314,60315],{"class":321},"      footer.style.backgroundColor = data[i].color\n",[30,60317,60318],{"class":32,"line":33587},[30,60319,60320],{"class":321},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[30,60322,60323],{"class":32,"line":33596},[30,60324,60325],{"class":321},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[30,60327,60328],{"class":32,"line":33602},[30,60329,60330],{"class":321},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[30,60332,60333],{"class":32,"line":33608},[30,60334,2369],{"class":321},[30,60336,60337],{"class":32,"line":33616},[30,60338,2582],{"emptyLinePlaceholder":245},[30,60340,60341],{"class":32,"line":33621},[30,60342,60343],{"class":321},"    \u002F\u002F 3. 自动播放模块\n",[30,60345,60346],{"class":32,"line":33627},[30,60347,60348],{"class":321},"    let timerId = setInterval(function () {\n",[30,60350,60351],{"class":32,"line":33638},[30,60352,60353],{"class":321},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[30,60355,60356],{"class":32,"line":33644},[30,60357,60358],{"class":321},"      next.click()\n",[30,60360,60361],{"class":32,"line":33664},[30,60362,60363],{"class":321},"    }, 1000)\n",[30,60365,60366],{"class":32,"line":33670},[30,60367,2582],{"emptyLinePlaceholder":245},[30,60369,60370],{"class":32,"line":33676},[30,60371,60372],{"class":321},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[30,60374,60375],{"class":32,"line":33682},[30,60376,60377],{"class":321},"    const slider = document.querySelector('.slider')\n",[30,60379,60380],{"class":32,"line":33699},[30,60381,60382],{"class":321},"    \u002F\u002F 注册事件\n",[30,60384,60385],{"class":32,"line":33705},[30,60386,60387],{"class":321},"    slider.addEventListener('mouseenter', function () {\n",[30,60389,60390],{"class":32,"line":33711},[30,60391,60392],{"class":321},"      \u002F\u002F 停止定时器\n",[30,60394,60395],{"class":32,"line":33717},[30,60396,60397],{"class":321},"      clearInterval(timerId)\n",[30,60399,60400],{"class":32,"line":33723},[30,60401,33599],{"class":321},[30,60403,60404],{"class":32,"line":33729},[30,60405,2582],{"emptyLinePlaceholder":245},[30,60407,60408],{"class":32,"line":33756},[30,60409,60410],{"class":321},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[30,60412,60413],{"class":32,"line":33780},[30,60414,60382],{"class":321},[30,60416,60417],{"class":32,"line":33786},[30,60418,60419],{"class":321},"    slider.addEventListener('mouseleave', function () {\n",[30,60421,60422],{"class":32,"line":33792},[30,60423,60392],{"class":321},[30,60425,60426],{"class":32,"line":33798},[30,60427,60428],{"class":321},"      if (timerId) clearInterval(timerId)\n",[30,60430,60431],{"class":32,"line":33809},[30,60432,60433],{"class":321},"      \u002F\u002F 开启定时器\n",[30,60435,60436],{"class":32,"line":33820},[30,60437,60438],{"class":321},"      timerId = setInterval(function () {\n",[30,60440,60441],{"class":32,"line":33826},[30,60442,60443],{"class":321},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[30,60445,60446],{"class":32,"line":33843},[30,60447,60448],{"class":321},"        next.click()\n",[30,60450,60451],{"class":32,"line":33866},[30,60452,60453],{"class":321},"      }, 1000)\n",[30,60455,60456],{"class":32,"line":33889},[30,60457,33599],{"class":321},[30,60459,60460,60462,60464],{"class":32,"line":33895},[30,60461,52555],{"class":321},[30,60463,51951],{"class":51438},[30,60465,51445],{"class":321},[30,60467,60468,60470,60472],{"class":32,"line":33900},[30,60469,51923],{"class":321},[30,60471,51938],{"class":51438},[30,60473,51445],{"class":321},[30,60475,60476],{"class":32,"line":33909},[30,60477,2582],{"emptyLinePlaceholder":245},[30,60479,60480,60482,60484],{"class":32,"line":33919},[30,60481,51923],{"class":321},[30,60483,50773],{"class":51438},[30,60485,51445],{"class":321},[22180,60487,60489],{"id":60488},"_3252-焦点事件","3.2.5.2 焦点事件",[157,60491,60492],{},"小米搜索框案例：",[20,60494,60496],{"className":50771,"code":60495,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        ul {\n\n            list-style: none;\n        }\n\n        .mi {\n            position: relative;\n            width: 223px;\n            margin: 100px auto;\n        }\n\n        .mi input {\n            width: 223px;\n            height: 48px;\n            padding: 0 10px;\n            font-size: 14px;\n            line-height: 48px;\n            border: 1px solid #e0e0e0;\n            outline: none;\n        }\n\n        .mi .search {\n            border: 1px solid #ff6700;\n        }\n\n        .result-list {\n            display: none;\n            position: absolute;\n            left: 0;\n            top: 48px;\n            width: 223px;\n            border: 1px solid #ff6700;\n            border-top: 0;\n            background: #fff;\n        }\n\n        .result-list a {\n            display: block;\n            padding: 6px 15px;\n            font-size: 12px;\n            color: #424242;\n            text-decoration: none;\n        }\n\n        .result-list a:hover {\n            background-color: #eee;\n        }\n    \u003C\u002Fstyle>\n\n\u003C\u002Fhead>\n\n\u003Cbody>\n    \u003Cdiv class=\"mi\">\n        \u003Cinput type=\"search\" placeholder=\"小米笔记本\">\n        \u003Cul class=\"result-list\">\n            \u003Cli>\u003Ca href=\"#\">全部商品\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米11\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米10S\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米笔记本\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米手机\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">黑鲨4\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">空调\u003C\u002Fa>\u003C\u002Fli>\n        \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cscript>\n        \u002F\u002F 1. 获取元素\n        const input = document.querySelector('[type=search]')\n        const ul = document.querySelector('.result-list')\n        \u002F\u002F console.log(input)\n        \u002F\u002F 2. 监听事件 获得焦点\n        input.addEventListener('focus', function () {\n            \u002F\u002F ul显示\n            ul.style.display = 'block'\n            \u002F\u002F 添加一个带有颜色边框的类名\n            input.classList.add('search')\n        })\n        \u002F\u002F 3. 监听事件 失去焦点\n        input.addEventListener('blur', function () {\n            ul.style.display = 'none'\n            input.classList.remove('search')\n        })\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,60497,60498,60508,60522,60526,60534,60548,60568,60588,60600,60608,60614,60624,60634,60646,60650,60654,60661,60665,60676,60680,60684,60691,60702,60715,60729,60733,60737,60746,60758,60770,60784,60797,60810,60828,60839,60843,60847,60856,60873,60877,60881,60888,60898,60908,60919,60932,60944,60960,60971,60983,60987,60991,60999,61010,61027,61039,61051,61062,61066,61070,61081,61092,61096,61104,61108,61116,61120,61128,61143,61166,61181,61212,61239,61266,61293,61320,61347,61374,61383,61391,61399,61404,61424,61444,61449,61454,61472,61477,61487,61492,61506,61511,61516,61533,61542,61554,61558,61566,61574,61578],{"__ignoreMap":25},[30,60499,60500,60502,60504,60506],{"class":32,"line":33},[30,60501,51435],{"class":321},[30,60503,51439],{"class":51438},[30,60505,51442],{"class":36},[30,60507,51445],{"class":321},[30,60509,60510,60512,60514,60516,60518,60520],{"class":32,"line":44},[30,60511,1230],{"class":321},[30,60513,50773],{"class":51438},[30,60515,51454],{"class":36},[30,60517,367],{"class":321},[30,60519,51459],{"class":74},[30,60521,51445],{"class":321},[30,60523,60524],{"class":32,"line":52},[30,60525,2582],{"emptyLinePlaceholder":245},[30,60527,60528,60530,60532],{"class":32,"line":60},[30,60529,1230],{"class":321},[30,60531,51472],{"class":51438},[30,60533,51445],{"class":321},[30,60535,60536,60538,60540,60542,60544,60546],{"class":32,"line":68},[30,60537,51479],{"class":321},[30,60539,51482],{"class":51438},[30,60541,51485],{"class":36},[30,60543,367],{"class":321},[30,60545,51490],{"class":74},[30,60547,51445],{"class":321},[30,60549,60550,60552,60554,60556,60558,60560,60562,60564,60566],{"class":32,"line":80},[30,60551,51479],{"class":321},[30,60553,51482],{"class":51438},[30,60555,51501],{"class":36},[30,60557,367],{"class":321},[30,60559,51506],{"class":74},[30,60561,51509],{"class":36},[30,60563,367],{"class":321},[30,60565,51514],{"class":74},[30,60567,51445],{"class":321},[30,60569,60570,60572,60574,60576,60578,60580,60582,60584,60586],{"class":32,"line":88},[30,60571,51479],{"class":321},[30,60573,51482],{"class":51438},[30,60575,15102],{"class":36},[30,60577,367],{"class":321},[30,60579,51529],{"class":74},[30,60581,51509],{"class":36},[30,60583,367],{"class":321},[30,60585,51536],{"class":74},[30,60587,51445],{"class":321},[30,60589,60590,60592,60594,60596,60598],{"class":32,"line":96},[30,60591,51479],{"class":321},[30,60593,51545],{"class":51438},[30,60595,51548],{"class":321},[30,60597,51545],{"class":51438},[30,60599,51445],{"class":321},[30,60601,60602,60604,60606],{"class":32,"line":104},[30,60603,51479],{"class":321},[30,60605,234],{"class":51438},[30,60607,51445],{"class":321},[30,60609,60610,60612],{"class":32,"line":112},[30,60611,51565],{"class":51438},[30,60613,15754],{"class":321},[30,60615,60616,60618,60620,60622],{"class":32,"line":123},[30,60617,51572],{"class":40},[30,60619,51575],{"class":321},[30,60621,511],{"class":40},[30,60623,1480],{"class":321},[30,60625,60626,60628,60630,60632],{"class":32,"line":131},[30,60627,51584],{"class":40},[30,60629,51575],{"class":321},[30,60631,511],{"class":40},[30,60633,1480],{"class":321},[30,60635,60636,60639,60641,60644],{"class":32,"line":142},[30,60637,60638],{"class":40},"            box-sizing",[30,60640,51575],{"class":321},[30,60642,60643],{"class":40},"border-box",[30,60645,1480],{"class":321},[30,60647,60648],{"class":32,"line":1811},[30,60649,2711],{"class":321},[30,60651,60652],{"class":32,"line":1825},[30,60653,2582],{"emptyLinePlaceholder":245},[30,60655,60656,60659],{"class":32,"line":1830},[30,60657,60658],{"class":51438},"        ul",[30,60660,15754],{"class":321},[30,60662,60663],{"class":32,"line":1836},[30,60664,2582],{"emptyLinePlaceholder":245},[30,60666,60667,60670,60672,60674],{"class":32,"line":1857},[30,60668,60669],{"class":40},"            list-style",[30,60671,51575],{"class":321},[30,60673,54875],{"class":40},[30,60675,1480],{"class":321},[30,60677,60678],{"class":32,"line":1862},[30,60679,2711],{"class":321},[30,60681,60682],{"class":32,"line":1876},[30,60683,2582],{"emptyLinePlaceholder":245},[30,60685,60686,60689],{"class":32,"line":1881},[30,60687,60688],{"class":36},"        .mi",[30,60690,15754],{"class":321},[30,60692,60693,60696,60698,60700],{"class":32,"line":1910},[30,60694,60695],{"class":40},"            position",[30,60697,51575],{"class":321},[30,60699,54902],{"class":40},[30,60701,1480],{"class":321},[30,60703,60704,60706,60708,60711,60713],{"class":32,"line":1915},[30,60705,51622],{"class":40},[30,60707,51575],{"class":321},[30,60709,60710],{"class":40},"223",[30,60712,51630],{"class":317},[30,60714,1480],{"class":321},[30,60716,60717,60719,60721,60723,60725,60727],{"class":32,"line":1932},[30,60718,51572],{"class":40},[30,60720,51575],{"class":321},[30,60722,631],{"class":40},[30,60724,51630],{"class":317},[30,60726,51694],{"class":40},[30,60728,1480],{"class":321},[30,60730,60731],{"class":32,"line":1937},[30,60732,2711],{"class":321},[30,60734,60735],{"class":32,"line":1942},[30,60736,2582],{"emptyLinePlaceholder":245},[30,60738,60739,60741,60744],{"class":32,"line":1947},[30,60740,60688],{"class":36},[30,60742,60743],{"class":51438}," input",[30,60745,15754],{"class":321},[30,60747,60748,60750,60752,60754,60756],{"class":32,"line":1961},[30,60749,51622],{"class":40},[30,60751,51575],{"class":321},[30,60753,60710],{"class":40},[30,60755,51630],{"class":317},[30,60757,1480],{"class":321},[30,60759,60760,60762,60764,60766,60768],{"class":32,"line":1966},[30,60761,51637],{"class":40},[30,60763,51575],{"class":321},[30,60765,927],{"class":40},[30,60767,51630],{"class":317},[30,60769,1480],{"class":321},[30,60771,60772,60774,60776,60778,60780,60782],{"class":32,"line":2759},[30,60773,51584],{"class":40},[30,60775,51575],{"class":321},[30,60777,511],{"class":40},[30,60779,2220],{"class":40},[30,60781,51630],{"class":317},[30,60783,1480],{"class":321},[30,60785,60786,60789,60791,60793,60795],{"class":32,"line":2773},[30,60787,60788],{"class":40},"            font-size",[30,60790,51575],{"class":321},[30,60792,869],{"class":40},[30,60794,51630],{"class":317},[30,60796,1480],{"class":321},[30,60798,60799,60802,60804,60806,60808],{"class":32,"line":2781},[30,60800,60801],{"class":40},"            line-height",[30,60803,51575],{"class":321},[30,60805,927],{"class":40},[30,60807,51630],{"class":317},[30,60809,1480],{"class":321},[30,60811,60812,60815,60817,60819,60821,60823,60826],{"class":32,"line":2786},[30,60813,60814],{"class":40},"            border",[30,60816,51575],{"class":321},[30,60818,537],{"class":40},[30,60820,51630],{"class":317},[30,60822,51659],{"class":40},[30,60824,60825],{"class":40}," #e0e0e0",[30,60827,1480],{"class":321},[30,60829,60830,60833,60835,60837],{"class":32,"line":2792},[30,60831,60832],{"class":40},"            outline",[30,60834,51575],{"class":321},[30,60836,54875],{"class":40},[30,60838,1480],{"class":321},[30,60840,60841],{"class":32,"line":2798},[30,60842,2711],{"class":321},[30,60844,60845],{"class":32,"line":2803},[30,60846,2582],{"emptyLinePlaceholder":245},[30,60848,60849,60851,60854],{"class":32,"line":8130},[30,60850,60688],{"class":36},[30,60852,60853],{"class":36}," .search",[30,60855,15754],{"class":321},[30,60857,60858,60860,60862,60864,60866,60868,60871],{"class":32,"line":8154},[30,60859,60814],{"class":40},[30,60861,51575],{"class":321},[30,60863,537],{"class":40},[30,60865,51630],{"class":317},[30,60867,51659],{"class":40},[30,60869,60870],{"class":40}," #ff6700",[30,60872,1480],{"class":321},[30,60874,60875],{"class":32,"line":8159},[30,60876,2711],{"class":321},[30,60878,60879],{"class":32,"line":8165},[30,60880,2582],{"emptyLinePlaceholder":245},[30,60882,60883,60886],{"class":32,"line":8192},[30,60884,60885],{"class":36},"        .result-list",[30,60887,15754],{"class":321},[30,60889,60890,60892,60894,60896],{"class":32,"line":8197},[30,60891,51610],{"class":40},[30,60893,51575],{"class":321},[30,60895,54875],{"class":40},[30,60897,1480],{"class":321},[30,60899,60900,60902,60904,60906],{"class":32,"line":8203},[30,60901,60695],{"class":40},[30,60903,51575],{"class":321},[30,60905,54969],{"class":40},[30,60907,1480],{"class":321},[30,60909,60910,60913,60915,60917],{"class":32,"line":8215},[30,60911,60912],{"class":40},"            left",[30,60914,51575],{"class":321},[30,60916,511],{"class":40},[30,60918,1480],{"class":321},[30,60920,60921,60924,60926,60928,60930],{"class":32,"line":8227},[30,60922,60923],{"class":40},"            top",[30,60925,51575],{"class":321},[30,60927,927],{"class":40},[30,60929,51630],{"class":317},[30,60931,1480],{"class":321},[30,60933,60934,60936,60938,60940,60942],{"class":32,"line":8239},[30,60935,51622],{"class":40},[30,60937,51575],{"class":321},[30,60939,60710],{"class":40},[30,60941,51630],{"class":317},[30,60943,1480],{"class":321},[30,60945,60946,60948,60950,60952,60954,60956,60958],{"class":32,"line":9898},[30,60947,60814],{"class":40},[30,60949,51575],{"class":321},[30,60951,537],{"class":40},[30,60953,51630],{"class":317},[30,60955,51659],{"class":40},[30,60957,60870],{"class":40},[30,60959,1480],{"class":321},[30,60961,60962,60965,60967,60969],{"class":32,"line":9923},[30,60963,60964],{"class":40},"            border-top",[30,60966,51575],{"class":321},[30,60968,511],{"class":40},[30,60970,1480],{"class":321},[30,60972,60973,60976,60978,60981],{"class":32,"line":9946},[30,60974,60975],{"class":40},"            background",[30,60977,51575],{"class":321},[30,60979,60980],{"class":40},"#fff",[30,60982,1480],{"class":321},[30,60984,60985],{"class":32,"line":9970},[30,60986,2711],{"class":321},[30,60988,60989],{"class":32,"line":9975},[30,60990,2582],{"emptyLinePlaceholder":245},[30,60992,60993,60995,60997],{"class":32,"line":9980},[30,60994,60885],{"class":36},[30,60996,1585],{"class":51438},[30,60998,15754],{"class":321},[30,61000,61001,61003,61005,61008],{"class":32,"line":9985},[30,61002,51610],{"class":40},[30,61004,51575],{"class":321},[30,61006,61007],{"class":40},"block",[30,61009,1480],{"class":321},[30,61011,61012,61014,61016,61018,61020,61023,61025],{"class":32,"line":9994},[30,61013,51584],{"class":40},[30,61015,51575],{"class":321},[30,61017,664],{"class":40},[30,61019,51630],{"class":317},[30,61021,61022],{"class":40}," 15",[30,61024,51630],{"class":317},[30,61026,1480],{"class":321},[30,61028,61029,61031,61033,61035,61037],{"class":32,"line":9999},[30,61030,60788],{"class":40},[30,61032,51575],{"class":321},[30,61034,818],{"class":40},[30,61036,51630],{"class":317},[30,61038,1480],{"class":321},[30,61040,61041,61044,61046,61049],{"class":32,"line":10005},[30,61042,61043],{"class":40},"            color",[30,61045,51575],{"class":321},[30,61047,61048],{"class":40},"#424242",[30,61050,1480],{"class":321},[30,61052,61053,61056,61058,61060],{"class":32,"line":10026},[30,61054,61055],{"class":40},"            text-decoration",[30,61057,51575],{"class":321},[30,61059,54875],{"class":40},[30,61061,1480],{"class":321},[30,61063,61064],{"class":32,"line":10032},[30,61065,2711],{"class":321},[30,61067,61068],{"class":32,"line":10046},[30,61069,2582],{"emptyLinePlaceholder":245},[30,61071,61072,61074,61076,61079],{"class":32,"line":10052},[30,61073,60885],{"class":36},[30,61075,1585],{"class":51438},[30,61077,61078],{"class":36},":hover",[30,61080,15754],{"class":321},[30,61082,61083,61085,61087,61090],{"class":32,"line":10079},[30,61084,51778],{"class":40},[30,61086,51575],{"class":321},[30,61088,61089],{"class":40},"#eee",[30,61091,1480],{"class":321},[30,61093,61094],{"class":32,"line":10088},[30,61095,2711],{"class":321},[30,61097,61098,61100,61102],{"class":32,"line":10094},[30,61099,51914],{"class":321},[30,61101,234],{"class":51438},[30,61103,51445],{"class":321},[30,61105,61106],{"class":32,"line":10102},[30,61107,2582],{"emptyLinePlaceholder":245},[30,61109,61110,61112,61114],{"class":32,"line":10107},[30,61111,51923],{"class":321},[30,61113,51472],{"class":51438},[30,61115,51445],{"class":321},[30,61117,61118],{"class":32,"line":16786},[30,61119,2582],{"emptyLinePlaceholder":245},[30,61121,61122,61124,61126],{"class":32,"line":16792},[30,61123,1230],{"class":321},[30,61125,51938],{"class":51438},[30,61127,51445],{"class":321},[30,61129,61130,61132,61134,61136,61138,61141],{"class":32,"line":16815},[30,61131,51479],{"class":321},[30,61133,51749],{"class":51438},[30,61135,53624],{"class":36},[30,61137,367],{"class":321},[30,61139,61140],{"class":74},"\"mi\"",[30,61142,51445],{"class":321},[30,61144,61145,61147,61149,61151,61153,61156,61159,61161,61164],{"class":32,"line":16821},[30,61146,55440],{"class":321},[30,61148,53959],{"class":51438},[30,61150,53962],{"class":36},[30,61152,367],{"class":321},[30,61154,61155],{"class":74},"\"search\"",[30,61157,61158],{"class":36}," placeholder",[30,61160,367],{"class":321},[30,61162,61163],{"class":74},"\"小米笔记本\"",[30,61165,51445],{"class":321},[30,61167,61168,61170,61172,61174,61176,61179],{"class":32,"line":16844},[30,61169,55440],{"class":321},[30,61171,147],{"class":51438},[30,61173,53624],{"class":36},[30,61175,367],{"class":321},[30,61177,61178],{"class":74},"\"result-list\"",[30,61180,51445],{"class":321},[30,61182,61183,61186,61188,61191,61193,61196,61198,61201,61204,61206,61208,61210],{"class":32,"line":16858},[30,61184,61185],{"class":321},"            \u003C",[30,61187,150],{"class":51438},[30,61189,61190],{"class":321},">\u003C",[30,61192,558],{"class":51438},[30,61194,61195],{"class":36}," href",[30,61197,367],{"class":321},[30,61199,61200],{"class":74},"\"#\"",[30,61202,61203],{"class":321},">全部商品\u003C\u002F",[30,61205,558],{"class":51438},[30,61207,55452],{"class":321},[30,61209,150],{"class":51438},[30,61211,51445],{"class":321},[30,61213,61214,61216,61218,61220,61222,61224,61226,61228,61231,61233,61235,61237],{"class":32,"line":16878},[30,61215,61185],{"class":321},[30,61217,150],{"class":51438},[30,61219,61190],{"class":321},[30,61221,558],{"class":51438},[30,61223,61195],{"class":36},[30,61225,367],{"class":321},[30,61227,61200],{"class":74},[30,61229,61230],{"class":321},">小米11\u003C\u002F",[30,61232,558],{"class":51438},[30,61234,55452],{"class":321},[30,61236,150],{"class":51438},[30,61238,51445],{"class":321},[30,61240,61241,61243,61245,61247,61249,61251,61253,61255,61258,61260,61262,61264],{"class":32,"line":16884},[30,61242,61185],{"class":321},[30,61244,150],{"class":51438},[30,61246,61190],{"class":321},[30,61248,558],{"class":51438},[30,61250,61195],{"class":36},[30,61252,367],{"class":321},[30,61254,61200],{"class":74},[30,61256,61257],{"class":321},">小米10S\u003C\u002F",[30,61259,558],{"class":51438},[30,61261,55452],{"class":321},[30,61263,150],{"class":51438},[30,61265,51445],{"class":321},[30,61267,61268,61270,61272,61274,61276,61278,61280,61282,61285,61287,61289,61291],{"class":32,"line":16895},[30,61269,61185],{"class":321},[30,61271,150],{"class":51438},[30,61273,61190],{"class":321},[30,61275,558],{"class":51438},[30,61277,61195],{"class":36},[30,61279,367],{"class":321},[30,61281,61200],{"class":74},[30,61283,61284],{"class":321},">小米笔记本\u003C\u002F",[30,61286,558],{"class":51438},[30,61288,55452],{"class":321},[30,61290,150],{"class":51438},[30,61292,51445],{"class":321},[30,61294,61295,61297,61299,61301,61303,61305,61307,61309,61312,61314,61316,61318],{"class":32,"line":16918},[30,61296,61185],{"class":321},[30,61298,150],{"class":51438},[30,61300,61190],{"class":321},[30,61302,558],{"class":51438},[30,61304,61195],{"class":36},[30,61306,367],{"class":321},[30,61308,61200],{"class":74},[30,61310,61311],{"class":321},">小米手机\u003C\u002F",[30,61313,558],{"class":51438},[30,61315,55452],{"class":321},[30,61317,150],{"class":51438},[30,61319,51445],{"class":321},[30,61321,61322,61324,61326,61328,61330,61332,61334,61336,61339,61341,61343,61345],{"class":32,"line":16940},[30,61323,61185],{"class":321},[30,61325,150],{"class":51438},[30,61327,61190],{"class":321},[30,61329,558],{"class":51438},[30,61331,61195],{"class":36},[30,61333,367],{"class":321},[30,61335,61200],{"class":74},[30,61337,61338],{"class":321},">黑鲨4\u003C\u002F",[30,61340,558],{"class":51438},[30,61342,55452],{"class":321},[30,61344,150],{"class":51438},[30,61346,51445],{"class":321},[30,61348,61349,61351,61353,61355,61357,61359,61361,61363,61366,61368,61370,61372],{"class":32,"line":16945},[30,61350,61185],{"class":321},[30,61352,150],{"class":51438},[30,61354,61190],{"class":321},[30,61356,558],{"class":51438},[30,61358,61195],{"class":36},[30,61360,367],{"class":321},[30,61362,61200],{"class":74},[30,61364,61365],{"class":321},">空调\u003C\u002F",[30,61367,558],{"class":51438},[30,61369,55452],{"class":321},[30,61371,150],{"class":51438},[30,61373,51445],{"class":321},[30,61375,61376,61379,61381],{"class":32,"line":16951},[30,61377,61378],{"class":321},"        \u003C\u002F",[30,61380,147],{"class":51438},[30,61382,51445],{"class":321},[30,61384,61385,61387,61389],{"class":32,"line":16965},[30,61386,51914],{"class":321},[30,61388,51749],{"class":51438},[30,61390,51445],{"class":321},[30,61392,61393,61395,61397],{"class":32,"line":16978},[30,61394,51479],{"class":321},[30,61396,51951],{"class":51438},[30,61398,51445],{"class":321},[30,61400,61401],{"class":32,"line":16983},[30,61402,61403],{"class":379},"        \u002F\u002F 1. 获取元素\n",[30,61405,61406,61409,61411,61413,61415,61417,61419,61422],{"class":32,"line":16997},[30,61407,61408],{"class":317},"        const",[30,61410,60743],{"class":40},[30,61412,13746],{"class":317},[30,61414,54534],{"class":321},[30,61416,54537],{"class":36},[30,61418,322],{"class":321},[30,61420,61421],{"class":74},"'[type=search]'",[30,61423,328],{"class":321},[30,61425,61426,61428,61431,61433,61435,61437,61439,61442],{"class":32,"line":17002},[30,61427,61408],{"class":317},[30,61429,61430],{"class":40}," ul",[30,61432,13746],{"class":317},[30,61434,54534],{"class":321},[30,61436,54537],{"class":36},[30,61438,322],{"class":321},[30,61440,61441],{"class":74},"'.result-list'",[30,61443,328],{"class":321},[30,61445,61446],{"class":32,"line":17008},[30,61447,61448],{"class":379},"        \u002F\u002F console.log(input)\n",[30,61450,61451],{"class":32,"line":17013},[30,61452,61453],{"class":379},"        \u002F\u002F 2. 监听事件 获得焦点\n",[30,61455,61456,61459,61461,61463,61466,61468,61470],{"class":32,"line":17027},[30,61457,61458],{"class":321},"        input.",[30,61460,57951],{"class":36},[30,61462,322],{"class":321},[30,61464,61465],{"class":74},"'focus'",[30,61467,12617],{"class":321},[30,61469,54587],{"class":317},[30,61471,54590],{"class":321},[30,61473,61474],{"class":32,"line":17032},[30,61475,61476],{"class":379},"            \u002F\u002F ul显示\n",[30,61478,61479,61482,61484],{"class":32,"line":17037},[30,61480,61481],{"class":321},"            ul.style.display ",[30,61483,367],{"class":317},[30,61485,61486],{"class":74}," 'block'\n",[30,61488,61489],{"class":32,"line":17051},[30,61490,61491],{"class":379},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[30,61493,61494,61497,61499,61501,61504],{"class":32,"line":17063},[30,61495,61496],{"class":321},"            input.classList.",[30,61498,5516],{"class":36},[30,61500,322],{"class":321},[30,61502,61503],{"class":74},"'search'",[30,61505,328],{"class":321},[30,61507,61508],{"class":32,"line":17068},[30,61509,61510],{"class":321},"        })\n",[30,61512,61513],{"class":32,"line":17081},[30,61514,61515],{"class":379},"        \u002F\u002F 3. 监听事件 失去焦点\n",[30,61517,61518,61520,61522,61524,61527,61529,61531],{"class":32,"line":17086},[30,61519,61458],{"class":321},[30,61521,57951],{"class":36},[30,61523,322],{"class":321},[30,61525,61526],{"class":74},"'blur'",[30,61528,12617],{"class":321},[30,61530,54587],{"class":317},[30,61532,54590],{"class":321},[30,61534,61535,61537,61539],{"class":32,"line":17091},[30,61536,61481],{"class":321},[30,61538,367],{"class":317},[30,61540,61541],{"class":74}," 'none'\n",[30,61543,61544,61546,61548,61550,61552],{"class":32,"line":17096},[30,61545,61496],{"class":321},[30,61547,57144],{"class":36},[30,61549,322],{"class":321},[30,61551,61503],{"class":74},[30,61553,328],{"class":321},[30,61555,61556],{"class":32,"line":17109},[30,61557,61510],{"class":321},[30,61559,61560,61562,61564],{"class":32,"line":17114},[30,61561,51914],{"class":321},[30,61563,51951],{"class":51438},[30,61565,51445],{"class":321},[30,61567,61568,61570,61572],{"class":32,"line":32771},[30,61569,51923],{"class":321},[30,61571,51938],{"class":51438},[30,61573,51445],{"class":321},[30,61575,61576],{"class":32,"line":32777},[30,61577,2582],{"emptyLinePlaceholder":245},[30,61579,61580,61582,61584],{"class":32,"line":32783},[30,61581,51923],{"class":321},[30,61583,50773],{"class":51438},[30,61585,51445],{"class":321},[22180,61587,61589],{"id":61588},"_3253-键盘事件","3.2.5.3 键盘事件",[157,61591,61592],{},"评论字数统计案例",[157,61594,61595],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[157,61597,61598],{},"牢记focus伪类选择器",[51482,61600],{"charSet":61601},"UTF-8",[51482,61603],{"name":61604,"content":61605},"viewport","width=device-width, initial-scale=1.0",[51545,61607,61608],{},"Document",[234,61610,61611],{},"\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",[53959,61613],{"type":5369},[147,61615,61616,61619],{},[150,61617,61618],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[150,61620,61621],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[20,61623,61625],{"className":50771,"code":61624,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>评论回车发布\u003C\u002Ftitle>\n  \u003Cstyle>\n    .wrapper {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .avatar {\n      width: 48px;\n      height: 48px;\n      border-radius: 50%;\n      overflow: hidden;\n      background: url(...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg) no-repeat center \u002F cover;\n      margin-right: 20px;\n    }\n\n    .wrapper textarea {\n      outline: none;\n      border-color: transparent;\n      resize: none;\n      background: #f5f5f5;\n      border-radius: 4px;\n      flex: 1;\n      padding: 10px;\n      transition: all 0.5s;\n      height: 30px;\n    }\n\n    .wrapper textarea:focus {\n      border-color: #e4e4e4;\n      background: #fff;\n      height: 50px;\n    }\n\n    .wrapper button {\n      background: #00aeec;\n      color: #fff;\n      border: none;\n      border-radius: 4px;\n      margin-left: 10px;\n      width: 70px;\n      cursor: pointer;\n    }\n\n    .wrapper .total {\n      margin-right: 80px;\n      color: #999;\n      margin-top: 5px;\n      opacity: 0;\n      transition: all 0.5s;\n    }\n\n    .list {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n    }\n\n    .list .item {\n      width: 100%;\n      display: flex;\n    }\n\n    .list .item .info {\n      flex: 1;\n      border-bottom: 1px dashed #e4e4e4;\n      padding-bottom: 10px;\n    }\n\n    .list .item p {\n      margin: 0;\n    }\n\n    .list .item .name {\n      color: #FB7299;\n      font-size: 14px;\n      font-weight: bold;\n    }\n\n    .list .item .text {\n      color: #333;\n      padding: 10px 0;\n    }\n\n    .list .item .time {\n      color: #999;\n      font-size: 12px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"wrapper\">\n    \u003Ci class=\"avatar\">\u003C\u002Fi>\n    \u003Ctextarea id=\"tx\" placeholder=\"发一条友善的评论\" rows=\"2\" maxlength=\"200\">\u003C\u002Ftextarea>\n    \u003Cbutton>发布\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"wrapper\">\n    \u003Cspan class=\"total\">0\u002F200字\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003Cdiv class=\"item\" style=\"display: none;\">\n      \u003Ci class=\"avatar\">\u003C\u002Fi>\n      \u003Cdiv class=\"info\">\n        \u003Cp class=\"name\">清风徐来\u003C\u002Fp>\n        \u003Cp class=\"text\">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002Fp>\n        \u003Cp class=\"time\">2022-10-10 20:29:21\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const tx = document.querySelector('#tx')\n    const total = document.querySelector('.total')\n    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n    tx.addEventListener('focus', function () {\n      total.style.opacity = 1\n    })\n    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n    tx.addEventListener('blur', function () {\n      total.style.opacity = 0\n    })\n    \u002F\u002F 3. 检测用户输入\n    tx.addEventListener('input', function () {\n      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n      total.innerHTML = `${tx.value.length}\u002F200字`\n    })\n\n    \u002F\u002F const str = 'andy'\n    \u002F\u002F console.log(str.length)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,61626,61627,61637,61651,61655,61663,61677,61697,61717,61730,61738,61745,61758,61772,61782,61792,61796,61800,61807,61819,61831,61843,61855,61884,61897,61901,61905,61914,61925,61937,61948,61959,61971,61982,61994,62010,62022,62026,62030,62041,62052,62062,62074,62078,62082,62090,62101,62111,62122,62134,62147,62159,62171,62175,62179,62188,62200,62211,62224,62235,62249,62253,62257,62264,62276,62288,62298,62302,62306,62315,62327,62337,62341,62345,62356,62366,62385,62398,62402,62406,62416,62426,62430,62434,62445,62456,62468,62480,62484,62488,62499,62510,62524,62528,62532,62543,62553,62565,62569,62577,62585,62589,62597,62612,62631,62671,62684,62692,62706,62726,62734,62749,62772,62790,62805,62825,62845,62865,62873,62881,62889,62897,62917,62937,62942,62959,62968,62972,62977,62993,63001,63005,63010,63027,63032,63057,63061,63065,63070,63075,63083,63091,63095],{"__ignoreMap":25},[30,61628,61629,61631,61633,61635],{"class":32,"line":33},[30,61630,51435],{"class":321},[30,61632,51439],{"class":51438},[30,61634,51442],{"class":36},[30,61636,51445],{"class":321},[30,61638,61639,61641,61643,61645,61647,61649],{"class":32,"line":44},[30,61640,1230],{"class":321},[30,61642,50773],{"class":51438},[30,61644,51454],{"class":36},[30,61646,367],{"class":321},[30,61648,51459],{"class":74},[30,61650,51445],{"class":321},[30,61652,61653],{"class":32,"line":52},[30,61654,2582],{"emptyLinePlaceholder":245},[30,61656,61657,61659,61661],{"class":32,"line":60},[30,61658,1230],{"class":321},[30,61660,51472],{"class":51438},[30,61662,51445],{"class":321},[30,61664,61665,61667,61669,61671,61673,61675],{"class":32,"line":68},[30,61666,52282],{"class":321},[30,61668,51482],{"class":51438},[30,61670,51485],{"class":36},[30,61672,367],{"class":321},[30,61674,51490],{"class":74},[30,61676,51445],{"class":321},[30,61678,61679,61681,61683,61685,61687,61689,61691,61693,61695],{"class":32,"line":80},[30,61680,52282],{"class":321},[30,61682,51482],{"class":51438},[30,61684,51501],{"class":36},[30,61686,367],{"class":321},[30,61688,51506],{"class":74},[30,61690,51509],{"class":36},[30,61692,367],{"class":321},[30,61694,51514],{"class":74},[30,61696,51445],{"class":321},[30,61698,61699,61701,61703,61705,61707,61709,61711,61713,61715],{"class":32,"line":88},[30,61700,52282],{"class":321},[30,61702,51482],{"class":51438},[30,61704,15102],{"class":36},[30,61706,367],{"class":321},[30,61708,51529],{"class":74},[30,61710,51509],{"class":36},[30,61712,367],{"class":321},[30,61714,51536],{"class":74},[30,61716,51445],{"class":321},[30,61718,61719,61721,61723,61726,61728],{"class":32,"line":96},[30,61720,52282],{"class":321},[30,61722,51545],{"class":51438},[30,61724,61725],{"class":321},">评论回车发布\u003C\u002F",[30,61727,51545],{"class":51438},[30,61729,51445],{"class":321},[30,61731,61732,61734,61736],{"class":32,"line":104},[30,61733,52282],{"class":321},[30,61735,234],{"class":51438},[30,61737,51445],{"class":321},[30,61739,61740,61743],{"class":32,"line":112},[30,61741,61742],{"class":36},"    .wrapper",[30,61744,15754],{"class":321},[30,61746,61747,61750,61752,61754,61756],{"class":32,"line":123},[30,61748,61749],{"class":40},"      min-width",[30,61751,51575],{"class":321},[30,61753,4169],{"class":40},[30,61755,51630],{"class":317},[30,61757,1480],{"class":321},[30,61759,61760,61763,61765,61768,61770],{"class":32,"line":131},[30,61761,61762],{"class":40},"      max-width",[30,61764,51575],{"class":321},[30,61766,61767],{"class":40},"800",[30,61769,51630],{"class":317},[30,61771,1480],{"class":321},[30,61773,61774,61776,61778,61780],{"class":32,"line":142},[30,61775,55147],{"class":40},[30,61777,51575],{"class":321},[30,61779,51615],{"class":40},[30,61781,1480],{"class":321},[30,61783,61784,61786,61788,61790],{"class":32,"line":1811},[30,61785,55158],{"class":40},[30,61787,51575],{"class":321},[30,61789,51718],{"class":40},[30,61791,1480],{"class":321},[30,61793,61794],{"class":32,"line":1825},[30,61795,2369],{"class":321},[30,61797,61798],{"class":32,"line":1830},[30,61799,2582],{"emptyLinePlaceholder":245},[30,61801,61802,61805],{"class":32,"line":1836},[30,61803,61804],{"class":36},"    .avatar",[30,61806,15754],{"class":321},[30,61808,61809,61811,61813,61815,61817],{"class":32,"line":1857},[30,61810,54909],{"class":40},[30,61812,51575],{"class":321},[30,61814,927],{"class":40},[30,61816,51630],{"class":317},[30,61818,1480],{"class":321},[30,61820,61821,61823,61825,61827,61829],{"class":32,"line":1862},[30,61822,54923],{"class":40},[30,61824,51575],{"class":321},[30,61826,927],{"class":40},[30,61828,51630],{"class":317},[30,61830,1480],{"class":321},[30,61832,61833,61835,61837,61839,61841],{"class":32,"line":1876},[30,61834,55272],{"class":40},[30,61836,51575],{"class":321},[30,61838,976],{"class":40},[30,61840,648],{"class":317},[30,61842,1480],{"class":321},[30,61844,61845,61848,61850,61853],{"class":32,"line":1881},[30,61846,61847],{"class":40},"      overflow",[30,61849,51575],{"class":321},[30,61851,61852],{"class":40},"hidden",[30,61854,1480],{"class":321},[30,61856,61857,61860,61862,61865,61867,61870,61872,61875,61877,61879,61882],{"class":32,"line":1910},[30,61858,61859],{"class":40},"      background",[30,61861,51575],{"class":321},[30,61863,61864],{"class":40},"url",[30,61866,322],{"class":321},[30,61868,61869],{"class":5398},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[30,61871,13896],{"class":321},[30,61873,61874],{"class":40},"no-repeat",[30,61876,17326],{"class":40},[30,61878,25151],{"class":321},[30,61880,61881],{"class":40},"cover",[30,61883,1480],{"class":321},[30,61885,61886,61889,61891,61893,61895],{"class":32,"line":1915},[30,61887,61888],{"class":40},"      margin-right",[30,61890,51575],{"class":321},[30,61892,1020],{"class":40},[30,61894,51630],{"class":317},[30,61896,1480],{"class":321},[30,61898,61899],{"class":32,"line":1932},[30,61900,2369],{"class":321},[30,61902,61903],{"class":32,"line":1937},[30,61904,2582],{"emptyLinePlaceholder":245},[30,61906,61907,61909,61912],{"class":32,"line":1942},[30,61908,61742],{"class":36},[30,61910,61911],{"class":51438}," textarea",[30,61913,15754],{"class":321},[30,61915,61916,61919,61921,61923],{"class":32,"line":1947},[30,61917,61918],{"class":40},"      outline",[30,61920,51575],{"class":321},[30,61922,54875],{"class":40},[30,61924,1480],{"class":321},[30,61926,61927,61930,61932,61935],{"class":32,"line":1961},[30,61928,61929],{"class":40},"      border-color",[30,61931,51575],{"class":321},[30,61933,61934],{"class":40},"transparent",[30,61936,1480],{"class":321},[30,61938,61939,61942,61944,61946],{"class":32,"line":1966},[30,61940,61941],{"class":40},"      resize",[30,61943,51575],{"class":321},[30,61945,54875],{"class":40},[30,61947,1480],{"class":321},[30,61949,61950,61952,61954,61957],{"class":32,"line":2759},[30,61951,61859],{"class":40},[30,61953,51575],{"class":321},[30,61955,61956],{"class":40},"#f5f5f5",[30,61958,1480],{"class":321},[30,61960,61961,61963,61965,61967,61969],{"class":32,"line":2773},[30,61962,55272],{"class":40},[30,61964,51575],{"class":321},[30,61966,613],{"class":40},[30,61968,51630],{"class":317},[30,61970,1480],{"class":321},[30,61972,61973,61976,61978,61980],{"class":32,"line":2781},[30,61974,61975],{"class":40},"      flex",[30,61977,51575],{"class":321},[30,61979,537],{"class":40},[30,61981,1480],{"class":321},[30,61983,61984,61986,61988,61990,61992],{"class":32,"line":2786},[30,61985,54833],{"class":40},[30,61987,51575],{"class":321},[30,61989,766],{"class":40},[30,61991,51630],{"class":317},[30,61993,1480],{"class":321},[30,61995,61996,61999,62001,62003,62006,62008],{"class":32,"line":2792},[30,61997,61998],{"class":40},"      transition",[30,62000,51575],{"class":321},[30,62002,28259],{"class":40},[30,62004,62005],{"class":40}," 0.5",[30,62007,1015],{"class":317},[30,62009,1480],{"class":321},[30,62011,62012,62014,62016,62018,62020],{"class":32,"line":2798},[30,62013,54923],{"class":40},[30,62015,51575],{"class":321},[30,62017,1271],{"class":40},[30,62019,51630],{"class":317},[30,62021,1480],{"class":321},[30,62023,62024],{"class":32,"line":2803},[30,62025,2369],{"class":321},[30,62027,62028],{"class":32,"line":8130},[30,62029,2582],{"emptyLinePlaceholder":245},[30,62031,62032,62034,62036,62039],{"class":32,"line":8154},[30,62033,61742],{"class":36},[30,62035,61911],{"class":51438},[30,62037,62038],{"class":36},":focus",[30,62040,15754],{"class":321},[30,62042,62043,62045,62047,62050],{"class":32,"line":8159},[30,62044,61929],{"class":40},[30,62046,51575],{"class":321},[30,62048,62049],{"class":40},"#e4e4e4",[30,62051,1480],{"class":321},[30,62053,62054,62056,62058,62060],{"class":32,"line":8165},[30,62055,61859],{"class":40},[30,62057,51575],{"class":321},[30,62059,60980],{"class":40},[30,62061,1480],{"class":321},[30,62063,62064,62066,62068,62070,62072],{"class":32,"line":8192},[30,62065,54923],{"class":40},[30,62067,51575],{"class":321},[30,62069,976],{"class":40},[30,62071,51630],{"class":317},[30,62073,1480],{"class":321},[30,62075,62076],{"class":32,"line":8197},[30,62077,2369],{"class":321},[30,62079,62080],{"class":32,"line":8203},[30,62081,2582],{"emptyLinePlaceholder":245},[30,62083,62084,62086,62088],{"class":32,"line":8215},[30,62085,61742],{"class":36},[30,62087,57605],{"class":51438},[30,62089,15754],{"class":321},[30,62091,62092,62094,62096,62099],{"class":32,"line":8227},[30,62093,61859],{"class":40},[30,62095,51575],{"class":321},[30,62097,62098],{"class":40},"#00aeec",[30,62100,1480],{"class":321},[30,62102,62103,62105,62107,62109],{"class":32,"line":8239},[30,62104,57554],{"class":40},[30,62106,51575],{"class":321},[30,62108,60980],{"class":40},[30,62110,1480],{"class":321},[30,62112,62113,62116,62118,62120],{"class":32,"line":9898},[30,62114,62115],{"class":40},"      border",[30,62117,51575],{"class":321},[30,62119,54875],{"class":40},[30,62121,1480],{"class":321},[30,62123,62124,62126,62128,62130,62132],{"class":32,"line":9923},[30,62125,55272],{"class":40},[30,62127,51575],{"class":321},[30,62129,613],{"class":40},[30,62131,51630],{"class":317},[30,62133,1480],{"class":321},[30,62135,62136,62139,62141,62143,62145],{"class":32,"line":9946},[30,62137,62138],{"class":40},"      margin-left",[30,62140,51575],{"class":321},[30,62142,766],{"class":40},[30,62144,51630],{"class":317},[30,62146,1480],{"class":321},[30,62148,62149,62151,62153,62155,62157],{"class":32,"line":9970},[30,62150,54909],{"class":40},[30,62152,51575],{"class":321},[30,62154,676],{"class":40},[30,62156,51630],{"class":317},[30,62158,1480],{"class":321},[30,62160,62161,62164,62166,62169],{"class":32,"line":9975},[30,62162,62163],{"class":40},"      cursor",[30,62165,51575],{"class":321},[30,62167,62168],{"class":40},"pointer",[30,62170,1480],{"class":321},[30,62172,62173],{"class":32,"line":9980},[30,62174,2369],{"class":321},[30,62176,62177],{"class":32,"line":9985},[30,62178,2582],{"emptyLinePlaceholder":245},[30,62180,62181,62183,62186],{"class":32,"line":9994},[30,62182,61742],{"class":36},[30,62184,62185],{"class":36}," .total",[30,62187,15754],{"class":321},[30,62189,62190,62192,62194,62196,62198],{"class":32,"line":9999},[30,62191,61888],{"class":40},[30,62193,51575],{"class":321},[30,62195,932],{"class":40},[30,62197,51630],{"class":317},[30,62199,1480],{"class":321},[30,62201,62202,62204,62206,62209],{"class":32,"line":10005},[30,62203,57554],{"class":40},[30,62205,51575],{"class":321},[30,62207,62208],{"class":40},"#999",[30,62210,1480],{"class":321},[30,62212,62213,62216,62218,62220,62222],{"class":32,"line":10026},[30,62214,62215],{"class":40},"      margin-top",[30,62217,51575],{"class":321},[30,62219,639],{"class":40},[30,62221,51630],{"class":317},[30,62223,1480],{"class":321},[30,62225,62226,62229,62231,62233],{"class":32,"line":10032},[30,62227,62228],{"class":40},"      opacity",[30,62230,51575],{"class":321},[30,62232,511],{"class":40},[30,62234,1480],{"class":321},[30,62236,62237,62239,62241,62243,62245,62247],{"class":32,"line":10046},[30,62238,61998],{"class":40},[30,62240,51575],{"class":321},[30,62242,28259],{"class":40},[30,62244,62005],{"class":40},[30,62246,1015],{"class":317},[30,62248,1480],{"class":321},[30,62250,62251],{"class":32,"line":10052},[30,62252,2369],{"class":321},[30,62254,62255],{"class":32,"line":10079},[30,62256,2582],{"emptyLinePlaceholder":245},[30,62258,62259,62262],{"class":32,"line":10088},[30,62260,62261],{"class":36},"    .list",[30,62263,15754],{"class":321},[30,62265,62266,62268,62270,62272,62274],{"class":32,"line":10094},[30,62267,61749],{"class":40},[30,62269,51575],{"class":321},[30,62271,4169],{"class":40},[30,62273,51630],{"class":317},[30,62275,1480],{"class":321},[30,62277,62278,62280,62282,62284,62286],{"class":32,"line":10102},[30,62279,61762],{"class":40},[30,62281,51575],{"class":321},[30,62283,61767],{"class":40},[30,62285,51630],{"class":317},[30,62287,1480],{"class":321},[30,62289,62290,62292,62294,62296],{"class":32,"line":10107},[30,62291,55147],{"class":40},[30,62293,51575],{"class":321},[30,62295,51615],{"class":40},[30,62297,1480],{"class":321},[30,62299,62300],{"class":32,"line":16786},[30,62301,2369],{"class":321},[30,62303,62304],{"class":32,"line":16792},[30,62305,2582],{"emptyLinePlaceholder":245},[30,62307,62308,62310,62313],{"class":32,"line":16815},[30,62309,62261],{"class":36},[30,62311,62312],{"class":36}," .item",[30,62314,15754],{"class":321},[30,62316,62317,62319,62321,62323,62325],{"class":32,"line":16821},[30,62318,54909],{"class":40},[30,62320,51575],{"class":321},[30,62322,631],{"class":40},[30,62324,648],{"class":317},[30,62326,1480],{"class":321},[30,62328,62329,62331,62333,62335],{"class":32,"line":16844},[30,62330,55147],{"class":40},[30,62332,51575],{"class":321},[30,62334,51615],{"class":40},[30,62336,1480],{"class":321},[30,62338,62339],{"class":32,"line":16858},[30,62340,2369],{"class":321},[30,62342,62343],{"class":32,"line":16878},[30,62344,2582],{"emptyLinePlaceholder":245},[30,62346,62347,62349,62351,62354],{"class":32,"line":16884},[30,62348,62261],{"class":36},[30,62350,62312],{"class":36},[30,62352,62353],{"class":36}," .info",[30,62355,15754],{"class":321},[30,62357,62358,62360,62362,62364],{"class":32,"line":16895},[30,62359,61975],{"class":40},[30,62361,51575],{"class":321},[30,62363,537],{"class":40},[30,62365,1480],{"class":321},[30,62367,62368,62371,62373,62375,62377,62380,62383],{"class":32,"line":16918},[30,62369,62370],{"class":40},"      border-bottom",[30,62372,51575],{"class":321},[30,62374,537],{"class":40},[30,62376,51630],{"class":317},[30,62378,62379],{"class":40}," dashed",[30,62381,62382],{"class":40}," #e4e4e4",[30,62384,1480],{"class":321},[30,62386,62387,62390,62392,62394,62396],{"class":32,"line":16940},[30,62388,62389],{"class":40},"      padding-bottom",[30,62391,51575],{"class":321},[30,62393,766],{"class":40},[30,62395,51630],{"class":317},[30,62397,1480],{"class":321},[30,62399,62400],{"class":32,"line":16945},[30,62401,2369],{"class":321},[30,62403,62404],{"class":32,"line":16951},[30,62405,2582],{"emptyLinePlaceholder":245},[30,62407,62408,62410,62412,62414],{"class":32,"line":16965},[30,62409,62261],{"class":36},[30,62411,62312],{"class":36},[30,62413,7007],{"class":51438},[30,62415,15754],{"class":321},[30,62417,62418,62420,62422,62424],{"class":32,"line":16978},[30,62419,54844],{"class":40},[30,62421,51575],{"class":321},[30,62423,511],{"class":40},[30,62425,1480],{"class":321},[30,62427,62428],{"class":32,"line":16983},[30,62429,2369],{"class":321},[30,62431,62432],{"class":32,"line":16997},[30,62433,2582],{"emptyLinePlaceholder":245},[30,62435,62436,62438,62440,62443],{"class":32,"line":17002},[30,62437,62261],{"class":36},[30,62439,62312],{"class":36},[30,62441,62442],{"class":36}," .name",[30,62444,15754],{"class":321},[30,62446,62447,62449,62451,62454],{"class":32,"line":17008},[30,62448,57554],{"class":40},[30,62450,51575],{"class":321},[30,62452,62453],{"class":40},"#FB7299",[30,62455,1480],{"class":321},[30,62457,62458,62460,62462,62464,62466],{"class":32,"line":17013},[30,62459,55060],{"class":40},[30,62461,51575],{"class":321},[30,62463,869],{"class":40},[30,62465,51630],{"class":317},[30,62467,1480],{"class":321},[30,62469,62470,62473,62475,62478],{"class":32,"line":17027},[30,62471,62472],{"class":40},"      font-weight",[30,62474,51575],{"class":321},[30,62476,62477],{"class":40},"bold",[30,62479,1480],{"class":321},[30,62481,62482],{"class":32,"line":17032},[30,62483,2369],{"class":321},[30,62485,62486],{"class":32,"line":17037},[30,62487,2582],{"emptyLinePlaceholder":245},[30,62489,62490,62492,62494,62497],{"class":32,"line":17051},[30,62491,62261],{"class":36},[30,62493,62312],{"class":36},[30,62495,62496],{"class":36}," .text",[30,62498,15754],{"class":321},[30,62500,62501,62503,62505,62508],{"class":32,"line":17063},[30,62502,57554],{"class":40},[30,62504,51575],{"class":321},[30,62506,62507],{"class":40},"#333",[30,62509,1480],{"class":321},[30,62511,62512,62514,62516,62518,62520,62522],{"class":32,"line":17068},[30,62513,54833],{"class":40},[30,62515,51575],{"class":321},[30,62517,766],{"class":40},[30,62519,51630],{"class":317},[30,62521,4275],{"class":40},[30,62523,1480],{"class":321},[30,62525,62526],{"class":32,"line":17081},[30,62527,2369],{"class":321},[30,62529,62530],{"class":32,"line":17086},[30,62531,2582],{"emptyLinePlaceholder":245},[30,62533,62534,62536,62538,62541],{"class":32,"line":17091},[30,62535,62261],{"class":36},[30,62537,62312],{"class":36},[30,62539,62540],{"class":36}," .time",[30,62542,15754],{"class":321},[30,62544,62545,62547,62549,62551],{"class":32,"line":17096},[30,62546,57554],{"class":40},[30,62548,51575],{"class":321},[30,62550,62208],{"class":40},[30,62552,1480],{"class":321},[30,62554,62555,62557,62559,62561,62563],{"class":32,"line":17109},[30,62556,55060],{"class":40},[30,62558,51575],{"class":321},[30,62560,818],{"class":40},[30,62562,51630],{"class":317},[30,62564,1480],{"class":321},[30,62566,62567],{"class":32,"line":17114},[30,62568,2369],{"class":321},[30,62570,62571,62573,62575],{"class":32,"line":32771},[30,62572,52555],{"class":321},[30,62574,234],{"class":51438},[30,62576,51445],{"class":321},[30,62578,62579,62581,62583],{"class":32,"line":32777},[30,62580,51923],{"class":321},[30,62582,51472],{"class":51438},[30,62584,51445],{"class":321},[30,62586,62587],{"class":32,"line":32783},[30,62588,2582],{"emptyLinePlaceholder":245},[30,62590,62591,62593,62595],{"class":32,"line":32789},[30,62592,1230],{"class":321},[30,62594,51938],{"class":51438},[30,62596,51445],{"class":321},[30,62598,62599,62601,62603,62605,62607,62610],{"class":32,"line":32795},[30,62600,52282],{"class":321},[30,62602,51749],{"class":51438},[30,62604,53624],{"class":36},[30,62606,367],{"class":321},[30,62608,62609],{"class":74},"\"wrapper\"",[30,62611,51445],{"class":321},[30,62613,62614,62616,62618,62620,62622,62625,62627,62629],{"class":32,"line":32806},[30,62615,51479],{"class":321},[30,62617,761],{"class":51438},[30,62619,53624],{"class":36},[30,62621,367],{"class":321},[30,62623,62624],{"class":74},"\"avatar\"",[30,62626,55452],{"class":321},[30,62628,761],{"class":51438},[30,62630,51445],{"class":321},[30,62632,62633,62635,62637,62639,62641,62644,62646,62648,62651,62653,62655,62657,62660,62662,62665,62667,62669],{"class":32,"line":32812},[30,62634,51479],{"class":321},[30,62636,54426],{"class":51438},[30,62638,15141],{"class":36},[30,62640,367],{"class":321},[30,62642,62643],{"class":74},"\"tx\"",[30,62645,61158],{"class":36},[30,62647,367],{"class":321},[30,62649,62650],{"class":74},"\"发一条友善的评论\"",[30,62652,54449],{"class":36},[30,62654,367],{"class":321},[30,62656,3883],{"class":74},[30,62658,62659],{"class":36}," maxlength",[30,62661,367],{"class":321},[30,62663,62664],{"class":74},"\"200\"",[30,62666,55452],{"class":321},[30,62668,54426],{"class":51438},[30,62670,51445],{"class":321},[30,62672,62673,62675,62677,62680,62682],{"class":32,"line":32832},[30,62674,51479],{"class":321},[30,62676,54025],{"class":51438},[30,62678,62679],{"class":321},">发布\u003C\u002F",[30,62681,54025],{"class":51438},[30,62683,51445],{"class":321},[30,62685,62686,62688,62690],{"class":32,"line":32838},[30,62687,52555],{"class":321},[30,62689,51749],{"class":51438},[30,62691,51445],{"class":321},[30,62693,62694,62696,62698,62700,62702,62704],{"class":32,"line":32849},[30,62695,52282],{"class":321},[30,62697,51749],{"class":51438},[30,62699,53624],{"class":36},[30,62701,367],{"class":321},[30,62703,62609],{"class":74},[30,62705,51445],{"class":321},[30,62707,62708,62710,62712,62714,62716,62719,62722,62724],{"class":32,"line":32855},[30,62709,51479],{"class":321},[30,62711,30],{"class":51438},[30,62713,53624],{"class":36},[30,62715,367],{"class":321},[30,62717,62718],{"class":74},"\"total\"",[30,62720,62721],{"class":321},">0\u002F200字\u003C\u002F",[30,62723,30],{"class":51438},[30,62725,51445],{"class":321},[30,62727,62728,62730,62732],{"class":32,"line":32861},[30,62729,52555],{"class":321},[30,62731,51749],{"class":51438},[30,62733,51445],{"class":321},[30,62735,62736,62738,62740,62742,62744,62747],{"class":32,"line":32867},[30,62737,52282],{"class":321},[30,62739,51749],{"class":51438},[30,62741,53624],{"class":36},[30,62743,367],{"class":321},[30,62745,62746],{"class":74},"\"list\"",[30,62748,51445],{"class":321},[30,62750,62751,62753,62755,62757,62759,62762,62765,62767,62770],{"class":32,"line":32873},[30,62752,51479],{"class":321},[30,62754,51749],{"class":51438},[30,62756,53624],{"class":36},[30,62758,367],{"class":321},[30,62760,62761],{"class":74},"\"item\"",[30,62763,62764],{"class":36}," style",[30,62766,367],{"class":321},[30,62768,62769],{"class":74},"\"display: none;\"",[30,62771,51445],{"class":321},[30,62773,62774,62776,62778,62780,62782,62784,62786,62788],{"class":32,"line":32879},[30,62775,55372],{"class":321},[30,62777,761],{"class":51438},[30,62779,53624],{"class":36},[30,62781,367],{"class":321},[30,62783,62624],{"class":74},[30,62785,55452],{"class":321},[30,62787,761],{"class":51438},[30,62789,51445],{"class":321},[30,62791,62792,62794,62796,62798,62800,62803],{"class":32,"line":32885},[30,62793,55372],{"class":321},[30,62795,51749],{"class":51438},[30,62797,53624],{"class":36},[30,62799,367],{"class":321},[30,62801,62802],{"class":74},"\"info\"",[30,62804,51445],{"class":321},[30,62806,62807,62809,62811,62813,62815,62818,62821,62823],{"class":32,"line":32891},[30,62808,55440],{"class":321},[30,62810,157],{"class":51438},[30,62812,53624],{"class":36},[30,62814,367],{"class":321},[30,62816,62817],{"class":74},"\"name\"",[30,62819,62820],{"class":321},">清风徐来\u003C\u002F",[30,62822,157],{"class":51438},[30,62824,51445],{"class":321},[30,62826,62827,62829,62831,62833,62835,62838,62841,62843],{"class":32,"line":32911},[30,62828,55440],{"class":321},[30,62830,157],{"class":51438},[30,62832,53624],{"class":36},[30,62834,367],{"class":321},[30,62836,62837],{"class":74},"\"text\"",[30,62839,62840],{"class":321},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[30,62842,157],{"class":51438},[30,62844,51445],{"class":321},[30,62846,62847,62849,62851,62853,62855,62858,62861,62863],{"class":32,"line":32917},[30,62848,55440],{"class":321},[30,62850,157],{"class":51438},[30,62852,53624],{"class":36},[30,62854,367],{"class":321},[30,62856,62857],{"class":74},"\"time\"",[30,62859,62860],{"class":321},">2022-10-10 20:29:21\u003C\u002F",[30,62862,157],{"class":51438},[30,62864,51445],{"class":321},[30,62866,62867,62869,62871],{"class":32,"line":32933},[30,62868,55545],{"class":321},[30,62870,51749],{"class":51438},[30,62872,51445],{"class":321},[30,62874,62875,62877,62879],{"class":32,"line":32939},[30,62876,51914],{"class":321},[30,62878,51749],{"class":51438},[30,62880,51445],{"class":321},[30,62882,62883,62885,62887],{"class":32,"line":32953},[30,62884,52555],{"class":321},[30,62886,51749],{"class":51438},[30,62888,51445],{"class":321},[30,62890,62891,62893,62895],{"class":32,"line":32959},[30,62892,52282],{"class":321},[30,62894,51951],{"class":51438},[30,62896,51445],{"class":321},[30,62898,62899,62901,62904,62906,62908,62910,62912,62915],{"class":32,"line":32974},[30,62900,11403],{"class":317},[30,62902,62903],{"class":40}," tx",[30,62905,13746],{"class":317},[30,62907,54534],{"class":321},[30,62909,54537],{"class":36},[30,62911,322],{"class":321},[30,62913,62914],{"class":74},"'#tx'",[30,62916,328],{"class":321},[30,62918,62919,62921,62924,62926,62928,62930,62932,62935],{"class":32,"line":32980},[30,62920,11403],{"class":317},[30,62922,62923],{"class":40}," total",[30,62925,13746],{"class":317},[30,62927,54534],{"class":321},[30,62929,54537],{"class":36},[30,62931,322],{"class":321},[30,62933,62934],{"class":74},"'.total'",[30,62936,328],{"class":321},[30,62938,62939],{"class":32,"line":32989},[30,62940,62941],{"class":379},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[30,62943,62944,62947,62949,62951,62953,62955,62957],{"class":32,"line":32995},[30,62945,62946],{"class":321},"    tx.",[30,62948,57951],{"class":36},[30,62950,322],{"class":321},[30,62952,61465],{"class":74},[30,62954,12617],{"class":321},[30,62956,54587],{"class":317},[30,62958,54590],{"class":321},[30,62960,62961,62964,62966],{"class":32,"line":33004},[30,62962,62963],{"class":321},"      total.style.opacity ",[30,62965,367],{"class":317},[30,62967,55837],{"class":40},[30,62969,62970],{"class":32,"line":33010},[30,62971,33599],{"class":321},[30,62973,62974],{"class":32,"line":33016},[30,62975,62976],{"class":379},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[30,62978,62979,62981,62983,62985,62987,62989,62991],{"class":32,"line":33025},[30,62980,62946],{"class":321},[30,62982,57951],{"class":36},[30,62984,322],{"class":321},[30,62986,61526],{"class":74},[30,62988,12617],{"class":321},[30,62990,54587],{"class":317},[30,62992,54590],{"class":321},[30,62994,62995,62997,62999],{"class":32,"line":33031},[30,62996,62963],{"class":321},[30,62998,367],{"class":317},[30,63000,47471],{"class":40},[30,63002,63003],{"class":32,"line":33042},[30,63004,33599],{"class":321},[30,63006,63007],{"class":32,"line":33048},[30,63008,63009],{"class":379},"    \u002F\u002F 3. 检测用户输入\n",[30,63011,63012,63014,63016,63018,63021,63023,63025],{"class":32,"line":33067},[30,63013,62946],{"class":321},[30,63015,57951],{"class":36},[30,63017,322],{"class":321},[30,63019,63020],{"class":74},"'input'",[30,63022,12617],{"class":321},[30,63024,54587],{"class":317},[30,63026,54590],{"class":321},[30,63028,63029],{"class":32,"line":33073},[30,63030,63031],{"class":379},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[30,63033,63034,63037,63039,63042,63045,63047,63050,63052,63054],{"class":32,"line":33084},[30,63035,63036],{"class":321},"      total.innerHTML ",[30,63038,367],{"class":317},[30,63040,63041],{"class":74}," `${",[30,63043,63044],{"class":321},"tx",[30,63046,878],{"class":74},[30,63048,63049],{"class":321},"value",[30,63051,878],{"class":74},[30,63053,52106],{"class":40},[30,63055,63056],{"class":74},"}\u002F200字`\n",[30,63058,63059],{"class":32,"line":33090},[30,63060,33599],{"class":321},[30,63062,63063],{"class":32,"line":33110},[30,63064,2582],{"emptyLinePlaceholder":245},[30,63066,63067],{"class":32,"line":33126},[30,63068,63069],{"class":379},"    \u002F\u002F const str = 'andy'\n",[30,63071,63072],{"class":32,"line":33132},[30,63073,63074],{"class":379},"    \u002F\u002F console.log(str.length)\n",[30,63076,63077,63079,63081],{"class":32,"line":33146},[30,63078,52555],{"class":321},[30,63080,51951],{"class":51438},[30,63082,51445],{"class":321},[30,63084,63085,63087,63089],{"class":32,"line":33152},[30,63086,51923],{"class":321},[30,63088,51938],{"class":51438},[30,63090,51445],{"class":321},[30,63092,63093],{"class":32,"line":33158},[30,63094,2582],{"emptyLinePlaceholder":245},[30,63096,63097,63099,63101],{"class":32,"line":33169},[30,63098,51923],{"class":321},[30,63100,50773],{"class":51438},[30,63102,51445],{"class":321},[22180,63104,63106],{"id":63105},"_3254-change事件","3.2.5.4 change事件",[157,63108,63109],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[157,63111,63112],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[157,63114,63115],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[20,63117,63119],{"className":50771,"code":63118,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    const input = document.querySelector('input')\n    input.addEventListener('change', function () {\n      console.log(111)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,63120,63121,63131,63145,63149,63157,63171,63191,63203,63211,63215,63223,63237,63245,63263,63281,63293,63297,63305,63313,63317],{"__ignoreMap":25},[30,63122,63123,63125,63127,63129],{"class":32,"line":33},[30,63124,51435],{"class":321},[30,63126,51439],{"class":51438},[30,63128,51442],{"class":36},[30,63130,51445],{"class":321},[30,63132,63133,63135,63137,63139,63141,63143],{"class":32,"line":44},[30,63134,1230],{"class":321},[30,63136,50773],{"class":51438},[30,63138,51454],{"class":36},[30,63140,367],{"class":321},[30,63142,51459],{"class":74},[30,63144,51445],{"class":321},[30,63146,63147],{"class":32,"line":52},[30,63148,2582],{"emptyLinePlaceholder":245},[30,63150,63151,63153,63155],{"class":32,"line":60},[30,63152,1230],{"class":321},[30,63154,51472],{"class":51438},[30,63156,51445],{"class":321},[30,63158,63159,63161,63163,63165,63167,63169],{"class":32,"line":68},[30,63160,52282],{"class":321},[30,63162,51482],{"class":51438},[30,63164,51485],{"class":36},[30,63166,367],{"class":321},[30,63168,51490],{"class":74},[30,63170,51445],{"class":321},[30,63172,63173,63175,63177,63179,63181,63183,63185,63187,63189],{"class":32,"line":80},[30,63174,52282],{"class":321},[30,63176,51482],{"class":51438},[30,63178,15102],{"class":36},[30,63180,367],{"class":321},[30,63182,51529],{"class":74},[30,63184,51509],{"class":36},[30,63186,367],{"class":321},[30,63188,51536],{"class":74},[30,63190,51445],{"class":321},[30,63192,63193,63195,63197,63199,63201],{"class":32,"line":88},[30,63194,52282],{"class":321},[30,63196,51545],{"class":51438},[30,63198,51548],{"class":321},[30,63200,51545],{"class":51438},[30,63202,51445],{"class":321},[30,63204,63205,63207,63209],{"class":32,"line":96},[30,63206,51923],{"class":321},[30,63208,51472],{"class":51438},[30,63210,51445],{"class":321},[30,63212,63213],{"class":32,"line":104},[30,63214,2582],{"emptyLinePlaceholder":245},[30,63216,63217,63219,63221],{"class":32,"line":112},[30,63218,1230],{"class":321},[30,63220,51938],{"class":51438},[30,63222,51445],{"class":321},[30,63224,63225,63227,63229,63231,63233,63235],{"class":32,"line":123},[30,63226,52282],{"class":321},[30,63228,53959],{"class":51438},[30,63230,53962],{"class":36},[30,63232,367],{"class":321},[30,63234,62837],{"class":74},[30,63236,51445],{"class":321},[30,63238,63239,63241,63243],{"class":32,"line":131},[30,63240,52282],{"class":321},[30,63242,51951],{"class":51438},[30,63244,51445],{"class":321},[30,63246,63247,63249,63251,63253,63255,63257,63259,63261],{"class":32,"line":142},[30,63248,11403],{"class":317},[30,63250,60743],{"class":40},[30,63252,13746],{"class":317},[30,63254,54534],{"class":321},[30,63256,54537],{"class":36},[30,63258,322],{"class":321},[30,63260,63020],{"class":74},[30,63262,328],{"class":321},[30,63264,63265,63268,63270,63272,63275,63277,63279],{"class":32,"line":1811},[30,63266,63267],{"class":321},"    input.",[30,63269,57951],{"class":36},[30,63271,322],{"class":321},[30,63273,63274],{"class":74},"'change'",[30,63276,12617],{"class":321},[30,63278,54587],{"class":317},[30,63280,54590],{"class":321},[30,63282,63283,63285,63287,63289,63291],{"class":32,"line":1825},[30,63284,58382],{"class":321},[30,63286,58385],{"class":36},[30,63288,322],{"class":321},[30,63290,913],{"class":40},[30,63292,328],{"class":321},[30,63294,63295],{"class":32,"line":1830},[30,63296,33599],{"class":321},[30,63298,63299,63301,63303],{"class":32,"line":1836},[30,63300,52555],{"class":321},[30,63302,51951],{"class":51438},[30,63304,51445],{"class":321},[30,63306,63307,63309,63311],{"class":32,"line":1857},[30,63308,51923],{"class":321},[30,63310,51938],{"class":51438},[30,63312,51445],{"class":321},[30,63314,63315],{"class":32,"line":1862},[30,63316,2582],{"emptyLinePlaceholder":245},[30,63318,63319,63321,63323],{"class":32,"line":1876},[30,63320,51923],{"class":321},[30,63322,50773],{"class":51438},[30,63324,51445],{"class":321},[157,63326,63327],{},"总结：内容发生改变才回去触发",[287,63329,63331],{"id":63330},"_326-事件对象","3.2.6 事件对象",[22180,63333,63335],{"id":63334},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[157,63337,63338],{},[160,63339],{"alt":25,"src":63340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[157,63342,63343],{},[160,63344],{"alt":25,"src":63345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[157,63347,63348],{},"点击一次，就输出了事件对象，它是个对象",[157,63350,63351],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[157,63353,63354],{},[160,63355],{"alt":25,"src":63356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22180,63358,63360],{"id":63359},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[157,63362,63363],{},[160,63364],{"alt":25,"src":63365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[157,63367,63368],{},"实现按特殊字符才是实现打印输出效果：",[20,63370,63372],{"className":53205,"code":63371,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    \u002F\u002F const btn = document.querySelector('button')\n    \u002F\u002F btn.addEventListener('click', function (e) {\n    \u002F\u002F   console.log(e);\n    \u002F\u002F })\n    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n    const input = document.querySelector('input')\n    input.addEventListener('keyup', function (e) {\n      if (e.key === 'Enter') {\n        console.log('我按下了回车键')\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,63373,63374,63382,63387,63401,63409,63414,63419,63424,63429,63434,63439,63444,63449,63454,63458,63462,63470],{"__ignoreMap":25},[30,63375,63376,63378,63380],{"class":32,"line":33},[30,63377,1230],{"class":321},[30,63379,51938],{"class":51438},[30,63381,51445],{"class":321},[30,63383,63384],{"class":32,"line":44},[30,63385,63386],{"class":379},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[30,63388,63389,63391,63393,63395,63397,63399],{"class":32,"line":52},[30,63390,52282],{"class":321},[30,63392,53959],{"class":51438},[30,63394,53962],{"class":36},[30,63396,367],{"class":321},[30,63398,62837],{"class":74},[30,63400,51445],{"class":321},[30,63402,63403,63405,63407],{"class":32,"line":60},[30,63404,52282],{"class":321},[30,63406,51951],{"class":51438},[30,63408,51445],{"class":321},[30,63410,63411],{"class":32,"line":68},[30,63412,63413],{"class":321},"    \u002F\u002F const btn = document.querySelector('button')\n",[30,63415,63416],{"class":32,"line":80},[30,63417,63418],{"class":321},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[30,63420,63421],{"class":32,"line":88},[30,63422,63423],{"class":321},"    \u002F\u002F   console.log(e);\n",[30,63425,63426],{"class":32,"line":96},[30,63427,63428],{"class":321},"    \u002F\u002F })\n",[30,63430,63431],{"class":32,"line":104},[30,63432,63433],{"class":321},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[30,63435,63436],{"class":32,"line":112},[30,63437,63438],{"class":321},"    const input = document.querySelector('input')\n",[30,63440,63441],{"class":32,"line":123},[30,63442,63443],{"class":321},"    input.addEventListener('keyup', function (e) {\n",[30,63445,63446],{"class":32,"line":131},[30,63447,63448],{"class":321},"      if (e.key === 'Enter') {\n",[30,63450,63451],{"class":32,"line":142},[30,63452,63453],{"class":321},"        console.log('我按下了回车键')\n",[30,63455,63456],{"class":32,"line":1811},[30,63457,52536],{"class":321},[30,63459,63460],{"class":32,"line":1825},[30,63461,33599],{"class":321},[30,63463,63464,63466,63468],{"class":32,"line":1830},[30,63465,52555],{"class":321},[30,63467,51951],{"class":51438},[30,63469,51445],{"class":321},[30,63471,63472,63474,63476],{"class":32,"line":1836},[30,63473,51923],{"class":321},[30,63475,51938],{"class":51438},[30,63477,51445],{"class":321},[22180,63479,63481],{"id":63480},"_3263-trim方法","3.2.6.3 trim方法",[157,63483,63484],{},[160,63485],{"alt":25,"src":63486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[157,63488,63489],{},[160,63490],{"alt":25,"src":63491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[157,63493,63494],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[157,63496,63497],{},"str.trim()",[287,63499,63501],{"id":63500},"_327-环境对象","3.2.7 环境对象",[157,63503,63504],{},[160,63505],{"alt":25,"src":63506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[157,63508,63509],{},[160,63510],{"alt":25,"src":63511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[157,63513,63514],{},[160,63515],{"alt":25,"src":63516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[157,63518,63519],{},"实际函数调用是window.fn()",[157,63521,63522],{},"普通函数里面this指向的是window",[147,63524,63525,63528,63531],{},[150,63526,63527],{},"在普通函数下，this指向的是window",[150,63529,63530],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[150,63532,63533],{},"箭头函数没有this",[157,63535,63536],{},"粗略记法就是：谁调用，this就指向谁",[157,63538,63539],{},[160,63540],{"alt":25,"src":63541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[157,63543,63544],{},[160,63545],{"alt":25,"src":63546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[157,63548,63549],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[157,63551,63552],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[20,63554,63556],{"className":53205,"code":63555,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const button = document.querySelector('button')\n    button.addEventListener('click', function () {\n      \u002F\u002F console.log(this);\n      this.style.color = 'pink'\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,63557,63558,63566,63578,63586,63591,63596,63601,63606,63610,63618],{"__ignoreMap":25},[30,63559,63560,63562,63564],{"class":32,"line":33},[30,63561,1230],{"class":321},[30,63563,51938],{"class":51438},[30,63565,51445],{"class":321},[30,63567,63568,63570,63572,63574,63576],{"class":32,"line":44},[30,63569,52282],{"class":321},[30,63571,54025],{"class":51438},[30,63573,54031],{"class":321},[30,63575,54025],{"class":51438},[30,63577,51445],{"class":321},[30,63579,63580,63582,63584],{"class":32,"line":52},[30,63581,52282],{"class":321},[30,63583,51951],{"class":51438},[30,63585,51445],{"class":321},[30,63587,63588],{"class":32,"line":60},[30,63589,63590],{"class":321},"    const button = document.querySelector('button')\n",[30,63592,63593],{"class":32,"line":68},[30,63594,63595],{"class":321},"    button.addEventListener('click', function () {\n",[30,63597,63598],{"class":32,"line":80},[30,63599,63600],{"class":321},"      \u002F\u002F console.log(this);\n",[30,63602,63603],{"class":32,"line":88},[30,63604,63605],{"class":321},"      this.style.color = 'pink'\n",[30,63607,63608],{"class":32,"line":96},[30,63609,33599],{"class":321},[30,63611,63612,63614,63616],{"class":32,"line":104},[30,63613,52555],{"class":321},[30,63615,51951],{"class":51438},[30,63617,51445],{"class":321},[30,63619,63620,63622,63624],{"class":32,"line":112},[30,63621,51923],{"class":321},[30,63623,51938],{"class":51438},[30,63625,51445],{"class":321},[287,63627,63629],{"id":63628},"_328-回调函数","3.2.8 回调函数",[157,63631,63632],{},[160,63633],{"alt":25,"src":63634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[157,63636,63637],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[157,63639,11514],{},[147,63641,63642,63645,63648],{},[150,63643,63644],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[150,63646,63647],{},"回调函数本质还是函数，只不过把它当成参数使用",[150,63649,63650],{},"使用匿名函数做为回调函数比较常见",[287,63652,63654],{"id":63653},"_329-tab栏切换","3.2.9 tab栏切换",[157,63656,63657],{},[160,63658],{"alt":25,"src":63659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[20,63661,63663],{"className":50771,"code":63662,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .item.active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n    \u002F\u002F 1.1 获取 a 元素 \n    const as = document.querySelectorAll('.tab-nav a')\n    \u002F\u002F console.log(as) \n    for (let i = 0; i \u003C as.length; i++) {\n      \u002F\u002F console.log(as[i])\n      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n      as[i].addEventListener('mouseenter', function () {\n        \u002F\u002F console.log('鼠标经过')\n        \u002F\u002F 排他思想  \n        \u002F\u002F 干掉别人 移除类active\n        document.querySelector('.tab-nav .active').classList.remove('active')\n        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n        this.classList.add('active')\n\n        \u002F\u002F 下面5个大盒子 一一对应  .item \n        \u002F\u002F 干掉别人\n        document.querySelector('.tab-content .active').classList.remove('active')\n        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,63664,63665,63675,63689,63693,63701,63715,63735,63755,63768,63776,63782,63792,63802,63806,63810,63817,63830,63843,63855,63871,63875,63879,63886,63898,63910,63922,63932,63942,63946,63950,63959,63971,63982,63994,63998,64002,64010,64020,64030,64040,64044,64048,64058,64072,64084,64088,64092,64104,64115,64132,64142,64146,64150,64165,64176,64186,64190,64194,64201,64216,64220,64224,64232,64242,64246,64250,64259,64269,64273,64281,64289,64293,64301,64316,64331,64344,64352,64386,64413,64440,64467,64494,64502,64510,64525,64562,64597,64632,64667,64702,64710,64718,64726,64731,64736,64756,64761,64790,64795,64800,64818,64823,64828,64833,64855,64860,64876,64880,64885,64890,64911,64916,64945,64949,64954,64958,64966,64974,64978],{"__ignoreMap":25},[30,63666,63667,63669,63671,63673],{"class":32,"line":33},[30,63668,51435],{"class":321},[30,63670,51439],{"class":51438},[30,63672,51442],{"class":36},[30,63674,51445],{"class":321},[30,63676,63677,63679,63681,63683,63685,63687],{"class":32,"line":44},[30,63678,1230],{"class":321},[30,63680,50773],{"class":51438},[30,63682,51454],{"class":36},[30,63684,367],{"class":321},[30,63686,51459],{"class":74},[30,63688,51445],{"class":321},[30,63690,63691],{"class":32,"line":52},[30,63692,2582],{"emptyLinePlaceholder":245},[30,63694,63695,63697,63699],{"class":32,"line":60},[30,63696,1230],{"class":321},[30,63698,51472],{"class":51438},[30,63700,51445],{"class":321},[30,63702,63703,63705,63707,63709,63711,63713],{"class":32,"line":68},[30,63704,52282],{"class":321},[30,63706,51482],{"class":51438},[30,63708,51485],{"class":36},[30,63710,367],{"class":321},[30,63712,51490],{"class":74},[30,63714,59265],{"class":321},[30,63716,63717,63719,63721,63723,63725,63727,63729,63731,63733],{"class":32,"line":80},[30,63718,52282],{"class":321},[30,63720,51482],{"class":51438},[30,63722,51501],{"class":36},[30,63724,367],{"class":321},[30,63726,51506],{"class":74},[30,63728,51509],{"class":36},[30,63730,367],{"class":321},[30,63732,51514],{"class":74},[30,63734,59265],{"class":321},[30,63736,63737,63739,63741,63743,63745,63747,63749,63751,63753],{"class":32,"line":88},[30,63738,52282],{"class":321},[30,63740,51482],{"class":51438},[30,63742,15102],{"class":36},[30,63744,367],{"class":321},[30,63746,51529],{"class":74},[30,63748,51509],{"class":36},[30,63750,367],{"class":321},[30,63752,51536],{"class":74},[30,63754,59265],{"class":321},[30,63756,63757,63759,63761,63764,63766],{"class":32,"line":96},[30,63758,52282],{"class":321},[30,63760,51545],{"class":51438},[30,63762,63763],{"class":321},">tab栏切换\u003C\u002F",[30,63765,51545],{"class":51438},[30,63767,51445],{"class":321},[30,63769,63770,63772,63774],{"class":32,"line":104},[30,63771,52282],{"class":321},[30,63773,234],{"class":51438},[30,63775,51445],{"class":321},[30,63777,63778,63780],{"class":32,"line":112},[30,63779,6585],{"class":51438},[30,63781,15754],{"class":321},[30,63783,63784,63786,63788,63790],{"class":32,"line":123},[30,63785,54844],{"class":40},[30,63787,51575],{"class":321},[30,63789,511],{"class":40},[30,63791,1480],{"class":321},[30,63793,63794,63796,63798,63800],{"class":32,"line":131},[30,63795,54833],{"class":40},[30,63797,51575],{"class":321},[30,63799,511],{"class":40},[30,63801,1480],{"class":321},[30,63803,63804],{"class":32,"line":142},[30,63805,2369],{"class":321},[30,63807,63808],{"class":32,"line":1811},[30,63809,2582],{"emptyLinePlaceholder":245},[30,63811,63812,63815],{"class":32,"line":1825},[30,63813,63814],{"class":36},"    .tab",[30,63816,15754],{"class":321},[30,63818,63819,63821,63823,63826,63828],{"class":32,"line":1830},[30,63820,54909],{"class":40},[30,63822,51575],{"class":321},[30,63824,63825],{"class":40},"590",[30,63827,51630],{"class":317},[30,63829,1480],{"class":321},[30,63831,63832,63834,63836,63839,63841],{"class":32,"line":1836},[30,63833,54923],{"class":40},[30,63835,51575],{"class":321},[30,63837,63838],{"class":40},"340",[30,63840,51630],{"class":317},[30,63842,1480],{"class":321},[30,63844,63845,63847,63849,63851,63853],{"class":32,"line":1857},[30,63846,54844],{"class":40},[30,63848,51575],{"class":321},[30,63850,1020],{"class":40},[30,63852,51630],{"class":317},[30,63854,1480],{"class":321},[30,63856,63857,63859,63861,63863,63865,63867,63869],{"class":32,"line":1862},[30,63858,62115],{"class":40},[30,63860,51575],{"class":321},[30,63862,537],{"class":40},[30,63864,51630],{"class":317},[30,63866,51659],{"class":40},[30,63868,62382],{"class":40},[30,63870,1480],{"class":321},[30,63872,63873],{"class":32,"line":1876},[30,63874,2369],{"class":321},[30,63876,63877],{"class":32,"line":1881},[30,63878,2582],{"emptyLinePlaceholder":245},[30,63880,63881,63884],{"class":32,"line":1910},[30,63882,63883],{"class":36},"    .tab-nav",[30,63885,15754],{"class":321},[30,63887,63888,63890,63892,63894,63896],{"class":32,"line":1915},[30,63889,54909],{"class":40},[30,63891,51575],{"class":321},[30,63893,631],{"class":40},[30,63895,648],{"class":317},[30,63897,1480],{"class":321},[30,63899,63900,63902,63904,63906,63908],{"class":32,"line":1932},[30,63901,54923],{"class":40},[30,63903,51575],{"class":321},[30,63905,1227],{"class":40},[30,63907,51630],{"class":317},[30,63909,1480],{"class":321},[30,63911,63912,63914,63916,63918,63920],{"class":32,"line":1937},[30,63913,57497],{"class":40},[30,63915,51575],{"class":321},[30,63917,1227],{"class":40},[30,63919,51630],{"class":317},[30,63921,1480],{"class":321},[30,63923,63924,63926,63928,63930],{"class":32,"line":1942},[30,63925,55147],{"class":40},[30,63927,51575],{"class":321},[30,63929,51615],{"class":40},[30,63931,1480],{"class":321},[30,63933,63934,63936,63938,63940],{"class":32,"line":1947},[30,63935,55158],{"class":40},[30,63937,51575],{"class":321},[30,63939,51806],{"class":40},[30,63941,1480],{"class":321},[30,63943,63944],{"class":32,"line":1961},[30,63945,2369],{"class":321},[30,63947,63948],{"class":32,"line":1966},[30,63949,2582],{"emptyLinePlaceholder":245},[30,63951,63952,63954,63957],{"class":32,"line":2759},[30,63953,63883],{"class":36},[30,63955,63956],{"class":51438}," h3",[30,63958,15754],{"class":321},[30,63960,63961,63963,63965,63967,63969],{"class":32,"line":2773},[30,63962,55060],{"class":40},[30,63964,51575],{"class":321},[30,63966,1120],{"class":40},[30,63968,51630],{"class":317},[30,63970,1480],{"class":321},[30,63972,63973,63975,63977,63980],{"class":32,"line":2781},[30,63974,62472],{"class":40},[30,63976,51575],{"class":321},[30,63978,63979],{"class":40},"normal",[30,63981,1480],{"class":321},[30,63983,63984,63986,63988,63990,63992],{"class":32,"line":2786},[30,63985,62138],{"class":40},[30,63987,51575],{"class":321},[30,63989,1020],{"class":40},[30,63991,51630],{"class":317},[30,63993,1480],{"class":321},[30,63995,63996],{"class":32,"line":2792},[30,63997,2369],{"class":321},[30,63999,64000],{"class":32,"line":2798},[30,64001,2582],{"emptyLinePlaceholder":245},[30,64003,64004,64006,64008],{"class":32,"line":2803},[30,64005,63883],{"class":36},[30,64007,61430],{"class":51438},[30,64009,15754],{"class":321},[30,64011,64012,64014,64016,64018],{"class":32,"line":8130},[30,64013,54870],{"class":40},[30,64015,51575],{"class":321},[30,64017,54875],{"class":40},[30,64019,1480],{"class":321},[30,64021,64022,64024,64026,64028],{"class":32,"line":8154},[30,64023,55147],{"class":40},[30,64025,51575],{"class":321},[30,64027,51615],{"class":40},[30,64029,1480],{"class":321},[30,64031,64032,64034,64036,64038],{"class":32,"line":8159},[30,64033,55158],{"class":40},[30,64035,51575],{"class":321},[30,64037,51718],{"class":40},[30,64039,1480],{"class":321},[30,64041,64042],{"class":32,"line":8165},[30,64043,2369],{"class":321},[30,64045,64046],{"class":32,"line":8192},[30,64047,2582],{"emptyLinePlaceholder":245},[30,64049,64050,64052,64054,64056],{"class":32,"line":8197},[30,64051,63883],{"class":36},[30,64053,61430],{"class":51438},[30,64055,55213],{"class":51438},[30,64057,15754],{"class":321},[30,64059,64060,64062,64064,64066,64068,64070],{"class":32,"line":8203},[30,64061,54844],{"class":40},[30,64063,51575],{"class":321},[30,64065,511],{"class":40},[30,64067,9132],{"class":40},[30,64069,51630],{"class":317},[30,64071,1480],{"class":321},[30,64073,64074,64076,64078,64080,64082],{"class":32,"line":8215},[30,64075,55060],{"class":40},[30,64077,51575],{"class":321},[30,64079,869],{"class":40},[30,64081,51630],{"class":317},[30,64083,1480],{"class":321},[30,64085,64086],{"class":32,"line":8227},[30,64087,2369],{"class":321},[30,64089,64090],{"class":32,"line":8239},[30,64091,2582],{"emptyLinePlaceholder":245},[30,64093,64094,64096,64098,64100,64102],{"class":32,"line":9898},[30,64095,63883],{"class":36},[30,64097,61430],{"class":51438},[30,64099,55213],{"class":51438},[30,64101,1585],{"class":51438},[30,64103,15754],{"class":321},[30,64105,64106,64109,64111,64113],{"class":32,"line":9923},[30,64107,64108],{"class":40},"      text-decoration",[30,64110,51575],{"class":321},[30,64112,54875],{"class":40},[30,64114,1480],{"class":321},[30,64116,64117,64119,64121,64123,64125,64127,64130],{"class":32,"line":9946},[30,64118,62370],{"class":40},[30,64120,51575],{"class":321},[30,64122,398],{"class":40},[30,64124,51630],{"class":317},[30,64126,51659],{"class":40},[30,64128,64129],{"class":40}," transparent",[30,64131,1480],{"class":321},[30,64133,64134,64136,64138,64140],{"class":32,"line":9970},[30,64135,57554],{"class":40},[30,64137,51575],{"class":321},[30,64139,62507],{"class":40},[30,64141,1480],{"class":321},[30,64143,64144],{"class":32,"line":9975},[30,64145,2369],{"class":321},[30,64147,64148],{"class":32,"line":9980},[30,64149,2582],{"emptyLinePlaceholder":245},[30,64151,64152,64154,64156,64158,64160,64163],{"class":32,"line":9985},[30,64153,63883],{"class":36},[30,64155,61430],{"class":51438},[30,64157,55213],{"class":51438},[30,64159,1585],{"class":51438},[30,64161,64162],{"class":36},".active",[30,64164,15754],{"class":321},[30,64166,64167,64169,64171,64174],{"class":32,"line":9994},[30,64168,61929],{"class":40},[30,64170,51575],{"class":321},[30,64172,64173],{"class":40},"#e1251b",[30,64175,1480],{"class":321},[30,64177,64178,64180,64182,64184],{"class":32,"line":9999},[30,64179,57554],{"class":40},[30,64181,51575],{"class":321},[30,64183,64173],{"class":40},[30,64185,1480],{"class":321},[30,64187,64188],{"class":32,"line":10005},[30,64189,2369],{"class":321},[30,64191,64192],{"class":32,"line":10026},[30,64193,2582],{"emptyLinePlaceholder":245},[30,64195,64196,64199],{"class":32,"line":10032},[30,64197,64198],{"class":36},"    .tab-content",[30,64200,15754],{"class":321},[30,64202,64203,64205,64207,64209,64212,64214],{"class":32,"line":10046},[30,64204,54833],{"class":40},[30,64206,51575],{"class":321},[30,64208,511],{"class":40},[30,64210,64211],{"class":40}," 16",[30,64213,51630],{"class":317},[30,64215,1480],{"class":321},[30,64217,64218],{"class":32,"line":10052},[30,64219,2369],{"class":321},[30,64221,64222],{"class":32,"line":10079},[30,64223,2582],{"emptyLinePlaceholder":245},[30,64225,64226,64228,64230],{"class":32,"line":10088},[30,64227,64198],{"class":36},[30,64229,62312],{"class":36},[30,64231,15754],{"class":321},[30,64233,64234,64236,64238,64240],{"class":32,"line":10094},[30,64235,55147],{"class":40},[30,64237,51575],{"class":321},[30,64239,54875],{"class":40},[30,64241,1480],{"class":321},[30,64243,64244],{"class":32,"line":10102},[30,64245,2369],{"class":321},[30,64247,64248],{"class":32,"line":10107},[30,64249,2582],{"emptyLinePlaceholder":245},[30,64251,64252,64254,64257],{"class":32,"line":16786},[30,64253,64198],{"class":36},[30,64255,64256],{"class":36}," .item.active",[30,64258,15754],{"class":321},[30,64260,64261,64263,64265,64267],{"class":32,"line":16792},[30,64262,55147],{"class":40},[30,64264,51575],{"class":321},[30,64266,61007],{"class":40},[30,64268,1480],{"class":321},[30,64270,64271],{"class":32,"line":16815},[30,64272,2369],{"class":321},[30,64274,64275,64277,64279],{"class":32,"line":16821},[30,64276,52555],{"class":321},[30,64278,234],{"class":51438},[30,64280,51445],{"class":321},[30,64282,64283,64285,64287],{"class":32,"line":16844},[30,64284,51923],{"class":321},[30,64286,51472],{"class":51438},[30,64288,51445],{"class":321},[30,64290,64291],{"class":32,"line":16858},[30,64292,2582],{"emptyLinePlaceholder":245},[30,64294,64295,64297,64299],{"class":32,"line":16878},[30,64296,1230],{"class":321},[30,64298,51938],{"class":51438},[30,64300,51445],{"class":321},[30,64302,64303,64305,64307,64309,64311,64314],{"class":32,"line":16884},[30,64304,52282],{"class":321},[30,64306,51749],{"class":51438},[30,64308,53624],{"class":36},[30,64310,367],{"class":321},[30,64312,64313],{"class":74},"\"tab\"",[30,64315,51445],{"class":321},[30,64317,64318,64320,64322,64324,64326,64329],{"class":32,"line":16895},[30,64319,51479],{"class":321},[30,64321,51749],{"class":51438},[30,64323,53624],{"class":36},[30,64325,367],{"class":321},[30,64327,64328],{"class":74},"\"tab-nav\"",[30,64330,51445],{"class":321},[30,64332,64333,64335,64337,64340,64342],{"class":32,"line":16918},[30,64334,55372],{"class":321},[30,64336,287],{"class":51438},[30,64338,64339],{"class":321},">每日特价\u003C\u002F",[30,64341,287],{"class":51438},[30,64343,51445],{"class":321},[30,64345,64346,64348,64350],{"class":32,"line":16940},[30,64347,55372],{"class":321},[30,64349,147],{"class":51438},[30,64351,51445],{"class":321},[30,64353,64354,64356,64358,64360,64362,64364,64366,64368,64370,64372,64375,64378,64380,64382,64384],{"class":32,"line":16945},[30,64355,55440],{"class":321},[30,64357,150],{"class":51438},[30,64359,61190],{"class":321},[30,64361,558],{"class":51438},[30,64363,53624],{"class":36},[30,64365,367],{"class":321},[30,64367,59844],{"class":74},[30,64369,61195],{"class":36},[30,64371,367],{"class":321},[30,64373,64374],{"class":74},"\"javascript:;\"",[30,64376,64377],{"class":321},">精选\u003C\u002F",[30,64379,558],{"class":51438},[30,64381,55452],{"class":321},[30,64383,150],{"class":51438},[30,64385,51445],{"class":321},[30,64387,64388,64390,64392,64394,64396,64398,64400,64402,64405,64407,64409,64411],{"class":32,"line":16951},[30,64389,55440],{"class":321},[30,64391,150],{"class":51438},[30,64393,61190],{"class":321},[30,64395,558],{"class":51438},[30,64397,61195],{"class":36},[30,64399,367],{"class":321},[30,64401,64374],{"class":74},[30,64403,64404],{"class":321},">美食\u003C\u002F",[30,64406,558],{"class":51438},[30,64408,55452],{"class":321},[30,64410,150],{"class":51438},[30,64412,51445],{"class":321},[30,64414,64415,64417,64419,64421,64423,64425,64427,64429,64432,64434,64436,64438],{"class":32,"line":16965},[30,64416,55440],{"class":321},[30,64418,150],{"class":51438},[30,64420,61190],{"class":321},[30,64422,558],{"class":51438},[30,64424,61195],{"class":36},[30,64426,367],{"class":321},[30,64428,64374],{"class":74},[30,64430,64431],{"class":321},">百货\u003C\u002F",[30,64433,558],{"class":51438},[30,64435,55452],{"class":321},[30,64437,150],{"class":51438},[30,64439,51445],{"class":321},[30,64441,64442,64444,64446,64448,64450,64452,64454,64456,64459,64461,64463,64465],{"class":32,"line":16978},[30,64443,55440],{"class":321},[30,64445,150],{"class":51438},[30,64447,61190],{"class":321},[30,64449,558],{"class":51438},[30,64451,61195],{"class":36},[30,64453,367],{"class":321},[30,64455,64374],{"class":74},[30,64457,64458],{"class":321},">个护\u003C\u002F",[30,64460,558],{"class":51438},[30,64462,55452],{"class":321},[30,64464,150],{"class":51438},[30,64466,51445],{"class":321},[30,64468,64469,64471,64473,64475,64477,64479,64481,64483,64486,64488,64490,64492],{"class":32,"line":16983},[30,64470,55440],{"class":321},[30,64472,150],{"class":51438},[30,64474,61190],{"class":321},[30,64476,558],{"class":51438},[30,64478,61195],{"class":36},[30,64480,367],{"class":321},[30,64482,64374],{"class":74},[30,64484,64485],{"class":321},">预告\u003C\u002F",[30,64487,558],{"class":51438},[30,64489,55452],{"class":321},[30,64491,150],{"class":51438},[30,64493,51445],{"class":321},[30,64495,64496,64498,64500],{"class":32,"line":16997},[30,64497,55545],{"class":321},[30,64499,147],{"class":51438},[30,64501,51445],{"class":321},[30,64503,64504,64506,64508],{"class":32,"line":17002},[30,64505,51914],{"class":321},[30,64507,51749],{"class":51438},[30,64509,51445],{"class":321},[30,64511,64512,64514,64516,64518,64520,64523],{"class":32,"line":17008},[30,64513,51479],{"class":321},[30,64515,51749],{"class":51438},[30,64517,53624],{"class":36},[30,64519,367],{"class":321},[30,64521,64522],{"class":74},"\"tab-content\"",[30,64524,51445],{"class":321},[30,64526,64527,64529,64531,64533,64535,64538,64540,64542,64544,64546,64549,64551,64553,64555,64558,64560],{"class":32,"line":17013},[30,64528,55372],{"class":321},[30,64530,51749],{"class":51438},[30,64532,53624],{"class":36},[30,64534,367],{"class":321},[30,64536,64537],{"class":74},"\"item active\"",[30,64539,61190],{"class":321},[30,64541,160],{"class":51438},[30,64543,55377],{"class":36},[30,64545,367],{"class":321},[30,64547,64548],{"class":74},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[30,64550,55385],{"class":36},[30,64552,367],{"class":321},[30,64554,7834],{"class":74},[30,64556,64557],{"class":321}," \u002F>\u003C\u002F",[30,64559,51749],{"class":51438},[30,64561,51445],{"class":321},[30,64563,64564,64566,64568,64570,64572,64574,64576,64578,64580,64582,64585,64587,64589,64591,64593,64595],{"class":32,"line":17027},[30,64565,55372],{"class":321},[30,64567,51749],{"class":51438},[30,64569,53624],{"class":36},[30,64571,367],{"class":321},[30,64573,62761],{"class":74},[30,64575,61190],{"class":321},[30,64577,160],{"class":51438},[30,64579,55377],{"class":36},[30,64581,367],{"class":321},[30,64583,64584],{"class":74},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[30,64586,55385],{"class":36},[30,64588,367],{"class":321},[30,64590,7834],{"class":74},[30,64592,64557],{"class":321},[30,64594,51749],{"class":51438},[30,64596,51445],{"class":321},[30,64598,64599,64601,64603,64605,64607,64609,64611,64613,64615,64617,64620,64622,64624,64626,64628,64630],{"class":32,"line":17032},[30,64600,55372],{"class":321},[30,64602,51749],{"class":51438},[30,64604,53624],{"class":36},[30,64606,367],{"class":321},[30,64608,62761],{"class":74},[30,64610,61190],{"class":321},[30,64612,160],{"class":51438},[30,64614,55377],{"class":36},[30,64616,367],{"class":321},[30,64618,64619],{"class":74},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[30,64621,55385],{"class":36},[30,64623,367],{"class":321},[30,64625,7834],{"class":74},[30,64627,64557],{"class":321},[30,64629,51749],{"class":51438},[30,64631,51445],{"class":321},[30,64633,64634,64636,64638,64640,64642,64644,64646,64648,64650,64652,64655,64657,64659,64661,64663,64665],{"class":32,"line":17037},[30,64635,55372],{"class":321},[30,64637,51749],{"class":51438},[30,64639,53624],{"class":36},[30,64641,367],{"class":321},[30,64643,62761],{"class":74},[30,64645,61190],{"class":321},[30,64647,160],{"class":51438},[30,64649,55377],{"class":36},[30,64651,367],{"class":321},[30,64653,64654],{"class":74},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[30,64656,55385],{"class":36},[30,64658,367],{"class":321},[30,64660,7834],{"class":74},[30,64662,64557],{"class":321},[30,64664,51749],{"class":51438},[30,64666,51445],{"class":321},[30,64668,64669,64671,64673,64675,64677,64679,64681,64683,64685,64687,64690,64692,64694,64696,64698,64700],{"class":32,"line":17051},[30,64670,55372],{"class":321},[30,64672,51749],{"class":51438},[30,64674,53624],{"class":36},[30,64676,367],{"class":321},[30,64678,62761],{"class":74},[30,64680,61190],{"class":321},[30,64682,160],{"class":51438},[30,64684,55377],{"class":36},[30,64686,367],{"class":321},[30,64688,64689],{"class":74},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[30,64691,55385],{"class":36},[30,64693,367],{"class":321},[30,64695,7834],{"class":74},[30,64697,64557],{"class":321},[30,64699,51749],{"class":51438},[30,64701,51445],{"class":321},[30,64703,64704,64706,64708],{"class":32,"line":17063},[30,64705,51914],{"class":321},[30,64707,51749],{"class":51438},[30,64709,51445],{"class":321},[30,64711,64712,64714,64716],{"class":32,"line":17068},[30,64713,52555],{"class":321},[30,64715,51749],{"class":51438},[30,64717,51445],{"class":321},[30,64719,64720,64722,64724],{"class":32,"line":17081},[30,64721,52282],{"class":321},[30,64723,51951],{"class":51438},[30,64725,51445],{"class":321},[30,64727,64728],{"class":32,"line":17086},[30,64729,64730],{"class":379},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[30,64732,64733],{"class":32,"line":17091},[30,64734,64735],{"class":379},"    \u002F\u002F 1.1 获取 a 元素 \n",[30,64737,64738,64740,64743,64745,64747,64749,64751,64754],{"class":32,"line":17096},[30,64739,11403],{"class":317},[30,64741,64742],{"class":40}," as",[30,64744,13746],{"class":317},[30,64746,54534],{"class":321},[30,64748,55819],{"class":36},[30,64750,322],{"class":321},[30,64752,64753],{"class":74},"'.tab-nav a'",[30,64755,328],{"class":321},[30,64757,64758],{"class":32,"line":17109},[30,64759,64760],{"class":379},"    \u002F\u002F console.log(as) \n",[30,64762,64763,64765,64767,64769,64771,64773,64775,64777,64779,64782,64784,64786,64788],{"class":32,"line":17114},[30,64764,3383],{"class":317},[30,64766,1841],{"class":321},[30,64768,51985],{"class":317},[30,64770,9620],{"class":321},[30,64772,367],{"class":317},[30,64774,4275],{"class":40},[30,64776,9627],{"class":321},[30,64778,1230],{"class":317},[30,64780,64781],{"class":321}," as.",[30,64783,52106],{"class":40},[30,64785,3396],{"class":321},[30,64787,2474],{"class":317},[30,64789,12624],{"class":321},[30,64791,64792],{"class":32,"line":32771},[30,64793,64794],{"class":379},"      \u002F\u002F console.log(as[i])\n",[30,64796,64797],{"class":32,"line":32777},[30,64798,64799],{"class":379},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[30,64801,64802,64805,64807,64809,64812,64814,64816],{"class":32,"line":32783},[30,64803,64804],{"class":321},"      as[i].",[30,64806,57951],{"class":36},[30,64808,322],{"class":321},[30,64810,64811],{"class":74},"'mouseenter'",[30,64813,12617],{"class":321},[30,64815,54587],{"class":317},[30,64817,54590],{"class":321},[30,64819,64820],{"class":32,"line":32789},[30,64821,64822],{"class":379},"        \u002F\u002F console.log('鼠标经过')\n",[30,64824,64825],{"class":32,"line":32795},[30,64826,64827],{"class":379},"        \u002F\u002F 排他思想  \n",[30,64829,64830],{"class":32,"line":32806},[30,64831,64832],{"class":379},"        \u002F\u002F 干掉别人 移除类active\n",[30,64834,64835,64837,64839,64841,64844,64846,64848,64850,64853],{"class":32,"line":32812},[30,64836,52063],{"class":321},[30,64838,54537],{"class":36},[30,64840,322],{"class":321},[30,64842,64843],{"class":74},"'.tab-nav .active'",[30,64845,57141],{"class":321},[30,64847,57144],{"class":36},[30,64849,322],{"class":321},[30,64851,64852],{"class":74},"'active'",[30,64854,328],{"class":321},[30,64856,64857],{"class":32,"line":32832},[30,64858,64859],{"class":379},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[30,64861,64862,64865,64868,64870,64872,64874],{"class":32,"line":32838},[30,64863,64864],{"class":40},"        this",[30,64866,64867],{"class":321},".classList.",[30,64869,5516],{"class":36},[30,64871,322],{"class":321},[30,64873,64852],{"class":74},[30,64875,328],{"class":321},[30,64877,64878],{"class":32,"line":32849},[30,64879,2582],{"emptyLinePlaceholder":245},[30,64881,64882],{"class":32,"line":32855},[30,64883,64884],{"class":379},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[30,64886,64887],{"class":32,"line":32861},[30,64888,64889],{"class":379},"        \u002F\u002F 干掉别人\n",[30,64891,64892,64894,64896,64898,64901,64903,64905,64907,64909],{"class":32,"line":32867},[30,64893,52063],{"class":321},[30,64895,54537],{"class":36},[30,64897,322],{"class":321},[30,64899,64900],{"class":74},"'.tab-content .active'",[30,64902,57141],{"class":321},[30,64904,57144],{"class":36},[30,64906,322],{"class":321},[30,64908,64852],{"class":74},[30,64910,328],{"class":321},[30,64912,64913],{"class":32,"line":32873},[30,64914,64915],{"class":379},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[30,64917,64918,64920,64922,64924,64927,64929,64931,64933,64935,64937,64939,64941,64943],{"class":32,"line":32879},[30,64919,52063],{"class":321},[30,64921,54537],{"class":36},[30,64923,322],{"class":321},[30,64925,64926],{"class":74},"`.tab-content .item:nth-child(${",[30,64928,761],{"class":321},[30,64930,45704],{"class":317},[30,64932,25291],{"class":40},[30,64934,57170],{"class":74},[30,64936,57141],{"class":321},[30,64938,5516],{"class":36},[30,64940,322],{"class":321},[30,64942,64852],{"class":74},[30,64944,328],{"class":321},[30,64946,64947],{"class":32,"line":32885},[30,64948,2582],{"emptyLinePlaceholder":245},[30,64950,64951],{"class":32,"line":32891},[30,64952,64953],{"class":321},"      })\n",[30,64955,64956],{"class":32,"line":32911},[30,64957,2369],{"class":321},[30,64959,64960,64962,64964],{"class":32,"line":32917},[30,64961,52555],{"class":321},[30,64963,51951],{"class":51438},[30,64965,51445],{"class":321},[30,64967,64968,64970,64972],{"class":32,"line":32933},[30,64969,51923],{"class":321},[30,64971,51938],{"class":51438},[30,64973,51445],{"class":321},[30,64975,64976],{"class":32,"line":32939},[30,64977,2582],{"emptyLinePlaceholder":245},[30,64979,64980,64982,64984],{"class":32,"line":32953},[30,64981,51923],{"class":321},[30,64983,50773],{"class":51438},[30,64985,51445],{"class":321},[157,64987,64988],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[157,64990,64991],{},"在监听事件中，this指向的就是他的调用者",[157,64993,64994],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[157,64996,53858],{},[157,64998,64999],{},"(function () {",[157,65001,65002],{},"const list = document.querySelector('.xtx-elevator-list')",[157,65004,65005],{},"list.addEventListener('click', function (e) {",[157,65007,65008],{},"if (e.target.tagName === 'A') {",[157,65010,65011],{},"\u002F\u002F 排他思想",[157,65013,65014],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[157,65016,65017],{},"const old = document.querySelector('.xtx-elevator-list .active')",[157,65019,65020],{},"\u002F\u002F console.log(old);",[157,65022,65023],{},"\u002F\u002F 判断",[157,65025,65026],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[157,65028,65029],{},"if (old) old.classList.remove('active')",[157,65031,65032],{},"e.target.classList.add('active')",[157,65034,1266],{},[157,65036,52602],{},[157,65038,65039],{},"})();",[287,65041,65043],{"id":65042},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[20,65045,65047],{"className":50771,"code":65046,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\n\u003Chtml>\n\n\u003Chead lang=\"en\">\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Ctitle>\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    table {\n      border-collapse: collapse;\n      border-spacing: 0;\n      border: 1px solid #c0c0c0;\n      width: 500px;\n      margin: 100px auto;\n      text-align: center;\n    }\n\n    th {\n      background-color: #09c;\n      font: bold 16px \"微软雅黑\";\n      color: #fff;\n      height: 24px;\n    }\n\n    td {\n      border: 1px solid #d0d0d0;\n      color: #404060;\n      padding: 10px;\n    }\n\n    .allCheck {\n      width: 80px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctable>\n    \u003Ctr>\n      \u003Cth class=\"allCheck\">\n        \u003Cinput type=\"checkbox\" name=\"\" id=\"checkAll\"> \u003Cspan class=\"all\">全选\u003C\u002Fspan>\n      \u003C\u002Fth>\n      \u003Cth>商品\u003C\u002Fth>\n      \u003Cth>商家\u003C\u002Fth>\n      \u003Cth>价格\u003C\u002Fth>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米手机\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥1999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米净水器\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥4999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米电视\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥5999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 1. 获取大复选框\n    const checkAll = document.querySelector('#checkAll')\n    \u002F\u002F 2. 获取所有的小复选框\n    const cks = document.querySelectorAll('.ck')\n    \u002F\u002F 3. 点击大复选框  注册事件\n    checkAll.addEventListener('click', function () {\n      \u002F\u002F 得到当前大复选框的选中状态\n      \u002F\u002F console.log(checkAll.checked)  \u002F\u002F 得到 是 true 或者是 false\n      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n      for (let i = 0; i \u003C cks.length; i++) {\n        cks[i].checked = this.checked\n      }\n    })\n    \u002F\u002F 5. 小复选框控制大复选框\n\n    for (let i = 0; i \u003C cks.length; i++) {\n      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n      cks[i].addEventListener('click', function () {\n        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n        checkAll.checked = document.querySelectorAll('.ck:checked').length === cks.length\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,65048,65049,65059,65063,65071,65075,65089,65103,65115,65123,65129,65139,65149,65153,65157,65164,65176,65187,65204,65217,65231,65241,65245,65249,65256,65267,65285,65295,65307,65311,65315,65322,65339,65350,65362,65366,65370,65377,65389,65393,65401,65409,65413,65421,65429,65437,65452,65496,65504,65517,65530,65543,65551,65559,65567,65595,65603,65615,65628,65641,65649,65657,65665,65691,65699,65712,65724,65737,65745,65753,65761,65787,65795,65808,65820,65833,65841,65849,65857,65862,65882,65887,65907,65912,65929,65934,65942,65947,65976,65989,65993,65997,66002,66006,66034,66039,66056,66061,66066,66071,66076,66102,66106,66110,66118,66126,66130],{"__ignoreMap":25},[30,65050,65051,65053,65055,65057],{"class":32,"line":33},[30,65052,51435],{"class":321},[30,65054,51439],{"class":51438},[30,65056,51442],{"class":36},[30,65058,51445],{"class":321},[30,65060,65061],{"class":32,"line":44},[30,65062,2582],{"emptyLinePlaceholder":245},[30,65064,65065,65067,65069],{"class":32,"line":52},[30,65066,1230],{"class":321},[30,65068,50773],{"class":51438},[30,65070,51445],{"class":321},[30,65072,65073],{"class":32,"line":60},[30,65074,2582],{"emptyLinePlaceholder":245},[30,65076,65077,65079,65081,65083,65085,65087],{"class":32,"line":68},[30,65078,1230],{"class":321},[30,65080,51472],{"class":51438},[30,65082,51454],{"class":36},[30,65084,367],{"class":321},[30,65086,51459],{"class":74},[30,65088,51445],{"class":321},[30,65090,65091,65093,65095,65097,65099,65101],{"class":32,"line":80},[30,65092,52282],{"class":321},[30,65094,51482],{"class":51438},[30,65096,51485],{"class":36},[30,65098,367],{"class":321},[30,65100,51490],{"class":74},[30,65102,51445],{"class":321},[30,65104,65105,65107,65109,65111,65113],{"class":32,"line":88},[30,65106,52282],{"class":321},[30,65108,51545],{"class":51438},[30,65110,55452],{"class":321},[30,65112,51545],{"class":51438},[30,65114,51445],{"class":321},[30,65116,65117,65119,65121],{"class":32,"line":96},[30,65118,52282],{"class":321},[30,65120,234],{"class":51438},[30,65122,51445],{"class":321},[30,65124,65125,65127],{"class":32,"line":104},[30,65126,6585],{"class":51438},[30,65128,15754],{"class":321},[30,65130,65131,65133,65135,65137],{"class":32,"line":112},[30,65132,54844],{"class":40},[30,65134,51575],{"class":321},[30,65136,511],{"class":40},[30,65138,1480],{"class":321},[30,65140,65141,65143,65145,65147],{"class":32,"line":123},[30,65142,54833],{"class":40},[30,65144,51575],{"class":321},[30,65146,511],{"class":40},[30,65148,1480],{"class":321},[30,65150,65151],{"class":32,"line":131},[30,65152,2369],{"class":321},[30,65154,65155],{"class":32,"line":142},[30,65156,2582],{"emptyLinePlaceholder":245},[30,65158,65159,65162],{"class":32,"line":1811},[30,65160,65161],{"class":51438},"    table",[30,65163,15754],{"class":321},[30,65165,65166,65169,65171,65174],{"class":32,"line":1825},[30,65167,65168],{"class":40},"      border-collapse",[30,65170,51575],{"class":321},[30,65172,65173],{"class":40},"collapse",[30,65175,1480],{"class":321},[30,65177,65178,65181,65183,65185],{"class":32,"line":1830},[30,65179,65180],{"class":40},"      border-spacing",[30,65182,51575],{"class":321},[30,65184,511],{"class":40},[30,65186,1480],{"class":321},[30,65188,65189,65191,65193,65195,65197,65199,65202],{"class":32,"line":1836},[30,65190,62115],{"class":40},[30,65192,51575],{"class":321},[30,65194,537],{"class":40},[30,65196,51630],{"class":317},[30,65198,51659],{"class":40},[30,65200,65201],{"class":40}," #c0c0c0",[30,65203,1480],{"class":321},[30,65205,65206,65208,65210,65213,65215],{"class":32,"line":1857},[30,65207,54909],{"class":40},[30,65209,51575],{"class":321},[30,65211,65212],{"class":40},"500",[30,65214,51630],{"class":317},[30,65216,1480],{"class":321},[30,65218,65219,65221,65223,65225,65227,65229],{"class":32,"line":1862},[30,65220,54844],{"class":40},[30,65222,51575],{"class":321},[30,65224,631],{"class":40},[30,65226,51630],{"class":317},[30,65228,51694],{"class":40},[30,65230,1480],{"class":321},[30,65232,65233,65235,65237,65239],{"class":32,"line":1876},[30,65234,57424],{"class":40},[30,65236,51575],{"class":321},[30,65238,51730],{"class":40},[30,65240,1480],{"class":321},[30,65242,65243],{"class":32,"line":1881},[30,65244,2369],{"class":321},[30,65246,65247],{"class":32,"line":1910},[30,65248,2582],{"emptyLinePlaceholder":245},[30,65250,65251,65254],{"class":32,"line":1915},[30,65252,65253],{"class":51438},"    th",[30,65255,15754],{"class":321},[30,65257,65258,65260,65262,65265],{"class":32,"line":1932},[30,65259,55022],{"class":40},[30,65261,51575],{"class":321},[30,65263,65264],{"class":40},"#09c",[30,65266,1480],{"class":321},[30,65268,65269,65272,65274,65276,65278,65280,65283],{"class":32,"line":1937},[30,65270,65271],{"class":40},"      font",[30,65273,51575],{"class":321},[30,65275,62477],{"class":40},[30,65277,64211],{"class":40},[30,65279,51630],{"class":317},[30,65281,65282],{"class":74}," \"微软雅黑\"",[30,65284,1480],{"class":321},[30,65286,65287,65289,65291,65293],{"class":32,"line":1942},[30,65288,57554],{"class":40},[30,65290,51575],{"class":321},[30,65292,60980],{"class":40},[30,65294,1480],{"class":321},[30,65296,65297,65299,65301,65303,65305],{"class":32,"line":1947},[30,65298,54923],{"class":40},[30,65300,51575],{"class":321},[30,65302,1120],{"class":40},[30,65304,51630],{"class":317},[30,65306,1480],{"class":321},[30,65308,65309],{"class":32,"line":1961},[30,65310,2369],{"class":321},[30,65312,65313],{"class":32,"line":1966},[30,65314,2582],{"emptyLinePlaceholder":245},[30,65316,65317,65320],{"class":32,"line":2759},[30,65318,65319],{"class":51438},"    td",[30,65321,15754],{"class":321},[30,65323,65324,65326,65328,65330,65332,65334,65337],{"class":32,"line":2773},[30,65325,62115],{"class":40},[30,65327,51575],{"class":321},[30,65329,537],{"class":40},[30,65331,51630],{"class":317},[30,65333,51659],{"class":40},[30,65335,65336],{"class":40}," #d0d0d0",[30,65338,1480],{"class":321},[30,65340,65341,65343,65345,65348],{"class":32,"line":2781},[30,65342,57554],{"class":40},[30,65344,51575],{"class":321},[30,65346,65347],{"class":40},"#404060",[30,65349,1480],{"class":321},[30,65351,65352,65354,65356,65358,65360],{"class":32,"line":2786},[30,65353,54833],{"class":40},[30,65355,51575],{"class":321},[30,65357,766],{"class":40},[30,65359,51630],{"class":317},[30,65361,1480],{"class":321},[30,65363,65364],{"class":32,"line":2792},[30,65365,2369],{"class":321},[30,65367,65368],{"class":32,"line":2798},[30,65369,2582],{"emptyLinePlaceholder":245},[30,65371,65372,65375],{"class":32,"line":2803},[30,65373,65374],{"class":36},"    .allCheck",[30,65376,15754],{"class":321},[30,65378,65379,65381,65383,65385,65387],{"class":32,"line":8130},[30,65380,54909],{"class":40},[30,65382,51575],{"class":321},[30,65384,932],{"class":40},[30,65386,51630],{"class":317},[30,65388,1480],{"class":321},[30,65390,65391],{"class":32,"line":8154},[30,65392,2369],{"class":321},[30,65394,65395,65397,65399],{"class":32,"line":8159},[30,65396,52555],{"class":321},[30,65398,234],{"class":51438},[30,65400,51445],{"class":321},[30,65402,65403,65405,65407],{"class":32,"line":8165},[30,65404,51923],{"class":321},[30,65406,51472],{"class":51438},[30,65408,51445],{"class":321},[30,65410,65411],{"class":32,"line":8192},[30,65412,2582],{"emptyLinePlaceholder":245},[30,65414,65415,65417,65419],{"class":32,"line":8197},[30,65416,1230],{"class":321},[30,65418,51938],{"class":51438},[30,65420,51445],{"class":321},[30,65422,65423,65425,65427],{"class":32,"line":8203},[30,65424,52282],{"class":321},[30,65426,457],{"class":51438},[30,65428,51445],{"class":321},[30,65430,65431,65433,65435],{"class":32,"line":8215},[30,65432,51479],{"class":321},[30,65434,463],{"class":51438},[30,65436,51445],{"class":321},[30,65438,65439,65441,65443,65445,65447,65450],{"class":32,"line":8227},[30,65440,55372],{"class":321},[30,65442,466],{"class":51438},[30,65444,53624],{"class":36},[30,65446,367],{"class":321},[30,65448,65449],{"class":74},"\"allCheck\"",[30,65451,51445],{"class":321},[30,65453,65454,65456,65458,65460,65462,65464,65466,65468,65470,65472,65474,65477,65480,65482,65484,65486,65489,65492,65494],{"class":32,"line":8239},[30,65455,55440],{"class":321},[30,65457,53959],{"class":51438},[30,65459,53962],{"class":36},[30,65461,367],{"class":321},[30,65463,53967],{"class":74},[30,65465,15102],{"class":36},[30,65467,367],{"class":321},[30,65469,7834],{"class":74},[30,65471,15141],{"class":36},[30,65473,367],{"class":321},[30,65475,65476],{"class":74},"\"checkAll\"",[30,65478,65479],{"class":321},"> \u003C",[30,65481,30],{"class":51438},[30,65483,53624],{"class":36},[30,65485,367],{"class":321},[30,65487,65488],{"class":74},"\"all\"",[30,65490,65491],{"class":321},">全选\u003C\u002F",[30,65493,30],{"class":51438},[30,65495,51445],{"class":321},[30,65497,65498,65500,65502],{"class":32,"line":9898},[30,65499,55545],{"class":321},[30,65501,466],{"class":51438},[30,65503,51445],{"class":321},[30,65505,65506,65508,65510,65513,65515],{"class":32,"line":9923},[30,65507,55372],{"class":321},[30,65509,466],{"class":51438},[30,65511,65512],{"class":321},">商品\u003C\u002F",[30,65514,466],{"class":51438},[30,65516,51445],{"class":321},[30,65518,65519,65521,65523,65526,65528],{"class":32,"line":9946},[30,65520,55372],{"class":321},[30,65522,466],{"class":51438},[30,65524,65525],{"class":321},">商家\u003C\u002F",[30,65527,466],{"class":51438},[30,65529,51445],{"class":321},[30,65531,65532,65534,65536,65539,65541],{"class":32,"line":9970},[30,65533,55372],{"class":321},[30,65535,466],{"class":51438},[30,65537,65538],{"class":321},">价格\u003C\u002F",[30,65540,466],{"class":51438},[30,65542,51445],{"class":321},[30,65544,65545,65547,65549],{"class":32,"line":9975},[30,65546,51914],{"class":321},[30,65548,463],{"class":51438},[30,65550,51445],{"class":321},[30,65552,65553,65555,65557],{"class":32,"line":9980},[30,65554,51479],{"class":321},[30,65556,463],{"class":51438},[30,65558,51445],{"class":321},[30,65560,65561,65563,65565],{"class":32,"line":9985},[30,65562,55372],{"class":321},[30,65564,509],{"class":51438},[30,65566,51445],{"class":321},[30,65568,65569,65571,65573,65575,65577,65579,65581,65583,65586,65588,65590,65593],{"class":32,"line":9994},[30,65570,55440],{"class":321},[30,65572,53959],{"class":51438},[30,65574,53962],{"class":36},[30,65576,367],{"class":321},[30,65578,53967],{"class":74},[30,65580,15102],{"class":36},[30,65582,367],{"class":321},[30,65584,65585],{"class":74},"\"check\"",[30,65587,53624],{"class":36},[30,65589,367],{"class":321},[30,65591,65592],{"class":74},"\"ck\"",[30,65594,51445],{"class":321},[30,65596,65597,65599,65601],{"class":32,"line":9999},[30,65598,55545],{"class":321},[30,65600,509],{"class":51438},[30,65602,51445],{"class":321},[30,65604,65605,65607,65609,65611,65613],{"class":32,"line":10005},[30,65606,55372],{"class":321},[30,65608,509],{"class":51438},[30,65610,61311],{"class":321},[30,65612,509],{"class":51438},[30,65614,51445],{"class":321},[30,65616,65617,65619,65621,65624,65626],{"class":32,"line":10026},[30,65618,55372],{"class":321},[30,65620,509],{"class":51438},[30,65622,65623],{"class":321},">小米\u003C\u002F",[30,65625,509],{"class":51438},[30,65627,51445],{"class":321},[30,65629,65630,65632,65634,65637,65639],{"class":32,"line":10032},[30,65631,55372],{"class":321},[30,65633,509],{"class":51438},[30,65635,65636],{"class":321},">￥1999\u003C\u002F",[30,65638,509],{"class":51438},[30,65640,51445],{"class":321},[30,65642,65643,65645,65647],{"class":32,"line":10046},[30,65644,51914],{"class":321},[30,65646,463],{"class":51438},[30,65648,51445],{"class":321},[30,65650,65651,65653,65655],{"class":32,"line":10052},[30,65652,51479],{"class":321},[30,65654,463],{"class":51438},[30,65656,51445],{"class":321},[30,65658,65659,65661,65663],{"class":32,"line":10079},[30,65660,55372],{"class":321},[30,65662,509],{"class":51438},[30,65664,51445],{"class":321},[30,65666,65667,65669,65671,65673,65675,65677,65679,65681,65683,65685,65687,65689],{"class":32,"line":10088},[30,65668,55440],{"class":321},[30,65670,53959],{"class":51438},[30,65672,53962],{"class":36},[30,65674,367],{"class":321},[30,65676,53967],{"class":74},[30,65678,15102],{"class":36},[30,65680,367],{"class":321},[30,65682,65585],{"class":74},[30,65684,53624],{"class":36},[30,65686,367],{"class":321},[30,65688,65592],{"class":74},[30,65690,51445],{"class":321},[30,65692,65693,65695,65697],{"class":32,"line":10094},[30,65694,55545],{"class":321},[30,65696,509],{"class":51438},[30,65698,51445],{"class":321},[30,65700,65701,65703,65705,65708,65710],{"class":32,"line":10102},[30,65702,55372],{"class":321},[30,65704,509],{"class":51438},[30,65706,65707],{"class":321},">小米净水器\u003C\u002F",[30,65709,509],{"class":51438},[30,65711,51445],{"class":321},[30,65713,65714,65716,65718,65720,65722],{"class":32,"line":10107},[30,65715,55372],{"class":321},[30,65717,509],{"class":51438},[30,65719,65623],{"class":321},[30,65721,509],{"class":51438},[30,65723,51445],{"class":321},[30,65725,65726,65728,65730,65733,65735],{"class":32,"line":16786},[30,65727,55372],{"class":321},[30,65729,509],{"class":51438},[30,65731,65732],{"class":321},">￥4999\u003C\u002F",[30,65734,509],{"class":51438},[30,65736,51445],{"class":321},[30,65738,65739,65741,65743],{"class":32,"line":16792},[30,65740,51914],{"class":321},[30,65742,463],{"class":51438},[30,65744,51445],{"class":321},[30,65746,65747,65749,65751],{"class":32,"line":16815},[30,65748,51479],{"class":321},[30,65750,463],{"class":51438},[30,65752,51445],{"class":321},[30,65754,65755,65757,65759],{"class":32,"line":16821},[30,65756,55372],{"class":321},[30,65758,509],{"class":51438},[30,65760,51445],{"class":321},[30,65762,65763,65765,65767,65769,65771,65773,65775,65777,65779,65781,65783,65785],{"class":32,"line":16844},[30,65764,55440],{"class":321},[30,65766,53959],{"class":51438},[30,65768,53962],{"class":36},[30,65770,367],{"class":321},[30,65772,53967],{"class":74},[30,65774,15102],{"class":36},[30,65776,367],{"class":321},[30,65778,65585],{"class":74},[30,65780,53624],{"class":36},[30,65782,367],{"class":321},[30,65784,65592],{"class":74},[30,65786,51445],{"class":321},[30,65788,65789,65791,65793],{"class":32,"line":16858},[30,65790,55545],{"class":321},[30,65792,509],{"class":51438},[30,65794,51445],{"class":321},[30,65796,65797,65799,65801,65804,65806],{"class":32,"line":16878},[30,65798,55372],{"class":321},[30,65800,509],{"class":51438},[30,65802,65803],{"class":321},">小米电视\u003C\u002F",[30,65805,509],{"class":51438},[30,65807,51445],{"class":321},[30,65809,65810,65812,65814,65816,65818],{"class":32,"line":16884},[30,65811,55372],{"class":321},[30,65813,509],{"class":51438},[30,65815,65623],{"class":321},[30,65817,509],{"class":51438},[30,65819,51445],{"class":321},[30,65821,65822,65824,65826,65829,65831],{"class":32,"line":16895},[30,65823,55372],{"class":321},[30,65825,509],{"class":51438},[30,65827,65828],{"class":321},">￥5999\u003C\u002F",[30,65830,509],{"class":51438},[30,65832,51445],{"class":321},[30,65834,65835,65837,65839],{"class":32,"line":16918},[30,65836,51914],{"class":321},[30,65838,463],{"class":51438},[30,65840,51445],{"class":321},[30,65842,65843,65845,65847],{"class":32,"line":16940},[30,65844,52555],{"class":321},[30,65846,457],{"class":51438},[30,65848,51445],{"class":321},[30,65850,65851,65853,65855],{"class":32,"line":16945},[30,65852,52282],{"class":321},[30,65854,51951],{"class":51438},[30,65856,51445],{"class":321},[30,65858,65859],{"class":32,"line":16951},[30,65860,65861],{"class":379},"    \u002F\u002F 1. 获取大复选框\n",[30,65863,65864,65866,65869,65871,65873,65875,65877,65880],{"class":32,"line":16965},[30,65865,11403],{"class":317},[30,65867,65868],{"class":40}," checkAll",[30,65870,13746],{"class":317},[30,65872,54534],{"class":321},[30,65874,54537],{"class":36},[30,65876,322],{"class":321},[30,65878,65879],{"class":74},"'#checkAll'",[30,65881,328],{"class":321},[30,65883,65884],{"class":32,"line":16978},[30,65885,65886],{"class":379},"    \u002F\u002F 2. 获取所有的小复选框\n",[30,65888,65889,65891,65894,65896,65898,65900,65902,65905],{"class":32,"line":16983},[30,65890,11403],{"class":317},[30,65892,65893],{"class":40}," cks",[30,65895,13746],{"class":317},[30,65897,54534],{"class":321},[30,65899,55819],{"class":36},[30,65901,322],{"class":321},[30,65903,65904],{"class":74},"'.ck'",[30,65906,328],{"class":321},[30,65908,65909],{"class":32,"line":16997},[30,65910,65911],{"class":379},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[30,65913,65914,65917,65919,65921,65923,65925,65927],{"class":32,"line":17002},[30,65915,65916],{"class":321},"    checkAll.",[30,65918,57951],{"class":36},[30,65920,322],{"class":321},[30,65922,57956],{"class":74},[30,65924,12617],{"class":321},[30,65926,54587],{"class":317},[30,65928,54590],{"class":321},[30,65930,65931],{"class":32,"line":17008},[30,65932,65933],{"class":379},"      \u002F\u002F 得到当前大复选框的选中状态\n",[30,65935,65936,65939],{"class":32,"line":17013},[30,65937,65938],{"class":379},"      \u002F\u002F console.log(checkAll.checked)",[30,65940,65941],{"class":379},"  \u002F\u002F 得到 是 true 或者是 false\n",[30,65943,65944],{"class":32,"line":17027},[30,65945,65946],{"class":379},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[30,65948,65949,65951,65953,65955,65957,65959,65961,65963,65965,65968,65970,65972,65974],{"class":32,"line":17032},[30,65950,52422],{"class":317},[30,65952,1841],{"class":321},[30,65954,51985],{"class":317},[30,65956,9620],{"class":321},[30,65958,367],{"class":317},[30,65960,4275],{"class":40},[30,65962,9627],{"class":321},[30,65964,1230],{"class":317},[30,65966,65967],{"class":321}," cks.",[30,65969,52106],{"class":40},[30,65971,3396],{"class":321},[30,65973,2474],{"class":317},[30,65975,12624],{"class":321},[30,65977,65978,65981,65983,65986],{"class":32,"line":17037},[30,65979,65980],{"class":321},"        cks[i].checked ",[30,65982,367],{"class":317},[30,65984,65985],{"class":40}," this",[30,65987,65988],{"class":321},".checked\n",[30,65990,65991],{"class":32,"line":17051},[30,65992,52536],{"class":321},[30,65994,65995],{"class":32,"line":17063},[30,65996,33599],{"class":321},[30,65998,65999],{"class":32,"line":17068},[30,66000,66001],{"class":379},"    \u002F\u002F 5. 小复选框控制大复选框\n",[30,66003,66004],{"class":32,"line":17081},[30,66005,2582],{"emptyLinePlaceholder":245},[30,66007,66008,66010,66012,66014,66016,66018,66020,66022,66024,66026,66028,66030,66032],{"class":32,"line":17086},[30,66009,3383],{"class":317},[30,66011,1841],{"class":321},[30,66013,51985],{"class":317},[30,66015,9620],{"class":321},[30,66017,367],{"class":317},[30,66019,4275],{"class":40},[30,66021,9627],{"class":321},[30,66023,1230],{"class":317},[30,66025,65967],{"class":321},[30,66027,52106],{"class":40},[30,66029,3396],{"class":321},[30,66031,2474],{"class":317},[30,66033,12624],{"class":321},[30,66035,66036],{"class":32,"line":17091},[30,66037,66038],{"class":379},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[30,66040,66041,66044,66046,66048,66050,66052,66054],{"class":32,"line":17096},[30,66042,66043],{"class":321},"      cks[i].",[30,66045,57951],{"class":36},[30,66047,322],{"class":321},[30,66049,57956],{"class":74},[30,66051,12617],{"class":321},[30,66053,54587],{"class":317},[30,66055,54590],{"class":321},[30,66057,66058],{"class":32,"line":17109},[30,66059,66060],{"class":379},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[30,66062,66063],{"class":32,"line":17114},[30,66064,66065],{"class":379},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[30,66067,66068],{"class":32,"line":32771},[30,66069,66070],{"class":379},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[30,66072,66073],{"class":32,"line":32777},[30,66074,66075],{"class":379},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[30,66077,66078,66081,66083,66085,66087,66089,66092,66094,66096,66098,66100],{"class":32,"line":32783},[30,66079,66080],{"class":321},"        checkAll.checked ",[30,66082,367],{"class":317},[30,66084,54534],{"class":321},[30,66086,55819],{"class":36},[30,66088,322],{"class":321},[30,66090,66091],{"class":74},"'.ck:checked'",[30,66093,30964],{"class":321},[30,66095,52106],{"class":40},[30,66097,58044],{"class":317},[30,66099,65967],{"class":321},[30,66101,55969],{"class":40},[30,66103,66104],{"class":32,"line":32789},[30,66105,64953],{"class":321},[30,66107,66108],{"class":32,"line":32795},[30,66109,2369],{"class":321},[30,66111,66112,66114,66116],{"class":32,"line":32806},[30,66113,52555],{"class":321},[30,66115,51951],{"class":51438},[30,66117,51445],{"class":321},[30,66119,66120,66122,66124],{"class":32,"line":32812},[30,66121,51923],{"class":321},[30,66123,51938],{"class":51438},[30,66125,51445],{"class":321},[30,66127,66128],{"class":32,"line":32832},[30,66129,2582],{"emptyLinePlaceholder":245},[30,66131,66132,66134,66136],{"class":32,"line":32838},[30,66133,51923],{"class":321},[30,66135,50773],{"class":51438},[30,66137,51445],{"class":321},[157,66139,66140],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[157,66142,66143],{},"用好之间比较得到的布尔值！！！",[157,66145,66146,66147,66150,66151,1841,66154,904,66156,66159],{},"在 JS 里访问的时候，",[27,66148,66149],{},"checkbox.checked"," 是一个 ",[469,66152,66153],{},"布尔值",[27,66155,1549],{},[27,66157,66158],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[157,66161,66162,66163,66166,66167],{},"HTML 的 ",[27,66164,66165],{},"checked=\"checked\""," 只是 ",[469,66168,66169,66170,66173],{},"初始值；JS 的 ",[27,66171,66172],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[157,66175,66176],{},"：checked是一个伪类选择器",[157,66178,66179],{},[160,66180],{"alt":25,"src":66181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[157,66183,66184,66187],{},[66185,66186],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[157,66189,66190],{},[160,66191],{"alt":25,"src":66192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[15,66194,66196],{"id":66195},"_33-dom事件进阶","3.3 DOM事件进阶",[287,66198,66200],{"id":66199},"_331-事件流","3.3.1 事件流",[157,66202,66203],{},[160,66204],{"alt":25,"src":66205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22180,66207,66209],{"id":66208},"_3311-事件捕获","3.3.1.1 事件捕获",[157,66211,66212],{},[160,66213],{"alt":25,"src":66214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[20,66216,66218],{"className":50771,"code":66217,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .father {\n      width: 500px;\n      height: 500px;\n      background-color: pink;\n    }\n\n    .son {\n      width: 200px;\n      height: 200px;\n      background-color: skyblue;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"father\">\n    \u003Cdiv class=\"son\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const fa = document.querySelector('.father')\n    const son = document.querySelector('.son')\n    document.addEventListener('click', function () {\n      alert('woshiu1')\n    }, true)\n    fa.addEventListener('click', function () {\n      alert('1')\n    }, true)\n    son.addEventListener('click', function () {\n      alert('2')\n    }, true)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,66219,66220,66230,66244,66248,66256,66270,66290,66302,66310,66317,66329,66341,66351,66355,66359,66366,66378,66390,66400,66404,66412,66420,66424,66432,66447,66466,66474,66482,66502,66522,66538,66549,66557,66574,66585,66593,66610,66621,66629,66637,66645,66649],{"__ignoreMap":25},[30,66221,66222,66224,66226,66228],{"class":32,"line":33},[30,66223,51435],{"class":321},[30,66225,51439],{"class":51438},[30,66227,51442],{"class":36},[30,66229,51445],{"class":321},[30,66231,66232,66234,66236,66238,66240,66242],{"class":32,"line":44},[30,66233,1230],{"class":321},[30,66235,50773],{"class":51438},[30,66237,51454],{"class":36},[30,66239,367],{"class":321},[30,66241,51459],{"class":74},[30,66243,51445],{"class":321},[30,66245,66246],{"class":32,"line":52},[30,66247,2582],{"emptyLinePlaceholder":245},[30,66249,66250,66252,66254],{"class":32,"line":60},[30,66251,1230],{"class":321},[30,66253,51472],{"class":51438},[30,66255,51445],{"class":321},[30,66257,66258,66260,66262,66264,66266,66268],{"class":32,"line":68},[30,66259,52282],{"class":321},[30,66261,51482],{"class":51438},[30,66263,51485],{"class":36},[30,66265,367],{"class":321},[30,66267,51490],{"class":74},[30,66269,51445],{"class":321},[30,66271,66272,66274,66276,66278,66280,66282,66284,66286,66288],{"class":32,"line":80},[30,66273,52282],{"class":321},[30,66275,51482],{"class":51438},[30,66277,15102],{"class":36},[30,66279,367],{"class":321},[30,66281,51529],{"class":74},[30,66283,51509],{"class":36},[30,66285,367],{"class":321},[30,66287,51536],{"class":74},[30,66289,51445],{"class":321},[30,66291,66292,66294,66296,66298,66300],{"class":32,"line":88},[30,66293,52282],{"class":321},[30,66295,51545],{"class":51438},[30,66297,51548],{"class":321},[30,66299,51545],{"class":51438},[30,66301,51445],{"class":321},[30,66303,66304,66306,66308],{"class":32,"line":96},[30,66305,52282],{"class":321},[30,66307,234],{"class":51438},[30,66309,51445],{"class":321},[30,66311,66312,66315],{"class":32,"line":104},[30,66313,66314],{"class":36},"    .father",[30,66316,15754],{"class":321},[30,66318,66319,66321,66323,66325,66327],{"class":32,"line":112},[30,66320,54909],{"class":40},[30,66322,51575],{"class":321},[30,66324,65212],{"class":40},[30,66326,51630],{"class":317},[30,66328,1480],{"class":321},[30,66330,66331,66333,66335,66337,66339],{"class":32,"line":123},[30,66332,54923],{"class":40},[30,66334,51575],{"class":321},[30,66336,65212],{"class":40},[30,66338,51630],{"class":317},[30,66340,1480],{"class":321},[30,66342,66343,66345,66347,66349],{"class":32,"line":131},[30,66344,55022],{"class":40},[30,66346,51575],{"class":321},[30,66348,51783],{"class":40},[30,66350,1480],{"class":321},[30,66352,66353],{"class":32,"line":142},[30,66354,2369],{"class":321},[30,66356,66357],{"class":32,"line":1811},[30,66358,2582],{"emptyLinePlaceholder":245},[30,66360,66361,66364],{"class":32,"line":1825},[30,66362,66363],{"class":36},"    .son",[30,66365,15754],{"class":321},[30,66367,66368,66370,66372,66374,66376],{"class":32,"line":1830},[30,66369,54909],{"class":40},[30,66371,51575],{"class":321},[30,66373,1905],{"class":40},[30,66375,51630],{"class":317},[30,66377,1480],{"class":321},[30,66379,66380,66382,66384,66386,66388],{"class":32,"line":1836},[30,66381,54923],{"class":40},[30,66383,51575],{"class":321},[30,66385,1905],{"class":40},[30,66387,51630],{"class":317},[30,66389,1480],{"class":321},[30,66391,66392,66394,66396,66398],{"class":32,"line":1857},[30,66393,55022],{"class":40},[30,66395,51575],{"class":321},[30,66397,55027],{"class":40},[30,66399,1480],{"class":321},[30,66401,66402],{"class":32,"line":1862},[30,66403,2369],{"class":321},[30,66405,66406,66408,66410],{"class":32,"line":1876},[30,66407,52555],{"class":321},[30,66409,234],{"class":51438},[30,66411,51445],{"class":321},[30,66413,66414,66416,66418],{"class":32,"line":1881},[30,66415,51923],{"class":321},[30,66417,51472],{"class":51438},[30,66419,51445],{"class":321},[30,66421,66422],{"class":32,"line":1910},[30,66423,2582],{"emptyLinePlaceholder":245},[30,66425,66426,66428,66430],{"class":32,"line":1915},[30,66427,1230],{"class":321},[30,66429,51938],{"class":51438},[30,66431,51445],{"class":321},[30,66433,66434,66436,66438,66440,66442,66445],{"class":32,"line":1932},[30,66435,52282],{"class":321},[30,66437,51749],{"class":51438},[30,66439,53624],{"class":36},[30,66441,367],{"class":321},[30,66443,66444],{"class":74},"\"father\"",[30,66446,51445],{"class":321},[30,66448,66449,66451,66453,66455,66457,66460,66462,66464],{"class":32,"line":1937},[30,66450,51479],{"class":321},[30,66452,51749],{"class":51438},[30,66454,53624],{"class":36},[30,66456,367],{"class":321},[30,66458,66459],{"class":74},"\"son\"",[30,66461,55452],{"class":321},[30,66463,51749],{"class":51438},[30,66465,51445],{"class":321},[30,66467,66468,66470,66472],{"class":32,"line":1942},[30,66469,52555],{"class":321},[30,66471,51749],{"class":51438},[30,66473,51445],{"class":321},[30,66475,66476,66478,66480],{"class":32,"line":1947},[30,66477,52282],{"class":321},[30,66479,51951],{"class":51438},[30,66481,51445],{"class":321},[30,66483,66484,66486,66489,66491,66493,66495,66497,66500],{"class":32,"line":1961},[30,66485,11403],{"class":317},[30,66487,66488],{"class":40}," fa",[30,66490,13746],{"class":317},[30,66492,54534],{"class":321},[30,66494,54537],{"class":36},[30,66496,322],{"class":321},[30,66498,66499],{"class":74},"'.father'",[30,66501,328],{"class":321},[30,66503,66504,66506,66509,66511,66513,66515,66517,66520],{"class":32,"line":1966},[30,66505,11403],{"class":317},[30,66507,66508],{"class":40}," son",[30,66510,13746],{"class":317},[30,66512,54534],{"class":321},[30,66514,54537],{"class":36},[30,66516,322],{"class":321},[30,66518,66519],{"class":74},"'.son'",[30,66521,328],{"class":321},[30,66523,66524,66526,66528,66530,66532,66534,66536],{"class":32,"line":2759},[30,66525,52545],{"class":321},[30,66527,57951],{"class":36},[30,66529,322],{"class":321},[30,66531,57956],{"class":74},[30,66533,12617],{"class":321},[30,66535,54587],{"class":317},[30,66537,54590],{"class":321},[30,66539,66540,66542,66544,66547],{"class":32,"line":2773},[30,66541,59063],{"class":36},[30,66543,322],{"class":321},[30,66545,66546],{"class":74},"'woshiu1'",[30,66548,328],{"class":321},[30,66550,66551,66553,66555],{"class":32,"line":2781},[30,66552,54673],{"class":321},[30,66554,1549],{"class":40},[30,66556,328],{"class":321},[30,66558,66559,66562,66564,66566,66568,66570,66572],{"class":32,"line":2786},[30,66560,66561],{"class":321},"    fa.",[30,66563,57951],{"class":36},[30,66565,322],{"class":321},[30,66567,57956],{"class":74},[30,66569,12617],{"class":321},[30,66571,54587],{"class":317},[30,66573,54590],{"class":321},[30,66575,66576,66578,66580,66583],{"class":32,"line":2792},[30,66577,59063],{"class":36},[30,66579,322],{"class":321},[30,66581,66582],{"class":74},"'1'",[30,66584,328],{"class":321},[30,66586,66587,66589,66591],{"class":32,"line":2798},[30,66588,54673],{"class":321},[30,66590,1549],{"class":40},[30,66592,328],{"class":321},[30,66594,66595,66598,66600,66602,66604,66606,66608],{"class":32,"line":2803},[30,66596,66597],{"class":321},"    son.",[30,66599,57951],{"class":36},[30,66601,322],{"class":321},[30,66603,57956],{"class":74},[30,66605,12617],{"class":321},[30,66607,54587],{"class":317},[30,66609,54590],{"class":321},[30,66611,66612,66614,66616,66619],{"class":32,"line":8130},[30,66613,59063],{"class":36},[30,66615,322],{"class":321},[30,66617,66618],{"class":74},"'2'",[30,66620,328],{"class":321},[30,66622,66623,66625,66627],{"class":32,"line":8154},[30,66624,54673],{"class":321},[30,66626,1549],{"class":40},[30,66628,328],{"class":321},[30,66630,66631,66633,66635],{"class":32,"line":8159},[30,66632,52555],{"class":321},[30,66634,51951],{"class":51438},[30,66636,51445],{"class":321},[30,66638,66639,66641,66643],{"class":32,"line":8165},[30,66640,51923],{"class":321},[30,66642,51938],{"class":51438},[30,66644,51445],{"class":321},[30,66646,66647],{"class":32,"line":8192},[30,66648,2582],{"emptyLinePlaceholder":245},[30,66650,66651,66653,66655],{"class":32,"line":8197},[30,66652,51923],{"class":321},[30,66654,50773],{"class":51438},[30,66656,51445],{"class":321},[157,66658,66659],{},[160,66660],{"alt":25,"src":66661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[157,66663,66664],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22180,66666,66668],{"id":66667},"_3312-事件冒泡","3.3.1.2 事件冒泡",[157,66670,66671],{},[160,66672],{"alt":25,"src":66673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[157,66675,66676],{},"反着来",[157,66678,66679],{},"注意是同名事件，比如都是‘click’",[22180,66681,66683],{"id":66682},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[157,66685,66686],{},[160,66687],{"alt":25,"src":66688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22180,66690,66692],{"id":66691},"_3314-解绑事件","3.3.1.4 解绑事件",[157,66694,66695],{},[160,66696],{"alt":25,"src":66697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[157,66699,66700],{},[160,66701],{"alt":25,"src":66702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22180,66704,66706],{"id":66705},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[271,66708,66709],{},[150,66710,66711],{},"事件类型的区别",[157,66713,66714],{},[160,66715],{"alt":25,"src":66716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[157,66718,66719],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[271,66721,66722],{"start":44},[150,66723,66724],{},"注册事件的区别",[157,66726,66727],{},[160,66728],{"alt":25,"src":66729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22180,66731,66733],{"id":66732},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[157,66735,66736],{},[160,66737],{"alt":25,"src":66738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[157,66740,66741],{},[160,66742],{"alt":25,"src":66743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[20,66745,66747],{"className":53205,"code":66746,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cform action=\"http:\u002F\u002Fwww.itcast.cn\">\n    \u003Cinput type=\"submit\" value=\"免费注册\">\n    \u003Cscript>\n      const form = document.querySelector('form')\n      form.addEventListener('submit', function (e) {\n        e.preventDefault()\n      })\n    \u003C\u002Fscript>\n  \u003C\u002Fform>\n\u003C\u002Fbody>\n",[27,66748,66749,66757,66774,66797,66805,66810,66815,66820,66824,66832,66840],{"__ignoreMap":25},[30,66750,66751,66753,66755],{"class":32,"line":33},[30,66752,1230],{"class":321},[30,66754,51938],{"class":51438},[30,66756,51445],{"class":321},[30,66758,66759,66761,66764,66767,66769,66772],{"class":32,"line":44},[30,66760,52282],{"class":321},[30,66762,66763],{"class":51438},"form",[30,66765,66766],{"class":36}," action",[30,66768,367],{"class":321},[30,66770,66771],{"class":74},"\"http:\u002F\u002Fwww.itcast.cn\"",[30,66773,51445],{"class":321},[30,66775,66776,66778,66780,66782,66784,66787,66790,66792,66795],{"class":32,"line":52},[30,66777,51479],{"class":321},[30,66779,53959],{"class":51438},[30,66781,53962],{"class":36},[30,66783,367],{"class":321},[30,66785,66786],{"class":74},"\"submit\"",[30,66788,66789],{"class":36}," value",[30,66791,367],{"class":321},[30,66793,66794],{"class":74},"\"免费注册\"",[30,66796,51445],{"class":321},[30,66798,66799,66801,66803],{"class":32,"line":60},[30,66800,51479],{"class":321},[30,66802,51951],{"class":51438},[30,66804,51445],{"class":321},[30,66806,66807],{"class":32,"line":68},[30,66808,66809],{"class":321},"      const form = document.querySelector('form')\n",[30,66811,66812],{"class":32,"line":80},[30,66813,66814],{"class":321},"      form.addEventListener('submit', function (e) {\n",[30,66816,66817],{"class":32,"line":88},[30,66818,66819],{"class":321},"        e.preventDefault()\n",[30,66821,66822],{"class":32,"line":96},[30,66823,64953],{"class":321},[30,66825,66826,66828,66830],{"class":32,"line":104},[30,66827,51914],{"class":321},[30,66829,51951],{"class":51438},[30,66831,51445],{"class":321},[30,66833,66834,66836,66838],{"class":32,"line":112},[30,66835,52555],{"class":321},[30,66837,66763],{"class":51438},[30,66839,51445],{"class":321},[30,66841,66842,66844,66846],{"class":32,"line":123},[30,66843,51923],{"class":321},[30,66845,51938],{"class":51438},[30,66847,51445],{"class":321},[157,66849,66850],{},"点击不在跳转！！！",[287,66852,66854],{"id":66853},"_332-事件委托","3.3.2 事件委托",[157,66856,66857],{},[160,66858],{"alt":25,"src":66859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[20,66861,66863],{"className":50771,"code":66862,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cul>\n    \u003Cli>1\u003C\u002Fli>\n    \u003Cli>2\u003C\u002Fli>\n    \u003Cli>3\u003C\u002Fli>\n    \u003Cli>4\u003C\u002Fli>\n    \u003Cli>5\u003C\u002Fli>\n    \u003Cp>我不需要变色\u003C\u002Fp>\n  \u003C\u002Ful>\n  \u003Cscript>\n    \u002F\u002F 点击每个li，当前文字变为红色\n    const ul = document.querySelector('ul')\n    ul.addEventListener('click', function (e) {\n      \u002F\u002F alert(1)\n      \u002F\u002F e.target就是我们点击的对象\n      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n      \u002F\u002F e.target.style.color = 'red'\n      console.log(e)\n\n      console.dir(e.target)\n\n      \u002F\u002F 我们需求，我们只有点击li才会变色\n      \u002F\u002F 通过tagName来进行判断\n      if (e.target.tagName === 'LI') {\n        e.target.style.color = 'red'\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,66864,66865,66875,66889,66893,66901,66915,66935,66947,66955,66959,66967,66975,66987,66999,67011,67023,67035,67048,67056,67064,67069,67088,67109,67114,67119,67124,67129,67138,67142,67152,67156,67161,67166,67180,67190,67194,67198,67206,67214,67218],{"__ignoreMap":25},[30,66866,66867,66869,66871,66873],{"class":32,"line":33},[30,66868,51435],{"class":321},[30,66870,51439],{"class":51438},[30,66872,51442],{"class":36},[30,66874,51445],{"class":321},[30,66876,66877,66879,66881,66883,66885,66887],{"class":32,"line":44},[30,66878,1230],{"class":321},[30,66880,50773],{"class":51438},[30,66882,51454],{"class":36},[30,66884,367],{"class":321},[30,66886,51459],{"class":74},[30,66888,51445],{"class":321},[30,66890,66891],{"class":32,"line":52},[30,66892,2582],{"emptyLinePlaceholder":245},[30,66894,66895,66897,66899],{"class":32,"line":60},[30,66896,1230],{"class":321},[30,66898,51472],{"class":51438},[30,66900,51445],{"class":321},[30,66902,66903,66905,66907,66909,66911,66913],{"class":32,"line":68},[30,66904,52282],{"class":321},[30,66906,51482],{"class":51438},[30,66908,51485],{"class":36},[30,66910,367],{"class":321},[30,66912,51490],{"class":74},[30,66914,51445],{"class":321},[30,66916,66917,66919,66921,66923,66925,66927,66929,66931,66933],{"class":32,"line":80},[30,66918,52282],{"class":321},[30,66920,51482],{"class":51438},[30,66922,15102],{"class":36},[30,66924,367],{"class":321},[30,66926,51529],{"class":74},[30,66928,51509],{"class":36},[30,66930,367],{"class":321},[30,66932,51536],{"class":74},[30,66934,51445],{"class":321},[30,66936,66937,66939,66941,66943,66945],{"class":32,"line":88},[30,66938,52282],{"class":321},[30,66940,51545],{"class":51438},[30,66942,51548],{"class":321},[30,66944,51545],{"class":51438},[30,66946,51445],{"class":321},[30,66948,66949,66951,66953],{"class":32,"line":96},[30,66950,51923],{"class":321},[30,66952,51472],{"class":51438},[30,66954,51445],{"class":321},[30,66956,66957],{"class":32,"line":104},[30,66958,2582],{"emptyLinePlaceholder":245},[30,66960,66961,66963,66965],{"class":32,"line":112},[30,66962,1230],{"class":321},[30,66964,51938],{"class":51438},[30,66966,51445],{"class":321},[30,66968,66969,66971,66973],{"class":32,"line":123},[30,66970,52282],{"class":321},[30,66972,147],{"class":51438},[30,66974,51445],{"class":321},[30,66976,66977,66979,66981,66983,66985],{"class":32,"line":131},[30,66978,51479],{"class":321},[30,66980,150],{"class":51438},[30,66982,54104],{"class":321},[30,66984,150],{"class":51438},[30,66986,51445],{"class":321},[30,66988,66989,66991,66993,66995,66997],{"class":32,"line":142},[30,66990,51479],{"class":321},[30,66992,150],{"class":51438},[30,66994,54123],{"class":321},[30,66996,150],{"class":51438},[30,66998,51445],{"class":321},[30,67000,67001,67003,67005,67007,67009],{"class":32,"line":1811},[30,67002,51479],{"class":321},[30,67004,150],{"class":51438},[30,67006,54142],{"class":321},[30,67008,150],{"class":51438},[30,67010,51445],{"class":321},[30,67012,67013,67015,67017,67019,67021],{"class":32,"line":1825},[30,67014,51479],{"class":321},[30,67016,150],{"class":51438},[30,67018,54161],{"class":321},[30,67020,150],{"class":51438},[30,67022,51445],{"class":321},[30,67024,67025,67027,67029,67031,67033],{"class":32,"line":1830},[30,67026,51479],{"class":321},[30,67028,150],{"class":51438},[30,67030,54180],{"class":321},[30,67032,150],{"class":51438},[30,67034,51445],{"class":321},[30,67036,67037,67039,67041,67044,67046],{"class":32,"line":1836},[30,67038,51479],{"class":321},[30,67040,157],{"class":51438},[30,67042,67043],{"class":321},">我不需要变色\u003C\u002F",[30,67045,157],{"class":51438},[30,67047,51445],{"class":321},[30,67049,67050,67052,67054],{"class":32,"line":1857},[30,67051,52555],{"class":321},[30,67053,147],{"class":51438},[30,67055,51445],{"class":321},[30,67057,67058,67060,67062],{"class":32,"line":1862},[30,67059,52282],{"class":321},[30,67061,51951],{"class":51438},[30,67063,51445],{"class":321},[30,67065,67066],{"class":32,"line":1876},[30,67067,67068],{"class":379},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[30,67070,67071,67073,67075,67077,67079,67081,67083,67086],{"class":32,"line":1881},[30,67072,11403],{"class":317},[30,67074,61430],{"class":40},[30,67076,13746],{"class":317},[30,67078,54534],{"class":321},[30,67080,54537],{"class":36},[30,67082,322],{"class":321},[30,67084,67085],{"class":74},"'ul'",[30,67087,328],{"class":321},[30,67089,67090,67093,67095,67097,67099,67101,67103,67105,67107],{"class":32,"line":1910},[30,67091,67092],{"class":321},"    ul.",[30,67094,57951],{"class":36},[30,67096,322],{"class":321},[30,67098,57956],{"class":74},[30,67100,12617],{"class":321},[30,67102,54587],{"class":317},[30,67104,1841],{"class":321},[30,67106,395],{"class":5398},[30,67108,12624],{"class":321},[30,67110,67111],{"class":32,"line":1915},[30,67112,67113],{"class":379},"      \u002F\u002F alert(1)\n",[30,67115,67116],{"class":32,"line":1932},[30,67117,67118],{"class":379},"      \u002F\u002F e.target就是我们点击的对象\n",[30,67120,67121],{"class":32,"line":1937},[30,67122,67123],{"class":379},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[30,67125,67126],{"class":32,"line":1942},[30,67127,67128],{"class":379},"      \u002F\u002F e.target.style.color = 'red'\n",[30,67130,67131,67133,67135],{"class":32,"line":1947},[30,67132,58382],{"class":321},[30,67134,58385],{"class":36},[30,67136,67137],{"class":321},"(e)\n",[30,67139,67140],{"class":32,"line":1961},[30,67141,2582],{"emptyLinePlaceholder":245},[30,67143,67144,67146,67149],{"class":32,"line":1966},[30,67145,58382],{"class":321},[30,67147,67148],{"class":36},"dir",[30,67150,67151],{"class":321},"(e.target)\n",[30,67153,67154],{"class":32,"line":2759},[30,67155,2582],{"emptyLinePlaceholder":245},[30,67157,67158],{"class":32,"line":2773},[30,67159,67160],{"class":379},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[30,67162,67163],{"class":32,"line":2781},[30,67164,67165],{"class":379},"      \u002F\u002F 通过tagName来进行判断\n",[30,67167,67168,67170,67173,67175,67178],{"class":32,"line":2786},[30,67169,54618],{"class":317},[30,67171,67172],{"class":321}," (e.target.tagName ",[30,67174,54624],{"class":317},[30,67176,67177],{"class":74}," 'LI'",[30,67179,12624],{"class":321},[30,67181,67182,67185,67187],{"class":32,"line":2792},[30,67183,67184],{"class":321},"        e.target.style.color ",[30,67186,367],{"class":317},[30,67188,67189],{"class":74}," 'red'\n",[30,67191,67192],{"class":32,"line":2798},[30,67193,52536],{"class":321},[30,67195,67196],{"class":32,"line":2803},[30,67197,33599],{"class":321},[30,67199,67200,67202,67204],{"class":32,"line":8130},[30,67201,52555],{"class":321},[30,67203,51951],{"class":51438},[30,67205,51445],{"class":321},[30,67207,67208,67210,67212],{"class":32,"line":8154},[30,67209,51923],{"class":321},[30,67211,51938],{"class":51438},[30,67213,51445],{"class":321},[30,67215,67216],{"class":32,"line":8159},[30,67217,2582],{"emptyLinePlaceholder":245},[30,67219,67220,67222,67224],{"class":32,"line":8165},[30,67221,51923],{"class":321},[30,67223,50773],{"class":51438},[30,67225,51445],{"class":321},[157,67227,67228],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[157,67230,67231],{},"if(e.target.ragName==='P') {}",[157,67233,67234],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[157,67236,67237],{},"通过事件委托的方式实现tab栏切换改造：",[157,67239,67240],{},"一定要记住自定义属性！！！！！！",[157,67242,67243],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[157,67245,67246],{},"id是自定义的属性名",[157,67248,67249],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[20,67251,67253],{"className":50771,"code":67252,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\" data-id=\"0\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"1\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"2\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"3\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"4\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 采取事件委托的形式，tab栏切换\n    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n    const ul = document.querySelector('.tab-nav ul')\n    \u002F\u002F 2.添加事件\n    ul.addEventListener('click', function (e) {\n      console.dir(e.target)\n      \u002F\u002Fe.targer是我们点击的对象\n      if (e.target.tagName === 'A') {\n        document.querySelector('.active').classList.remove('active')\n        e.target.classList.add('active')\n\n        \u002F\u002F 下面大盒子模块\n        \u002F\u002F console.log(e.target.dataset.id)\n        const i = +e.target.dataset.id\n        document.querySelector('.tab-content .active').classList.remove('active')\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,67254,67255,67265,67279,67283,67291,67305,67325,67345,67357,67365,67371,67381,67391,67395,67399,67405,67417,67429,67441,67457,67461,67465,67471,67483,67495,67507,67517,67527,67531,67535,67543,67555,67565,67577,67581,67585,67593,67603,67613,67623,67627,67631,67641,67655,67667,67671,67675,67687,67697,67713,67723,67727,67731,67745,67755,67765,67769,67773,67779,67793,67797,67801,67809,67819,67823,67827,67836,67846,67850,67858,67866,67870,67878,67892,67906,67918,67926,67965,67997,68029,68061,68093,68101,68109,68123,68157,68191,68225,68259,68293,68301,68309,68317,68322,68327,68346,68351,68371,68379,68384,68397,68418,68431,68435,68440,68445,68458,68478,68506,68510,68514,68518,68526,68534,68538],{"__ignoreMap":25},[30,67256,67257,67259,67261,67263],{"class":32,"line":33},[30,67258,51435],{"class":321},[30,67260,51439],{"class":51438},[30,67262,51442],{"class":36},[30,67264,51445],{"class":321},[30,67266,67267,67269,67271,67273,67275,67277],{"class":32,"line":44},[30,67268,1230],{"class":321},[30,67270,50773],{"class":51438},[30,67272,51454],{"class":36},[30,67274,367],{"class":321},[30,67276,51459],{"class":74},[30,67278,51445],{"class":321},[30,67280,67281],{"class":32,"line":52},[30,67282,2582],{"emptyLinePlaceholder":245},[30,67284,67285,67287,67289],{"class":32,"line":60},[30,67286,1230],{"class":321},[30,67288,51472],{"class":51438},[30,67290,51445],{"class":321},[30,67292,67293,67295,67297,67299,67301,67303],{"class":32,"line":68},[30,67294,52282],{"class":321},[30,67296,51482],{"class":51438},[30,67298,51485],{"class":36},[30,67300,367],{"class":321},[30,67302,51490],{"class":74},[30,67304,59265],{"class":321},[30,67306,67307,67309,67311,67313,67315,67317,67319,67321,67323],{"class":32,"line":80},[30,67308,52282],{"class":321},[30,67310,51482],{"class":51438},[30,67312,51501],{"class":36},[30,67314,367],{"class":321},[30,67316,51506],{"class":74},[30,67318,51509],{"class":36},[30,67320,367],{"class":321},[30,67322,51514],{"class":74},[30,67324,59265],{"class":321},[30,67326,67327,67329,67331,67333,67335,67337,67339,67341,67343],{"class":32,"line":88},[30,67328,52282],{"class":321},[30,67330,51482],{"class":51438},[30,67332,15102],{"class":36},[30,67334,367],{"class":321},[30,67336,51529],{"class":74},[30,67338,51509],{"class":36},[30,67340,367],{"class":321},[30,67342,51536],{"class":74},[30,67344,59265],{"class":321},[30,67346,67347,67349,67351,67353,67355],{"class":32,"line":96},[30,67348,52282],{"class":321},[30,67350,51545],{"class":51438},[30,67352,63763],{"class":321},[30,67354,51545],{"class":51438},[30,67356,51445],{"class":321},[30,67358,67359,67361,67363],{"class":32,"line":104},[30,67360,52282],{"class":321},[30,67362,234],{"class":51438},[30,67364,51445],{"class":321},[30,67366,67367,67369],{"class":32,"line":112},[30,67368,6585],{"class":51438},[30,67370,15754],{"class":321},[30,67372,67373,67375,67377,67379],{"class":32,"line":123},[30,67374,54844],{"class":40},[30,67376,51575],{"class":321},[30,67378,511],{"class":40},[30,67380,1480],{"class":321},[30,67382,67383,67385,67387,67389],{"class":32,"line":131},[30,67384,54833],{"class":40},[30,67386,51575],{"class":321},[30,67388,511],{"class":40},[30,67390,1480],{"class":321},[30,67392,67393],{"class":32,"line":142},[30,67394,2369],{"class":321},[30,67396,67397],{"class":32,"line":1811},[30,67398,2582],{"emptyLinePlaceholder":245},[30,67400,67401,67403],{"class":32,"line":1825},[30,67402,63814],{"class":36},[30,67404,15754],{"class":321},[30,67406,67407,67409,67411,67413,67415],{"class":32,"line":1830},[30,67408,54909],{"class":40},[30,67410,51575],{"class":321},[30,67412,63825],{"class":40},[30,67414,51630],{"class":317},[30,67416,1480],{"class":321},[30,67418,67419,67421,67423,67425,67427],{"class":32,"line":1836},[30,67420,54923],{"class":40},[30,67422,51575],{"class":321},[30,67424,63838],{"class":40},[30,67426,51630],{"class":317},[30,67428,1480],{"class":321},[30,67430,67431,67433,67435,67437,67439],{"class":32,"line":1857},[30,67432,54844],{"class":40},[30,67434,51575],{"class":321},[30,67436,1020],{"class":40},[30,67438,51630],{"class":317},[30,67440,1480],{"class":321},[30,67442,67443,67445,67447,67449,67451,67453,67455],{"class":32,"line":1862},[30,67444,62115],{"class":40},[30,67446,51575],{"class":321},[30,67448,537],{"class":40},[30,67450,51630],{"class":317},[30,67452,51659],{"class":40},[30,67454,62382],{"class":40},[30,67456,1480],{"class":321},[30,67458,67459],{"class":32,"line":1876},[30,67460,2369],{"class":321},[30,67462,67463],{"class":32,"line":1881},[30,67464,2582],{"emptyLinePlaceholder":245},[30,67466,67467,67469],{"class":32,"line":1910},[30,67468,63883],{"class":36},[30,67470,15754],{"class":321},[30,67472,67473,67475,67477,67479,67481],{"class":32,"line":1915},[30,67474,54909],{"class":40},[30,67476,51575],{"class":321},[30,67478,631],{"class":40},[30,67480,648],{"class":317},[30,67482,1480],{"class":321},[30,67484,67485,67487,67489,67491,67493],{"class":32,"line":1932},[30,67486,54923],{"class":40},[30,67488,51575],{"class":321},[30,67490,1227],{"class":40},[30,67492,51630],{"class":317},[30,67494,1480],{"class":321},[30,67496,67497,67499,67501,67503,67505],{"class":32,"line":1937},[30,67498,57497],{"class":40},[30,67500,51575],{"class":321},[30,67502,1227],{"class":40},[30,67504,51630],{"class":317},[30,67506,1480],{"class":321},[30,67508,67509,67511,67513,67515],{"class":32,"line":1942},[30,67510,55147],{"class":40},[30,67512,51575],{"class":321},[30,67514,51615],{"class":40},[30,67516,1480],{"class":321},[30,67518,67519,67521,67523,67525],{"class":32,"line":1947},[30,67520,55158],{"class":40},[30,67522,51575],{"class":321},[30,67524,51806],{"class":40},[30,67526,1480],{"class":321},[30,67528,67529],{"class":32,"line":1961},[30,67530,2369],{"class":321},[30,67532,67533],{"class":32,"line":1966},[30,67534,2582],{"emptyLinePlaceholder":245},[30,67536,67537,67539,67541],{"class":32,"line":2759},[30,67538,63883],{"class":36},[30,67540,63956],{"class":51438},[30,67542,15754],{"class":321},[30,67544,67545,67547,67549,67551,67553],{"class":32,"line":2773},[30,67546,55060],{"class":40},[30,67548,51575],{"class":321},[30,67550,1120],{"class":40},[30,67552,51630],{"class":317},[30,67554,1480],{"class":321},[30,67556,67557,67559,67561,67563],{"class":32,"line":2781},[30,67558,62472],{"class":40},[30,67560,51575],{"class":321},[30,67562,63979],{"class":40},[30,67564,1480],{"class":321},[30,67566,67567,67569,67571,67573,67575],{"class":32,"line":2786},[30,67568,62138],{"class":40},[30,67570,51575],{"class":321},[30,67572,1020],{"class":40},[30,67574,51630],{"class":317},[30,67576,1480],{"class":321},[30,67578,67579],{"class":32,"line":2792},[30,67580,2369],{"class":321},[30,67582,67583],{"class":32,"line":2798},[30,67584,2582],{"emptyLinePlaceholder":245},[30,67586,67587,67589,67591],{"class":32,"line":2803},[30,67588,63883],{"class":36},[30,67590,61430],{"class":51438},[30,67592,15754],{"class":321},[30,67594,67595,67597,67599,67601],{"class":32,"line":8130},[30,67596,54870],{"class":40},[30,67598,51575],{"class":321},[30,67600,54875],{"class":40},[30,67602,1480],{"class":321},[30,67604,67605,67607,67609,67611],{"class":32,"line":8154},[30,67606,55147],{"class":40},[30,67608,51575],{"class":321},[30,67610,51615],{"class":40},[30,67612,1480],{"class":321},[30,67614,67615,67617,67619,67621],{"class":32,"line":8159},[30,67616,55158],{"class":40},[30,67618,51575],{"class":321},[30,67620,51718],{"class":40},[30,67622,1480],{"class":321},[30,67624,67625],{"class":32,"line":8165},[30,67626,2369],{"class":321},[30,67628,67629],{"class":32,"line":8192},[30,67630,2582],{"emptyLinePlaceholder":245},[30,67632,67633,67635,67637,67639],{"class":32,"line":8197},[30,67634,63883],{"class":36},[30,67636,61430],{"class":51438},[30,67638,55213],{"class":51438},[30,67640,15754],{"class":321},[30,67642,67643,67645,67647,67649,67651,67653],{"class":32,"line":8203},[30,67644,54844],{"class":40},[30,67646,51575],{"class":321},[30,67648,511],{"class":40},[30,67650,9132],{"class":40},[30,67652,51630],{"class":317},[30,67654,1480],{"class":321},[30,67656,67657,67659,67661,67663,67665],{"class":32,"line":8215},[30,67658,55060],{"class":40},[30,67660,51575],{"class":321},[30,67662,869],{"class":40},[30,67664,51630],{"class":317},[30,67666,1480],{"class":321},[30,67668,67669],{"class":32,"line":8227},[30,67670,2369],{"class":321},[30,67672,67673],{"class":32,"line":8239},[30,67674,2582],{"emptyLinePlaceholder":245},[30,67676,67677,67679,67681,67683,67685],{"class":32,"line":9898},[30,67678,63883],{"class":36},[30,67680,61430],{"class":51438},[30,67682,55213],{"class":51438},[30,67684,1585],{"class":51438},[30,67686,15754],{"class":321},[30,67688,67689,67691,67693,67695],{"class":32,"line":9923},[30,67690,64108],{"class":40},[30,67692,51575],{"class":321},[30,67694,54875],{"class":40},[30,67696,1480],{"class":321},[30,67698,67699,67701,67703,67705,67707,67709,67711],{"class":32,"line":9946},[30,67700,62370],{"class":40},[30,67702,51575],{"class":321},[30,67704,398],{"class":40},[30,67706,51630],{"class":317},[30,67708,51659],{"class":40},[30,67710,64129],{"class":40},[30,67712,1480],{"class":321},[30,67714,67715,67717,67719,67721],{"class":32,"line":9970},[30,67716,57554],{"class":40},[30,67718,51575],{"class":321},[30,67720,62507],{"class":40},[30,67722,1480],{"class":321},[30,67724,67725],{"class":32,"line":9975},[30,67726,2369],{"class":321},[30,67728,67729],{"class":32,"line":9980},[30,67730,2582],{"emptyLinePlaceholder":245},[30,67732,67733,67735,67737,67739,67741,67743],{"class":32,"line":9985},[30,67734,63883],{"class":36},[30,67736,61430],{"class":51438},[30,67738,55213],{"class":51438},[30,67740,1585],{"class":51438},[30,67742,64162],{"class":36},[30,67744,15754],{"class":321},[30,67746,67747,67749,67751,67753],{"class":32,"line":9994},[30,67748,61929],{"class":40},[30,67750,51575],{"class":321},[30,67752,64173],{"class":40},[30,67754,1480],{"class":321},[30,67756,67757,67759,67761,67763],{"class":32,"line":9999},[30,67758,57554],{"class":40},[30,67760,51575],{"class":321},[30,67762,64173],{"class":40},[30,67764,1480],{"class":321},[30,67766,67767],{"class":32,"line":10005},[30,67768,2369],{"class":321},[30,67770,67771],{"class":32,"line":10026},[30,67772,2582],{"emptyLinePlaceholder":245},[30,67774,67775,67777],{"class":32,"line":10032},[30,67776,64198],{"class":36},[30,67778,15754],{"class":321},[30,67780,67781,67783,67785,67787,67789,67791],{"class":32,"line":10046},[30,67782,54833],{"class":40},[30,67784,51575],{"class":321},[30,67786,511],{"class":40},[30,67788,64211],{"class":40},[30,67790,51630],{"class":317},[30,67792,1480],{"class":321},[30,67794,67795],{"class":32,"line":10052},[30,67796,2369],{"class":321},[30,67798,67799],{"class":32,"line":10079},[30,67800,2582],{"emptyLinePlaceholder":245},[30,67802,67803,67805,67807],{"class":32,"line":10088},[30,67804,64198],{"class":36},[30,67806,62312],{"class":36},[30,67808,15754],{"class":321},[30,67810,67811,67813,67815,67817],{"class":32,"line":10094},[30,67812,55147],{"class":40},[30,67814,51575],{"class":321},[30,67816,54875],{"class":40},[30,67818,1480],{"class":321},[30,67820,67821],{"class":32,"line":10102},[30,67822,2369],{"class":321},[30,67824,67825],{"class":32,"line":10107},[30,67826,2582],{"emptyLinePlaceholder":245},[30,67828,67829,67831,67834],{"class":32,"line":16786},[30,67830,64198],{"class":36},[30,67832,67833],{"class":36}," .active",[30,67835,15754],{"class":321},[30,67837,67838,67840,67842,67844],{"class":32,"line":16792},[30,67839,55147],{"class":40},[30,67841,51575],{"class":321},[30,67843,61007],{"class":40},[30,67845,1480],{"class":321},[30,67847,67848],{"class":32,"line":16815},[30,67849,2369],{"class":321},[30,67851,67852,67854,67856],{"class":32,"line":16821},[30,67853,52555],{"class":321},[30,67855,234],{"class":51438},[30,67857,51445],{"class":321},[30,67859,67860,67862,67864],{"class":32,"line":16844},[30,67861,51923],{"class":321},[30,67863,51472],{"class":51438},[30,67865,51445],{"class":321},[30,67867,67868],{"class":32,"line":16858},[30,67869,2582],{"emptyLinePlaceholder":245},[30,67871,67872,67874,67876],{"class":32,"line":16878},[30,67873,1230],{"class":321},[30,67875,51938],{"class":51438},[30,67877,51445],{"class":321},[30,67879,67880,67882,67884,67886,67888,67890],{"class":32,"line":16884},[30,67881,52282],{"class":321},[30,67883,51749],{"class":51438},[30,67885,53624],{"class":36},[30,67887,367],{"class":321},[30,67889,64313],{"class":74},[30,67891,51445],{"class":321},[30,67893,67894,67896,67898,67900,67902,67904],{"class":32,"line":16895},[30,67895,51479],{"class":321},[30,67897,51749],{"class":51438},[30,67899,53624],{"class":36},[30,67901,367],{"class":321},[30,67903,64328],{"class":74},[30,67905,51445],{"class":321},[30,67907,67908,67910,67912,67914,67916],{"class":32,"line":16918},[30,67909,55372],{"class":321},[30,67911,287],{"class":51438},[30,67913,64339],{"class":321},[30,67915,287],{"class":51438},[30,67917,51445],{"class":321},[30,67919,67920,67922,67924],{"class":32,"line":16940},[30,67921,55372],{"class":321},[30,67923,147],{"class":51438},[30,67925,51445],{"class":321},[30,67927,67928,67930,67932,67934,67936,67938,67940,67942,67944,67946,67948,67950,67952,67955,67957,67959,67961,67963],{"class":32,"line":16945},[30,67929,55440],{"class":321},[30,67931,150],{"class":51438},[30,67933,61190],{"class":321},[30,67935,558],{"class":51438},[30,67937,53624],{"class":36},[30,67939,367],{"class":321},[30,67941,59844],{"class":74},[30,67943,61195],{"class":36},[30,67945,367],{"class":321},[30,67947,64374],{"class":74},[30,67949,54089],{"class":36},[30,67951,367],{"class":321},[30,67953,67954],{"class":74},"\"0\"",[30,67956,64377],{"class":321},[30,67958,558],{"class":51438},[30,67960,55452],{"class":321},[30,67962,150],{"class":51438},[30,67964,51445],{"class":321},[30,67966,67967,67969,67971,67973,67975,67977,67979,67981,67983,67985,67987,67989,67991,67993,67995],{"class":32,"line":16951},[30,67968,55440],{"class":321},[30,67970,150],{"class":51438},[30,67972,61190],{"class":321},[30,67974,558],{"class":51438},[30,67976,61195],{"class":36},[30,67978,367],{"class":321},[30,67980,64374],{"class":74},[30,67982,54089],{"class":36},[30,67984,367],{"class":321},[30,67986,3860],{"class":74},[30,67988,64404],{"class":321},[30,67990,558],{"class":51438},[30,67992,55452],{"class":321},[30,67994,150],{"class":51438},[30,67996,51445],{"class":321},[30,67998,67999,68001,68003,68005,68007,68009,68011,68013,68015,68017,68019,68021,68023,68025,68027],{"class":32,"line":16965},[30,68000,55440],{"class":321},[30,68002,150],{"class":51438},[30,68004,61190],{"class":321},[30,68006,558],{"class":51438},[30,68008,61195],{"class":36},[30,68010,367],{"class":321},[30,68012,64374],{"class":74},[30,68014,54089],{"class":36},[30,68016,367],{"class":321},[30,68018,3883],{"class":74},[30,68020,64431],{"class":321},[30,68022,558],{"class":51438},[30,68024,55452],{"class":321},[30,68026,150],{"class":51438},[30,68028,51445],{"class":321},[30,68030,68031,68033,68035,68037,68039,68041,68043,68045,68047,68049,68051,68053,68055,68057,68059],{"class":32,"line":16978},[30,68032,55440],{"class":321},[30,68034,150],{"class":51438},[30,68036,61190],{"class":321},[30,68038,558],{"class":51438},[30,68040,61195],{"class":36},[30,68042,367],{"class":321},[30,68044,64374],{"class":74},[30,68046,54089],{"class":36},[30,68048,367],{"class":321},[30,68050,3896],{"class":74},[30,68052,64458],{"class":321},[30,68054,558],{"class":51438},[30,68056,55452],{"class":321},[30,68058,150],{"class":51438},[30,68060,51445],{"class":321},[30,68062,68063,68065,68067,68069,68071,68073,68075,68077,68079,68081,68083,68085,68087,68089,68091],{"class":32,"line":16983},[30,68064,55440],{"class":321},[30,68066,150],{"class":51438},[30,68068,61190],{"class":321},[30,68070,558],{"class":51438},[30,68072,61195],{"class":36},[30,68074,367],{"class":321},[30,68076,64374],{"class":74},[30,68078,54089],{"class":36},[30,68080,367],{"class":321},[30,68082,3909],{"class":74},[30,68084,64485],{"class":321},[30,68086,558],{"class":51438},[30,68088,55452],{"class":321},[30,68090,150],{"class":51438},[30,68092,51445],{"class":321},[30,68094,68095,68097,68099],{"class":32,"line":16997},[30,68096,55545],{"class":321},[30,68098,147],{"class":51438},[30,68100,51445],{"class":321},[30,68102,68103,68105,68107],{"class":32,"line":17002},[30,68104,51914],{"class":321},[30,68106,51749],{"class":51438},[30,68108,51445],{"class":321},[30,68110,68111,68113,68115,68117,68119,68121],{"class":32,"line":17008},[30,68112,51479],{"class":321},[30,68114,51749],{"class":51438},[30,68116,53624],{"class":36},[30,68118,367],{"class":321},[30,68120,64522],{"class":74},[30,68122,51445],{"class":321},[30,68124,68125,68127,68129,68131,68133,68135,68137,68139,68141,68143,68145,68147,68149,68151,68153,68155],{"class":32,"line":17013},[30,68126,55372],{"class":321},[30,68128,51749],{"class":51438},[30,68130,53624],{"class":36},[30,68132,367],{"class":321},[30,68134,64537],{"class":74},[30,68136,61190],{"class":321},[30,68138,160],{"class":51438},[30,68140,55377],{"class":36},[30,68142,367],{"class":321},[30,68144,64548],{"class":74},[30,68146,55385],{"class":36},[30,68148,367],{"class":321},[30,68150,7834],{"class":74},[30,68152,64557],{"class":321},[30,68154,51749],{"class":51438},[30,68156,51445],{"class":321},[30,68158,68159,68161,68163,68165,68167,68169,68171,68173,68175,68177,68179,68181,68183,68185,68187,68189],{"class":32,"line":17027},[30,68160,55372],{"class":321},[30,68162,51749],{"class":51438},[30,68164,53624],{"class":36},[30,68166,367],{"class":321},[30,68168,62761],{"class":74},[30,68170,61190],{"class":321},[30,68172,160],{"class":51438},[30,68174,55377],{"class":36},[30,68176,367],{"class":321},[30,68178,64584],{"class":74},[30,68180,55385],{"class":36},[30,68182,367],{"class":321},[30,68184,7834],{"class":74},[30,68186,64557],{"class":321},[30,68188,51749],{"class":51438},[30,68190,51445],{"class":321},[30,68192,68193,68195,68197,68199,68201,68203,68205,68207,68209,68211,68213,68215,68217,68219,68221,68223],{"class":32,"line":17032},[30,68194,55372],{"class":321},[30,68196,51749],{"class":51438},[30,68198,53624],{"class":36},[30,68200,367],{"class":321},[30,68202,62761],{"class":74},[30,68204,61190],{"class":321},[30,68206,160],{"class":51438},[30,68208,55377],{"class":36},[30,68210,367],{"class":321},[30,68212,64619],{"class":74},[30,68214,55385],{"class":36},[30,68216,367],{"class":321},[30,68218,7834],{"class":74},[30,68220,64557],{"class":321},[30,68222,51749],{"class":51438},[30,68224,51445],{"class":321},[30,68226,68227,68229,68231,68233,68235,68237,68239,68241,68243,68245,68247,68249,68251,68253,68255,68257],{"class":32,"line":17037},[30,68228,55372],{"class":321},[30,68230,51749],{"class":51438},[30,68232,53624],{"class":36},[30,68234,367],{"class":321},[30,68236,62761],{"class":74},[30,68238,61190],{"class":321},[30,68240,160],{"class":51438},[30,68242,55377],{"class":36},[30,68244,367],{"class":321},[30,68246,64654],{"class":74},[30,68248,55385],{"class":36},[30,68250,367],{"class":321},[30,68252,7834],{"class":74},[30,68254,64557],{"class":321},[30,68256,51749],{"class":51438},[30,68258,51445],{"class":321},[30,68260,68261,68263,68265,68267,68269,68271,68273,68275,68277,68279,68281,68283,68285,68287,68289,68291],{"class":32,"line":17051},[30,68262,55372],{"class":321},[30,68264,51749],{"class":51438},[30,68266,53624],{"class":36},[30,68268,367],{"class":321},[30,68270,62761],{"class":74},[30,68272,61190],{"class":321},[30,68274,160],{"class":51438},[30,68276,55377],{"class":36},[30,68278,367],{"class":321},[30,68280,64689],{"class":74},[30,68282,55385],{"class":36},[30,68284,367],{"class":321},[30,68286,7834],{"class":74},[30,68288,64557],{"class":321},[30,68290,51749],{"class":51438},[30,68292,51445],{"class":321},[30,68294,68295,68297,68299],{"class":32,"line":17063},[30,68296,51914],{"class":321},[30,68298,51749],{"class":51438},[30,68300,51445],{"class":321},[30,68302,68303,68305,68307],{"class":32,"line":17068},[30,68304,52555],{"class":321},[30,68306,51749],{"class":51438},[30,68308,51445],{"class":321},[30,68310,68311,68313,68315],{"class":32,"line":17081},[30,68312,52282],{"class":321},[30,68314,51951],{"class":51438},[30,68316,51445],{"class":321},[30,68318,68319],{"class":32,"line":17086},[30,68320,68321],{"class":379},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[30,68323,68324],{"class":32,"line":17091},[30,68325,68326],{"class":379},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[30,68328,68329,68331,68333,68335,68337,68339,68341,68344],{"class":32,"line":17096},[30,68330,11403],{"class":317},[30,68332,61430],{"class":40},[30,68334,13746],{"class":317},[30,68336,54534],{"class":321},[30,68338,54537],{"class":36},[30,68340,322],{"class":321},[30,68342,68343],{"class":74},"'.tab-nav ul'",[30,68345,328],{"class":321},[30,68347,68348],{"class":32,"line":17109},[30,68349,68350],{"class":379},"    \u002F\u002F 2.添加事件\n",[30,68352,68353,68355,68357,68359,68361,68363,68365,68367,68369],{"class":32,"line":17114},[30,68354,67092],{"class":321},[30,68356,57951],{"class":36},[30,68358,322],{"class":321},[30,68360,57956],{"class":74},[30,68362,12617],{"class":321},[30,68364,54587],{"class":317},[30,68366,1841],{"class":321},[30,68368,395],{"class":5398},[30,68370,12624],{"class":321},[30,68372,68373,68375,68377],{"class":32,"line":32771},[30,68374,58382],{"class":321},[30,68376,67148],{"class":36},[30,68378,67151],{"class":321},[30,68380,68381],{"class":32,"line":32777},[30,68382,68383],{"class":379},"      \u002F\u002Fe.targer是我们点击的对象\n",[30,68385,68386,68388,68390,68392,68395],{"class":32,"line":32783},[30,68387,54618],{"class":317},[30,68389,67172],{"class":321},[30,68391,54624],{"class":317},[30,68393,68394],{"class":74}," 'A'",[30,68396,12624],{"class":321},[30,68398,68399,68401,68403,68405,68408,68410,68412,68414,68416],{"class":32,"line":32789},[30,68400,52063],{"class":321},[30,68402,54537],{"class":36},[30,68404,322],{"class":321},[30,68406,68407],{"class":74},"'.active'",[30,68409,57141],{"class":321},[30,68411,57144],{"class":36},[30,68413,322],{"class":321},[30,68415,64852],{"class":74},[30,68417,328],{"class":321},[30,68419,68420,68423,68425,68427,68429],{"class":32,"line":32795},[30,68421,68422],{"class":321},"        e.target.classList.",[30,68424,5516],{"class":36},[30,68426,322],{"class":321},[30,68428,64852],{"class":74},[30,68430,328],{"class":321},[30,68432,68433],{"class":32,"line":32806},[30,68434,2582],{"emptyLinePlaceholder":245},[30,68436,68437],{"class":32,"line":32812},[30,68438,68439],{"class":379},"        \u002F\u002F 下面大盒子模块\n",[30,68441,68442],{"class":32,"line":32832},[30,68443,68444],{"class":379},"        \u002F\u002F console.log(e.target.dataset.id)\n",[30,68446,68447,68449,68451,68453,68455],{"class":32,"line":32838},[30,68448,61408],{"class":317},[30,68450,3214],{"class":40},[30,68452,13746],{"class":317},[30,68454,45704],{"class":317},[30,68456,68457],{"class":321},"e.target.dataset.id\n",[30,68459,68460,68462,68464,68466,68468,68470,68472,68474,68476],{"class":32,"line":32849},[30,68461,52063],{"class":321},[30,68463,54537],{"class":36},[30,68465,322],{"class":321},[30,68467,64900],{"class":74},[30,68469,57141],{"class":321},[30,68471,57144],{"class":36},[30,68473,322],{"class":321},[30,68475,64852],{"class":74},[30,68477,328],{"class":321},[30,68479,68480,68482,68484,68486,68488,68490,68492,68494,68496,68498,68500,68502,68504],{"class":32,"line":32855},[30,68481,52063],{"class":321},[30,68483,54537],{"class":36},[30,68485,322],{"class":321},[30,68487,64926],{"class":74},[30,68489,761],{"class":321},[30,68491,45704],{"class":317},[30,68493,25291],{"class":40},[30,68495,57170],{"class":74},[30,68497,57141],{"class":321},[30,68499,5516],{"class":36},[30,68501,322],{"class":321},[30,68503,64852],{"class":74},[30,68505,328],{"class":321},[30,68507,68508],{"class":32,"line":32861},[30,68509,2582],{"emptyLinePlaceholder":245},[30,68511,68512],{"class":32,"line":32867},[30,68513,52536],{"class":321},[30,68515,68516],{"class":32,"line":32873},[30,68517,33599],{"class":321},[30,68519,68520,68522,68524],{"class":32,"line":32879},[30,68521,52555],{"class":321},[30,68523,51951],{"class":51438},[30,68525,51445],{"class":321},[30,68527,68528,68530,68532],{"class":32,"line":32885},[30,68529,51923],{"class":321},[30,68531,51938],{"class":51438},[30,68533,51445],{"class":321},[30,68535,68536],{"class":32,"line":32891},[30,68537,2582],{"emptyLinePlaceholder":245},[30,68539,68540,68542,68544],{"class":32,"line":32911},[30,68541,51923],{"class":321},[30,68543,50773],{"class":51438},[30,68545,51445],{"class":321},[287,68547,68549],{"id":68548},"_333-页面加载事件","3.3.3 页面加载事件",[271,68551,68552],{},[150,68553,68554],{},"load",[157,68556,68557],{},[160,68558],{"alt":25,"src":68559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[157,68561,68562],{},"window代表整个窗口，比document还要大",[157,68564,68565],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[157,68567,68568],{},"img.addEventListener('load', function () {",[157,68570,68571],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[157,68573,52602],{},[271,68575,68576],{"start":44},[150,68577,68578],{},"DOMContentLoaded",[157,68580,68581],{},[160,68582],{"alt":25,"src":68583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[157,68585,68586],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[287,68588,68590],{"id":68589},"_334-元素滚动事件","3.3.4 元素滚动事件",[157,68592,68593],{},[160,68594],{"alt":25,"src":68595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[157,68597,68598],{},[160,68599],{"alt":25,"src":68600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[157,68602,68603],{},[160,68604],{"alt":25,"src":68605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[157,68607,68608],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[157,68610,68611],{},"获得的是数字型数据，不带单位",[157,68613,68614],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[157,68616,68617],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[157,68619,68620],{},"它是通过document.documentElement来获取",[157,68622,68623],{},[160,68624],{"alt":25,"src":68625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[157,68627,68628],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[287,68630,68632],{"id":68631},"_335-页面缩放事件","3.3.5 页面缩放事件",[157,68634,68635],{},[160,68636],{"alt":25,"src":68637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[157,68639,68640],{},[160,68641],{"alt":25,"src":68642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[287,68644,68646],{"id":68645},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[157,68648,68649],{},[160,68650],{"alt":25,"src":68651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[157,68653,68654],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[157,68656,68657],{},[160,68658],{"alt":25,"src":68659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[157,68661,68662],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[157,68664,68665],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[157,68667,68668],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[157,68670,68671],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[157,68673,68674],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[157,68676,68677],{},[160,68678],{"alt":25,"src":68679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[157,68681,68682],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[157,68684,68685],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[157,68687,68688],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[157,68690,68691],{},"e.pageX-box.getBoundingClientRect()",[287,68693,68695],{"id":68694},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[157,68697,68698],{},[160,68699],{"alt":25,"src":68700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[157,68702,68703],{},"这个是相对于视口来说的，它是个方法，不是属性值",[287,68705,68707],{"id":68706},"_338-总结","3.3.8 总结",[157,68709,68710],{},[160,68711],{"alt":25,"src":68712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[157,68714,68715],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[157,68717,68718],{},"修改盒子的宽高只能通过width和height来实现",[287,68720,68722],{"id":68721},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[20,68724,68726],{"className":50771,"code":68725,"language":50773,"meta":25,"style":25},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[27,68727,68728,68733,68738,68743,68748],{"__ignoreMap":25},[30,68729,68730],{"class":32,"line":33},[30,68731,68732],{"class":321},"\u002F* 页面滑动 *\u002F\n",[30,68734,68735],{"class":32,"line":44},[30,68736,68737],{"class":321},"html {\n",[30,68739,68740],{"class":32,"line":52},[30,68741,68742],{"class":321},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[30,68744,68745],{"class":32,"line":60},[30,68746,68747],{"class":321},"  scroll-behavior: smooth;\n",[30,68749,68750],{"class":32,"line":68},[30,68751,1751],{"class":321},[157,68753,68754],{},"默认是auto",[287,68756,68758],{"id":68757},"_3310-日期对象","3.3.10 日期对象",[22180,68760,68762],{"id":68761},"_33101-实例化","3.3.10.1 实例化",[157,68764,68765],{},[160,68766],{"alt":25,"src":68767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22180,68769,68771],{"id":68770},"_33102-时期对象方法","3.3.10.2 时期对象方法",[157,68773,68774],{},[160,68775],{"alt":25,"src":68776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[157,68778,68779],{},"月份+1",[157,68781,68782],{},"老外认为第一天为0，星期天",[157,68784,68785],{},"方法使用的时候必须要跟括号",[157,68787,68788],{},"快速获得日期",[157,68790,68791],{},"\u002F\u002F 得到年月日",[157,68793,68794],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[157,68796,68797],{},"\u002F\u002F 得到当地日期",[157,68799,68800],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[157,68802,68803],{},"\u002F\u002F 得到当地时间",[157,68805,68806],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[157,68808,68809],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[157,68811,68812],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51951,68814,68815],{},"\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",[157,68817,68818],{},"学会去封装函数！",[22180,68820,68822],{"id":68821},"_33103-时间戳","3.3.10.3 时间戳",[157,68824,68825],{},[160,68826],{"alt":25,"src":68827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[157,68829,68830],{},[160,68831],{"alt":25,"src":68832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[157,68834,68835],{},"三种方法记住一个就可以",[287,68837,68839],{"id":68838},"_3311-节点操作","3.3.11 节点操作",[22180,68841,68843],{"id":68842},"_33111-dom节点","3.3.11.1 DOM节点",[157,68845,68846],{},[160,68847],{"alt":25,"src":68848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[157,68850,68851],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22180,68853,68855],{"id":68854},"_33112-查找节点","3.3.11.2 查找节点",[157,68857,68858],{},"前边的document.querySelector()是获取的元素",[157,68860,68861],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[157,68863,68864],{},[160,68865],{"alt":25,"src":68866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[271,68868,68869],{},[150,68870,68871],{},"父节点",[157,68873,68874],{},[160,68875],{"alt":25,"src":68876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[271,68878,68879],{"start":44},[150,68880,68881],{},"子节点",[157,68883,68884],{},[160,68885],{"alt":25,"src":68886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[157,68888,68889],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[157,68891,68892],{},"children获得的是伪数组，是亲儿子",[271,68894,68895],{"start":52},[150,68896,68897],{},"兄弟节点",[157,68899,68900],{},[160,68901],{"alt":25,"src":68902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22180,68904,68906],{"id":68905},"_33113-增加节点","3.3.11.3 增加节点",[157,68908,68909],{},[160,68910],{"alt":25,"src":68911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[157,68913,68914],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[157,68916,68917],{},[160,68918],{"alt":25,"src":68919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[157,68921,68922],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[157,68924,68925],{},"下面是写法的部分展示，就按照下边的格式来写",[157,68927,68928],{},"例：",[51951,68930,68931],{},"\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",[157,68933,68934],{},[160,68935],{"alt":25,"src":68936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[157,68938,68939],{},"false只克隆标签，里边的内容不会克隆过来",[20,68941,68943],{"className":50771,"code":68942,"language":50773,"meta":25,"style":25},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[27,68944,68945],{"__ignoreMap":25},[30,68946,68947],{"class":32,"line":33},[30,68948,68942],{"class":321},[22180,68950,68952],{"id":68951},"_33114-删除节点","3.3.11.4 删除节点",[157,68954,68955],{},[160,68956],{"alt":25,"src":68957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[157,68959,68960],{},"父亲删儿子",[157,68962,68963],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[287,68965,68967],{"id":68966},"_3312-m端事件","3.3.12 M端事件",[157,68969,68970],{},"M端就是移动端",[157,68972,68973],{},[160,68974],{"alt":25,"src":68975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[287,68977,68979],{"id":68978},"_3313-插件","3.3.13 插件",[157,68981,68982],{},"要熟悉官网！！！",[157,68984,68985],{},[558,68986,68987],{"href":68987,"rel":68988},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24045],[157,68990,68991],{},[558,68992,68993],{"href":68993,"rel":68994},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24045],[287,68996,68998],{"id":68997},"_3314-学生信息表","3.3.14 学生信息表",[271,69000,69001,69004,69007,69010,69013,69016,69019,69022],{},[150,69002,69003],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[150,69005,69006],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[150,69008,69009],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[150,69011,69012],{},"用好表单元素自带的属性，value,name等",[150,69014,69015],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[150,69017,69018],{},"不要忘记事件对象",[150,69020,69021],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[150,69023,69024],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[157,69026,69027],{},"结构：",[20,69029,69031],{"className":50771,"code":69030,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" \u002F>\n  \u003Ctitle>学生信息管理\u003C\u002Ftitle>\n  \u003Clink rel=\"stylesheet\" href=\"css\u002Findex.css\" \u002F>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch1>新增学员\u003C\u002Fh1>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    姓名：\u003Cinput type=\"text\" class=\"uname\" name=\"uname\" \u002F>\n    年龄：\u003Cinput type=\"text\" class=\"age\" name=\"age\" \u002F>\n    性别:\n    \u003Cselect name=\"gender\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    薪资：\u003Cinput type=\"text\" class=\"salary\" name=\"salary\" \u002F>\n    就业城市：\u003Cselect name=\"city\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton class=\"add\">录入\u003C\u002Fbutton>\n  \u003C\u002Fform>\n\n  \u003Ch1>就业榜\u003C\u002Fh1>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>序号\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \n        \u003Ctr>\n          \u003Ctd>1001\u003C\u002Ftd>\n          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n          \u003Ctd>19\u003C\u002Ftd>\n          \u003Ctd>男\u003C\u002Ftd>\n          \u003Ctd>15000\u003C\u002Ftd>\n          \u003Ctd>上海\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n          \u003C\u002Ftd>\n        \u003C\u002Ftr> \n        -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 获取元素\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const gender = document.querySelector('.gender')\n    const salary = document.querySelector('.salary')\n    const city = document.querySelector('.city')\n    const tbody = document.querySelector('tbody')\n\n    \u002F\u002F 获取所有带有name属性的元素\n    const items = document.querySelectorAll('[name]')\n    \u002F\u002F 声明一个空的数组\n    const arr = []\n    \u002F\u002F 1.录入模块\n    \u002F\u002F 1.1这是一个表单提交事件\n    const info = document.querySelector('.info')\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n      e.preventDefault()\n      \u002F\u002F console.log(11)\n\n      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n      \u002F\u002F 先遍历循环\n      for (let i = 0; i \u003C items.length; i++) {\n        if (items[i].value === '') {\n          return alert('输入内容不能为空')\n        }\n      }\n\n      \u002F\u002F 创建新的对象\n      const obj = {\n        stuID: arr.length + 1,\n        uname: uname.value,\n        age: age.value,\n        gender: gender.value,\n        salary: salary.value,\n        city: city.value\n      }\n      \u002F\u002F console.log(obj);\n      \u002F\u002F 追加到数组里面\n      arr.push(obj)\n      \u002F\u002F console.log(arr);\n      \u002F\u002F 清空表单  reset重置表单\n      this.reset()\n      \u002F\u002F 调用渲染函数\n      render()\n    })\n    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n    function render() {\n      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n      tbody.innerHTML = ''\n      \u002F\u002F 遍历数组\n      for (let i = 0; i \u003C arr.length; i++) {\n        const tr = document.createElement('tr')\n        tr.innerHTML = `\n        \u003Ctd>${arr[i].stuID}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].uname}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].age}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].gender}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].salary}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].city}\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\" data-id=${i}>删除\u003C\u002Fa>\n          \u003C\u002Ftd> \n          `\n        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n        tbody.appendChild(tr)\n      }\n    }\n\n    \u002F\u002F 3.删除委托\n    \u002F\u002F 3.1 事件委托 tbody\n    tbody.addEventListener('click', function (e) {\n      if (e.target.tagName === 'A') {\n        \u002F\u002F 得到当前元素的自定义属性 data-id\n        \u002F\u002F console.log(e.target.dataset.id);\n        \u002F\u002F 删除arr 数组里面对应的数据\n        arr.splice(e.target.dataset.id, 1)\n        \u002F\u002F 重新渲染一次\n        render()\n      }\n    })\n  \u003C\u002Fscript>\n\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,69032,69033,69043,69057,69061,69069,69083,69103,69124,69137,69161,69169,69173,69181,69194,69215,69243,69271,69276,69298,69318,69337,69345,69373,69395,69415,69435,69455,69475,69495,69503,69523,69531,69535,69548,69556,69564,69572,69585,69598,69611,69624,69637,69650,69663,69671,69679,69687,69692,69697,69702,69707,69712,69717,69722,69727,69732,69737,69742,69747,69752,69760,69768,69776,69780,69800,69819,69839,69859,69879,69899,69903,69908,69928,69933,69943,69948,69953,69973,69995,70000,70010,70014,70018,70023,70028,70057,70071,70086,70090,70094,70098,70103,70114,70127,70132,70137,70142,70147,70152,70156,70161,70166,70175,70180,70185,70197,70202,70209,70213,70218,70228,70233,70243,70248,70276,70297,70307,70327,70345,70362,70379,70396,70413,70417,70427,70432,70437,70442,70453,70457,70461,70465,70470,70475,70496,70508,70513,70518,70523,70537,70542,70549,70553,70557,70565,70569,70577,70581],{"__ignoreMap":25},[30,69034,69035,69037,69039,69041],{"class":32,"line":33},[30,69036,51435],{"class":321},[30,69038,51439],{"class":51438},[30,69040,51442],{"class":36},[30,69042,51445],{"class":321},[30,69044,69045,69047,69049,69051,69053,69055],{"class":32,"line":44},[30,69046,1230],{"class":321},[30,69048,50773],{"class":51438},[30,69050,51454],{"class":36},[30,69052,367],{"class":321},[30,69054,51459],{"class":74},[30,69056,51445],{"class":321},[30,69058,69059],{"class":32,"line":52},[30,69060,2582],{"emptyLinePlaceholder":245},[30,69062,69063,69065,69067],{"class":32,"line":60},[30,69064,1230],{"class":321},[30,69066,51472],{"class":51438},[30,69068,51445],{"class":321},[30,69070,69071,69073,69075,69077,69079,69081],{"class":32,"line":68},[30,69072,52282],{"class":321},[30,69074,51482],{"class":51438},[30,69076,51485],{"class":36},[30,69078,367],{"class":321},[30,69080,51490],{"class":74},[30,69082,59265],{"class":321},[30,69084,69085,69087,69089,69091,69093,69095,69097,69099,69101],{"class":32,"line":80},[30,69086,52282],{"class":321},[30,69088,51482],{"class":51438},[30,69090,15102],{"class":36},[30,69092,367],{"class":321},[30,69094,51529],{"class":74},[30,69096,51509],{"class":36},[30,69098,367],{"class":321},[30,69100,51536],{"class":74},[30,69102,59265],{"class":321},[30,69104,69105,69107,69109,69111,69113,69115,69117,69119,69122],{"class":32,"line":88},[30,69106,52282],{"class":321},[30,69108,51482],{"class":51438},[30,69110,51501],{"class":36},[30,69112,367],{"class":321},[30,69114,51506],{"class":74},[30,69116,51509],{"class":36},[30,69118,367],{"class":321},[30,69120,69121],{"class":74},"\"ie=edge\"",[30,69123,59265],{"class":321},[30,69125,69126,69128,69130,69133,69135],{"class":32,"line":96},[30,69127,52282],{"class":321},[30,69129,51545],{"class":51438},[30,69131,69132],{"class":321},">学生信息管理\u003C\u002F",[30,69134,51545],{"class":51438},[30,69136,51445],{"class":321},[30,69138,69139,69141,69144,69147,69149,69152,69154,69156,69159],{"class":32,"line":104},[30,69140,52282],{"class":321},[30,69142,69143],{"class":51438},"link",[30,69145,69146],{"class":36}," rel",[30,69148,367],{"class":321},[30,69150,69151],{"class":74},"\"stylesheet\"",[30,69153,61195],{"class":36},[30,69155,367],{"class":321},[30,69157,69158],{"class":74},"\"css\u002Findex.css\"",[30,69160,59265],{"class":321},[30,69162,69163,69165,69167],{"class":32,"line":112},[30,69164,51923],{"class":321},[30,69166,51472],{"class":51438},[30,69168,51445],{"class":321},[30,69170,69171],{"class":32,"line":123},[30,69172,2582],{"emptyLinePlaceholder":245},[30,69174,69175,69177,69179],{"class":32,"line":131},[30,69176,1230],{"class":321},[30,69178,51938],{"class":51438},[30,69180,51445],{"class":321},[30,69182,69183,69185,69187,69190,69192],{"class":32,"line":142},[30,69184,52282],{"class":321},[30,69186,10],{"class":51438},[30,69188,69189],{"class":321},">新增学员\u003C\u002F",[30,69191,10],{"class":51438},[30,69193,51445],{"class":321},[30,69195,69196,69198,69200,69202,69204,69206,69209,69211,69213],{"class":32,"line":1811},[30,69197,52282],{"class":321},[30,69199,66763],{"class":51438},[30,69201,53624],{"class":36},[30,69203,367],{"class":321},[30,69205,62802],{"class":74},[30,69207,69208],{"class":36}," autocomplete",[30,69210,367],{"class":321},[30,69212,31914],{"class":74},[30,69214,51445],{"class":321},[30,69216,69217,69220,69222,69224,69226,69228,69230,69232,69235,69237,69239,69241],{"class":32,"line":1825},[30,69218,69219],{"class":321},"    姓名：\u003C",[30,69221,53959],{"class":51438},[30,69223,53962],{"class":36},[30,69225,367],{"class":321},[30,69227,62837],{"class":74},[30,69229,53624],{"class":36},[30,69231,367],{"class":321},[30,69233,69234],{"class":74},"\"uname\"",[30,69236,15102],{"class":36},[30,69238,367],{"class":321},[30,69240,69234],{"class":74},[30,69242,59265],{"class":321},[30,69244,69245,69248,69250,69252,69254,69256,69258,69260,69263,69265,69267,69269],{"class":32,"line":1830},[30,69246,69247],{"class":321},"    年龄：\u003C",[30,69249,53959],{"class":51438},[30,69251,53962],{"class":36},[30,69253,367],{"class":321},[30,69255,62837],{"class":74},[30,69257,53624],{"class":36},[30,69259,367],{"class":321},[30,69261,69262],{"class":74},"\"age\"",[30,69264,15102],{"class":36},[30,69266,367],{"class":321},[30,69268,69262],{"class":74},[30,69270,59265],{"class":321},[30,69272,69273],{"class":32,"line":1836},[30,69274,69275],{"class":321},"    性别:\n",[30,69277,69278,69280,69283,69285,69287,69290,69292,69294,69296],{"class":32,"line":1857},[30,69279,51479],{"class":321},[30,69281,69282],{"class":51438},"select",[30,69284,15102],{"class":36},[30,69286,367],{"class":321},[30,69288,69289],{"class":74},"\"gender\"",[30,69291,53624],{"class":36},[30,69293,367],{"class":321},[30,69295,69289],{"class":74},[30,69297,51445],{"class":321},[30,69299,69300,69302,69305,69307,69309,69311,69314,69316],{"class":32,"line":1862},[30,69301,55372],{"class":321},[30,69303,69304],{"class":51438},"option",[30,69306,66789],{"class":36},[30,69308,367],{"class":321},[30,69310,10143],{"class":74},[30,69312,69313],{"class":321},">男\u003C\u002F",[30,69315,69304],{"class":51438},[30,69317,51445],{"class":321},[30,69319,69320,69322,69324,69326,69328,69330,69333,69335],{"class":32,"line":1876},[30,69321,55372],{"class":321},[30,69323,69304],{"class":51438},[30,69325,66789],{"class":36},[30,69327,367],{"class":321},[30,69329,10212],{"class":74},[30,69331,69332],{"class":321},">女\u003C\u002F",[30,69334,69304],{"class":51438},[30,69336,51445],{"class":321},[30,69338,69339,69341,69343],{"class":32,"line":1881},[30,69340,51914],{"class":321},[30,69342,69282],{"class":51438},[30,69344,51445],{"class":321},[30,69346,69347,69350,69352,69354,69356,69358,69360,69362,69365,69367,69369,69371],{"class":32,"line":1910},[30,69348,69349],{"class":321},"    薪资：\u003C",[30,69351,53959],{"class":51438},[30,69353,53962],{"class":36},[30,69355,367],{"class":321},[30,69357,62837],{"class":74},[30,69359,53624],{"class":36},[30,69361,367],{"class":321},[30,69363,69364],{"class":74},"\"salary\"",[30,69366,15102],{"class":36},[30,69368,367],{"class":321},[30,69370,69364],{"class":74},[30,69372,59265],{"class":321},[30,69374,69375,69378,69380,69382,69384,69387,69389,69391,69393],{"class":32,"line":1915},[30,69376,69377],{"class":321},"    就业城市：\u003C",[30,69379,69282],{"class":51438},[30,69381,15102],{"class":36},[30,69383,367],{"class":321},[30,69385,69386],{"class":74},"\"city\"",[30,69388,53624],{"class":36},[30,69390,367],{"class":321},[30,69392,69386],{"class":74},[30,69394,51445],{"class":321},[30,69396,69397,69399,69401,69403,69405,69408,69411,69413],{"class":32,"line":1932},[30,69398,55372],{"class":321},[30,69400,69304],{"class":51438},[30,69402,66789],{"class":36},[30,69404,367],{"class":321},[30,69406,69407],{"class":74},"\"北京\"",[30,69409,69410],{"class":321},">北京\u003C\u002F",[30,69412,69304],{"class":51438},[30,69414,51445],{"class":321},[30,69416,69417,69419,69421,69423,69425,69428,69431,69433],{"class":32,"line":1937},[30,69418,55372],{"class":321},[30,69420,69304],{"class":51438},[30,69422,66789],{"class":36},[30,69424,367],{"class":321},[30,69426,69427],{"class":74},"\"上海\"",[30,69429,69430],{"class":321},">上海\u003C\u002F",[30,69432,69304],{"class":51438},[30,69434,51445],{"class":321},[30,69436,69437,69439,69441,69443,69445,69448,69451,69453],{"class":32,"line":1942},[30,69438,55372],{"class":321},[30,69440,69304],{"class":51438},[30,69442,66789],{"class":36},[30,69444,367],{"class":321},[30,69446,69447],{"class":74},"\"广州\"",[30,69449,69450],{"class":321},">广州\u003C\u002F",[30,69452,69304],{"class":51438},[30,69454,51445],{"class":321},[30,69456,69457,69459,69461,69463,69465,69468,69471,69473],{"class":32,"line":1947},[30,69458,55372],{"class":321},[30,69460,69304],{"class":51438},[30,69462,66789],{"class":36},[30,69464,367],{"class":321},[30,69466,69467],{"class":74},"\"深圳\"",[30,69469,69470],{"class":321},">深圳\u003C\u002F",[30,69472,69304],{"class":51438},[30,69474,51445],{"class":321},[30,69476,69477,69479,69481,69483,69485,69488,69491,69493],{"class":32,"line":1961},[30,69478,55372],{"class":321},[30,69480,69304],{"class":51438},[30,69482,66789],{"class":36},[30,69484,367],{"class":321},[30,69486,69487],{"class":74},"\"曹县\"",[30,69489,69490],{"class":321},">曹县\u003C\u002F",[30,69492,69304],{"class":51438},[30,69494,51445],{"class":321},[30,69496,69497,69499,69501],{"class":32,"line":1966},[30,69498,51914],{"class":321},[30,69500,69282],{"class":51438},[30,69502,51445],{"class":321},[30,69504,69505,69507,69509,69511,69513,69516,69519,69521],{"class":32,"line":2759},[30,69506,51479],{"class":321},[30,69508,54025],{"class":51438},[30,69510,53624],{"class":36},[30,69512,367],{"class":321},[30,69514,69515],{"class":74},"\"add\"",[30,69517,69518],{"class":321},">录入\u003C\u002F",[30,69520,54025],{"class":51438},[30,69522,51445],{"class":321},[30,69524,69525,69527,69529],{"class":32,"line":2773},[30,69526,52555],{"class":321},[30,69528,66763],{"class":51438},[30,69530,51445],{"class":321},[30,69532,69533],{"class":32,"line":2781},[30,69534,2582],{"emptyLinePlaceholder":245},[30,69536,69537,69539,69541,69544,69546],{"class":32,"line":2786},[30,69538,52282],{"class":321},[30,69540,10],{"class":51438},[30,69542,69543],{"class":321},">就业榜\u003C\u002F",[30,69545,10],{"class":51438},[30,69547,51445],{"class":321},[30,69549,69550,69552,69554],{"class":32,"line":2792},[30,69551,52282],{"class":321},[30,69553,457],{"class":51438},[30,69555,51445],{"class":321},[30,69557,69558,69560,69562],{"class":32,"line":2798},[30,69559,51479],{"class":321},[30,69561,460],{"class":51438},[30,69563,51445],{"class":321},[30,69565,69566,69568,69570],{"class":32,"line":2803},[30,69567,55372],{"class":321},[30,69569,463],{"class":51438},[30,69571,51445],{"class":321},[30,69573,69574,69576,69578,69581,69583],{"class":32,"line":8130},[30,69575,55440],{"class":321},[30,69577,466],{"class":51438},[30,69579,69580],{"class":321},">序号\u003C\u002F",[30,69582,466],{"class":51438},[30,69584,51445],{"class":321},[30,69586,69587,69589,69591,69594,69596],{"class":32,"line":8154},[30,69588,55440],{"class":321},[30,69590,466],{"class":51438},[30,69592,69593],{"class":321},">姓名\u003C\u002F",[30,69595,466],{"class":51438},[30,69597,51445],{"class":321},[30,69599,69600,69602,69604,69607,69609],{"class":32,"line":8159},[30,69601,55440],{"class":321},[30,69603,466],{"class":51438},[30,69605,69606],{"class":321},">年龄\u003C\u002F",[30,69608,466],{"class":51438},[30,69610,51445],{"class":321},[30,69612,69613,69615,69617,69620,69622],{"class":32,"line":8165},[30,69614,55440],{"class":321},[30,69616,466],{"class":51438},[30,69618,69619],{"class":321},">性别\u003C\u002F",[30,69621,466],{"class":51438},[30,69623,51445],{"class":321},[30,69625,69626,69628,69630,69633,69635],{"class":32,"line":8192},[30,69627,55440],{"class":321},[30,69629,466],{"class":51438},[30,69631,69632],{"class":321},">薪资\u003C\u002F",[30,69634,466],{"class":51438},[30,69636,51445],{"class":321},[30,69638,69639,69641,69643,69646,69648],{"class":32,"line":8197},[30,69640,55440],{"class":321},[30,69642,466],{"class":51438},[30,69644,69645],{"class":321},">就业城市\u003C\u002F",[30,69647,466],{"class":51438},[30,69649,51445],{"class":321},[30,69651,69652,69654,69656,69659,69661],{"class":32,"line":8203},[30,69653,55440],{"class":321},[30,69655,466],{"class":51438},[30,69657,69658],{"class":321},">操作\u003C\u002F",[30,69660,466],{"class":51438},[30,69662,51445],{"class":321},[30,69664,69665,69667,69669],{"class":32,"line":8215},[30,69666,55545],{"class":321},[30,69668,463],{"class":51438},[30,69670,51445],{"class":321},[30,69672,69673,69675,69677],{"class":32,"line":8227},[30,69674,51914],{"class":321},[30,69676,460],{"class":51438},[30,69678,51445],{"class":321},[30,69680,69681,69683,69685],{"class":32,"line":8239},[30,69682,51479],{"class":321},[30,69684,504],{"class":51438},[30,69686,51445],{"class":321},[30,69688,69689],{"class":32,"line":9898},[30,69690,69691],{"class":379},"      \u003C!-- \n",[30,69693,69694],{"class":32,"line":9923},[30,69695,69696],{"class":379},"        \u003Ctr>\n",[30,69698,69699],{"class":32,"line":9946},[30,69700,69701],{"class":379},"          \u003Ctd>1001\u003C\u002Ftd>\n",[30,69703,69704],{"class":32,"line":9970},[30,69705,69706],{"class":379},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[30,69708,69709],{"class":32,"line":9975},[30,69710,69711],{"class":379},"          \u003Ctd>19\u003C\u002Ftd>\n",[30,69713,69714],{"class":32,"line":9980},[30,69715,69716],{"class":379},"          \u003Ctd>男\u003C\u002Ftd>\n",[30,69718,69719],{"class":32,"line":9985},[30,69720,69721],{"class":379},"          \u003Ctd>15000\u003C\u002Ftd>\n",[30,69723,69724],{"class":32,"line":9994},[30,69725,69726],{"class":379},"          \u003Ctd>上海\u003C\u002Ftd>\n",[30,69728,69729],{"class":32,"line":9999},[30,69730,69731],{"class":379},"          \u003Ctd>\n",[30,69733,69734],{"class":32,"line":10005},[30,69735,69736],{"class":379},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[30,69738,69739],{"class":32,"line":10026},[30,69740,69741],{"class":379},"          \u003C\u002Ftd>\n",[30,69743,69744],{"class":32,"line":10032},[30,69745,69746],{"class":379},"        \u003C\u002Ftr> \n",[30,69748,69749],{"class":32,"line":10046},[30,69750,69751],{"class":379},"        -->\n",[30,69753,69754,69756,69758],{"class":32,"line":10052},[30,69755,51914],{"class":321},[30,69757,504],{"class":51438},[30,69759,51445],{"class":321},[30,69761,69762,69764,69766],{"class":32,"line":10079},[30,69763,52555],{"class":321},[30,69765,457],{"class":51438},[30,69767,51445],{"class":321},[30,69769,69770,69772,69774],{"class":32,"line":10088},[30,69771,52282],{"class":321},[30,69773,51951],{"class":51438},[30,69775,51445],{"class":321},[30,69777,69778],{"class":32,"line":10094},[30,69779,60096],{"class":379},[30,69781,69782,69784,69787,69789,69791,69793,69795,69798],{"class":32,"line":10102},[30,69783,11403],{"class":317},[30,69785,69786],{"class":40}," uname",[30,69788,13746],{"class":317},[30,69790,54534],{"class":321},[30,69792,54537],{"class":36},[30,69794,322],{"class":321},[30,69796,69797],{"class":74},"'.uname'",[30,69799,328],{"class":321},[30,69801,69802,69804,69806,69808,69810,69812,69814,69817],{"class":32,"line":10107},[30,69803,11403],{"class":317},[30,69805,15871],{"class":40},[30,69807,13746],{"class":317},[30,69809,54534],{"class":321},[30,69811,54537],{"class":36},[30,69813,322],{"class":321},[30,69815,69816],{"class":74},"'.age'",[30,69818,328],{"class":321},[30,69820,69821,69823,69826,69828,69830,69832,69834,69837],{"class":32,"line":16786},[30,69822,11403],{"class":317},[30,69824,69825],{"class":40}," gender",[30,69827,13746],{"class":317},[30,69829,54534],{"class":321},[30,69831,54537],{"class":36},[30,69833,322],{"class":321},[30,69835,69836],{"class":74},"'.gender'",[30,69838,328],{"class":321},[30,69840,69841,69843,69846,69848,69850,69852,69854,69857],{"class":32,"line":16792},[30,69842,11403],{"class":317},[30,69844,69845],{"class":40}," salary",[30,69847,13746],{"class":317},[30,69849,54534],{"class":321},[30,69851,54537],{"class":36},[30,69853,322],{"class":321},[30,69855,69856],{"class":74},"'.salary'",[30,69858,328],{"class":321},[30,69860,69861,69863,69866,69868,69870,69872,69874,69877],{"class":32,"line":16815},[30,69862,11403],{"class":317},[30,69864,69865],{"class":40}," city",[30,69867,13746],{"class":317},[30,69869,54534],{"class":321},[30,69871,54537],{"class":36},[30,69873,322],{"class":321},[30,69875,69876],{"class":74},"'.city'",[30,69878,328],{"class":321},[30,69880,69881,69883,69886,69888,69890,69892,69894,69897],{"class":32,"line":16821},[30,69882,11403],{"class":317},[30,69884,69885],{"class":40}," tbody",[30,69887,13746],{"class":317},[30,69889,54534],{"class":321},[30,69891,54537],{"class":36},[30,69893,322],{"class":321},[30,69895,69896],{"class":74},"'tbody'",[30,69898,328],{"class":321},[30,69900,69901],{"class":32,"line":16844},[30,69902,2582],{"emptyLinePlaceholder":245},[30,69904,69905],{"class":32,"line":16858},[30,69906,69907],{"class":379},"    \u002F\u002F 获取所有带有name属性的元素\n",[30,69909,69910,69912,69915,69917,69919,69921,69923,69926],{"class":32,"line":16878},[30,69911,11403],{"class":317},[30,69913,69914],{"class":40}," items",[30,69916,13746],{"class":317},[30,69918,54534],{"class":321},[30,69920,55819],{"class":36},[30,69922,322],{"class":321},[30,69924,69925],{"class":74},"'[name]'",[30,69927,328],{"class":321},[30,69929,69930],{"class":32,"line":16884},[30,69931,69932],{"class":379},"    \u002F\u002F 声明一个空的数组\n",[30,69934,69935,69937,69939,69941],{"class":32,"line":16895},[30,69936,11403],{"class":317},[30,69938,57833],{"class":40},[30,69940,13746],{"class":317},[30,69942,51976],{"class":321},[30,69944,69945],{"class":32,"line":16918},[30,69946,69947],{"class":379},"    \u002F\u002F 1.录入模块\n",[30,69949,69950],{"class":32,"line":16940},[30,69951,69952],{"class":379},"    \u002F\u002F 1.1这是一个表单提交事件\n",[30,69954,69955,69957,69960,69962,69964,69966,69968,69971],{"class":32,"line":16945},[30,69956,11403],{"class":317},[30,69958,69959],{"class":40}," info",[30,69961,13746],{"class":317},[30,69963,54534],{"class":321},[30,69965,54537],{"class":36},[30,69967,322],{"class":321},[30,69969,69970],{"class":74},"'.info'",[30,69972,328],{"class":321},[30,69974,69975,69978,69980,69982,69985,69987,69989,69991,69993],{"class":32,"line":16951},[30,69976,69977],{"class":321},"    info.",[30,69979,57951],{"class":36},[30,69981,322],{"class":321},[30,69983,69984],{"class":74},"'submit'",[30,69986,12617],{"class":321},[30,69988,54587],{"class":317},[30,69990,1841],{"class":321},[30,69992,395],{"class":5398},[30,69994,12624],{"class":321},[30,69996,69997],{"class":32,"line":16965},[30,69998,69999],{"class":379},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[30,70001,70002,70005,70008],{"class":32,"line":16978},[30,70003,70004],{"class":321},"      e.",[30,70006,70007],{"class":36},"preventDefault",[30,70009,2158],{"class":321},[30,70011,70012],{"class":32,"line":16983},[30,70013,60150],{"class":379},[30,70015,70016],{"class":32,"line":16997},[30,70017,2582],{"emptyLinePlaceholder":245},[30,70019,70020],{"class":32,"line":17002},[30,70021,70022],{"class":379},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[30,70024,70025],{"class":32,"line":17008},[30,70026,70027],{"class":379},"      \u002F\u002F 先遍历循环\n",[30,70029,70030,70032,70034,70036,70038,70040,70042,70044,70046,70049,70051,70053,70055],{"class":32,"line":17013},[30,70031,52422],{"class":317},[30,70033,1841],{"class":321},[30,70035,51985],{"class":317},[30,70037,9620],{"class":321},[30,70039,367],{"class":317},[30,70041,4275],{"class":40},[30,70043,9627],{"class":321},[30,70045,1230],{"class":317},[30,70047,70048],{"class":321}," items.",[30,70050,52106],{"class":40},[30,70052,3396],{"class":321},[30,70054,2474],{"class":317},[30,70056,12624],{"class":321},[30,70058,70059,70061,70064,70066,70069],{"class":32,"line":17027},[30,70060,2679],{"class":317},[30,70062,70063],{"class":321}," (items[i].value ",[30,70065,54624],{"class":317},[30,70067,70068],{"class":74}," ''",[30,70070,12624],{"class":321},[30,70072,70073,70076,70079,70081,70084],{"class":32,"line":17032},[30,70074,70075],{"class":317},"          return",[30,70077,70078],{"class":36}," alert",[30,70080,322],{"class":321},[30,70082,70083],{"class":74},"'输入内容不能为空'",[30,70085,328],{"class":321},[30,70087,70088],{"class":32,"line":17037},[30,70089,2711],{"class":321},[30,70091,70092],{"class":32,"line":17051},[30,70093,52536],{"class":321},[30,70095,70096],{"class":32,"line":17063},[30,70097,2582],{"emptyLinePlaceholder":245},[30,70099,70100],{"class":32,"line":17068},[30,70101,70102],{"class":379},"      \u002F\u002F 创建新的对象\n",[30,70104,70105,70107,70110,70112],{"class":32,"line":17081},[30,70106,58366],{"class":317},[30,70108,70109],{"class":40}," obj",[30,70111,13746],{"class":317},[30,70113,15754],{"class":321},[30,70115,70116,70119,70121,70123,70125],{"class":32,"line":17086},[30,70117,70118],{"class":321},"        stuID: arr.",[30,70120,52106],{"class":40},[30,70122,45704],{"class":317},[30,70124,25291],{"class":40},[30,70126,31604],{"class":321},[30,70128,70129],{"class":32,"line":17091},[30,70130,70131],{"class":321},"        uname: uname.value,\n",[30,70133,70134],{"class":32,"line":17096},[30,70135,70136],{"class":321},"        age: age.value,\n",[30,70138,70139],{"class":32,"line":17109},[30,70140,70141],{"class":321},"        gender: gender.value,\n",[30,70143,70144],{"class":32,"line":17114},[30,70145,70146],{"class":321},"        salary: salary.value,\n",[30,70148,70149],{"class":32,"line":32771},[30,70150,70151],{"class":321},"        city: city.value\n",[30,70153,70154],{"class":32,"line":32777},[30,70155,52536],{"class":321},[30,70157,70158],{"class":32,"line":32783},[30,70159,70160],{"class":379},"      \u002F\u002F console.log(obj);\n",[30,70162,70163],{"class":32,"line":32789},[30,70164,70165],{"class":379},"      \u002F\u002F 追加到数组里面\n",[30,70167,70168,70170,70172],{"class":32,"line":32795},[30,70169,58145],{"class":321},[30,70171,52022],{"class":36},[30,70173,70174],{"class":321},"(obj)\n",[30,70176,70177],{"class":32,"line":32806},[30,70178,70179],{"class":379},"      \u002F\u002F console.log(arr);\n",[30,70181,70182],{"class":32,"line":32812},[30,70183,70184],{"class":379},"      \u002F\u002F 清空表单  reset重置表单\n",[30,70186,70187,70190,70192,70195],{"class":32,"line":32832},[30,70188,70189],{"class":40},"      this",[30,70191,878],{"class":321},[30,70193,70194],{"class":36},"reset",[30,70196,2158],{"class":321},[30,70198,70199],{"class":32,"line":32838},[30,70200,70201],{"class":379},"      \u002F\u002F 调用渲染函数\n",[30,70203,70204,70207],{"class":32,"line":32849},[30,70205,70206],{"class":36},"      render",[30,70208,2158],{"class":321},[30,70210,70211],{"class":32,"line":32855},[30,70212,33599],{"class":321},[30,70214,70215],{"class":32,"line":32861},[30,70216,70217],{"class":379},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[30,70219,70220,70223,70226],{"class":32,"line":32867},[30,70221,70222],{"class":317},"    function",[30,70224,70225],{"class":36}," render",[30,70227,11035],{"class":321},[30,70229,70230],{"class":32,"line":32873},[30,70231,70232],{"class":379},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[30,70234,70235,70238,70240],{"class":32,"line":32879},[30,70236,70237],{"class":321},"      tbody.innerHTML ",[30,70239,367],{"class":317},[30,70241,70242],{"class":74}," ''\n",[30,70244,70245],{"class":32,"line":32885},[30,70246,70247],{"class":379},"      \u002F\u002F 遍历数组\n",[30,70249,70250,70252,70254,70256,70258,70260,70262,70264,70266,70268,70270,70272,70274],{"class":32,"line":32891},[30,70251,52422],{"class":317},[30,70253,1841],{"class":321},[30,70255,51985],{"class":317},[30,70257,9620],{"class":321},[30,70259,367],{"class":317},[30,70261,4275],{"class":40},[30,70263,9627],{"class":321},[30,70265,1230],{"class":317},[30,70267,52103],{"class":321},[30,70269,52106],{"class":40},[30,70271,3396],{"class":321},[30,70273,2474],{"class":317},[30,70275,12624],{"class":321},[30,70277,70278,70280,70283,70285,70287,70290,70292,70295],{"class":32,"line":32911},[30,70279,61408],{"class":317},[30,70281,70282],{"class":40}," tr",[30,70284,13746],{"class":317},[30,70286,54534],{"class":321},[30,70288,70289],{"class":36},"createElement",[30,70291,322],{"class":321},[30,70293,70294],{"class":74},"'tr'",[30,70296,328],{"class":321},[30,70298,70299,70302,70304],{"class":32,"line":32917},[30,70300,70301],{"class":321},"        tr.innerHTML ",[30,70303,367],{"class":317},[30,70305,70306],{"class":74}," `\n",[30,70308,70309,70312,70314,70316,70318,70321,70324],{"class":32,"line":32933},[30,70310,70311],{"class":74},"        \u003Ctd>${",[30,70313,4062],{"class":321},[30,70315,1210],{"class":74},[30,70317,761],{"class":321},[30,70319,70320],{"class":74},"].",[30,70322,70323],{"class":321},"stuID",[30,70325,70326],{"class":74},"}\u003C\u002Ftd>\n",[30,70328,70329,70332,70334,70336,70338,70340,70343],{"class":32,"line":32939},[30,70330,70331],{"class":74},"          \u003Ctd>${",[30,70333,4062],{"class":321},[30,70335,1210],{"class":74},[30,70337,761],{"class":321},[30,70339,70320],{"class":74},[30,70341,70342],{"class":321},"uname",[30,70344,70326],{"class":74},[30,70346,70347,70349,70351,70353,70355,70357,70360],{"class":32,"line":32953},[30,70348,70331],{"class":74},[30,70350,4062],{"class":321},[30,70352,1210],{"class":74},[30,70354,761],{"class":321},[30,70356,70320],{"class":74},[30,70358,70359],{"class":321},"age",[30,70361,70326],{"class":74},[30,70363,70364,70366,70368,70370,70372,70374,70377],{"class":32,"line":32959},[30,70365,70331],{"class":74},[30,70367,4062],{"class":321},[30,70369,1210],{"class":74},[30,70371,761],{"class":321},[30,70373,70320],{"class":74},[30,70375,70376],{"class":321},"gender",[30,70378,70326],{"class":74},[30,70380,70381,70383,70385,70387,70389,70391,70394],{"class":32,"line":32974},[30,70382,70331],{"class":74},[30,70384,4062],{"class":321},[30,70386,1210],{"class":74},[30,70388,761],{"class":321},[30,70390,70320],{"class":74},[30,70392,70393],{"class":321},"salary",[30,70395,70326],{"class":74},[30,70397,70398,70400,70402,70404,70406,70408,70411],{"class":32,"line":32980},[30,70399,70331],{"class":74},[30,70401,4062],{"class":321},[30,70403,1210],{"class":74},[30,70405,761],{"class":321},[30,70407,70320],{"class":74},[30,70409,70410],{"class":321},"city",[30,70412,70326],{"class":74},[30,70414,70415],{"class":32,"line":32989},[30,70416,69731],{"class":74},[30,70418,70419,70422,70424],{"class":32,"line":32995},[30,70420,70421],{"class":74},"            \u003Ca href=\"javascript:\" data-id=${",[30,70423,761],{"class":321},[30,70425,70426],{"class":74},"}>删除\u003C\u002Fa>\n",[30,70428,70429],{"class":32,"line":33004},[30,70430,70431],{"class":74},"          \u003C\u002Ftd> \n",[30,70433,70434],{"class":32,"line":33010},[30,70435,70436],{"class":74},"          `\n",[30,70438,70439],{"class":32,"line":33016},[30,70440,70441],{"class":379},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[30,70443,70444,70447,70450],{"class":32,"line":33025},[30,70445,70446],{"class":321},"        tbody.",[30,70448,70449],{"class":36},"appendChild",[30,70451,70452],{"class":321},"(tr)\n",[30,70454,70455],{"class":32,"line":33031},[30,70456,52536],{"class":321},[30,70458,70459],{"class":32,"line":33042},[30,70460,2369],{"class":321},[30,70462,70463],{"class":32,"line":33048},[30,70464,2582],{"emptyLinePlaceholder":245},[30,70466,70467],{"class":32,"line":33067},[30,70468,70469],{"class":379},"    \u002F\u002F 3.删除委托\n",[30,70471,70472],{"class":32,"line":33073},[30,70473,70474],{"class":379},"    \u002F\u002F 3.1 事件委托 tbody\n",[30,70476,70477,70480,70482,70484,70486,70488,70490,70492,70494],{"class":32,"line":33084},[30,70478,70479],{"class":321},"    tbody.",[30,70481,57951],{"class":36},[30,70483,322],{"class":321},[30,70485,57956],{"class":74},[30,70487,12617],{"class":321},[30,70489,54587],{"class":317},[30,70491,1841],{"class":321},[30,70493,395],{"class":5398},[30,70495,12624],{"class":321},[30,70497,70498,70500,70502,70504,70506],{"class":32,"line":33090},[30,70499,54618],{"class":317},[30,70501,67172],{"class":321},[30,70503,54624],{"class":317},[30,70505,68394],{"class":74},[30,70507,12624],{"class":321},[30,70509,70510],{"class":32,"line":33110},[30,70511,70512],{"class":379},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[30,70514,70515],{"class":32,"line":33126},[30,70516,70517],{"class":379},"        \u002F\u002F console.log(e.target.dataset.id);\n",[30,70519,70520],{"class":32,"line":33132},[30,70521,70522],{"class":379},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[30,70524,70525,70528,70530,70533,70535],{"class":32,"line":33146},[30,70526,70527],{"class":321},"        arr.",[30,70529,58148],{"class":36},[30,70531,70532],{"class":321},"(e.target.dataset.id, ",[30,70534,537],{"class":40},[30,70536,328],{"class":321},[30,70538,70539],{"class":32,"line":33152},[30,70540,70541],{"class":379},"        \u002F\u002F 重新渲染一次\n",[30,70543,70544,70547],{"class":32,"line":33158},[30,70545,70546],{"class":36},"        render",[30,70548,2158],{"class":321},[30,70550,70551],{"class":32,"line":33169},[30,70552,52536],{"class":321},[30,70554,70555],{"class":32,"line":33175},[30,70556,33599],{"class":321},[30,70558,70559,70561,70563],{"class":32,"line":33181},[30,70560,52555],{"class":321},[30,70562,51951],{"class":51438},[30,70564,51445],{"class":321},[30,70566,70567],{"class":32,"line":33191},[30,70568,2582],{"emptyLinePlaceholder":245},[30,70570,70571,70573,70575],{"class":32,"line":33197},[30,70572,51923],{"class":321},[30,70574,51938],{"class":51438},[30,70576,51445],{"class":321},[30,70578,70579],{"class":32,"line":33208},[30,70580,2582],{"emptyLinePlaceholder":245},[30,70582,70583,70585,70587],{"class":32,"line":33214},[30,70584,51923],{"class":321},[30,70586,50773],{"class":51438},[30,70588,51445],{"class":321},[157,70590,70591],{},"样式：",[20,70593,70597],{"className":70594,"code":70595,"language":70596,"meta":25,"style":25},"language-yaml shiki shiki-themes github-light github-dark","* {\n  margin: 0;\n  padding: 0;\n}\n\na {\n  text-decoration: none;\n  color:#721c24;\n}\nh1 {\n  text-align: center;\n  color:#333;\n  margin: 20px 0;\n \n}\ntable {\n  margin:0 auto;\n  width: 800px;\n  border-collapse: collapse;\n  color:#004085;\n}\nth {\n  padding: 10px;\n  background: #cfe5ff;\n  \n  font-size: 20px;\n  font-weight: 400;\n}\ntd,th {\n  border:1px solid #b8daff;\n}\ntd {\n  padding:10px;\n  color:#666;\n  text-align: center;\n  font-size: 16px;\n}\ntbody tr {\n  background: #fff;\n}\ntbody tr:hover {\n  background: #e1ecf8;\n}\n.info {\n  width: 900px;\n  margin: 50px auto;\n  text-align: center;\n}\n.info  input, .info select {\n  width: 80px;\n  height: 27px;\n  outline: none;\n  border-radius: 5px;\n  border:1px solid #b8daff;\n  padding-left: 5px;\n  box-sizing: border-box;\n  margin-right: 15px;\n}\n.info button {\n  width: 60px;\n  height: 27px;\n  background-color: #004085;\n  outline: none;\n  border: 0;\n  color: #fff;\n  cursor: pointer;\n  border-radius: 5px;\n}\n.info .age {\n  width: 50px;\n}\n","yaml",[27,70598,70599,70604,70614,70623,70627,70631,70636,70646,70651,70655,70660,70670,70675,70684,70688,70692,70697,70702,70712,70722,70727,70731,70736,70745,70755,70760,70770,70780,70784,70789,70797,70801,70806,70811,70816,70824,70833,70837,70842,70851,70855,70860,70869,70873,70878,70887,70896,70904,70908,70913,70922,70932,70941,70951,70957,70966,70976,70986,70990,70995,71004,71012,71022,71030,71039,71048,71058,71066,71070,71075,71084],{"__ignoreMap":25},[30,70600,70601],{"class":32,"line":33},[30,70602,70603],{"class":321},"* {\n",[30,70605,70606,70609,70611],{"class":32,"line":44},[30,70607,70608],{"class":51438},"  margin",[30,70610,51575],{"class":321},[30,70612,70613],{"class":74},"0;\n",[30,70615,70616,70619,70621],{"class":32,"line":52},[30,70617,70618],{"class":74},"  padding",[30,70620,51575],{"class":321},[30,70622,70613],{"class":74},[30,70624,70625],{"class":32,"line":60},[30,70626,1751],{"class":321},[30,70628,70629],{"class":32,"line":68},[30,70630,2582],{"emptyLinePlaceholder":245},[30,70632,70633],{"class":32,"line":80},[30,70634,70635],{"class":74},"a {\n",[30,70637,70638,70641,70643],{"class":32,"line":88},[30,70639,70640],{"class":51438},"  text-decoration",[30,70642,51575],{"class":321},[30,70644,70645],{"class":74},"none;\n",[30,70647,70648],{"class":32,"line":96},[30,70649,70650],{"class":74},"  color:#721c24;\n",[30,70652,70653],{"class":32,"line":104},[30,70654,1751],{"class":321},[30,70656,70657],{"class":32,"line":112},[30,70658,70659],{"class":74},"h1 {\n",[30,70661,70662,70665,70667],{"class":32,"line":123},[30,70663,70664],{"class":51438},"  text-align",[30,70666,51575],{"class":321},[30,70668,70669],{"class":74},"center;\n",[30,70671,70672],{"class":32,"line":131},[30,70673,70674],{"class":74},"  color:#333;\n",[30,70676,70677,70679,70681],{"class":32,"line":142},[30,70678,70608],{"class":51438},[30,70680,51575],{"class":321},[30,70682,70683],{"class":74},"20px 0;\n",[30,70685,70686],{"class":32,"line":1811},[30,70687,2856],{"class":321},[30,70689,70690],{"class":32,"line":1825},[30,70691,1751],{"class":321},[30,70693,70694],{"class":32,"line":1830},[30,70695,70696],{"class":74},"table {\n",[30,70698,70699],{"class":32,"line":1836},[30,70700,70701],{"class":74},"  margin:0 auto;\n",[30,70703,70704,70707,70709],{"class":32,"line":1857},[30,70705,70706],{"class":51438},"  width",[30,70708,51575],{"class":321},[30,70710,70711],{"class":74},"800px;\n",[30,70713,70714,70717,70719],{"class":32,"line":1862},[30,70715,70716],{"class":51438},"  border-collapse",[30,70718,51575],{"class":321},[30,70720,70721],{"class":74},"collapse;\n",[30,70723,70724],{"class":32,"line":1876},[30,70725,70726],{"class":74},"  color:#004085;\n",[30,70728,70729],{"class":32,"line":1881},[30,70730,1751],{"class":321},[30,70732,70733],{"class":32,"line":1910},[30,70734,70735],{"class":74},"th {\n",[30,70737,70738,70740,70742],{"class":32,"line":1915},[30,70739,70618],{"class":51438},[30,70741,51575],{"class":321},[30,70743,70744],{"class":74},"10px;\n",[30,70746,70747,70750,70752],{"class":32,"line":1932},[30,70748,70749],{"class":51438},"  background",[30,70751,51575],{"class":321},[30,70753,70754],{"class":379},"#cfe5ff;\n",[30,70756,70757],{"class":32,"line":1937},[30,70758,70759],{"class":321},"  \n",[30,70761,70762,70765,70767],{"class":32,"line":1942},[30,70763,70764],{"class":51438},"  font-size",[30,70766,51575],{"class":321},[30,70768,70769],{"class":74},"20px;\n",[30,70771,70772,70775,70777],{"class":32,"line":1947},[30,70773,70774],{"class":51438},"  font-weight",[30,70776,51575],{"class":321},[30,70778,70779],{"class":74},"400;\n",[30,70781,70782],{"class":32,"line":1961},[30,70783,1751],{"class":321},[30,70785,70786],{"class":32,"line":1966},[30,70787,70788],{"class":74},"td,th {\n",[30,70790,70791,70794],{"class":32,"line":2759},[30,70792,70793],{"class":74},"  border:1px solid",[30,70795,70796],{"class":379}," #b8daff;\n",[30,70798,70799],{"class":32,"line":2773},[30,70800,1751],{"class":321},[30,70802,70803],{"class":32,"line":2781},[30,70804,70805],{"class":74},"td {\n",[30,70807,70808],{"class":32,"line":2786},[30,70809,70810],{"class":74},"  padding:10px;\n",[30,70812,70813],{"class":32,"line":2792},[30,70814,70815],{"class":74},"  color:#666;\n",[30,70817,70818,70820,70822],{"class":32,"line":2798},[30,70819,70664],{"class":51438},[30,70821,51575],{"class":321},[30,70823,70669],{"class":74},[30,70825,70826,70828,70830],{"class":32,"line":2803},[30,70827,70764],{"class":51438},[30,70829,51575],{"class":321},[30,70831,70832],{"class":74},"16px;\n",[30,70834,70835],{"class":32,"line":8130},[30,70836,1751],{"class":321},[30,70838,70839],{"class":32,"line":8154},[30,70840,70841],{"class":74},"tbody tr {\n",[30,70843,70844,70846,70848],{"class":32,"line":8159},[30,70845,70749],{"class":51438},[30,70847,51575],{"class":321},[30,70849,70850],{"class":379},"#fff;\n",[30,70852,70853],{"class":32,"line":8165},[30,70854,1751],{"class":321},[30,70856,70857],{"class":32,"line":8192},[30,70858,70859],{"class":74},"tbody tr:hover {\n",[30,70861,70862,70864,70866],{"class":32,"line":8197},[30,70863,70749],{"class":51438},[30,70865,51575],{"class":321},[30,70867,70868],{"class":379},"#e1ecf8;\n",[30,70870,70871],{"class":32,"line":8203},[30,70872,1751],{"class":321},[30,70874,70875],{"class":32,"line":8215},[30,70876,70877],{"class":74},".info {\n",[30,70879,70880,70882,70884],{"class":32,"line":8227},[30,70881,70706],{"class":51438},[30,70883,51575],{"class":321},[30,70885,70886],{"class":74},"900px;\n",[30,70888,70889,70891,70893],{"class":32,"line":8239},[30,70890,70608],{"class":51438},[30,70892,51575],{"class":321},[30,70894,70895],{"class":74},"50px auto;\n",[30,70897,70898,70900,70902],{"class":32,"line":9898},[30,70899,70664],{"class":51438},[30,70901,51575],{"class":321},[30,70903,70669],{"class":74},[30,70905,70906],{"class":32,"line":9923},[30,70907,1751],{"class":321},[30,70909,70910],{"class":32,"line":9946},[30,70911,70912],{"class":74},".info  input, .info select {\n",[30,70914,70915,70917,70919],{"class":32,"line":9970},[30,70916,70706],{"class":51438},[30,70918,51575],{"class":321},[30,70920,70921],{"class":74},"80px;\n",[30,70923,70924,70927,70929],{"class":32,"line":9975},[30,70925,70926],{"class":51438},"  height",[30,70928,51575],{"class":321},[30,70930,70931],{"class":74},"27px;\n",[30,70933,70934,70937,70939],{"class":32,"line":9980},[30,70935,70936],{"class":51438},"  outline",[30,70938,51575],{"class":321},[30,70940,70645],{"class":74},[30,70942,70943,70946,70948],{"class":32,"line":9985},[30,70944,70945],{"class":51438},"  border-radius",[30,70947,51575],{"class":321},[30,70949,70950],{"class":74},"5px;\n",[30,70952,70953,70955],{"class":32,"line":9994},[30,70954,70793],{"class":74},[30,70956,70796],{"class":379},[30,70958,70959,70962,70964],{"class":32,"line":9999},[30,70960,70961],{"class":51438},"  padding-left",[30,70963,51575],{"class":321},[30,70965,70950],{"class":74},[30,70967,70968,70971,70973],{"class":32,"line":10005},[30,70969,70970],{"class":51438},"  box-sizing",[30,70972,51575],{"class":321},[30,70974,70975],{"class":74},"border-box;\n",[30,70977,70978,70981,70983],{"class":32,"line":10026},[30,70979,70980],{"class":51438},"  margin-right",[30,70982,51575],{"class":321},[30,70984,70985],{"class":74},"15px;\n",[30,70987,70988],{"class":32,"line":10032},[30,70989,1751],{"class":321},[30,70991,70992],{"class":32,"line":10046},[30,70993,70994],{"class":74},".info button {\n",[30,70996,70997,70999,71001],{"class":32,"line":10052},[30,70998,70706],{"class":51438},[30,71000,51575],{"class":321},[30,71002,71003],{"class":74},"60px;\n",[30,71005,71006,71008,71010],{"class":32,"line":10079},[30,71007,70926],{"class":51438},[30,71009,51575],{"class":321},[30,71011,70931],{"class":74},[30,71013,71014,71017,71019],{"class":32,"line":10088},[30,71015,71016],{"class":51438},"  background-color",[30,71018,51575],{"class":321},[30,71020,71021],{"class":379},"#004085;\n",[30,71023,71024,71026,71028],{"class":32,"line":10094},[30,71025,70936],{"class":51438},[30,71027,51575],{"class":321},[30,71029,70645],{"class":74},[30,71031,71032,71035,71037],{"class":32,"line":10102},[30,71033,71034],{"class":51438},"  border",[30,71036,51575],{"class":321},[30,71038,70613],{"class":74},[30,71040,71041,71044,71046],{"class":32,"line":10107},[30,71042,71043],{"class":51438},"  color",[30,71045,51575],{"class":321},[30,71047,70850],{"class":379},[30,71049,71050,71053,71055],{"class":32,"line":16786},[30,71051,71052],{"class":51438},"  cursor",[30,71054,51575],{"class":321},[30,71056,71057],{"class":74},"pointer;\n",[30,71059,71060,71062,71064],{"class":32,"line":16792},[30,71061,70945],{"class":51438},[30,71063,51575],{"class":321},[30,71065,70950],{"class":74},[30,71067,71068],{"class":32,"line":16815},[30,71069,1751],{"class":321},[30,71071,71072],{"class":32,"line":16821},[30,71073,71074],{"class":74},".info .age {\n",[30,71076,71077,71079,71081],{"class":32,"line":16844},[30,71078,70706],{"class":51438},[30,71080,51575],{"class":321},[30,71082,71083],{"class":74},"50px;\n",[30,71085,71086],{"class":32,"line":16858},[30,71087,1751],{"class":321},[157,71089,71090],{},"思路：",[157,71092,71093],{},[160,71094],{"alt":25,"src":71095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[157,71097,71098],{},[160,71099],{"alt":25,"src":71100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[157,71102,71103],{},[160,71104],{"alt":25,"src":71105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[287,71107,71109],{"id":71108},"_3315-重绘回流","3.3.15 重绘回流",[157,71111,71112],{},[160,71113],{"alt":25,"src":71114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[157,71116,71117],{},[160,71118],{"alt":25,"src":71119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[157,71121,71122],{},[160,71123],{"alt":25,"src":71124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[15,71126,71128],{"id":71127},"_34-bom","3.4 BOM",[157,71130,71131],{},[160,71132],{"alt":25,"src":71133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[157,71135,71136],{},"平时写的document省略了window而已，实际上是window.document",[157,71138,71139],{},"函数也是这样，调用的时候实际为window.fn()",[157,71141,71142],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[157,71144,71145],{},"window大部分情况下可以省略",[287,71147,71149],{"id":71148},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[157,71151,71152],{},"只执行一次",[157,71154,71155],{},[160,71156],{"alt":25,"src":71157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[157,71159,71160],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[157,71162,71163],{},[160,71164],{"alt":25,"src":71165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[287,71167,71169],{"id":71168},"_342-js执行机制","3.4.2 JS执行机制",[157,71171,71172],{},[160,71173],{"alt":25,"src":71174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[157,71176,71177],{},"两个的结果都是1111 3333 2222",[157,71179,71180],{},[160,71181],{"alt":25,"src":71182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[157,71184,71185],{},[160,71186],{"alt":25,"src":71187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[157,71189,71190],{},[160,71191],{"alt":25,"src":71192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[157,71194,71195],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[157,71197,71198],{},"工作流程：",[157,71200,71201],{},[160,71202],{"alt":25,"src":71203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[157,71205,71206],{},[160,71207],{"alt":25,"src":71208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[157,71210,71211],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[157,71213,71214],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[287,71216,71218],{"id":71217},"_343-location对象","3.4.3 location对象",[157,71220,71221],{},"location对象属于window这个全局对象下的，可以 省略window",[157,71223,71224],{},[160,71225],{"alt":25,"src":71226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[157,71228,71229],{},"href可以跳转页面",[271,71231,71232],{},[150,71233,71234],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[157,71236,71237],{},"search得到提交信息之后网站后边的地址",[157,71239,71240],{},[160,71241],{"alt":25,"src":71242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[157,71244,71245],{},[160,71246],{"alt":25,"src":71247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[271,71249,71250],{"start":44},[150,71251,71252],{},"hash:这个获取单页面应用#后边的地址",[157,71254,71255],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[157,71257,71258],{},[160,71259],{"alt":25,"src":71260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[20,71262,71264],{"className":53205,"code":71263,"language":53207,"meta":25,"style":25},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[27,71265,71266,71286,71306],{"__ignoreMap":25},[30,71267,71268,71270,71272,71274,71276,71279,71282,71284],{"class":32,"line":33},[30,71269,52282],{"class":321},[30,71271,558],{"class":51438},[30,71273,61195],{"class":36},[30,71275,367],{"class":321},[30,71277,71278],{"class":74},"\"#\u002Fmy\"",[30,71280,71281],{"class":321},">我的\u003C\u002F",[30,71283,558],{"class":51438},[30,71285,51445],{"class":321},[30,71287,71288,71290,71292,71294,71296,71299,71302,71304],{"class":32,"line":44},[30,71289,52282],{"class":321},[30,71291,558],{"class":51438},[30,71293,61195],{"class":36},[30,71295,367],{"class":321},[30,71297,71298],{"class":74},"\"#\u002Ffriend\"",[30,71300,71301],{"class":321},">关注\u003C\u002F",[30,71303,558],{"class":51438},[30,71305,51445],{"class":321},[30,71307,71308,71310,71312,71314,71316,71319,71322,71324],{"class":32,"line":52},[30,71309,52282],{"class":321},[30,71311,558],{"class":51438},[30,71313,61195],{"class":36},[30,71315,367],{"class":321},[30,71317,71318],{"class":74},"\"#\u002Fdownload\"",[30,71320,71321],{"class":321},">下载\u003C\u002F",[30,71323,558],{"class":51438},[30,71325,51445],{"class":321},[157,71327,71328],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[271,71330,71331],{"start":52},[150,71332,71333,71334,71336,71337,71339],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53854,71335],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53854,71338],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[287,71341,71343],{"id":71342},"_345-navigator对象","3.4.5 navigator对象",[157,71345,71346],{},[160,71347],{"alt":25,"src":71348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[20,71350,71354],{"className":71351,"code":71352,"language":71353,"meta":25,"style":25},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F 检测 userAgent（浏览器信息） \n!(function () { \nconst userAgent = navigator.userAgent \n\u002F\u002F 验证是否为Android或iPhone \nconst android = userAgent.match(\u002F(Android);?[\\s\\\u002F]+([\\d.]+)?\u002F) \nconst iphone = userAgent.match(\u002F(iPhone\\sOS)\\s([\\d_]+)\u002F) \n\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \nif (android || iphone) { \nlocation.href = 'http:\u002F\u002Fm.itcast.cn' \n} \n})()\n","javascript",[27,71355,71356,71361,71372,71384,71389,71440,71481,71486,71499,71511,71516],{"__ignoreMap":25},[30,71357,71358],{"class":32,"line":33},[30,71359,71360],{"class":379},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[30,71362,71363,71365,71367,71369],{"class":32,"line":44},[30,71364,546],{"class":317},[30,71366,322],{"class":321},[30,71368,54587],{"class":317},[30,71370,71371],{"class":321}," () { \n",[30,71373,71374,71376,71379,71381],{"class":32,"line":52},[30,71375,6974],{"class":317},[30,71377,71378],{"class":40}," userAgent",[30,71380,13746],{"class":317},[30,71382,71383],{"class":321}," navigator.userAgent \n",[30,71385,71386],{"class":32,"line":60},[30,71387,71388],{"class":379},"\u002F\u002F 验证是否为Android或iPhone \n",[30,71390,71391,71393,71396,71398,71401,71404,71406,71408,71411,71413,71416,71420,71422,71424,71426,71429,71431,71433,71435,71437],{"class":32,"line":68},[30,71392,6974],{"class":317},[30,71394,71395],{"class":40}," android",[30,71397,13746],{"class":317},[30,71399,71400],{"class":321}," userAgent.",[30,71402,71403],{"class":36},"match",[30,71405,322],{"class":321},[30,71407,904],{"class":74},[30,71409,71410],{"class":48115},"(Android);",[30,71412,1306],{"class":317},[30,71414,71415],{"class":40},"[\\s",[30,71417,71419],{"class":71418},"snhLl","\\\u002F",[30,71421,1260],{"class":40},[30,71423,801],{"class":317},[30,71425,322],{"class":48115},[30,71427,71428],{"class":40},"[\\d.]",[30,71430,801],{"class":317},[30,71432,749],{"class":48115},[30,71434,1306],{"class":317},[30,71436,904],{"class":74},[30,71438,71439],{"class":321},") \n",[30,71441,71442,71444,71447,71449,71451,71453,71455,71457,71460,71463,71466,71468,71470,71473,71475,71477,71479],{"class":32,"line":80},[30,71443,6974],{"class":317},[30,71445,71446],{"class":40}," iphone",[30,71448,13746],{"class":317},[30,71450,71400],{"class":321},[30,71452,71403],{"class":36},[30,71454,322],{"class":321},[30,71456,904],{"class":74},[30,71458,71459],{"class":48115},"(iPhone",[30,71461,71462],{"class":40},"\\s",[30,71464,71465],{"class":48115},"OS)",[30,71467,71462],{"class":40},[30,71469,322],{"class":48115},[30,71471,71472],{"class":40},"[\\d_]",[30,71474,801],{"class":317},[30,71476,749],{"class":48115},[30,71478,904],{"class":74},[30,71480,71439],{"class":321},[30,71482,71483],{"class":32,"line":88},[30,71484,71485],{"class":379},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[30,71487,71488,71490,71493,71496],{"class":32,"line":96},[30,71489,1717],{"class":317},[30,71491,71492],{"class":321}," (android ",[30,71494,71495],{"class":317},"||",[30,71497,71498],{"class":321}," iphone) { \n",[30,71500,71501,71504,71506,71509],{"class":32,"line":104},[30,71502,71503],{"class":321},"location.href ",[30,71505,367],{"class":317},[30,71507,71508],{"class":74}," 'http:\u002F\u002Fm.itcast.cn'",[30,71510,2856],{"class":321},[30,71512,71513],{"class":32,"line":112},[30,71514,71515],{"class":321},"} \n",[30,71517,71518],{"class":32,"line":123},[30,71519,71520],{"class":321},"})()\n",[287,71522,71524],{"id":71523},"_346-histroy对象","3.4.6 histroy对象",[157,71526,71527],{},[160,71528],{"alt":25,"src":71529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[157,71531,71532],{},"浏览器地址的前进与后退!!!",[157,71534,71535],{},"history.back() 等效于 history.go(-1)",[157,71537,71538],{},"history.forward() 等效于 history.go(1)",[15,71540,71542],{"id":71541},"_35-本地存储","3.5 本地存储",[271,71544,71545,71548,71551],{},[150,71546,71547],{},"数据存储在用户浏览器中",[150,71549,71550],{},"设置、读取方便、甚至页面刷新不丢失数据",[150,71552,71553],{},"容量较大，sessionStorage和localStorage约 5M 左右",[287,71555,71557],{"id":71556},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[157,71559,71560],{},"只能存储字符串",[157,71562,71563],{},[160,71564],{"alt":25,"src":71565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[157,71567,71568],{},[160,71569],{"alt":25,"src":71570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[157,71572,71573],{},"键值对要加引号,不然就会当变量来看了",[157,71575,71576],{},"localStorage.setItem('uname', 'pink')",[157,71578,71579],{},"刷新之后信息不再丢失",[157,71581,71582],{},"操作key,value会跟着变",[157,71584,71585],{},"删除只删除键就可以,即名字",[157,71587,71576],{},[157,71589,71590],{},"改:",[157,71592,71593],{},"localStorage.setItem('uname','red')",[157,71595,71596],{},"有这个键就是改,没有这个键就是改",[157,71598,71599],{},[160,71600],{"alt":25,"src":71601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[157,71603,71604],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[157,71606,71607],{},[160,71608],{"alt":25,"src":71609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[157,71611,71612],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[287,71614,71616],{"id":71615},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[157,71618,71619],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[157,71621,71622],{},"特性:",[271,71624,71625,71628,71631,71634],{},[150,71626,71627],{},"生命周期为关闭浏览器窗口",[150,71629,71630],{},"在同一个窗口(页面)下数据可以共享",[150,71632,71633],{},"以键值对的形式存储使用",[150,71635,71636],{},"用法跟localStorage 基本相同",[287,71638,71640],{"id":71639},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[157,71642,71643],{},"本地只能存储字符串,无法直接存储复杂数据类型",[20,71645,71647],{"className":53205,"code":71646,"language":53207,"meta":25,"style":25},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n    localStorage.setItem('obj', obj)\n  \u003C\u002Fscript>\n",[27,71648,71649,71657,71662,71667,71672,71677,71681,71686,71691],{"__ignoreMap":25},[30,71650,71651,71653,71655],{"class":32,"line":33},[30,71652,1230],{"class":321},[30,71654,51951],{"class":51438},[30,71656,51445],{"class":321},[30,71658,71659],{"class":32,"line":44},[30,71660,71661],{"class":321},"    const obj = {\n",[30,71663,71664],{"class":32,"line":52},[30,71665,71666],{"class":321},"      uname: 'pink老师',\n",[30,71668,71669],{"class":32,"line":60},[30,71670,71671],{"class":321},"      age: 18,\n",[30,71673,71674],{"class":32,"line":68},[30,71675,71676],{"class":321},"      gender: '女'\n",[30,71678,71679],{"class":32,"line":80},[30,71680,2369],{"class":321},[30,71682,71683],{"class":32,"line":88},[30,71684,71685],{"class":321},"    \u002F\u002F 存储复杂数据类型\n",[30,71687,71688],{"class":32,"line":96},[30,71689,71690],{"class":321},"    localStorage.setItem('obj', obj)\n",[30,71692,71693,71695,71697],{"class":32,"line":104},[30,71694,52555],{"class":321},[30,71696,51951],{"class":51438},[30,71698,51445],{"class":321},[157,71700,71701],{},[160,71702],{"alt":25,"src":71703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[157,71705,71706],{},"如果获取一下数据:",[157,71708,71709],{},"log(localStorage.getItem('obj'))",[157,71711,71712],{},[160,71713],{"alt":25,"src":71714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[157,71716,71717],{},"发现直接存对象是使用不了的!!!",[22180,71719,71721],{"id":71720},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[157,71723,71724],{},[160,71725],{"alt":25,"src":71726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[20,71728,71730],{"className":50771,"code":71729,"language":50773,"meta":25,"style":25},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n  localStorage.setItem('obj', JSON.stringify(obj))\n  console.log(localStorage.getItem('obj'))\n  \u003C\u002Fscript>\n  \n  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n  类型是字符串的\n  JSON对象 属性和值有引号,而且引号统一是双引号\n",[27,71731,71732,71740,71750,71760,71769,71777,71781,71785,71811,71830,71838,71842,71847,71852],{"__ignoreMap":25},[30,71733,71734,71736,71738],{"class":32,"line":33},[30,71735,1230],{"class":321},[30,71737,51951],{"class":51438},[30,71739,51445],{"class":321},[30,71741,71742,71744,71746,71748],{"class":32,"line":44},[30,71743,11403],{"class":317},[30,71745,70109],{"class":40},[30,71747,13746],{"class":317},[30,71749,15754],{"class":321},[30,71751,71752,71755,71758],{"class":32,"line":52},[30,71753,71754],{"class":321},"      uname: ",[30,71756,71757],{"class":74},"'pink老师'",[30,71759,31604],{"class":321},[30,71761,71762,71765,71767],{"class":32,"line":60},[30,71763,71764],{"class":321},"      age: ",[30,71766,970],{"class":40},[30,71768,31604],{"class":321},[30,71770,71771,71774],{"class":32,"line":68},[30,71772,71773],{"class":321},"      gender: ",[30,71775,71776],{"class":74},"'女'\n",[30,71778,71779],{"class":32,"line":80},[30,71780,2369],{"class":321},[30,71782,71783],{"class":32,"line":88},[30,71784,71685],{"class":379},[30,71786,71787,71790,71793,71795,71798,71800,71803,71805,71808],{"class":32,"line":96},[30,71788,71789],{"class":321},"  localStorage.",[30,71791,71792],{"class":36},"setItem",[30,71794,322],{"class":321},[30,71796,71797],{"class":74},"'obj'",[30,71799,12617],{"class":321},[30,71801,71802],{"class":40},"JSON",[30,71804,878],{"class":321},[30,71806,71807],{"class":36},"stringify",[30,71809,71810],{"class":321},"(obj))\n",[30,71812,71813,71816,71818,71821,71824,71826,71828],{"class":32,"line":104},[30,71814,71815],{"class":321},"  console.",[30,71817,58385],{"class":36},[30,71819,71820],{"class":321},"(localStorage.",[30,71822,71823],{"class":36},"getItem",[30,71825,322],{"class":321},[30,71827,71797],{"class":74},[30,71829,30635],{"class":321},[30,71831,71832,71834,71836],{"class":32,"line":112},[30,71833,52555],{"class":321},[30,71835,51951],{"class":51438},[30,71837,51445],{"class":321},[30,71839,71840],{"class":32,"line":123},[30,71841,70759],{"class":321},[30,71843,71844],{"class":32,"line":131},[30,71845,71846],{"class":321},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[30,71848,71849],{"class":32,"line":142},[30,71850,71851],{"class":321},"  类型是字符串的\n",[30,71853,71854],{"class":32,"line":1811},[30,71855,71856],{"class":321},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22180,71858,71860],{"id":71859},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[157,71862,71863],{},[160,71864],{"alt":25,"src":71865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[157,71867,71868],{},[160,71869],{"alt":25,"src":71870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[20,71872,71874],{"className":53205,"code":71873,"language":53207,"meta":25,"style":25},"  \u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 1.存储复杂数据类型\n    \u002F\u002F localStorage.setItem('obj', obj)\n    \u002F\u002F console.log(localStorage.getItem('obj'))\n    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n    localStorage.setItem('obj', JSON.stringify(obj))\n    \u002F\u002F 取\n    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n    console.log(JSON.parse(localStorage.getItem('obj')))\n  \u003C\u002Fscript>\n",[27,71875,71876,71884,71888,71892,71896,71900,71904,71909,71914,71919,71924,71929,71934,71939,71944],{"__ignoreMap":25},[30,71877,71878,71880,71882],{"class":32,"line":33},[30,71879,52282],{"class":321},[30,71881,51951],{"class":51438},[30,71883,51445],{"class":321},[30,71885,71886],{"class":32,"line":44},[30,71887,71661],{"class":321},[30,71889,71890],{"class":32,"line":52},[30,71891,71666],{"class":321},[30,71893,71894],{"class":32,"line":60},[30,71895,71671],{"class":321},[30,71897,71898],{"class":32,"line":68},[30,71899,71676],{"class":321},[30,71901,71902],{"class":32,"line":80},[30,71903,2369],{"class":321},[30,71905,71906],{"class":32,"line":88},[30,71907,71908],{"class":321},"    \u002F\u002F 1.存储复杂数据类型\n",[30,71910,71911],{"class":32,"line":96},[30,71912,71913],{"class":321},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[30,71915,71916],{"class":32,"line":104},[30,71917,71918],{"class":321},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[30,71920,71921],{"class":32,"line":112},[30,71922,71923],{"class":321},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[30,71925,71926],{"class":32,"line":123},[30,71927,71928],{"class":321},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[30,71930,71931],{"class":32,"line":131},[30,71932,71933],{"class":321},"    \u002F\u002F 取\n",[30,71935,71936],{"class":32,"line":142},[30,71937,71938],{"class":321},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[30,71940,71941],{"class":32,"line":1811},[30,71942,71943],{"class":321},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[30,71945,71946,71948,71950],{"class":32,"line":1825},[30,71947,52555],{"class":321},[30,71949,51951],{"class":51438},[30,71951,51445],{"class":321},[157,71953,71954],{},[160,71955],{"alt":25,"src":71956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[287,71958,71960],{"id":71959},"_356-数组map方法","3.5.6 数组map方法",[157,71962,71963],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[157,71965,71966],{},[160,71967],{"alt":25,"src":71968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[157,71970,71971],{},[160,71972],{"alt":25,"src":71973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[157,71975,71976,71979],{},[469,71977,71978],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[157,71981,71982],{},"map有返回值，但是forEach没有返回值",[157,71984,71985],{},"map是个方法。用的时候要加 ()",[157,71987,71988],{},"map返回的是一个数组",[287,71990,71992],{"id":71991},"_357-数组中join方法","3.5.7 数组中join方法",[157,71994,71995],{},[160,71996],{"alt":25,"src":71997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[157,71999,72000],{},"类似于python中拼接字符串一样！",[271,72002,72003,72006,72009],{},[150,72004,72005],{},"小括号为空则逗号分开",[150,72007,72008],{},"小括号为空字符串 ''，则元素之间没有分隔符",[150,72010,72011],{},"小括号用啥符号就用进行分割",[287,72013,72015],{"id":72014},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[271,72017,72018,72021,72024,72027,72030],{},[150,72019,72020],{},"记住本地时间获取快速方式：new Date().toDateString()",[150,72022,72023],{},"尽量减少DOM操作，用好map+join的渲染方式",[150,72025,72026],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[150,72028,72029],{},"return可以实现函数的结束",[150,72031,72032],{},"禁止跳转是 preventDefault() 不要忘记",[20,72034,72036],{"className":50771,"code":72035,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    h2 {\n      text-align: center;\n      margin-top: 20px;\n    }\n\n    .info {\n      width: 700px;\n      margin: 10px auto;\n      text-align: center;\n    }\n\n    .uname,\n    .age,\n    .salary {\n      width: 100px;\n      height: 20px;\n      outline: none;\n      margin-right: 15px;\n    }\n\n    .gender,\n    .city {\n      width: 100px;\n      height: 25px;\n      outline: none;\n      margin-right: 15px;\n      border: 1px solid rgb(200, 197, 197);\n    }\n\n    button {\n      height: 25px;\n      width: 75px;\n      background-color: rgb(126, 187, 36);\n      color: #fff;\n      border: 0;\n    }\n\n    button span {\n      display: inline-block;\n      width: 10px;\n      height: 10px;\n      line-height: 11px;\n      border: 1px solid #fff;\n      border-radius: 5px;\n      margin-right: 1px;\n    }\n\n    .total {\n      width: 800px;\n      height: 40px;\n      line-height: 40px;\n      text-align: right;\n      margin: 40px auto 10px;\n      padding-right: 10px;\n      font-size: 13px;\n      background-color: rgb(237, 235, 235);\n      box-sizing: border-box;\n    }\n\n    .total span {\n      color: red;\n    }\n\n    table {\n      width: 800px;\n      margin: auto;\n      border-collapse: collapse;\n    }\n\n    th {\n      background-color: rgb(237, 235, 235);\n    }\n\n    th,\n    td {\n      height: 35px;\n      text-align: left;\n      font-size: 14px;\n      border: 1px solid rgb(228, 225, 225);\n      padding-left: 5px;\n      transition: all linear 0.5s;\n    }\n\n    tbody tr:hover {\n      background-color: rgb(237, 235, 235);\n      cursor: pointer;\n    }\n\n    tbody tr td a {\n      display: block;\n      width: 60px;\n      height: 25px;\n      line-height: 25px;\n      margin-top: 2px;\n      color: #fff;\n      text-align: center;\n      text-decoration: none;\n      background-color: orange;\n      border-radius: 12.5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>学生就业统计表\u003C\u002Fh2>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    \u003Cinput type=\"text\" name=\"uname\" placeholder=\"姓名\" class=\"uname\">\n    \u003Cinput type=\"text\" name=\"age\" placeholder=\"年龄\" class=\"age\">\n    \u003Cinput type=\"text\" name=\"salary\" placeholder=\"薪资\" class=\"salary\">\n    \u003Cselect name=\"gender\" id=\"\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cselect name=\"city\" id=\"\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton>\n      \u003Cspan>+\u003C\u002Fspan>添加\u003C\u002Fbutton>\n  \u003C\u002Fform>\n  \u003Cdiv class=\"total\">共有数据 \u003Cspan>0\u003C\u002Fspan> 条\u003C\u002Fdiv>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>ID\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>录入时间\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \u003Ctr>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr> -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F const initData = [{\n    \u002F\u002F   unameId: 1,\n    \u002F\u002F   uname: '华晨宇',\n    \u002F\u002F   age: 22,\n    \u002F\u002F   salary: 12000,\n    \u002F\u002F   gender: '男',\n    \u002F\u002F   city: '北京',\n    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n    \u002F\u002F }]\n    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n    \u002F\u002F 1.渲染业务\n    \u002F\u002F 1.1 先读取本地存储的数据\n    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n\n    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n    const arr = []\n    console.log(arr)\n\n    \u002F\u002F 时间函数\n    function getTime() {\n      const date = new Date()\n      const h = date.getHours() \u003C 10 ? '0' + date.getHours() : date.getHours()\n      const m = date.getMinutes() \u003C 10 ? '0' + date.getMinutes() : date.getMinutes()\n      const s = date.getSeconds() \u003C 10 ? '0' + date.getSeconds() : date.getSeconds()\n      const str = `${date.getFullYear()}\u002F${date.getMonth() + 1}\u002F${date.getDate()} ${h}:${m}:${s}`\n      return str\n    }\n    \u002F\u002F 渲染函数\n    const tbody = document.querySelector('tbody')\n    function render() {\n      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n      const trArr = arr.map(function (ele, index) {\n        return `\n      \u003Ctr>\n        \u003Ctd>${ele.unameId}\u003C\u002Ftd>\n        \u003Ctd>${ele.uname}\u003C\u002Ftd>\n        \u003Ctd>${ele.age}\u003C\u002Ftd>\n        \u003Ctd>${ele.gender}\u003C\u002Ftd>\n        \u003Ctd>${ele.salary}\u003C\u002Ftd>\n        \u003Ctd>${ele.city}\u003C\u002Ftd>\n        \u003Ctd>${ele.time}\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"${index}\">删除\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr>\n  `\n      })\n      console.log(trArr)\n\n      \u002F\u002F (2) 把数组转换为字符串join\n      \u002F\u002F (3) 把生成的字符串追加给tobody\n      tbody.innerHTML = trArr.join('')\n      \u002F\u002F 显示共有几条\n      document.querySelector('.total span').innerHTML = arr.length\n    }\n    \u002F\u002F render()\n\n    \u002F\u002F 获取DOM对象\n    const info = document.querySelector('.info')\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const salary = document.querySelector('.salary')\n    const gender = document.querySelector('.gender')\n    const city = document.querySelector('.city')\n\n    \u002F\u002F form表单注册提交事件，阻止默认行为\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 禁止浏览器跳转\n      e.preventDefault()\n      \u002F\u002F 非空判断\n      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n      if (!uname.value || !age.value || !salary.value) {\n        return alert('输入内容不能为空')\n      }\n      arr.push({\n        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n        \u002F\u002F 对象的序号应为数组长度+1\n        \u002F\u002F unameId: arr.length + 1,\n\n        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n        \u002F\u002F 0当假看\n        unameId: arr.length ? arr[arr.length - 1].unameId + 1 : 1,\n        uname: uname.value,\n        age: age.value,\n        salary: salary.value,\n        gender: gender.value,\n        city: city.value,\n        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n        \u002F\u002F time: new Date().toDateString()\n        time: getTime()\n      })\n      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n      render()\n      this.reset() \u002F\u002F重置表单\n      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n      localStorage.setItem('data', JSON.stringify(arr))\n    })\n\n    \u002F\u002F 3.删除业务\n    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n    tbody.addEventListener('click', function (e) {\n      \u002F\u002F 判断是否点击的是删除按钮\n      if (e.target.tagName === 'A') {\n        \u002F\u002F alert(1)\n        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n        \u002F\u002F console.log(e.target)\n        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n\n        \u002F\u002F 确认框，确然是否真的要删除\n        \u002F\u002F confirm()为确认框\n        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n        if (confirm('您确定要删除这条数据吗？')) {\n          arr.splice(e.target.dataset.id, 1)\n          \u002F\u002F 3.4 重新渲染页面\n          render()\n          \u002F\u002F 3.5 把最新arr数组存到本地存储\n          localStorage.setItem('data', JSON.stringify(arr))\n        }\n      }\n\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,72037,72038,72048,72062,72066,72074,72088,72108,72120,72128,72134,72144,72154,72158,72162,72168,72178,72190,72194,72198,72205,72217,72231,72241,72245,72249,72256,72263,72270,72282,72294,72304,72316,72320,72324,72331,72338,72350,72362,72372,72384,72414,72418,72422,72429,72441,72453,72477,72487,72497,72501,72505,72513,72524,72536,72548,72560,72577,72589,72601,72605,72609,72616,72628,72640,72652,72663,72681,72694,72706,72730,72741,72745,72749,72757,72767,72771,72775,72781,72793,72804,72814,72818,72822,72828,72850,72854,72858,72864,72870,72882,72892,72904,72934,72947,72964,72968,72972,72983,73005,73015,73019,73023,73036,73046,73058,73070,73082,73094,73104,73114,73124,73135,73148,73152,73160,73168,73172,73180,73193,73213,73246,73279,73312,73338,73356,73374,73382,73408,73426,73444,73462,73480,73498,73506,73514,73532,73540,73569,73577,73585,73593,73606,73618,73630,73642,73654,73666,73679,73691,73699,73707,73715,73720,73725,73729,73733,73737,73741,73745,73749,73754,73759,73764,73769,73777,73785,73793,73798,73803,73808,73813,73818,73823,73828,73833,73838,73843,73848,73853,73858,73863,73867,73872,73877,73887,73896,73900,73905,73914,73930,73972,74012,74051,74116,74124,74128,74133,74151,74159,74164,74169,74199,74205,74210,74223,74235,74247,74259,74271,74283,74295,74299,74309,74313,74318,74323,74327,74336,74340,74345,74350,74369,74374,74394,74398,74403,74407,74412,74430,74448,74466,74485,74504,74523,74528,74534,74555,74561,74570,74576,74582,74588,74615,74628,74633,74643,74649,74655,74661,74667,74672,74678,74684,74690,74696,74729,74734,74739,74744,74749,74755,74761,74767,74778,74783,74789,74796,74810,74816,74840,74845,74850,74856,74862,74883,74889,74902,74908,74914,74920,74926,74931,74937,74943,74949,74967,74981,74987,74995,75001,75023,75028,75033,75038,75043,75048,75057,75066,75071],{"__ignoreMap":25},[30,72039,72040,72042,72044,72046],{"class":32,"line":33},[30,72041,51435],{"class":321},[30,72043,51439],{"class":51438},[30,72045,51442],{"class":36},[30,72047,51445],{"class":321},[30,72049,72050,72052,72054,72056,72058,72060],{"class":32,"line":44},[30,72051,1230],{"class":321},[30,72053,50773],{"class":51438},[30,72055,51454],{"class":36},[30,72057,367],{"class":321},[30,72059,51459],{"class":74},[30,72061,51445],{"class":321},[30,72063,72064],{"class":32,"line":52},[30,72065,2582],{"emptyLinePlaceholder":245},[30,72067,72068,72070,72072],{"class":32,"line":60},[30,72069,1230],{"class":321},[30,72071,51472],{"class":51438},[30,72073,51445],{"class":321},[30,72075,72076,72078,72080,72082,72084,72086],{"class":32,"line":68},[30,72077,52282],{"class":321},[30,72079,51482],{"class":51438},[30,72081,51485],{"class":36},[30,72083,367],{"class":321},[30,72085,51490],{"class":74},[30,72087,51445],{"class":321},[30,72089,72090,72092,72094,72096,72098,72100,72102,72104,72106],{"class":32,"line":80},[30,72091,52282],{"class":321},[30,72093,51482],{"class":51438},[30,72095,15102],{"class":36},[30,72097,367],{"class":321},[30,72099,51529],{"class":74},[30,72101,51509],{"class":36},[30,72103,367],{"class":321},[30,72105,51536],{"class":74},[30,72107,51445],{"class":321},[30,72109,72110,72112,72114,72116,72118],{"class":32,"line":88},[30,72111,52282],{"class":321},[30,72113,51545],{"class":51438},[30,72115,51548],{"class":321},[30,72117,51545],{"class":51438},[30,72119,51445],{"class":321},[30,72121,72122,72124,72126],{"class":32,"line":96},[30,72123,52282],{"class":321},[30,72125,234],{"class":51438},[30,72127,51445],{"class":321},[30,72129,72130,72132],{"class":32,"line":104},[30,72131,6585],{"class":51438},[30,72133,15754],{"class":321},[30,72135,72136,72138,72140,72142],{"class":32,"line":112},[30,72137,54833],{"class":40},[30,72139,51575],{"class":321},[30,72141,511],{"class":40},[30,72143,1480],{"class":321},[30,72145,72146,72148,72150,72152],{"class":32,"line":123},[30,72147,54844],{"class":40},[30,72149,51575],{"class":321},[30,72151,511],{"class":40},[30,72153,1480],{"class":321},[30,72155,72156],{"class":32,"line":131},[30,72157,2369],{"class":321},[30,72159,72160],{"class":32,"line":142},[30,72161,2582],{"emptyLinePlaceholder":245},[30,72163,72164,72166],{"class":32,"line":1811},[30,72165,57417],{"class":51438},[30,72167,15754],{"class":321},[30,72169,72170,72172,72174,72176],{"class":32,"line":1825},[30,72171,57424],{"class":40},[30,72173,51575],{"class":321},[30,72175,51730],{"class":40},[30,72177,1480],{"class":321},[30,72179,72180,72182,72184,72186,72188],{"class":32,"line":1830},[30,72181,62215],{"class":40},[30,72183,51575],{"class":321},[30,72185,1020],{"class":40},[30,72187,51630],{"class":317},[30,72189,1480],{"class":321},[30,72191,72192],{"class":32,"line":1836},[30,72193,2369],{"class":321},[30,72195,72196],{"class":32,"line":1857},[30,72197,2582],{"emptyLinePlaceholder":245},[30,72199,72200,72203],{"class":32,"line":1862},[30,72201,72202],{"class":36},"    .info",[30,72204,15754],{"class":321},[30,72206,72207,72209,72211,72213,72215],{"class":32,"line":1876},[30,72208,54909],{"class":40},[30,72210,51575],{"class":321},[30,72212,51627],{"class":40},[30,72214,51630],{"class":317},[30,72216,1480],{"class":321},[30,72218,72219,72221,72223,72225,72227,72229],{"class":32,"line":1881},[30,72220,54844],{"class":40},[30,72222,51575],{"class":321},[30,72224,766],{"class":40},[30,72226,51630],{"class":317},[30,72228,51694],{"class":40},[30,72230,1480],{"class":321},[30,72232,72233,72235,72237,72239],{"class":32,"line":1910},[30,72234,57424],{"class":40},[30,72236,51575],{"class":321},[30,72238,51730],{"class":40},[30,72240,1480],{"class":321},[30,72242,72243],{"class":32,"line":1915},[30,72244,2369],{"class":321},[30,72246,72247],{"class":32,"line":1932},[30,72248,2582],{"emptyLinePlaceholder":245},[30,72250,72251,72254],{"class":32,"line":1937},[30,72252,72253],{"class":36},"    .uname",[30,72255,31604],{"class":321},[30,72257,72258,72261],{"class":32,"line":1942},[30,72259,72260],{"class":36},"    .age",[30,72262,31604],{"class":321},[30,72264,72265,72268],{"class":32,"line":1947},[30,72266,72267],{"class":36},"    .salary",[30,72269,15754],{"class":321},[30,72271,72272,72274,72276,72278,72280],{"class":32,"line":1961},[30,72273,54909],{"class":40},[30,72275,51575],{"class":321},[30,72277,631],{"class":40},[30,72279,51630],{"class":317},[30,72281,1480],{"class":321},[30,72283,72284,72286,72288,72290,72292],{"class":32,"line":1966},[30,72285,54923],{"class":40},[30,72287,51575],{"class":321},[30,72289,1020],{"class":40},[30,72291,51630],{"class":317},[30,72293,1480],{"class":321},[30,72295,72296,72298,72300,72302],{"class":32,"line":2759},[30,72297,61918],{"class":40},[30,72299,51575],{"class":321},[30,72301,54875],{"class":40},[30,72303,1480],{"class":321},[30,72305,72306,72308,72310,72312,72314],{"class":32,"line":2773},[30,72307,61888],{"class":40},[30,72309,51575],{"class":321},[30,72311,895],{"class":40},[30,72313,51630],{"class":317},[30,72315,1480],{"class":321},[30,72317,72318],{"class":32,"line":2781},[30,72319,2369],{"class":321},[30,72321,72322],{"class":32,"line":2786},[30,72323,2582],{"emptyLinePlaceholder":245},[30,72325,72326,72329],{"class":32,"line":2792},[30,72327,72328],{"class":36},"    .gender",[30,72330,31604],{"class":321},[30,72332,72333,72336],{"class":32,"line":2798},[30,72334,72335],{"class":36},"    .city",[30,72337,15754],{"class":321},[30,72339,72340,72342,72344,72346,72348],{"class":32,"line":2803},[30,72341,54909],{"class":40},[30,72343,51575],{"class":321},[30,72345,631],{"class":40},[30,72347,51630],{"class":317},[30,72349,1480],{"class":321},[30,72351,72352,72354,72356,72358,72360],{"class":32,"line":8130},[30,72353,54923],{"class":40},[30,72355,51575],{"class":321},[30,72357,1145],{"class":40},[30,72359,51630],{"class":317},[30,72361,1480],{"class":321},[30,72363,72364,72366,72368,72370],{"class":32,"line":8154},[30,72365,61918],{"class":40},[30,72367,51575],{"class":321},[30,72369,54875],{"class":40},[30,72371,1480],{"class":321},[30,72373,72374,72376,72378,72380,72382],{"class":32,"line":8159},[30,72375,61888],{"class":40},[30,72377,51575],{"class":321},[30,72379,895],{"class":40},[30,72381,51630],{"class":317},[30,72383,1480],{"class":321},[30,72385,72386,72388,72390,72392,72394,72396,72399,72401,72403,72405,72408,72410,72412],{"class":32,"line":8165},[30,72387,62115],{"class":40},[30,72389,51575],{"class":321},[30,72391,537],{"class":40},[30,72393,51630],{"class":317},[30,72395,51659],{"class":40},[30,72397,72398],{"class":40}," rgb",[30,72400,322],{"class":321},[30,72402,1905],{"class":40},[30,72404,12617],{"class":321},[30,72406,72407],{"class":40},"197",[30,72409,12617],{"class":321},[30,72411,72407],{"class":40},[30,72413,2901],{"class":321},[30,72415,72416],{"class":32,"line":8192},[30,72417,2369],{"class":321},[30,72419,72420],{"class":32,"line":8197},[30,72421,2582],{"emptyLinePlaceholder":245},[30,72423,72424,72427],{"class":32,"line":8203},[30,72425,72426],{"class":51438},"    button",[30,72428,15754],{"class":321},[30,72430,72431,72433,72435,72437,72439],{"class":32,"line":8215},[30,72432,54923],{"class":40},[30,72434,51575],{"class":321},[30,72436,1145],{"class":40},[30,72438,51630],{"class":317},[30,72440,1480],{"class":321},[30,72442,72443,72445,72447,72449,72451],{"class":32,"line":8227},[30,72444,54909],{"class":40},[30,72446,51575],{"class":321},[30,72448,804],{"class":40},[30,72450,51630],{"class":317},[30,72452,1480],{"class":321},[30,72454,72455,72457,72459,72462,72464,72466,72468,72471,72473,72475],{"class":32,"line":8239},[30,72456,55022],{"class":40},[30,72458,51575],{"class":321},[30,72460,72461],{"class":40},"rgb",[30,72463,322],{"class":321},[30,72465,1289],{"class":40},[30,72467,12617],{"class":321},[30,72469,72470],{"class":40},"187",[30,72472,12617],{"class":321},[30,72474,619],{"class":40},[30,72476,2901],{"class":321},[30,72478,72479,72481,72483,72485],{"class":32,"line":9898},[30,72480,57554],{"class":40},[30,72482,51575],{"class":321},[30,72484,60980],{"class":40},[30,72486,1480],{"class":321},[30,72488,72489,72491,72493,72495],{"class":32,"line":9923},[30,72490,62115],{"class":40},[30,72492,51575],{"class":321},[30,72494,511],{"class":40},[30,72496,1480],{"class":321},[30,72498,72499],{"class":32,"line":9946},[30,72500,2369],{"class":321},[30,72502,72503],{"class":32,"line":9970},[30,72504,2582],{"emptyLinePlaceholder":245},[30,72506,72507,72509,72511],{"class":32,"line":9975},[30,72508,72426],{"class":51438},[30,72510,51826],{"class":51438},[30,72512,15754],{"class":321},[30,72514,72515,72517,72519,72522],{"class":32,"line":9980},[30,72516,55147],{"class":40},[30,72518,51575],{"class":321},[30,72520,72521],{"class":40},"inline-block",[30,72523,1480],{"class":321},[30,72525,72526,72528,72530,72532,72534],{"class":32,"line":9985},[30,72527,54909],{"class":40},[30,72529,51575],{"class":321},[30,72531,766],{"class":40},[30,72533,51630],{"class":317},[30,72535,1480],{"class":321},[30,72537,72538,72540,72542,72544,72546],{"class":32,"line":9994},[30,72539,54923],{"class":40},[30,72541,51575],{"class":321},[30,72543,766],{"class":40},[30,72545,51630],{"class":317},[30,72547,1480],{"class":321},[30,72549,72550,72552,72554,72556,72558],{"class":32,"line":9999},[30,72551,57497],{"class":40},[30,72553,51575],{"class":321},[30,72555,792],{"class":40},[30,72557,51630],{"class":317},[30,72559,1480],{"class":321},[30,72561,72562,72564,72566,72568,72570,72572,72575],{"class":32,"line":10005},[30,72563,62115],{"class":40},[30,72565,51575],{"class":321},[30,72567,537],{"class":40},[30,72569,51630],{"class":317},[30,72571,51659],{"class":40},[30,72573,72574],{"class":40}," #fff",[30,72576,1480],{"class":321},[30,72578,72579,72581,72583,72585,72587],{"class":32,"line":10026},[30,72580,55272],{"class":40},[30,72582,51575],{"class":321},[30,72584,639],{"class":40},[30,72586,51630],{"class":317},[30,72588,1480],{"class":321},[30,72590,72591,72593,72595,72597,72599],{"class":32,"line":10032},[30,72592,61888],{"class":40},[30,72594,51575],{"class":321},[30,72596,537],{"class":40},[30,72598,51630],{"class":317},[30,72600,1480],{"class":321},[30,72602,72603],{"class":32,"line":10046},[30,72604,2369],{"class":321},[30,72606,72607],{"class":32,"line":10052},[30,72608,2582],{"emptyLinePlaceholder":245},[30,72610,72611,72614],{"class":32,"line":10079},[30,72612,72613],{"class":36},"    .total",[30,72615,15754],{"class":321},[30,72617,72618,72620,72622,72624,72626],{"class":32,"line":10088},[30,72619,54909],{"class":40},[30,72621,51575],{"class":321},[30,72623,61767],{"class":40},[30,72625,51630],{"class":317},[30,72627,1480],{"class":321},[30,72629,72630,72632,72634,72636,72638],{"class":32,"line":10094},[30,72631,54923],{"class":40},[30,72633,51575],{"class":321},[30,72635,721],{"class":40},[30,72637,51630],{"class":317},[30,72639,1480],{"class":321},[30,72641,72642,72644,72646,72648,72650],{"class":32,"line":10102},[30,72643,57497],{"class":40},[30,72645,51575],{"class":321},[30,72647,721],{"class":40},[30,72649,51630],{"class":317},[30,72651,1480],{"class":321},[30,72653,72654,72656,72658,72661],{"class":32,"line":10107},[30,72655,57424],{"class":40},[30,72657,51575],{"class":321},[30,72659,72660],{"class":40},"right",[30,72662,1480],{"class":321},[30,72664,72665,72667,72669,72671,72673,72675,72677,72679],{"class":32,"line":16786},[30,72666,54844],{"class":40},[30,72668,51575],{"class":321},[30,72670,721],{"class":40},[30,72672,51630],{"class":317},[30,72674,51694],{"class":40},[30,72676,2220],{"class":40},[30,72678,51630],{"class":317},[30,72680,1480],{"class":321},[30,72682,72683,72686,72688,72690,72692],{"class":32,"line":16792},[30,72684,72685],{"class":40},"      padding-right",[30,72687,51575],{"class":321},[30,72689,766],{"class":40},[30,72691,51630],{"class":317},[30,72693,1480],{"class":321},[30,72695,72696,72698,72700,72702,72704],{"class":32,"line":16815},[30,72697,55060],{"class":40},[30,72699,51575],{"class":321},[30,72701,843],{"class":40},[30,72703,51630],{"class":317},[30,72705,1480],{"class":321},[30,72707,72708,72710,72712,72714,72716,72719,72721,72724,72726,72728],{"class":32,"line":16821},[30,72709,55022],{"class":40},[30,72711,51575],{"class":321},[30,72713,72461],{"class":40},[30,72715,322],{"class":321},[30,72717,72718],{"class":40},"237",[30,72720,12617],{"class":321},[30,72722,72723],{"class":40},"235",[30,72725,12617],{"class":321},[30,72727,72723],{"class":40},[30,72729,2901],{"class":321},[30,72731,72732,72735,72737,72739],{"class":32,"line":16844},[30,72733,72734],{"class":40},"      box-sizing",[30,72736,51575],{"class":321},[30,72738,60643],{"class":40},[30,72740,1480],{"class":321},[30,72742,72743],{"class":32,"line":16858},[30,72744,2369],{"class":321},[30,72746,72747],{"class":32,"line":16878},[30,72748,2582],{"emptyLinePlaceholder":245},[30,72750,72751,72753,72755],{"class":32,"line":16884},[30,72752,72613],{"class":36},[30,72754,51826],{"class":51438},[30,72756,15754],{"class":321},[30,72758,72759,72761,72763,72765],{"class":32,"line":16895},[30,72760,57554],{"class":40},[30,72762,51575],{"class":321},[30,72764,57559],{"class":40},[30,72766,1480],{"class":321},[30,72768,72769],{"class":32,"line":16918},[30,72770,2369],{"class":321},[30,72772,72773],{"class":32,"line":16940},[30,72774,2582],{"emptyLinePlaceholder":245},[30,72776,72777,72779],{"class":32,"line":16945},[30,72778,65161],{"class":51438},[30,72780,15754],{"class":321},[30,72782,72783,72785,72787,72789,72791],{"class":32,"line":16951},[30,72784,54909],{"class":40},[30,72786,51575],{"class":321},[30,72788,61767],{"class":40},[30,72790,51630],{"class":317},[30,72792,1480],{"class":321},[30,72794,72795,72797,72799,72802],{"class":32,"line":16965},[30,72796,54844],{"class":40},[30,72798,51575],{"class":321},[30,72800,72801],{"class":40},"auto",[30,72803,1480],{"class":321},[30,72805,72806,72808,72810,72812],{"class":32,"line":16978},[30,72807,65168],{"class":40},[30,72809,51575],{"class":321},[30,72811,65173],{"class":40},[30,72813,1480],{"class":321},[30,72815,72816],{"class":32,"line":16983},[30,72817,2369],{"class":321},[30,72819,72820],{"class":32,"line":16997},[30,72821,2582],{"emptyLinePlaceholder":245},[30,72823,72824,72826],{"class":32,"line":17002},[30,72825,65253],{"class":51438},[30,72827,15754],{"class":321},[30,72829,72830,72832,72834,72836,72838,72840,72842,72844,72846,72848],{"class":32,"line":17008},[30,72831,55022],{"class":40},[30,72833,51575],{"class":321},[30,72835,72461],{"class":40},[30,72837,322],{"class":321},[30,72839,72718],{"class":40},[30,72841,12617],{"class":321},[30,72843,72723],{"class":40},[30,72845,12617],{"class":321},[30,72847,72723],{"class":40},[30,72849,2901],{"class":321},[30,72851,72852],{"class":32,"line":17013},[30,72853,2369],{"class":321},[30,72855,72856],{"class":32,"line":17027},[30,72857,2582],{"emptyLinePlaceholder":245},[30,72859,72860,72862],{"class":32,"line":17032},[30,72861,65253],{"class":51438},[30,72863,31604],{"class":321},[30,72865,72866,72868],{"class":32,"line":17037},[30,72867,65319],{"class":51438},[30,72869,15754],{"class":321},[30,72871,72872,72874,72876,72878,72880],{"class":32,"line":17051},[30,72873,54923],{"class":40},[30,72875,51575],{"class":321},[30,72877,593],{"class":40},[30,72879,51630],{"class":317},[30,72881,1480],{"class":321},[30,72883,72884,72886,72888,72890],{"class":32,"line":17063},[30,72885,57424],{"class":40},[30,72887,51575],{"class":321},[30,72889,23918],{"class":40},[30,72891,1480],{"class":321},[30,72893,72894,72896,72898,72900,72902],{"class":32,"line":17068},[30,72895,55060],{"class":40},[30,72897,51575],{"class":321},[30,72899,869],{"class":40},[30,72901,51630],{"class":317},[30,72903,1480],{"class":321},[30,72905,72906,72908,72910,72912,72914,72916,72918,72920,72923,72925,72928,72930,72932],{"class":32,"line":17081},[30,72907,62115],{"class":40},[30,72909,51575],{"class":321},[30,72911,537],{"class":40},[30,72913,51630],{"class":317},[30,72915,51659],{"class":40},[30,72917,72398],{"class":40},[30,72919,322],{"class":321},[30,72921,72922],{"class":40},"228",[30,72924,12617],{"class":321},[30,72926,72927],{"class":40},"225",[30,72929,12617],{"class":321},[30,72931,72927],{"class":40},[30,72933,2901],{"class":321},[30,72935,72936,72939,72941,72943,72945],{"class":32,"line":17086},[30,72937,72938],{"class":40},"      padding-left",[30,72940,51575],{"class":321},[30,72942,639],{"class":40},[30,72944,51630],{"class":317},[30,72946,1480],{"class":321},[30,72948,72949,72951,72953,72955,72958,72960,72962],{"class":32,"line":17091},[30,72950,61998],{"class":40},[30,72952,51575],{"class":321},[30,72954,28259],{"class":40},[30,72956,72957],{"class":40}," linear",[30,72959,62005],{"class":40},[30,72961,1015],{"class":317},[30,72963,1480],{"class":321},[30,72965,72966],{"class":32,"line":17096},[30,72967,2369],{"class":321},[30,72969,72970],{"class":32,"line":17109},[30,72971,2582],{"emptyLinePlaceholder":245},[30,72973,72974,72977,72979,72981],{"class":32,"line":17114},[30,72975,72976],{"class":51438},"    tbody",[30,72978,70282],{"class":51438},[30,72980,61078],{"class":36},[30,72982,15754],{"class":321},[30,72984,72985,72987,72989,72991,72993,72995,72997,72999,73001,73003],{"class":32,"line":32771},[30,72986,55022],{"class":40},[30,72988,51575],{"class":321},[30,72990,72461],{"class":40},[30,72992,322],{"class":321},[30,72994,72718],{"class":40},[30,72996,12617],{"class":321},[30,72998,72723],{"class":40},[30,73000,12617],{"class":321},[30,73002,72723],{"class":40},[30,73004,2901],{"class":321},[30,73006,73007,73009,73011,73013],{"class":32,"line":32777},[30,73008,62163],{"class":40},[30,73010,51575],{"class":321},[30,73012,62168],{"class":40},[30,73014,1480],{"class":321},[30,73016,73017],{"class":32,"line":32783},[30,73018,2369],{"class":321},[30,73020,73021],{"class":32,"line":32789},[30,73022,2582],{"emptyLinePlaceholder":245},[30,73024,73025,73027,73029,73032,73034],{"class":32,"line":32795},[30,73026,72976],{"class":51438},[30,73028,70282],{"class":51438},[30,73030,73031],{"class":51438}," td",[30,73033,1585],{"class":51438},[30,73035,15754],{"class":321},[30,73037,73038,73040,73042,73044],{"class":32,"line":32806},[30,73039,55147],{"class":40},[30,73041,51575],{"class":321},[30,73043,61007],{"class":40},[30,73045,1480],{"class":321},[30,73047,73048,73050,73052,73054,73056],{"class":32,"line":32812},[30,73049,54909],{"class":40},[30,73051,51575],{"class":321},[30,73053,1227],{"class":40},[30,73055,51630],{"class":317},[30,73057,1480],{"class":321},[30,73059,73060,73062,73064,73066,73068],{"class":32,"line":32832},[30,73061,54923],{"class":40},[30,73063,51575],{"class":321},[30,73065,1145],{"class":40},[30,73067,51630],{"class":317},[30,73069,1480],{"class":321},[30,73071,73072,73074,73076,73078,73080],{"class":32,"line":32838},[30,73073,57497],{"class":40},[30,73075,51575],{"class":321},[30,73077,1145],{"class":40},[30,73079,51630],{"class":317},[30,73081,1480],{"class":321},[30,73083,73084,73086,73088,73090,73092],{"class":32,"line":32849},[30,73085,62215],{"class":40},[30,73087,51575],{"class":321},[30,73089,398],{"class":40},[30,73091,51630],{"class":317},[30,73093,1480],{"class":321},[30,73095,73096,73098,73100,73102],{"class":32,"line":32855},[30,73097,57554],{"class":40},[30,73099,51575],{"class":321},[30,73101,60980],{"class":40},[30,73103,1480],{"class":321},[30,73105,73106,73108,73110,73112],{"class":32,"line":32861},[30,73107,57424],{"class":40},[30,73109,51575],{"class":321},[30,73111,51730],{"class":40},[30,73113,1480],{"class":321},[30,73115,73116,73118,73120,73122],{"class":32,"line":32867},[30,73117,64108],{"class":40},[30,73119,51575],{"class":321},[30,73121,54875],{"class":40},[30,73123,1480],{"class":321},[30,73125,73126,73128,73130,73133],{"class":32,"line":32873},[30,73127,55022],{"class":40},[30,73129,51575],{"class":321},[30,73131,73132],{"class":40},"orange",[30,73134,1480],{"class":321},[30,73136,73137,73139,73141,73144,73146],{"class":32,"line":32879},[30,73138,55272],{"class":40},[30,73140,51575],{"class":321},[30,73142,73143],{"class":40},"12.5",[30,73145,51630],{"class":317},[30,73147,1480],{"class":321},[30,73149,73150],{"class":32,"line":32885},[30,73151,2369],{"class":321},[30,73153,73154,73156,73158],{"class":32,"line":32891},[30,73155,52555],{"class":321},[30,73157,234],{"class":51438},[30,73159,51445],{"class":321},[30,73161,73162,73164,73166],{"class":32,"line":32911},[30,73163,51923],{"class":321},[30,73165,51472],{"class":51438},[30,73167,51445],{"class":321},[30,73169,73170],{"class":32,"line":32917},[30,73171,2582],{"emptyLinePlaceholder":245},[30,73173,73174,73176,73178],{"class":32,"line":32933},[30,73175,1230],{"class":321},[30,73177,51938],{"class":51438},[30,73179,51445],{"class":321},[30,73181,73182,73184,73186,73189,73191],{"class":32,"line":32939},[30,73183,52282],{"class":321},[30,73185,15],{"class":51438},[30,73187,73188],{"class":321},">学生就业统计表\u003C\u002F",[30,73190,15],{"class":51438},[30,73192,51445],{"class":321},[30,73194,73195,73197,73199,73201,73203,73205,73207,73209,73211],{"class":32,"line":32953},[30,73196,52282],{"class":321},[30,73198,66763],{"class":51438},[30,73200,53624],{"class":36},[30,73202,367],{"class":321},[30,73204,62802],{"class":74},[30,73206,69208],{"class":36},[30,73208,367],{"class":321},[30,73210,31914],{"class":74},[30,73212,51445],{"class":321},[30,73214,73215,73217,73219,73221,73223,73225,73227,73229,73231,73233,73235,73238,73240,73242,73244],{"class":32,"line":32959},[30,73216,51479],{"class":321},[30,73218,53959],{"class":51438},[30,73220,53962],{"class":36},[30,73222,367],{"class":321},[30,73224,62837],{"class":74},[30,73226,15102],{"class":36},[30,73228,367],{"class":321},[30,73230,69234],{"class":74},[30,73232,61158],{"class":36},[30,73234,367],{"class":321},[30,73236,73237],{"class":74},"\"姓名\"",[30,73239,53624],{"class":36},[30,73241,367],{"class":321},[30,73243,69234],{"class":74},[30,73245,51445],{"class":321},[30,73247,73248,73250,73252,73254,73256,73258,73260,73262,73264,73266,73268,73271,73273,73275,73277],{"class":32,"line":32974},[30,73249,51479],{"class":321},[30,73251,53959],{"class":51438},[30,73253,53962],{"class":36},[30,73255,367],{"class":321},[30,73257,62837],{"class":74},[30,73259,15102],{"class":36},[30,73261,367],{"class":321},[30,73263,69262],{"class":74},[30,73265,61158],{"class":36},[30,73267,367],{"class":321},[30,73269,73270],{"class":74},"\"年龄\"",[30,73272,53624],{"class":36},[30,73274,367],{"class":321},[30,73276,69262],{"class":74},[30,73278,51445],{"class":321},[30,73280,73281,73283,73285,73287,73289,73291,73293,73295,73297,73299,73301,73304,73306,73308,73310],{"class":32,"line":32980},[30,73282,51479],{"class":321},[30,73284,53959],{"class":51438},[30,73286,53962],{"class":36},[30,73288,367],{"class":321},[30,73290,62837],{"class":74},[30,73292,15102],{"class":36},[30,73294,367],{"class":321},[30,73296,69364],{"class":74},[30,73298,61158],{"class":36},[30,73300,367],{"class":321},[30,73302,73303],{"class":74},"\"薪资\"",[30,73305,53624],{"class":36},[30,73307,367],{"class":321},[30,73309,69364],{"class":74},[30,73311,51445],{"class":321},[30,73313,73314,73316,73318,73320,73322,73324,73326,73328,73330,73332,73334,73336],{"class":32,"line":32989},[30,73315,51479],{"class":321},[30,73317,69282],{"class":51438},[30,73319,15102],{"class":36},[30,73321,367],{"class":321},[30,73323,69289],{"class":74},[30,73325,15141],{"class":36},[30,73327,367],{"class":321},[30,73329,7834],{"class":74},[30,73331,53624],{"class":36},[30,73333,367],{"class":321},[30,73335,69289],{"class":74},[30,73337,51445],{"class":321},[30,73339,73340,73342,73344,73346,73348,73350,73352,73354],{"class":32,"line":32995},[30,73341,55372],{"class":321},[30,73343,69304],{"class":51438},[30,73345,66789],{"class":36},[30,73347,367],{"class":321},[30,73349,10143],{"class":74},[30,73351,69313],{"class":321},[30,73353,69304],{"class":51438},[30,73355,51445],{"class":321},[30,73357,73358,73360,73362,73364,73366,73368,73370,73372],{"class":32,"line":33004},[30,73359,55372],{"class":321},[30,73361,69304],{"class":51438},[30,73363,66789],{"class":36},[30,73365,367],{"class":321},[30,73367,10212],{"class":74},[30,73369,69332],{"class":321},[30,73371,69304],{"class":51438},[30,73373,51445],{"class":321},[30,73375,73376,73378,73380],{"class":32,"line":33010},[30,73377,51914],{"class":321},[30,73379,69282],{"class":51438},[30,73381,51445],{"class":321},[30,73383,73384,73386,73388,73390,73392,73394,73396,73398,73400,73402,73404,73406],{"class":32,"line":33016},[30,73385,51479],{"class":321},[30,73387,69282],{"class":51438},[30,73389,15102],{"class":36},[30,73391,367],{"class":321},[30,73393,69386],{"class":74},[30,73395,15141],{"class":36},[30,73397,367],{"class":321},[30,73399,7834],{"class":74},[30,73401,53624],{"class":36},[30,73403,367],{"class":321},[30,73405,69386],{"class":74},[30,73407,51445],{"class":321},[30,73409,73410,73412,73414,73416,73418,73420,73422,73424],{"class":32,"line":33025},[30,73411,55372],{"class":321},[30,73413,69304],{"class":51438},[30,73415,66789],{"class":36},[30,73417,367],{"class":321},[30,73419,69407],{"class":74},[30,73421,69410],{"class":321},[30,73423,69304],{"class":51438},[30,73425,51445],{"class":321},[30,73427,73428,73430,73432,73434,73436,73438,73440,73442],{"class":32,"line":33031},[30,73429,55372],{"class":321},[30,73431,69304],{"class":51438},[30,73433,66789],{"class":36},[30,73435,367],{"class":321},[30,73437,69427],{"class":74},[30,73439,69430],{"class":321},[30,73441,69304],{"class":51438},[30,73443,51445],{"class":321},[30,73445,73446,73448,73450,73452,73454,73456,73458,73460],{"class":32,"line":33042},[30,73447,55372],{"class":321},[30,73449,69304],{"class":51438},[30,73451,66789],{"class":36},[30,73453,367],{"class":321},[30,73455,69447],{"class":74},[30,73457,69450],{"class":321},[30,73459,69304],{"class":51438},[30,73461,51445],{"class":321},[30,73463,73464,73466,73468,73470,73472,73474,73476,73478],{"class":32,"line":33048},[30,73465,55372],{"class":321},[30,73467,69304],{"class":51438},[30,73469,66789],{"class":36},[30,73471,367],{"class":321},[30,73473,69467],{"class":74},[30,73475,69470],{"class":321},[30,73477,69304],{"class":51438},[30,73479,51445],{"class":321},[30,73481,73482,73484,73486,73488,73490,73492,73494,73496],{"class":32,"line":33067},[30,73483,55372],{"class":321},[30,73485,69304],{"class":51438},[30,73487,66789],{"class":36},[30,73489,367],{"class":321},[30,73491,69487],{"class":74},[30,73493,69490],{"class":321},[30,73495,69304],{"class":51438},[30,73497,51445],{"class":321},[30,73499,73500,73502,73504],{"class":32,"line":33073},[30,73501,51914],{"class":321},[30,73503,69282],{"class":51438},[30,73505,51445],{"class":321},[30,73507,73508,73510,73512],{"class":32,"line":33084},[30,73509,51479],{"class":321},[30,73511,54025],{"class":51438},[30,73513,51445],{"class":321},[30,73515,73516,73518,73520,73523,73525,73528,73530],{"class":32,"line":33090},[30,73517,55372],{"class":321},[30,73519,30],{"class":51438},[30,73521,73522],{"class":321},">+\u003C\u002F",[30,73524,30],{"class":51438},[30,73526,73527],{"class":321},">添加\u003C\u002F",[30,73529,54025],{"class":51438},[30,73531,51445],{"class":321},[30,73533,73534,73536,73538],{"class":32,"line":33110},[30,73535,52555],{"class":321},[30,73537,66763],{"class":51438},[30,73539,51445],{"class":321},[30,73541,73542,73544,73546,73548,73550,73552,73555,73557,73560,73562,73565,73567],{"class":32,"line":33126},[30,73543,52282],{"class":321},[30,73545,51749],{"class":51438},[30,73547,53624],{"class":36},[30,73549,367],{"class":321},[30,73551,62718],{"class":74},[30,73553,73554],{"class":321},">共有数据 \u003C",[30,73556,30],{"class":51438},[30,73558,73559],{"class":321},">0\u003C\u002F",[30,73561,30],{"class":51438},[30,73563,73564],{"class":321},"> 条\u003C\u002F",[30,73566,51749],{"class":51438},[30,73568,51445],{"class":321},[30,73570,73571,73573,73575],{"class":32,"line":33132},[30,73572,52282],{"class":321},[30,73574,457],{"class":51438},[30,73576,51445],{"class":321},[30,73578,73579,73581,73583],{"class":32,"line":33146},[30,73580,51479],{"class":321},[30,73582,460],{"class":51438},[30,73584,51445],{"class":321},[30,73586,73587,73589,73591],{"class":32,"line":33152},[30,73588,55372],{"class":321},[30,73590,463],{"class":51438},[30,73592,51445],{"class":321},[30,73594,73595,73597,73599,73602,73604],{"class":32,"line":33158},[30,73596,55440],{"class":321},[30,73598,466],{"class":51438},[30,73600,73601],{"class":321},">ID\u003C\u002F",[30,73603,466],{"class":51438},[30,73605,51445],{"class":321},[30,73607,73608,73610,73612,73614,73616],{"class":32,"line":33169},[30,73609,55440],{"class":321},[30,73611,466],{"class":51438},[30,73613,69593],{"class":321},[30,73615,466],{"class":51438},[30,73617,51445],{"class":321},[30,73619,73620,73622,73624,73626,73628],{"class":32,"line":33175},[30,73621,55440],{"class":321},[30,73623,466],{"class":51438},[30,73625,69606],{"class":321},[30,73627,466],{"class":51438},[30,73629,51445],{"class":321},[30,73631,73632,73634,73636,73638,73640],{"class":32,"line":33181},[30,73633,55440],{"class":321},[30,73635,466],{"class":51438},[30,73637,69619],{"class":321},[30,73639,466],{"class":51438},[30,73641,51445],{"class":321},[30,73643,73644,73646,73648,73650,73652],{"class":32,"line":33191},[30,73645,55440],{"class":321},[30,73647,466],{"class":51438},[30,73649,69632],{"class":321},[30,73651,466],{"class":51438},[30,73653,51445],{"class":321},[30,73655,73656,73658,73660,73662,73664],{"class":32,"line":33197},[30,73657,55440],{"class":321},[30,73659,466],{"class":51438},[30,73661,69645],{"class":321},[30,73663,466],{"class":51438},[30,73665,51445],{"class":321},[30,73667,73668,73670,73672,73675,73677],{"class":32,"line":33208},[30,73669,55440],{"class":321},[30,73671,466],{"class":51438},[30,73673,73674],{"class":321},">录入时间\u003C\u002F",[30,73676,466],{"class":51438},[30,73678,51445],{"class":321},[30,73680,73681,73683,73685,73687,73689],{"class":32,"line":33214},[30,73682,55440],{"class":321},[30,73684,466],{"class":51438},[30,73686,69658],{"class":321},[30,73688,466],{"class":51438},[30,73690,51445],{"class":321},[30,73692,73693,73695,73697],{"class":32,"line":33224},[30,73694,55545],{"class":321},[30,73696,463],{"class":51438},[30,73698,51445],{"class":321},[30,73700,73701,73703,73705],{"class":32,"line":33229},[30,73702,51914],{"class":321},[30,73704,460],{"class":51438},[30,73706,51445],{"class":321},[30,73708,73709,73711,73713],{"class":32,"line":33235},[30,73710,51479],{"class":321},[30,73712,504],{"class":51438},[30,73714,51445],{"class":321},[30,73716,73717],{"class":32,"line":33284},[30,73718,73719],{"class":379},"      \u003C!-- \u003Ctr>\n",[30,73721,73722],{"class":32,"line":33331},[30,73723,73724],{"class":379},"        \u003Ctd>1\u003C\u002Ftd>\n",[30,73726,73727],{"class":32,"line":33336},[30,73728,73724],{"class":379},[30,73730,73731],{"class":32,"line":33342},[30,73732,73724],{"class":379},[30,73734,73735],{"class":32,"line":33361},[30,73736,73724],{"class":379},[30,73738,73739],{"class":32,"line":33367},[30,73740,73724],{"class":379},[30,73742,73743],{"class":32,"line":33387},[30,73744,73724],{"class":379},[30,73746,73747],{"class":32,"line":33393},[30,73748,73724],{"class":379},[30,73750,73751],{"class":32,"line":33399},[30,73752,73753],{"class":379},"        \u003Ctd>\n",[30,73755,73756],{"class":32,"line":33409},[30,73757,73758],{"class":379},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[30,73760,73761],{"class":32,"line":33414},[30,73762,73763],{"class":379},"        \u003C\u002Ftd>\n",[30,73765,73766],{"class":32,"line":33420},[30,73767,73768],{"class":379},"      \u003C\u002Ftr> -->\n",[30,73770,73771,73773,73775],{"class":32,"line":33436},[30,73772,51914],{"class":321},[30,73774,504],{"class":51438},[30,73776,51445],{"class":321},[30,73778,73779,73781,73783],{"class":32,"line":33481},[30,73780,52555],{"class":321},[30,73782,457],{"class":51438},[30,73784,51445],{"class":321},[30,73786,73787,73789,73791],{"class":32,"line":33487},[30,73788,52282],{"class":321},[30,73790,51951],{"class":51438},[30,73792,51445],{"class":321},[30,73794,73795],{"class":32,"line":33493},[30,73796,73797],{"class":379},"    \u002F\u002F const initData = [{\n",[30,73799,73800],{"class":32,"line":33499},[30,73801,73802],{"class":379},"    \u002F\u002F   unameId: 1,\n",[30,73804,73805],{"class":32,"line":33510},[30,73806,73807],{"class":379},"    \u002F\u002F   uname: '华晨宇',\n",[30,73809,73810],{"class":32,"line":33516},[30,73811,73812],{"class":379},"    \u002F\u002F   age: 22,\n",[30,73814,73815],{"class":32,"line":33522},[30,73816,73817],{"class":379},"    \u002F\u002F   salary: 12000,\n",[30,73819,73820],{"class":32,"line":33528},[30,73821,73822],{"class":379},"    \u002F\u002F   gender: '男',\n",[30,73824,73825],{"class":32,"line":33546},[30,73826,73827],{"class":379},"    \u002F\u002F   city: '北京',\n",[30,73829,73830],{"class":32,"line":33560},[30,73831,73832],{"class":379},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[30,73834,73835],{"class":32,"line":33569},[30,73836,73837],{"class":379},"    \u002F\u002F }]\n",[30,73839,73840],{"class":32,"line":33578},[30,73841,73842],{"class":379},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[30,73844,73845],{"class":32,"line":33587},[30,73846,73847],{"class":379},"    \u002F\u002F 1.渲染业务\n",[30,73849,73850],{"class":32,"line":33596},[30,73851,73852],{"class":379},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[30,73854,73855],{"class":32,"line":33602},[30,73856,73857],{"class":379},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[30,73859,73860],{"class":32,"line":33608},[30,73861,73862],{"class":379},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[30,73864,73865],{"class":32,"line":33616},[30,73866,2582],{"emptyLinePlaceholder":245},[30,73868,73869],{"class":32,"line":33621},[30,73870,73871],{"class":379},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[30,73873,73874],{"class":32,"line":33627},[30,73875,73876],{"class":379},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[30,73878,73879,73881,73883,73885],{"class":32,"line":33638},[30,73880,11403],{"class":317},[30,73882,57833],{"class":40},[30,73884,13746],{"class":317},[30,73886,51976],{"class":321},[30,73888,73889,73892,73894],{"class":32,"line":33644},[30,73890,73891],{"class":321},"    console.",[30,73893,58385],{"class":36},[30,73895,52550],{"class":321},[30,73897,73898],{"class":32,"line":33664},[30,73899,2582],{"emptyLinePlaceholder":245},[30,73901,73902],{"class":32,"line":33670},[30,73903,73904],{"class":379},"    \u002F\u002F 时间函数\n",[30,73906,73907,73909,73912],{"class":32,"line":33676},[30,73908,70222],{"class":317},[30,73910,73911],{"class":36}," getTime",[30,73913,11035],{"class":321},[30,73915,73916,73918,73921,73923,73925,73928],{"class":32,"line":33682},[30,73917,58366],{"class":317},[30,73919,73920],{"class":40}," date",[30,73922,13746],{"class":317},[30,73924,11760],{"class":317},[30,73926,73927],{"class":36}," Date",[30,73929,2158],{"class":321},[30,73931,73932,73934,73936,73938,73941,73944,73946,73948,73950,73953,73956,73958,73960,73962,73964,73966,73968,73970],{"class":32,"line":33699},[30,73933,58366],{"class":317},[30,73935,16273],{"class":40},[30,73937,13746],{"class":317},[30,73939,73940],{"class":321}," date.",[30,73942,73943],{"class":36},"getHours",[30,73945,13232],{"class":321},[30,73947,1230],{"class":317},[30,73949,2220],{"class":40},[30,73951,73952],{"class":317}," ?",[30,73954,73955],{"class":74}," '0'",[30,73957,45704],{"class":317},[30,73959,73940],{"class":321},[30,73961,73943],{"class":36},[30,73963,13232],{"class":321},[30,73965,1179],{"class":317},[30,73967,73940],{"class":321},[30,73969,73943],{"class":36},[30,73971,2158],{"class":321},[30,73973,73974,73976,73979,73981,73983,73986,73988,73990,73992,73994,73996,73998,74000,74002,74004,74006,74008,74010],{"class":32,"line":33705},[30,73975,58366],{"class":317},[30,73977,73978],{"class":40}," m",[30,73980,13746],{"class":317},[30,73982,73940],{"class":321},[30,73984,73985],{"class":36},"getMinutes",[30,73987,13232],{"class":321},[30,73989,1230],{"class":317},[30,73991,2220],{"class":40},[30,73993,73952],{"class":317},[30,73995,73955],{"class":74},[30,73997,45704],{"class":317},[30,73999,73940],{"class":321},[30,74001,73985],{"class":36},[30,74003,13232],{"class":321},[30,74005,1179],{"class":317},[30,74007,73940],{"class":321},[30,74009,73985],{"class":36},[30,74011,2158],{"class":321},[30,74013,74014,74016,74018,74020,74022,74025,74027,74029,74031,74033,74035,74037,74039,74041,74043,74045,74047,74049],{"class":32,"line":33711},[30,74015,58366],{"class":317},[30,74017,8610],{"class":40},[30,74019,13746],{"class":317},[30,74021,73940],{"class":321},[30,74023,74024],{"class":36},"getSeconds",[30,74026,13232],{"class":321},[30,74028,1230],{"class":317},[30,74030,2220],{"class":40},[30,74032,73952],{"class":317},[30,74034,73955],{"class":74},[30,74036,45704],{"class":317},[30,74038,73940],{"class":321},[30,74040,74024],{"class":36},[30,74042,13232],{"class":321},[30,74044,1179],{"class":317},[30,74046,73940],{"class":321},[30,74048,74024],{"class":36},[30,74050,2158],{"class":321},[30,74052,74053,74055,74058,74060,74062,74065,74067,74070,74072,74075,74077,74079,74082,74084,74086,74088,74090,74092,74094,74097,74099,74102,74104,74107,74109,74111,74113],{"class":32,"line":33717},[30,74054,58366],{"class":317},[30,74056,74057],{"class":40}," str",[30,74059,13746],{"class":317},[30,74061,63041],{"class":74},[30,74063,74064],{"class":321},"date",[30,74066,878],{"class":74},[30,74068,74069],{"class":36},"getFullYear",[30,74071,2609],{"class":74},[30,74073,74074],{"class":74},"}\u002F${",[30,74076,74064],{"class":321},[30,74078,878],{"class":74},[30,74080,74081],{"class":36},"getMonth",[30,74083,13232],{"class":74},[30,74085,801],{"class":317},[30,74087,25291],{"class":40},[30,74089,74074],{"class":74},[30,74091,74064],{"class":321},[30,74093,878],{"class":74},[30,74095,74096],{"class":36},"getDate",[30,74098,2609],{"class":74},[30,74100,74101],{"class":74},"} ${",[30,74103,735],{"class":321},[30,74105,74106],{"class":74},"}:${",[30,74108,864],{"class":321},[30,74110,74106],{"class":74},[30,74112,1015],{"class":321},[30,74114,74115],{"class":74},"}`\n",[30,74117,74118,74121],{"class":32,"line":33723},[30,74119,74120],{"class":317},"      return",[30,74122,74123],{"class":321}," str\n",[30,74125,74126],{"class":32,"line":33729},[30,74127,2369],{"class":321},[30,74129,74130],{"class":32,"line":33756},[30,74131,74132],{"class":379},"    \u002F\u002F 渲染函数\n",[30,74134,74135,74137,74139,74141,74143,74145,74147,74149],{"class":32,"line":33780},[30,74136,11403],{"class":317},[30,74138,69885],{"class":40},[30,74140,13746],{"class":317},[30,74142,54534],{"class":321},[30,74144,54537],{"class":36},[30,74146,322],{"class":321},[30,74148,69896],{"class":74},[30,74150,328],{"class":321},[30,74152,74153,74155,74157],{"class":32,"line":33786},[30,74154,70222],{"class":317},[30,74156,70225],{"class":36},[30,74158,11035],{"class":321},[30,74160,74161],{"class":32,"line":33792},[30,74162,74163],{"class":379},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[30,74165,74166],{"class":32,"line":33798},[30,74167,74168],{"class":379},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[30,74170,74171,74173,74176,74178,74180,74183,74185,74187,74189,74192,74194,74197],{"class":32,"line":33809},[30,74172,58366],{"class":317},[30,74174,74175],{"class":40}," trArr",[30,74177,13746],{"class":317},[30,74179,52103],{"class":321},[30,74181,74182],{"class":36},"map",[30,74184,322],{"class":321},[30,74186,54587],{"class":317},[30,74188,1841],{"class":321},[30,74190,74191],{"class":5398},"ele",[30,74193,12617],{"class":321},[30,74195,74196],{"class":5398},"index",[30,74198,12624],{"class":321},[30,74200,74201,74203],{"class":32,"line":33820},[30,74202,14934],{"class":317},[30,74204,70306],{"class":74},[30,74206,74207],{"class":32,"line":33826},[30,74208,74209],{"class":74},"      \u003Ctr>\n",[30,74211,74212,74214,74216,74218,74221],{"class":32,"line":33843},[30,74213,70311],{"class":74},[30,74215,74191],{"class":321},[30,74217,878],{"class":74},[30,74219,74220],{"class":321},"unameId",[30,74222,70326],{"class":74},[30,74224,74225,74227,74229,74231,74233],{"class":32,"line":33866},[30,74226,70311],{"class":74},[30,74228,74191],{"class":321},[30,74230,878],{"class":74},[30,74232,70342],{"class":321},[30,74234,70326],{"class":74},[30,74236,74237,74239,74241,74243,74245],{"class":32,"line":33889},[30,74238,70311],{"class":74},[30,74240,74191],{"class":321},[30,74242,878],{"class":74},[30,74244,70359],{"class":321},[30,74246,70326],{"class":74},[30,74248,74249,74251,74253,74255,74257],{"class":32,"line":33895},[30,74250,70311],{"class":74},[30,74252,74191],{"class":321},[30,74254,878],{"class":74},[30,74256,70376],{"class":321},[30,74258,70326],{"class":74},[30,74260,74261,74263,74265,74267,74269],{"class":32,"line":33900},[30,74262,70311],{"class":74},[30,74264,74191],{"class":321},[30,74266,878],{"class":74},[30,74268,70393],{"class":321},[30,74270,70326],{"class":74},[30,74272,74273,74275,74277,74279,74281],{"class":32,"line":33909},[30,74274,70311],{"class":74},[30,74276,74191],{"class":321},[30,74278,878],{"class":74},[30,74280,70410],{"class":321},[30,74282,70326],{"class":74},[30,74284,74285,74287,74289,74291,74293],{"class":32,"line":33919},[30,74286,70311],{"class":74},[30,74288,74191],{"class":321},[30,74290,878],{"class":74},[30,74292,2569],{"class":321},[30,74294,70326],{"class":74},[30,74296,74297],{"class":32,"line":33925},[30,74298,73753],{"class":74},[30,74300,74301,74304,74306],{"class":32,"line":33930},[30,74302,74303],{"class":74},"          \u003Ca href=\"#\" data-id=\"${",[30,74305,74196],{"class":321},[30,74307,74308],{"class":74},"}\">删除\u003C\u002Fa>\n",[30,74310,74311],{"class":32,"line":33936},[30,74312,73763],{"class":74},[30,74314,74315],{"class":32,"line":33949},[30,74316,74317],{"class":74},"      \u003C\u002Ftr>\n",[30,74319,74320],{"class":32,"line":33955},[30,74321,74322],{"class":74},"  `\n",[30,74324,74325],{"class":32,"line":33966},[30,74326,64953],{"class":321},[30,74328,74329,74331,74333],{"class":32,"line":33977},[30,74330,58382],{"class":321},[30,74332,58385],{"class":36},[30,74334,74335],{"class":321},"(trArr)\n",[30,74337,74338],{"class":32,"line":33996},[30,74339,2582],{"emptyLinePlaceholder":245},[30,74341,74342],{"class":32,"line":49656},[30,74343,74344],{"class":379},"      \u002F\u002F (2) 把数组转换为字符串join\n",[30,74346,74347],{"class":32,"line":49661},[30,74348,74349],{"class":379},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[30,74351,74352,74354,74356,74359,74362,74364,74367],{"class":32,"line":49670},[30,74353,70237],{"class":321},[30,74355,367],{"class":317},[30,74357,74358],{"class":321}," trArr.",[30,74360,74361],{"class":36},"join",[30,74363,322],{"class":321},[30,74365,74366],{"class":74},"''",[30,74368,328],{"class":321},[30,74370,74371],{"class":32,"line":49679},[30,74372,74373],{"class":379},"      \u002F\u002F 显示共有几条\n",[30,74375,74376,74378,74380,74382,74385,74388,74390,74392],{"class":32,"line":49684},[30,74377,55909],{"class":321},[30,74379,54537],{"class":36},[30,74381,322],{"class":321},[30,74383,74384],{"class":74},"'.total span'",[30,74386,74387],{"class":321},").innerHTML ",[30,74389,367],{"class":317},[30,74391,52103],{"class":321},[30,74393,55969],{"class":40},[30,74395,74396],{"class":32,"line":49689},[30,74397,2369],{"class":321},[30,74399,74400],{"class":32,"line":49694},[30,74401,74402],{"class":379},"    \u002F\u002F render()\n",[30,74404,74405],{"class":32,"line":49707},[30,74406,2582],{"emptyLinePlaceholder":245},[30,74408,74409],{"class":32,"line":49712},[30,74410,74411],{"class":379},"    \u002F\u002F 获取DOM对象\n",[30,74413,74414,74416,74418,74420,74422,74424,74426,74428],{"class":32,"line":49721},[30,74415,11403],{"class":317},[30,74417,69959],{"class":40},[30,74419,13746],{"class":317},[30,74421,54534],{"class":321},[30,74423,54537],{"class":36},[30,74425,322],{"class":321},[30,74427,69970],{"class":74},[30,74429,328],{"class":321},[30,74431,74432,74434,74436,74438,74440,74442,74444,74446],{"class":32,"line":49730},[30,74433,11403],{"class":317},[30,74435,69786],{"class":40},[30,74437,13746],{"class":317},[30,74439,54534],{"class":321},[30,74441,54537],{"class":36},[30,74443,322],{"class":321},[30,74445,69797],{"class":74},[30,74447,328],{"class":321},[30,74449,74450,74452,74454,74456,74458,74460,74462,74464],{"class":32,"line":49747},[30,74451,11403],{"class":317},[30,74453,15871],{"class":40},[30,74455,13746],{"class":317},[30,74457,54534],{"class":321},[30,74459,54537],{"class":36},[30,74461,322],{"class":321},[30,74463,69816],{"class":74},[30,74465,328],{"class":321},[30,74467,74469,74471,74473,74475,74477,74479,74481,74483],{"class":32,"line":74468},231,[30,74470,11403],{"class":317},[30,74472,69845],{"class":40},[30,74474,13746],{"class":317},[30,74476,54534],{"class":321},[30,74478,54537],{"class":36},[30,74480,322],{"class":321},[30,74482,69856],{"class":74},[30,74484,328],{"class":321},[30,74486,74488,74490,74492,74494,74496,74498,74500,74502],{"class":32,"line":74487},232,[30,74489,11403],{"class":317},[30,74491,69825],{"class":40},[30,74493,13746],{"class":317},[30,74495,54534],{"class":321},[30,74497,54537],{"class":36},[30,74499,322],{"class":321},[30,74501,69836],{"class":74},[30,74503,328],{"class":321},[30,74505,74507,74509,74511,74513,74515,74517,74519,74521],{"class":32,"line":74506},233,[30,74508,11403],{"class":317},[30,74510,69865],{"class":40},[30,74512,13746],{"class":317},[30,74514,54534],{"class":321},[30,74516,54537],{"class":36},[30,74518,322],{"class":321},[30,74520,69876],{"class":74},[30,74522,328],{"class":321},[30,74524,74526],{"class":32,"line":74525},234,[30,74527,2582],{"emptyLinePlaceholder":245},[30,74529,74531],{"class":32,"line":74530},235,[30,74532,74533],{"class":379},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[30,74535,74537,74539,74541,74543,74545,74547,74549,74551,74553],{"class":32,"line":74536},236,[30,74538,69977],{"class":321},[30,74540,57951],{"class":36},[30,74542,322],{"class":321},[30,74544,69984],{"class":74},[30,74546,12617],{"class":321},[30,74548,54587],{"class":317},[30,74550,1841],{"class":321},[30,74552,395],{"class":5398},[30,74554,12624],{"class":321},[30,74556,74558],{"class":32,"line":74557},237,[30,74559,74560],{"class":379},"      \u002F\u002F 禁止浏览器跳转\n",[30,74562,74564,74566,74568],{"class":32,"line":74563},238,[30,74565,70004],{"class":321},[30,74567,70007],{"class":36},[30,74569,2158],{"class":321},[30,74571,74573],{"class":32,"line":74572},239,[30,74574,74575],{"class":379},"      \u002F\u002F 非空判断\n",[30,74577,74579],{"class":32,"line":74578},240,[30,74580,74581],{"class":379},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[30,74583,74585],{"class":32,"line":74584},241,[30,74586,74587],{"class":379},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[30,74589,74591,74593,74595,74597,74600,74602,74605,74608,74610,74612],{"class":32,"line":74590},242,[30,74592,54618],{"class":317},[30,74594,1841],{"class":321},[30,74596,546],{"class":317},[30,74598,74599],{"class":321},"uname.value ",[30,74601,71495],{"class":317},[30,74603,74604],{"class":317}," !",[30,74606,74607],{"class":321},"age.value ",[30,74609,71495],{"class":317},[30,74611,74604],{"class":317},[30,74613,74614],{"class":321},"salary.value) {\n",[30,74616,74618,74620,74622,74624,74626],{"class":32,"line":74617},243,[30,74619,14934],{"class":317},[30,74621,70078],{"class":36},[30,74623,322],{"class":321},[30,74625,70083],{"class":74},[30,74627,328],{"class":321},[30,74629,74631],{"class":32,"line":74630},244,[30,74632,52536],{"class":321},[30,74634,74636,74638,74640],{"class":32,"line":74635},245,[30,74637,58145],{"class":321},[30,74639,52022],{"class":36},[30,74641,74642],{"class":321},"({\n",[30,74644,74646],{"class":32,"line":74645},246,[30,74647,74648],{"class":379},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[30,74650,74652],{"class":32,"line":74651},247,[30,74653,74654],{"class":379},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[30,74656,74658],{"class":32,"line":74657},248,[30,74659,74660],{"class":379},"        \u002F\u002F 对象的序号应为数组长度+1\n",[30,74662,74664],{"class":32,"line":74663},249,[30,74665,74666],{"class":379},"        \u002F\u002F unameId: arr.length + 1,\n",[30,74668,74670],{"class":32,"line":74669},250,[30,74671,2582],{"emptyLinePlaceholder":245},[30,74673,74675],{"class":32,"line":74674},251,[30,74676,74677],{"class":379},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[30,74679,74681],{"class":32,"line":74680},252,[30,74682,74683],{"class":379},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[30,74685,74687],{"class":32,"line":74686},253,[30,74688,74689],{"class":379},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[30,74691,74693],{"class":32,"line":74692},254,[30,74694,74695],{"class":379},"        \u002F\u002F 0当假看\n",[30,74697,74699,74702,74704,74706,74709,74711,74713,74715,74718,74720,74722,74725,74727],{"class":32,"line":74698},255,[30,74700,74701],{"class":321},"        unameId: arr.",[30,74703,52106],{"class":40},[30,74705,73952],{"class":317},[30,74707,74708],{"class":321}," arr[arr.",[30,74710,52106],{"class":40},[30,74712,52409],{"class":317},[30,74714,25291],{"class":40},[30,74716,74717],{"class":321},"].unameId ",[30,74719,801],{"class":317},[30,74721,25291],{"class":40},[30,74723,74724],{"class":317}," :",[30,74726,25291],{"class":40},[30,74728,31604],{"class":321},[30,74730,74732],{"class":32,"line":74731},256,[30,74733,70131],{"class":321},[30,74735,74737],{"class":32,"line":74736},257,[30,74738,70136],{"class":321},[30,74740,74742],{"class":32,"line":74741},258,[30,74743,70146],{"class":321},[30,74745,74747],{"class":32,"line":74746},259,[30,74748,70141],{"class":321},[30,74750,74752],{"class":32,"line":74751},260,[30,74753,74754],{"class":321},"        city: city.value,\n",[30,74756,74758],{"class":32,"line":74757},261,[30,74759,74760],{"class":379},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[30,74762,74764],{"class":32,"line":74763},262,[30,74765,74766],{"class":379},"        \u002F\u002F time: new Date().toDateString()\n",[30,74768,74770,74773,74776],{"class":32,"line":74769},263,[30,74771,74772],{"class":321},"        time: ",[30,74774,74775],{"class":36},"getTime",[30,74777,2158],{"class":321},[30,74779,74781],{"class":32,"line":74780},264,[30,74782,64953],{"class":321},[30,74784,74786],{"class":32,"line":74785},265,[30,74787,74788],{"class":379},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[30,74790,74792,74794],{"class":32,"line":74791},266,[30,74793,70206],{"class":36},[30,74795,2158],{"class":321},[30,74797,74799,74801,74803,74805,74807],{"class":32,"line":74798},267,[30,74800,70189],{"class":40},[30,74802,878],{"class":321},[30,74804,70194],{"class":36},[30,74806,13232],{"class":321},[30,74808,74809],{"class":379},"\u002F\u002F重置表单\n",[30,74811,74813],{"class":32,"line":74812},268,[30,74814,74815],{"class":379},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[30,74817,74819,74822,74824,74826,74829,74831,74833,74835,74837],{"class":32,"line":74818},269,[30,74820,74821],{"class":321},"      localStorage.",[30,74823,71792],{"class":36},[30,74825,322],{"class":321},[30,74827,74828],{"class":74},"'data'",[30,74830,12617],{"class":321},[30,74832,71802],{"class":40},[30,74834,878],{"class":321},[30,74836,71807],{"class":36},[30,74838,74839],{"class":321},"(arr))\n",[30,74841,74843],{"class":32,"line":74842},270,[30,74844,33599],{"class":321},[30,74846,74848],{"class":32,"line":74847},271,[30,74849,2582],{"emptyLinePlaceholder":245},[30,74851,74853],{"class":32,"line":74852},272,[30,74854,74855],{"class":379},"    \u002F\u002F 3.删除业务\n",[30,74857,74859],{"class":32,"line":74858},273,[30,74860,74861],{"class":379},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[30,74863,74865,74867,74869,74871,74873,74875,74877,74879,74881],{"class":32,"line":74864},274,[30,74866,70479],{"class":321},[30,74868,57951],{"class":36},[30,74870,322],{"class":321},[30,74872,57956],{"class":74},[30,74874,12617],{"class":321},[30,74876,54587],{"class":317},[30,74878,1841],{"class":321},[30,74880,395],{"class":5398},[30,74882,12624],{"class":321},[30,74884,74886],{"class":32,"line":74885},275,[30,74887,74888],{"class":379},"      \u002F\u002F 判断是否点击的是删除按钮\n",[30,74890,74892,74894,74896,74898,74900],{"class":32,"line":74891},276,[30,74893,54618],{"class":317},[30,74895,67172],{"class":321},[30,74897,54624],{"class":317},[30,74899,68394],{"class":74},[30,74901,12624],{"class":321},[30,74903,74905],{"class":32,"line":74904},277,[30,74906,74907],{"class":379},"        \u002F\u002F alert(1)\n",[30,74909,74911],{"class":32,"line":74910},278,[30,74912,74913],{"class":379},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[30,74915,74917],{"class":32,"line":74916},279,[30,74918,74919],{"class":379},"        \u002F\u002F console.log(e.target)\n",[30,74921,74923],{"class":32,"line":74922},280,[30,74924,74925],{"class":379},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[30,74927,74929],{"class":32,"line":74928},281,[30,74930,2582],{"emptyLinePlaceholder":245},[30,74932,74934],{"class":32,"line":74933},282,[30,74935,74936],{"class":379},"        \u002F\u002F 确认框，确然是否真的要删除\n",[30,74938,74940],{"class":32,"line":74939},283,[30,74941,74942],{"class":379},"        \u002F\u002F confirm()为确认框\n",[30,74944,74946],{"class":32,"line":74945},284,[30,74947,74948],{"class":379},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[30,74950,74952,74954,74956,74959,74961,74964],{"class":32,"line":74951},285,[30,74953,2679],{"class":317},[30,74955,1841],{"class":321},[30,74957,74958],{"class":36},"confirm",[30,74960,322],{"class":321},[30,74962,74963],{"class":74},"'您确定要删除这条数据吗？'",[30,74965,74966],{"class":321},")) {\n",[30,74968,74970,74973,74975,74977,74979],{"class":32,"line":74969},286,[30,74971,74972],{"class":321},"          arr.",[30,74974,58148],{"class":36},[30,74976,70532],{"class":321},[30,74978,537],{"class":40},[30,74980,328],{"class":321},[30,74982,74984],{"class":32,"line":74983},287,[30,74985,74986],{"class":379},"          \u002F\u002F 3.4 重新渲染页面\n",[30,74988,74990,74993],{"class":32,"line":74989},288,[30,74991,74992],{"class":36},"          render",[30,74994,2158],{"class":321},[30,74996,74998],{"class":32,"line":74997},289,[30,74999,75000],{"class":379},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[30,75002,75004,75007,75009,75011,75013,75015,75017,75019,75021],{"class":32,"line":75003},290,[30,75005,75006],{"class":321},"          localStorage.",[30,75008,71792],{"class":36},[30,75010,322],{"class":321},[30,75012,74828],{"class":74},[30,75014,12617],{"class":321},[30,75016,71802],{"class":40},[30,75018,878],{"class":321},[30,75020,71807],{"class":36},[30,75022,74839],{"class":321},[30,75024,75026],{"class":32,"line":75025},291,[30,75027,2711],{"class":321},[30,75029,75031],{"class":32,"line":75030},292,[30,75032,52536],{"class":321},[30,75034,75036],{"class":32,"line":75035},293,[30,75037,2582],{"emptyLinePlaceholder":245},[30,75039,75041],{"class":32,"line":75040},294,[30,75042,33599],{"class":321},[30,75044,75046],{"class":32,"line":75045},295,[30,75047,2582],{"emptyLinePlaceholder":245},[30,75049,75051,75053,75055],{"class":32,"line":75050},296,[30,75052,52555],{"class":321},[30,75054,51951],{"class":51438},[30,75056,51445],{"class":321},[30,75058,75060,75062,75064],{"class":32,"line":75059},297,[30,75061,51923],{"class":321},[30,75063,51938],{"class":51438},[30,75065,51445],{"class":321},[30,75067,75069],{"class":32,"line":75068},298,[30,75070,2582],{"emptyLinePlaceholder":245},[30,75072,75074,75076,75078],{"class":32,"line":75073},299,[30,75075,51923],{"class":321},[30,75077,50773],{"class":51438},[30,75079,51445],{"class":321},[15,75081,75083],{"id":75082},"_36-正则表达式","3.6 正则表达式",[157,75085,75086],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[157,75088,75089],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[157,75091,75092],{},"正则表达式的作用：",[147,75094,75095,75102,75108],{},[150,75096,75097,75098,75101],{},"表单验证（ ",[469,75099,75100],{},"匹配"," ）",[150,75103,75104,75105,75101],{},"过滤敏感词（ ",[469,75106,75107],{},"替换",[150,75109,75110,75111,75101],{},"字符串中提取我们想要的部分（ ",[469,75112,75113],{},"提取",[287,75115,75117],{"id":75116},"_361-语法","3.6.1 语法",[157,75119,75120],{},"正则表达式使用步骤：",[271,75122,75123,75126],{},[150,75124,75125],{},"定义规则",[150,75127,75128],{},"查找是否匹配",[157,75130,75131],{},"正则表达式里边不需要写引号",[157,75133,75134],{},[160,75135],{"alt":25,"src":75136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[157,75138,75139],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[157,75141,75142],{},"reg.test(str)",[157,75144,75145],{},[160,75146],{"alt":25,"src":75147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[157,75149,75150],{},[160,75151],{"alt":25,"src":75152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[287,75154,75156],{"id":75155},"_362-元字符","3.6.2 元字符",[271,75158,75159,75162,75165,75168,75175],{},[150,75160,75161],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[150,75163,75164],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[150,75166,75167],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[150,75169,75170,75171],{},"正则验证工具：",[558,75172,75173],{"href":75173,"rel":75174},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24045],[150,75176,75177],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22180,75179,75181],{"id":75180},"_3621-边界符","3.6.2.1 边界符",[157,75183,75184],{},[160,75185],{"alt":25,"src":75186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[157,75188,75189],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[157,75191,75192],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[157,75194,75195],{},"只匹配一次",[157,75197,75198],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22180,75200,75202],{"id":75201},"_3622-量词","3.6.2.2 量词",[157,75204,75205],{},[160,75206],{"alt":25,"src":75207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[157,75209,75210],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22180,75212,75214],{"id":75213},"_3623-元字符","3.6.2.3 元字符",[157,75216,75217],{},[160,75218],{"alt":25,"src":75219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[157,75221,75222],{},"匹配的是a或b或c []只选一个",[157,75224,75225],{},[160,75226],{"alt":25,"src":75227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[157,75229,75230],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[157,75232,75233],{},[160,75234],{"alt":25,"src":75235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[157,75237,75238],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[157,75240,75241],{},[160,75242],{"alt":25,"src":75243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[20,75245,75247],{"className":50771,"code":75246,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 元字符中\n    console.log(\u002F哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('二哈'))   \u002F\u002Ftrue\n\n    \u002F\u002F 1.边界符\n    console.log(\u002F^哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    \u002F\u002F 2.量词\n    \u002F\u002F 量词 * 类似于 >= 0\n    console.log(\u002F^哈*$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈*$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈*$\u002F.test('哈好哈'))   \u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n\n    \u002F\u002F +类似于>=1\n    console.log(\u002F^哈+$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈+$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈+$\u002F.test('哈好哈'))   \u002F\u002Ffalse\n\n    \u002F\u002F ?类似于0次或一次\n    console.log(\u002F^哈？$\u002F.test(''))   \u002F\u002Ftrue\n    console.log(\u002F^哈?$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    console.log(\u002F^哈?$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈?$\u002F.test('哈好哈'))  \u002F\u002Ffalse\n\n    \u002F\u002F {n}写几，就必须出现几次\n    console.log(\u002F^哈{4}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F {n,}大于等于n次\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈哈哈')) \u002F\u002Ffalse\n\n    \u002F\u002F 3.字符类 [abc] 只选一个字符\n    console.log(\u002F^[abc]$\u002F.test('a'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('b'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('c'))  \u002F\u002Ftrue\n    console.log(\u002F[abc]\u002F.test('ab'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('ab'))  \u002F\u002Ffalse     不加精确匹配，就是true\n    console.log(\u002F^[abc]{2}$\u002F.test('ab'))  \u002F\u002Ftrue   可以选两个\n    console.log(\u002F^[a-z]$\u002F.test('p'))   \u002F\u002Ftrue   依然只能选一个\n    console.log(\u002F^[A-Z]$\u002F.test('p'))   \u002F\u002Ffalse\n    console.log(\u002F^[A-Z]$\u002F.test('P'))   \u002F\u002Ftrue\n    console.log(\u002F^[0-9]$\u002F.test('0'))   \u002F\u002Ftrue\n    console.log(\u002F^[a-zA-Z0-9]$\u002F.test('p'))  \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,75248,75249,75259,75273,75277,75285,75299,75319,75331,75339,75343,75351,75359,75364,75395,75422,75450,75454,75459,75487,75518,75523,75528,75559,75591,75623,75627,75632,75663,75693,75723,75727,75732,75763,75794,75824,75854,75858,75863,75896,75900,75905,75936,75967,75971,75976,76007,76037,76068,76072,76077,76109,76140,76171,76198,76229,76261,76294,76325,76356,76388,76419,76427,76435,76439],{"__ignoreMap":25},[30,75250,75251,75253,75255,75257],{"class":32,"line":33},[30,75252,51435],{"class":321},[30,75254,51439],{"class":51438},[30,75256,51442],{"class":36},[30,75258,51445],{"class":321},[30,75260,75261,75263,75265,75267,75269,75271],{"class":32,"line":44},[30,75262,1230],{"class":321},[30,75264,50773],{"class":51438},[30,75266,51454],{"class":36},[30,75268,367],{"class":321},[30,75270,51459],{"class":74},[30,75272,51445],{"class":321},[30,75274,75275],{"class":32,"line":52},[30,75276,2582],{"emptyLinePlaceholder":245},[30,75278,75279,75281,75283],{"class":32,"line":60},[30,75280,1230],{"class":321},[30,75282,51472],{"class":51438},[30,75284,51445],{"class":321},[30,75286,75287,75289,75291,75293,75295,75297],{"class":32,"line":68},[30,75288,52282],{"class":321},[30,75290,51482],{"class":51438},[30,75292,51485],{"class":36},[30,75294,367],{"class":321},[30,75296,51490],{"class":74},[30,75298,51445],{"class":321},[30,75300,75301,75303,75305,75307,75309,75311,75313,75315,75317],{"class":32,"line":80},[30,75302,52282],{"class":321},[30,75304,51482],{"class":51438},[30,75306,15102],{"class":36},[30,75308,367],{"class":321},[30,75310,51529],{"class":74},[30,75312,51509],{"class":36},[30,75314,367],{"class":321},[30,75316,51536],{"class":74},[30,75318,51445],{"class":321},[30,75320,75321,75323,75325,75327,75329],{"class":32,"line":88},[30,75322,52282],{"class":321},[30,75324,51545],{"class":51438},[30,75326,51548],{"class":321},[30,75328,51545],{"class":51438},[30,75330,51445],{"class":321},[30,75332,75333,75335,75337],{"class":32,"line":96},[30,75334,51923],{"class":321},[30,75336,51472],{"class":51438},[30,75338,51445],{"class":321},[30,75340,75341],{"class":32,"line":104},[30,75342,2582],{"emptyLinePlaceholder":245},[30,75344,75345,75347,75349],{"class":32,"line":112},[30,75346,1230],{"class":321},[30,75348,51938],{"class":51438},[30,75350,51445],{"class":321},[30,75352,75353,75355,75357],{"class":32,"line":123},[30,75354,52282],{"class":321},[30,75356,51951],{"class":51438},[30,75358,51445],{"class":321},[30,75360,75361],{"class":32,"line":131},[30,75362,75363],{"class":379},"    \u002F\u002F 元字符中\n",[30,75365,75366,75368,75370,75372,75374,75377,75379,75381,75384,75386,75389,75392],{"class":32,"line":142},[30,75367,73891],{"class":321},[30,75369,58385],{"class":36},[30,75371,322],{"class":321},[30,75373,904],{"class":74},[30,75375,75376],{"class":48115},"哈",[30,75378,904],{"class":74},[30,75380,878],{"class":321},[30,75382,75383],{"class":36},"test",[30,75385,322],{"class":321},[30,75387,75388],{"class":74},"'哈'",[30,75390,75391],{"class":321},"))  ",[30,75393,75394],{"class":379},"\u002F\u002Ftrue\n",[30,75396,75397,75399,75401,75403,75405,75407,75409,75411,75413,75415,75418,75420],{"class":32,"line":1811},[30,75398,73891],{"class":321},[30,75400,58385],{"class":36},[30,75402,322],{"class":321},[30,75404,904],{"class":74},[30,75406,75376],{"class":48115},[30,75408,904],{"class":74},[30,75410,878],{"class":321},[30,75412,75383],{"class":36},[30,75414,322],{"class":321},[30,75416,75417],{"class":74},"'哈哈'",[30,75419,75391],{"class":321},[30,75421,75394],{"class":379},[30,75423,75424,75426,75428,75430,75432,75434,75436,75438,75440,75442,75445,75448],{"class":32,"line":1825},[30,75425,73891],{"class":321},[30,75427,58385],{"class":36},[30,75429,322],{"class":321},[30,75431,904],{"class":74},[30,75433,75376],{"class":48115},[30,75435,904],{"class":74},[30,75437,878],{"class":321},[30,75439,75383],{"class":36},[30,75441,322],{"class":321},[30,75443,75444],{"class":74},"'二哈'",[30,75446,75447],{"class":321},"))   ",[30,75449,75394],{"class":379},[30,75451,75452],{"class":32,"line":1830},[30,75453,2582],{"emptyLinePlaceholder":245},[30,75455,75456],{"class":32,"line":1836},[30,75457,75458],{"class":379},"    \u002F\u002F 1.边界符\n",[30,75460,75461,75463,75465,75467,75469,75471,75473,75475,75477,75479,75481,75483,75485],{"class":32,"line":1857},[30,75462,73891],{"class":321},[30,75464,58385],{"class":36},[30,75466,322],{"class":321},[30,75468,904],{"class":74},[30,75470,1286],{"class":317},[30,75472,75376],{"class":48115},[30,75474,904],{"class":74},[30,75476,878],{"class":321},[30,75478,75383],{"class":36},[30,75480,322],{"class":321},[30,75482,75388],{"class":74},[30,75484,75391],{"class":321},[30,75486,75394],{"class":379},[30,75488,75489,75491,75493,75495,75497,75499,75501,75503,75505,75507,75509,75511,75513,75515],{"class":32,"line":1862},[30,75490,73891],{"class":321},[30,75492,58385],{"class":36},[30,75494,322],{"class":321},[30,75496,904],{"class":74},[30,75498,1286],{"class":317},[30,75500,75376],{"class":48115},[30,75502,622],{"class":317},[30,75504,904],{"class":74},[30,75506,878],{"class":321},[30,75508,75383],{"class":36},[30,75510,322],{"class":321},[30,75512,75417],{"class":74},[30,75514,75391],{"class":321},[30,75516,75517],{"class":379},"\u002F\u002Ffalse\n",[30,75519,75520],{"class":32,"line":1876},[30,75521,75522],{"class":379},"    \u002F\u002F 2.量词\n",[30,75524,75525],{"class":32,"line":1881},[30,75526,75527],{"class":379},"    \u002F\u002F 量词 * 类似于 >= 0\n",[30,75529,75530,75532,75534,75536,75538,75540,75542,75545,75547,75549,75551,75553,75555,75557],{"class":32,"line":1910},[30,75531,73891],{"class":321},[30,75533,58385],{"class":36},[30,75535,322],{"class":321},[30,75537,904],{"class":74},[30,75539,1286],{"class":317},[30,75541,75376],{"class":48115},[30,75543,75544],{"class":317},"*$",[30,75546,904],{"class":74},[30,75548,878],{"class":321},[30,75550,75383],{"class":36},[30,75552,322],{"class":321},[30,75554,75417],{"class":74},[30,75556,75391],{"class":321},[30,75558,75394],{"class":379},[30,75560,75561,75563,75565,75567,75569,75571,75573,75575,75577,75579,75581,75583,75586,75588],{"class":32,"line":1915},[30,75562,73891],{"class":321},[30,75564,58385],{"class":36},[30,75566,322],{"class":321},[30,75568,904],{"class":74},[30,75570,1286],{"class":317},[30,75572,75376],{"class":48115},[30,75574,75544],{"class":317},[30,75576,904],{"class":74},[30,75578,878],{"class":321},[30,75580,75383],{"class":36},[30,75582,322],{"class":321},[30,75584,75585],{"class":74},"'二哈好傻'",[30,75587,75391],{"class":321},[30,75589,75590],{"class":379},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[30,75592,75593,75595,75597,75599,75601,75603,75605,75607,75609,75611,75613,75615,75618,75620],{"class":32,"line":1932},[30,75594,73891],{"class":321},[30,75596,58385],{"class":36},[30,75598,322],{"class":321},[30,75600,904],{"class":74},[30,75602,1286],{"class":317},[30,75604,75376],{"class":48115},[30,75606,75544],{"class":317},[30,75608,904],{"class":74},[30,75610,878],{"class":321},[30,75612,75383],{"class":36},[30,75614,322],{"class":321},[30,75616,75617],{"class":74},"'哈好哈'",[30,75619,75447],{"class":321},[30,75621,75622],{"class":379},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[30,75624,75625],{"class":32,"line":1937},[30,75626,2582],{"emptyLinePlaceholder":245},[30,75628,75629],{"class":32,"line":1942},[30,75630,75631],{"class":379},"    \u002F\u002F +类似于>=1\n",[30,75633,75634,75636,75638,75640,75642,75644,75646,75649,75651,75653,75655,75657,75659,75661],{"class":32,"line":1947},[30,75635,73891],{"class":321},[30,75637,58385],{"class":36},[30,75639,322],{"class":321},[30,75641,904],{"class":74},[30,75643,1286],{"class":317},[30,75645,75376],{"class":48115},[30,75647,75648],{"class":317},"+$",[30,75650,904],{"class":74},[30,75652,878],{"class":321},[30,75654,75383],{"class":36},[30,75656,322],{"class":321},[30,75658,75417],{"class":74},[30,75660,75391],{"class":321},[30,75662,75394],{"class":379},[30,75664,75665,75667,75669,75671,75673,75675,75677,75679,75681,75683,75685,75687,75689,75691],{"class":32,"line":1961},[30,75666,73891],{"class":321},[30,75668,58385],{"class":36},[30,75670,322],{"class":321},[30,75672,904],{"class":74},[30,75674,1286],{"class":317},[30,75676,75376],{"class":48115},[30,75678,75648],{"class":317},[30,75680,904],{"class":74},[30,75682,878],{"class":321},[30,75684,75383],{"class":36},[30,75686,322],{"class":321},[30,75688,75585],{"class":74},[30,75690,75391],{"class":321},[30,75692,75590],{"class":379},[30,75694,75695,75697,75699,75701,75703,75705,75707,75709,75711,75713,75715,75717,75719,75721],{"class":32,"line":1966},[30,75696,73891],{"class":321},[30,75698,58385],{"class":36},[30,75700,322],{"class":321},[30,75702,904],{"class":74},[30,75704,1286],{"class":317},[30,75706,75376],{"class":48115},[30,75708,75648],{"class":317},[30,75710,904],{"class":74},[30,75712,878],{"class":321},[30,75714,75383],{"class":36},[30,75716,322],{"class":321},[30,75718,75617],{"class":74},[30,75720,75447],{"class":321},[30,75722,75517],{"class":379},[30,75724,75725],{"class":32,"line":2759},[30,75726,2582],{"emptyLinePlaceholder":245},[30,75728,75729],{"class":32,"line":2773},[30,75730,75731],{"class":379},"    \u002F\u002F ?类似于0次或一次\n",[30,75733,75734,75736,75738,75740,75742,75744,75747,75749,75751,75753,75755,75757,75759,75761],{"class":32,"line":2781},[30,75735,73891],{"class":321},[30,75737,58385],{"class":36},[30,75739,322],{"class":321},[30,75741,904],{"class":74},[30,75743,1286],{"class":317},[30,75745,75746],{"class":48115},"哈？",[30,75748,622],{"class":317},[30,75750,904],{"class":74},[30,75752,878],{"class":321},[30,75754,75383],{"class":36},[30,75756,322],{"class":321},[30,75758,74366],{"class":74},[30,75760,75447],{"class":321},[30,75762,75394],{"class":379},[30,75764,75765,75767,75769,75771,75773,75775,75777,75780,75782,75784,75786,75788,75790,75792],{"class":32,"line":2786},[30,75766,73891],{"class":321},[30,75768,58385],{"class":36},[30,75770,322],{"class":321},[30,75772,904],{"class":74},[30,75774,1286],{"class":317},[30,75776,75376],{"class":48115},[30,75778,75779],{"class":317},"?$",[30,75781,904],{"class":74},[30,75783,878],{"class":321},[30,75785,75383],{"class":36},[30,75787,322],{"class":321},[30,75789,75417],{"class":74},[30,75791,75391],{"class":321},[30,75793,75517],{"class":379},[30,75795,75796,75798,75800,75802,75804,75806,75808,75810,75812,75814,75816,75818,75820,75822],{"class":32,"line":2792},[30,75797,73891],{"class":321},[30,75799,58385],{"class":36},[30,75801,322],{"class":321},[30,75803,904],{"class":74},[30,75805,1286],{"class":317},[30,75807,75376],{"class":48115},[30,75809,75779],{"class":317},[30,75811,904],{"class":74},[30,75813,878],{"class":321},[30,75815,75383],{"class":36},[30,75817,322],{"class":321},[30,75819,75585],{"class":74},[30,75821,75391],{"class":321},[30,75823,75590],{"class":379},[30,75825,75826,75828,75830,75832,75834,75836,75838,75840,75842,75844,75846,75848,75850,75852],{"class":32,"line":2798},[30,75827,73891],{"class":321},[30,75829,58385],{"class":36},[30,75831,322],{"class":321},[30,75833,904],{"class":74},[30,75835,1286],{"class":317},[30,75837,75376],{"class":48115},[30,75839,75779],{"class":317},[30,75841,904],{"class":74},[30,75843,878],{"class":321},[30,75845,75383],{"class":36},[30,75847,322],{"class":321},[30,75849,75617],{"class":74},[30,75851,75391],{"class":321},[30,75853,75517],{"class":379},[30,75855,75856],{"class":32,"line":2803},[30,75857,2582],{"emptyLinePlaceholder":245},[30,75859,75860],{"class":32,"line":8130},[30,75861,75862],{"class":379},"    \u002F\u002F {n}写几，就必须出现几次\n",[30,75864,75865,75867,75869,75871,75873,75875,75877,75880,75882,75884,75886,75888,75891,75894],{"class":32,"line":8154},[30,75866,73891],{"class":321},[30,75868,58385],{"class":36},[30,75870,322],{"class":321},[30,75872,904],{"class":74},[30,75874,1286],{"class":317},[30,75876,75376],{"class":48115},[30,75878,75879],{"class":317},"{4}$",[30,75881,904],{"class":74},[30,75883,878],{"class":321},[30,75885,75383],{"class":36},[30,75887,322],{"class":321},[30,75889,75890],{"class":74},"'哈哈哈哈'",[30,75892,75893],{"class":321},")) ",[30,75895,75394],{"class":379},[30,75897,75898],{"class":32,"line":8159},[30,75899,2582],{"emptyLinePlaceholder":245},[30,75901,75902],{"class":32,"line":8165},[30,75903,75904],{"class":379},"    \u002F\u002F {n,}大于等于n次\n",[30,75906,75907,75909,75911,75913,75915,75917,75919,75922,75924,75926,75928,75930,75932,75934],{"class":32,"line":8192},[30,75908,73891],{"class":321},[30,75910,58385],{"class":36},[30,75912,322],{"class":321},[30,75914,904],{"class":74},[30,75916,1286],{"class":317},[30,75918,75376],{"class":48115},[30,75920,75921],{"class":317},"{4,}$",[30,75923,904],{"class":74},[30,75925,878],{"class":321},[30,75927,75383],{"class":36},[30,75929,322],{"class":321},[30,75931,75890],{"class":74},[30,75933,75893],{"class":321},[30,75935,75394],{"class":379},[30,75937,75938,75940,75942,75944,75946,75948,75950,75952,75954,75956,75958,75960,75963,75965],{"class":32,"line":8197},[30,75939,73891],{"class":321},[30,75941,58385],{"class":36},[30,75943,322],{"class":321},[30,75945,904],{"class":74},[30,75947,1286],{"class":317},[30,75949,75376],{"class":48115},[30,75951,75921],{"class":317},[30,75953,904],{"class":74},[30,75955,878],{"class":321},[30,75957,75383],{"class":36},[30,75959,322],{"class":321},[30,75961,75962],{"class":74},"'哈哈哈哈哈'",[30,75964,75893],{"class":321},[30,75966,75394],{"class":379},[30,75968,75969],{"class":32,"line":8203},[30,75970,2582],{"emptyLinePlaceholder":245},[30,75972,75973],{"class":32,"line":8215},[30,75974,75975],{"class":379},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[30,75977,75978,75980,75982,75984,75986,75988,75990,75993,75995,75997,75999,76001,76003,76005],{"class":32,"line":8227},[30,75979,73891],{"class":321},[30,75981,58385],{"class":36},[30,75983,322],{"class":321},[30,75985,904],{"class":74},[30,75987,1286],{"class":317},[30,75989,75376],{"class":48115},[30,75991,75992],{"class":317},"{4,6}$",[30,75994,904],{"class":74},[30,75996,878],{"class":321},[30,75998,75383],{"class":36},[30,76000,322],{"class":321},[30,76002,75890],{"class":74},[30,76004,75893],{"class":321},[30,76006,75394],{"class":379},[30,76008,76009,76011,76013,76015,76017,76019,76021,76023,76025,76027,76029,76031,76033,76035],{"class":32,"line":8239},[30,76010,73891],{"class":321},[30,76012,58385],{"class":36},[30,76014,322],{"class":321},[30,76016,904],{"class":74},[30,76018,1286],{"class":317},[30,76020,75376],{"class":48115},[30,76022,75992],{"class":317},[30,76024,904],{"class":74},[30,76026,878],{"class":321},[30,76028,75383],{"class":36},[30,76030,322],{"class":321},[30,76032,75962],{"class":74},[30,76034,75893],{"class":321},[30,76036,75394],{"class":379},[30,76038,76039,76041,76043,76045,76047,76049,76051,76053,76055,76057,76059,76061,76064,76066],{"class":32,"line":9898},[30,76040,73891],{"class":321},[30,76042,58385],{"class":36},[30,76044,322],{"class":321},[30,76046,904],{"class":74},[30,76048,1286],{"class":317},[30,76050,75376],{"class":48115},[30,76052,75992],{"class":317},[30,76054,904],{"class":74},[30,76056,878],{"class":321},[30,76058,75383],{"class":36},[30,76060,322],{"class":321},[30,76062,76063],{"class":74},"'哈哈哈哈哈哈哈'",[30,76065,75893],{"class":321},[30,76067,75517],{"class":379},[30,76069,76070],{"class":32,"line":9923},[30,76071,2582],{"emptyLinePlaceholder":245},[30,76073,76074],{"class":32,"line":9946},[30,76075,76076],{"class":379},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[30,76078,76079,76081,76083,76085,76087,76089,76092,76094,76096,76098,76100,76102,76105,76107],{"class":32,"line":9970},[30,76080,73891],{"class":321},[30,76082,58385],{"class":36},[30,76084,322],{"class":321},[30,76086,904],{"class":74},[30,76088,1286],{"class":317},[30,76090,76091],{"class":40},"[abc]",[30,76093,622],{"class":317},[30,76095,904],{"class":74},[30,76097,878],{"class":321},[30,76099,75383],{"class":36},[30,76101,322],{"class":321},[30,76103,76104],{"class":74},"'a'",[30,76106,75391],{"class":321},[30,76108,75394],{"class":379},[30,76110,76111,76113,76115,76117,76119,76121,76123,76125,76127,76129,76131,76133,76136,76138],{"class":32,"line":9975},[30,76112,73891],{"class":321},[30,76114,58385],{"class":36},[30,76116,322],{"class":321},[30,76118,904],{"class":74},[30,76120,1286],{"class":317},[30,76122,76091],{"class":40},[30,76124,622],{"class":317},[30,76126,904],{"class":74},[30,76128,878],{"class":321},[30,76130,75383],{"class":36},[30,76132,322],{"class":321},[30,76134,76135],{"class":74},"'b'",[30,76137,75391],{"class":321},[30,76139,75394],{"class":379},[30,76141,76142,76144,76146,76148,76150,76152,76154,76156,76158,76160,76162,76164,76167,76169],{"class":32,"line":9980},[30,76143,73891],{"class":321},[30,76145,58385],{"class":36},[30,76147,322],{"class":321},[30,76149,904],{"class":74},[30,76151,1286],{"class":317},[30,76153,76091],{"class":40},[30,76155,622],{"class":317},[30,76157,904],{"class":74},[30,76159,878],{"class":321},[30,76161,75383],{"class":36},[30,76163,322],{"class":321},[30,76165,76166],{"class":74},"'c'",[30,76168,75391],{"class":321},[30,76170,75394],{"class":379},[30,76172,76173,76175,76177,76179,76181,76183,76185,76187,76189,76191,76194,76196],{"class":32,"line":9985},[30,76174,73891],{"class":321},[30,76176,58385],{"class":36},[30,76178,322],{"class":321},[30,76180,904],{"class":74},[30,76182,76091],{"class":40},[30,76184,904],{"class":74},[30,76186,878],{"class":321},[30,76188,75383],{"class":36},[30,76190,322],{"class":321},[30,76192,76193],{"class":74},"'ab'",[30,76195,75391],{"class":321},[30,76197,75394],{"class":379},[30,76199,76200,76202,76204,76206,76208,76210,76212,76214,76216,76218,76220,76222,76224,76226],{"class":32,"line":9994},[30,76201,73891],{"class":321},[30,76203,58385],{"class":36},[30,76205,322],{"class":321},[30,76207,904],{"class":74},[30,76209,1286],{"class":317},[30,76211,76091],{"class":40},[30,76213,622],{"class":317},[30,76215,904],{"class":74},[30,76217,878],{"class":321},[30,76219,75383],{"class":36},[30,76221,322],{"class":321},[30,76223,76193],{"class":74},[30,76225,75391],{"class":321},[30,76227,76228],{"class":379},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[30,76230,76231,76233,76235,76237,76239,76241,76243,76246,76248,76250,76252,76254,76256,76258],{"class":32,"line":9999},[30,76232,73891],{"class":321},[30,76234,58385],{"class":36},[30,76236,322],{"class":321},[30,76238,904],{"class":74},[30,76240,1286],{"class":317},[30,76242,76091],{"class":40},[30,76244,76245],{"class":317},"{2}$",[30,76247,904],{"class":74},[30,76249,878],{"class":321},[30,76251,75383],{"class":36},[30,76253,322],{"class":321},[30,76255,76193],{"class":74},[30,76257,75391],{"class":321},[30,76259,76260],{"class":379},"\u002F\u002Ftrue   可以选两个\n",[30,76262,76263,76265,76267,76269,76271,76273,76276,76278,76280,76282,76284,76286,76289,76291],{"class":32,"line":10005},[30,76264,73891],{"class":321},[30,76266,58385],{"class":36},[30,76268,322],{"class":321},[30,76270,904],{"class":74},[30,76272,1286],{"class":317},[30,76274,76275],{"class":40},"[a-z]",[30,76277,622],{"class":317},[30,76279,904],{"class":74},[30,76281,878],{"class":321},[30,76283,75383],{"class":36},[30,76285,322],{"class":321},[30,76287,76288],{"class":74},"'p'",[30,76290,75447],{"class":321},[30,76292,76293],{"class":379},"\u002F\u002Ftrue   依然只能选一个\n",[30,76295,76296,76298,76300,76302,76304,76306,76309,76311,76313,76315,76317,76319,76321,76323],{"class":32,"line":10026},[30,76297,73891],{"class":321},[30,76299,58385],{"class":36},[30,76301,322],{"class":321},[30,76303,904],{"class":74},[30,76305,1286],{"class":317},[30,76307,76308],{"class":40},"[A-Z]",[30,76310,622],{"class":317},[30,76312,904],{"class":74},[30,76314,878],{"class":321},[30,76316,75383],{"class":36},[30,76318,322],{"class":321},[30,76320,76288],{"class":74},[30,76322,75447],{"class":321},[30,76324,75517],{"class":379},[30,76326,76327,76329,76331,76333,76335,76337,76339,76341,76343,76345,76347,76349,76352,76354],{"class":32,"line":10032},[30,76328,73891],{"class":321},[30,76330,58385],{"class":36},[30,76332,322],{"class":321},[30,76334,904],{"class":74},[30,76336,1286],{"class":317},[30,76338,76308],{"class":40},[30,76340,622],{"class":317},[30,76342,904],{"class":74},[30,76344,878],{"class":321},[30,76346,75383],{"class":36},[30,76348,322],{"class":321},[30,76350,76351],{"class":74},"'P'",[30,76353,75447],{"class":321},[30,76355,75394],{"class":379},[30,76357,76358,76360,76362,76364,76366,76368,76371,76373,76375,76377,76379,76381,76384,76386],{"class":32,"line":10046},[30,76359,73891],{"class":321},[30,76361,58385],{"class":36},[30,76363,322],{"class":321},[30,76365,904],{"class":74},[30,76367,1286],{"class":317},[30,76369,76370],{"class":40},"[0-9]",[30,76372,622],{"class":317},[30,76374,904],{"class":74},[30,76376,878],{"class":321},[30,76378,75383],{"class":36},[30,76380,322],{"class":321},[30,76382,76383],{"class":74},"'0'",[30,76385,75447],{"class":321},[30,76387,75394],{"class":379},[30,76389,76390,76392,76394,76396,76398,76400,76403,76405,76407,76409,76411,76413,76415,76417],{"class":32,"line":10052},[30,76391,73891],{"class":321},[30,76393,58385],{"class":36},[30,76395,322],{"class":321},[30,76397,904],{"class":74},[30,76399,1286],{"class":317},[30,76401,76402],{"class":40},"[a-zA-Z0-9]",[30,76404,622],{"class":317},[30,76406,904],{"class":74},[30,76408,878],{"class":321},[30,76410,75383],{"class":36},[30,76412,322],{"class":321},[30,76414,76288],{"class":74},[30,76416,75391],{"class":321},[30,76418,75394],{"class":379},[30,76420,76421,76423,76425],{"class":32,"line":10079},[30,76422,52555],{"class":321},[30,76424,51951],{"class":51438},[30,76426,51445],{"class":321},[30,76428,76429,76431,76433],{"class":32,"line":10088},[30,76430,51923],{"class":321},[30,76432,51938],{"class":51438},[30,76434,51445],{"class":321},[30,76436,76437],{"class":32,"line":10094},[30,76438,2582],{"emptyLinePlaceholder":245},[30,76440,76441,76443,76445],{"class":32,"line":10102},[30,76442,51923],{"class":321},[30,76444,50773],{"class":51438},[30,76446,51445],{"class":321},[22180,76448,76450],{"id":76449},"_3624-修饰符","3.6.2.4 修饰符",[157,76452,76453],{},[160,76454],{"alt":25,"src":76455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[157,76457,76458],{},"replace是个方法，使用的时候一定不要忘记括号()",[157,76460,76461],{},[160,76462],{"alt":25,"src":76463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[20,76465,76467],{"className":50771,"code":76466,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n  \u003Cscript>\n    console.log(\u002F^java$\u002F.test('java')) \u002F\u002Ftrue\n    console.log(\u002F^java$\u002F.test('Java')) \u002F\u002Ffalse\n    \u002F\u002F 不区分大小写、\n    console.log(\u002F^java$\u002Fi.test('Java')) \u002F\u002Ftrue\n    const str = 'java是一门编程语言，学完java工资很高'\n    const result = str.replace(\u002Fjava\u002Fig, '前端')\n    console.log(result)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[27,76468,76469,76479,76493,76501,76515,76535,76547,76555,76563,76571,76603,76634,76639,76671,76682,76715,76724,76732,76740],{"__ignoreMap":25},[30,76470,76471,76473,76475,76477],{"class":32,"line":33},[30,76472,51435],{"class":321},[30,76474,51439],{"class":51438},[30,76476,51442],{"class":36},[30,76478,51445],{"class":321},[30,76480,76481,76483,76485,76487,76489,76491],{"class":32,"line":44},[30,76482,1230],{"class":321},[30,76484,50773],{"class":51438},[30,76486,51454],{"class":36},[30,76488,367],{"class":321},[30,76490,51459],{"class":74},[30,76492,51445],{"class":321},[30,76494,76495,76497,76499],{"class":32,"line":52},[30,76496,1230],{"class":321},[30,76498,51472],{"class":51438},[30,76500,51445],{"class":321},[30,76502,76503,76505,76507,76509,76511,76513],{"class":32,"line":60},[30,76504,52282],{"class":321},[30,76506,51482],{"class":51438},[30,76508,51485],{"class":36},[30,76510,367],{"class":321},[30,76512,51490],{"class":74},[30,76514,51445],{"class":321},[30,76516,76517,76519,76521,76523,76525,76527,76529,76531,76533],{"class":32,"line":68},[30,76518,52282],{"class":321},[30,76520,51482],{"class":51438},[30,76522,15102],{"class":36},[30,76524,367],{"class":321},[30,76526,51529],{"class":74},[30,76528,51509],{"class":36},[30,76530,367],{"class":321},[30,76532,51536],{"class":74},[30,76534,51445],{"class":321},[30,76536,76537,76539,76541,76543,76545],{"class":32,"line":80},[30,76538,52282],{"class":321},[30,76540,51545],{"class":51438},[30,76542,51548],{"class":321},[30,76544,51545],{"class":51438},[30,76546,51445],{"class":321},[30,76548,76549,76551,76553],{"class":32,"line":88},[30,76550,51923],{"class":321},[30,76552,51472],{"class":51438},[30,76554,51445],{"class":321},[30,76556,76557,76559,76561],{"class":32,"line":96},[30,76558,1230],{"class":321},[30,76560,51938],{"class":51438},[30,76562,51445],{"class":321},[30,76564,76565,76567,76569],{"class":32,"line":104},[30,76566,52282],{"class":321},[30,76568,51951],{"class":51438},[30,76570,51445],{"class":321},[30,76572,76573,76575,76577,76579,76581,76583,76586,76588,76590,76592,76594,76596,76599,76601],{"class":32,"line":112},[30,76574,73891],{"class":321},[30,76576,58385],{"class":36},[30,76578,322],{"class":321},[30,76580,904],{"class":74},[30,76582,1286],{"class":317},[30,76584,76585],{"class":48115},"java",[30,76587,622],{"class":317},[30,76589,904],{"class":74},[30,76591,878],{"class":321},[30,76593,75383],{"class":36},[30,76595,322],{"class":321},[30,76597,76598],{"class":74},"'java'",[30,76600,75893],{"class":321},[30,76602,75394],{"class":379},[30,76604,76605,76607,76609,76611,76613,76615,76617,76619,76621,76623,76625,76627,76630,76632],{"class":32,"line":123},[30,76606,73891],{"class":321},[30,76608,58385],{"class":36},[30,76610,322],{"class":321},[30,76612,904],{"class":74},[30,76614,1286],{"class":317},[30,76616,76585],{"class":48115},[30,76618,622],{"class":317},[30,76620,904],{"class":74},[30,76622,878],{"class":321},[30,76624,75383],{"class":36},[30,76626,322],{"class":321},[30,76628,76629],{"class":74},"'Java'",[30,76631,75893],{"class":321},[30,76633,75517],{"class":379},[30,76635,76636],{"class":32,"line":131},[30,76637,76638],{"class":379},"    \u002F\u002F 不区分大小写、\n",[30,76640,76641,76643,76645,76647,76649,76651,76653,76655,76657,76659,76661,76663,76665,76667,76669],{"class":32,"line":142},[30,76642,73891],{"class":321},[30,76644,58385],{"class":36},[30,76646,322],{"class":321},[30,76648,904],{"class":74},[30,76650,1286],{"class":317},[30,76652,76585],{"class":48115},[30,76654,622],{"class":317},[30,76656,904],{"class":74},[30,76658,761],{"class":317},[30,76660,878],{"class":321},[30,76662,75383],{"class":36},[30,76664,322],{"class":321},[30,76666,76629],{"class":74},[30,76668,75893],{"class":321},[30,76670,75394],{"class":379},[30,76672,76673,76675,76677,76679],{"class":32,"line":1811},[30,76674,11403],{"class":317},[30,76676,74057],{"class":40},[30,76678,13746],{"class":317},[30,76680,76681],{"class":74}," 'java是一门编程语言，学完java工资很高'\n",[30,76683,76684,76686,76689,76691,76694,76697,76699,76701,76703,76705,76708,76710,76713],{"class":32,"line":1825},[30,76685,11403],{"class":317},[30,76687,76688],{"class":40}," result",[30,76690,13746],{"class":317},[30,76692,76693],{"class":321}," str.",[30,76695,76696],{"class":36},"replace",[30,76698,322],{"class":321},[30,76700,904],{"class":74},[30,76702,76585],{"class":48115},[30,76704,904],{"class":74},[30,76706,76707],{"class":317},"ig",[30,76709,12617],{"class":321},[30,76711,76712],{"class":74},"'前端'",[30,76714,328],{"class":321},[30,76716,76717,76719,76721],{"class":32,"line":1830},[30,76718,73891],{"class":321},[30,76720,58385],{"class":36},[30,76722,76723],{"class":321},"(result)\n",[30,76725,76726,76728,76730],{"class":32,"line":1836},[30,76727,52555],{"class":321},[30,76729,51951],{"class":51438},[30,76731,51445],{"class":321},[30,76733,76734,76736,76738],{"class":32,"line":1857},[30,76735,51923],{"class":321},[30,76737,51938],{"class":51438},[30,76739,51445],{"class":321},[30,76741,76742,76744,76746],{"class":32,"line":1862},[30,76743,51923],{"class":321},[30,76745,50773],{"class":51438},[30,76747,51445],{"class":321},[234,76749,76750],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}",{"title":25,"searchDepth":44,"depth":44,"links":76752},[76753,76763,76775,76792,76799,76807],{"id":53498,"depth":44,"text":53499,"children":76754},[76755,76756,76757,76758,76759,76760,76761,76762],{"id":53502,"depth":52,"text":53503},{"id":53535,"depth":52,"text":53536},{"id":53574,"depth":52,"text":53575},{"id":53732,"depth":52,"text":53733},{"id":53780,"depth":52,"text":53781},{"id":53917,"depth":52,"text":53918},{"id":54239,"depth":52,"text":54240},{"id":57227,"depth":52,"text":57228},{"id":57255,"depth":44,"text":57256,"children":76764},[76765,76766,76767,76768,76769,76770,76771,76772,76773,76774],{"id":57259,"depth":52,"text":57260},{"id":57282,"depth":52,"text":57283},{"id":58197,"depth":52,"text":58198},{"id":58887,"depth":52,"text":58888},{"id":59169,"depth":52,"text":59170},{"id":63330,"depth":52,"text":63331},{"id":63500,"depth":52,"text":63501},{"id":63628,"depth":52,"text":63629},{"id":63653,"depth":52,"text":63654},{"id":65042,"depth":52,"text":65043},{"id":66195,"depth":44,"text":66196,"children":76776},[76777,76778,76779,76780,76781,76782,76783,76784,76785,76786,76787,76788,76789,76790,76791],{"id":66199,"depth":52,"text":66200},{"id":66853,"depth":52,"text":66854},{"id":68548,"depth":52,"text":68549},{"id":68589,"depth":52,"text":68590},{"id":68631,"depth":52,"text":68632},{"id":68645,"depth":52,"text":68646},{"id":68694,"depth":52,"text":68695},{"id":68706,"depth":52,"text":68707},{"id":68721,"depth":52,"text":68722},{"id":68757,"depth":52,"text":68758},{"id":68838,"depth":52,"text":68839},{"id":68966,"depth":52,"text":68967},{"id":68978,"depth":52,"text":68979},{"id":68997,"depth":52,"text":68998},{"id":71108,"depth":52,"text":71109},{"id":71127,"depth":44,"text":71128,"children":76793},[76794,76795,76796,76797,76798],{"id":71148,"depth":52,"text":71149},{"id":71168,"depth":52,"text":71169},{"id":71217,"depth":52,"text":71218},{"id":71342,"depth":52,"text":71343},{"id":71523,"depth":52,"text":71524},{"id":71541,"depth":44,"text":71542,"children":76800},[76801,76802,76803,76804,76805,76806],{"id":71556,"depth":52,"text":71557},{"id":71615,"depth":52,"text":71616},{"id":71639,"depth":52,"text":71640},{"id":71959,"depth":52,"text":71960},{"id":71991,"depth":52,"text":71992},{"id":72014,"depth":52,"text":72015},{"id":75082,"depth":44,"text":75083,"children":76808},[76809,76810],{"id":75116,"depth":52,"text":75117},{"id":75155,"depth":52,"text":75156},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53470,"description":242},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76817,"title":76818,"body":76819,"description":242,"extension":243,"meta":92956,"navigation":245,"path":92957,"seo":92958,"stem":92959,"__hash__":92960},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76820,"toc":92892},[76821,76824,76827,76831,76835,76840,76845,76856,76860,76865,76868,76872,76875,76880,76884,76888,76891,76896,76899,76903,76906,76914,76917,76921,76926,76931,76934,76938,76943,76948,76951,76955,76960,76963,76968,76971,76976,76979,76984,76989,76992,76995,76999,77004,77009,77012,77016,77020,77023,77026,77029,77033,77037,77042,77047,77050,77054,77059,77064,77067,77070,77073,77076,77079,77082,77085,77088,77091,77096,77100,77105,77110,77113,77116,77119,77122,77125,77128,77131,77134,77138,77142,77145,77148,77151,77156,77158,77161,77164,77167,77170,77173,77176,77179,77182,77185,77188,77191,77194,77197,77202,77207,77212,77215,77219,77222,77227,77231,77233,77244,77249,77350,77353,77356,77359,77362,77365,77368,77371,77374,77376,77379,77382,77385,77388,77391,77393,77396,77399,77402,77405,77408,77411,77413,77416,77418,77420,77423,77427,77431,77434,77437,77440,77443,77446,77449,77452,77455,77458,77463,77583,77586,77589,77594,77597,77600,77603,77606,77611,77614,77617,77620,77623,77628,77631,77731,77796,77870,77874,77877,77880,77884,77887,77901,77930,77933,77936,77939,77942,77945,77948,77951,77953,77956,77959,77962,77965,77969,77974,77978,77983,78058,78061,78244,78247,78250,78253,78256,78259,78261,78264,78267,78270,78273,78276,78279,78281,78285,78288,78293,78296,78299,78302,78305,78307,78312,78315,78318,78321,78324,78326,78331,78334,78337,78339,78341,78344,78348,78351,78354,78359,78362,78365,78368,78418,78423,78427,78432,78435,78504,78507,78516,78520,78525,78528,78531,78539,78542,78559,80361,80365,80369,80374,80377,80381,80387,80393,80545,80550,80555,80558,80561,80564,80567,80570,80573,80576,80579,80582,80585,80588,80591,80596,80600,80603,80614,80618,80623,80626,80629,80632,80635,80638,80640,80643,80646,80649,80652,80654,80671,80674,80678,80681,80686,80691,80694,80697,80701,80704,80707,80716,80719,80723,80726,80731,80736,80803,80807,80810,80813,80818,80823,80909,80914,80918,80921,80924,80939,80942,80947,80951,80956,81065,81068,81079,81229,81233,81238,81347,81351,81356,81361,81366,81369,81376,81396,81432,81596,81601,81604,81609,81616,81619,81622,81625,81684,81740,81796,81800,81805,82120,82123,82127,82130,82135,82244,82249,82253,82258,82262,82333,82337,82339,82342,82345,82383,82659,82663,82680,82746,82780,82784,82787,82792,82821,82828,82837,82842,82857,82862,82871,82874,83011,83015,83077,83081,83086,83331,83335,83340,83343,83346,83349,83352,83356,83361,84942,84946,84950,84956,84959,84964,84968,84971,84976,84979,84990,84994,84999,85003,85008,85013,85016,85021,85025,85029,85032,85037,85042,85045,85048,85051,85173,85178,85280,85283,85286,85290,85295,85467,85472,85476,85479,85484,85550,85555,85558,85689,85692,85697,85700,85703,85794,85799,85802,85805,85808,85811,85816,85821,85824,85829,85834,85839,85843,85846,85849,85854,85859,85864,85869,85923,85926,85929,85934,85937,85940,85945,85950,85955,85959,85964,85978,85983,85986,85991,85995,86000,86005,86010,86015,86020,86025,86030,86035,86038,86042,86047,86050,86053,86056,86061,86066,86069,86072,86076,86079,86082,86087,86092,86097,86102,86105,86110,86115,86176,86181,86184,86189,87430,87435,87439,87443,87448,87451,87456,87461,87464,87469,87471,87476,87480,87483,87486,87497,87501,87506,87511,87566,87571,87576,87581,87792,87797,87801,87806,87809,87811,87814,87817,88264,88269,88276,88282,88285,88288,88552,88557,88561,88826,88831,88835,88840,88845,88850,88855,89186,89189,89194,89199,89202,89206,89210,89215,89220,89225,89230,89235,89240,89244,89247,89252,89257,89260,89334,89339,89344,89349,89351,89354,89724,89729,89734,89739,89742,89745,89847,89852,89857,89960,89964,89969,89973,89977,89982,89987,89990,89995,89998,90001,90394,90399,90402,90405,90408,90411,90931,90935,90940,90945,90950,90953,90958,90961,90964,91346,91351,91353,91355,91358,91361,91873,91877,91938,91941,91944,91947,91951,91954,91959,91964,92889],[10,76822,76818],{"id":76823},"_4js进阶",[157,76825,76826],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[15,76828,76830],{"id":76829},"_41-作用域","4.1 作用域",[287,76832,76834],{"id":76833},"_411-局部作用域","4.1.1 局部作用域",[157,76836,76837],{},[160,76838],{"alt":25,"src":76839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[157,76841,76842],{},[160,76843],{"alt":25,"src":76844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[147,76846,76847,76850,76853],{},[150,76848,76849],{},"函数作用域在函数内部",[150,76851,76852],{},"块级作用域在{}",[150,76854,76855],{},"对象的那个{}不是作用域，不是块作用域",[287,76857,76859],{"id":76858},"_412-全局作用域","4.1.2 全局作用域",[157,76861,76862],{},[160,76863],{"alt":25,"src":76864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[157,76866,76867],{},"window.a=10不要这样写",[287,76869,76871],{"id":76870},"_413-作用域链","4.1.3 作用域链",[157,76873,76874],{},"变量查找机制",[157,76876,76877],{},[160,76878],{"alt":25,"src":76879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[15,76881,76883],{"id":76882},"_42-垃圾回收机制","4.2 垃圾回收机制",[287,76885,76887],{"id":76886},"_421-大体介绍","4.2.1 大体介绍",[157,76889,76890],{},"垃圾回收机制(Garbage Collection) 简称 GC",[157,76892,76893],{},[160,76894],{"alt":25,"src":76895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[157,76897,76898],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[287,76900,76902],{"id":76901},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[157,76904,76905],{},"堆栈空间分配区别：",[271,76907,76908,76911],{},[150,76909,76910],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[150,76912,76913],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[157,76915,76916],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22180,76918,76920],{"id":76919},"_4221-引用计数","4.2.2.1 引用计数",[157,76922,76923],{},[160,76924],{"alt":25,"src":76925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[157,76927,76928],{},[160,76929],{"alt":25,"src":76930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[157,76932,76933],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22180,76935,76937],{"id":76936},"_4222-标记清除法","4.2.2.2 标记清除法",[157,76939,76940],{},[160,76941],{"alt":25,"src":76942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[157,76944,76945],{},[160,76946],{"alt":25,"src":76947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[157,76949,76950],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[15,76952,76954],{"id":76953},"_43-闭包","4.3 闭包",[157,76956,76957],{},[160,76958],{"alt":25,"src":76959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[157,76961,76962],{},"闭包：内层函数+外层函数的变量",[157,76964,76965],{},[160,76966],{"alt":25,"src":76967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[157,76969,76970],{},"closure就是闭包",[157,76972,76973],{},[160,76974],{"alt":25,"src":76975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[157,76977,76978],{},"内层函数必须包含外层函数的变量才是闭包",[157,76980,76981],{},[160,76982],{"alt":25,"src":76983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[157,76985,76986],{},[160,76987],{"alt":25,"src":76988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[157,76990,76991],{},"闭包可能会引起内存泄漏",[157,76993,76994],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[15,76996,76998],{"id":76997},"_44-变量提升","4.4 变量提升",[157,77000,77001],{},[160,77002],{"alt":25,"src":77003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[157,77005,77006],{},[160,77007],{"alt":25,"src":77008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[157,77010,77011],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[15,77013,77015],{"id":77014},"_45-函数进阶","4.5 函数进阶",[287,77017,77019],{"id":77018},"_451-函数提升","4.5.1 函数提升",[157,77021,77022],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[157,77024,77025],{},"只提升函数声明，不提升函数调用",[51951,77027,77028],{},"\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",[287,77030,77032],{"id":77031},"_452-函数参数","4.5.2 函数参数",[22180,77034,77036],{"id":77035},"_4521-动态参数","4.5.2.1 动态参数",[157,77038,77039],{},[160,77040],{"alt":25,"src":77041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[157,77043,77044],{},[160,77045],{"alt":25,"src":77046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[157,77048,77049],{},"箭头函数里边没有arguments",[22180,77051,77053],{"id":77052},"_4522-剩余参数","4.5.2.2 剩余参数",[157,77055,77056],{},[160,77057],{"alt":25,"src":77058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[157,77060,77061],{},[160,77062],{"alt":25,"src":77063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[157,77065,77066],{},"剩余参数使用的时候不需要写...",[157,77068,77069],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[157,77071,77072],{},"  function getSum(a,b,...arr) {",[157,77074,77075],{},"  console.log(11)",[157,77077,77078],{},"  }",[157,77080,77081],{},"  getSum(1,2,3,4)",[157,77083,77084],{},"  将1传给a，2传给b，剩下的传给剩余参数",[157,77086,77087],{},"  getSum(1,2)",[157,77089,77090],{},"  将1传给a，2传给b，剩余参数为一个空数组",[157,77092,77093],{},[160,77094],{"alt":25,"src":77095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22180,77097,77099],{"id":77098},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[157,77101,77102],{},[160,77103],{"alt":25,"src":77104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[157,77106,77107],{},[160,77108],{"alt":25,"src":77109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[157,77111,77112],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[157,77114,77115],{},"展开运算符可以用于数组之间的合并：",[157,77117,77118],{},"const arr1 = [1, 2, 3]",[157,77120,77121],{},"const arr2 = [3, 4, 5]",[157,77123,77124],{},"const arr = [...arr1, ...arr2]",[157,77126,77127],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[157,77129,77130],{},"剩余参数：函数参数使用，得到真数组",[157,77132,77133],{},"展开运算符：数组中使用，数组展开",[287,77135,77137],{"id":77136},"_453-箭头函数","4.5.3 箭头函数",[22180,77139,77141],{"id":77140},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[157,77143,77144],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[157,77146,77147],{},"它不是万能的！！！",[157,77149,77150],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[157,77152,77153],{},[160,77154],{"alt":25,"src":77155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[157,77157,351],{},[157,77159,77160],{},"① 只有一个形参的时候，可以省略小括号：",[157,77162,77163],{},"const fn=x=>{console.log(x)}",[157,77165,77166],{},"② 只有一行代码时可以省略大括号：",[157,77168,77169],{},"const fn=x=>console.log(11)",[157,77171,77172],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[157,77174,77175],{},"const fn=x=>x+x",[157,77177,77178],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[157,77180,77181],{},"⑤ 阻止表单默认提交：",[157,77183,77184],{},"const form = document.querySelector('form')",[157,77186,77187],{},"form.addEventListener('click', ev => ev.preventDefault())",[157,77189,77190],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[157,77192,77193],{},"const fn=uname=>({uname:uname})",[157,77195,77196],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[157,77198,77199],{},[160,77200],{"alt":25,"src":77201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[157,77203,77204],{},[160,77205],{"alt":25,"src":77206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[157,77208,77209],{},[160,77210],{"alt":25,"src":77211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[157,77213,77214],{},"一定不要忘记用()，有()就理解为自带return",[22180,77216,77218],{"id":77217},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[157,77220,77221],{},"箭头函数是没有动态参数的arguments",[157,77223,77224],{},[160,77225],{"alt":25,"src":77226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22180,77228,77230],{"id":77229},"_4533-箭头函数this","4.5.3.3 箭头函数this",[157,77232,11514],{},[271,77234,77235,77238,77241],{},[150,77236,77237],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[150,77239,77240],{},"事件回调函数使用箭头函数时，this 为全局的 window",[150,77242,77243],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[157,77245,77246],{},[160,77247],{"alt":25,"src":77248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[20,77250,77252],{"className":53205,"code":77251,"language":53207,"meta":25,"style":25},"  \u003Cscript>\n    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n    console.log(this) \u002F\u002F指向window\n    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n    function fn() {\n      console.log(this)  \u002F\u002F指向window\n    }\n    window.fn()\u002F\u002F实际写法，调用时可以省略window\n\n    const obj = {\n      name: 'andy',\n      sayHai: function () {\n        console.log(this)\n      }\n    }\n    obj.sayHai() \u002F\u002Fthis指向obj\n    \u002F\u002F 2.箭头函数的this\n    const fn = () => console.log(this)\n  \u003C\u002Fscript>\n",[27,77253,77254,77262,77267,77272,77277,77282,77287,77291,77296,77300,77304,77309,77314,77319,77323,77327,77332,77337,77342],{"__ignoreMap":25},[30,77255,77256,77258,77260],{"class":32,"line":33},[30,77257,52282],{"class":321},[30,77259,51951],{"class":51438},[30,77261,51445],{"class":321},[30,77263,77264],{"class":32,"line":44},[30,77265,77266],{"class":321},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[30,77268,77269],{"class":32,"line":52},[30,77270,77271],{"class":321},"    console.log(this) \u002F\u002F指向window\n",[30,77273,77274],{"class":32,"line":60},[30,77275,77276],{"class":321},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[30,77278,77279],{"class":32,"line":68},[30,77280,77281],{"class":321},"    function fn() {\n",[30,77283,77284],{"class":32,"line":80},[30,77285,77286],{"class":321},"      console.log(this)  \u002F\u002F指向window\n",[30,77288,77289],{"class":32,"line":88},[30,77290,2369],{"class":321},[30,77292,77293],{"class":32,"line":96},[30,77294,77295],{"class":321},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[30,77297,77298],{"class":32,"line":104},[30,77299,2582],{"emptyLinePlaceholder":245},[30,77301,77302],{"class":32,"line":112},[30,77303,71661],{"class":321},[30,77305,77306],{"class":32,"line":123},[30,77307,77308],{"class":321},"      name: 'andy',\n",[30,77310,77311],{"class":32,"line":131},[30,77312,77313],{"class":321},"      sayHai: function () {\n",[30,77315,77316],{"class":32,"line":142},[30,77317,77318],{"class":321},"        console.log(this)\n",[30,77320,77321],{"class":32,"line":1811},[30,77322,52536],{"class":321},[30,77324,77325],{"class":32,"line":1825},[30,77326,2369],{"class":321},[30,77328,77329],{"class":32,"line":1830},[30,77330,77331],{"class":321},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[30,77333,77334],{"class":32,"line":1836},[30,77335,77336],{"class":321},"    \u002F\u002F 2.箭头函数的this\n",[30,77338,77339],{"class":32,"line":1857},[30,77340,77341],{"class":321},"    const fn = () => console.log(this)\n",[30,77343,77344,77346,77348],{"class":32,"line":1862},[30,77345,52555],{"class":321},[30,77347,51951],{"class":51438},[30,77349,51445],{"class":321},[157,77351,77352],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[157,77354,77355],{},"const fn = () => console.log(this)",[157,77357,77358],{},"fn() \u002F\u002F指向window",[157,77360,77361],{},"\u002F\u002F 3.对象方法箭头函数 this",[157,77363,77364],{},"①",[157,77366,77367],{},"const obj = {",[157,77369,77370],{},"uname: 'pink老师',",[157,77372,77373],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[157,77375,1266],{},[157,77377,77378],{},"调用对象里边的函数",[157,77380,77381],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[157,77383,77384],{},"obj.sayHai()",[157,77386,77387],{},"②",[157,77389,77390],{},"const obj1 = {",[157,77392,77370],{},[157,77394,77395],{},"sayHai: function () {",[157,77397,77398],{},"let i = 10",[157,77400,77401],{},"const count = () => {",[157,77403,77404],{},"console.log(this)",[157,77406,77407],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[157,77409,77410],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[157,77412,1266],{},[157,77414,77415],{},"count()",[157,77417,1266],{},[157,77419,1266],{},[157,77421,77422],{},"obj1.sayHai()",[15,77424,77426],{"id":77425},"_46-解构赋值","4.6 解构赋值",[287,77428,77430],{"id":77429},"_461-数组解构","4.6.1 数组解构",[157,77432,77433],{},"以前要是使用数组中的值的话：",[157,77435,77436],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[157,77438,77439],{},"const arr=[100,60,80]",[157,77441,77442],{},"const max=arr[0]",[157,77444,77445],{},"const min=arr[1]",[157,77447,77448],{},"const avg=arr[2]",[157,77450,77451],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[157,77453,77454],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[157,77456,77457],{},"这个写法就类似于上边的那种用很多const的方法",[157,77459,77460],{},[160,77461],{"alt":25,"src":77462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[20,77464,77466],{"className":50771,"code":77465,"language":50773,"meta":25,"style":25},"①变量之间交换值:\nlet a=1\nlet b=2;\n必须加这行代码，不然就会报错\n[b,a]=[a,b]\n\n\n可以写成下面的方式：\nlet a=1\nlet b=2\n;[b,a]=[a,b]\n\n②排序\nconst arr1 = [2, 6, 4, 3, 5, 1]\nfor (let i = 0; i \u003C arr1.length; i++) {\n   for (let j = 0; j \u003C arr1.length - 1; j++) {\n      if (arr1[j] > arr1[j + 1]) {\n         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n       }\n   }\n}\nconsole.log(arr1)\n",[27,77467,77468,77473,77478,77483,77488,77493,77497,77501,77506,77510,77515,77520,77524,77529,77534,77545,77555,77560,77565,77570,77574,77578],{"__ignoreMap":25},[30,77469,77470],{"class":32,"line":33},[30,77471,77472],{"class":321},"①变量之间交换值:\n",[30,77474,77475],{"class":32,"line":44},[30,77476,77477],{"class":321},"let a=1\n",[30,77479,77480],{"class":32,"line":52},[30,77481,77482],{"class":321},"let b=2;\n",[30,77484,77485],{"class":32,"line":60},[30,77486,77487],{"class":321},"必须加这行代码，不然就会报错\n",[30,77489,77490],{"class":32,"line":68},[30,77491,77492],{"class":321},"[b,a]=[a,b]\n",[30,77494,77495],{"class":32,"line":80},[30,77496,2582],{"emptyLinePlaceholder":245},[30,77498,77499],{"class":32,"line":88},[30,77500,2582],{"emptyLinePlaceholder":245},[30,77502,77503],{"class":32,"line":96},[30,77504,77505],{"class":321},"可以写成下面的方式：\n",[30,77507,77508],{"class":32,"line":104},[30,77509,77477],{"class":321},[30,77511,77512],{"class":32,"line":112},[30,77513,77514],{"class":321},"let b=2\n",[30,77516,77517],{"class":32,"line":123},[30,77518,77519],{"class":321},";[b,a]=[a,b]\n",[30,77521,77522],{"class":32,"line":131},[30,77523,2582],{"emptyLinePlaceholder":245},[30,77525,77526],{"class":32,"line":142},[30,77527,77528],{"class":321},"②排序\n",[30,77530,77531],{"class":32,"line":1811},[30,77532,77533],{"class":321},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[30,77535,77536,77539,77542],{"class":32,"line":1825},[30,77537,77538],{"class":321},"for (let i = 0; i ",[30,77540,1230],{"class":77541},"s7hpK",[30,77543,77544],{"class":321}," arr1.length; i++) {\n",[30,77546,77547,77550,77552],{"class":32,"line":1830},[30,77548,77549],{"class":321},"   for (let j = 0; j ",[30,77551,1230],{"class":77541},[30,77553,77554],{"class":321}," arr1.length - 1; j++) {\n",[30,77556,77557],{"class":32,"line":1836},[30,77558,77559],{"class":321},"      if (arr1[j] > arr1[j + 1]) {\n",[30,77561,77562],{"class":32,"line":1857},[30,77563,77564],{"class":321},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[30,77566,77567],{"class":32,"line":1862},[30,77568,77569],{"class":321},"       }\n",[30,77571,77572],{"class":32,"line":1876},[30,77573,4491],{"class":321},[30,77575,77576],{"class":32,"line":1881},[30,77577,1751],{"class":321},[30,77579,77580],{"class":32,"line":1910},[30,77581,77582],{"class":321},"console.log(arr1)\n",[157,77584,77585],{},"数组解构的细节：",[157,77587,77588],{},"①变量多，单元值少",[157,77590,77591],{},[160,77592],{"alt":25,"src":77593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[157,77595,77596],{},"防止出现undefined的方法：",[157,77598,77599],{},"const [a=0,b=0] =[1]",[157,77601,77602],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[157,77604,77605],{},"②变量少，单元值多",[157,77607,77608],{},[160,77609],{"alt":25,"src":77610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[157,77612,77613],{},"此时可以使用剩余参数来接收多余的值",[157,77615,77616],{},"const [a,b,...c]=[1,2,3,4]",[157,77618,77619],{},"console.log(c) 输出[3,4]",[157,77621,77622],{},"③可以按需导入，忽略某些返回值",[157,77624,77625],{},[160,77626],{"alt":25,"src":77627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[157,77629,77630],{},"④支持多维数组的结构",[20,77632,77636],{"className":77633,"code":77634,"language":77635,"meta":25,"style":25},"language-cpp shiki shiki-themes github-light github-dark","const arr = [1, 2, [3, 4]]\nconsole.log(arr[0])  \u002F\u002F1\nconsole.log(arr[1])  \u002F\u002F2\nconsole.log(arr[2])  \u002F\u002F[3,4]\nconsole.log(arr[2][0])  \u002F\u002F3\n","cpp",[27,77637,77638,77666,77682,77697,77712],{"__ignoreMap":25},[30,77639,77640,77642,77644,77646,77648,77650,77652,77654,77657,77659,77661,77663],{"class":32,"line":33},[30,77641,6974],{"class":317},[30,77643,51971],{"class":321},[30,77645,367],{"class":317},[30,77647,52364],{"class":321},[30,77649,537],{"class":40},[30,77651,12617],{"class":321},[30,77653,398],{"class":40},[30,77655,77656],{"class":321},", [",[30,77658,392],{"class":40},[30,77660,12617],{"class":321},[30,77662,613],{"class":40},[30,77664,77665],{"class":321},"]]\n",[30,77667,77668,77671,77673,77675,77677,77679],{"class":32,"line":44},[30,77669,77670],{"class":321},"console.",[30,77672,58385],{"class":36},[30,77674,4033],{"class":321},[30,77676,511],{"class":40},[30,77678,4398],{"class":321},[30,77680,77681],{"class":379},"  \u002F\u002F1\n",[30,77683,77684,77686,77688,77690,77692,77694],{"class":32,"line":52},[30,77685,77670],{"class":321},[30,77687,58385],{"class":36},[30,77689,4033],{"class":321},[30,77691,537],{"class":40},[30,77693,4398],{"class":321},[30,77695,77696],{"class":379},"  \u002F\u002F2\n",[30,77698,77699,77701,77703,77705,77707,77709],{"class":32,"line":60},[30,77700,77670],{"class":321},[30,77702,58385],{"class":36},[30,77704,4033],{"class":321},[30,77706,398],{"class":40},[30,77708,4398],{"class":321},[30,77710,77711],{"class":379},"  \u002F\u002F[3,4]\n",[30,77713,77714,77716,77718,77720,77722,77724,77726,77728],{"class":32,"line":68},[30,77715,77670],{"class":321},[30,77717,58385],{"class":36},[30,77719,4033],{"class":321},[30,77721,398],{"class":40},[30,77723,5083],{"class":321},[30,77725,511],{"class":40},[30,77727,4398],{"class":321},[30,77729,77730],{"class":379},"  \u002F\u002F3\n",[20,77732,77734],{"className":77633,"code":77733,"language":77635,"meta":25,"style":25},"const [a, b, c] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F[3,4]\n",[27,77735,77736,77763,77774,77785],{"__ignoreMap":25},[30,77737,77738,77740,77743,77745,77747,77749,77751,77753,77755,77757,77759,77761],{"class":32,"line":33},[30,77739,6974],{"class":317},[30,77741,77742],{"class":321}," [a, b, c] ",[30,77744,367],{"class":317},[30,77746,52364],{"class":321},[30,77748,537],{"class":40},[30,77750,12617],{"class":321},[30,77752,398],{"class":40},[30,77754,77656],{"class":321},[30,77756,392],{"class":40},[30,77758,12617],{"class":321},[30,77760,613],{"class":40},[30,77762,77665],{"class":321},[30,77764,77765,77767,77769,77772],{"class":32,"line":44},[30,77766,77670],{"class":321},[30,77768,58385],{"class":36},[30,77770,77771],{"class":321},"(a)",[30,77773,77681],{"class":379},[30,77775,77776,77778,77780,77783],{"class":32,"line":52},[30,77777,77670],{"class":321},[30,77779,58385],{"class":36},[30,77781,77782],{"class":321},"(b)",[30,77784,77696],{"class":379},[30,77786,77787,77789,77791,77794],{"class":32,"line":60},[30,77788,77670],{"class":321},[30,77790,58385],{"class":36},[30,77792,77793],{"class":321},"(c)",[30,77795,77711],{"class":379},[20,77797,77799],{"className":77633,"code":77798,"language":77635,"meta":25,"style":25},"const [a, b, [c, d]] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F3\nconsole.log(d)  \u002F\u002F4\n",[27,77800,77801,77828,77838,77848,77858],{"__ignoreMap":25},[30,77802,77803,77805,77808,77810,77812,77814,77816,77818,77820,77822,77824,77826],{"class":32,"line":33},[30,77804,6974],{"class":317},[30,77806,77807],{"class":321}," [a, b, [c, d]] ",[30,77809,367],{"class":317},[30,77811,52364],{"class":321},[30,77813,537],{"class":40},[30,77815,12617],{"class":321},[30,77817,398],{"class":40},[30,77819,77656],{"class":321},[30,77821,392],{"class":40},[30,77823,12617],{"class":321},[30,77825,613],{"class":40},[30,77827,77665],{"class":321},[30,77829,77830,77832,77834,77836],{"class":32,"line":44},[30,77831,77670],{"class":321},[30,77833,58385],{"class":36},[30,77835,77771],{"class":321},[30,77837,77681],{"class":379},[30,77839,77840,77842,77844,77846],{"class":32,"line":52},[30,77841,77670],{"class":321},[30,77843,58385],{"class":36},[30,77845,77782],{"class":321},[30,77847,77696],{"class":379},[30,77849,77850,77852,77854,77856],{"class":32,"line":60},[30,77851,77670],{"class":321},[30,77853,58385],{"class":36},[30,77855,77793],{"class":321},[30,77857,77730],{"class":379},[30,77859,77860,77862,77864,77867],{"class":32,"line":68},[30,77861,77670],{"class":321},[30,77863,58385],{"class":36},[30,77865,77866],{"class":321},"(d)",[30,77868,77869],{"class":379},"  \u002F\u002F4\n",[287,77871,77873],{"id":77872},"_462-对象解构","4.6.2 对象解构",[157,77875,77876],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[157,77878,77879],{},"用的非常非常多！！！！！！",[22180,77881,77883],{"id":77882},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[157,77885,77886],{},"基本语法：",[271,77888,77889,77892,77895,77898],{},[150,77890,77891],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[150,77893,77894],{},"对象属性的值将被赋值给与属性名相同的变量",[150,77896,77897],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[150,77899,77900],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[20,77902,77904],{"className":50771,"code":77903,"language":50773,"meta":25,"style":25},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[27,77905,77906,77911,77916,77921,77925],{"__ignoreMap":25},[30,77907,77908],{"class":32,"line":33},[30,77909,77910],{"class":321},"const obj = {\n",[30,77912,77913],{"class":32,"line":44},[30,77914,77915],{"class":321},"   uname: 'pink老师',\n",[30,77917,77918],{"class":32,"line":52},[30,77919,77920],{"class":321},"   age: 18,\n",[30,77922,77923],{"class":32,"line":60},[30,77924,1751],{"class":321},[30,77926,77927],{"class":32,"line":68},[30,77928,77929],{"class":321},"const { uname, age } = obj\n",[157,77931,77932],{},"上方代码这样写等价于：",[157,77934,77935],{},"const uname等价于obj.uname",[157,77937,77938],{},"变量名可以重新改名：",[157,77940,77941],{},"const uname='red老师'",[157,77943,77944],{},"const user={",[157,77946,77947],{},"  uname:'pink老师',",[157,77949,77950],{},"  age:18",[157,77952,1266],{},[157,77954,77955],{},"const {uname,age}=user",[157,77957,77958],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[157,77960,77961],{},"const {旧变量名：新变量名}=对象",[157,77963,77964],{},"const {uname:username,age}=user",[22180,77966,77968],{"id":77967},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[157,77970,77971],{},[160,77972],{"alt":25,"src":77973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22180,77975,77977],{"id":77976},"_4623-多级对象解构","4.6.2.3 多级对象解构",[157,77979,77980],{},[160,77981],{"alt":25,"src":77982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[20,77984,77986],{"className":53205,"code":77985,"language":53207,"meta":25,"style":25},"  \u003Cscript>\n    const pig = {\n      name: '佩奇',\n      family: {\n        mother: '猪妈妈',\n        father: '猪爸爸',\n        sister: '乔治'\n      },\n      age: 6\n    }\n    \u002F\u002F 多级对象解构\n    const { name, family: { mother, father, sister }, age } = pig\n  \u003C\u002Fscript>\n",[27,77987,77988,77996,78001,78006,78011,78016,78021,78026,78031,78036,78040,78045,78050],{"__ignoreMap":25},[30,77989,77990,77992,77994],{"class":32,"line":33},[30,77991,52282],{"class":321},[30,77993,51951],{"class":51438},[30,77995,51445],{"class":321},[30,77997,77998],{"class":32,"line":44},[30,77999,78000],{"class":321},"    const pig = {\n",[30,78002,78003],{"class":32,"line":52},[30,78004,78005],{"class":321},"      name: '佩奇',\n",[30,78007,78008],{"class":32,"line":60},[30,78009,78010],{"class":321},"      family: {\n",[30,78012,78013],{"class":32,"line":68},[30,78014,78015],{"class":321},"        mother: '猪妈妈',\n",[30,78017,78018],{"class":32,"line":80},[30,78019,78020],{"class":321},"        father: '猪爸爸',\n",[30,78022,78023],{"class":32,"line":88},[30,78024,78025],{"class":321},"        sister: '乔治'\n",[30,78027,78028],{"class":32,"line":96},[30,78029,78030],{"class":321},"      },\n",[30,78032,78033],{"class":32,"line":104},[30,78034,78035],{"class":321},"      age: 6\n",[30,78037,78038],{"class":32,"line":112},[30,78039,2369],{"class":321},[30,78041,78042],{"class":32,"line":123},[30,78043,78044],{"class":321},"    \u002F\u002F 多级对象解构\n",[30,78046,78047],{"class":32,"line":131},[30,78048,78049],{"class":321},"    const { name, family: { mother, father, sister }, age } = pig\n",[30,78051,78052,78054,78056],{"class":32,"line":142},[30,78053,52555],{"class":321},[30,78055,51951],{"class":51438},[30,78057,51445],{"class":321},[157,78059,78060],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[20,78062,78065],{"className":78063,"code":78064,"language":76585,"meta":25,"style":25},"language-java shiki shiki-themes github-light github-dark","    \u002F\u002F 这是后台传递过来的数据\n    const msg = {\n      \"code\": 200,\n      \"msg\": \"获取新闻列表成功\",\n      \"data\": [\n        {\n          \"id\": 1,\n          \"title\": \"5G商用自己，三大运用商收入下降\",\n          \"count\": 58\n        },\n        {\n          \"id\": 2,\n          \"title\": \"国际媒体头条速览\",\n          \"count\": 56\n        },\n        {\n          \"id\": 3,\n          \"title\": \"乌克兰和俄罗斯持续冲突\",\n          \"count\": 1669\n        },\n      ]\n    }\n",[27,78066,78067,78072,78083,78095,78107,78116,78120,78131,78143,78153,78158,78162,78172,78183,78192,78196,78200,78211,78222,78231,78235,78240],{"__ignoreMap":25},[30,78068,78069],{"class":32,"line":33},[30,78070,78071],{"class":379},"    \u002F\u002F 这是后台传递过来的数据\n",[30,78073,78074,78076,78079,78081],{"class":32,"line":44},[30,78075,11403],{"class":317},[30,78077,78078],{"class":321}," msg ",[30,78080,367],{"class":317},[30,78082,15754],{"class":321},[30,78084,78085,78088,78090,78093],{"class":32,"line":52},[30,78086,78087],{"class":74},"      \"code\"",[30,78089,1179],{"class":317},[30,78091,78092],{"class":40}," 200",[30,78094,31604],{"class":321},[30,78096,78097,78100,78102,78105],{"class":32,"line":60},[30,78098,78099],{"class":74},"      \"msg\"",[30,78101,1179],{"class":317},[30,78103,78104],{"class":74}," \"获取新闻列表成功\"",[30,78106,31604],{"class":321},[30,78108,78109,78112,78114],{"class":32,"line":68},[30,78110,78111],{"class":74},"      \"data\"",[30,78113,1179],{"class":317},[30,78115,55585],{"class":321},[30,78117,78118],{"class":32,"line":80},[30,78119,2692],{"class":321},[30,78121,78122,78125,78127,78129],{"class":32,"line":88},[30,78123,78124],{"class":74},"          \"id\"",[30,78126,1179],{"class":317},[30,78128,25291],{"class":40},[30,78130,31604],{"class":321},[30,78132,78133,78136,78138,78141],{"class":32,"line":96},[30,78134,78135],{"class":74},"          \"title\"",[30,78137,1179],{"class":317},[30,78139,78140],{"class":74}," \"5G商用自己，三大运用商收入下降\"",[30,78142,31604],{"class":321},[30,78144,78145,78148,78150],{"class":32,"line":104},[30,78146,78147],{"class":74},"          \"count\"",[30,78149,1179],{"class":317},[30,78151,78152],{"class":40}," 58\n",[30,78154,78155],{"class":32,"line":112},[30,78156,78157],{"class":321},"        },\n",[30,78159,78160],{"class":32,"line":123},[30,78161,2692],{"class":321},[30,78163,78164,78166,78168,78170],{"class":32,"line":131},[30,78165,78124],{"class":74},[30,78167,1179],{"class":317},[30,78169,14937],{"class":40},[30,78171,31604],{"class":321},[30,78173,78174,78176,78178,78181],{"class":32,"line":142},[30,78175,78135],{"class":74},[30,78177,1179],{"class":317},[30,78179,78180],{"class":74}," \"国际媒体头条速览\"",[30,78182,31604],{"class":321},[30,78184,78185,78187,78189],{"class":32,"line":1811},[30,78186,78147],{"class":74},[30,78188,1179],{"class":317},[30,78190,78191],{"class":40}," 56\n",[30,78193,78194],{"class":32,"line":1825},[30,78195,78157],{"class":321},[30,78197,78198],{"class":32,"line":1830},[30,78199,2692],{"class":321},[30,78201,78202,78204,78206,78209],{"class":32,"line":1836},[30,78203,78124],{"class":74},[30,78205,1179],{"class":317},[30,78207,78208],{"class":40}," 3",[30,78210,31604],{"class":321},[30,78212,78213,78215,78217,78220],{"class":32,"line":1857},[30,78214,78135],{"class":74},[30,78216,1179],{"class":317},[30,78218,78219],{"class":74}," \"乌克兰和俄罗斯持续冲突\"",[30,78221,31604],{"class":321},[30,78223,78224,78226,78228],{"class":32,"line":1862},[30,78225,78147],{"class":74},[30,78227,1179],{"class":317},[30,78229,78230],{"class":40}," 1669\n",[30,78232,78233],{"class":32,"line":1876},[30,78234,78157],{"class":321},[30,78236,78237],{"class":32,"line":1881},[30,78238,78239],{"class":321},"      ]\n",[30,78241,78242],{"class":32,"line":1910},[30,78243,2369],{"class":321},[157,78245,78246],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[157,78248,78249],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[157,78251,78252],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[157,78254,78255],{},"function({data}) {",[157,78257,78258],{},"console.log(data)",[157,78260,1266],{},[157,78262,78263],{},"render(msg)",[157,78265,78266],{},"实参传递给形参的时候解构了",[157,78268,78269],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[157,78271,78272],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[157,78274,78275],{},"function render({data:mydata}) {",[157,78277,78278],{},"  console.log(data)",[157,78280,1266],{},[287,78282,78284],{"id":78283},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[157,78286,78287],{},"有两种情况：一个是数组结构，一个是立即执行函数",[271,78289,78290],{},[150,78291,78292],{},"如果对一个数组进行遍历，有两种方式：",[157,78294,78295],{},"①法1",[157,78297,78298],{},"const arr=[1,2,3]",[157,78300,78301],{},"arr.map(function(item,index) {",[157,78303,78304],{},"  console.log(item)",[157,78306,52602],{},[157,78308,78309],{},[160,78310],{"alt":25,"src":78311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[157,78313,78314],{},"②法2",[157,78316,78317],{},"const str='pink'",[157,78319,78320],{},"[1,2,3].map(function(item,index) {",[157,78322,78323],{},"console.log(item)",[157,78325,52602],{},[157,78327,78328],{},[160,78329],{"alt":25,"src":78330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[157,78332,78333],{},"此时会报错",[157,78335,78336],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[157,78338,78323],{},[157,78340,52602],{},[157,78342,78343],{},"内部会当成这样处理，所以我们用分号进行隔开",[15,78345,78347],{"id":78346},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[157,78349,78350],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[157,78352,78353],{},"可以理解为加强版的for循环",[157,78355,78356],{},[160,78357],{"alt":25,"src":78358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[157,78360,78361],{},"里边不写return，不返回数组，只遍历不返回",[157,78363,78364],{},"map是返回数组",[157,78366,78367],{},"forEach主要用于遍历数组对象",[20,78369,78371],{"className":53205,"code":78370,"language":53207,"meta":25,"style":25},"  \u003Cscript>\n    const arr = ['red', 'green', 'pink']\n    const result = arr.forEach(function (item, index) {\n      console.log(item)\n      console.log(index)\n    })\n    console.log(result)\n  \u003C\u002Fscript>\n",[27,78372,78373,78381,78386,78391,78396,78401,78405,78410],{"__ignoreMap":25},[30,78374,78375,78377,78379],{"class":32,"line":33},[30,78376,52282],{"class":321},[30,78378,51951],{"class":51438},[30,78380,51445],{"class":321},[30,78382,78383],{"class":32,"line":44},[30,78384,78385],{"class":321},"    const arr = ['red', 'green', 'pink']\n",[30,78387,78388],{"class":32,"line":52},[30,78389,78390],{"class":321},"    const result = arr.forEach(function (item, index) {\n",[30,78392,78393],{"class":32,"line":60},[30,78394,78395],{"class":321},"      console.log(item)\n",[30,78397,78398],{"class":32,"line":68},[30,78399,78400],{"class":321},"      console.log(index)\n",[30,78402,78403],{"class":32,"line":80},[30,78404,33599],{"class":321},[30,78406,78407],{"class":32,"line":88},[30,78408,78409],{"class":321},"    console.log(result)\n",[30,78411,78412,78414,78416],{"class":32,"line":96},[30,78413,52555],{"class":321},[30,78415,51951],{"class":51438},[30,78417,51445],{"class":321},[157,78419,78420],{},[160,78421],{"alt":25,"src":78422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[15,78424,78426],{"id":78425},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[157,78428,78429],{},[160,78430],{"alt":25,"src":78431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[157,78433,78434],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[20,78436,78438],{"className":53205,"code":78437,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    const arr = [10, 20, 30]\n    const newArr = arr.filter(function (item, index) {\n      console.log(item)\n      console.log(index)\n      return item >= 20\n    })\n    console.log(newArr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,78439,78440,78448,78456,78461,78466,78470,78474,78479,78483,78488,78496],{"__ignoreMap":25},[30,78441,78442,78444,78446],{"class":32,"line":33},[30,78443,1230],{"class":321},[30,78445,51938],{"class":51438},[30,78447,51445],{"class":321},[30,78449,78450,78452,78454],{"class":32,"line":44},[30,78451,52282],{"class":321},[30,78453,51951],{"class":51438},[30,78455,51445],{"class":321},[30,78457,78458],{"class":32,"line":52},[30,78459,78460],{"class":321},"    const arr = [10, 20, 30]\n",[30,78462,78463],{"class":32,"line":60},[30,78464,78465],{"class":321},"    const newArr = arr.filter(function (item, index) {\n",[30,78467,78468],{"class":32,"line":68},[30,78469,78395],{"class":321},[30,78471,78472],{"class":32,"line":80},[30,78473,78400],{"class":321},[30,78475,78476],{"class":32,"line":88},[30,78477,78478],{"class":321},"      return item >= 20\n",[30,78480,78481],{"class":32,"line":96},[30,78482,33599],{"class":321},[30,78484,78485],{"class":32,"line":104},[30,78486,78487],{"class":321},"    console.log(newArr)\n",[30,78489,78490,78492,78494],{"class":32,"line":112},[30,78491,52555],{"class":321},[30,78493,51951],{"class":51438},[30,78495,51445],{"class":321},[30,78497,78498,78500,78502],{"class":32,"line":123},[30,78499,51923],{"class":321},[30,78501,51938],{"class":51438},[30,78503,51445],{"class":321},[157,78505,78506],{},"这个也可以写成箭头函数：",[20,78508,78510],{"className":50771,"code":78509,"language":50773,"meta":25,"style":25},"const newArr = arr.filter(item => item >= 20)\n",[27,78511,78512],{"__ignoreMap":25},[30,78513,78514],{"class":32,"line":33},[30,78515,78509],{"class":321},[15,78517,78519],{"id":78518},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[157,78521,78522],{},[160,78523],{"alt":25,"src":78524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[157,78526,78527],{},"步骤：",[157,78529,78530],{},"①：渲染页面模块",[147,78532,78533,78536],{},[150,78534,78535],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[150,78537,78538],{},"用forEach+字符串的形式",[157,78540,78541],{},"②：点击不同需求，显示不同页面内容",[147,78543,78544,78547,78550,78553,78556],{},[150,78545,78546],{},"点击采取事件委托方式 .filter",[150,78548,78549],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[150,78551,78552],{},"筛选条件是根据点击的 data-index 来判断",[150,78554,78555],{},"可以使用对象解构，把事件对象解构",[150,78557,78558],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[20,78560,78562],{"className":50771,"code":78561,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      flex-wrap: wrap;\n    }\n\n    .item {\n      width: 240px;\n      margin-left: 10px;\n      padding: 20px 30px;\n      transition: all ease .5s;\n      margin-bottom: 20px;\n    }\n\n    .item:nth-child(4n) {\n      margin-left: 0;\n    }\n\n    .item:hover {\n      box-shadow: 0px 0px 5px rgba(0, 0, 0, .2);\n      transform: translate3d(0, -4px, 0);\n      cursor: pointer;\n    }\n\n    .item img {\n      width: 100%;\n    }\n\n    .item .name {\n      font-size: 18px;\n      margin-bottom: 10px;\n      color: #666;\n    }\n\n    .item .price {\n      font-size: 22px;\n      color: firebrick;\n    }\n\n    .item .price::before {\n      content: '￥';\n      font-size: 14px;\n    }\n\n    .filter {\n      display: flex;\n      width: 990px;\n      margin: 0 auto;\n      padding: 50px 30px\n    }\n\n    .filter a {\n      padding: 10px 20px;\n      background: #f5f5f5;\n      color: #666;\n      text-decoration: none;\n      margin-right: 20px;\n    }\n\n    .filter a:focus {\n      background-color: #05943c;\n      color: #fff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"filter\">\n    \u003Ca href=\"#\" data-index=\"1\">0-100元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"2\">100-300元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"3\">300元以上\u003C\u002Fa>\n    \u003Ca href=\"#\">全部区间\u003C\u002Fa>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003C!-- \u003Cdiv class=\"item\">\n      \u003Cimg src=\"\" alt=\"\">\n      \u003Cp class=\"name\">\u003C\u002Fp>\n      \u003Cp class=\"price\">\u003C\u002Fp>\n    \u003C\u002Fdiv> -->\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 2. 初始化数据\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: '289.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n      },\n      {\n        id: '4001594',\n        name: '日式黑陶功夫茶组双侧把茶具礼盒装',\n        price: '288.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg',\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: '109.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: '488.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n      },\n      {\n        id: '3997185',\n        name: '与众不同的口感汝瓷白酒杯套组1壶4杯',\n        price: '108.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg',\n      },\n      {\n        id: '3997403',\n        name: '手工吹制更厚实白酒杯壶套装6壶6杯',\n        price: '100.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg',\n      },\n      {\n        id: '3998274',\n        name: '德国百年工艺高端水晶玻璃红酒杯2支装',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg',\n      },\n    ]\n\n    \u002F\u002F 1.渲染函数\n    function render(arr) {\n      \u002F\u002F 声明空字符串\n      let str = ''\n      \u002F\u002F 遍历数组\n      arr.forEach(item => {\n        const { name, price, picture } = item\n        str += `\n          \u003Cdiv class=\"item\">\n            \u003Cimg src=\"${picture}\" alt=\"\">\n            \u003Cp class=\"name\">${name}\u003C\u002Fp>\n            \u003Cp class=\"price\">${price}\u003C\u002Fp>\n          \u003C\u002Fdiv>\n        `\n      })\n      \u002F\u002F 追加给List\n      document.querySelector('.list').innerHTML = str\n    }\n    \u002F\u002F 页面一打开就需要渲染\n    render(goodsList)\n    \u002F\u002F 2.过滤筛选\n    document.querySelector('.filter').addEventListener('click', e => {\n      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n      const { tagName, dataset } = e.target\n      \u002F\u002F 判断\n      if (e.target.tagName === 'A') {\n        \u002F\u002F console.log(11)\n        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n        let arr = goodsList\n        if (dataset.index === '1') {\n          arr = goodsList.filter(item => item.price >= 0 && item.price \u003C= 100)\n        } else if (dataset.index === '2') {\n          arr = goodsList.filter(item => item.price >= 100 && item.price \u003C= 300)\n        } else if (dataset.index === '3') {\n          arr = goodsList.filter(item => item.price >= 300)\n        }\n        \u002F\u002F 渲染函数\n        render(arr)\n      }\n\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,78563,78564,78574,78588,78592,78600,78614,78634,78646,78654,78660,78670,78680,78690,78694,78698,78704,78717,78729,78739,78751,78755,78759,78766,78779,78791,78808,78826,78839,78843,78847,78859,78869,78873,78877,78884,78925,78952,78962,78966,78970,78978,78990,78994,78998,79006,79018,79030,79041,79045,79049,79058,79070,79081,79085,79089,79098,79110,79122,79126,79130,79137,79147,79159,79171,79186,79190,79194,79202,79218,79228,79238,79248,79260,79264,79268,79278,79289,79299,79303,79311,79319,79323,79331,79346,79372,79397,79422,79441,79449,79463,79468,79473,79478,79483,79488,79496,79504,79509,79520,79525,79535,79545,79555,79565,79569,79573,79582,79591,79600,79609,79613,79617,79626,79635,79644,79653,79657,79661,79670,79679,79688,79697,79701,79705,79714,79723,79732,79741,79745,79749,79758,79767,79776,79785,79789,79793,79802,79811,79820,79829,79833,79837,79846,79855,79863,79872,79876,79880,79884,79889,79901,79906,79918,79922,79939,79967,79976,79981,79991,80001,80010,80015,80020,80024,80029,80046,80050,80055,80063,80068,80095,80100,80120,80125,80137,80142,80147,80152,80163,80177,80214,80232,80265,80282,80306,80310,80315,80321,80325,80329,80333,80341,80349,80353],{"__ignoreMap":25},[30,78565,78566,78568,78570,78572],{"class":32,"line":33},[30,78567,51435],{"class":321},[30,78569,51439],{"class":51438},[30,78571,51442],{"class":36},[30,78573,51445],{"class":321},[30,78575,78576,78578,78580,78582,78584,78586],{"class":32,"line":44},[30,78577,1230],{"class":321},[30,78579,50773],{"class":51438},[30,78581,51454],{"class":36},[30,78583,367],{"class":321},[30,78585,51459],{"class":74},[30,78587,51445],{"class":321},[30,78589,78590],{"class":32,"line":52},[30,78591,2582],{"emptyLinePlaceholder":245},[30,78593,78594,78596,78598],{"class":32,"line":60},[30,78595,1230],{"class":321},[30,78597,51472],{"class":51438},[30,78599,51445],{"class":321},[30,78601,78602,78604,78606,78608,78610,78612],{"class":32,"line":68},[30,78603,52282],{"class":321},[30,78605,51482],{"class":51438},[30,78607,51485],{"class":36},[30,78609,367],{"class":321},[30,78611,51490],{"class":74},[30,78613,51445],{"class":321},[30,78615,78616,78618,78620,78622,78624,78626,78628,78630,78632],{"class":32,"line":80},[30,78617,52282],{"class":321},[30,78619,51482],{"class":51438},[30,78621,15102],{"class":36},[30,78623,367],{"class":321},[30,78625,51529],{"class":74},[30,78627,51509],{"class":36},[30,78629,367],{"class":321},[30,78631,51536],{"class":74},[30,78633,51445],{"class":321},[30,78635,78636,78638,78640,78642,78644],{"class":32,"line":88},[30,78637,52282],{"class":321},[30,78639,51545],{"class":51438},[30,78641,51548],{"class":321},[30,78643,51545],{"class":51438},[30,78645,51445],{"class":321},[30,78647,78648,78650,78652],{"class":32,"line":96},[30,78649,52282],{"class":321},[30,78651,234],{"class":51438},[30,78653,51445],{"class":321},[30,78655,78656,78658],{"class":32,"line":104},[30,78657,6585],{"class":51438},[30,78659,15754],{"class":321},[30,78661,78662,78664,78666,78668],{"class":32,"line":112},[30,78663,54833],{"class":40},[30,78665,51575],{"class":321},[30,78667,511],{"class":40},[30,78669,1480],{"class":321},[30,78671,78672,78674,78676,78678],{"class":32,"line":123},[30,78673,54844],{"class":40},[30,78675,51575],{"class":321},[30,78677,511],{"class":40},[30,78679,1480],{"class":321},[30,78681,78682,78684,78686,78688],{"class":32,"line":131},[30,78683,72734],{"class":40},[30,78685,51575],{"class":321},[30,78687,60643],{"class":40},[30,78689,1480],{"class":321},[30,78691,78692],{"class":32,"line":142},[30,78693,2369],{"class":321},[30,78695,78696],{"class":32,"line":1811},[30,78697,2582],{"emptyLinePlaceholder":245},[30,78699,78700,78702],{"class":32,"line":1825},[30,78701,62261],{"class":36},[30,78703,15754],{"class":321},[30,78705,78706,78708,78710,78713,78715],{"class":32,"line":1830},[30,78707,54909],{"class":40},[30,78709,51575],{"class":321},[30,78711,78712],{"class":40},"990",[30,78714,51630],{"class":317},[30,78716,1480],{"class":321},[30,78718,78719,78721,78723,78725,78727],{"class":32,"line":1836},[30,78720,54844],{"class":40},[30,78722,51575],{"class":321},[30,78724,511],{"class":40},[30,78726,51694],{"class":40},[30,78728,1480],{"class":321},[30,78730,78731,78733,78735,78737],{"class":32,"line":1857},[30,78732,55147],{"class":40},[30,78734,51575],{"class":321},[30,78736,51615],{"class":40},[30,78738,1480],{"class":321},[30,78740,78741,78744,78746,78749],{"class":32,"line":1862},[30,78742,78743],{"class":40},"      flex-wrap",[30,78745,51575],{"class":321},[30,78747,78748],{"class":40},"wrap",[30,78750,1480],{"class":321},[30,78752,78753],{"class":32,"line":1876},[30,78754,2369],{"class":321},[30,78756,78757],{"class":32,"line":1881},[30,78758,2582],{"emptyLinePlaceholder":245},[30,78760,78761,78764],{"class":32,"line":1910},[30,78762,78763],{"class":36},"    .item",[30,78765,15754],{"class":321},[30,78767,78768,78770,78772,78775,78777],{"class":32,"line":1915},[30,78769,54909],{"class":40},[30,78771,51575],{"class":321},[30,78773,78774],{"class":40},"240",[30,78776,51630],{"class":317},[30,78778,1480],{"class":321},[30,78780,78781,78783,78785,78787,78789],{"class":32,"line":1932},[30,78782,62138],{"class":40},[30,78784,51575],{"class":321},[30,78786,766],{"class":40},[30,78788,51630],{"class":317},[30,78790,1480],{"class":321},[30,78792,78793,78795,78797,78799,78801,78804,78806],{"class":32,"line":1937},[30,78794,54833],{"class":40},[30,78796,51575],{"class":321},[30,78798,1020],{"class":40},[30,78800,51630],{"class":317},[30,78802,78803],{"class":40}," 30",[30,78805,51630],{"class":317},[30,78807,1480],{"class":321},[30,78809,78810,78812,78814,78816,78819,78822,78824],{"class":32,"line":1942},[30,78811,61998],{"class":40},[30,78813,51575],{"class":321},[30,78815,28259],{"class":40},[30,78817,78818],{"class":40}," ease",[30,78820,78821],{"class":40}," .5",[30,78823,1015],{"class":317},[30,78825,1480],{"class":321},[30,78827,78828,78831,78833,78835,78837],{"class":32,"line":1947},[30,78829,78830],{"class":40},"      margin-bottom",[30,78832,51575],{"class":321},[30,78834,1020],{"class":40},[30,78836,51630],{"class":317},[30,78838,1480],{"class":321},[30,78840,78841],{"class":32,"line":1961},[30,78842,2369],{"class":321},[30,78844,78845],{"class":32,"line":1966},[30,78846,2582],{"emptyLinePlaceholder":245},[30,78848,78849,78852,78854,78857],{"class":32,"line":2759},[30,78850,78851],{"class":36},"    .item:nth-child",[30,78853,322],{"class":321},[30,78855,78856],{"class":40},"4n",[30,78858,12624],{"class":321},[30,78860,78861,78863,78865,78867],{"class":32,"line":2773},[30,78862,62138],{"class":40},[30,78864,51575],{"class":321},[30,78866,511],{"class":40},[30,78868,1480],{"class":321},[30,78870,78871],{"class":32,"line":2781},[30,78872,2369],{"class":321},[30,78874,78875],{"class":32,"line":2786},[30,78876,2582],{"emptyLinePlaceholder":245},[30,78878,78879,78882],{"class":32,"line":2792},[30,78880,78881],{"class":36},"    .item:hover",[30,78883,15754],{"class":321},[30,78885,78886,78889,78891,78893,78895,78897,78899,78901,78903,78906,78908,78910,78912,78914,78916,78918,78920,78923],{"class":32,"line":2798},[30,78887,78888],{"class":40},"      box-shadow",[30,78890,51575],{"class":321},[30,78892,511],{"class":40},[30,78894,51630],{"class":317},[30,78896,4275],{"class":40},[30,78898,51630],{"class":317},[30,78900,2330],{"class":40},[30,78902,51630],{"class":317},[30,78904,78905],{"class":40}," rgba",[30,78907,322],{"class":321},[30,78909,511],{"class":40},[30,78911,12617],{"class":321},[30,78913,511],{"class":40},[30,78915,12617],{"class":321},[30,78917,511],{"class":40},[30,78919,12617],{"class":321},[30,78921,78922],{"class":40},".2",[30,78924,2901],{"class":321},[30,78926,78927,78930,78932,78935,78937,78939,78941,78944,78946,78948,78950],{"class":32,"line":2803},[30,78928,78929],{"class":40},"      transform",[30,78931,51575],{"class":321},[30,78933,78934],{"class":40},"translate3d",[30,78936,322],{"class":321},[30,78938,511],{"class":40},[30,78940,12617],{"class":321},[30,78942,78943],{"class":40},"-4",[30,78945,51630],{"class":317},[30,78947,12617],{"class":321},[30,78949,511],{"class":40},[30,78951,2901],{"class":321},[30,78953,78954,78956,78958,78960],{"class":32,"line":8130},[30,78955,62163],{"class":40},[30,78957,51575],{"class":321},[30,78959,62168],{"class":40},[30,78961,1480],{"class":321},[30,78963,78964],{"class":32,"line":8154},[30,78965,2369],{"class":321},[30,78967,78968],{"class":32,"line":8159},[30,78969,2582],{"emptyLinePlaceholder":245},[30,78971,78972,78974,78976],{"class":32,"line":8165},[30,78973,78763],{"class":36},[30,78975,55753],{"class":51438},[30,78977,15754],{"class":321},[30,78979,78980,78982,78984,78986,78988],{"class":32,"line":8192},[30,78981,54909],{"class":40},[30,78983,51575],{"class":321},[30,78985,631],{"class":40},[30,78987,648],{"class":317},[30,78989,1480],{"class":321},[30,78991,78992],{"class":32,"line":8197},[30,78993,2369],{"class":321},[30,78995,78996],{"class":32,"line":8203},[30,78997,2582],{"emptyLinePlaceholder":245},[30,78999,79000,79002,79004],{"class":32,"line":8215},[30,79001,78763],{"class":36},[30,79003,62442],{"class":36},[30,79005,15754],{"class":321},[30,79007,79008,79010,79012,79014,79016],{"class":32,"line":8227},[30,79009,55060],{"class":40},[30,79011,51575],{"class":321},[30,79013,970],{"class":40},[30,79015,51630],{"class":317},[30,79017,1480],{"class":321},[30,79019,79020,79022,79024,79026,79028],{"class":32,"line":8239},[30,79021,78830],{"class":40},[30,79023,51575],{"class":321},[30,79025,766],{"class":40},[30,79027,51630],{"class":317},[30,79029,1480],{"class":321},[30,79031,79032,79034,79036,79039],{"class":32,"line":9898},[30,79033,57554],{"class":40},[30,79035,51575],{"class":321},[30,79037,79038],{"class":40},"#666",[30,79040,1480],{"class":321},[30,79042,79043],{"class":32,"line":9923},[30,79044,2369],{"class":321},[30,79046,79047],{"class":32,"line":9946},[30,79048,2582],{"emptyLinePlaceholder":245},[30,79050,79051,79053,79056],{"class":32,"line":9970},[30,79052,78763],{"class":36},[30,79054,79055],{"class":36}," .price",[30,79057,15754],{"class":321},[30,79059,79060,79062,79064,79066,79068],{"class":32,"line":9975},[30,79061,55060],{"class":40},[30,79063,51575],{"class":321},[30,79065,1070],{"class":40},[30,79067,51630],{"class":317},[30,79069,1480],{"class":321},[30,79071,79072,79074,79076,79079],{"class":32,"line":9980},[30,79073,57554],{"class":40},[30,79075,51575],{"class":321},[30,79077,79078],{"class":40},"firebrick",[30,79080,1480],{"class":321},[30,79082,79083],{"class":32,"line":9985},[30,79084,2369],{"class":321},[30,79086,79087],{"class":32,"line":9994},[30,79088,2582],{"emptyLinePlaceholder":245},[30,79090,79091,79093,79096],{"class":32,"line":9999},[30,79092,78763],{"class":36},[30,79094,79095],{"class":36}," .price::before",[30,79097,15754],{"class":321},[30,79099,79100,79103,79105,79108],{"class":32,"line":10005},[30,79101,79102],{"class":40},"      content",[30,79104,51575],{"class":321},[30,79106,79107],{"class":74},"'￥'",[30,79109,1480],{"class":321},[30,79111,79112,79114,79116,79118,79120],{"class":32,"line":10026},[30,79113,55060],{"class":40},[30,79115,51575],{"class":321},[30,79117,869],{"class":40},[30,79119,51630],{"class":317},[30,79121,1480],{"class":321},[30,79123,79124],{"class":32,"line":10032},[30,79125,2369],{"class":321},[30,79127,79128],{"class":32,"line":10046},[30,79129,2582],{"emptyLinePlaceholder":245},[30,79131,79132,79135],{"class":32,"line":10052},[30,79133,79134],{"class":36},"    .filter",[30,79136,15754],{"class":321},[30,79138,79139,79141,79143,79145],{"class":32,"line":10079},[30,79140,55147],{"class":40},[30,79142,51575],{"class":321},[30,79144,51615],{"class":40},[30,79146,1480],{"class":321},[30,79148,79149,79151,79153,79155,79157],{"class":32,"line":10088},[30,79150,54909],{"class":40},[30,79152,51575],{"class":321},[30,79154,78712],{"class":40},[30,79156,51630],{"class":317},[30,79158,1480],{"class":321},[30,79160,79161,79163,79165,79167,79169],{"class":32,"line":10094},[30,79162,54844],{"class":40},[30,79164,51575],{"class":321},[30,79166,511],{"class":40},[30,79168,51694],{"class":40},[30,79170,1480],{"class":321},[30,79172,79173,79175,79177,79179,79181,79183],{"class":32,"line":10102},[30,79174,54833],{"class":40},[30,79176,51575],{"class":321},[30,79178,976],{"class":40},[30,79180,51630],{"class":317},[30,79182,78803],{"class":40},[30,79184,79185],{"class":317},"px\n",[30,79187,79188],{"class":32,"line":10107},[30,79189,2369],{"class":321},[30,79191,79192],{"class":32,"line":16786},[30,79193,2582],{"emptyLinePlaceholder":245},[30,79195,79196,79198,79200],{"class":32,"line":16792},[30,79197,79134],{"class":36},[30,79199,1585],{"class":51438},[30,79201,15754],{"class":321},[30,79203,79204,79206,79208,79210,79212,79214,79216],{"class":32,"line":16815},[30,79205,54833],{"class":40},[30,79207,51575],{"class":321},[30,79209,766],{"class":40},[30,79211,51630],{"class":317},[30,79213,9132],{"class":40},[30,79215,51630],{"class":317},[30,79217,1480],{"class":321},[30,79219,79220,79222,79224,79226],{"class":32,"line":16821},[30,79221,61859],{"class":40},[30,79223,51575],{"class":321},[30,79225,61956],{"class":40},[30,79227,1480],{"class":321},[30,79229,79230,79232,79234,79236],{"class":32,"line":16844},[30,79231,57554],{"class":40},[30,79233,51575],{"class":321},[30,79235,79038],{"class":40},[30,79237,1480],{"class":321},[30,79239,79240,79242,79244,79246],{"class":32,"line":16858},[30,79241,64108],{"class":40},[30,79243,51575],{"class":321},[30,79245,54875],{"class":40},[30,79247,1480],{"class":321},[30,79249,79250,79252,79254,79256,79258],{"class":32,"line":16878},[30,79251,61888],{"class":40},[30,79253,51575],{"class":321},[30,79255,1020],{"class":40},[30,79257,51630],{"class":317},[30,79259,1480],{"class":321},[30,79261,79262],{"class":32,"line":16884},[30,79263,2369],{"class":321},[30,79265,79266],{"class":32,"line":16895},[30,79267,2582],{"emptyLinePlaceholder":245},[30,79269,79270,79272,79274,79276],{"class":32,"line":16918},[30,79271,79134],{"class":36},[30,79273,1585],{"class":51438},[30,79275,62038],{"class":36},[30,79277,15754],{"class":321},[30,79279,79280,79282,79284,79287],{"class":32,"line":16940},[30,79281,55022],{"class":40},[30,79283,51575],{"class":321},[30,79285,79286],{"class":40},"#05943c",[30,79288,1480],{"class":321},[30,79290,79291,79293,79295,79297],{"class":32,"line":16945},[30,79292,57554],{"class":40},[30,79294,51575],{"class":321},[30,79296,60980],{"class":40},[30,79298,1480],{"class":321},[30,79300,79301],{"class":32,"line":16951},[30,79302,2369],{"class":321},[30,79304,79305,79307,79309],{"class":32,"line":16965},[30,79306,52555],{"class":321},[30,79308,234],{"class":51438},[30,79310,51445],{"class":321},[30,79312,79313,79315,79317],{"class":32,"line":16978},[30,79314,51923],{"class":321},[30,79316,51472],{"class":51438},[30,79318,51445],{"class":321},[30,79320,79321],{"class":32,"line":16983},[30,79322,2582],{"emptyLinePlaceholder":245},[30,79324,79325,79327,79329],{"class":32,"line":16997},[30,79326,1230],{"class":321},[30,79328,51938],{"class":51438},[30,79330,51445],{"class":321},[30,79332,79333,79335,79337,79339,79341,79344],{"class":32,"line":17002},[30,79334,52282],{"class":321},[30,79336,51749],{"class":51438},[30,79338,53624],{"class":36},[30,79340,367],{"class":321},[30,79342,79343],{"class":74},"\"filter\"",[30,79345,51445],{"class":321},[30,79347,79348,79350,79352,79354,79356,79358,79361,79363,79365,79368,79370],{"class":32,"line":17008},[30,79349,51479],{"class":321},[30,79351,558],{"class":51438},[30,79353,61195],{"class":36},[30,79355,367],{"class":321},[30,79357,61200],{"class":74},[30,79359,79360],{"class":36}," data-index",[30,79362,367],{"class":321},[30,79364,3860],{"class":74},[30,79366,79367],{"class":321},">0-100元\u003C\u002F",[30,79369,558],{"class":51438},[30,79371,51445],{"class":321},[30,79373,79374,79376,79378,79380,79382,79384,79386,79388,79390,79393,79395],{"class":32,"line":17013},[30,79375,51479],{"class":321},[30,79377,558],{"class":51438},[30,79379,61195],{"class":36},[30,79381,367],{"class":321},[30,79383,61200],{"class":74},[30,79385,79360],{"class":36},[30,79387,367],{"class":321},[30,79389,3883],{"class":74},[30,79391,79392],{"class":321},">100-300元\u003C\u002F",[30,79394,558],{"class":51438},[30,79396,51445],{"class":321},[30,79398,79399,79401,79403,79405,79407,79409,79411,79413,79415,79418,79420],{"class":32,"line":17027},[30,79400,51479],{"class":321},[30,79402,558],{"class":51438},[30,79404,61195],{"class":36},[30,79406,367],{"class":321},[30,79408,61200],{"class":74},[30,79410,79360],{"class":36},[30,79412,367],{"class":321},[30,79414,3896],{"class":74},[30,79416,79417],{"class":321},">300元以上\u003C\u002F",[30,79419,558],{"class":51438},[30,79421,51445],{"class":321},[30,79423,79424,79426,79428,79430,79432,79434,79437,79439],{"class":32,"line":17032},[30,79425,51479],{"class":321},[30,79427,558],{"class":51438},[30,79429,61195],{"class":36},[30,79431,367],{"class":321},[30,79433,61200],{"class":74},[30,79435,79436],{"class":321},">全部区间\u003C\u002F",[30,79438,558],{"class":51438},[30,79440,51445],{"class":321},[30,79442,79443,79445,79447],{"class":32,"line":17037},[30,79444,52555],{"class":321},[30,79446,51749],{"class":51438},[30,79448,51445],{"class":321},[30,79450,79451,79453,79455,79457,79459,79461],{"class":32,"line":17051},[30,79452,52282],{"class":321},[30,79454,51749],{"class":51438},[30,79456,53624],{"class":36},[30,79458,367],{"class":321},[30,79460,62746],{"class":74},[30,79462,51445],{"class":321},[30,79464,79465],{"class":32,"line":17063},[30,79466,79467],{"class":379},"    \u003C!-- \u003Cdiv class=\"item\">\n",[30,79469,79470],{"class":32,"line":17068},[30,79471,79472],{"class":379},"      \u003Cimg src=\"\" alt=\"\">\n",[30,79474,79475],{"class":32,"line":17081},[30,79476,79477],{"class":379},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[30,79479,79480],{"class":32,"line":17086},[30,79481,79482],{"class":379},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[30,79484,79485],{"class":32,"line":17091},[30,79486,79487],{"class":379},"    \u003C\u002Fdiv> -->\n",[30,79489,79490,79492,79494],{"class":32,"line":17096},[30,79491,52555],{"class":321},[30,79493,51749],{"class":51438},[30,79495,51445],{"class":321},[30,79497,79498,79500,79502],{"class":32,"line":17109},[30,79499,52282],{"class":321},[30,79501,51951],{"class":51438},[30,79503,51445],{"class":321},[30,79505,79506],{"class":32,"line":17114},[30,79507,79508],{"class":379},"    \u002F\u002F 2. 初始化数据\n",[30,79510,79511,79513,79516,79518],{"class":32,"line":32771},[30,79512,11403],{"class":317},[30,79514,79515],{"class":40}," goodsList",[30,79517,13746],{"class":317},[30,79519,55585],{"class":321},[30,79521,79522],{"class":32,"line":32777},[30,79523,79524],{"class":321},"      {\n",[30,79526,79527,79530,79533],{"class":32,"line":32783},[30,79528,79529],{"class":321},"        id: ",[30,79531,79532],{"class":74},"'4001172'",[30,79534,31604],{"class":321},[30,79536,79537,79540,79543],{"class":32,"line":32789},[30,79538,79539],{"class":321},"        name: ",[30,79541,79542],{"class":74},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[30,79544,31604],{"class":321},[30,79546,79547,79550,79553],{"class":32,"line":32795},[30,79548,79549],{"class":321},"        price: ",[30,79551,79552],{"class":74},"'289.00'",[30,79554,31604],{"class":321},[30,79556,79557,79560,79563],{"class":32,"line":32806},[30,79558,79559],{"class":321},"        picture: ",[30,79561,79562],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[30,79564,31604],{"class":321},[30,79566,79567],{"class":32,"line":32812},[30,79568,78030],{"class":321},[30,79570,79571],{"class":32,"line":32832},[30,79572,79524],{"class":321},[30,79574,79575,79577,79580],{"class":32,"line":32838},[30,79576,79529],{"class":321},[30,79578,79579],{"class":74},"'4001594'",[30,79581,31604],{"class":321},[30,79583,79584,79586,79589],{"class":32,"line":32849},[30,79585,79539],{"class":321},[30,79587,79588],{"class":74},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[30,79590,31604],{"class":321},[30,79592,79593,79595,79598],{"class":32,"line":32855},[30,79594,79549],{"class":321},[30,79596,79597],{"class":74},"'288.00'",[30,79599,31604],{"class":321},[30,79601,79602,79604,79607],{"class":32,"line":32861},[30,79603,79559],{"class":321},[30,79605,79606],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[30,79608,31604],{"class":321},[30,79610,79611],{"class":32,"line":32867},[30,79612,78030],{"class":321},[30,79614,79615],{"class":32,"line":32873},[30,79616,79524],{"class":321},[30,79618,79619,79621,79624],{"class":32,"line":32879},[30,79620,79529],{"class":321},[30,79622,79623],{"class":74},"'4001009'",[30,79625,31604],{"class":321},[30,79627,79628,79630,79633],{"class":32,"line":32885},[30,79629,79539],{"class":321},[30,79631,79632],{"class":74},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[30,79634,31604],{"class":321},[30,79636,79637,79639,79642],{"class":32,"line":32891},[30,79638,79549],{"class":321},[30,79640,79641],{"class":74},"'109.00'",[30,79643,31604],{"class":321},[30,79645,79646,79648,79651],{"class":32,"line":32911},[30,79647,79559],{"class":321},[30,79649,79650],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[30,79652,31604],{"class":321},[30,79654,79655],{"class":32,"line":32917},[30,79656,78030],{"class":321},[30,79658,79659],{"class":32,"line":32933},[30,79660,79524],{"class":321},[30,79662,79663,79665,79668],{"class":32,"line":32939},[30,79664,79529],{"class":321},[30,79666,79667],{"class":74},"'4001874'",[30,79669,31604],{"class":321},[30,79671,79672,79674,79677],{"class":32,"line":32953},[30,79673,79539],{"class":321},[30,79675,79676],{"class":74},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[30,79678,31604],{"class":321},[30,79680,79681,79683,79686],{"class":32,"line":32959},[30,79682,79549],{"class":321},[30,79684,79685],{"class":74},"'488.00'",[30,79687,31604],{"class":321},[30,79689,79690,79692,79695],{"class":32,"line":32974},[30,79691,79559],{"class":321},[30,79693,79694],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[30,79696,31604],{"class":321},[30,79698,79699],{"class":32,"line":32980},[30,79700,78030],{"class":321},[30,79702,79703],{"class":32,"line":32989},[30,79704,79524],{"class":321},[30,79706,79707,79709,79712],{"class":32,"line":32995},[30,79708,79529],{"class":321},[30,79710,79711],{"class":74},"'4001649'",[30,79713,31604],{"class":321},[30,79715,79716,79718,79721],{"class":32,"line":33004},[30,79717,79539],{"class":321},[30,79719,79720],{"class":74},"'大师监制龙泉青瓷茶叶罐'",[30,79722,31604],{"class":321},[30,79724,79725,79727,79730],{"class":32,"line":33010},[30,79726,79549],{"class":321},[30,79728,79729],{"class":74},"'139.00'",[30,79731,31604],{"class":321},[30,79733,79734,79736,79739],{"class":32,"line":33016},[30,79735,79559],{"class":321},[30,79737,79738],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[30,79740,31604],{"class":321},[30,79742,79743],{"class":32,"line":33025},[30,79744,78030],{"class":321},[30,79746,79747],{"class":32,"line":33031},[30,79748,79524],{"class":321},[30,79750,79751,79753,79756],{"class":32,"line":33042},[30,79752,79529],{"class":321},[30,79754,79755],{"class":74},"'3997185'",[30,79757,31604],{"class":321},[30,79759,79760,79762,79765],{"class":32,"line":33048},[30,79761,79539],{"class":321},[30,79763,79764],{"class":74},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[30,79766,31604],{"class":321},[30,79768,79769,79771,79774],{"class":32,"line":33067},[30,79770,79549],{"class":321},[30,79772,79773],{"class":74},"'108.00'",[30,79775,31604],{"class":321},[30,79777,79778,79780,79783],{"class":32,"line":33073},[30,79779,79559],{"class":321},[30,79781,79782],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[30,79784,31604],{"class":321},[30,79786,79787],{"class":32,"line":33084},[30,79788,78030],{"class":321},[30,79790,79791],{"class":32,"line":33090},[30,79792,79524],{"class":321},[30,79794,79795,79797,79800],{"class":32,"line":33110},[30,79796,79529],{"class":321},[30,79798,79799],{"class":74},"'3997403'",[30,79801,31604],{"class":321},[30,79803,79804,79806,79809],{"class":32,"line":33126},[30,79805,79539],{"class":321},[30,79807,79808],{"class":74},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[30,79810,31604],{"class":321},[30,79812,79813,79815,79818],{"class":32,"line":33132},[30,79814,79549],{"class":321},[30,79816,79817],{"class":74},"'100.00'",[30,79819,31604],{"class":321},[30,79821,79822,79824,79827],{"class":32,"line":33146},[30,79823,79559],{"class":321},[30,79825,79826],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[30,79828,31604],{"class":321},[30,79830,79831],{"class":32,"line":33152},[30,79832,78030],{"class":321},[30,79834,79835],{"class":32,"line":33158},[30,79836,79524],{"class":321},[30,79838,79839,79841,79844],{"class":32,"line":33169},[30,79840,79529],{"class":321},[30,79842,79843],{"class":74},"'3998274'",[30,79845,31604],{"class":321},[30,79847,79848,79850,79853],{"class":32,"line":33175},[30,79849,79539],{"class":321},[30,79851,79852],{"class":74},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[30,79854,31604],{"class":321},[30,79856,79857,79859,79861],{"class":32,"line":33181},[30,79858,79549],{"class":321},[30,79860,79729],{"class":74},[30,79862,31604],{"class":321},[30,79864,79865,79867,79870],{"class":32,"line":33191},[30,79866,79559],{"class":321},[30,79868,79869],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[30,79871,31604],{"class":321},[30,79873,79874],{"class":32,"line":33197},[30,79875,78030],{"class":321},[30,79877,79878],{"class":32,"line":33208},[30,79879,53247],{"class":321},[30,79881,79882],{"class":32,"line":33214},[30,79883,2582],{"emptyLinePlaceholder":245},[30,79885,79886],{"class":32,"line":33224},[30,79887,79888],{"class":379},"    \u002F\u002F 1.渲染函数\n",[30,79890,79891,79893,79895,79897,79899],{"class":32,"line":33229},[30,79892,70222],{"class":317},[30,79894,70225],{"class":36},[30,79896,322],{"class":321},[30,79898,4062],{"class":5398},[30,79900,12624],{"class":321},[30,79902,79903],{"class":32,"line":33235},[30,79904,79905],{"class":379},"      \u002F\u002F 声明空字符串\n",[30,79907,79908,79911,79914,79916],{"class":32,"line":33284},[30,79909,79910],{"class":317},"      let",[30,79912,79913],{"class":321}," str ",[30,79915,367],{"class":317},[30,79917,70242],{"class":74},[30,79919,79920],{"class":32,"line":33331},[30,79921,70247],{"class":379},[30,79923,79924,79926,79929,79931,79934,79937],{"class":32,"line":33336},[30,79925,58145],{"class":321},[30,79927,79928],{"class":36},"forEach",[30,79930,322],{"class":321},[30,79932,79933],{"class":5398},"item",[30,79935,79936],{"class":317}," =>",[30,79938,15754],{"class":321},[30,79940,79941,79943,79946,79949,79951,79954,79956,79959,79962,79964],{"class":32,"line":33342},[30,79942,61408],{"class":317},[30,79944,79945],{"class":321}," { ",[30,79947,79948],{"class":40},"name",[30,79950,12617],{"class":321},[30,79952,79953],{"class":40},"price",[30,79955,12617],{"class":321},[30,79957,79958],{"class":40},"picture",[30,79960,79961],{"class":321}," } ",[30,79963,367],{"class":317},[30,79965,79966],{"class":321}," item\n",[30,79968,79969,79972,79974],{"class":32,"line":33361},[30,79970,79971],{"class":321},"        str ",[30,79973,9659],{"class":317},[30,79975,70306],{"class":74},[30,79977,79978],{"class":32,"line":33367},[30,79979,79980],{"class":74},"          \u003Cdiv class=\"item\">\n",[30,79982,79983,79986,79988],{"class":32,"line":33387},[30,79984,79985],{"class":74},"            \u003Cimg src=\"${",[30,79987,79958],{"class":321},[30,79989,79990],{"class":74},"}\" alt=\"\">\n",[30,79992,79993,79996,79998],{"class":32,"line":33393},[30,79994,79995],{"class":74},"            \u003Cp class=\"name\">${",[30,79997,79948],{"class":321},[30,79999,80000],{"class":74},"}\u003C\u002Fp>\n",[30,80002,80003,80006,80008],{"class":32,"line":33399},[30,80004,80005],{"class":74},"            \u003Cp class=\"price\">${",[30,80007,79953],{"class":321},[30,80009,80000],{"class":74},[30,80011,80012],{"class":32,"line":33409},[30,80013,80014],{"class":74},"          \u003C\u002Fdiv>\n",[30,80016,80017],{"class":32,"line":33414},[30,80018,80019],{"class":74},"        `\n",[30,80021,80022],{"class":32,"line":33420},[30,80023,64953],{"class":321},[30,80025,80026],{"class":32,"line":33436},[30,80027,80028],{"class":379},"      \u002F\u002F 追加给List\n",[30,80030,80031,80033,80035,80037,80040,80042,80044],{"class":32,"line":33481},[30,80032,55909],{"class":321},[30,80034,54537],{"class":36},[30,80036,322],{"class":321},[30,80038,80039],{"class":74},"'.list'",[30,80041,74387],{"class":321},[30,80043,367],{"class":317},[30,80045,74123],{"class":321},[30,80047,80048],{"class":32,"line":33487},[30,80049,2369],{"class":321},[30,80051,80052],{"class":32,"line":33493},[30,80053,80054],{"class":379},"    \u002F\u002F 页面一打开就需要渲染\n",[30,80056,80057,80060],{"class":32,"line":33499},[30,80058,80059],{"class":36},"    render",[30,80061,80062],{"class":321},"(goodsList)\n",[30,80064,80065],{"class":32,"line":33510},[30,80066,80067],{"class":379},"    \u002F\u002F 2.过滤筛选\n",[30,80069,80070,80072,80074,80076,80079,80081,80083,80085,80087,80089,80091,80093],{"class":32,"line":33516},[30,80071,52545],{"class":321},[30,80073,54537],{"class":36},[30,80075,322],{"class":321},[30,80077,80078],{"class":74},"'.filter'",[30,80080,30964],{"class":321},[30,80082,57951],{"class":36},[30,80084,322],{"class":321},[30,80086,57956],{"class":74},[30,80088,12617],{"class":321},[30,80090,395],{"class":5398},[30,80092,79936],{"class":317},[30,80094,15754],{"class":321},[30,80096,80097],{"class":32,"line":33522},[30,80098,80099],{"class":379},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[30,80101,80102,80104,80106,80109,80111,80113,80115,80117],{"class":32,"line":33528},[30,80103,58366],{"class":317},[30,80105,79945],{"class":321},[30,80107,80108],{"class":40},"tagName",[30,80110,12617],{"class":321},[30,80112,31675],{"class":40},[30,80114,79961],{"class":321},[30,80116,367],{"class":317},[30,80118,80119],{"class":321}," e.target\n",[30,80121,80122],{"class":32,"line":33546},[30,80123,80124],{"class":379},"      \u002F\u002F 判断\n",[30,80126,80127,80129,80131,80133,80135],{"class":32,"line":33560},[30,80128,54618],{"class":317},[30,80130,67172],{"class":321},[30,80132,54624],{"class":317},[30,80134,68394],{"class":74},[30,80136,12624],{"class":321},[30,80138,80139],{"class":32,"line":33569},[30,80140,80141],{"class":379},"        \u002F\u002F console.log(11)\n",[30,80143,80144],{"class":32,"line":33578},[30,80145,80146],{"class":379},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[30,80148,80149],{"class":32,"line":33587},[30,80150,80151],{"class":379},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[30,80153,80154,80156,80158,80160],{"class":32,"line":33596},[30,80155,51968],{"class":317},[30,80157,51971],{"class":321},[30,80159,367],{"class":317},[30,80161,80162],{"class":321}," goodsList\n",[30,80164,80165,80167,80170,80172,80175],{"class":32,"line":33602},[30,80166,2679],{"class":317},[30,80168,80169],{"class":321}," (dataset.index ",[30,80171,54624],{"class":317},[30,80173,80174],{"class":74}," '1'",[30,80176,12624],{"class":321},[30,80178,80179,80182,80184,80187,80190,80192,80194,80196,80199,80201,80203,80206,80208,80210,80212],{"class":32,"line":33608},[30,80180,80181],{"class":321},"          arr ",[30,80183,367],{"class":317},[30,80185,80186],{"class":321}," goodsList.",[30,80188,80189],{"class":36},"filter",[30,80191,322],{"class":321},[30,80193,79933],{"class":5398},[30,80195,79936],{"class":317},[30,80197,80198],{"class":321}," item.price ",[30,80200,1893],{"class":317},[30,80202,4275],{"class":40},[30,80204,80205],{"class":317}," &&",[30,80207,80198],{"class":321},[30,80209,1774],{"class":317},[30,80211,5936],{"class":40},[30,80213,328],{"class":321},[30,80215,80216,80219,80221,80223,80225,80227,80230],{"class":32,"line":33616},[30,80217,80218],{"class":321},"        } ",[30,80220,1884],{"class":317},[30,80222,1887],{"class":317},[30,80224,80169],{"class":321},[30,80226,54624],{"class":317},[30,80228,80229],{"class":74}," '2'",[30,80231,12624],{"class":321},[30,80233,80234,80236,80238,80240,80242,80244,80246,80248,80250,80252,80254,80256,80258,80260,80263],{"class":32,"line":33621},[30,80235,80181],{"class":321},[30,80237,367],{"class":317},[30,80239,80186],{"class":321},[30,80241,80189],{"class":36},[30,80243,322],{"class":321},[30,80245,79933],{"class":5398},[30,80247,79936],{"class":317},[30,80249,80198],{"class":321},[30,80251,1893],{"class":317},[30,80253,5936],{"class":40},[30,80255,80205],{"class":317},[30,80257,80198],{"class":321},[30,80259,1774],{"class":317},[30,80261,80262],{"class":40}," 300",[30,80264,328],{"class":321},[30,80266,80267,80269,80271,80273,80275,80277,80280],{"class":32,"line":33627},[30,80268,80218],{"class":321},[30,80270,1884],{"class":317},[30,80272,1887],{"class":317},[30,80274,80169],{"class":321},[30,80276,54624],{"class":317},[30,80278,80279],{"class":74}," '3'",[30,80281,12624],{"class":321},[30,80283,80284,80286,80288,80290,80292,80294,80296,80298,80300,80302,80304],{"class":32,"line":33638},[30,80285,80181],{"class":321},[30,80287,367],{"class":317},[30,80289,80186],{"class":321},[30,80291,80189],{"class":36},[30,80293,322],{"class":321},[30,80295,79933],{"class":5398},[30,80297,79936],{"class":317},[30,80299,80198],{"class":321},[30,80301,1893],{"class":317},[30,80303,80262],{"class":40},[30,80305,328],{"class":321},[30,80307,80308],{"class":32,"line":33644},[30,80309,2711],{"class":321},[30,80311,80312],{"class":32,"line":33664},[30,80313,80314],{"class":379},"        \u002F\u002F 渲染函数\n",[30,80316,80317,80319],{"class":32,"line":33670},[30,80318,70546],{"class":36},[30,80320,52550],{"class":321},[30,80322,80323],{"class":32,"line":33676},[30,80324,52536],{"class":321},[30,80326,80327],{"class":32,"line":33682},[30,80328,2582],{"emptyLinePlaceholder":245},[30,80330,80331],{"class":32,"line":33699},[30,80332,33599],{"class":321},[30,80334,80335,80337,80339],{"class":32,"line":33705},[30,80336,52555],{"class":321},[30,80338,51951],{"class":51438},[30,80340,51445],{"class":321},[30,80342,80343,80345,80347],{"class":32,"line":33711},[30,80344,51923],{"class":321},[30,80346,51938],{"class":51438},[30,80348,51445],{"class":321},[30,80350,80351],{"class":32,"line":33717},[30,80352,2582],{"emptyLinePlaceholder":245},[30,80354,80355,80357,80359],{"class":32,"line":33723},[30,80356,51923],{"class":321},[30,80358,50773],{"class":51438},[30,80360,51445],{"class":321},[15,80362,80364],{"id":80363},"_410-深入了解对象","4.10 深入了解对象",[287,80366,80368],{"id":80367},"_4101-创建对象","4.10.1 创建对象",[157,80370,80371],{},[160,80372],{"alt":25,"src":80373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[157,80375,80376],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[287,80378,80380],{"id":80379},"_4102-构造函数","4.10.2 构造函数",[157,80382,80383,80386],{},[469,80384,80385],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[157,80388,80389,80392],{},[469,80390,80391],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[20,80394,80396],{"className":50771,"code":80395,"language":50773,"meta":25,"style":25},"\u003Cscript>\n\u002F\u002F例：\nfunction Pig(name,age,gender) {\n    this.name=name\n    this.age=age\n    this.gender=gender    \n}\n\u002F\u002F创建佩奇对象\nconst Peppa=new Pig('佩奇',6,'女')\n\u002F\u002F创建乔治对象\nconst George=new Pig('乔治',3,'男')\n\u003C\u002Fscript>\n",[27,80397,80398,80406,80411,80432,80445,80457,80469,80473,80478,80505,80510,80537],{"__ignoreMap":25},[30,80399,80400,80402,80404],{"class":32,"line":33},[30,80401,1230],{"class":321},[30,80403,51951],{"class":51438},[30,80405,51445],{"class":321},[30,80407,80408],{"class":32,"line":44},[30,80409,80410],{"class":379},"\u002F\u002F例：\n",[30,80412,80413,80415,80418,80420,80422,80424,80426,80428,80430],{"class":32,"line":52},[30,80414,54587],{"class":317},[30,80416,80417],{"class":36}," Pig",[30,80419,322],{"class":321},[30,80421,79948],{"class":5398},[30,80423,698],{"class":321},[30,80425,70359],{"class":5398},[30,80427,698],{"class":321},[30,80429,70376],{"class":5398},[30,80431,12624],{"class":321},[30,80433,80434,80437,80440,80442],{"class":32,"line":60},[30,80435,80436],{"class":40},"    this",[30,80438,80439],{"class":321},".name",[30,80441,367],{"class":317},[30,80443,80444],{"class":321},"name\n",[30,80446,80447,80449,80452,80454],{"class":32,"line":68},[30,80448,80436],{"class":40},[30,80450,80451],{"class":321},".age",[30,80453,367],{"class":317},[30,80455,80456],{"class":321},"age\n",[30,80458,80459,80461,80464,80466],{"class":32,"line":80},[30,80460,80436],{"class":40},[30,80462,80463],{"class":321},".gender",[30,80465,367],{"class":317},[30,80467,80468],{"class":321},"gender    \n",[30,80470,80471],{"class":32,"line":88},[30,80472,1751],{"class":321},[30,80474,80475],{"class":32,"line":96},[30,80476,80477],{"class":379},"\u002F\u002F创建佩奇对象\n",[30,80479,80480,80482,80485,80487,80489,80491,80494,80496,80498,80500,80503],{"class":32,"line":104},[30,80481,6974],{"class":317},[30,80483,80484],{"class":40}," Peppa",[30,80486,11899],{"class":317},[30,80488,80417],{"class":36},[30,80490,322],{"class":321},[30,80492,80493],{"class":74},"'佩奇'",[30,80495,698],{"class":321},[30,80497,664],{"class":40},[30,80499,698],{"class":321},[30,80501,80502],{"class":74},"'女'",[30,80504,328],{"class":321},[30,80506,80507],{"class":32,"line":112},[30,80508,80509],{"class":379},"\u002F\u002F创建乔治对象\n",[30,80511,80512,80514,80517,80519,80521,80523,80526,80528,80530,80532,80535],{"class":32,"line":123},[30,80513,6974],{"class":317},[30,80515,80516],{"class":40}," George",[30,80518,11899],{"class":317},[30,80520,80417],{"class":36},[30,80522,322],{"class":321},[30,80524,80525],{"class":74},"'乔治'",[30,80527,698],{"class":321},[30,80529,392],{"class":40},[30,80531,698],{"class":321},[30,80533,80534],{"class":74},"'男'",[30,80536,328],{"class":321},[30,80538,80539,80541,80543],{"class":32,"line":131},[30,80540,51923],{"class":321},[30,80542,51951],{"class":51438},[30,80544,51445],{"class":321},[157,80546,80547],{},[160,80548],{"alt":25,"src":80549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[157,80551,80552],{},[160,80553],{"alt":25,"src":80554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[157,80556,80557],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[157,80559,80560],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[157,80562,80563],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[157,80565,80566],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[157,80568,80569],{},"这里用等号是因为：对象.属性=值",[157,80571,80572],{},"①利用对象字面量创建对象",[157,80574,80575],{},"const o={",[157,80577,80578],{},"name:'pink'",[157,80580,80581],{},"} ②利用new Object创建对象",[157,80583,80584],{},"const o=new Object({name:'pink'})",[157,80586,80587],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[157,80589,80590],{},"构造函数创建对象的执行过程：",[157,80592,80593],{},[160,80594],{"alt":25,"src":80595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[287,80597,80599],{"id":80598},"_4103-实例成员","4.10.3 实例成员",[157,80601,80602],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[271,80604,80605,80608,80611],{},[150,80606,80607],{},"实例对象的属性和方法即为实例成员",[150,80609,80610],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[150,80612,80613],{},"构造函数创建的实例对象彼此独立互不影响",[287,80615,80617],{"id":80616},"_4104-静态成员","4.10.4 静态成员",[157,80619,80620],{},[160,80621],{"alt":25,"src":80622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[157,80624,80625],{},"静态成员有Date.now() Math.PI Math.random()",[157,80627,80628],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[157,80630,80631],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[157,80633,80634],{},"function Pig(name) n {",[157,80636,80637],{},"this.name=name",[157,80639,1266],{},[157,80641,80642],{},"Pig.eyes=2",[157,80644,80645],{},"Pig.sayHai=function () { console.log(this) }",[157,80647,80648],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[157,80650,80651],{},"console.log(Pig.eyes) \u002F\u002F2",[157,80653,11514],{},[271,80655,80656,80659,80662,80665,80668],{},[150,80657,80658],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[150,80660,80661],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[150,80663,80664],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[150,80666,80667],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[150,80669,80670],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[157,80672,80673],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[287,80675,80677],{"id":80676},"_4105-内置构造函数","4.10.5 内置构造函数",[157,80679,80680],{},"内置构造函数包含：",[157,80682,80683],{},[160,80684],{"alt":25,"src":80685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[157,80687,80688],{},[160,80689],{"alt":25,"src":80690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[157,80692,80693],{},"这些基本数据类型，js对他们进行了包装",[51951,80695,80696],{},"\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",[22180,80698,80700],{"id":80699},"_41051-object","4.10.5.1 Object",[157,80702,80703],{},"Object 是内置的构造函数，用于创建普通对象",[157,80705,80706],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[20,80708,80710],{"className":50771,"code":80709,"language":50773,"meta":25,"style":25},"const user=new Object({name:'小明',age:15})\n",[27,80711,80712],{"__ignoreMap":25},[30,80713,80714],{"class":32,"line":33},[30,80715,80709],{"class":321},[157,80717,80718],{},"三个常用的静态方法：",[23092,80720,80722],{"id":80721},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[157,80724,80725],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[157,80727,80728],{},[160,80729],{"alt":25,"src":80730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[157,80732,80733],{},[160,80734],{"alt":25,"src":80735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[20,80737,80739],{"className":53205,"code":80738,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,80740,80741,80749,80757,80762,80767,80772,80777,80782,80787,80795],{"__ignoreMap":25},[30,80742,80743,80745,80747],{"class":32,"line":33},[30,80744,1230],{"class":321},[30,80746,51938],{"class":51438},[30,80748,51445],{"class":321},[30,80750,80751,80753,80755],{"class":32,"line":44},[30,80752,52282],{"class":321},[30,80754,51951],{"class":51438},[30,80756,51445],{"class":321},[30,80758,80759],{"class":32,"line":52},[30,80760,80761],{"class":321},"    const o = { name: 'pink', age: 6 }\n",[30,80763,80764],{"class":32,"line":60},[30,80765,80766],{"class":321},"    \u002F\u002F 获得所有属性名\n",[30,80768,80769],{"class":32,"line":68},[30,80770,80771],{"class":321},"    const arr = Object.keys(o)\n",[30,80773,80774],{"class":32,"line":80},[30,80775,80776],{"class":321},"    console.log(arr)\n",[30,80778,80779],{"class":32,"line":88},[30,80780,80781],{"class":321},"    \u002F\u002F 获得所有属性值\n",[30,80783,80784],{"class":32,"line":96},[30,80785,80786],{"class":321},"    console.log(Object.values(o))\n",[30,80788,80789,80791,80793],{"class":32,"line":104},[30,80790,52555],{"class":321},[30,80792,51951],{"class":51438},[30,80794,51445],{"class":321},[30,80796,80797,80799,80801],{"class":32,"line":112},[30,80798,51923],{"class":321},[30,80800,51938],{"class":51438},[30,80802,51445],{"class":321},[23092,80804,80806],{"id":80805},"_410512-object-assign","4.10.5.1.2 Object. assign",[157,80808,80809],{},"Object.assign(oo,o)",[157,80811,80812],{},"后的东西添加给前 是追加",[157,80814,80815],{},[160,80816],{"alt":25,"src":80817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[157,80819,80820],{},[160,80821],{"alt":25,"src":80822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[20,80824,80826],{"className":53205,"code":80825,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n    const oo = {}\n    Object.assign(oo, o)\n    console.log(oo)\n    Object.assign(o, { gender: '女' })\n    console.log(o)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,80827,80828,80836,80844,80848,80852,80856,80860,80864,80868,80873,80878,80883,80888,80893,80901],{"__ignoreMap":25},[30,80829,80830,80832,80834],{"class":32,"line":33},[30,80831,1230],{"class":321},[30,80833,51938],{"class":51438},[30,80835,51445],{"class":321},[30,80837,80838,80840,80842],{"class":32,"line":44},[30,80839,52282],{"class":321},[30,80841,51951],{"class":51438},[30,80843,51445],{"class":321},[30,80845,80846],{"class":32,"line":52},[30,80847,80761],{"class":321},[30,80849,80850],{"class":32,"line":60},[30,80851,80766],{"class":321},[30,80853,80854],{"class":32,"line":68},[30,80855,80771],{"class":321},[30,80857,80858],{"class":32,"line":80},[30,80859,80776],{"class":321},[30,80861,80862],{"class":32,"line":88},[30,80863,80781],{"class":321},[30,80865,80866],{"class":32,"line":96},[30,80867,80786],{"class":321},[30,80869,80870],{"class":32,"line":104},[30,80871,80872],{"class":321},"    const oo = {}\n",[30,80874,80875],{"class":32,"line":112},[30,80876,80877],{"class":321},"    Object.assign(oo, o)\n",[30,80879,80880],{"class":32,"line":123},[30,80881,80882],{"class":321},"    console.log(oo)\n",[30,80884,80885],{"class":32,"line":131},[30,80886,80887],{"class":321},"    Object.assign(o, { gender: '女' })\n",[30,80889,80890],{"class":32,"line":142},[30,80891,80892],{"class":321},"    console.log(o)\n",[30,80894,80895,80897,80899],{"class":32,"line":1811},[30,80896,52555],{"class":321},[30,80898,51951],{"class":51438},[30,80900,51445],{"class":321},[30,80902,80903,80905,80907],{"class":32,"line":1825},[30,80904,51923],{"class":321},[30,80906,51938],{"class":51438},[30,80908,51445],{"class":321},[157,80910,80911],{},[160,80912],{"alt":25,"src":80913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22180,80915,80917],{"id":80916},"_41052-array","4.10.5.2 Array",[157,80919,80920],{},"Array 是内置的构造函数，用于创建数组",[157,80922,80923],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[20,80925,80927],{"className":50771,"code":80926,"language":50773,"meta":25,"style":25},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[27,80928,80929,80934],{"__ignoreMap":25},[30,80930,80931],{"class":32,"line":33},[30,80932,80933],{"class":321},"const arr=new Array(3,5)\n",[30,80935,80936],{"class":32,"line":44},[30,80937,80938],{"class":321},"console.log(arr)  \u002F\u002F[3,5]\n",[157,80940,80941],{},"Array的实例方法，这个方法是实例成员",[157,80943,80944],{},[160,80945],{"alt":25,"src":80946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23092,80948,80950],{"id":80949},"_410521-reduce","4.10.5.2.1 reduce",[157,80952,80953],{},[160,80954],{"alt":25,"src":80955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[20,80957,80959],{"className":53205,"code":80958,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,80960,80961,80969,80977,80982,80987,80992,80997,81001,81006,81011,81016,81020,81025,81030,81034,81039,81044,81049,81057],{"__ignoreMap":25},[30,80962,80963,80965,80967],{"class":32,"line":33},[30,80964,1230],{"class":321},[30,80966,51938],{"class":51438},[30,80968,51445],{"class":321},[30,80970,80971,80973,80975],{"class":32,"line":44},[30,80972,52282],{"class":321},[30,80974,51951],{"class":51438},[30,80976,51445],{"class":321},[30,80978,80979],{"class":32,"line":52},[30,80980,80981],{"class":321},"    const arr = [1, 5, 8]\n",[30,80983,80984],{"class":32,"line":60},[30,80985,80986],{"class":321},"    \u002F\u002F 1.没有初始值\n",[30,80988,80989],{"class":32,"line":68},[30,80990,80991],{"class":321},"    const total = arr.reduce(function (prev, current) {\n",[30,80993,80994],{"class":32,"line":80},[30,80995,80996],{"class":321},"      return prev + current\n",[30,80998,80999],{"class":32,"line":88},[30,81000,33599],{"class":321},[30,81002,81003],{"class":32,"line":96},[30,81004,81005],{"class":321},"    console.log(total)   \u002F\u002F14\n",[30,81007,81008],{"class":32,"line":104},[30,81009,81010],{"class":321},"    \u002F\u002F 2.有初始值\n",[30,81012,81013],{"class":32,"line":112},[30,81014,81015],{"class":321},"    const total1 = arr.reduce(function (prev, current) {\n",[30,81017,81018],{"class":32,"line":123},[30,81019,80996],{"class":321},[30,81021,81022],{"class":32,"line":131},[30,81023,81024],{"class":321},"    }, 10)\n",[30,81026,81027],{"class":32,"line":142},[30,81028,81029],{"class":321},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[30,81031,81032],{"class":32,"line":1811},[30,81033,2582],{"emptyLinePlaceholder":245},[30,81035,81036],{"class":32,"line":1825},[30,81037,81038],{"class":321},"    \u002F\u002F 3.箭头函数写法\n",[30,81040,81041],{"class":32,"line":1830},[30,81042,81043],{"class":321},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[30,81045,81046],{"class":32,"line":1836},[30,81047,81048],{"class":321},"    console.log(total2)   \u002F\u002F24\n",[30,81050,81051,81053,81055],{"class":32,"line":1857},[30,81052,52555],{"class":321},[30,81054,51951],{"class":51438},[30,81056,51445],{"class":321},[30,81058,81059,81061,81063],{"class":32,"line":1862},[30,81060,51923],{"class":321},[30,81062,51938],{"class":51438},[30,81064,51445],{"class":321},[157,81066,81067],{},"执行过程：",[271,81069,81070,81073,81076],{},[150,81071,81072],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[150,81074,81075],{},"每一次循环，把返回值给作为下一次循环的上一次值",[150,81077,81078],{},"如果有起始值，则起始值作为上一次值",[20,81080,81082],{"className":53205,"code":81081,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     1              5                    6\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     6              8                    14\n    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     10             1                     11\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     11             5                    16\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     16             8                    24\n    \u002F\u002F 有初始值时循环次数就是数组的长度\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,81083,81084,81092,81100,81104,81108,81112,81116,81120,81124,81129,81134,81139,81144,81149,81153,81157,81161,81165,81169,81173,81178,81182,81187,81191,81196,81201,81205,81209,81213,81221],{"__ignoreMap":25},[30,81085,81086,81088,81090],{"class":32,"line":33},[30,81087,1230],{"class":321},[30,81089,51938],{"class":51438},[30,81091,51445],{"class":321},[30,81093,81094,81096,81098],{"class":32,"line":44},[30,81095,52282],{"class":321},[30,81097,51951],{"class":51438},[30,81099,51445],{"class":321},[30,81101,81102],{"class":32,"line":52},[30,81103,80981],{"class":321},[30,81105,81106],{"class":32,"line":60},[30,81107,80986],{"class":321},[30,81109,81110],{"class":32,"line":68},[30,81111,80991],{"class":321},[30,81113,81114],{"class":32,"line":80},[30,81115,80996],{"class":321},[30,81117,81118],{"class":32,"line":88},[30,81119,33599],{"class":321},[30,81121,81122],{"class":32,"line":96},[30,81123,81005],{"class":321},[30,81125,81126],{"class":32,"line":104},[30,81127,81128],{"class":321},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[30,81130,81131],{"class":32,"line":112},[30,81132,81133],{"class":321},"    \u002F\u002F     1              5                    6\n",[30,81135,81136],{"class":32,"line":123},[30,81137,81138],{"class":321},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[30,81140,81141],{"class":32,"line":131},[30,81142,81143],{"class":321},"    \u002F\u002F     6              8                    14\n",[30,81145,81146],{"class":32,"line":142},[30,81147,81148],{"class":321},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[30,81150,81151],{"class":32,"line":1811},[30,81152,81010],{"class":321},[30,81154,81155],{"class":32,"line":1825},[30,81156,81015],{"class":321},[30,81158,81159],{"class":32,"line":1830},[30,81160,80996],{"class":321},[30,81162,81163],{"class":32,"line":1836},[30,81164,81024],{"class":321},[30,81166,81167],{"class":32,"line":1857},[30,81168,81029],{"class":321},[30,81170,81171],{"class":32,"line":1862},[30,81172,81128],{"class":321},[30,81174,81175],{"class":32,"line":1876},[30,81176,81177],{"class":321},"    \u002F\u002F     10             1                     11\n",[30,81179,81180],{"class":32,"line":1881},[30,81181,81138],{"class":321},[30,81183,81184],{"class":32,"line":1910},[30,81185,81186],{"class":321},"    \u002F\u002F     11             5                    16\n",[30,81188,81189],{"class":32,"line":1915},[30,81190,81138],{"class":321},[30,81192,81193],{"class":32,"line":1932},[30,81194,81195],{"class":321},"    \u002F\u002F     16             8                    24\n",[30,81197,81198],{"class":32,"line":1937},[30,81199,81200],{"class":321},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[30,81202,81203],{"class":32,"line":1942},[30,81204,81038],{"class":321},[30,81206,81207],{"class":32,"line":1947},[30,81208,81043],{"class":321},[30,81210,81211],{"class":32,"line":1961},[30,81212,81048],{"class":321},[30,81214,81215,81217,81219],{"class":32,"line":1966},[30,81216,52555],{"class":321},[30,81218,51951],{"class":51438},[30,81220,51445],{"class":321},[30,81222,81223,81225,81227],{"class":32,"line":2759},[30,81224,51923],{"class":321},[30,81226,51938],{"class":51438},[30,81228,51445],{"class":321},[23092,81230,81232],{"id":81231},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[157,81234,81235],{},[160,81236],{"alt":25,"src":81237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[20,81239,81241],{"className":53205,"code":81240,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    const arr = [\n      { name: '张三', salary: 10000 },\n      { name: '李四', salary: 10000 },\n      { name: '王五', salary: 10000 }\n    ]\n    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n    \u002F\u002F prev是累计值\n    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n    console.log(total)\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F    0       10000*1.3=13000       13000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  13000     10000*1.3=13000       26000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  26000     10000*1.3=13000       39000\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,81242,81243,81251,81259,81264,81269,81274,81279,81283,81288,81293,81298,81303,81308,81313,81317,81322,81326,81331,81339],{"__ignoreMap":25},[30,81244,81245,81247,81249],{"class":32,"line":33},[30,81246,1230],{"class":321},[30,81248,51938],{"class":51438},[30,81250,51445],{"class":321},[30,81252,81253,81255,81257],{"class":32,"line":44},[30,81254,52282],{"class":321},[30,81256,51951],{"class":51438},[30,81258,51445],{"class":321},[30,81260,81261],{"class":32,"line":52},[30,81262,81263],{"class":321},"    const arr = [\n",[30,81265,81266],{"class":32,"line":60},[30,81267,81268],{"class":321},"      { name: '张三', salary: 10000 },\n",[30,81270,81271],{"class":32,"line":68},[30,81272,81273],{"class":321},"      { name: '李四', salary: 10000 },\n",[30,81275,81276],{"class":32,"line":80},[30,81277,81278],{"class":321},"      { name: '王五', salary: 10000 }\n",[30,81280,81281],{"class":32,"line":88},[30,81282,53247],{"class":321},[30,81284,81285],{"class":32,"line":96},[30,81286,81287],{"class":321},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[30,81289,81290],{"class":32,"line":104},[30,81291,81292],{"class":321},"    \u002F\u002F prev是累计值\n",[30,81294,81295],{"class":32,"line":112},[30,81296,81297],{"class":321},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[30,81299,81300],{"class":32,"line":123},[30,81301,81302],{"class":321},"    console.log(total)\n",[30,81304,81305],{"class":32,"line":131},[30,81306,81307],{"class":321},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[30,81309,81310],{"class":32,"line":142},[30,81311,81312],{"class":321},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[30,81314,81315],{"class":32,"line":1811},[30,81316,81307],{"class":321},[30,81318,81319],{"class":32,"line":1825},[30,81320,81321],{"class":321},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[30,81323,81324],{"class":32,"line":1830},[30,81325,81307],{"class":321},[30,81327,81328],{"class":32,"line":1836},[30,81329,81330],{"class":321},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[30,81332,81333,81335,81337],{"class":32,"line":1857},[30,81334,52555],{"class":321},[30,81336,51951],{"class":51438},[30,81338,51445],{"class":321},[30,81340,81341,81343,81345],{"class":32,"line":1862},[30,81342,51923],{"class":321},[30,81344,51938],{"class":51438},[30,81346,51445],{"class":321},[23092,81348,81350],{"id":81349},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[157,81352,81353],{},[160,81354],{"alt":25,"src":81355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[157,81357,81358],{},[160,81359],{"alt":25,"src":81360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[271,81362,81363],{},[150,81364,81365],{},"find()",[157,81367,81368],{},"循环查找，找到第一个就ok",[157,81370,81371],{},[558,81372,81375],{"href":81373,"rel":81374},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24045],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[20,81377,81379],{"className":50771,"code":81378,"language":50773,"meta":25,"style":25},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[27,81380,81381,81386,81391],{"__ignoreMap":25},[30,81382,81383],{"class":32,"line":33},[30,81384,81385],{"class":321},"const array1 = [5, 12, 8, 130, 44]\n",[30,81387,81388],{"class":32,"line":44},[30,81389,81390],{"class":321},"const found = array1.find((element) => element > 10)\n",[30,81392,81393],{"class":32,"line":52},[30,81394,81395],{"class":321},"console.log(found)  \u002F\u002F12\n",[157,81397,81398,81400,81401,81406,81407,81410,81411,81413,81414,81419,81420,81422,81423,81425,81426,81428,81429],{},[27,81399,81365],{}," 方法是一个",[558,81402,81405],{"href":81403,"rel":81404},"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",[24045],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[27,81408,81409],{},"callbackFn"," 函数，直到 ",[27,81412,81409],{}," 返回一个",[558,81415,81418],{"href":81416,"rel":81417},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24045],"真值","。然后 ",[27,81421,81365],{}," 返回该元素并停止迭代数组。如果 ",[27,81424,81409],{}," 从未返回真值，则 ",[27,81427,81365],{}," 返回 ",[27,81430,81431],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[20,81433,81435],{"className":53205,"code":81434,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    const arr = ['red', 'blue', 'green']\n    const found = arr.find(item => item === 'pink')\n    console.log(found)   \u002F\u002F没有，输出undefined\n\n    \u002F\u002F 使用场景，用于查找数据\n    const arr1 = [\n      {\n        name: '小米',\n        price: 1999\n      },\n      {\n        name: '华为',\n        price: 3999\n      }\n    ]\n    \u002F\u002F 这小米这个对象，并且返回这个对象\n    \u002F\u002F const found1 = arr1.find(item => {\n    \u002F\u002F   if (item.name === '小米') {\n    \u002F\u002F     return item\n    \u002F\u002F   }\n    \u002F\u002F })\n    \u002F\u002F 另一种写法\n    const found1 = arr1.find(item => {\n      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n      return item.name = '小米'\n    })\n    console.log(found1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n",[27,81436,81437,81445,81453,81458,81463,81468,81472,81477,81482,81486,81491,81496,81500,81504,81509,81514,81518,81522,81527,81532,81537,81542,81547,81551,81556,81561,81566,81571,81575,81580,81588],{"__ignoreMap":25},[30,81438,81439,81441,81443],{"class":32,"line":33},[30,81440,1230],{"class":321},[30,81442,51938],{"class":51438},[30,81444,51445],{"class":321},[30,81446,81447,81449,81451],{"class":32,"line":44},[30,81448,52282],{"class":321},[30,81450,51951],{"class":51438},[30,81452,51445],{"class":321},[30,81454,81455],{"class":32,"line":52},[30,81456,81457],{"class":321},"    const arr = ['red', 'blue', 'green']\n",[30,81459,81460],{"class":32,"line":60},[30,81461,81462],{"class":321},"    const found = arr.find(item => item === 'pink')\n",[30,81464,81465],{"class":32,"line":68},[30,81466,81467],{"class":321},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[30,81469,81470],{"class":32,"line":80},[30,81471,2582],{"emptyLinePlaceholder":245},[30,81473,81474],{"class":32,"line":88},[30,81475,81476],{"class":321},"    \u002F\u002F 使用场景，用于查找数据\n",[30,81478,81479],{"class":32,"line":96},[30,81480,81481],{"class":321},"    const arr1 = [\n",[30,81483,81484],{"class":32,"line":104},[30,81485,79524],{"class":321},[30,81487,81488],{"class":32,"line":112},[30,81489,81490],{"class":321},"        name: '小米',\n",[30,81492,81493],{"class":32,"line":123},[30,81494,81495],{"class":321},"        price: 1999\n",[30,81497,81498],{"class":32,"line":131},[30,81499,78030],{"class":321},[30,81501,81502],{"class":32,"line":142},[30,81503,79524],{"class":321},[30,81505,81506],{"class":32,"line":1811},[30,81507,81508],{"class":321},"        name: '华为',\n",[30,81510,81511],{"class":32,"line":1825},[30,81512,81513],{"class":321},"        price: 3999\n",[30,81515,81516],{"class":32,"line":1830},[30,81517,52536],{"class":321},[30,81519,81520],{"class":32,"line":1836},[30,81521,53247],{"class":321},[30,81523,81524],{"class":32,"line":1857},[30,81525,81526],{"class":321},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[30,81528,81529],{"class":32,"line":1862},[30,81530,81531],{"class":321},"    \u002F\u002F const found1 = arr1.find(item => {\n",[30,81533,81534],{"class":32,"line":1876},[30,81535,81536],{"class":321},"    \u002F\u002F   if (item.name === '小米') {\n",[30,81538,81539],{"class":32,"line":1881},[30,81540,81541],{"class":321},"    \u002F\u002F     return item\n",[30,81543,81544],{"class":32,"line":1910},[30,81545,81546],{"class":321},"    \u002F\u002F   }\n",[30,81548,81549],{"class":32,"line":1915},[30,81550,63428],{"class":321},[30,81552,81553],{"class":32,"line":1932},[30,81554,81555],{"class":321},"    \u002F\u002F 另一种写法\n",[30,81557,81558],{"class":32,"line":1937},[30,81559,81560],{"class":321},"    const found1 = arr1.find(item => {\n",[30,81562,81563],{"class":32,"line":1942},[30,81564,81565],{"class":321},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[30,81567,81568],{"class":32,"line":1947},[30,81569,81570],{"class":321},"      return item.name = '小米'\n",[30,81572,81573],{"class":32,"line":1961},[30,81574,33599],{"class":321},[30,81576,81577],{"class":32,"line":1966},[30,81578,81579],{"class":321},"    console.log(found1)\n",[30,81581,81582,81584,81586],{"class":32,"line":2759},[30,81583,52555],{"class":321},[30,81585,51951],{"class":51438},[30,81587,51445],{"class":321},[30,81589,81590,81592,81594],{"class":32,"line":2773},[30,81591,51923],{"class":321},[30,81593,51938],{"class":51438},[30,81595,51445],{"class":321},[157,81597,81598],{},[160,81599],{"alt":25,"src":81600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[157,81602,81603],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[271,81605,81606],{"start":44},[150,81607,81608],{},"every()返回的是布尔值",[157,81610,81611],{},[558,81612,81615],{"href":81613,"rel":81614},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24045],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[157,81617,81618],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[157,81620,81621],{},"some是只有有一个就没问题",[157,81623,81624],{},"every是必须全是才行",[20,81626,81630],{"className":81627,"code":81628,"language":81629,"meta":25,"style":25},"language-sql shiki shiki-themes github-light github-dark","function isBigEnough(element, index, array) {\n  return element >= 10;\n}\n[12, 5, 8, 130, 44].every(isBigEnough); \u002F\u002F false\n[12, 54, 18, 130, 44].every(isBigEnough); \u002F\u002F true\n","sql",[27,81631,81632,81648,81662,81666,81675],{"__ignoreMap":25},[30,81633,81634,81636,81639,81641,81643,81646],{"class":32,"line":33},[30,81635,54587],{"class":317},[30,81637,81638],{"class":321}," isBigEnough(element, ",[30,81640,74196],{"class":317},[30,81642,12617],{"class":321},[30,81644,81645],{"class":317},"array",[30,81647,12624],{"class":321},[30,81649,81650,81653,81656,81658,81660],{"class":32,"line":44},[30,81651,81652],{"class":317},"  return",[30,81654,81655],{"class":321}," element ",[30,81657,1893],{"class":317},[30,81659,2220],{"class":40},[30,81661,1480],{"class":321},[30,81663,81664],{"class":32,"line":52},[30,81665,1751],{"class":321},[30,81667,81668,81671,81673],{"class":32,"line":60},[30,81669,81670],{"class":321},"[12, 5, 8, 130, 44].every(isBigEnough); ",[30,81672,33467],{"class":317},[30,81674,54654],{"class":321},[30,81676,81677,81680,81682],{"class":32,"line":68},[30,81678,81679],{"class":321},"[12, 54, 18, 130, 44].every(isBigEnough); ",[30,81681,33467],{"class":317},[30,81683,58078],{"class":321},[20,81685,81687],{"className":53205,"code":81686,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 20, 30]\n    const flag = arr.every(item => item >= 10)\n    console.log(flag)    \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,81688,81689,81697,81705,81710,81714,81719,81724,81732],{"__ignoreMap":25},[30,81690,81691,81693,81695],{"class":32,"line":33},[30,81692,1230],{"class":321},[30,81694,51938],{"class":51438},[30,81696,51445],{"class":321},[30,81698,81699,81701,81703],{"class":32,"line":44},[30,81700,52282],{"class":321},[30,81702,51951],{"class":51438},[30,81704,51445],{"class":321},[30,81706,81707],{"class":32,"line":52},[30,81708,81709],{"class":321},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[30,81711,81712],{"class":32,"line":60},[30,81713,78460],{"class":321},[30,81715,81716],{"class":32,"line":68},[30,81717,81718],{"class":321},"    const flag = arr.every(item => item >= 10)\n",[30,81720,81721],{"class":32,"line":80},[30,81722,81723],{"class":321},"    console.log(flag)    \u002F\u002Ftrue\n",[30,81725,81726,81728,81730],{"class":32,"line":88},[30,81727,52555],{"class":321},[30,81729,51951],{"class":51438},[30,81731,51445],{"class":321},[30,81733,81734,81736,81738],{"class":32,"line":96},[30,81735,51923],{"class":321},[30,81737,51938],{"class":51438},[30,81739,51445],{"class":321},[20,81741,81743],{"className":53205,"code":81742,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 0, 5]\n    const flag = arr.some(item => item >= 10)\n    console.log(flag)   \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,81744,81745,81753,81761,81765,81770,81775,81780,81788],{"__ignoreMap":25},[30,81746,81747,81749,81751],{"class":32,"line":33},[30,81748,1230],{"class":321},[30,81750,51938],{"class":51438},[30,81752,51445],{"class":321},[30,81754,81755,81757,81759],{"class":32,"line":44},[30,81756,52282],{"class":321},[30,81758,51951],{"class":51438},[30,81760,51445],{"class":321},[30,81762,81763],{"class":32,"line":52},[30,81764,81709],{"class":321},[30,81766,81767],{"class":32,"line":60},[30,81768,81769],{"class":321},"    const arr = [10, 0, 5]\n",[30,81771,81772],{"class":32,"line":68},[30,81773,81774],{"class":321},"    const flag = arr.some(item => item >= 10)\n",[30,81776,81777],{"class":32,"line":80},[30,81778,81779],{"class":321},"    console.log(flag)   \u002F\u002Ftrue\n",[30,81781,81782,81784,81786],{"class":32,"line":88},[30,81783,52555],{"class":321},[30,81785,51951],{"class":51438},[30,81787,51445],{"class":321},[30,81789,81790,81792,81794],{"class":32,"line":96},[30,81791,51923],{"class":321},[30,81793,51938],{"class":51438},[30,81795,51445],{"class":321},[23092,81797,81799],{"id":81798},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[157,81801,81802],{},[160,81803],{"alt":25,"src":81804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[20,81806,81808],{"className":50771,"code":81807,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    div {\n      width: 200px;\n      height: 40px;\n      line-height: 40px;\n      font: 12px;\n      text-align: center;\n      background-color: pink;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const spec = { size: '40cm*40cm', color: '黑色' }\n    \u002F\u002F const arr = Object.values(spec)\n    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n    document.querySelector('div').innerHTML = Object.values(spec).join('\u002F')\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,81809,81810,81820,81834,81838,81846,81860,81880,81892,81900,81907,81919,81931,81943,81955,81965,81975,81979,81987,81995,81999,82007,82019,82027,82049,82054,82059,82092,82100,82108,82112],{"__ignoreMap":25},[30,81811,81812,81814,81816,81818],{"class":32,"line":33},[30,81813,51435],{"class":321},[30,81815,51439],{"class":51438},[30,81817,51442],{"class":36},[30,81819,51445],{"class":321},[30,81821,81822,81824,81826,81828,81830,81832],{"class":32,"line":44},[30,81823,1230],{"class":321},[30,81825,50773],{"class":51438},[30,81827,51454],{"class":36},[30,81829,367],{"class":321},[30,81831,51459],{"class":74},[30,81833,51445],{"class":321},[30,81835,81836],{"class":32,"line":52},[30,81837,2582],{"emptyLinePlaceholder":245},[30,81839,81840,81842,81844],{"class":32,"line":60},[30,81841,1230],{"class":321},[30,81843,51472],{"class":51438},[30,81845,51445],{"class":321},[30,81847,81848,81850,81852,81854,81856,81858],{"class":32,"line":68},[30,81849,52282],{"class":321},[30,81851,51482],{"class":51438},[30,81853,51485],{"class":36},[30,81855,367],{"class":321},[30,81857,51490],{"class":74},[30,81859,51445],{"class":321},[30,81861,81862,81864,81866,81868,81870,81872,81874,81876,81878],{"class":32,"line":80},[30,81863,52282],{"class":321},[30,81865,51482],{"class":51438},[30,81867,15102],{"class":36},[30,81869,367],{"class":321},[30,81871,51529],{"class":74},[30,81873,51509],{"class":36},[30,81875,367],{"class":321},[30,81877,51536],{"class":74},[30,81879,51445],{"class":321},[30,81881,81882,81884,81886,81888,81890],{"class":32,"line":88},[30,81883,52282],{"class":321},[30,81885,51545],{"class":51438},[30,81887,51548],{"class":321},[30,81889,51545],{"class":51438},[30,81891,51445],{"class":321},[30,81893,81894,81896,81898],{"class":32,"line":96},[30,81895,52282],{"class":321},[30,81897,234],{"class":51438},[30,81899,51445],{"class":321},[30,81901,81902,81905],{"class":32,"line":104},[30,81903,81904],{"class":51438},"    div",[30,81906,15754],{"class":321},[30,81908,81909,81911,81913,81915,81917],{"class":32,"line":112},[30,81910,54909],{"class":40},[30,81912,51575],{"class":321},[30,81914,1905],{"class":40},[30,81916,51630],{"class":317},[30,81918,1480],{"class":321},[30,81920,81921,81923,81925,81927,81929],{"class":32,"line":123},[30,81922,54923],{"class":40},[30,81924,51575],{"class":321},[30,81926,721],{"class":40},[30,81928,51630],{"class":317},[30,81930,1480],{"class":321},[30,81932,81933,81935,81937,81939,81941],{"class":32,"line":131},[30,81934,57497],{"class":40},[30,81936,51575],{"class":321},[30,81938,721],{"class":40},[30,81940,51630],{"class":317},[30,81942,1480],{"class":321},[30,81944,81945,81947,81949,81951,81953],{"class":32,"line":142},[30,81946,65271],{"class":40},[30,81948,51575],{"class":321},[30,81950,818],{"class":40},[30,81952,51630],{"class":317},[30,81954,1480],{"class":321},[30,81956,81957,81959,81961,81963],{"class":32,"line":1811},[30,81958,57424],{"class":40},[30,81960,51575],{"class":321},[30,81962,51730],{"class":40},[30,81964,1480],{"class":321},[30,81966,81967,81969,81971,81973],{"class":32,"line":1825},[30,81968,55022],{"class":40},[30,81970,51575],{"class":321},[30,81972,51783],{"class":40},[30,81974,1480],{"class":321},[30,81976,81977],{"class":32,"line":1830},[30,81978,2369],{"class":321},[30,81980,81981,81983,81985],{"class":32,"line":1836},[30,81982,52555],{"class":321},[30,81984,234],{"class":51438},[30,81986,51445],{"class":321},[30,81988,81989,81991,81993],{"class":32,"line":1857},[30,81990,51923],{"class":321},[30,81992,51472],{"class":51438},[30,81994,51445],{"class":321},[30,81996,81997],{"class":32,"line":1862},[30,81998,2582],{"emptyLinePlaceholder":245},[30,82000,82001,82003,82005],{"class":32,"line":1876},[30,82002,1230],{"class":321},[30,82004,51938],{"class":51438},[30,82006,51445],{"class":321},[30,82008,82009,82011,82013,82015,82017],{"class":32,"line":1881},[30,82010,52282],{"class":321},[30,82012,51749],{"class":51438},[30,82014,55452],{"class":321},[30,82016,51749],{"class":51438},[30,82018,51445],{"class":321},[30,82020,82021,82023,82025],{"class":32,"line":1910},[30,82022,52282],{"class":321},[30,82024,51951],{"class":51438},[30,82026,51445],{"class":321},[30,82028,82029,82031,82034,82036,82039,82042,82044,82047],{"class":32,"line":1915},[30,82030,11403],{"class":317},[30,82032,82033],{"class":40}," spec",[30,82035,13746],{"class":317},[30,82037,82038],{"class":321}," { size: ",[30,82040,82041],{"class":74},"'40cm*40cm'",[30,82043,55602],{"class":321},[30,82045,82046],{"class":74},"'黑色'",[30,82048,55742],{"class":321},[30,82050,82051],{"class":32,"line":1932},[30,82052,82053],{"class":379},"    \u002F\u002F const arr = Object.values(spec)\n",[30,82055,82056],{"class":32,"line":1937},[30,82057,82058],{"class":379},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[30,82060,82061,82063,82065,82067,82070,82072,82074,82077,82080,82083,82085,82087,82090],{"class":32,"line":1942},[30,82062,52545],{"class":321},[30,82064,54537],{"class":36},[30,82066,322],{"class":321},[30,82068,82069],{"class":74},"'div'",[30,82071,74387],{"class":321},[30,82073,367],{"class":317},[30,82075,82076],{"class":321}," Object.",[30,82078,82079],{"class":36},"values",[30,82081,82082],{"class":321},"(spec).",[30,82084,74361],{"class":36},[30,82086,322],{"class":321},[30,82088,82089],{"class":74},"'\u002F'",[30,82091,328],{"class":321},[30,82093,82094,82096,82098],{"class":32,"line":1947},[30,82095,52555],{"class":321},[30,82097,51951],{"class":51438},[30,82099,51445],{"class":321},[30,82101,82102,82104,82106],{"class":32,"line":1961},[30,82103,51923],{"class":321},[30,82105,51938],{"class":51438},[30,82107,51445],{"class":321},[30,82109,82110],{"class":32,"line":1966},[30,82111,2582],{"emptyLinePlaceholder":245},[30,82113,82114,82116,82118],{"class":32,"line":2759},[30,82115,51923],{"class":321},[30,82117,50773],{"class":51438},[30,82119,51445],{"class":321},[157,82121,82122],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23092,82124,82126],{"id":82125},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[157,82128,82129],{},"静态方法，将伪数组转换为真数组",[157,82131,82132],{},[160,82133],{"alt":25,"src":82134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[20,82136,82138],{"className":53205,"code":82137,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cul>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n  \u003C\u002Ful>\n  \u003Cscript>\n    const lis = document.querySelectorAll('li')\n    const liss = Array.from(lis)\n    liss.pop()\n    console.log(liss)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,82139,82140,82148,82156,82168,82180,82192,82200,82208,82213,82218,82223,82228,82236],{"__ignoreMap":25},[30,82141,82142,82144,82146],{"class":32,"line":33},[30,82143,1230],{"class":321},[30,82145,51938],{"class":51438},[30,82147,51445],{"class":321},[30,82149,82150,82152,82154],{"class":32,"line":44},[30,82151,52282],{"class":321},[30,82153,147],{"class":51438},[30,82155,51445],{"class":321},[30,82157,82158,82160,82162,82164,82166],{"class":32,"line":52},[30,82159,51479],{"class":321},[30,82161,150],{"class":51438},[30,82163,55452],{"class":321},[30,82165,150],{"class":51438},[30,82167,51445],{"class":321},[30,82169,82170,82172,82174,82176,82178],{"class":32,"line":60},[30,82171,51479],{"class":321},[30,82173,150],{"class":51438},[30,82175,55452],{"class":321},[30,82177,150],{"class":51438},[30,82179,51445],{"class":321},[30,82181,82182,82184,82186,82188,82190],{"class":32,"line":68},[30,82183,51479],{"class":321},[30,82185,150],{"class":51438},[30,82187,55452],{"class":321},[30,82189,150],{"class":51438},[30,82191,51445],{"class":321},[30,82193,82194,82196,82198],{"class":32,"line":80},[30,82195,52555],{"class":321},[30,82197,147],{"class":51438},[30,82199,51445],{"class":321},[30,82201,82202,82204,82206],{"class":32,"line":88},[30,82203,52282],{"class":321},[30,82205,51951],{"class":51438},[30,82207,51445],{"class":321},[30,82209,82210],{"class":32,"line":96},[30,82211,82212],{"class":321},"    const lis = document.querySelectorAll('li')\n",[30,82214,82215],{"class":32,"line":104},[30,82216,82217],{"class":321},"    const liss = Array.from(lis)\n",[30,82219,82220],{"class":32,"line":112},[30,82221,82222],{"class":321},"    liss.pop()\n",[30,82224,82225],{"class":32,"line":123},[30,82226,82227],{"class":321},"    console.log(liss)\n",[30,82229,82230,82232,82234],{"class":32,"line":131},[30,82231,52555],{"class":321},[30,82233,51951],{"class":51438},[30,82235,51445],{"class":321},[30,82237,82238,82240,82242],{"class":32,"line":142},[30,82239,51923],{"class":321},[30,82241,51938],{"class":51438},[30,82243,51445],{"class":321},[157,82245,82246],{},[160,82247],{"alt":25,"src":82248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22180,82250,82252],{"id":82251},"_41053-string","4.10.5.3 String",[157,82254,82255],{},[160,82256],{"alt":25,"src":82257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23092,82259,82261],{"id":82260},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[20,82263,82265],{"className":53205,"code":82264,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 把字符串转化为数组\n    const str = 'pink,red'\n    const arr = str.split(',')\n    console.log(arr)\n    const str1 = '2025-8-25'\n    const arr1 = str1.split('-')\n    console.log(arr1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,82266,82267,82275,82283,82288,82293,82298,82302,82307,82312,82317,82325],{"__ignoreMap":25},[30,82268,82269,82271,82273],{"class":32,"line":33},[30,82270,1230],{"class":321},[30,82272,51938],{"class":51438},[30,82274,51445],{"class":321},[30,82276,82277,82279,82281],{"class":32,"line":44},[30,82278,52282],{"class":321},[30,82280,51951],{"class":51438},[30,82282,51445],{"class":321},[30,82284,82285],{"class":32,"line":52},[30,82286,82287],{"class":321},"    \u002F\u002F 把字符串转化为数组\n",[30,82289,82290],{"class":32,"line":60},[30,82291,82292],{"class":321},"    const str = 'pink,red'\n",[30,82294,82295],{"class":32,"line":68},[30,82296,82297],{"class":321},"    const arr = str.split(',')\n",[30,82299,82300],{"class":32,"line":80},[30,82301,80776],{"class":321},[30,82303,82304],{"class":32,"line":88},[30,82305,82306],{"class":321},"    const str1 = '2025-8-25'\n",[30,82308,82309],{"class":32,"line":96},[30,82310,82311],{"class":321},"    const arr1 = str1.split('-')\n",[30,82313,82314],{"class":32,"line":104},[30,82315,82316],{"class":321},"    console.log(arr1)\n",[30,82318,82319,82321,82323],{"class":32,"line":112},[30,82320,52555],{"class":321},[30,82322,51951],{"class":51438},[30,82324,51445],{"class":321},[30,82326,82327,82329,82331],{"class":32,"line":123},[30,82328,51923],{"class":321},[30,82330,51938],{"class":51438},[30,82332,51445],{"class":321},[23092,82334,82336],{"id":82335},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[157,82338,5363],{},[157,82340,82341],{},"substring(indexStart)",[157,82343,82344],{},"substring(indexStart, indexEnd)",[147,82346,82347,82358,82370,82380],{},[150,82348,82349,82350,82353,82354,82357],{},"如果省略了 ",[27,82351,82352],{},"indexEnd","，则 ",[27,82355,82356],{},"substring()"," 提取字符直到字符串的末尾",[150,82359,82360,82361,82364,82365,82353,82367,82369],{},"如果 ",[27,82362,82363],{},"indexStart"," 等于 ",[27,82366,82352],{},[27,82368,82356],{}," 返回一个空字符串",[150,82371,82360,82372,82374,82375,82353,82377,82379],{},[27,82373,82363],{}," 大于 ",[27,82376,82352],{},[27,82378,82356],{}," 的效果就像交换了这两个参数一样",[150,82381,82382],{},"结束的索引号不包含想要截取的部分",[20,82384,82386],{"className":81627,"code":82385,"language":81629,"meta":25,"style":25},"const anyString = \"Mozilla\";\n\nconsole.log(anyString.substring(0, 1))  \u002F\u002F 'M'\nconsole.log(anyString.substring(1, 0))  \u002F\u002F 'M'\n\nconsole.log(anyString.substring(0, 6))  \u002F\u002F 'Mozill'\n\nconsole.log(anyString.substring(4))  \u002F\u002F 'lla'\nconsole.log(anyString.substring(4, 7))   \u002F\u002F 'lla'\nconsole.log(anyString.substring(7, 4))  \u002F\u002F 'lla'\n\nconsole.log(anyString.substring(0, 7))  \u002F\u002F 'Mozilla'\nconsole.log(anyString.substring(0, 10))  \u002F\u002F 'Mozilla'\n",[27,82387,82388,82400,82404,82438,82468,82472,82503,82507,82534,82564,82594,82598,82629],{"__ignoreMap":25},[30,82389,82390,82393,82395,82398],{"class":32,"line":33},[30,82391,82392],{"class":321},"const anyString ",[30,82394,367],{"class":317},[30,82396,82397],{"class":74}," \"Mozilla\"",[30,82399,1480],{"class":321},[30,82401,82402],{"class":32,"line":44},[30,82403,2582],{"emptyLinePlaceholder":245},[30,82405,82406,82409,82411,82413,82415,82418,82420,82423,82425,82427,82429,82431,82433,82435],{"class":32,"line":52},[30,82407,82408],{"class":40},"console",[30,82410,878],{"class":321},[30,82412,58385],{"class":40},[30,82414,322],{"class":321},[30,82416,82417],{"class":40},"anyString",[30,82419,878],{"class":321},[30,82421,82422],{"class":40},"substring",[30,82424,322],{"class":321},[30,82426,511],{"class":40},[30,82428,12617],{"class":321},[30,82430,537],{"class":40},[30,82432,75391],{"class":321},[30,82434,33467],{"class":317},[30,82436,82437],{"class":74}," 'M'\n",[30,82439,82440,82442,82444,82446,82448,82450,82452,82454,82456,82458,82460,82462,82464,82466],{"class":32,"line":60},[30,82441,82408],{"class":40},[30,82443,878],{"class":321},[30,82445,58385],{"class":40},[30,82447,322],{"class":321},[30,82449,82417],{"class":40},[30,82451,878],{"class":321},[30,82453,82422],{"class":40},[30,82455,322],{"class":321},[30,82457,537],{"class":40},[30,82459,12617],{"class":321},[30,82461,511],{"class":40},[30,82463,75391],{"class":321},[30,82465,33467],{"class":317},[30,82467,82437],{"class":74},[30,82469,82470],{"class":32,"line":68},[30,82471,2582],{"emptyLinePlaceholder":245},[30,82473,82474,82476,82478,82480,82482,82484,82486,82488,82490,82492,82494,82496,82498,82500],{"class":32,"line":80},[30,82475,82408],{"class":40},[30,82477,878],{"class":321},[30,82479,58385],{"class":40},[30,82481,322],{"class":321},[30,82483,82417],{"class":40},[30,82485,878],{"class":321},[30,82487,82422],{"class":40},[30,82489,322],{"class":321},[30,82491,511],{"class":40},[30,82493,12617],{"class":321},[30,82495,664],{"class":40},[30,82497,75391],{"class":321},[30,82499,33467],{"class":317},[30,82501,82502],{"class":74}," 'Mozill'\n",[30,82504,82505],{"class":32,"line":88},[30,82506,2582],{"emptyLinePlaceholder":245},[30,82508,82509,82511,82513,82515,82517,82519,82521,82523,82525,82527,82529,82531],{"class":32,"line":96},[30,82510,82408],{"class":40},[30,82512,878],{"class":321},[30,82514,58385],{"class":40},[30,82516,322],{"class":321},[30,82518,82417],{"class":40},[30,82520,878],{"class":321},[30,82522,82422],{"class":40},[30,82524,322],{"class":321},[30,82526,613],{"class":40},[30,82528,75391],{"class":321},[30,82530,33467],{"class":317},[30,82532,82533],{"class":74}," 'lla'\n",[30,82535,82536,82538,82540,82542,82544,82546,82548,82550,82552,82554,82556,82558,82560,82562],{"class":32,"line":104},[30,82537,82408],{"class":40},[30,82539,878],{"class":321},[30,82541,58385],{"class":40},[30,82543,322],{"class":321},[30,82545,82417],{"class":40},[30,82547,878],{"class":321},[30,82549,82422],{"class":40},[30,82551,322],{"class":321},[30,82553,613],{"class":40},[30,82555,12617],{"class":321},[30,82557,689],{"class":40},[30,82559,75447],{"class":321},[30,82561,33467],{"class":317},[30,82563,82533],{"class":74},[30,82565,82566,82568,82570,82572,82574,82576,82578,82580,82582,82584,82586,82588,82590,82592],{"class":32,"line":112},[30,82567,82408],{"class":40},[30,82569,878],{"class":321},[30,82571,58385],{"class":40},[30,82573,322],{"class":321},[30,82575,82417],{"class":40},[30,82577,878],{"class":321},[30,82579,82422],{"class":40},[30,82581,322],{"class":321},[30,82583,689],{"class":40},[30,82585,12617],{"class":321},[30,82587,613],{"class":40},[30,82589,75391],{"class":321},[30,82591,33467],{"class":317},[30,82593,82533],{"class":74},[30,82595,82596],{"class":32,"line":123},[30,82597,2582],{"emptyLinePlaceholder":245},[30,82599,82600,82602,82604,82606,82608,82610,82612,82614,82616,82618,82620,82622,82624,82626],{"class":32,"line":131},[30,82601,82408],{"class":40},[30,82603,878],{"class":321},[30,82605,58385],{"class":40},[30,82607,322],{"class":321},[30,82609,82417],{"class":40},[30,82611,878],{"class":321},[30,82613,82422],{"class":40},[30,82615,322],{"class":321},[30,82617,511],{"class":40},[30,82619,12617],{"class":321},[30,82621,689],{"class":40},[30,82623,75391],{"class":321},[30,82625,33467],{"class":317},[30,82627,82628],{"class":74}," 'Mozilla'\n",[30,82630,82631,82633,82635,82637,82639,82641,82643,82645,82647,82649,82651,82653,82655,82657],{"class":32,"line":142},[30,82632,82408],{"class":40},[30,82634,878],{"class":321},[30,82636,58385],{"class":40},[30,82638,322],{"class":321},[30,82640,82417],{"class":40},[30,82642,878],{"class":321},[30,82644,82422],{"class":40},[30,82646,322],{"class":321},[30,82648,511],{"class":40},[30,82650,12617],{"class":321},[30,82652,766],{"class":40},[30,82654,75391],{"class":321},[30,82656,33467],{"class":317},[30,82658,82628],{"class":74},[23092,82660,82662],{"id":82661},"_410533-startswith","4.10.5.3.3 startsWith",[157,82664,82665,82668,82669,82674,82675,82677,82678],{},[27,82666,82667],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[469,82670,82671],{},[27,82672,82673],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[27,82676,1549],{}," 或 ",[27,82679,66158],{},[20,82681,82683],{"className":77633,"code":82682,"language":77635,"meta":25,"style":25},"const str1 = \"Saturday night plans\"\nconsole.log(str1.startsWith(\"Sat\"))\n\u002F\u002F Expected output: true\nconsole.log(str1.startsWith(\"Sat\", 3))\n\u002F\u002F Expected output: false\n",[27,82684,82685,82697,82716,82721,82741],{"__ignoreMap":25},[30,82686,82687,82689,82692,82694],{"class":32,"line":33},[30,82688,6974],{"class":317},[30,82690,82691],{"class":321}," str1 ",[30,82693,367],{"class":317},[30,82695,82696],{"class":74}," \"Saturday night plans\"\n",[30,82698,82699,82701,82703,82706,82709,82711,82714],{"class":32,"line":44},[30,82700,77670],{"class":321},[30,82702,58385],{"class":36},[30,82704,82705],{"class":321},"(str1.",[30,82707,82708],{"class":36},"startsWith",[30,82710,322],{"class":321},[30,82712,82713],{"class":74},"\"Sat\"",[30,82715,30635],{"class":321},[30,82717,82718],{"class":32,"line":52},[30,82719,82720],{"class":379},"\u002F\u002F Expected output: true\n",[30,82722,82723,82725,82727,82729,82731,82733,82735,82737,82739],{"class":32,"line":60},[30,82724,77670],{"class":321},[30,82726,58385],{"class":36},[30,82728,82705],{"class":321},[30,82730,82708],{"class":36},[30,82732,322],{"class":321},[30,82734,82713],{"class":74},[30,82736,12617],{"class":321},[30,82738,392],{"class":40},[30,82740,30635],{"class":321},[30,82742,82743],{"class":32,"line":68},[30,82744,82745],{"class":379},"\u002F\u002F Expected output: false\n",[20,82747,82749],{"className":50771,"code":82748,"language":50773,"meta":25,"style":25},"startsWith(searchString)\nstartsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n\nconst str3 = 'pink老师上课中'\nconsole.log(str3.startsWith('pink'))   \u002F\u002Ftrue\nconsole.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[27,82750,82751,82756,82761,82765,82770,82775],{"__ignoreMap":25},[30,82752,82753],{"class":32,"line":33},[30,82754,82755],{"class":321},"startsWith(searchString)\n",[30,82757,82758],{"class":32,"line":44},[30,82759,82760],{"class":321},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[30,82762,82763],{"class":32,"line":52},[30,82764,2582],{"emptyLinePlaceholder":245},[30,82766,82767],{"class":32,"line":60},[30,82768,82769],{"class":321},"const str3 = 'pink老师上课中'\n",[30,82771,82772],{"class":32,"line":68},[30,82773,82774],{"class":321},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[30,82776,82777],{"class":32,"line":80},[30,82778,82779],{"class":321},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23092,82781,82783],{"id":82782},"_410534-includes","4.10.5.3.4 includes",[157,82785,82786],{},"includes(searchString) includes(searchString, position)",[271,82788,82789],{},[150,82790,82791],{},"searchString:",[157,82793,82794,82795,82797,82798,82803,82804,82809,82810,21682,82813,82816,82817,82820],{},"一个要在 ",[27,82796,1489],{}," 中查找的字符串。",[558,82799,82802],{"href":82800,"rel":82801},"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",[24045],"不能是正则表达式","。所有非正则表达式的值都会被",[558,82805,82808],{"href":82806,"rel":82807},"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",[24045],"强制转换为字符串","，因此如果该参数被省略或传入 ",[27,82811,82812],{},"undefined",[27,82814,82815],{},"includes()"," 方法会在字符串中搜索 ",[27,82818,82819],{},"\"undefined\"","，这通常不是你想要的",[271,82822,82823],{"start":44},[150,82824,82825,1179],{},[27,82826,82827],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[157,82829,82830,82831,82834,82835],{},"在字符串中开始搜索 ",[27,82832,82833],{},"searchString"," 的位置。默认值为 ",[27,82836,511],{},[271,82838,82839],{"start":52},[150,82840,82841],{},"返回值：",[157,82843,82844,82845,82847,82848,82852,82853],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[27,82846,82833],{}," 为空字符串的情况），则返回 ",[469,82849,82850],{},[27,82851,1549],{}," ，否则返回 ",[469,82854,82855],{},[27,82856,66158],{},[271,82858,82859],{"start":60},[150,82860,82861],{},"异常：",[157,82863,82360,82864,13977,82866,82870],{},[27,82865,82833],{},[558,82867,82869],{"href":82800,"rel":82868},[24045],"是一个正则表达式","，则会抛出",[157,82872,82873],{},"只要是有就是true，不需要非得以谁开头结尾",[20,82875,82877],{"className":77633,"code":82876,"language":77635,"meta":25,"style":25},"const str = \"To be, or not to be, that is the question.\"\nconsole.log(str.includes(\"To be\"))  \u002F\u002F true\nconsole.log(str.includes(\"question\"))  \u002F\u002F true\nconsole.log(str.includes(\"nonexistent\"))  \u002F\u002F false\nconsole.log(str.includes(\"To be\", 1))  \u002F\u002F false\nconsole.log(str.includes(\"TO BE\"))  \u002F\u002F false\nconsole.log(str.includes(\"\"))  \u002F\u002F true\n",[27,82878,82879,82890,82913,82932,82952,82974,82993],{"__ignoreMap":25},[30,82880,82881,82883,82885,82887],{"class":32,"line":33},[30,82882,6974],{"class":317},[30,82884,79913],{"class":321},[30,82886,367],{"class":317},[30,82888,82889],{"class":74}," \"To be, or not to be, that is the question.\"\n",[30,82891,82892,82894,82896,82899,82902,82904,82907,82910],{"class":32,"line":44},[30,82893,77670],{"class":321},[30,82895,58385],{"class":36},[30,82897,82898],{"class":321},"(str.",[30,82900,82901],{"class":36},"includes",[30,82903,322],{"class":321},[30,82905,82906],{"class":74},"\"To be\"",[30,82908,82909],{"class":321},"))",[30,82911,82912],{"class":379},"  \u002F\u002F true\n",[30,82914,82915,82917,82919,82921,82923,82925,82928,82930],{"class":32,"line":52},[30,82916,77670],{"class":321},[30,82918,58385],{"class":36},[30,82920,82898],{"class":321},[30,82922,82901],{"class":36},[30,82924,322],{"class":321},[30,82926,82927],{"class":74},"\"question\"",[30,82929,82909],{"class":321},[30,82931,82912],{"class":379},[30,82933,82934,82936,82938,82940,82942,82944,82947,82949],{"class":32,"line":60},[30,82935,77670],{"class":321},[30,82937,58385],{"class":36},[30,82939,82898],{"class":321},[30,82941,82901],{"class":36},[30,82943,322],{"class":321},[30,82945,82946],{"class":74},"\"nonexistent\"",[30,82948,82909],{"class":321},[30,82950,82951],{"class":379},"  \u002F\u002F false\n",[30,82953,82954,82956,82958,82960,82962,82964,82966,82968,82970,82972],{"class":32,"line":68},[30,82955,77670],{"class":321},[30,82957,58385],{"class":36},[30,82959,82898],{"class":321},[30,82961,82901],{"class":36},[30,82963,322],{"class":321},[30,82965,82906],{"class":74},[30,82967,12617],{"class":321},[30,82969,537],{"class":40},[30,82971,82909],{"class":321},[30,82973,82951],{"class":379},[30,82975,82976,82978,82980,82982,82984,82986,82989,82991],{"class":32,"line":80},[30,82977,77670],{"class":321},[30,82979,58385],{"class":36},[30,82981,82898],{"class":321},[30,82983,82901],{"class":36},[30,82985,322],{"class":321},[30,82987,82988],{"class":74},"\"TO BE\"",[30,82990,82909],{"class":321},[30,82992,82951],{"class":379},[30,82994,82995,82997,82999,83001,83003,83005,83007,83009],{"class":32,"line":88},[30,82996,77670],{"class":321},[30,82998,58385],{"class":36},[30,83000,82898],{"class":321},[30,83002,82901],{"class":36},[30,83004,322],{"class":321},[30,83006,7834],{"class":74},[30,83008,82909],{"class":321},[30,83010,82912],{"class":379},[23092,83012,83014],{"id":83013},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[20,83016,83018],{"className":53205,"code":83017,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    const num = 10\n    \u002F\u002F 强制转换\n    console.log(String(num))\n    \u002F\u002F toString()方法转换\n    console.log(num.toString())\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,83019,83020,83028,83036,83041,83046,83051,83056,83061,83069],{"__ignoreMap":25},[30,83021,83022,83024,83026],{"class":32,"line":33},[30,83023,1230],{"class":321},[30,83025,51938],{"class":51438},[30,83027,51445],{"class":321},[30,83029,83030,83032,83034],{"class":32,"line":44},[30,83031,52282],{"class":321},[30,83033,51951],{"class":51438},[30,83035,51445],{"class":321},[30,83037,83038],{"class":32,"line":52},[30,83039,83040],{"class":321},"    const num = 10\n",[30,83042,83043],{"class":32,"line":60},[30,83044,83045],{"class":321},"    \u002F\u002F 强制转换\n",[30,83047,83048],{"class":32,"line":68},[30,83049,83050],{"class":321},"    console.log(String(num))\n",[30,83052,83053],{"class":32,"line":80},[30,83054,83055],{"class":321},"    \u002F\u002F toString()方法转换\n",[30,83057,83058],{"class":32,"line":88},[30,83059,83060],{"class":321},"    console.log(num.toString())\n",[30,83062,83063,83065,83067],{"class":32,"line":96},[30,83064,52555],{"class":321},[30,83066,51951],{"class":51438},[30,83068,51445],{"class":321},[30,83070,83071,83073,83075],{"class":32,"line":104},[30,83072,51923],{"class":321},[30,83074,51938],{"class":51438},[30,83076,51445],{"class":321},[23092,83078,83080],{"id":83079},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[157,83082,83083],{},[160,83084],{"alt":25,"src":83085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[20,83087,83089],{"className":50771,"code":83088,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const gift = '50g的茶叶，清洗球'\n    \u002F\u002F 1.把字符串拆分为数组\n    \u002F\u002F console.log(gift.split(','))\n    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n    const str = gift.split('，').map(item => `\u003Cspan>【赠品】${item}\u003C\u002Fspan>\u003Cbr>`).join('')\n    document.querySelector('div').innerHTML = str\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,83090,83091,83101,83115,83119,83127,83141,83161,83173,83181,83185,83193,83205,83213,83225,83230,83235,83240,83287,83303,83311,83319,83323],{"__ignoreMap":25},[30,83092,83093,83095,83097,83099],{"class":32,"line":33},[30,83094,51435],{"class":321},[30,83096,51439],{"class":51438},[30,83098,51442],{"class":36},[30,83100,51445],{"class":321},[30,83102,83103,83105,83107,83109,83111,83113],{"class":32,"line":44},[30,83104,1230],{"class":321},[30,83106,50773],{"class":51438},[30,83108,51454],{"class":36},[30,83110,367],{"class":321},[30,83112,51459],{"class":74},[30,83114,51445],{"class":321},[30,83116,83117],{"class":32,"line":52},[30,83118,2582],{"emptyLinePlaceholder":245},[30,83120,83121,83123,83125],{"class":32,"line":60},[30,83122,1230],{"class":321},[30,83124,51472],{"class":51438},[30,83126,51445],{"class":321},[30,83128,83129,83131,83133,83135,83137,83139],{"class":32,"line":68},[30,83130,52282],{"class":321},[30,83132,51482],{"class":51438},[30,83134,51485],{"class":36},[30,83136,367],{"class":321},[30,83138,51490],{"class":74},[30,83140,51445],{"class":321},[30,83142,83143,83145,83147,83149,83151,83153,83155,83157,83159],{"class":32,"line":80},[30,83144,52282],{"class":321},[30,83146,51482],{"class":51438},[30,83148,15102],{"class":36},[30,83150,367],{"class":321},[30,83152,51529],{"class":74},[30,83154,51509],{"class":36},[30,83156,367],{"class":321},[30,83158,51536],{"class":74},[30,83160,51445],{"class":321},[30,83162,83163,83165,83167,83169,83171],{"class":32,"line":88},[30,83164,52282],{"class":321},[30,83166,51545],{"class":51438},[30,83168,51548],{"class":321},[30,83170,51545],{"class":51438},[30,83172,51445],{"class":321},[30,83174,83175,83177,83179],{"class":32,"line":96},[30,83176,51923],{"class":321},[30,83178,51472],{"class":51438},[30,83180,51445],{"class":321},[30,83182,83183],{"class":32,"line":104},[30,83184,2582],{"emptyLinePlaceholder":245},[30,83186,83187,83189,83191],{"class":32,"line":112},[30,83188,1230],{"class":321},[30,83190,51938],{"class":51438},[30,83192,51445],{"class":321},[30,83194,83195,83197,83199,83201,83203],{"class":32,"line":123},[30,83196,52282],{"class":321},[30,83198,51749],{"class":51438},[30,83200,55452],{"class":321},[30,83202,51749],{"class":51438},[30,83204,51445],{"class":321},[30,83206,83207,83209,83211],{"class":32,"line":131},[30,83208,52282],{"class":321},[30,83210,51951],{"class":51438},[30,83212,51445],{"class":321},[30,83214,83215,83217,83220,83222],{"class":32,"line":142},[30,83216,11403],{"class":317},[30,83218,83219],{"class":40}," gift",[30,83221,13746],{"class":317},[30,83223,83224],{"class":74}," '50g的茶叶，清洗球'\n",[30,83226,83227],{"class":32,"line":1811},[30,83228,83229],{"class":379},"    \u002F\u002F 1.把字符串拆分为数组\n",[30,83231,83232],{"class":32,"line":1825},[30,83233,83234],{"class":379},"    \u002F\u002F console.log(gift.split(','))\n",[30,83236,83237],{"class":32,"line":1830},[30,83238,83239],{"class":379},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[30,83241,83242,83244,83246,83248,83251,83254,83256,83259,83261,83263,83265,83267,83269,83272,83274,83277,83279,83281,83283,83285],{"class":32,"line":1836},[30,83243,11403],{"class":317},[30,83245,74057],{"class":40},[30,83247,13746],{"class":317},[30,83249,83250],{"class":321}," gift.",[30,83252,83253],{"class":36},"split",[30,83255,322],{"class":321},[30,83257,83258],{"class":74},"'，'",[30,83260,30964],{"class":321},[30,83262,74182],{"class":36},[30,83264,322],{"class":321},[30,83266,79933],{"class":5398},[30,83268,79936],{"class":317},[30,83270,83271],{"class":74}," `\u003Cspan>【赠品】${",[30,83273,79933],{"class":321},[30,83275,83276],{"class":74},"}\u003C\u002Fspan>\u003Cbr>`",[30,83278,30964],{"class":321},[30,83280,74361],{"class":36},[30,83282,322],{"class":321},[30,83284,74366],{"class":74},[30,83286,328],{"class":321},[30,83288,83289,83291,83293,83295,83297,83299,83301],{"class":32,"line":1857},[30,83290,52545],{"class":321},[30,83292,54537],{"class":36},[30,83294,322],{"class":321},[30,83296,82069],{"class":74},[30,83298,74387],{"class":321},[30,83300,367],{"class":317},[30,83302,74123],{"class":321},[30,83304,83305,83307,83309],{"class":32,"line":1862},[30,83306,52555],{"class":321},[30,83308,51951],{"class":51438},[30,83310,51445],{"class":321},[30,83312,83313,83315,83317],{"class":32,"line":1876},[30,83314,51923],{"class":321},[30,83316,51938],{"class":51438},[30,83318,51445],{"class":321},[30,83320,83321],{"class":32,"line":1881},[30,83322,2582],{"emptyLinePlaceholder":245},[30,83324,83325,83327,83329],{"class":32,"line":1910},[30,83326,51923],{"class":321},[30,83328,50773],{"class":51438},[30,83330,51445],{"class":321},[22180,83332,83334],{"id":83333},"_41054-number","4.10.5.4 Number",[157,83336,83337],{},[160,83338],{"alt":25,"src":83339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[157,83341,83342],{},"整数也可以进行toFixed来保留小数",[157,83344,83345],{},"比如：",[157,83347,83348],{},"const price=10",[157,83350,83351],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22180,83353,83355],{"id":83354},"_41055-购物车展示","4.10.5.5 购物车展示",[157,83357,83358],{},[160,83359],{"alt":25,"src":83360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[20,83362,83364],{"className":50771,"code":83363,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 100px auto;\n    }\n\n    .item {\n      padding: 15px;\n      transition: all ease .5s;\n      display: flex;\n      border: 1px solid #e4e4e4;\n    }\n\n    .item:hover {\n      cursor: pointer;\n      background-color: #f5f5f5;\n    }\n\n    .item img {\n      width: 80px;\n      height: 80px;\n      margin-right: 5px;\n    }\n\n    .item .name {\n      width: 200px;\n    }\n\n    .item .name .tag {\n      display: block;\n      padding: 2px;\n      font-size: 12px;\n      color: #999;\n    }\n\n    .item .price,\n    .item .sub-total {\n      font-size: 18px;\n      color: firebrick;\n      flex: 1;\n    }\n\n    .item .price::before,\n    .item .sub-total::before,\n    .amount::before {\n      content: '￥';\n      font-size: 12px;\n    }\n\n    .item .spec {\n      flex: 2;\n      color: #888;\n      font-size: 14px;\n      margin-left: 20px;\n    }\n\n    .item .count {\n      flex: 1;\n      color: #aaa;\n    }\n\n    .total {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      justify-content: flex-end;\n      border-top: 1px solid #4e4e4e;\n      padding: 20px;\n    }\n\n    .total .amount {\n      font-size: 18px;\n      color: firebrick;\n      font-weight: 700;\n      margin-right: 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"list\">\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"total\">\n    \u003Cdiv>合计：\u003Cspan class=\"amount\">\u003C\u002Fspan>\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: 289.9,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n        count: 2,\n        spec: { color: '白色' }\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: 109.8,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n        count: 3,\n        spec: { size: '40cm*40cm', color: '黑色' }\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: 488,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n        count: 1,\n        spec: { color: '青色', sum: '一大四小' }\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: 139,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n        count: 1,\n        spec: { size: '小号', color: '紫色' },\n        gift: '50g茶叶,清洗球'\n      }\n    ]\n    \u002F\u002F  1.根据数据渲染页面\n    document.querySelector('.list').innerHTML = goodsList.map(item => {\n      \u002F\u002F 对象解构\n      const { picture, name, count, price, spec, gift } = item\n      \u002F\u002F 规格文字模块处理\n      const text = Object.values(spec).join('\u002F')\n      \u002F\u002F 处理赠品模块\n      const str = gift ? gift.split(',').map(item => `\u003Cspan class=\"tag\">【赠品】${item}\u003C\u002Fspan>`).join('') : ''\n      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n      const subtotal = ((price * 100 * count) \u002F 100).toFixed(2)\n\n      return `\n        \u003Cdiv class=\"item\">\n          \u003Cimg src=\"${picture}\" alt=\"\">\n          \u003Cp class=\"name\">${name}${str}\u003C\u002Fp>\n          \u003Cp class=\"spec\">${text}\u003C\u002Fp>\n          \u003Cp class=\"price\">${price.toFixed(2)}\u003C\u002Fp>\n          \u003Cp class=\"count\">x${count}\u003C\u002Fp>\n          \u003Cp class=\"sub-total\">${subtotal}\u003C\u002Fp>\n        \u003C\u002Fdiv> \n             `\n    }).join('')\n    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n    const total = goodsList.reduce((prev, item) => prev + (item.price * 100 * item.count) \u002F 100, 0)\n    document.querySelector('.amount').innerHTML = total.toFixed(2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,83365,83366,83376,83390,83394,83402,83416,83436,83448,83456,83462,83472,83482,83492,83496,83500,83506,83518,83532,83536,83540,83546,83558,83574,83584,83600,83604,83608,83614,83624,83634,83638,83642,83650,83662,83674,83686,83690,83694,83702,83714,83718,83722,83733,83743,83755,83767,83777,83781,83785,83793,83802,83814,83824,83834,83838,83842,83850,83859,83866,83876,83888,83892,83896,83905,83915,83926,83938,83950,83954,83958,83967,83977,83988,83992,83996,84002,84014,84026,84036,84046,84064,84076,84080,84084,84093,84105,84115,84125,84137,84141,84149,84157,84161,84169,84183,84191,84205,84233,84241,84249,84259,84263,84271,84279,84288,84296,84305,84315,84319,84323,84331,84339,84348,84356,84364,84377,84381,84385,84393,84401,84410,84418,84426,84441,84445,84449,84457,84465,84474,84482,84490,84504,84512,84516,84520,84525,84551,84556,84593,84598,84621,84626,84680,84685,84721,84725,84731,84736,84745,84759,84768,84787,84796,84806,84811,84816,84829,84834,84888,84914,84922,84930,84934],{"__ignoreMap":25},[30,83367,83368,83370,83372,83374],{"class":32,"line":33},[30,83369,51435],{"class":321},[30,83371,51439],{"class":51438},[30,83373,51442],{"class":36},[30,83375,51445],{"class":321},[30,83377,83378,83380,83382,83384,83386,83388],{"class":32,"line":44},[30,83379,1230],{"class":321},[30,83381,50773],{"class":51438},[30,83383,51454],{"class":36},[30,83385,367],{"class":321},[30,83387,51459],{"class":74},[30,83389,51445],{"class":321},[30,83391,83392],{"class":32,"line":52},[30,83393,2582],{"emptyLinePlaceholder":245},[30,83395,83396,83398,83400],{"class":32,"line":60},[30,83397,1230],{"class":321},[30,83399,51472],{"class":51438},[30,83401,51445],{"class":321},[30,83403,83404,83406,83408,83410,83412,83414],{"class":32,"line":68},[30,83405,52282],{"class":321},[30,83407,51482],{"class":51438},[30,83409,51485],{"class":36},[30,83411,367],{"class":321},[30,83413,51490],{"class":74},[30,83415,51445],{"class":321},[30,83417,83418,83420,83422,83424,83426,83428,83430,83432,83434],{"class":32,"line":80},[30,83419,52282],{"class":321},[30,83421,51482],{"class":51438},[30,83423,15102],{"class":36},[30,83425,367],{"class":321},[30,83427,51529],{"class":74},[30,83429,51509],{"class":36},[30,83431,367],{"class":321},[30,83433,51536],{"class":74},[30,83435,51445],{"class":321},[30,83437,83438,83440,83442,83444,83446],{"class":32,"line":88},[30,83439,52282],{"class":321},[30,83441,51545],{"class":51438},[30,83443,51548],{"class":321},[30,83445,51545],{"class":51438},[30,83447,51445],{"class":321},[30,83449,83450,83452,83454],{"class":32,"line":96},[30,83451,52282],{"class":321},[30,83453,234],{"class":51438},[30,83455,51445],{"class":321},[30,83457,83458,83460],{"class":32,"line":104},[30,83459,6585],{"class":51438},[30,83461,15754],{"class":321},[30,83463,83464,83466,83468,83470],{"class":32,"line":112},[30,83465,54833],{"class":40},[30,83467,51575],{"class":321},[30,83469,511],{"class":40},[30,83471,1480],{"class":321},[30,83473,83474,83476,83478,83480],{"class":32,"line":123},[30,83475,54844],{"class":40},[30,83477,51575],{"class":321},[30,83479,511],{"class":40},[30,83481,1480],{"class":321},[30,83483,83484,83486,83488,83490],{"class":32,"line":131},[30,83485,72734],{"class":40},[30,83487,51575],{"class":321},[30,83489,60643],{"class":40},[30,83491,1480],{"class":321},[30,83493,83494],{"class":32,"line":142},[30,83495,2369],{"class":321},[30,83497,83498],{"class":32,"line":1811},[30,83499,2582],{"emptyLinePlaceholder":245},[30,83501,83502,83504],{"class":32,"line":1825},[30,83503,62261],{"class":36},[30,83505,15754],{"class":321},[30,83507,83508,83510,83512,83514,83516],{"class":32,"line":1830},[30,83509,54909],{"class":40},[30,83511,51575],{"class":321},[30,83513,78712],{"class":40},[30,83515,51630],{"class":317},[30,83517,1480],{"class":321},[30,83519,83520,83522,83524,83526,83528,83530],{"class":32,"line":1836},[30,83521,54844],{"class":40},[30,83523,51575],{"class":321},[30,83525,631],{"class":40},[30,83527,51630],{"class":317},[30,83529,51694],{"class":40},[30,83531,1480],{"class":321},[30,83533,83534],{"class":32,"line":1857},[30,83535,2369],{"class":321},[30,83537,83538],{"class":32,"line":1862},[30,83539,2582],{"emptyLinePlaceholder":245},[30,83541,83542,83544],{"class":32,"line":1876},[30,83543,78763],{"class":36},[30,83545,15754],{"class":321},[30,83547,83548,83550,83552,83554,83556],{"class":32,"line":1881},[30,83549,54833],{"class":40},[30,83551,51575],{"class":321},[30,83553,895],{"class":40},[30,83555,51630],{"class":317},[30,83557,1480],{"class":321},[30,83559,83560,83562,83564,83566,83568,83570,83572],{"class":32,"line":1910},[30,83561,61998],{"class":40},[30,83563,51575],{"class":321},[30,83565,28259],{"class":40},[30,83567,78818],{"class":40},[30,83569,78821],{"class":40},[30,83571,1015],{"class":317},[30,83573,1480],{"class":321},[30,83575,83576,83578,83580,83582],{"class":32,"line":1915},[30,83577,55147],{"class":40},[30,83579,51575],{"class":321},[30,83581,51615],{"class":40},[30,83583,1480],{"class":321},[30,83585,83586,83588,83590,83592,83594,83596,83598],{"class":32,"line":1932},[30,83587,62115],{"class":40},[30,83589,51575],{"class":321},[30,83591,537],{"class":40},[30,83593,51630],{"class":317},[30,83595,51659],{"class":40},[30,83597,62382],{"class":40},[30,83599,1480],{"class":321},[30,83601,83602],{"class":32,"line":1937},[30,83603,2369],{"class":321},[30,83605,83606],{"class":32,"line":1942},[30,83607,2582],{"emptyLinePlaceholder":245},[30,83609,83610,83612],{"class":32,"line":1947},[30,83611,78881],{"class":36},[30,83613,15754],{"class":321},[30,83615,83616,83618,83620,83622],{"class":32,"line":1961},[30,83617,62163],{"class":40},[30,83619,51575],{"class":321},[30,83621,62168],{"class":40},[30,83623,1480],{"class":321},[30,83625,83626,83628,83630,83632],{"class":32,"line":1966},[30,83627,55022],{"class":40},[30,83629,51575],{"class":321},[30,83631,61956],{"class":40},[30,83633,1480],{"class":321},[30,83635,83636],{"class":32,"line":2759},[30,83637,2369],{"class":321},[30,83639,83640],{"class":32,"line":2773},[30,83641,2582],{"emptyLinePlaceholder":245},[30,83643,83644,83646,83648],{"class":32,"line":2781},[30,83645,78763],{"class":36},[30,83647,55753],{"class":51438},[30,83649,15754],{"class":321},[30,83651,83652,83654,83656,83658,83660],{"class":32,"line":2786},[30,83653,54909],{"class":40},[30,83655,51575],{"class":321},[30,83657,932],{"class":40},[30,83659,51630],{"class":317},[30,83661,1480],{"class":321},[30,83663,83664,83666,83668,83670,83672],{"class":32,"line":2792},[30,83665,54923],{"class":40},[30,83667,51575],{"class":321},[30,83669,932],{"class":40},[30,83671,51630],{"class":317},[30,83673,1480],{"class":321},[30,83675,83676,83678,83680,83682,83684],{"class":32,"line":2798},[30,83677,61888],{"class":40},[30,83679,51575],{"class":321},[30,83681,639],{"class":40},[30,83683,51630],{"class":317},[30,83685,1480],{"class":321},[30,83687,83688],{"class":32,"line":2803},[30,83689,2369],{"class":321},[30,83691,83692],{"class":32,"line":8130},[30,83693,2582],{"emptyLinePlaceholder":245},[30,83695,83696,83698,83700],{"class":32,"line":8154},[30,83697,78763],{"class":36},[30,83699,62442],{"class":36},[30,83701,15754],{"class":321},[30,83703,83704,83706,83708,83710,83712],{"class":32,"line":8159},[30,83705,54909],{"class":40},[30,83707,51575],{"class":321},[30,83709,1905],{"class":40},[30,83711,51630],{"class":317},[30,83713,1480],{"class":321},[30,83715,83716],{"class":32,"line":8165},[30,83717,2369],{"class":321},[30,83719,83720],{"class":32,"line":8192},[30,83721,2582],{"emptyLinePlaceholder":245},[30,83723,83724,83726,83728,83731],{"class":32,"line":8197},[30,83725,78763],{"class":36},[30,83727,62442],{"class":36},[30,83729,83730],{"class":36}," .tag",[30,83732,15754],{"class":321},[30,83734,83735,83737,83739,83741],{"class":32,"line":8203},[30,83736,55147],{"class":40},[30,83738,51575],{"class":321},[30,83740,61007],{"class":40},[30,83742,1480],{"class":321},[30,83744,83745,83747,83749,83751,83753],{"class":32,"line":8215},[30,83746,54833],{"class":40},[30,83748,51575],{"class":321},[30,83750,398],{"class":40},[30,83752,51630],{"class":317},[30,83754,1480],{"class":321},[30,83756,83757,83759,83761,83763,83765],{"class":32,"line":8227},[30,83758,55060],{"class":40},[30,83760,51575],{"class":321},[30,83762,818],{"class":40},[30,83764,51630],{"class":317},[30,83766,1480],{"class":321},[30,83768,83769,83771,83773,83775],{"class":32,"line":8239},[30,83770,57554],{"class":40},[30,83772,51575],{"class":321},[30,83774,62208],{"class":40},[30,83776,1480],{"class":321},[30,83778,83779],{"class":32,"line":9898},[30,83780,2369],{"class":321},[30,83782,83783],{"class":32,"line":9923},[30,83784,2582],{"emptyLinePlaceholder":245},[30,83786,83787,83789,83791],{"class":32,"line":9946},[30,83788,78763],{"class":36},[30,83790,79055],{"class":36},[30,83792,31604],{"class":321},[30,83794,83795,83797,83800],{"class":32,"line":9970},[30,83796,78763],{"class":36},[30,83798,83799],{"class":36}," .sub-total",[30,83801,15754],{"class":321},[30,83803,83804,83806,83808,83810,83812],{"class":32,"line":9975},[30,83805,55060],{"class":40},[30,83807,51575],{"class":321},[30,83809,970],{"class":40},[30,83811,51630],{"class":317},[30,83813,1480],{"class":321},[30,83815,83816,83818,83820,83822],{"class":32,"line":9980},[30,83817,57554],{"class":40},[30,83819,51575],{"class":321},[30,83821,79078],{"class":40},[30,83823,1480],{"class":321},[30,83825,83826,83828,83830,83832],{"class":32,"line":9985},[30,83827,61975],{"class":40},[30,83829,51575],{"class":321},[30,83831,537],{"class":40},[30,83833,1480],{"class":321},[30,83835,83836],{"class":32,"line":9994},[30,83837,2369],{"class":321},[30,83839,83840],{"class":32,"line":9999},[30,83841,2582],{"emptyLinePlaceholder":245},[30,83843,83844,83846,83848],{"class":32,"line":10005},[30,83845,78763],{"class":36},[30,83847,79095],{"class":36},[30,83849,31604],{"class":321},[30,83851,83852,83854,83857],{"class":32,"line":10026},[30,83853,78763],{"class":36},[30,83855,83856],{"class":36}," .sub-total::before",[30,83858,31604],{"class":321},[30,83860,83861,83864],{"class":32,"line":10032},[30,83862,83863],{"class":36},"    .amount::before",[30,83865,15754],{"class":321},[30,83867,83868,83870,83872,83874],{"class":32,"line":10046},[30,83869,79102],{"class":40},[30,83871,51575],{"class":321},[30,83873,79107],{"class":74},[30,83875,1480],{"class":321},[30,83877,83878,83880,83882,83884,83886],{"class":32,"line":10052},[30,83879,55060],{"class":40},[30,83881,51575],{"class":321},[30,83883,818],{"class":40},[30,83885,51630],{"class":317},[30,83887,1480],{"class":321},[30,83889,83890],{"class":32,"line":10079},[30,83891,2369],{"class":321},[30,83893,83894],{"class":32,"line":10088},[30,83895,2582],{"emptyLinePlaceholder":245},[30,83897,83898,83900,83903],{"class":32,"line":10094},[30,83899,78763],{"class":36},[30,83901,83902],{"class":36}," .spec",[30,83904,15754],{"class":321},[30,83906,83907,83909,83911,83913],{"class":32,"line":10102},[30,83908,61975],{"class":40},[30,83910,51575],{"class":321},[30,83912,398],{"class":40},[30,83914,1480],{"class":321},[30,83916,83917,83919,83921,83924],{"class":32,"line":10107},[30,83918,57554],{"class":40},[30,83920,51575],{"class":321},[30,83922,83923],{"class":40},"#888",[30,83925,1480],{"class":321},[30,83927,83928,83930,83932,83934,83936],{"class":32,"line":16786},[30,83929,55060],{"class":40},[30,83931,51575],{"class":321},[30,83933,869],{"class":40},[30,83935,51630],{"class":317},[30,83937,1480],{"class":321},[30,83939,83940,83942,83944,83946,83948],{"class":32,"line":16792},[30,83941,62138],{"class":40},[30,83943,51575],{"class":321},[30,83945,1020],{"class":40},[30,83947,51630],{"class":317},[30,83949,1480],{"class":321},[30,83951,83952],{"class":32,"line":16815},[30,83953,2369],{"class":321},[30,83955,83956],{"class":32,"line":16821},[30,83957,2582],{"emptyLinePlaceholder":245},[30,83959,83960,83962,83965],{"class":32,"line":16844},[30,83961,78763],{"class":36},[30,83963,83964],{"class":36}," .count",[30,83966,15754],{"class":321},[30,83968,83969,83971,83973,83975],{"class":32,"line":16858},[30,83970,61975],{"class":40},[30,83972,51575],{"class":321},[30,83974,537],{"class":40},[30,83976,1480],{"class":321},[30,83978,83979,83981,83983,83986],{"class":32,"line":16878},[30,83980,57554],{"class":40},[30,83982,51575],{"class":321},[30,83984,83985],{"class":40},"#aaa",[30,83987,1480],{"class":321},[30,83989,83990],{"class":32,"line":16884},[30,83991,2369],{"class":321},[30,83993,83994],{"class":32,"line":16895},[30,83995,2582],{"emptyLinePlaceholder":245},[30,83997,83998,84000],{"class":32,"line":16918},[30,83999,72613],{"class":36},[30,84001,15754],{"class":321},[30,84003,84004,84006,84008,84010,84012],{"class":32,"line":16940},[30,84005,54909],{"class":40},[30,84007,51575],{"class":321},[30,84009,78712],{"class":40},[30,84011,51630],{"class":317},[30,84013,1480],{"class":321},[30,84015,84016,84018,84020,84022,84024],{"class":32,"line":16945},[30,84017,54844],{"class":40},[30,84019,51575],{"class":321},[30,84021,511],{"class":40},[30,84023,51694],{"class":40},[30,84025,1480],{"class":321},[30,84027,84028,84030,84032,84034],{"class":32,"line":16951},[30,84029,55147],{"class":40},[30,84031,51575],{"class":321},[30,84033,51615],{"class":40},[30,84035,1480],{"class":321},[30,84037,84038,84040,84042,84044],{"class":32,"line":16965},[30,84039,55158],{"class":40},[30,84041,51575],{"class":321},[30,84043,51718],{"class":40},[30,84045,1480],{"class":321},[30,84047,84048,84051,84053,84055,84057,84059,84062],{"class":32,"line":16978},[30,84049,84050],{"class":40},"      border-top",[30,84052,51575],{"class":321},[30,84054,537],{"class":40},[30,84056,51630],{"class":317},[30,84058,51659],{"class":40},[30,84060,84061],{"class":40}," #4e4e4e",[30,84063,1480],{"class":321},[30,84065,84066,84068,84070,84072,84074],{"class":32,"line":16983},[30,84067,54833],{"class":40},[30,84069,51575],{"class":321},[30,84071,1020],{"class":40},[30,84073,51630],{"class":317},[30,84075,1480],{"class":321},[30,84077,84078],{"class":32,"line":16997},[30,84079,2369],{"class":321},[30,84081,84082],{"class":32,"line":17002},[30,84083,2582],{"emptyLinePlaceholder":245},[30,84085,84086,84088,84091],{"class":32,"line":17008},[30,84087,72613],{"class":36},[30,84089,84090],{"class":36}," .amount",[30,84092,15754],{"class":321},[30,84094,84095,84097,84099,84101,84103],{"class":32,"line":17013},[30,84096,55060],{"class":40},[30,84098,51575],{"class":321},[30,84100,970],{"class":40},[30,84102,51630],{"class":317},[30,84104,1480],{"class":321},[30,84106,84107,84109,84111,84113],{"class":32,"line":17027},[30,84108,57554],{"class":40},[30,84110,51575],{"class":321},[30,84112,79078],{"class":40},[30,84114,1480],{"class":321},[30,84116,84117,84119,84121,84123],{"class":32,"line":17032},[30,84118,62472],{"class":40},[30,84120,51575],{"class":321},[30,84122,51627],{"class":40},[30,84124,1480],{"class":321},[30,84126,84127,84129,84131,84133,84135],{"class":32,"line":17037},[30,84128,61888],{"class":40},[30,84130,51575],{"class":321},[30,84132,976],{"class":40},[30,84134,51630],{"class":317},[30,84136,1480],{"class":321},[30,84138,84139],{"class":32,"line":17051},[30,84140,2369],{"class":321},[30,84142,84143,84145,84147],{"class":32,"line":17063},[30,84144,52555],{"class":321},[30,84146,234],{"class":51438},[30,84148,51445],{"class":321},[30,84150,84151,84153,84155],{"class":32,"line":17068},[30,84152,51923],{"class":321},[30,84154,51472],{"class":51438},[30,84156,51445],{"class":321},[30,84158,84159],{"class":32,"line":17081},[30,84160,2582],{"emptyLinePlaceholder":245},[30,84162,84163,84165,84167],{"class":32,"line":17086},[30,84164,1230],{"class":321},[30,84166,51938],{"class":51438},[30,84168,51445],{"class":321},[30,84170,84171,84173,84175,84177,84179,84181],{"class":32,"line":17091},[30,84172,52282],{"class":321},[30,84174,51749],{"class":51438},[30,84176,53624],{"class":36},[30,84178,367],{"class":321},[30,84180,62746],{"class":74},[30,84182,51445],{"class":321},[30,84184,84185,84187,84189],{"class":32,"line":17096},[30,84186,52555],{"class":321},[30,84188,51749],{"class":51438},[30,84190,51445],{"class":321},[30,84192,84193,84195,84197,84199,84201,84203],{"class":32,"line":17109},[30,84194,52282],{"class":321},[30,84196,51749],{"class":51438},[30,84198,53624],{"class":36},[30,84200,367],{"class":321},[30,84202,62718],{"class":74},[30,84204,51445],{"class":321},[30,84206,84207,84209,84211,84214,84216,84218,84220,84223,84225,84227,84229,84231],{"class":32,"line":17114},[30,84208,51479],{"class":321},[30,84210,51749],{"class":51438},[30,84212,84213],{"class":321},">合计：\u003C",[30,84215,30],{"class":51438},[30,84217,53624],{"class":36},[30,84219,367],{"class":321},[30,84221,84222],{"class":74},"\"amount\"",[30,84224,55452],{"class":321},[30,84226,30],{"class":51438},[30,84228,55452],{"class":321},[30,84230,51749],{"class":51438},[30,84232,51445],{"class":321},[30,84234,84235,84237,84239],{"class":32,"line":32771},[30,84236,52555],{"class":321},[30,84238,51749],{"class":51438},[30,84240,51445],{"class":321},[30,84242,84243,84245,84247],{"class":32,"line":32777},[30,84244,52282],{"class":321},[30,84246,51951],{"class":51438},[30,84248,51445],{"class":321},[30,84250,84251,84253,84255,84257],{"class":32,"line":32783},[30,84252,11403],{"class":317},[30,84254,79515],{"class":40},[30,84256,13746],{"class":317},[30,84258,55585],{"class":321},[30,84260,84261],{"class":32,"line":32789},[30,84262,79524],{"class":321},[30,84264,84265,84267,84269],{"class":32,"line":32795},[30,84266,79529],{"class":321},[30,84268,79532],{"class":74},[30,84270,31604],{"class":321},[30,84272,84273,84275,84277],{"class":32,"line":32806},[30,84274,79539],{"class":321},[30,84276,79542],{"class":74},[30,84278,31604],{"class":321},[30,84280,84281,84283,84286],{"class":32,"line":32812},[30,84282,79549],{"class":321},[30,84284,84285],{"class":40},"289.9",[30,84287,31604],{"class":321},[30,84289,84290,84292,84294],{"class":32,"line":32832},[30,84291,79559],{"class":321},[30,84293,79562],{"class":74},[30,84295,31604],{"class":321},[30,84297,84298,84301,84303],{"class":32,"line":32838},[30,84299,84300],{"class":321},"        count: ",[30,84302,398],{"class":40},[30,84304,31604],{"class":321},[30,84306,84307,84310,84313],{"class":32,"line":32849},[30,84308,84309],{"class":321},"        spec: { color: ",[30,84311,84312],{"class":74},"'白色'",[30,84314,55742],{"class":321},[30,84316,84317],{"class":32,"line":32855},[30,84318,78030],{"class":321},[30,84320,84321],{"class":32,"line":32861},[30,84322,79524],{"class":321},[30,84324,84325,84327,84329],{"class":32,"line":32867},[30,84326,79529],{"class":321},[30,84328,79623],{"class":74},[30,84330,31604],{"class":321},[30,84332,84333,84335,84337],{"class":32,"line":32873},[30,84334,79539],{"class":321},[30,84336,79632],{"class":74},[30,84338,31604],{"class":321},[30,84340,84341,84343,84346],{"class":32,"line":32879},[30,84342,79549],{"class":321},[30,84344,84345],{"class":40},"109.8",[30,84347,31604],{"class":321},[30,84349,84350,84352,84354],{"class":32,"line":32885},[30,84351,79559],{"class":321},[30,84353,79650],{"class":74},[30,84355,31604],{"class":321},[30,84357,84358,84360,84362],{"class":32,"line":32891},[30,84359,84300],{"class":321},[30,84361,392],{"class":40},[30,84363,31604],{"class":321},[30,84365,84366,84369,84371,84373,84375],{"class":32,"line":32911},[30,84367,84368],{"class":321},"        spec: { size: ",[30,84370,82041],{"class":74},[30,84372,55602],{"class":321},[30,84374,82046],{"class":74},[30,84376,55742],{"class":321},[30,84378,84379],{"class":32,"line":32917},[30,84380,78030],{"class":321},[30,84382,84383],{"class":32,"line":32933},[30,84384,79524],{"class":321},[30,84386,84387,84389,84391],{"class":32,"line":32939},[30,84388,79529],{"class":321},[30,84390,79667],{"class":74},[30,84392,31604],{"class":321},[30,84394,84395,84397,84399],{"class":32,"line":32953},[30,84396,79539],{"class":321},[30,84398,79676],{"class":74},[30,84400,31604],{"class":321},[30,84402,84403,84405,84408],{"class":32,"line":32959},[30,84404,79549],{"class":321},[30,84406,84407],{"class":40},"488",[30,84409,31604],{"class":321},[30,84411,84412,84414,84416],{"class":32,"line":32974},[30,84413,79559],{"class":321},[30,84415,79694],{"class":74},[30,84417,31604],{"class":321},[30,84419,84420,84422,84424],{"class":32,"line":32980},[30,84421,84300],{"class":321},[30,84423,537],{"class":40},[30,84425,31604],{"class":321},[30,84427,84428,84430,84433,84436,84439],{"class":32,"line":32989},[30,84429,84309],{"class":321},[30,84431,84432],{"class":74},"'青色'",[30,84434,84435],{"class":321},", sum: ",[30,84437,84438],{"class":74},"'一大四小'",[30,84440,55742],{"class":321},[30,84442,84443],{"class":32,"line":32995},[30,84444,78030],{"class":321},[30,84446,84447],{"class":32,"line":33004},[30,84448,79524],{"class":321},[30,84450,84451,84453,84455],{"class":32,"line":33010},[30,84452,79529],{"class":321},[30,84454,79711],{"class":74},[30,84456,31604],{"class":321},[30,84458,84459,84461,84463],{"class":32,"line":33016},[30,84460,79539],{"class":321},[30,84462,79720],{"class":74},[30,84464,31604],{"class":321},[30,84466,84467,84469,84472],{"class":32,"line":33025},[30,84468,79549],{"class":321},[30,84470,84471],{"class":40},"139",[30,84473,31604],{"class":321},[30,84475,84476,84478,84480],{"class":32,"line":33031},[30,84477,79559],{"class":321},[30,84479,79738],{"class":74},[30,84481,31604],{"class":321},[30,84483,84484,84486,84488],{"class":32,"line":33042},[30,84485,84300],{"class":321},[30,84487,537],{"class":40},[30,84489,31604],{"class":321},[30,84491,84492,84494,84497,84499,84502],{"class":32,"line":33048},[30,84493,84368],{"class":321},[30,84495,84496],{"class":74},"'小号'",[30,84498,55602],{"class":321},[30,84500,84501],{"class":74},"'紫色'",[30,84503,55608],{"class":321},[30,84505,84506,84509],{"class":32,"line":33067},[30,84507,84508],{"class":321},"        gift: ",[30,84510,84511],{"class":74},"'50g茶叶,清洗球'\n",[30,84513,84514],{"class":32,"line":33073},[30,84515,52536],{"class":321},[30,84517,84518],{"class":32,"line":33084},[30,84519,53247],{"class":321},[30,84521,84522],{"class":32,"line":33090},[30,84523,84524],{"class":379},"    \u002F\u002F  1.根据数据渲染页面\n",[30,84526,84527,84529,84531,84533,84535,84537,84539,84541,84543,84545,84547,84549],{"class":32,"line":33110},[30,84528,52545],{"class":321},[30,84530,54537],{"class":36},[30,84532,322],{"class":321},[30,84534,80039],{"class":74},[30,84536,74387],{"class":321},[30,84538,367],{"class":317},[30,84540,80186],{"class":321},[30,84542,74182],{"class":36},[30,84544,322],{"class":321},[30,84546,79933],{"class":5398},[30,84548,79936],{"class":317},[30,84550,15754],{"class":321},[30,84552,84553],{"class":32,"line":33126},[30,84554,84555],{"class":379},"      \u002F\u002F 对象解构\n",[30,84557,84558,84560,84562,84564,84566,84568,84570,84573,84575,84577,84579,84582,84584,84587,84589,84591],{"class":32,"line":33132},[30,84559,58366],{"class":317},[30,84561,79945],{"class":321},[30,84563,79958],{"class":40},[30,84565,12617],{"class":321},[30,84567,79948],{"class":40},[30,84569,12617],{"class":321},[30,84571,84572],{"class":40},"count",[30,84574,12617],{"class":321},[30,84576,79953],{"class":40},[30,84578,12617],{"class":321},[30,84580,84581],{"class":40},"spec",[30,84583,12617],{"class":321},[30,84585,84586],{"class":40},"gift",[30,84588,79961],{"class":321},[30,84590,367],{"class":317},[30,84592,79966],{"class":321},[30,84594,84595],{"class":32,"line":33146},[30,84596,84597],{"class":379},"      \u002F\u002F 规格文字模块处理\n",[30,84599,84600,84602,84605,84607,84609,84611,84613,84615,84617,84619],{"class":32,"line":33152},[30,84601,58366],{"class":317},[30,84603,84604],{"class":40}," text",[30,84606,13746],{"class":317},[30,84608,82076],{"class":321},[30,84610,82079],{"class":36},[30,84612,82082],{"class":321},[30,84614,74361],{"class":36},[30,84616,322],{"class":321},[30,84618,82089],{"class":74},[30,84620,328],{"class":321},[30,84622,84623],{"class":32,"line":33158},[30,84624,84625],{"class":379},"      \u002F\u002F 处理赠品模块\n",[30,84627,84628,84630,84632,84634,84637,84639,84641,84643,84645,84648,84650,84652,84654,84656,84658,84661,84663,84666,84668,84670,84672,84674,84676,84678],{"class":32,"line":33169},[30,84629,58366],{"class":317},[30,84631,74057],{"class":40},[30,84633,13746],{"class":317},[30,84635,84636],{"class":321}," gift ",[30,84638,1306],{"class":317},[30,84640,83250],{"class":321},[30,84642,83253],{"class":36},[30,84644,322],{"class":321},[30,84646,84647],{"class":74},"','",[30,84649,30964],{"class":321},[30,84651,74182],{"class":36},[30,84653,322],{"class":321},[30,84655,79933],{"class":5398},[30,84657,79936],{"class":317},[30,84659,84660],{"class":74}," `\u003Cspan class=\"tag\">【赠品】${",[30,84662,79933],{"class":321},[30,84664,84665],{"class":74},"}\u003C\u002Fspan>`",[30,84667,30964],{"class":321},[30,84669,74361],{"class":36},[30,84671,322],{"class":321},[30,84673,74366],{"class":74},[30,84675,13896],{"class":321},[30,84677,1179],{"class":317},[30,84679,70242],{"class":74},[30,84681,84682],{"class":32,"line":33175},[30,84683,84684],{"class":379},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[30,84686,84687,84689,84692,84694,84697,84699,84701,84703,84706,84708,84710,84712,84715,84717,84719],{"class":32,"line":33181},[30,84688,58366],{"class":317},[30,84690,84691],{"class":40}," subtotal",[30,84693,13746],{"class":317},[30,84695,84696],{"class":321}," ((price ",[30,84698,775],{"class":317},[30,84700,5936],{"class":40},[30,84702,6700],{"class":317},[30,84704,84705],{"class":321}," count) ",[30,84707,904],{"class":317},[30,84709,5936],{"class":40},[30,84711,30964],{"class":321},[30,84713,84714],{"class":36},"toFixed",[30,84716,322],{"class":321},[30,84718,398],{"class":40},[30,84720,328],{"class":321},[30,84722,84723],{"class":32,"line":33191},[30,84724,2582],{"emptyLinePlaceholder":245},[30,84726,84727,84729],{"class":32,"line":33197},[30,84728,74120],{"class":317},[30,84730,70306],{"class":74},[30,84732,84733],{"class":32,"line":33208},[30,84734,84735],{"class":74},"        \u003Cdiv class=\"item\">\n",[30,84737,84738,84741,84743],{"class":32,"line":33214},[30,84739,84740],{"class":74},"          \u003Cimg src=\"${",[30,84742,79958],{"class":321},[30,84744,79990],{"class":74},[30,84746,84747,84750,84752,84755,84757],{"class":32,"line":33224},[30,84748,84749],{"class":74},"          \u003Cp class=\"name\">${",[30,84751,79948],{"class":321},[30,84753,84754],{"class":74},"}${",[30,84756,1489],{"class":321},[30,84758,80000],{"class":74},[30,84760,84761,84764,84766],{"class":32,"line":33229},[30,84762,84763],{"class":74},"          \u003Cp class=\"spec\">${",[30,84765,5369],{"class":321},[30,84767,80000],{"class":74},[30,84769,84770,84773,84775,84777,84779,84781,84783,84785],{"class":32,"line":33235},[30,84771,84772],{"class":74},"          \u003Cp class=\"price\">${",[30,84774,79953],{"class":321},[30,84776,878],{"class":74},[30,84778,84714],{"class":36},[30,84780,322],{"class":74},[30,84782,398],{"class":40},[30,84784,749],{"class":74},[30,84786,80000],{"class":74},[30,84788,84789,84792,84794],{"class":32,"line":33284},[30,84790,84791],{"class":74},"          \u003Cp class=\"count\">x${",[30,84793,84572],{"class":321},[30,84795,80000],{"class":74},[30,84797,84798,84801,84804],{"class":32,"line":33331},[30,84799,84800],{"class":74},"          \u003Cp class=\"sub-total\">${",[30,84802,84803],{"class":321},"subtotal",[30,84805,80000],{"class":74},[30,84807,84808],{"class":32,"line":33336},[30,84809,84810],{"class":74},"        \u003C\u002Fdiv> \n",[30,84812,84813],{"class":32,"line":33342},[30,84814,84815],{"class":74},"             `\n",[30,84817,84818,84821,84823,84825,84827],{"class":32,"line":33361},[30,84819,84820],{"class":321},"    }).",[30,84822,74361],{"class":36},[30,84824,322],{"class":321},[30,84826,74366],{"class":74},[30,84828,328],{"class":321},[30,84830,84831],{"class":32,"line":33367},[30,84832,84833],{"class":379},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[30,84835,84836,84838,84840,84842,84844,84847,84849,84852,84854,84856,84858,84861,84864,84866,84869,84871,84873,84875,84878,84880,84882,84884,84886],{"class":32,"line":33387},[30,84837,11403],{"class":317},[30,84839,62923],{"class":40},[30,84841,13746],{"class":317},[30,84843,80186],{"class":321},[30,84845,84846],{"class":36},"reduce",[30,84848,2558],{"class":321},[30,84850,84851],{"class":5398},"prev",[30,84853,12617],{"class":321},[30,84855,79933],{"class":5398},[30,84857,13896],{"class":321},[30,84859,84860],{"class":317},"=>",[30,84862,84863],{"class":321}," prev ",[30,84865,801],{"class":317},[30,84867,84868],{"class":321}," (item.price ",[30,84870,775],{"class":317},[30,84872,5936],{"class":40},[30,84874,6700],{"class":317},[30,84876,84877],{"class":321}," item.count) ",[30,84879,904],{"class":317},[30,84881,5936],{"class":40},[30,84883,12617],{"class":321},[30,84885,511],{"class":40},[30,84887,328],{"class":321},[30,84889,84890,84892,84894,84896,84899,84901,84903,84906,84908,84910,84912],{"class":32,"line":33393},[30,84891,52545],{"class":321},[30,84893,54537],{"class":36},[30,84895,322],{"class":321},[30,84897,84898],{"class":74},"'.amount'",[30,84900,74387],{"class":321},[30,84902,367],{"class":317},[30,84904,84905],{"class":321}," total.",[30,84907,84714],{"class":36},[30,84909,322],{"class":321},[30,84911,398],{"class":40},[30,84913,328],{"class":321},[30,84915,84916,84918,84920],{"class":32,"line":33399},[30,84917,52555],{"class":321},[30,84919,51951],{"class":51438},[30,84921,51445],{"class":321},[30,84923,84924,84926,84928],{"class":32,"line":33409},[30,84925,51923],{"class":321},[30,84927,51938],{"class":51438},[30,84929,51445],{"class":321},[30,84931,84932],{"class":32,"line":33414},[30,84933,2582],{"emptyLinePlaceholder":245},[30,84935,84936,84938,84940],{"class":32,"line":33420},[30,84937,51923],{"class":321},[30,84939,50773],{"class":51438},[30,84941,51445],{"class":321},[15,84943,84945],{"id":84944},"_411-编程思想","4.11 编程思想",[287,84947,84949],{"id":84948},"_4111-面向过程介绍","4.11.1 面向过程介绍",[157,84951,84952,84955],{},[469,84953,84954],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[157,84957,84958],{},"调用就可以了",[157,84960,84961],{},[160,84962],{"alt":25,"src":84963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[287,84965,84967],{"id":84966},"_4112-面向对象","4.11.2 面向对象",[157,84969,84970],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[157,84972,84973],{},[160,84974],{"alt":25,"src":84975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[157,84977,84978],{},"面向对象的特性：",[147,84980,84981,84984,84987],{},[150,84982,84983],{},"封装性",[150,84985,84986],{},"继承性",[150,84988,84989],{},"多态性",[287,84991,84993],{"id":84992},"_4113-两者比较","4.11.3 两者比较",[157,84995,84996],{},[160,84997],{"alt":25,"src":84998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[15,85000,85002],{"id":85001},"_412-构造函数回顾","4.12 构造函数回顾",[157,85004,85005],{},[160,85006],{"alt":25,"src":85007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[157,85009,85010],{},[160,85011],{"alt":25,"src":85012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[157,85014,85015],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[157,85017,85018],{},[160,85019],{"alt":25,"src":85020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[15,85022,85024],{"id":85023},"_413-原型","4.13 原型",[287,85026,85028],{"id":85027},"_4131-原型对象的认识","4.13.1 原型对象的认识",[157,85030,85031],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[157,85033,85034],{},[160,85035],{"alt":25,"src":85036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[157,85038,85039],{},[160,85040],{"alt":25,"src":85041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[157,85043,85044],{},"原型是构造函数的属性，它也是一个对象",[157,85046,85047],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[157,85049,85050],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[20,85052,85054],{"className":53205,"code":85053,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n  \u003Cscript>\n    function Star(uname, age) {\n      this.uname = uname,\n        this.age = age\n      \u002F\u002F this.sing = function () {\n      \u002F\u002F   console.log('唱歌')\n\n      \u002F\u002F }\n    }\n    Star.prototype.sing = function () {\n      console.log('唱歌')\n    }\n    \u002F\u002F console.dir(Star.prototype)\n    const pink = new Star('pink', 18)\n    const red = new Star('red', 20)\n    pink.sing()\n    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,85055,85056,85064,85069,85077,85082,85087,85092,85097,85102,85106,85110,85114,85119,85124,85128,85133,85138,85143,85148,85153,85157,85165],{"__ignoreMap":25},[30,85057,85058,85060,85062],{"class":32,"line":33},[30,85059,1230],{"class":321},[30,85061,51938],{"class":51438},[30,85063,51445],{"class":321},[30,85065,85066],{"class":32,"line":44},[30,85067,85068],{"class":379},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[30,85070,85071,85073,85075],{"class":32,"line":52},[30,85072,52282],{"class":321},[30,85074,51951],{"class":51438},[30,85076,51445],{"class":321},[30,85078,85079],{"class":32,"line":60},[30,85080,85081],{"class":321},"    function Star(uname, age) {\n",[30,85083,85084],{"class":32,"line":68},[30,85085,85086],{"class":321},"      this.uname = uname,\n",[30,85088,85089],{"class":32,"line":80},[30,85090,85091],{"class":321},"        this.age = age\n",[30,85093,85094],{"class":32,"line":88},[30,85095,85096],{"class":321},"      \u002F\u002F this.sing = function () {\n",[30,85098,85099],{"class":32,"line":96},[30,85100,85101],{"class":321},"      \u002F\u002F   console.log('唱歌')\n",[30,85103,85104],{"class":32,"line":104},[30,85105,2582],{"emptyLinePlaceholder":245},[30,85107,85108],{"class":32,"line":112},[30,85109,60175],{"class":321},[30,85111,85112],{"class":32,"line":123},[30,85113,2369],{"class":321},[30,85115,85116],{"class":32,"line":131},[30,85117,85118],{"class":321},"    Star.prototype.sing = function () {\n",[30,85120,85121],{"class":32,"line":142},[30,85122,85123],{"class":321},"      console.log('唱歌')\n",[30,85125,85126],{"class":32,"line":1811},[30,85127,2369],{"class":321},[30,85129,85130],{"class":32,"line":1825},[30,85131,85132],{"class":321},"    \u002F\u002F console.dir(Star.prototype)\n",[30,85134,85135],{"class":32,"line":1830},[30,85136,85137],{"class":321},"    const pink = new Star('pink', 18)\n",[30,85139,85140],{"class":32,"line":1836},[30,85141,85142],{"class":321},"    const red = new Star('red', 20)\n",[30,85144,85145],{"class":32,"line":1857},[30,85146,85147],{"class":321},"    pink.sing()\n",[30,85149,85150],{"class":32,"line":1862},[30,85151,85152],{"class":321},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[30,85154,85155],{"class":32,"line":1876},[30,85156,2582],{"emptyLinePlaceholder":245},[30,85158,85159,85161,85163],{"class":32,"line":1881},[30,85160,52555],{"class":321},[30,85162,51951],{"class":51438},[30,85164,51445],{"class":321},[30,85166,85167,85169,85171],{"class":32,"line":1910},[30,85168,51923],{"class":321},[30,85170,51938],{"class":51438},[30,85172,51445],{"class":321},[157,85174,85175],{},[160,85176],{"alt":25,"src":85177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[20,85179,85181],{"className":53205,"code":85180,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    let that\n    function Star(uname) {\n      this.uname = uname\n      that = this\n    }\n    \u002F\u002F 实例对象是 ldh\n    const ldh = new Star('刘德华')\n    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n\n    Star.sing = function () {\n      console.log('唱歌')\n    }\n    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,85182,85183,85191,85199,85204,85209,85214,85219,85223,85228,85233,85238,85242,85247,85251,85255,85260,85264,85272],{"__ignoreMap":25},[30,85184,85185,85187,85189],{"class":32,"line":33},[30,85186,1230],{"class":321},[30,85188,51938],{"class":51438},[30,85190,51445],{"class":321},[30,85192,85193,85195,85197],{"class":32,"line":44},[30,85194,52282],{"class":321},[30,85196,51951],{"class":51438},[30,85198,51445],{"class":321},[30,85200,85201],{"class":32,"line":52},[30,85202,85203],{"class":321},"    let that\n",[30,85205,85206],{"class":32,"line":60},[30,85207,85208],{"class":321},"    function Star(uname) {\n",[30,85210,85211],{"class":32,"line":68},[30,85212,85213],{"class":321},"      this.uname = uname\n",[30,85215,85216],{"class":32,"line":80},[30,85217,85218],{"class":321},"      that = this\n",[30,85220,85221],{"class":32,"line":88},[30,85222,2369],{"class":321},[30,85224,85225],{"class":32,"line":96},[30,85226,85227],{"class":321},"    \u002F\u002F 实例对象是 ldh\n",[30,85229,85230],{"class":32,"line":104},[30,85231,85232],{"class":321},"    const ldh = new Star('刘德华')\n",[30,85234,85235],{"class":32,"line":112},[30,85236,85237],{"class":321},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[30,85239,85240],{"class":32,"line":123},[30,85241,2582],{"emptyLinePlaceholder":245},[30,85243,85244],{"class":32,"line":131},[30,85245,85246],{"class":321},"    Star.sing = function () {\n",[30,85248,85249],{"class":32,"line":142},[30,85250,85123],{"class":321},[30,85252,85253],{"class":32,"line":1811},[30,85254,2369],{"class":321},[30,85256,85257],{"class":32,"line":1825},[30,85258,85259],{"class":321},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[30,85261,85262],{"class":32,"line":1830},[30,85263,2582],{"emptyLinePlaceholder":245},[30,85265,85266,85268,85270],{"class":32,"line":1836},[30,85267,52555],{"class":321},[30,85269,51951],{"class":51438},[30,85271,51445],{"class":321},[30,85273,85274,85276,85278],{"class":32,"line":1857},[30,85275,51923],{"class":321},[30,85277,51938],{"class":51438},[30,85279,51445],{"class":321},[157,85281,85282],{},"构造函数的this指向的是实例对象；",[157,85284,85285],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[287,85287,85289],{"id":85288},"_4132-数组扩展方法","4.13.2 数组扩展方法",[157,85291,85292],{},[160,85293],{"alt":25,"src":85294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[20,85296,85298],{"className":53205,"code":85297,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 注意数组不可以直接用min和max求最值\n    const arr = [1, 2, 3]\n    \u002F\u002F 自己定义数组的扩展方法\n    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n    \u002F\u002F 2.自定义的方法写到prototype身上\n    \u002F\u002F ①.最大值\n    Array.prototype.max = function () {\n      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n      return Math.max(...this)\n      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n    }\n    console.log(arr.max())\n    \u002F\u002F ②最小值\n    Array.prototype.min = function () {\n      return Math.min(...this)\n    }\n    console.log(arr.min())\n    \u002F\u002F③求和\n    Array.prototype.sum = function () {\n      return this.reduce((prev, current) => prev + current, 0)\n    }\n    console.log(arr.sum())\n    \u002F\u002F ③排序\n    Array.prototype.rever = function () {\n      return this.reverse()\n    }\n    console.log(arr.rever())\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,85299,85300,85308,85316,85321,85326,85331,85336,85341,85346,85351,85356,85361,85366,85370,85375,85380,85385,85390,85394,85399,85404,85409,85414,85418,85423,85428,85433,85438,85442,85447,85451,85459],{"__ignoreMap":25},[30,85301,85302,85304,85306],{"class":32,"line":33},[30,85303,1230],{"class":321},[30,85305,51938],{"class":51438},[30,85307,51445],{"class":321},[30,85309,85310,85312,85314],{"class":32,"line":44},[30,85311,52282],{"class":321},[30,85313,51951],{"class":51438},[30,85315,51445],{"class":321},[30,85317,85318],{"class":32,"line":52},[30,85319,85320],{"class":321},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[30,85322,85323],{"class":32,"line":60},[30,85324,85325],{"class":321},"    const arr = [1, 2, 3]\n",[30,85327,85328],{"class":32,"line":68},[30,85329,85330],{"class":321},"    \u002F\u002F 自己定义数组的扩展方法\n",[30,85332,85333],{"class":32,"line":80},[30,85334,85335],{"class":321},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[30,85337,85338],{"class":32,"line":88},[30,85339,85340],{"class":321},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[30,85342,85343],{"class":32,"line":96},[30,85344,85345],{"class":321},"    \u002F\u002F ①.最大值\n",[30,85347,85348],{"class":32,"line":104},[30,85349,85350],{"class":321},"    Array.prototype.max = function () {\n",[30,85352,85353],{"class":32,"line":112},[30,85354,85355],{"class":321},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[30,85357,85358],{"class":32,"line":123},[30,85359,85360],{"class":321},"      return Math.max(...this)\n",[30,85362,85363],{"class":32,"line":131},[30,85364,85365],{"class":321},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[30,85367,85368],{"class":32,"line":142},[30,85369,2369],{"class":321},[30,85371,85372],{"class":32,"line":1811},[30,85373,85374],{"class":321},"    console.log(arr.max())\n",[30,85376,85377],{"class":32,"line":1825},[30,85378,85379],{"class":321},"    \u002F\u002F ②最小值\n",[30,85381,85382],{"class":32,"line":1830},[30,85383,85384],{"class":321},"    Array.prototype.min = function () {\n",[30,85386,85387],{"class":32,"line":1836},[30,85388,85389],{"class":321},"      return Math.min(...this)\n",[30,85391,85392],{"class":32,"line":1857},[30,85393,2369],{"class":321},[30,85395,85396],{"class":32,"line":1862},[30,85397,85398],{"class":321},"    console.log(arr.min())\n",[30,85400,85401],{"class":32,"line":1876},[30,85402,85403],{"class":321},"    \u002F\u002F③求和\n",[30,85405,85406],{"class":32,"line":1881},[30,85407,85408],{"class":321},"    Array.prototype.sum = function () {\n",[30,85410,85411],{"class":32,"line":1910},[30,85412,85413],{"class":321},"      return this.reduce((prev, current) => prev + current, 0)\n",[30,85415,85416],{"class":32,"line":1915},[30,85417,2369],{"class":321},[30,85419,85420],{"class":32,"line":1932},[30,85421,85422],{"class":321},"    console.log(arr.sum())\n",[30,85424,85425],{"class":32,"line":1937},[30,85426,85427],{"class":321},"    \u002F\u002F ③排序\n",[30,85429,85430],{"class":32,"line":1942},[30,85431,85432],{"class":321},"    Array.prototype.rever = function () {\n",[30,85434,85435],{"class":32,"line":1947},[30,85436,85437],{"class":321},"      return this.reverse()\n",[30,85439,85440],{"class":32,"line":1961},[30,85441,2369],{"class":321},[30,85443,85444],{"class":32,"line":1966},[30,85445,85446],{"class":321},"    console.log(arr.rever())\n",[30,85448,85449],{"class":32,"line":2759},[30,85450,2582],{"emptyLinePlaceholder":245},[30,85452,85453,85455,85457],{"class":32,"line":2773},[30,85454,52555],{"class":321},[30,85456,51951],{"class":51438},[30,85458,51445],{"class":321},[30,85460,85461,85463,85465],{"class":32,"line":2781},[30,85462,51923],{"class":321},[30,85464,51938],{"class":51438},[30,85466,51445],{"class":321},[157,85468,85469],{},[160,85470],{"alt":25,"src":85471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[287,85473,85475],{"id":85474},"_4133-constructor-属性","4.13.3 constructor 属性",[157,85477,85478],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[157,85480,85481],{},[160,85482],{"alt":25,"src":85483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[20,85485,85487],{"className":53205,"code":85486,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(Star.prototype)\n    console.log(Star.prototype.constructor === Star)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,85488,85489,85497,85505,85510,85515,85519,85524,85529,85534,85542],{"__ignoreMap":25},[30,85490,85491,85493,85495],{"class":32,"line":33},[30,85492,1230],{"class":321},[30,85494,51938],{"class":51438},[30,85496,51445],{"class":321},[30,85498,85499,85501,85503],{"class":32,"line":44},[30,85500,52282],{"class":321},[30,85502,51951],{"class":51438},[30,85504,51445],{"class":321},[30,85506,85507],{"class":32,"line":52},[30,85508,85509],{"class":321},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[30,85511,85512],{"class":32,"line":60},[30,85513,85514],{"class":321},"    function Star() {\n",[30,85516,85517],{"class":32,"line":68},[30,85518,2369],{"class":321},[30,85520,85521],{"class":32,"line":80},[30,85522,85523],{"class":321},"    const ldh = new Star()\n",[30,85525,85526],{"class":32,"line":88},[30,85527,85528],{"class":321},"    console.log(Star.prototype)\n",[30,85530,85531],{"class":32,"line":96},[30,85532,85533],{"class":321},"    console.log(Star.prototype.constructor === Star)\n",[30,85535,85536,85538,85540],{"class":32,"line":104},[30,85537,52555],{"class":321},[30,85539,51951],{"class":51438},[30,85541,51445],{"class":321},[30,85543,85544,85546,85548],{"class":32,"line":112},[30,85545,51923],{"class":321},[30,85547,51938],{"class":51438},[30,85549,51445],{"class":321},[157,85551,85552],{},[160,85553],{"alt":25,"src":85554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[157,85556,85557],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[20,85559,85561],{"className":53205,"code":85560,"language":53207,"meta":25,"style":25},"  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    \u002F\u002F const ldh = new Star()\n    \u002F\u002F console.log(Star.prototype)\n    \u002F\u002F console.log(Star.prototype.constructor === Star)\n\n    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n    \u002F\u002F Star.prototype.sing = function () {\n    \u002F\u002F   console.log('唱歌')\n    \u002F\u002F }\n    \u002F\u002F Star.prototype.dance = function () {\n    \u002F\u002F   console.log('跳舞')\n    \u002F\u002F }\n    console.log(Star.prototype)\n    Star.prototype = {\n      sing: function () {\n        console.log('唱歌')\n      },\n      dance: function () {\n        console.log('跳舞')\n      }\n    }\n    console.log(Star.prototype)\n  \u003C\u002Fscript>\n",[27,85562,85563,85571,85575,85579,85583,85588,85593,85598,85602,85607,85612,85617,85622,85627,85632,85636,85640,85645,85650,85655,85659,85664,85669,85673,85677,85681],{"__ignoreMap":25},[30,85564,85565,85567,85569],{"class":32,"line":33},[30,85566,52282],{"class":321},[30,85568,51951],{"class":51438},[30,85570,51445],{"class":321},[30,85572,85573],{"class":32,"line":44},[30,85574,85509],{"class":321},[30,85576,85577],{"class":32,"line":52},[30,85578,85514],{"class":321},[30,85580,85581],{"class":32,"line":60},[30,85582,2369],{"class":321},[30,85584,85585],{"class":32,"line":68},[30,85586,85587],{"class":321},"    \u002F\u002F const ldh = new Star()\n",[30,85589,85590],{"class":32,"line":80},[30,85591,85592],{"class":321},"    \u002F\u002F console.log(Star.prototype)\n",[30,85594,85595],{"class":32,"line":88},[30,85596,85597],{"class":321},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[30,85599,85600],{"class":32,"line":96},[30,85601,2582],{"emptyLinePlaceholder":245},[30,85603,85604],{"class":32,"line":104},[30,85605,85606],{"class":321},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[30,85608,85609],{"class":32,"line":112},[30,85610,85611],{"class":321},"    \u002F\u002F Star.prototype.sing = function () {\n",[30,85613,85614],{"class":32,"line":123},[30,85615,85616],{"class":321},"    \u002F\u002F   console.log('唱歌')\n",[30,85618,85619],{"class":32,"line":131},[30,85620,85621],{"class":321},"    \u002F\u002F }\n",[30,85623,85624],{"class":32,"line":142},[30,85625,85626],{"class":321},"    \u002F\u002F Star.prototype.dance = function () {\n",[30,85628,85629],{"class":32,"line":1811},[30,85630,85631],{"class":321},"    \u002F\u002F   console.log('跳舞')\n",[30,85633,85634],{"class":32,"line":1825},[30,85635,85621],{"class":321},[30,85637,85638],{"class":32,"line":1830},[30,85639,85528],{"class":321},[30,85641,85642],{"class":32,"line":1836},[30,85643,85644],{"class":321},"    Star.prototype = {\n",[30,85646,85647],{"class":32,"line":1857},[30,85648,85649],{"class":321},"      sing: function () {\n",[30,85651,85652],{"class":32,"line":1862},[30,85653,85654],{"class":321},"        console.log('唱歌')\n",[30,85656,85657],{"class":32,"line":1876},[30,85658,78030],{"class":321},[30,85660,85661],{"class":32,"line":1881},[30,85662,85663],{"class":321},"      dance: function () {\n",[30,85665,85666],{"class":32,"line":1910},[30,85667,85668],{"class":321},"        console.log('跳舞')\n",[30,85670,85671],{"class":32,"line":1915},[30,85672,52536],{"class":321},[30,85674,85675],{"class":32,"line":1932},[30,85676,2369],{"class":321},[30,85678,85679],{"class":32,"line":1937},[30,85680,85528],{"class":321},[30,85682,85683,85685,85687],{"class":32,"line":1942},[30,85684,52555],{"class":321},[30,85686,51951],{"class":51438},[30,85688,51445],{"class":321},[157,85690,85691],{},"进行输出结果后会发现：",[157,85693,85694],{},[160,85695],{"alt":25,"src":85696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[157,85698,85699],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[157,85701,85702],{},"所以，要重新指回创造这个原型对象的构造函数",[20,85704,85706],{"className":71351,"code":85705,"language":71353,"meta":25,"style":25},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[27,85707,85708,85722,85727,85732,85743,85756,85761,85772,85786,85790],{"__ignoreMap":25},[30,85709,85710,85713,85715,85718,85720],{"class":32,"line":33},[30,85711,85712],{"class":40},"Star",[30,85714,878],{"class":321},[30,85716,85717],{"class":40},"prototype",[30,85719,13746],{"class":317},[30,85721,15754],{"class":321},[30,85723,85724],{"class":32,"line":44},[30,85725,85726],{"class":379},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[30,85728,85729],{"class":32,"line":52},[30,85730,85731],{"class":321},"  constructor: Star,\n",[30,85733,85734,85737,85739,85741],{"class":32,"line":60},[30,85735,85736],{"class":36},"  sing",[30,85738,51575],{"class":321},[30,85740,54587],{"class":317},[30,85742,54590],{"class":321},[30,85744,85745,85747,85749,85751,85754],{"class":32,"line":68},[30,85746,73891],{"class":321},[30,85748,58385],{"class":36},[30,85750,322],{"class":321},[30,85752,85753],{"class":74},"'唱歌'",[30,85755,328],{"class":321},[30,85757,85758],{"class":32,"line":80},[30,85759,85760],{"class":321},"   },\n",[30,85762,85763,85766,85768,85770],{"class":32,"line":88},[30,85764,85765],{"class":36},"   dance",[30,85767,51575],{"class":321},[30,85769,54587],{"class":317},[30,85771,54590],{"class":321},[30,85773,85774,85777,85779,85781,85784],{"class":32,"line":96},[30,85775,85776],{"class":321},"     console.",[30,85778,58385],{"class":36},[30,85780,322],{"class":321},[30,85782,85783],{"class":74},"'跳舞'",[30,85785,328],{"class":321},[30,85787,85788],{"class":32,"line":104},[30,85789,4491],{"class":321},[30,85791,85792],{"class":32,"line":112},[30,85793,1751],{"class":321},[157,85795,85796],{},[160,85797],{"alt":25,"src":85798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[157,85800,85801],{},"总结1：",[157,85803,85804],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[157,85806,85807],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[157,85809,85810],{},"constructor指的是他的来源",[157,85812,85813],{},[160,85814],{"alt":25,"src":85815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[157,85817,85818],{},[160,85819],{"alt":25,"src":85820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[157,85822,85823],{},"总结2：",[157,85825,85826],{},[160,85827],{"alt":25,"src":85828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[157,85830,85831],{},[160,85832],{"alt":25,"src":85833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[157,85835,85836],{},[160,85837],{"alt":25,"src":85838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[287,85840,85842],{"id":85841},"_4134-对象原型","4.13.4 对象原型",[157,85844,85845],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[157,85847,85848],{},"对象原型就是__proto__这个属性",[157,85850,85851],{},[160,85852],{"alt":25,"src":85853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[157,85855,85856],{},[160,85857],{"alt":25,"src":85858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[157,85860,85861],{},[160,85862],{"alt":25,"src":85863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[157,85865,85866],{},[160,85867],{"alt":25,"src":85868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[20,85870,85872],{"className":53205,"code":85871,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,85873,85874,85882,85890,85894,85898,85902,85907,85915],{"__ignoreMap":25},[30,85875,85876,85878,85880],{"class":32,"line":33},[30,85877,1230],{"class":321},[30,85879,51938],{"class":51438},[30,85881,51445],{"class":321},[30,85883,85884,85886,85888],{"class":32,"line":44},[30,85885,52282],{"class":321},[30,85887,51951],{"class":51438},[30,85889,51445],{"class":321},[30,85891,85892],{"class":32,"line":52},[30,85893,85514],{"class":321},[30,85895,85896],{"class":32,"line":60},[30,85897,2369],{"class":321},[30,85899,85900],{"class":32,"line":68},[30,85901,85523],{"class":321},[30,85903,85904],{"class":32,"line":80},[30,85905,85906],{"class":321},"    console.log(ldh)\n",[30,85908,85909,85911,85913],{"class":32,"line":88},[30,85910,52555],{"class":321},[30,85912,51951],{"class":51438},[30,85914,51445],{"class":321},[30,85916,85917,85919,85921],{"class":32,"line":96},[30,85918,51923],{"class":321},[30,85920,51938],{"class":51438},[30,85922,51445],{"class":321},[157,85924,85925],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[157,85927,85928],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[157,85930,85931],{},[160,85932],{"alt":25,"src":85933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[157,85935,85936],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[157,85938,85939],{},"对象原型指向原型对象",[157,85941,85942],{},[160,85943],{"alt":25,"src":85944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[157,85946,85947],{},[160,85948],{"alt":25,"src":85949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[157,85951,85952],{},[160,85953],{"alt":25,"src":85954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[287,85956,85958],{"id":85957},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[157,85960,85961],{},[160,85962],{"alt":25,"src":85963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[271,85965,85966,85969,85972,85975],{},[150,85967,85968],{},"构造函数通过new的形式实例化得到实例对象",[150,85970,85971],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[150,85973,85974],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[150,85976,85977],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[157,85979,85980],{},[160,85981],{"alt":25,"src":85982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[157,85984,85985],{},"题目梳理：",[157,85987,85988],{},[160,85989],{"alt":25,"src":85990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[287,85992,85994],{"id":85993},"_4136-原型继承","4.13.6 原型继承",[157,85996,85997],{},[160,85998],{"alt":25,"src":85999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[157,86001,86002],{},[160,86003],{"alt":25,"src":86004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[157,86006,86007],{},[160,86008],{"alt":25,"src":86009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[157,86011,86012],{},[160,86013],{"alt":25,"src":86014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[157,86016,86017],{},[160,86018],{"alt":25,"src":86019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[157,86021,86022],{},[160,86023],{"alt":25,"src":86024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[157,86026,86027],{},[160,86028],{"alt":25,"src":86029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[157,86031,86032],{},[160,86033],{"alt":25,"src":86034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[157,86036,86037],{},"回顾：构造函数每次new得到对象都是不同的",[287,86039,86041],{"id":86040},"_4137-原型链","4.13.7 原型链",[157,86043,86044],{},[160,86045],{"alt":25,"src":86046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[157,86048,86049],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[157,86051,86052],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[157,86054,86055],{},"大哥是Object",[157,86057,86058],{},[160,86059],{"alt":25,"src":86060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[157,86062,86063],{},[160,86064],{"alt":25,"src":86065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[157,86067,86068],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[157,86070,86071],{},"万物皆对象",[287,86073,86075],{"id":86074},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[157,86077,86078],{},"模态框",[157,86080,86081],{},"以后遇见这个效果直接使用这个就行",[157,86083,86084],{},[160,86085],{"alt":25,"src":86086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[157,86088,86089],{},[160,86090],{"alt":25,"src":86091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[157,86093,86094],{},[160,86095],{"alt":25,"src":86096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[157,86098,86099],{},[160,86100],{"alt":25,"src":86101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[157,86103,86104],{},"补充知识点：",[271,86106,86107],{},[150,86108,86109],{},"append()",[157,86111,86112],{},[160,86113],{"alt":25,"src":86114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[20,86116,86118],{"className":50771,"code":86117,"language":50773,"meta":25,"style":25},"append(param1)\nappend(param1, param2)\nappend(param1, param2, \u002F* …, *\u002F paramN)\n\n\n\nlet div = document.createElement(\"div\");\nlet p = document.createElement(\"p\");\ndiv.append(p);\n\nconsole.log(div.childNodes); \u002F\u002F NodeList [ \u003Cp> ]\n",[27,86119,86120,86125,86130,86135,86139,86143,86147,86152,86157,86162,86166],{"__ignoreMap":25},[30,86121,86122],{"class":32,"line":33},[30,86123,86124],{"class":321},"append(param1)\n",[30,86126,86127],{"class":32,"line":44},[30,86128,86129],{"class":321},"append(param1, param2)\n",[30,86131,86132],{"class":32,"line":52},[30,86133,86134],{"class":321},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[30,86136,86137],{"class":32,"line":60},[30,86138,2582],{"emptyLinePlaceholder":245},[30,86140,86141],{"class":32,"line":68},[30,86142,2582],{"emptyLinePlaceholder":245},[30,86144,86145],{"class":32,"line":80},[30,86146,2582],{"emptyLinePlaceholder":245},[30,86148,86149],{"class":32,"line":88},[30,86150,86151],{"class":321},"let div = document.createElement(\"div\");\n",[30,86153,86154],{"class":32,"line":96},[30,86155,86156],{"class":321},"let p = document.createElement(\"p\");\n",[30,86158,86159],{"class":32,"line":104},[30,86160,86161],{"class":321},"div.append(p);\n",[30,86163,86164],{"class":32,"line":112},[30,86165,2582],{"emptyLinePlaceholder":245},[30,86167,86168,86171,86173],{"class":32,"line":123},[30,86169,86170],{"class":321},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[30,86172,157],{"class":51438},[30,86174,86175],{"class":321},"> ]\n",[271,86177,86178],{"start":44},[150,86179,86180],{},"remove()",[157,86182,86183],{},"自己删自己",[157,86185,86186],{},[160,86187],{"alt":25,"src":86188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[20,86190,86192],{"className":50771,"code":86191,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .modal {\n      width: 300px;\n      min-height: 100px;\n      box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n      border-radius: 4px;\n      position: fixed;\n      z-index: 999;\n      left: 50%;\n      top: 50%;\n      transform: translate3d(-50%, -50%, 0);\n      background-color: #fff;\n    }\n\n    .modal .header {\n      line-height: 40px;\n      padding: 0 10px;\n      position: relative;\n      font-size: 20px;\n    }\n\n    .modal .header i {\n      font-style: normal;\n      color: #999;\n      position: absolute;\n      right: 15px;\n      top: -2px;\n      cursor: pointer;\n    }\n\n    .modal .body {\n      text-align: center;\n      padding: 10px;\n    }\n\n    .modal .footer {\n      display: flex;\n      justify-content: flex-end;\n      padding: 10px;\n    }\n\n    .modal .footer a {\n      padding: 3px 8px;\n      background: #ccc;\n      text-decoration: none;\n      color: #fff;\n      border-radius: 2px;\n      margin-right: 10px;\n      font-size: 14px;\n    }\n\n    .modal .footer a.submit {\n      background-color: #369;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton id=\"delete\">删除\u003C\u002Fbutton>\n  \u003Cbutton id=\"login\">登录\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1.Model 构造函数的封装  模态框\n    function Modal(title = '', message = '') {\n      \u002F\u002F 创建Model 模态框盒子\n      \u002F\u002F 1.1 创建div标签\n      this.modalBox = document.createElement('div')\n      \u002F\u002F 1.2 给div 添加类名为model\n      this.modalBox.className = 'modal'\n      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n      this.modalBox.innerHTML = `\n        \u003Cdiv class=\"header\">${title}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n        \u003Cdiv class=\"body\">${message}\u003C\u002Fdiv>\n      `\n      \u002F\u002F console.log(this.modalBox)\n    }\n    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n    \u002F\u002F 2.给构造函数原型对象挂载open方法\n    Modal.prototype.open = function () {\n      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n      const box = document.querySelector('.modal')\n      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n      box && box.remove()\n      \u002F\u002F 主要这个方法不要用箭头函数\n      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n      \u002F\u002F append可以增加对象\n      document.body.append(this.modalBox)\n\n      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n      this.modalBox.querySelector('i').addEventListener('click', () => {\n        \u002F\u002F 这个地方需要用到箭头函数\n        \u002F\u002F 这个this是指向的是上上级 是实例对象\n        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n        this.close()\n      })\n    }\n\n    \u002F\u002F 测试一下 点击 删除按钮\n    document.querySelector('#delete').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const del = new Modal('温馨的提示', '您没有删除权限操作')\n      \u002F\u002F 实例对象调用open方法\n      del.open()\n    })\n    \u002F\u002F 测试一下 点击 登录按钮\n    document.querySelector('#login').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const log = new Modal('友情提示', '您还没有登录呢')\n      \u002F\u002F 实例对象调用open方法\n      log.open()\n    })\n    \u002F\u002F 3.给构造函数原型对象挂载close方法\n    Modal.prototype.close = function () {\n      this.modalBox.remove()\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,86193,86194,86204,86218,86222,86230,86244,86264,86276,86284,86291,86303,86316,86351,86363,86374,86386,86398,86410,86437,86447,86451,86455,86464,86476,86490,86500,86512,86516,86520,86530,86541,86551,86561,86574,86587,86597,86601,86605,86614,86624,86636,86640,86644,86653,86663,86673,86685,86689,86693,86703,86719,86730,86740,86750,86762,86774,86786,86790,86794,86807,86818,86822,86830,86838,86842,86850,86870,86890,86898,86903,86929,86934,86939,86958,86963,86975,86980,86991,87001,87011,87016,87021,87025,87030,87035,87040,87060,87065,87085,87090,87104,87109,87114,87119,87135,87139,87144,87173,87178,87183,87188,87199,87203,87207,87211,87216,87241,87246,87271,87276,87285,87289,87294,87319,87323,87348,87352,87361,87365,87370,87388,87398,87402,87410,87418,87422],{"__ignoreMap":25},[30,86195,86196,86198,86200,86202],{"class":32,"line":33},[30,86197,51435],{"class":321},[30,86199,51439],{"class":51438},[30,86201,51442],{"class":36},[30,86203,51445],{"class":321},[30,86205,86206,86208,86210,86212,86214,86216],{"class":32,"line":44},[30,86207,1230],{"class":321},[30,86209,50773],{"class":51438},[30,86211,51454],{"class":36},[30,86213,367],{"class":321},[30,86215,51459],{"class":74},[30,86217,51445],{"class":321},[30,86219,86220],{"class":32,"line":52},[30,86221,2582],{"emptyLinePlaceholder":245},[30,86223,86224,86226,86228],{"class":32,"line":60},[30,86225,1230],{"class":321},[30,86227,51472],{"class":51438},[30,86229,51445],{"class":321},[30,86231,86232,86234,86236,86238,86240,86242],{"class":32,"line":68},[30,86233,52282],{"class":321},[30,86235,51482],{"class":51438},[30,86237,51485],{"class":36},[30,86239,367],{"class":321},[30,86241,51490],{"class":74},[30,86243,51445],{"class":321},[30,86245,86246,86248,86250,86252,86254,86256,86258,86260,86262],{"class":32,"line":80},[30,86247,52282],{"class":321},[30,86249,51482],{"class":51438},[30,86251,15102],{"class":36},[30,86253,367],{"class":321},[30,86255,51529],{"class":74},[30,86257,51509],{"class":36},[30,86259,367],{"class":321},[30,86261,51536],{"class":74},[30,86263,51445],{"class":321},[30,86265,86266,86268,86270,86272,86274],{"class":32,"line":88},[30,86267,52282],{"class":321},[30,86269,51545],{"class":51438},[30,86271,51548],{"class":321},[30,86273,51545],{"class":51438},[30,86275,51445],{"class":321},[30,86277,86278,86280,86282],{"class":32,"line":96},[30,86279,52282],{"class":321},[30,86281,234],{"class":51438},[30,86283,51445],{"class":321},[30,86285,86286,86289],{"class":32,"line":104},[30,86287,86288],{"class":36},"    .modal",[30,86290,15754],{"class":321},[30,86292,86293,86295,86297,86299,86301],{"class":32,"line":112},[30,86294,54909],{"class":40},[30,86296,51575],{"class":321},[30,86298,4155],{"class":40},[30,86300,51630],{"class":317},[30,86302,1480],{"class":321},[30,86304,86305,86308,86310,86312,86314],{"class":32,"line":123},[30,86306,86307],{"class":40},"      min-height",[30,86309,51575],{"class":321},[30,86311,631],{"class":40},[30,86313,51630],{"class":317},[30,86315,1480],{"class":321},[30,86317,86318,86320,86322,86324,86326,86328,86330,86332,86334,86336,86338,86340,86342,86344,86346,86349],{"class":32,"line":131},[30,86319,78888],{"class":40},[30,86321,51575],{"class":321},[30,86323,511],{"class":40},[30,86325,4275],{"class":40},[30,86327,2220],{"class":40},[30,86329,51630],{"class":317},[30,86331,78905],{"class":40},[30,86333,322],{"class":321},[30,86335,511],{"class":40},[30,86337,12617],{"class":321},[30,86339,511],{"class":40},[30,86341,12617],{"class":321},[30,86343,511],{"class":40},[30,86345,12617],{"class":321},[30,86347,86348],{"class":40},"0.1",[30,86350,2901],{"class":321},[30,86352,86353,86355,86357,86359,86361],{"class":32,"line":142},[30,86354,55272],{"class":40},[30,86356,51575],{"class":321},[30,86358,613],{"class":40},[30,86360,51630],{"class":317},[30,86362,1480],{"class":321},[30,86364,86365,86367,86369,86372],{"class":32,"line":1811},[30,86366,54897],{"class":40},[30,86368,51575],{"class":321},[30,86370,86371],{"class":40},"fixed",[30,86373,1480],{"class":321},[30,86375,86376,86379,86381,86384],{"class":32,"line":1825},[30,86377,86378],{"class":40},"      z-index",[30,86380,51575],{"class":321},[30,86382,86383],{"class":40},"999",[30,86385,1480],{"class":321},[30,86387,86388,86390,86392,86394,86396],{"class":32,"line":1830},[30,86389,54976],{"class":40},[30,86391,51575],{"class":321},[30,86393,976],{"class":40},[30,86395,648],{"class":317},[30,86397,1480],{"class":321},[30,86399,86400,86402,86404,86406,86408],{"class":32,"line":1836},[30,86401,55085],{"class":40},[30,86403,51575],{"class":321},[30,86405,976],{"class":40},[30,86407,648],{"class":317},[30,86409,1480],{"class":321},[30,86411,86412,86414,86416,86418,86420,86423,86425,86427,86429,86431,86433,86435],{"class":32,"line":1857},[30,86413,78929],{"class":40},[30,86415,51575],{"class":321},[30,86417,78934],{"class":40},[30,86419,322],{"class":321},[30,86421,86422],{"class":40},"-50",[30,86424,648],{"class":317},[30,86426,12617],{"class":321},[30,86428,86422],{"class":40},[30,86430,648],{"class":317},[30,86432,12617],{"class":321},[30,86434,511],{"class":40},[30,86436,2901],{"class":321},[30,86438,86439,86441,86443,86445],{"class":32,"line":1862},[30,86440,55022],{"class":40},[30,86442,51575],{"class":321},[30,86444,60980],{"class":40},[30,86446,1480],{"class":321},[30,86448,86449],{"class":32,"line":1876},[30,86450,2369],{"class":321},[30,86452,86453],{"class":32,"line":1881},[30,86454,2582],{"emptyLinePlaceholder":245},[30,86456,86457,86459,86462],{"class":32,"line":1910},[30,86458,86288],{"class":36},[30,86460,86461],{"class":36}," .header",[30,86463,15754],{"class":321},[30,86465,86466,86468,86470,86472,86474],{"class":32,"line":1915},[30,86467,57497],{"class":40},[30,86469,51575],{"class":321},[30,86471,721],{"class":40},[30,86473,51630],{"class":317},[30,86475,1480],{"class":321},[30,86477,86478,86480,86482,86484,86486,86488],{"class":32,"line":1932},[30,86479,54833],{"class":40},[30,86481,51575],{"class":321},[30,86483,511],{"class":40},[30,86485,2220],{"class":40},[30,86487,51630],{"class":317},[30,86489,1480],{"class":321},[30,86491,86492,86494,86496,86498],{"class":32,"line":1937},[30,86493,54897],{"class":40},[30,86495,51575],{"class":321},[30,86497,54902],{"class":40},[30,86499,1480],{"class":321},[30,86501,86502,86504,86506,86508,86510],{"class":32,"line":1942},[30,86503,55060],{"class":40},[30,86505,51575],{"class":321},[30,86507,1020],{"class":40},[30,86509,51630],{"class":317},[30,86511,1480],{"class":321},[30,86513,86514],{"class":32,"line":1947},[30,86515,2369],{"class":321},[30,86517,86518],{"class":32,"line":1961},[30,86519,2582],{"emptyLinePlaceholder":245},[30,86521,86522,86524,86526,86528],{"class":32,"line":1966},[30,86523,86288],{"class":36},[30,86525,86461],{"class":36},[30,86527,3214],{"class":51438},[30,86529,15754],{"class":321},[30,86531,86532,86535,86537,86539],{"class":32,"line":2759},[30,86533,86534],{"class":40},"      font-style",[30,86536,51575],{"class":321},[30,86538,63979],{"class":40},[30,86540,1480],{"class":321},[30,86542,86543,86545,86547,86549],{"class":32,"line":2773},[30,86544,57554],{"class":40},[30,86546,51575],{"class":321},[30,86548,62208],{"class":40},[30,86550,1480],{"class":321},[30,86552,86553,86555,86557,86559],{"class":32,"line":2781},[30,86554,54897],{"class":40},[30,86556,51575],{"class":321},[30,86558,54969],{"class":40},[30,86560,1480],{"class":321},[30,86562,86563,86566,86568,86570,86572],{"class":32,"line":2786},[30,86564,86565],{"class":40},"      right",[30,86567,51575],{"class":321},[30,86569,895],{"class":40},[30,86571,51630],{"class":317},[30,86573,1480],{"class":321},[30,86575,86576,86578,86580,86583,86585],{"class":32,"line":2792},[30,86577,55085],{"class":40},[30,86579,51575],{"class":321},[30,86581,86582],{"class":40},"-2",[30,86584,51630],{"class":317},[30,86586,1480],{"class":321},[30,86588,86589,86591,86593,86595],{"class":32,"line":2798},[30,86590,62163],{"class":40},[30,86592,51575],{"class":321},[30,86594,62168],{"class":40},[30,86596,1480],{"class":321},[30,86598,86599],{"class":32,"line":2803},[30,86600,2369],{"class":321},[30,86602,86603],{"class":32,"line":8130},[30,86604,2582],{"emptyLinePlaceholder":245},[30,86606,86607,86609,86612],{"class":32,"line":8154},[30,86608,86288],{"class":36},[30,86610,86611],{"class":36}," .body",[30,86613,15754],{"class":321},[30,86615,86616,86618,86620,86622],{"class":32,"line":8159},[30,86617,57424],{"class":40},[30,86619,51575],{"class":321},[30,86621,51730],{"class":40},[30,86623,1480],{"class":321},[30,86625,86626,86628,86630,86632,86634],{"class":32,"line":8165},[30,86627,54833],{"class":40},[30,86629,51575],{"class":321},[30,86631,766],{"class":40},[30,86633,51630],{"class":317},[30,86635,1480],{"class":321},[30,86637,86638],{"class":32,"line":8192},[30,86639,2369],{"class":321},[30,86641,86642],{"class":32,"line":8197},[30,86643,2582],{"emptyLinePlaceholder":245},[30,86645,86646,86648,86651],{"class":32,"line":8203},[30,86647,86288],{"class":36},[30,86649,86650],{"class":36}," .footer",[30,86652,15754],{"class":321},[30,86654,86655,86657,86659,86661],{"class":32,"line":8215},[30,86656,55147],{"class":40},[30,86658,51575],{"class":321},[30,86660,51615],{"class":40},[30,86662,1480],{"class":321},[30,86664,86665,86667,86669,86671],{"class":32,"line":8227},[30,86666,55158],{"class":40},[30,86668,51575],{"class":321},[30,86670,51718],{"class":40},[30,86672,1480],{"class":321},[30,86674,86675,86677,86679,86681,86683],{"class":32,"line":8239},[30,86676,54833],{"class":40},[30,86678,51575],{"class":321},[30,86680,766],{"class":40},[30,86682,51630],{"class":317},[30,86684,1480],{"class":321},[30,86686,86687],{"class":32,"line":9898},[30,86688,2369],{"class":321},[30,86690,86691],{"class":32,"line":9923},[30,86692,2582],{"emptyLinePlaceholder":245},[30,86694,86695,86697,86699,86701],{"class":32,"line":9946},[30,86696,86288],{"class":36},[30,86698,86650],{"class":36},[30,86700,1585],{"class":51438},[30,86702,15754],{"class":321},[30,86704,86705,86707,86709,86711,86713,86715,86717],{"class":32,"line":9970},[30,86706,54833],{"class":40},[30,86708,51575],{"class":321},[30,86710,392],{"class":40},[30,86712,51630],{"class":317},[30,86714,2265],{"class":40},[30,86716,51630],{"class":317},[30,86718,1480],{"class":321},[30,86720,86721,86723,86725,86728],{"class":32,"line":9975},[30,86722,61859],{"class":40},[30,86724,51575],{"class":321},[30,86726,86727],{"class":40},"#ccc",[30,86729,1480],{"class":321},[30,86731,86732,86734,86736,86738],{"class":32,"line":9980},[30,86733,64108],{"class":40},[30,86735,51575],{"class":321},[30,86737,54875],{"class":40},[30,86739,1480],{"class":321},[30,86741,86742,86744,86746,86748],{"class":32,"line":9985},[30,86743,57554],{"class":40},[30,86745,51575],{"class":321},[30,86747,60980],{"class":40},[30,86749,1480],{"class":321},[30,86751,86752,86754,86756,86758,86760],{"class":32,"line":9994},[30,86753,55272],{"class":40},[30,86755,51575],{"class":321},[30,86757,398],{"class":40},[30,86759,51630],{"class":317},[30,86761,1480],{"class":321},[30,86763,86764,86766,86768,86770,86772],{"class":32,"line":9999},[30,86765,61888],{"class":40},[30,86767,51575],{"class":321},[30,86769,766],{"class":40},[30,86771,51630],{"class":317},[30,86773,1480],{"class":321},[30,86775,86776,86778,86780,86782,86784],{"class":32,"line":10005},[30,86777,55060],{"class":40},[30,86779,51575],{"class":321},[30,86781,869],{"class":40},[30,86783,51630],{"class":317},[30,86785,1480],{"class":321},[30,86787,86788],{"class":32,"line":10026},[30,86789,2369],{"class":321},[30,86791,86792],{"class":32,"line":10032},[30,86793,2582],{"emptyLinePlaceholder":245},[30,86795,86796,86798,86800,86802,86805],{"class":32,"line":10046},[30,86797,86288],{"class":36},[30,86799,86650],{"class":36},[30,86801,1585],{"class":51438},[30,86803,86804],{"class":36},".submit",[30,86806,15754],{"class":321},[30,86808,86809,86811,86813,86816],{"class":32,"line":10052},[30,86810,55022],{"class":40},[30,86812,51575],{"class":321},[30,86814,86815],{"class":40},"#369",[30,86817,1480],{"class":321},[30,86819,86820],{"class":32,"line":10079},[30,86821,2369],{"class":321},[30,86823,86824,86826,86828],{"class":32,"line":10088},[30,86825,52555],{"class":321},[30,86827,234],{"class":51438},[30,86829,51445],{"class":321},[30,86831,86832,86834,86836],{"class":32,"line":10094},[30,86833,51923],{"class":321},[30,86835,51472],{"class":51438},[30,86837,51445],{"class":321},[30,86839,86840],{"class":32,"line":10102},[30,86841,2582],{"emptyLinePlaceholder":245},[30,86843,86844,86846,86848],{"class":32,"line":10107},[30,86845,1230],{"class":321},[30,86847,51938],{"class":51438},[30,86849,51445],{"class":321},[30,86851,86852,86854,86856,86858,86860,86863,86866,86868],{"class":32,"line":16786},[30,86853,52282],{"class":321},[30,86855,54025],{"class":51438},[30,86857,15141],{"class":36},[30,86859,367],{"class":321},[30,86861,86862],{"class":74},"\"delete\"",[30,86864,86865],{"class":321},">删除\u003C\u002F",[30,86867,54025],{"class":51438},[30,86869,51445],{"class":321},[30,86871,86872,86874,86876,86878,86880,86883,86886,86888],{"class":32,"line":16792},[30,86873,52282],{"class":321},[30,86875,54025],{"class":51438},[30,86877,15141],{"class":36},[30,86879,367],{"class":321},[30,86881,86882],{"class":74},"\"login\"",[30,86884,86885],{"class":321},">登录\u003C\u002F",[30,86887,54025],{"class":51438},[30,86889,51445],{"class":321},[30,86891,86892,86894,86896],{"class":32,"line":16815},[30,86893,52282],{"class":321},[30,86895,51951],{"class":51438},[30,86897,51445],{"class":321},[30,86899,86900],{"class":32,"line":16821},[30,86901,86902],{"class":379},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[30,86904,86905,86907,86910,86912,86914,86916,86918,86920,86923,86925,86927],{"class":32,"line":16844},[30,86906,70222],{"class":317},[30,86908,86909],{"class":36}," Modal",[30,86911,322],{"class":321},[30,86913,51545],{"class":5398},[30,86915,13746],{"class":317},[30,86917,70068],{"class":74},[30,86919,12617],{"class":321},[30,86921,86922],{"class":5398},"message",[30,86924,13746],{"class":317},[30,86926,70068],{"class":74},[30,86928,12624],{"class":321},[30,86930,86931],{"class":32,"line":16858},[30,86932,86933],{"class":379},"      \u002F\u002F 创建Model 模态框盒子\n",[30,86935,86936],{"class":32,"line":16878},[30,86937,86938],{"class":379},"      \u002F\u002F 1.1 创建div标签\n",[30,86940,86941,86943,86946,86948,86950,86952,86954,86956],{"class":32,"line":16884},[30,86942,70189],{"class":40},[30,86944,86945],{"class":321},".modalBox ",[30,86947,367],{"class":317},[30,86949,54534],{"class":321},[30,86951,70289],{"class":36},[30,86953,322],{"class":321},[30,86955,82069],{"class":74},[30,86957,328],{"class":321},[30,86959,86960],{"class":32,"line":16895},[30,86961,86962],{"class":379},"      \u002F\u002F 1.2 给div 添加类名为model\n",[30,86964,86965,86967,86970,86972],{"class":32,"line":16918},[30,86966,70189],{"class":40},[30,86968,86969],{"class":321},".modalBox.className ",[30,86971,367],{"class":317},[30,86973,86974],{"class":74}," 'modal'\n",[30,86976,86977],{"class":32,"line":16940},[30,86978,86979],{"class":379},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[30,86981,86982,86984,86987,86989],{"class":32,"line":16945},[30,86983,70189],{"class":40},[30,86985,86986],{"class":321},".modalBox.innerHTML ",[30,86988,367],{"class":317},[30,86990,70306],{"class":74},[30,86992,86993,86996,86998],{"class":32,"line":16951},[30,86994,86995],{"class":74},"        \u003Cdiv class=\"header\">${",[30,86997,51545],{"class":321},[30,86999,87000],{"class":74},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[30,87002,87003,87006,87008],{"class":32,"line":16965},[30,87004,87005],{"class":74},"        \u003Cdiv class=\"body\">${",[30,87007,86922],{"class":321},[30,87009,87010],{"class":74},"}\u003C\u002Fdiv>\n",[30,87012,87013],{"class":32,"line":16978},[30,87014,87015],{"class":74},"      `\n",[30,87017,87018],{"class":32,"line":16983},[30,87019,87020],{"class":379},"      \u002F\u002F console.log(this.modalBox)\n",[30,87022,87023],{"class":32,"line":16997},[30,87024,2369],{"class":321},[30,87026,87027],{"class":32,"line":17002},[30,87028,87029],{"class":379},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[30,87031,87032],{"class":32,"line":17008},[30,87033,87034],{"class":379},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[30,87036,87037],{"class":32,"line":17013},[30,87038,87039],{"class":379},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[30,87041,87042,87045,87047,87049,87051,87054,87056,87058],{"class":32,"line":17027},[30,87043,87044],{"class":40},"    Modal",[30,87046,878],{"class":321},[30,87048,85717],{"class":40},[30,87050,878],{"class":321},[30,87052,87053],{"class":36},"open",[30,87055,13746],{"class":317},[30,87057,59056],{"class":317},[30,87059,54590],{"class":321},[30,87061,87062],{"class":32,"line":17032},[30,87063,87064],{"class":379},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[30,87066,87067,87069,87072,87074,87076,87078,87080,87083],{"class":32,"line":17037},[30,87068,58366],{"class":317},[30,87070,87071],{"class":40}," box",[30,87073,13746],{"class":317},[30,87075,54534],{"class":321},[30,87077,54537],{"class":36},[30,87079,322],{"class":321},[30,87081,87082],{"class":74},"'.modal'",[30,87084,328],{"class":321},[30,87086,87087],{"class":32,"line":17051},[30,87088,87089],{"class":379},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[30,87091,87092,87095,87097,87100,87102],{"class":32,"line":17063},[30,87093,87094],{"class":321},"      box ",[30,87096,1898],{"class":317},[30,87098,87099],{"class":321}," box.",[30,87101,57144],{"class":36},[30,87103,2158],{"class":321},[30,87105,87106],{"class":32,"line":17068},[30,87107,87108],{"class":379},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[30,87110,87111],{"class":32,"line":17081},[30,87112,87113],{"class":379},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[30,87115,87116],{"class":32,"line":17086},[30,87117,87118],{"class":379},"      \u002F\u002F append可以增加对象\n",[30,87120,87121,87124,87127,87129,87132],{"class":32,"line":17091},[30,87122,87123],{"class":321},"      document.body.",[30,87125,87126],{"class":36},"append",[30,87128,322],{"class":321},[30,87130,87131],{"class":40},"this",[30,87133,87134],{"class":321},".modalBox)\n",[30,87136,87137],{"class":32,"line":17096},[30,87138,2582],{"emptyLinePlaceholder":245},[30,87140,87141],{"class":32,"line":17109},[30,87142,87143],{"class":379},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[30,87145,87146,87148,87151,87153,87155,87158,87160,87162,87164,87166,87169,87171],{"class":32,"line":17114},[30,87147,70189],{"class":40},[30,87149,87150],{"class":321},".modalBox.",[30,87152,54537],{"class":36},[30,87154,322],{"class":321},[30,87156,87157],{"class":74},"'i'",[30,87159,30964],{"class":321},[30,87161,57951],{"class":36},[30,87163,322],{"class":321},[30,87165,57956],{"class":74},[30,87167,87168],{"class":321},", () ",[30,87170,84860],{"class":317},[30,87172,15754],{"class":321},[30,87174,87175],{"class":32,"line":32771},[30,87176,87177],{"class":379},"        \u002F\u002F 这个地方需要用到箭头函数\n",[30,87179,87180],{"class":32,"line":32777},[30,87181,87182],{"class":379},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[30,87184,87185],{"class":32,"line":32783},[30,87186,87187],{"class":379},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[30,87189,87190,87192,87194,87197],{"class":32,"line":32789},[30,87191,64864],{"class":40},[30,87193,878],{"class":321},[30,87195,87196],{"class":36},"close",[30,87198,2158],{"class":321},[30,87200,87201],{"class":32,"line":32795},[30,87202,64953],{"class":321},[30,87204,87205],{"class":32,"line":32806},[30,87206,2369],{"class":321},[30,87208,87209],{"class":32,"line":32812},[30,87210,2582],{"emptyLinePlaceholder":245},[30,87212,87213],{"class":32,"line":32832},[30,87214,87215],{"class":379},"    \u002F\u002F 测试一下 点击 删除按钮\n",[30,87217,87218,87220,87222,87224,87227,87229,87231,87233,87235,87237,87239],{"class":32,"line":32838},[30,87219,52545],{"class":321},[30,87221,54537],{"class":36},[30,87223,322],{"class":321},[30,87225,87226],{"class":74},"'#delete'",[30,87228,30964],{"class":321},[30,87230,57951],{"class":36},[30,87232,322],{"class":321},[30,87234,57956],{"class":74},[30,87236,87168],{"class":321},[30,87238,84860],{"class":317},[30,87240,15754],{"class":321},[30,87242,87243],{"class":32,"line":32849},[30,87244,87245],{"class":379},"      \u002F\u002F 先调用Model构造函数\n",[30,87247,87248,87250,87253,87255,87257,87259,87261,87264,87266,87269],{"class":32,"line":32855},[30,87249,58366],{"class":317},[30,87251,87252],{"class":40}," del",[30,87254,13746],{"class":317},[30,87256,11760],{"class":317},[30,87258,86909],{"class":36},[30,87260,322],{"class":321},[30,87262,87263],{"class":74},"'温馨的提示'",[30,87265,12617],{"class":321},[30,87267,87268],{"class":74},"'您没有删除权限操作'",[30,87270,328],{"class":321},[30,87272,87273],{"class":32,"line":32861},[30,87274,87275],{"class":379},"      \u002F\u002F 实例对象调用open方法\n",[30,87277,87278,87281,87283],{"class":32,"line":32867},[30,87279,87280],{"class":321},"      del.",[30,87282,87053],{"class":36},[30,87284,2158],{"class":321},[30,87286,87287],{"class":32,"line":32873},[30,87288,33599],{"class":321},[30,87290,87291],{"class":32,"line":32879},[30,87292,87293],{"class":379},"    \u002F\u002F 测试一下 点击 登录按钮\n",[30,87295,87296,87298,87300,87302,87305,87307,87309,87311,87313,87315,87317],{"class":32,"line":32885},[30,87297,52545],{"class":321},[30,87299,54537],{"class":36},[30,87301,322],{"class":321},[30,87303,87304],{"class":74},"'#login'",[30,87306,30964],{"class":321},[30,87308,57951],{"class":36},[30,87310,322],{"class":321},[30,87312,57956],{"class":74},[30,87314,87168],{"class":321},[30,87316,84860],{"class":317},[30,87318,15754],{"class":321},[30,87320,87321],{"class":32,"line":32891},[30,87322,87245],{"class":379},[30,87324,87325,87327,87330,87332,87334,87336,87338,87341,87343,87346],{"class":32,"line":32911},[30,87326,58366],{"class":317},[30,87328,87329],{"class":40}," log",[30,87331,13746],{"class":317},[30,87333,11760],{"class":317},[30,87335,86909],{"class":36},[30,87337,322],{"class":321},[30,87339,87340],{"class":74},"'友情提示'",[30,87342,12617],{"class":321},[30,87344,87345],{"class":74},"'您还没有登录呢'",[30,87347,328],{"class":321},[30,87349,87350],{"class":32,"line":32917},[30,87351,87275],{"class":379},[30,87353,87354,87357,87359],{"class":32,"line":32933},[30,87355,87356],{"class":321},"      log.",[30,87358,87053],{"class":36},[30,87360,2158],{"class":321},[30,87362,87363],{"class":32,"line":32939},[30,87364,33599],{"class":321},[30,87366,87367],{"class":32,"line":32953},[30,87368,87369],{"class":379},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[30,87371,87372,87374,87376,87378,87380,87382,87384,87386],{"class":32,"line":32959},[30,87373,87044],{"class":40},[30,87375,878],{"class":321},[30,87377,85717],{"class":40},[30,87379,878],{"class":321},[30,87381,87196],{"class":36},[30,87383,13746],{"class":317},[30,87385,59056],{"class":317},[30,87387,54590],{"class":321},[30,87389,87390,87392,87394,87396],{"class":32,"line":32974},[30,87391,70189],{"class":40},[30,87393,87150],{"class":321},[30,87395,57144],{"class":36},[30,87397,2158],{"class":321},[30,87399,87400],{"class":32,"line":32980},[30,87401,2369],{"class":321},[30,87403,87404,87406,87408],{"class":32,"line":32989},[30,87405,52555],{"class":321},[30,87407,51951],{"class":51438},[30,87409,51445],{"class":321},[30,87411,87412,87414,87416],{"class":32,"line":32995},[30,87413,51923],{"class":321},[30,87415,51938],{"class":51438},[30,87417,51445],{"class":321},[30,87419,87420],{"class":32,"line":33004},[30,87421,2582],{"emptyLinePlaceholder":245},[30,87423,87424,87426,87428],{"class":32,"line":33010},[30,87425,51923],{"class":321},[30,87427,50773],{"class":51438},[30,87429,51445],{"class":321},[157,87431,87432],{},[160,87433],{"alt":25,"src":87434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[15,87436,87438],{"id":87437},"_414-深浅拷贝","4.14 深浅拷贝",[287,87440,87442],{"id":87441},"_4141-浅拷贝","4.14.1 浅拷贝",[157,87444,87445],{},[160,87446],{"alt":25,"src":87447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[157,87449,87450],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[157,87452,87453],{},[160,87454],{"alt":25,"src":87455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[157,87457,87458],{},[160,87459],{"alt":25,"src":87460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[157,87462,87463],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[157,87465,87466],{},[160,87467],{"alt":25,"src":87468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[157,87470,11514],{},[157,87472,87473],{},[160,87474],{"alt":25,"src":87475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[287,87477,87479],{"id":87478},"_4142-深拷贝","4.14.2 深拷贝",[157,87481,87482],{},"深拷贝：拷贝的是对象，不是地址",[157,87484,87485],{},"常用的三种方法：",[271,87487,87488,87491,87494],{},[150,87489,87490],{},"通过递归实现深拷贝",[150,87492,87493],{},"lodash\u002FcloneDeep",[150,87495,87496],{},"通过JSON.stringify()实现",[22180,87498,87500],{"id":87499},"_41421-递归函数","4.14.2.1 递归函数",[157,87502,87503],{},[160,87504],{"alt":25,"src":87505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[271,87507,87508],{},[150,87509,87510],{},"死递归占溢出：",[20,87512,87514],{"className":53205,"code":87513,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,87515,87516,87524,87532,87536,87541,87545,87550,87558],{"__ignoreMap":25},[30,87517,87518,87520,87522],{"class":32,"line":33},[30,87519,1230],{"class":321},[30,87521,51938],{"class":51438},[30,87523,51445],{"class":321},[30,87525,87526,87528,87530],{"class":32,"line":44},[30,87527,52282],{"class":321},[30,87529,51951],{"class":51438},[30,87531,51445],{"class":321},[30,87533,87534],{"class":32,"line":52},[30,87535,77281],{"class":321},[30,87537,87538],{"class":32,"line":60},[30,87539,87540],{"class":321},"      fn()\n",[30,87542,87543],{"class":32,"line":68},[30,87544,2369],{"class":321},[30,87546,87547],{"class":32,"line":80},[30,87548,87549],{"class":321},"    fn()\n",[30,87551,87552,87554,87556],{"class":32,"line":88},[30,87553,52555],{"class":321},[30,87555,51951],{"class":51438},[30,87557,51445],{"class":321},[30,87559,87560,87562,87564],{"class":32,"line":96},[30,87561,51923],{"class":321},[30,87563,51938],{"class":51438},[30,87565,51445],{"class":321},[271,87567,87568],{"start":44},[150,87569,87570],{},"递归函数要加判断条件：",[157,87572,87573],{},[160,87574],{"alt":25,"src":87575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[271,87577,87578],{"start":52},[150,87579,87580],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[20,87582,87584],{"className":50771,"code":87583,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    function getTime() {\n      document.querySelector('div').innerHTML = new Date().toLocaleString()\n      setTimeout(getTime, 1000)\n    }\n    getTime()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,87585,87586,87596,87610,87614,87622,87636,87656,87668,87676,87680,87688,87700,87708,87716,87741,87753,87757,87764,87772,87780,87784],{"__ignoreMap":25},[30,87587,87588,87590,87592,87594],{"class":32,"line":33},[30,87589,51435],{"class":321},[30,87591,51439],{"class":51438},[30,87593,51442],{"class":36},[30,87595,51445],{"class":321},[30,87597,87598,87600,87602,87604,87606,87608],{"class":32,"line":44},[30,87599,1230],{"class":321},[30,87601,50773],{"class":51438},[30,87603,51454],{"class":36},[30,87605,367],{"class":321},[30,87607,51459],{"class":74},[30,87609,51445],{"class":321},[30,87611,87612],{"class":32,"line":52},[30,87613,2582],{"emptyLinePlaceholder":245},[30,87615,87616,87618,87620],{"class":32,"line":60},[30,87617,1230],{"class":321},[30,87619,51472],{"class":51438},[30,87621,51445],{"class":321},[30,87623,87624,87626,87628,87630,87632,87634],{"class":32,"line":68},[30,87625,52282],{"class":321},[30,87627,51482],{"class":51438},[30,87629,51485],{"class":36},[30,87631,367],{"class":321},[30,87633,51490],{"class":74},[30,87635,51445],{"class":321},[30,87637,87638,87640,87642,87644,87646,87648,87650,87652,87654],{"class":32,"line":80},[30,87639,52282],{"class":321},[30,87641,51482],{"class":51438},[30,87643,15102],{"class":36},[30,87645,367],{"class":321},[30,87647,51529],{"class":74},[30,87649,51509],{"class":36},[30,87651,367],{"class":321},[30,87653,51536],{"class":74},[30,87655,51445],{"class":321},[30,87657,87658,87660,87662,87664,87666],{"class":32,"line":88},[30,87659,52282],{"class":321},[30,87661,51545],{"class":51438},[30,87663,51548],{"class":321},[30,87665,51545],{"class":51438},[30,87667,51445],{"class":321},[30,87669,87670,87672,87674],{"class":32,"line":96},[30,87671,51923],{"class":321},[30,87673,51472],{"class":51438},[30,87675,51445],{"class":321},[30,87677,87678],{"class":32,"line":104},[30,87679,2582],{"emptyLinePlaceholder":245},[30,87681,87682,87684,87686],{"class":32,"line":112},[30,87683,1230],{"class":321},[30,87685,51938],{"class":51438},[30,87687,51445],{"class":321},[30,87689,87690,87692,87694,87696,87698],{"class":32,"line":123},[30,87691,52282],{"class":321},[30,87693,51749],{"class":51438},[30,87695,55452],{"class":321},[30,87697,51749],{"class":51438},[30,87699,51445],{"class":321},[30,87701,87702,87704,87706],{"class":32,"line":131},[30,87703,52282],{"class":321},[30,87705,51951],{"class":51438},[30,87707,51445],{"class":321},[30,87709,87710,87712,87714],{"class":32,"line":142},[30,87711,70222],{"class":317},[30,87713,73911],{"class":36},[30,87715,11035],{"class":321},[30,87717,87718,87720,87722,87724,87726,87728,87730,87732,87734,87736,87739],{"class":32,"line":1811},[30,87719,55909],{"class":321},[30,87721,54537],{"class":36},[30,87723,322],{"class":321},[30,87725,82069],{"class":74},[30,87727,74387],{"class":321},[30,87729,367],{"class":317},[30,87731,11760],{"class":317},[30,87733,73927],{"class":36},[30,87735,17443],{"class":321},[30,87737,87738],{"class":36},"toLocaleString",[30,87740,2158],{"class":321},[30,87742,87743,87746,87749,87751],{"class":32,"line":1825},[30,87744,87745],{"class":36},"      setTimeout",[30,87747,87748],{"class":321},"(getTime, ",[30,87750,6592],{"class":40},[30,87752,328],{"class":321},[30,87754,87755],{"class":32,"line":1830},[30,87756,2369],{"class":321},[30,87758,87759,87762],{"class":32,"line":1836},[30,87760,87761],{"class":36},"    getTime",[30,87763,2158],{"class":321},[30,87765,87766,87768,87770],{"class":32,"line":1857},[30,87767,52555],{"class":321},[30,87769,51951],{"class":51438},[30,87771,51445],{"class":321},[30,87773,87774,87776,87778],{"class":32,"line":1862},[30,87775,51923],{"class":321},[30,87777,51938],{"class":51438},[30,87779,51445],{"class":321},[30,87781,87782],{"class":32,"line":1876},[30,87783,2582],{"emptyLinePlaceholder":245},[30,87785,87786,87788,87790],{"class":32,"line":1881},[30,87787,51923],{"class":321},[30,87789,50773],{"class":51438},[30,87791,51445],{"class":321},[157,87793,87794],{},[160,87795],{"alt":25,"src":87796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[271,87798,87799],{"start":60},[150,87800,87490],{},[157,87802,87803],{},[160,87804],{"alt":25,"src":87805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[157,87807,87808],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[157,87810,39327],{},[157,87812,87813],{},"这个是简易版的递归函数深拷贝",[157,87815,87816],{},"一定要注意先数组再对象，因为万物皆可对象",[20,87818,87820],{"className":50771,"code":87819,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = {}\n    \u002F\u002F 拷贝函数\n    function deepCopy(newObj, oldObj) {\n      for (let k in oldObj) {\n        \u002F\u002F 处理数组的问题\n        \u002F\u002F 判断是否属于数组\n        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n        if (oldObj[k] instanceof Array) {\n          \u002F\u002F newObj[k]  接收的内容放到[]\n          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n          newObj[k] = []\n          deepCopy(newObj[k], oldObj[k])\n        } else if (oldObj[k] instanceof Object) {\n          newObj[k] = {}\n          deepCopy(newObj[k], oldObj[k])\n        } else {\n          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n          \u002F\u002F newObj[k]与newObj写法是等价的\n          newObj[k] = oldObj[k]\n        }\n      }\n    }\n    deepCopy(o, obj) \u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n    console.log(o)\n    o.age = 20\n    o.hobby[0] = '篮球'\n    o.family = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,87821,87822,87832,87846,87850,87858,87872,87892,87904,87912,87916,87924,87932,87942,87951,87959,87975,87979,87987,87991,87995,88007,88012,88031,88047,88052,88057,88062,88077,88082,88087,88096,88104,88121,88129,88135,88143,88148,88153,88162,88166,88170,88174,88185,88194,88204,88218,88228,88236,88244,88252,88256],{"__ignoreMap":25},[30,87823,87824,87826,87828,87830],{"class":32,"line":33},[30,87825,51435],{"class":321},[30,87827,51439],{"class":51438},[30,87829,51442],{"class":36},[30,87831,51445],{"class":321},[30,87833,87834,87836,87838,87840,87842,87844],{"class":32,"line":44},[30,87835,1230],{"class":321},[30,87837,50773],{"class":51438},[30,87839,51454],{"class":36},[30,87841,367],{"class":321},[30,87843,51459],{"class":74},[30,87845,51445],{"class":321},[30,87847,87848],{"class":32,"line":52},[30,87849,2582],{"emptyLinePlaceholder":245},[30,87851,87852,87854,87856],{"class":32,"line":60},[30,87853,1230],{"class":321},[30,87855,51472],{"class":51438},[30,87857,51445],{"class":321},[30,87859,87860,87862,87864,87866,87868,87870],{"class":32,"line":68},[30,87861,52282],{"class":321},[30,87863,51482],{"class":51438},[30,87865,51485],{"class":36},[30,87867,367],{"class":321},[30,87869,51490],{"class":74},[30,87871,51445],{"class":321},[30,87873,87874,87876,87878,87880,87882,87884,87886,87888,87890],{"class":32,"line":80},[30,87875,52282],{"class":321},[30,87877,51482],{"class":51438},[30,87879,15102],{"class":36},[30,87881,367],{"class":321},[30,87883,51529],{"class":74},[30,87885,51509],{"class":36},[30,87887,367],{"class":321},[30,87889,51536],{"class":74},[30,87891,51445],{"class":321},[30,87893,87894,87896,87898,87900,87902],{"class":32,"line":88},[30,87895,52282],{"class":321},[30,87897,51545],{"class":51438},[30,87899,51548],{"class":321},[30,87901,51545],{"class":51438},[30,87903,51445],{"class":321},[30,87905,87906,87908,87910],{"class":32,"line":96},[30,87907,51923],{"class":321},[30,87909,51472],{"class":51438},[30,87911,51445],{"class":321},[30,87913,87914],{"class":32,"line":104},[30,87915,2582],{"emptyLinePlaceholder":245},[30,87917,87918,87920,87922],{"class":32,"line":112},[30,87919,1230],{"class":321},[30,87921,51938],{"class":51438},[30,87923,51445],{"class":321},[30,87925,87926,87928,87930],{"class":32,"line":123},[30,87927,52282],{"class":321},[30,87929,51951],{"class":51438},[30,87931,51445],{"class":321},[30,87933,87934,87936,87938,87940],{"class":32,"line":131},[30,87935,11403],{"class":317},[30,87937,70109],{"class":40},[30,87939,13746],{"class":317},[30,87941,15754],{"class":321},[30,87943,87944,87946,87949],{"class":32,"line":142},[30,87945,71754],{"class":321},[30,87947,87948],{"class":74},"'pink'",[30,87950,31604],{"class":321},[30,87952,87953,87955,87957],{"class":32,"line":1811},[30,87954,71764],{"class":321},[30,87956,970],{"class":40},[30,87958,31604],{"class":321},[30,87960,87961,87964,87967,87969,87972],{"class":32,"line":1825},[30,87962,87963],{"class":321},"      hobby: [",[30,87965,87966],{"class":74},"'乒乓球'",[30,87968,12617],{"class":321},[30,87970,87971],{"class":74},"'足球'",[30,87973,87974],{"class":321},"],\n",[30,87976,87977],{"class":32,"line":1830},[30,87978,78010],{"class":321},[30,87980,87981,87984],{"class":32,"line":1836},[30,87982,87983],{"class":321},"        baby: ",[30,87985,87986],{"class":74},"'小pink'\n",[30,87988,87989],{"class":32,"line":1857},[30,87990,52536],{"class":321},[30,87992,87993],{"class":32,"line":1862},[30,87994,2369],{"class":321},[30,87996,87997,87999,88002,88004],{"class":32,"line":1876},[30,87998,11403],{"class":317},[30,88000,88001],{"class":40}," o",[30,88003,13746],{"class":317},[30,88005,88006],{"class":321}," {}\n",[30,88008,88009],{"class":32,"line":1881},[30,88010,88011],{"class":379},"    \u002F\u002F 拷贝函数\n",[30,88013,88014,88016,88019,88021,88024,88026,88029],{"class":32,"line":1910},[30,88015,70222],{"class":317},[30,88017,88018],{"class":36}," deepCopy",[30,88020,322],{"class":321},[30,88022,88023],{"class":5398},"newObj",[30,88025,12617],{"class":321},[30,88027,88028],{"class":5398},"oldObj",[30,88030,12624],{"class":321},[30,88032,88033,88035,88037,88039,88042,88044],{"class":32,"line":1915},[30,88034,52422],{"class":317},[30,88036,1841],{"class":321},[30,88038,51985],{"class":317},[30,88040,88041],{"class":321}," k ",[30,88043,26181],{"class":317},[30,88045,88046],{"class":321}," oldObj) {\n",[30,88048,88049],{"class":32,"line":1932},[30,88050,88051],{"class":379},"        \u002F\u002F 处理数组的问题\n",[30,88053,88054],{"class":32,"line":1937},[30,88055,88056],{"class":379},"        \u002F\u002F 判断是否属于数组\n",[30,88058,88059],{"class":32,"line":1942},[30,88060,88061],{"class":379},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[30,88063,88064,88066,88069,88072,88075],{"class":32,"line":1947},[30,88065,2679],{"class":317},[30,88067,88068],{"class":321}," (oldObj[k] ",[30,88070,88071],{"class":317},"instanceof",[30,88073,88074],{"class":36}," Array",[30,88076,12624],{"class":321},[30,88078,88079],{"class":32,"line":1961},[30,88080,88081],{"class":379},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[30,88083,88084],{"class":32,"line":1966},[30,88085,88086],{"class":379},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[30,88088,88089,88092,88094],{"class":32,"line":2759},[30,88090,88091],{"class":321},"          newObj[k] ",[30,88093,367],{"class":317},[30,88095,51976],{"class":321},[30,88097,88098,88101],{"class":32,"line":2773},[30,88099,88100],{"class":36},"          deepCopy",[30,88102,88103],{"class":321},"(newObj[k], oldObj[k])\n",[30,88105,88106,88108,88110,88112,88114,88116,88119],{"class":32,"line":2781},[30,88107,80218],{"class":321},[30,88109,1884],{"class":317},[30,88111,1887],{"class":317},[30,88113,88068],{"class":321},[30,88115,88071],{"class":317},[30,88117,88118],{"class":36}," Object",[30,88120,12624],{"class":321},[30,88122,88123,88125,88127],{"class":32,"line":2786},[30,88124,88091],{"class":321},[30,88126,367],{"class":317},[30,88128,88006],{"class":321},[30,88130,88131,88133],{"class":32,"line":2792},[30,88132,88100],{"class":36},[30,88134,88103],{"class":321},[30,88136,88137,88139,88141],{"class":32,"line":2798},[30,88138,80218],{"class":321},[30,88140,1884],{"class":317},[30,88142,15754],{"class":321},[30,88144,88145],{"class":32,"line":2803},[30,88146,88147],{"class":379},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[30,88149,88150],{"class":32,"line":8130},[30,88151,88152],{"class":379},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[30,88154,88155,88157,88159],{"class":32,"line":8154},[30,88156,88091],{"class":321},[30,88158,367],{"class":317},[30,88160,88161],{"class":321}," oldObj[k]\n",[30,88163,88164],{"class":32,"line":8159},[30,88165,2711],{"class":321},[30,88167,88168],{"class":32,"line":8165},[30,88169,52536],{"class":321},[30,88171,88172],{"class":32,"line":8192},[30,88173,2369],{"class":321},[30,88175,88176,88179,88182],{"class":32,"line":8197},[30,88177,88178],{"class":36},"    deepCopy",[30,88180,88181],{"class":321},"(o, obj) ",[30,88183,88184],{"class":379},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[30,88186,88187,88189,88191],{"class":32,"line":8203},[30,88188,73891],{"class":321},[30,88190,58385],{"class":36},[30,88192,88193],{"class":321},"(o)\n",[30,88195,88196,88199,88201],{"class":32,"line":8215},[30,88197,88198],{"class":321},"    o.age ",[30,88200,367],{"class":317},[30,88202,88203],{"class":40}," 20\n",[30,88205,88206,88209,88211,88213,88215],{"class":32,"line":8227},[30,88207,88208],{"class":321},"    o.hobby[",[30,88210,511],{"class":40},[30,88212,4625],{"class":321},[30,88214,367],{"class":317},[30,88216,88217],{"class":74}," '篮球'\n",[30,88219,88220,88223,88225],{"class":32,"line":8239},[30,88221,88222],{"class":321},"    o.family ",[30,88224,367],{"class":317},[30,88226,88227],{"class":74}," '老pink'\n",[30,88229,88230,88232,88234],{"class":32,"line":9898},[30,88231,73891],{"class":321},[30,88233,58385],{"class":36},[30,88235,70174],{"class":321},[30,88237,88238,88240,88242],{"class":32,"line":9923},[30,88239,52555],{"class":321},[30,88241,51951],{"class":51438},[30,88243,51445],{"class":321},[30,88245,88246,88248,88250],{"class":32,"line":9946},[30,88247,51923],{"class":321},[30,88249,51938],{"class":51438},[30,88251,51445],{"class":321},[30,88253,88254],{"class":32,"line":9970},[30,88255,2582],{"emptyLinePlaceholder":245},[30,88257,88258,88260,88262],{"class":32,"line":9975},[30,88259,51923],{"class":321},[30,88261,50773],{"class":51438},[30,88263,51445],{"class":321},[157,88265,88266],{},[160,88267],{"alt":25,"src":88268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22180,88270,88272,88273],{"id":88271},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[469,88274,88275],{},"js库lodash里面cloneDeep内部实现了深拷贝",[157,88277,88278],{},[558,88279,88280],{"href":88280,"rel":88281},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24045],[157,88283,88284],{},"lodash里边的方法都要加上一个下划线_",[157,88286,88287],{},"_.cloneDeep()",[20,88289,88291],{"className":50771,"code":88290,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003C!-- 先引用这个库 -->\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = _.cloneDeep(obj)\n    console.log(o)\n    o.family.baby = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,88292,88293,88303,88317,88321,88329,88343,88363,88375,88383,88387,88395,88400,88419,88427,88437,88445,88453,88465,88469,88475,88479,88483,88499,88507,88516,88524,88532,88540,88544],{"__ignoreMap":25},[30,88294,88295,88297,88299,88301],{"class":32,"line":33},[30,88296,51435],{"class":321},[30,88298,51439],{"class":51438},[30,88300,51442],{"class":36},[30,88302,51445],{"class":321},[30,88304,88305,88307,88309,88311,88313,88315],{"class":32,"line":44},[30,88306,1230],{"class":321},[30,88308,50773],{"class":51438},[30,88310,51454],{"class":36},[30,88312,367],{"class":321},[30,88314,51459],{"class":74},[30,88316,51445],{"class":321},[30,88318,88319],{"class":32,"line":52},[30,88320,2582],{"emptyLinePlaceholder":245},[30,88322,88323,88325,88327],{"class":32,"line":60},[30,88324,1230],{"class":321},[30,88326,51472],{"class":51438},[30,88328,51445],{"class":321},[30,88330,88331,88333,88335,88337,88339,88341],{"class":32,"line":68},[30,88332,52282],{"class":321},[30,88334,51482],{"class":51438},[30,88336,51485],{"class":36},[30,88338,367],{"class":321},[30,88340,51490],{"class":74},[30,88342,51445],{"class":321},[30,88344,88345,88347,88349,88351,88353,88355,88357,88359,88361],{"class":32,"line":80},[30,88346,52282],{"class":321},[30,88348,51482],{"class":51438},[30,88350,15102],{"class":36},[30,88352,367],{"class":321},[30,88354,51529],{"class":74},[30,88356,51509],{"class":36},[30,88358,367],{"class":321},[30,88360,51536],{"class":74},[30,88362,51445],{"class":321},[30,88364,88365,88367,88369,88371,88373],{"class":32,"line":88},[30,88366,52282],{"class":321},[30,88368,51545],{"class":51438},[30,88370,51548],{"class":321},[30,88372,51545],{"class":51438},[30,88374,51445],{"class":321},[30,88376,88377,88379,88381],{"class":32,"line":96},[30,88378,51923],{"class":321},[30,88380,51472],{"class":51438},[30,88382,51445],{"class":321},[30,88384,88385],{"class":32,"line":104},[30,88386,2582],{"emptyLinePlaceholder":245},[30,88388,88389,88391,88393],{"class":32,"line":112},[30,88390,1230],{"class":321},[30,88392,51938],{"class":51438},[30,88394,51445],{"class":321},[30,88396,88397],{"class":32,"line":123},[30,88398,88399],{"class":379},"  \u003C!-- 先引用这个库 -->\n",[30,88401,88402,88404,88406,88408,88410,88413,88415,88417],{"class":32,"line":131},[30,88403,52282],{"class":321},[30,88405,51951],{"class":51438},[30,88407,55377],{"class":36},[30,88409,367],{"class":321},[30,88411,88412],{"class":74},"\"lodash.min.js\"",[30,88414,55452],{"class":321},[30,88416,51951],{"class":51438},[30,88418,51445],{"class":321},[30,88420,88421,88423,88425],{"class":32,"line":142},[30,88422,52282],{"class":321},[30,88424,51951],{"class":51438},[30,88426,51445],{"class":321},[30,88428,88429,88431,88433,88435],{"class":32,"line":1811},[30,88430,11403],{"class":317},[30,88432,70109],{"class":40},[30,88434,13746],{"class":317},[30,88436,15754],{"class":321},[30,88438,88439,88441,88443],{"class":32,"line":1825},[30,88440,71754],{"class":321},[30,88442,87948],{"class":74},[30,88444,31604],{"class":321},[30,88446,88447,88449,88451],{"class":32,"line":1830},[30,88448,71764],{"class":321},[30,88450,970],{"class":40},[30,88452,31604],{"class":321},[30,88454,88455,88457,88459,88461,88463],{"class":32,"line":1836},[30,88456,87963],{"class":321},[30,88458,87966],{"class":74},[30,88460,12617],{"class":321},[30,88462,87971],{"class":74},[30,88464,87974],{"class":321},[30,88466,88467],{"class":32,"line":1857},[30,88468,78010],{"class":321},[30,88470,88471,88473],{"class":32,"line":1862},[30,88472,87983],{"class":321},[30,88474,87986],{"class":74},[30,88476,88477],{"class":32,"line":1876},[30,88478,52536],{"class":321},[30,88480,88481],{"class":32,"line":1881},[30,88482,2369],{"class":321},[30,88484,88485,88487,88489,88491,88494,88497],{"class":32,"line":1910},[30,88486,11403],{"class":317},[30,88488,88001],{"class":40},[30,88490,13746],{"class":317},[30,88492,88493],{"class":321}," _.",[30,88495,88496],{"class":36},"cloneDeep",[30,88498,70174],{"class":321},[30,88500,88501,88503,88505],{"class":32,"line":1915},[30,88502,73891],{"class":321},[30,88504,58385],{"class":36},[30,88506,88193],{"class":321},[30,88508,88509,88512,88514],{"class":32,"line":1932},[30,88510,88511],{"class":321},"    o.family.baby ",[30,88513,367],{"class":317},[30,88515,88227],{"class":74},[30,88517,88518,88520,88522],{"class":32,"line":1937},[30,88519,73891],{"class":321},[30,88521,58385],{"class":36},[30,88523,70174],{"class":321},[30,88525,88526,88528,88530],{"class":32,"line":1942},[30,88527,52555],{"class":321},[30,88529,51951],{"class":51438},[30,88531,51445],{"class":321},[30,88533,88534,88536,88538],{"class":32,"line":1947},[30,88535,51923],{"class":321},[30,88537,51938],{"class":51438},[30,88539,51445],{"class":321},[30,88541,88542],{"class":32,"line":1961},[30,88543,2582],{"emptyLinePlaceholder":245},[30,88545,88546,88548,88550],{"class":32,"line":1966},[30,88547,51923],{"class":321},[30,88549,50773],{"class":51438},[30,88551,51445],{"class":321},[157,88553,88554],{},[160,88555],{"alt":25,"src":88556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22180,88558,88560],{"id":88559},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[20,88562,88564],{"className":50771,"code":88563,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n    const o = JSON.parse(JSON.stringify(obj))\n    console.log(o)\n    o.family.baby = '123'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,88565,88566,88576,88590,88594,88602,88616,88636,88648,88656,88660,88668,88676,88686,88694,88702,88714,88718,88724,88728,88732,88737,88742,88747,88773,88781,88790,88798,88806,88814,88818],{"__ignoreMap":25},[30,88567,88568,88570,88572,88574],{"class":32,"line":33},[30,88569,51435],{"class":321},[30,88571,51439],{"class":51438},[30,88573,51442],{"class":36},[30,88575,51445],{"class":321},[30,88577,88578,88580,88582,88584,88586,88588],{"class":32,"line":44},[30,88579,1230],{"class":321},[30,88581,50773],{"class":51438},[30,88583,51454],{"class":36},[30,88585,367],{"class":321},[30,88587,51459],{"class":74},[30,88589,51445],{"class":321},[30,88591,88592],{"class":32,"line":52},[30,88593,2582],{"emptyLinePlaceholder":245},[30,88595,88596,88598,88600],{"class":32,"line":60},[30,88597,1230],{"class":321},[30,88599,51472],{"class":51438},[30,88601,51445],{"class":321},[30,88603,88604,88606,88608,88610,88612,88614],{"class":32,"line":68},[30,88605,52282],{"class":321},[30,88607,51482],{"class":51438},[30,88609,51485],{"class":36},[30,88611,367],{"class":321},[30,88613,51490],{"class":74},[30,88615,51445],{"class":321},[30,88617,88618,88620,88622,88624,88626,88628,88630,88632,88634],{"class":32,"line":80},[30,88619,52282],{"class":321},[30,88621,51482],{"class":51438},[30,88623,15102],{"class":36},[30,88625,367],{"class":321},[30,88627,51529],{"class":74},[30,88629,51509],{"class":36},[30,88631,367],{"class":321},[30,88633,51536],{"class":74},[30,88635,51445],{"class":321},[30,88637,88638,88640,88642,88644,88646],{"class":32,"line":88},[30,88639,52282],{"class":321},[30,88641,51545],{"class":51438},[30,88643,51548],{"class":321},[30,88645,51545],{"class":51438},[30,88647,51445],{"class":321},[30,88649,88650,88652,88654],{"class":32,"line":96},[30,88651,51923],{"class":321},[30,88653,51472],{"class":51438},[30,88655,51445],{"class":321},[30,88657,88658],{"class":32,"line":104},[30,88659,2582],{"emptyLinePlaceholder":245},[30,88661,88662,88664,88666],{"class":32,"line":112},[30,88663,1230],{"class":321},[30,88665,51938],{"class":51438},[30,88667,51445],{"class":321},[30,88669,88670,88672,88674],{"class":32,"line":123},[30,88671,52282],{"class":321},[30,88673,51951],{"class":51438},[30,88675,51445],{"class":321},[30,88677,88678,88680,88682,88684],{"class":32,"line":131},[30,88679,11403],{"class":317},[30,88681,70109],{"class":40},[30,88683,13746],{"class":317},[30,88685,15754],{"class":321},[30,88687,88688,88690,88692],{"class":32,"line":142},[30,88689,71754],{"class":321},[30,88691,87948],{"class":74},[30,88693,31604],{"class":321},[30,88695,88696,88698,88700],{"class":32,"line":1811},[30,88697,71764],{"class":321},[30,88699,970],{"class":40},[30,88701,31604],{"class":321},[30,88703,88704,88706,88708,88710,88712],{"class":32,"line":1825},[30,88705,87963],{"class":321},[30,88707,87966],{"class":74},[30,88709,12617],{"class":321},[30,88711,87971],{"class":74},[30,88713,87974],{"class":321},[30,88715,88716],{"class":32,"line":1830},[30,88717,78010],{"class":321},[30,88719,88720,88722],{"class":32,"line":1836},[30,88721,87983],{"class":321},[30,88723,87986],{"class":74},[30,88725,88726],{"class":32,"line":1857},[30,88727,52536],{"class":321},[30,88729,88730],{"class":32,"line":1862},[30,88731,2369],{"class":321},[30,88733,88734],{"class":32,"line":1876},[30,88735,88736],{"class":379},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[30,88738,88739],{"class":32,"line":1881},[30,88740,88741],{"class":379},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[30,88743,88744],{"class":32,"line":1910},[30,88745,88746],{"class":379},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[30,88748,88749,88751,88753,88755,88758,88760,88763,88765,88767,88769,88771],{"class":32,"line":1915},[30,88750,11403],{"class":317},[30,88752,88001],{"class":40},[30,88754,13746],{"class":317},[30,88756,88757],{"class":40}," JSON",[30,88759,878],{"class":321},[30,88761,88762],{"class":36},"parse",[30,88764,322],{"class":321},[30,88766,71802],{"class":40},[30,88768,878],{"class":321},[30,88770,71807],{"class":36},[30,88772,71810],{"class":321},[30,88774,88775,88777,88779],{"class":32,"line":1932},[30,88776,73891],{"class":321},[30,88778,58385],{"class":36},[30,88780,88193],{"class":321},[30,88782,88783,88785,88787],{"class":32,"line":1937},[30,88784,88511],{"class":321},[30,88786,367],{"class":317},[30,88788,88789],{"class":74}," '123'\n",[30,88791,88792,88794,88796],{"class":32,"line":1942},[30,88793,73891],{"class":321},[30,88795,58385],{"class":36},[30,88797,70174],{"class":321},[30,88799,88800,88802,88804],{"class":32,"line":1947},[30,88801,52555],{"class":321},[30,88803,51951],{"class":51438},[30,88805,51445],{"class":321},[30,88807,88808,88810,88812],{"class":32,"line":1961},[30,88809,51923],{"class":321},[30,88811,51938],{"class":51438},[30,88813,51445],{"class":321},[30,88815,88816],{"class":32,"line":1966},[30,88817,2582],{"emptyLinePlaceholder":245},[30,88819,88820,88822,88824],{"class":32,"line":2759},[30,88821,51923],{"class":321},[30,88823,50773],{"class":51438},[30,88825,51445],{"class":321},[157,88827,88828],{},[160,88829],{"alt":25,"src":88830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[15,88832,88834],{"id":88833},"_415-异常处理","4.15 异常处理",[271,88836,88837],{},[150,88838,88839],{},"throw抛异常",[157,88841,88842],{},[160,88843],{"alt":25,"src":88844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[271,88846,88847],{"start":44},[150,88848,88849],{},"try\u002Fcatch 捕获错误信息",[157,88851,88852],{},[160,88853],{"alt":25,"src":88854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[20,88856,88858],{"className":50771,"code":88857,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cp>123\u003C\u002Fp>\n  \u003Cscript>\n    function fn() {\n      try {\n        \u002F\u002F 可能发生错误的代码  要写到try中\n        const p = document.querySelector('.p')\n        p.style.color = 'red'\n      } catch (err) {\n        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n        console.log(err.message)\n        \u002F\u002F 想要中断程序，需要加return\n        \u002F\u002F return\n        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n        throw new Error('你看看，选择器错误了吧')\n      }\n      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n      finally {\n        alert('弹出对话框')\n      }\n      console.log(11)\n\n    }\n    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,88859,88860,88870,88884,88888,88896,88910,88930,88942,88950,88954,88962,88974,88982,88991,88998,89003,89022,89031,89042,89047,89057,89062,89067,89072,89089,89093,89098,89105,89117,89121,89133,89137,89141,89146,89151,89158,89166,89174,89178],{"__ignoreMap":25},[30,88861,88862,88864,88866,88868],{"class":32,"line":33},[30,88863,51435],{"class":321},[30,88865,51439],{"class":51438},[30,88867,51442],{"class":36},[30,88869,51445],{"class":321},[30,88871,88872,88874,88876,88878,88880,88882],{"class":32,"line":44},[30,88873,1230],{"class":321},[30,88875,50773],{"class":51438},[30,88877,51454],{"class":36},[30,88879,367],{"class":321},[30,88881,51459],{"class":74},[30,88883,51445],{"class":321},[30,88885,88886],{"class":32,"line":52},[30,88887,2582],{"emptyLinePlaceholder":245},[30,88889,88890,88892,88894],{"class":32,"line":60},[30,88891,1230],{"class":321},[30,88893,51472],{"class":51438},[30,88895,51445],{"class":321},[30,88897,88898,88900,88902,88904,88906,88908],{"class":32,"line":68},[30,88899,52282],{"class":321},[30,88901,51482],{"class":51438},[30,88903,51485],{"class":36},[30,88905,367],{"class":321},[30,88907,51490],{"class":74},[30,88909,51445],{"class":321},[30,88911,88912,88914,88916,88918,88920,88922,88924,88926,88928],{"class":32,"line":80},[30,88913,52282],{"class":321},[30,88915,51482],{"class":51438},[30,88917,15102],{"class":36},[30,88919,367],{"class":321},[30,88921,51529],{"class":74},[30,88923,51509],{"class":36},[30,88925,367],{"class":321},[30,88927,51536],{"class":74},[30,88929,51445],{"class":321},[30,88931,88932,88934,88936,88938,88940],{"class":32,"line":88},[30,88933,52282],{"class":321},[30,88935,51545],{"class":51438},[30,88937,51548],{"class":321},[30,88939,51545],{"class":51438},[30,88941,51445],{"class":321},[30,88943,88944,88946,88948],{"class":32,"line":96},[30,88945,51923],{"class":321},[30,88947,51472],{"class":51438},[30,88949,51445],{"class":321},[30,88951,88952],{"class":32,"line":104},[30,88953,2582],{"emptyLinePlaceholder":245},[30,88955,88956,88958,88960],{"class":32,"line":112},[30,88957,1230],{"class":321},[30,88959,51938],{"class":51438},[30,88961,51445],{"class":321},[30,88963,88964,88966,88968,88970,88972],{"class":32,"line":123},[30,88965,52282],{"class":321},[30,88967,157],{"class":51438},[30,88969,53632],{"class":321},[30,88971,157],{"class":51438},[30,88973,51445],{"class":321},[30,88975,88976,88978,88980],{"class":32,"line":131},[30,88977,52282],{"class":321},[30,88979,51951],{"class":51438},[30,88981,51445],{"class":321},[30,88983,88984,88986,88989],{"class":32,"line":142},[30,88985,70222],{"class":317},[30,88987,88988],{"class":36}," fn",[30,88990,11035],{"class":321},[30,88992,88993,88996],{"class":32,"line":1811},[30,88994,88995],{"class":317},"      try",[30,88997,15754],{"class":321},[30,88999,89000],{"class":32,"line":1825},[30,89001,89002],{"class":379},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[30,89004,89005,89007,89009,89011,89013,89015,89017,89020],{"class":32,"line":1830},[30,89006,61408],{"class":317},[30,89008,7007],{"class":40},[30,89010,13746],{"class":317},[30,89012,54534],{"class":321},[30,89014,54537],{"class":36},[30,89016,322],{"class":321},[30,89018,89019],{"class":74},"'.p'",[30,89021,328],{"class":321},[30,89023,89024,89027,89029],{"class":32,"line":1836},[30,89025,89026],{"class":321},"        p.style.color ",[30,89028,367],{"class":317},[30,89030,67189],{"class":74},[30,89032,89033,89036,89039],{"class":32,"line":1857},[30,89034,89035],{"class":321},"      } ",[30,89037,89038],{"class":317},"catch",[30,89040,89041],{"class":321}," (err) {\n",[30,89043,89044],{"class":32,"line":1862},[30,89045,89046],{"class":379},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[30,89048,89049,89052,89054],{"class":32,"line":1876},[30,89050,89051],{"class":321},"        console.",[30,89053,58385],{"class":36},[30,89055,89056],{"class":321},"(err.message)\n",[30,89058,89059],{"class":32,"line":1881},[30,89060,89061],{"class":379},"        \u002F\u002F 想要中断程序，需要加return\n",[30,89063,89064],{"class":32,"line":1910},[30,89065,89066],{"class":379},"        \u002F\u002F return\n",[30,89068,89069],{"class":32,"line":1915},[30,89070,89071],{"class":379},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[30,89073,89074,89077,89079,89082,89084,89087],{"class":32,"line":1932},[30,89075,89076],{"class":317},"        throw",[30,89078,11760],{"class":317},[30,89080,89081],{"class":36}," Error",[30,89083,322],{"class":321},[30,89085,89086],{"class":74},"'你看看，选择器错误了吧'",[30,89088,328],{"class":321},[30,89090,89091],{"class":32,"line":1937},[30,89092,52536],{"class":321},[30,89094,89095],{"class":32,"line":1942},[30,89096,89097],{"class":379},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[30,89099,89100,89103],{"class":32,"line":1947},[30,89101,89102],{"class":317},"      finally",[30,89104,15754],{"class":321},[30,89106,89107,89110,89112,89115],{"class":32,"line":1961},[30,89108,89109],{"class":36},"        alert",[30,89111,322],{"class":321},[30,89113,89114],{"class":74},"'弹出对话框'",[30,89116,328],{"class":321},[30,89118,89119],{"class":32,"line":1966},[30,89120,52536],{"class":321},[30,89122,89123,89125,89127,89129,89131],{"class":32,"line":2759},[30,89124,58382],{"class":321},[30,89126,58385],{"class":36},[30,89128,322],{"class":321},[30,89130,792],{"class":40},[30,89132,328],{"class":321},[30,89134,89135],{"class":32,"line":2773},[30,89136,2582],{"emptyLinePlaceholder":245},[30,89138,89139],{"class":32,"line":2781},[30,89140,2369],{"class":321},[30,89142,89143],{"class":32,"line":2786},[30,89144,89145],{"class":379},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[30,89147,89148],{"class":32,"line":2792},[30,89149,89150],{"class":379},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[30,89152,89153,89156],{"class":32,"line":2798},[30,89154,89155],{"class":36},"    fn",[30,89157,2158],{"class":321},[30,89159,89160,89162,89164],{"class":32,"line":2803},[30,89161,52555],{"class":321},[30,89163,51951],{"class":51438},[30,89165,51445],{"class":321},[30,89167,89168,89170,89172],{"class":32,"line":8130},[30,89169,51923],{"class":321},[30,89171,51938],{"class":51438},[30,89173,51445],{"class":321},[30,89175,89176],{"class":32,"line":8154},[30,89177,2582],{"emptyLinePlaceholder":245},[30,89179,89180,89182,89184],{"class":32,"line":8159},[30,89181,51923],{"class":321},[30,89183,50773],{"class":51438},[30,89185,51445],{"class":321},[157,89187,89188],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[271,89190,89191],{"start":52},[150,89192,89193],{},"debugger",[157,89195,89196],{},[160,89197],{"alt":25,"src":89198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[157,89200,89201],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[15,89203,89205],{"id":89204},"_416-处理this","4.16 处理this",[287,89207,89209],{"id":89208},"_4161-this的指向","4.16.1 this的指向",[271,89211,89212],{},[150,89213,89214],{},"普通函数的this",[157,89216,89217],{},[160,89218],{"alt":25,"src":89219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[271,89221,89222],{"start":44},[150,89223,89224],{},"箭头函数的this",[157,89226,89227],{},[160,89228],{"alt":25,"src":89229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[157,89231,89232],{},[160,89233],{"alt":25,"src":89234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[157,89236,89237],{},[160,89238],{"alt":25,"src":89239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[287,89241,89243],{"id":89242},"_4162-this的改变","4.16.2 this的改变",[157,89245,89246],{},"call() apply() bind()",[271,89248,89249],{},[150,89250,89251],{},"call()",[157,89253,89254],{},[160,89255],{"alt":25,"src":89256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[157,89258,89259],{},"两个作用：①调用函数；②改变this指向",[20,89261,89263],{"className":53205,"code":89262,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink'\n    }\n    function fn(x, y) {\n      console.log(this)  \u002F\u002Fwindow\n      console.log(x + y)\n    }\n    fn.call(obj, 1, 2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,89264,89265,89273,89281,89285,89290,89294,89299,89304,89309,89313,89318,89326],{"__ignoreMap":25},[30,89266,89267,89269,89271],{"class":32,"line":33},[30,89268,1230],{"class":321},[30,89270,51938],{"class":51438},[30,89272,51445],{"class":321},[30,89274,89275,89277,89279],{"class":32,"line":44},[30,89276,52282],{"class":321},[30,89278,51951],{"class":51438},[30,89280,51445],{"class":321},[30,89282,89283],{"class":32,"line":52},[30,89284,71661],{"class":321},[30,89286,89287],{"class":32,"line":60},[30,89288,89289],{"class":321},"      uname: 'pink'\n",[30,89291,89292],{"class":32,"line":68},[30,89293,2369],{"class":321},[30,89295,89296],{"class":32,"line":80},[30,89297,89298],{"class":321},"    function fn(x, y) {\n",[30,89300,89301],{"class":32,"line":88},[30,89302,89303],{"class":321},"      console.log(this)  \u002F\u002Fwindow\n",[30,89305,89306],{"class":32,"line":96},[30,89307,89308],{"class":321},"      console.log(x + y)\n",[30,89310,89311],{"class":32,"line":104},[30,89312,2369],{"class":321},[30,89314,89315],{"class":32,"line":112},[30,89316,89317],{"class":321},"    fn.call(obj, 1, 2)\n",[30,89319,89320,89322,89324],{"class":32,"line":123},[30,89321,52555],{"class":321},[30,89323,51951],{"class":51438},[30,89325,51445],{"class":321},[30,89327,89328,89330,89332],{"class":32,"line":131},[30,89329,51923],{"class":321},[30,89331,51938],{"class":51438},[30,89333,51445],{"class":321},[157,89335,89336],{},[160,89337],{"alt":25,"src":89338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[271,89340,89341],{"start":44},[150,89342,89343],{},"apply()",[157,89345,89346],{},[160,89347],{"alt":25,"src":89348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[157,89350,89259],{},[157,89352,89353],{},"call传递的是普通参数，而apply必须传递的是数组",[20,89355,89357],{"className":50771,"code":89356,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n    function fn(x, y) {\n      console.log(this)\n      console.log(x + y)\n    }\n    \u002F\u002F fn.apply(this指向谁, 数组参数)\n    fn.apply(obj, [1, 2])\n    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n\n    \u002F\u002F 使用场景：求数组最大值\n    \u002F\u002F const max = Math.max(1, 2, 3)\n    \u002F\u002F console.log(max)   \u002F\u002F3\n    \u002F\u002F 指向空或者Math都是可以的\n    const arr = [100, 44, 77]\n    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n    const max = Math.max.apply(Math, arr)\n    const min = Math.min.apply(Math, arr)\n    console.log(max, min)     \u002F\u002F100,4\n\n    \u002F\u002F 求最大值的另一种方式:展开运算符\n    console.log(Max.max(...arr))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,89358,89359,89369,89383,89387,89395,89409,89429,89441,89449,89453,89461,89469,89479,89486,89490,89495,89511,89523,89537,89541,89546,89565,89570,89574,89579,89584,89592,89597,89619,89624,89640,89656,89668,89672,89677,89696,89704,89712,89716],{"__ignoreMap":25},[30,89360,89361,89363,89365,89367],{"class":32,"line":33},[30,89362,51435],{"class":321},[30,89364,51439],{"class":51438},[30,89366,51442],{"class":36},[30,89368,51445],{"class":321},[30,89370,89371,89373,89375,89377,89379,89381],{"class":32,"line":44},[30,89372,1230],{"class":321},[30,89374,50773],{"class":51438},[30,89376,51454],{"class":36},[30,89378,367],{"class":321},[30,89380,51459],{"class":74},[30,89382,51445],{"class":321},[30,89384,89385],{"class":32,"line":52},[30,89386,2582],{"emptyLinePlaceholder":245},[30,89388,89389,89391,89393],{"class":32,"line":60},[30,89390,1230],{"class":321},[30,89392,51472],{"class":51438},[30,89394,51445],{"class":321},[30,89396,89397,89399,89401,89403,89405,89407],{"class":32,"line":68},[30,89398,52282],{"class":321},[30,89400,51482],{"class":51438},[30,89402,51485],{"class":36},[30,89404,367],{"class":321},[30,89406,51490],{"class":74},[30,89408,51445],{"class":321},[30,89410,89411,89413,89415,89417,89419,89421,89423,89425,89427],{"class":32,"line":80},[30,89412,52282],{"class":321},[30,89414,51482],{"class":51438},[30,89416,15102],{"class":36},[30,89418,367],{"class":321},[30,89420,51529],{"class":74},[30,89422,51509],{"class":36},[30,89424,367],{"class":321},[30,89426,51536],{"class":74},[30,89428,51445],{"class":321},[30,89430,89431,89433,89435,89437,89439],{"class":32,"line":88},[30,89432,52282],{"class":321},[30,89434,51545],{"class":51438},[30,89436,51548],{"class":321},[30,89438,51545],{"class":51438},[30,89440,51445],{"class":321},[30,89442,89443,89445,89447],{"class":32,"line":96},[30,89444,51923],{"class":321},[30,89446,51472],{"class":51438},[30,89448,51445],{"class":321},[30,89450,89451],{"class":32,"line":104},[30,89452,2582],{"emptyLinePlaceholder":245},[30,89454,89455,89457,89459],{"class":32,"line":112},[30,89456,1230],{"class":321},[30,89458,51938],{"class":51438},[30,89460,51445],{"class":321},[30,89462,89463,89465,89467],{"class":32,"line":123},[30,89464,52282],{"class":321},[30,89466,51951],{"class":51438},[30,89468,51445],{"class":321},[30,89470,89471,89473,89475,89477],{"class":32,"line":131},[30,89472,11403],{"class":317},[30,89474,70109],{"class":40},[30,89476,13746],{"class":317},[30,89478,15754],{"class":321},[30,89480,89481,89483],{"class":32,"line":142},[30,89482,71764],{"class":321},[30,89484,89485],{"class":40},"18\n",[30,89487,89488],{"class":32,"line":1811},[30,89489,2369],{"class":321},[30,89491,89492],{"class":32,"line":1825},[30,89493,89494],{"class":379},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[30,89496,89497,89499,89501,89503,89505,89507,89509],{"class":32,"line":1830},[30,89498,70222],{"class":317},[30,89500,88988],{"class":36},[30,89502,322],{"class":321},[30,89504,1140],{"class":5398},[30,89506,12617],{"class":321},[30,89508,1165],{"class":5398},[30,89510,12624],{"class":321},[30,89512,89513,89515,89517,89519,89521],{"class":32,"line":1836},[30,89514,58382],{"class":321},[30,89516,58385],{"class":36},[30,89518,322],{"class":321},[30,89520,87131],{"class":40},[30,89522,328],{"class":321},[30,89524,89525,89527,89529,89532,89534],{"class":32,"line":1857},[30,89526,58382],{"class":321},[30,89528,58385],{"class":36},[30,89530,89531],{"class":321},"(x ",[30,89533,801],{"class":317},[30,89535,89536],{"class":321}," y)\n",[30,89538,89539],{"class":32,"line":1862},[30,89540,2369],{"class":321},[30,89542,89543],{"class":32,"line":1876},[30,89544,89545],{"class":379},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[30,89547,89548,89551,89554,89557,89559,89561,89563],{"class":32,"line":1881},[30,89549,89550],{"class":321},"    fn.",[30,89552,89553],{"class":36},"apply",[30,89555,89556],{"class":321},"(obj, [",[30,89558,537],{"class":40},[30,89560,12617],{"class":321},[30,89562,398],{"class":40},[30,89564,4839],{"class":321},[30,89566,89567],{"class":32,"line":1910},[30,89568,89569],{"class":379},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[30,89571,89572],{"class":32,"line":1915},[30,89573,2582],{"emptyLinePlaceholder":245},[30,89575,89576],{"class":32,"line":1932},[30,89577,89578],{"class":379},"    \u002F\u002F 使用场景：求数组最大值\n",[30,89580,89581],{"class":32,"line":1937},[30,89582,89583],{"class":379},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[30,89585,89586,89589],{"class":32,"line":1942},[30,89587,89588],{"class":379},"    \u002F\u002F console.log(max)",[30,89590,89591],{"class":379},"   \u002F\u002F3\n",[30,89593,89594],{"class":32,"line":1947},[30,89595,89596],{"class":379},"    \u002F\u002F 指向空或者Math都是可以的\n",[30,89598,89599,89601,89603,89605,89607,89609,89611,89613,89615,89617],{"class":32,"line":1961},[30,89600,11403],{"class":317},[30,89602,57833],{"class":40},[30,89604,13746],{"class":317},[30,89606,52364],{"class":321},[30,89608,631],{"class":40},[30,89610,12617],{"class":321},[30,89612,824],{"class":40},[30,89614,12617],{"class":321},[30,89616,855],{"class":40},[30,89618,33384],{"class":321},[30,89620,89621],{"class":32,"line":1966},[30,89622,89623],{"class":379},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[30,89625,89626,89628,89630,89632,89635,89637],{"class":32,"line":2759},[30,89627,11403],{"class":317},[30,89629,6133],{"class":40},[30,89631,13746],{"class":317},[30,89633,89634],{"class":321}," Math.max.",[30,89636,89553],{"class":36},[30,89638,89639],{"class":321},"(Math, arr)\n",[30,89641,89642,89644,89647,89649,89652,89654],{"class":32,"line":2773},[30,89643,11403],{"class":317},[30,89645,89646],{"class":40}," min",[30,89648,13746],{"class":317},[30,89650,89651],{"class":321}," Math.min.",[30,89653,89553],{"class":36},[30,89655,89639],{"class":321},[30,89657,89658,89660,89662,89665],{"class":32,"line":2781},[30,89659,73891],{"class":321},[30,89661,58385],{"class":36},[30,89663,89664],{"class":321},"(max, min)     ",[30,89666,89667],{"class":379},"\u002F\u002F100,4\n",[30,89669,89670],{"class":32,"line":2786},[30,89671,2582],{"emptyLinePlaceholder":245},[30,89673,89674],{"class":32,"line":2792},[30,89675,89676],{"class":379},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[30,89678,89679,89681,89683,89686,89688,89690,89693],{"class":32,"line":2798},[30,89680,73891],{"class":321},[30,89682,58385],{"class":36},[30,89684,89685],{"class":321},"(Max.",[30,89687,6197],{"class":36},[30,89689,322],{"class":321},[30,89691,89692],{"class":317},"...",[30,89694,89695],{"class":321},"arr))\n",[30,89697,89698,89700,89702],{"class":32,"line":2803},[30,89699,52555],{"class":321},[30,89701,51951],{"class":51438},[30,89703,51445],{"class":321},[30,89705,89706,89708,89710],{"class":32,"line":8130},[30,89707,51923],{"class":321},[30,89709,51938],{"class":51438},[30,89711,51445],{"class":321},[30,89713,89714],{"class":32,"line":8154},[30,89715,2582],{"emptyLinePlaceholder":245},[30,89717,89718,89720,89722],{"class":32,"line":8159},[30,89719,51923],{"class":321},[30,89721,50773],{"class":51438},[30,89723,51445],{"class":321},[157,89725,89726],{},[160,89727],{"alt":25,"src":89728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[271,89730,89731],{"start":52},[150,89732,89733],{},"bind()",[157,89735,89736],{},[160,89737],{"alt":25,"src":89738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[157,89740,89741],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[157,89743,89744],{},"bind的语法跟call很相似",[20,89746,89748],{"className":53205,"code":89747,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    function fn() {\n      console.log(this)\n    }\n    \u002F\u002F 1.bind 不会调用函数\n    \u002F\u002F 2.bind能改变this的指向\n    fn.bind()\n    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n    const fun = fn.bind(obj)\n    \u002F\u002F console.log(fun)\n    \u002F\u002F 调用,查看this的指向\n    fun()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,89749,89750,89758,89766,89770,89775,89779,89783,89788,89792,89797,89802,89807,89812,89817,89822,89827,89831,89839],{"__ignoreMap":25},[30,89751,89752,89754,89756],{"class":32,"line":33},[30,89753,1230],{"class":321},[30,89755,51938],{"class":51438},[30,89757,51445],{"class":321},[30,89759,89760,89762,89764],{"class":32,"line":44},[30,89761,52282],{"class":321},[30,89763,51951],{"class":51438},[30,89765,51445],{"class":321},[30,89767,89768],{"class":32,"line":52},[30,89769,71661],{"class":321},[30,89771,89772],{"class":32,"line":60},[30,89773,89774],{"class":321},"      age: 18\n",[30,89776,89777],{"class":32,"line":68},[30,89778,2369],{"class":321},[30,89780,89781],{"class":32,"line":80},[30,89782,77281],{"class":321},[30,89784,89785],{"class":32,"line":88},[30,89786,89787],{"class":321},"      console.log(this)\n",[30,89789,89790],{"class":32,"line":96},[30,89791,2369],{"class":321},[30,89793,89794],{"class":32,"line":104},[30,89795,89796],{"class":321},"    \u002F\u002F 1.bind 不会调用函数\n",[30,89798,89799],{"class":32,"line":112},[30,89800,89801],{"class":321},"    \u002F\u002F 2.bind能改变this的指向\n",[30,89803,89804],{"class":32,"line":123},[30,89805,89806],{"class":321},"    fn.bind()\n",[30,89808,89809],{"class":32,"line":131},[30,89810,89811],{"class":321},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[30,89813,89814],{"class":32,"line":142},[30,89815,89816],{"class":321},"    const fun = fn.bind(obj)\n",[30,89818,89819],{"class":32,"line":1811},[30,89820,89821],{"class":321},"    \u002F\u002F console.log(fun)\n",[30,89823,89824],{"class":32,"line":1825},[30,89825,89826],{"class":321},"    \u002F\u002F 调用,查看this的指向\n",[30,89828,89829],{"class":32,"line":1830},[30,89830,52789],{"class":321},[30,89832,89833,89835,89837],{"class":32,"line":1836},[30,89834,52555],{"class":321},[30,89836,51951],{"class":51438},[30,89838,51445],{"class":321},[30,89840,89841,89843,89845],{"class":32,"line":1857},[30,89842,51923],{"class":321},[30,89844,51938],{"class":51438},[30,89846,51445],{"class":321},[157,89848,89849],{},[160,89850],{"alt":25,"src":89851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[271,89853,89854],{"start":60},[150,89855,89856],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[20,89858,89860],{"className":53205,"code":89859,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cbutton>禁用\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      this.disabled = true\n      \u002F\u002F 定时器是window进行调用的\n      setTimeout(function () {\n        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n        this.disabled = false\n      }.bind(this), 2000)\n      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,89861,89862,89870,89883,89891,89896,89900,89905,89910,89915,89920,89925,89930,89935,89940,89944,89952],{"__ignoreMap":25},[30,89863,89864,89866,89868],{"class":32,"line":33},[30,89865,1230],{"class":321},[30,89867,51938],{"class":51438},[30,89869,51445],{"class":321},[30,89871,89872,89874,89876,89879,89881],{"class":32,"line":44},[30,89873,52282],{"class":321},[30,89875,54025],{"class":51438},[30,89877,89878],{"class":321},">禁用\u003C\u002F",[30,89880,54025],{"class":51438},[30,89882,51445],{"class":321},[30,89884,89885,89887,89889],{"class":32,"line":52},[30,89886,52282],{"class":321},[30,89888,51951],{"class":51438},[30,89890,51445],{"class":321},[30,89892,89893],{"class":32,"line":60},[30,89894,89895],{"class":321},"    const btn = document.querySelector('button')\n",[30,89897,89898],{"class":32,"line":68},[30,89899,59154],{"class":321},[30,89901,89902],{"class":32,"line":80},[30,89903,89904],{"class":321},"      this.disabled = true\n",[30,89906,89907],{"class":32,"line":88},[30,89908,89909],{"class":321},"      \u002F\u002F 定时器是window进行调用的\n",[30,89911,89912],{"class":32,"line":96},[30,89913,89914],{"class":321},"      setTimeout(function () {\n",[30,89916,89917],{"class":32,"line":104},[30,89918,89919],{"class":321},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[30,89921,89922],{"class":32,"line":112},[30,89923,89924],{"class":321},"        this.disabled = false\n",[30,89926,89927],{"class":32,"line":123},[30,89928,89929],{"class":321},"      }.bind(this), 2000)\n",[30,89931,89932],{"class":32,"line":131},[30,89933,89934],{"class":321},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[30,89936,89937],{"class":32,"line":142},[30,89938,89939],{"class":321},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[30,89941,89942],{"class":32,"line":1811},[30,89943,33599],{"class":321},[30,89945,89946,89948,89950],{"class":32,"line":1825},[30,89947,52555],{"class":321},[30,89949,51951],{"class":51438},[30,89951,51445],{"class":321},[30,89953,89954,89956,89958],{"class":32,"line":1830},[30,89955,51923],{"class":321},[30,89957,51938],{"class":51438},[30,89959,51445],{"class":321},[271,89961,89962],{"start":68},[150,89963,22135],{},[157,89965,89966],{},[160,89967],{"alt":25,"src":89968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[15,89970,89972],{"id":89971},"_417-性能优化","4.17 性能优化",[287,89974,89976],{"id":89975},"_4171-防抖","4.17.1 防抖",[157,89978,89979],{},[160,89980],{"alt":25,"src":89981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[157,89983,89984],{},[469,89985,89986],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[157,89988,89989],{},"防抖实现方式：",[147,89991,89992],{},[150,89993,89994],{},"lodash 提供了防抖处理",[157,89996,89997],{},"_.debounce(func,[wait=0],[options={}])",[157,89999,90000],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[20,90002,90004],{"className":50771,"code":90003,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n    box.addEventListener('mousemove', _.debounce(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,90005,90006,90016,90030,90034,90042,90056,90076,90088,90096,90102,90112,90124,90136,90147,90159,90169,90179,90192,90196,90204,90212,90216,90224,90242,90260,90268,90287,90297,90306,90317,90322,90326,90331,90336,90341,90366,90374,90382,90386],{"__ignoreMap":25},[30,90007,90008,90010,90012,90014],{"class":32,"line":33},[30,90009,51435],{"class":321},[30,90011,51439],{"class":51438},[30,90013,51442],{"class":36},[30,90015,51445],{"class":321},[30,90017,90018,90020,90022,90024,90026,90028],{"class":32,"line":44},[30,90019,1230],{"class":321},[30,90021,50773],{"class":51438},[30,90023,51454],{"class":36},[30,90025,367],{"class":321},[30,90027,51459],{"class":74},[30,90029,51445],{"class":321},[30,90031,90032],{"class":32,"line":52},[30,90033,2582],{"emptyLinePlaceholder":245},[30,90035,90036,90038,90040],{"class":32,"line":60},[30,90037,1230],{"class":321},[30,90039,51472],{"class":51438},[30,90041,51445],{"class":321},[30,90043,90044,90046,90048,90050,90052,90054],{"class":32,"line":68},[30,90045,52282],{"class":321},[30,90047,51482],{"class":51438},[30,90049,51485],{"class":36},[30,90051,367],{"class":321},[30,90053,51490],{"class":74},[30,90055,51445],{"class":321},[30,90057,90058,90060,90062,90064,90066,90068,90070,90072,90074],{"class":32,"line":80},[30,90059,52282],{"class":321},[30,90061,51482],{"class":51438},[30,90063,15102],{"class":36},[30,90065,367],{"class":321},[30,90067,51529],{"class":74},[30,90069,51509],{"class":36},[30,90071,367],{"class":321},[30,90073,51536],{"class":74},[30,90075,51445],{"class":321},[30,90077,90078,90080,90082,90084,90086],{"class":32,"line":88},[30,90079,52282],{"class":321},[30,90081,51545],{"class":51438},[30,90083,51548],{"class":321},[30,90085,51545],{"class":51438},[30,90087,51445],{"class":321},[30,90089,90090,90092,90094],{"class":32,"line":96},[30,90091,52282],{"class":321},[30,90093,234],{"class":51438},[30,90095,51445],{"class":321},[30,90097,90098,90100],{"class":32,"line":104},[30,90099,54890],{"class":36},[30,90101,15754],{"class":321},[30,90103,90104,90106,90108,90110],{"class":32,"line":112},[30,90105,72734],{"class":40},[30,90107,51575],{"class":321},[30,90109,60643],{"class":40},[30,90111,1480],{"class":321},[30,90113,90114,90116,90118,90120,90122],{"class":32,"line":123},[30,90115,54909],{"class":40},[30,90117,51575],{"class":321},[30,90119,1905],{"class":40},[30,90121,51630],{"class":317},[30,90123,1480],{"class":321},[30,90125,90126,90128,90130,90132,90134],{"class":32,"line":131},[30,90127,54923],{"class":40},[30,90129,51575],{"class":321},[30,90131,1905],{"class":40},[30,90133,51630],{"class":317},[30,90135,1480],{"class":321},[30,90137,90138,90140,90142,90145],{"class":32,"line":142},[30,90139,55022],{"class":40},[30,90141,51575],{"class":321},[30,90143,90144],{"class":40},"gray",[30,90146,1480],{"class":321},[30,90148,90149,90151,90153,90155,90157],{"class":32,"line":1811},[30,90150,55060],{"class":40},[30,90152,51575],{"class":321},[30,90154,1145],{"class":40},[30,90156,51630],{"class":317},[30,90158,1480],{"class":321},[30,90160,90161,90163,90165,90167],{"class":32,"line":1825},[30,90162,57554],{"class":40},[30,90164,51575],{"class":321},[30,90166,60980],{"class":40},[30,90168,1480],{"class":321},[30,90170,90171,90173,90175,90177],{"class":32,"line":1830},[30,90172,57424],{"class":40},[30,90174,51575],{"class":321},[30,90176,51730],{"class":40},[30,90178,1480],{"class":321},[30,90180,90181,90184,90186,90188,90190],{"class":32,"line":1836},[30,90182,90183],{"class":40},"      padding-top",[30,90185,51575],{"class":321},[30,90187,639],{"class":40},[30,90189,51630],{"class":317},[30,90191,1480],{"class":321},[30,90193,90194],{"class":32,"line":1857},[30,90195,2369],{"class":321},[30,90197,90198,90200,90202],{"class":32,"line":1862},[30,90199,52555],{"class":321},[30,90201,234],{"class":51438},[30,90203,51445],{"class":321},[30,90205,90206,90208,90210],{"class":32,"line":1876},[30,90207,51923],{"class":321},[30,90209,51472],{"class":51438},[30,90211,51445],{"class":321},[30,90213,90214],{"class":32,"line":1881},[30,90215,2582],{"emptyLinePlaceholder":245},[30,90217,90218,90220,90222],{"class":32,"line":1910},[30,90219,1230],{"class":321},[30,90221,51938],{"class":51438},[30,90223,51445],{"class":321},[30,90225,90226,90228,90230,90232,90234,90236,90238,90240],{"class":32,"line":1915},[30,90227,52282],{"class":321},[30,90229,51749],{"class":51438},[30,90231,53624],{"class":36},[30,90233,367],{"class":321},[30,90235,53629],{"class":74},[30,90237,55452],{"class":321},[30,90239,51749],{"class":51438},[30,90241,51445],{"class":321},[30,90243,90244,90246,90248,90250,90252,90254,90256,90258],{"class":32,"line":1932},[30,90245,52282],{"class":321},[30,90247,51951],{"class":51438},[30,90249,55377],{"class":36},[30,90251,367],{"class":321},[30,90253,88412],{"class":74},[30,90255,55452],{"class":321},[30,90257,51951],{"class":51438},[30,90259,51445],{"class":321},[30,90261,90262,90264,90266],{"class":32,"line":1937},[30,90263,52282],{"class":321},[30,90265,51951],{"class":51438},[30,90267,51445],{"class":321},[30,90269,90270,90272,90274,90276,90278,90280,90282,90285],{"class":32,"line":1942},[30,90271,11403],{"class":317},[30,90273,87071],{"class":40},[30,90275,13746],{"class":317},[30,90277,54534],{"class":321},[30,90279,54537],{"class":36},[30,90281,322],{"class":321},[30,90283,90284],{"class":74},"'.box'",[30,90286,328],{"class":321},[30,90288,90289,90291,90293,90295],{"class":32,"line":1947},[30,90290,52357],{"class":317},[30,90292,9620],{"class":321},[30,90294,367],{"class":317},[30,90296,47471],{"class":40},[30,90298,90299,90301,90304],{"class":32,"line":1961},[30,90300,70222],{"class":317},[30,90302,90303],{"class":36}," mouseMove",[30,90305,11035],{"class":321},[30,90307,90308,90311,90313,90315],{"class":32,"line":1966},[30,90309,90310],{"class":321},"      box.innerHTML ",[30,90312,367],{"class":317},[30,90314,3214],{"class":321},[30,90316,2884],{"class":317},[30,90318,90319],{"class":32,"line":2759},[30,90320,90321],{"class":379},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[30,90323,90324],{"class":32,"line":2773},[30,90325,2369],{"class":321},[30,90327,90328],{"class":32,"line":2781},[30,90329,90330],{"class":379},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[30,90332,90333],{"class":32,"line":2786},[30,90334,90335],{"class":379},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[30,90337,90338],{"class":32,"line":2792},[30,90339,90340],{"class":379},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[30,90342,90343,90346,90348,90350,90353,90356,90359,90362,90364],{"class":32,"line":2798},[30,90344,90345],{"class":321},"    box.",[30,90347,57951],{"class":36},[30,90349,322],{"class":321},[30,90351,90352],{"class":74},"'mousemove'",[30,90354,90355],{"class":321},", _.",[30,90357,90358],{"class":36},"debounce",[30,90360,90361],{"class":321},"(mouseMove, ",[30,90363,65212],{"class":40},[30,90365,30635],{"class":321},[30,90367,90368,90370,90372],{"class":32,"line":2803},[30,90369,52555],{"class":321},[30,90371,51951],{"class":51438},[30,90373,51445],{"class":321},[30,90375,90376,90378,90380],{"class":32,"line":8130},[30,90377,51923],{"class":321},[30,90379,51938],{"class":51438},[30,90381,51445],{"class":321},[30,90383,90384],{"class":32,"line":8154},[30,90385,2582],{"emptyLinePlaceholder":245},[30,90387,90388,90390,90392],{"class":32,"line":8159},[30,90389,51923],{"class":321},[30,90391,50773],{"class":51438},[30,90393,51445],{"class":321},[147,90395,90396],{},[150,90397,90398],{},"手写一个防抖函数来处理",[157,90400,90401],{},"防抖的核心就是利用定时器来实现的：",[157,90403,90404],{},"①声明一个定时器变量",[157,90406,90407],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[157,90409,90410],{},"③如果没有定时器则开启定时器，记得存到变量里面",[20,90412,90414],{"className":50771,"code":90413,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写防抖函数\n    \u002F\u002F 核心是利用延时器setTimeout来实现的\n    \u002F\u002F 1.声明定时器变量\n    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n    \u002F\u002F 4.定时器里面写函数调用\n    function debounce(fn, t) {\n      let timer\n      \u002F\u002F return 返回一个匿名函数\n      return function () {\n        \u002F\u002F 这里边写第二三四步\n        if (timer) clearTimeout(timer)\n        timer = setTimeout(function () {\n          fn() \u002F\u002F加小括号调用fn }, t)\n        }, t)\n      }\n    }\n    box.addEventListener('mousemove', debounce(mouseMove, 500))\n\n    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,90415,90416,90426,90440,90444,90452,90466,90486,90498,90506,90512,90522,90534,90546,90556,90568,90578,90588,90600,90604,90612,90620,90624,90632,90650,90668,90676,90694,90704,90712,90722,90726,90730,90734,90739,90744,90749,90754,90759,90764,90782,90789,90794,90802,90807,90820,90836,90846,90851,90855,90859,90879,90883,90888,90893,90898,90903,90911,90919,90923],{"__ignoreMap":25},[30,90417,90418,90420,90422,90424],{"class":32,"line":33},[30,90419,51435],{"class":321},[30,90421,51439],{"class":51438},[30,90423,51442],{"class":36},[30,90425,51445],{"class":321},[30,90427,90428,90430,90432,90434,90436,90438],{"class":32,"line":44},[30,90429,1230],{"class":321},[30,90431,50773],{"class":51438},[30,90433,51454],{"class":36},[30,90435,367],{"class":321},[30,90437,51459],{"class":74},[30,90439,51445],{"class":321},[30,90441,90442],{"class":32,"line":52},[30,90443,2582],{"emptyLinePlaceholder":245},[30,90445,90446,90448,90450],{"class":32,"line":60},[30,90447,1230],{"class":321},[30,90449,51472],{"class":51438},[30,90451,51445],{"class":321},[30,90453,90454,90456,90458,90460,90462,90464],{"class":32,"line":68},[30,90455,52282],{"class":321},[30,90457,51482],{"class":51438},[30,90459,51485],{"class":36},[30,90461,367],{"class":321},[30,90463,51490],{"class":74},[30,90465,51445],{"class":321},[30,90467,90468,90470,90472,90474,90476,90478,90480,90482,90484],{"class":32,"line":80},[30,90469,52282],{"class":321},[30,90471,51482],{"class":51438},[30,90473,15102],{"class":36},[30,90475,367],{"class":321},[30,90477,51529],{"class":74},[30,90479,51509],{"class":36},[30,90481,367],{"class":321},[30,90483,51536],{"class":74},[30,90485,51445],{"class":321},[30,90487,90488,90490,90492,90494,90496],{"class":32,"line":88},[30,90489,52282],{"class":321},[30,90491,51545],{"class":51438},[30,90493,51548],{"class":321},[30,90495,51545],{"class":51438},[30,90497,51445],{"class":321},[30,90499,90500,90502,90504],{"class":32,"line":96},[30,90501,52282],{"class":321},[30,90503,234],{"class":51438},[30,90505,51445],{"class":321},[30,90507,90508,90510],{"class":32,"line":104},[30,90509,54890],{"class":36},[30,90511,15754],{"class":321},[30,90513,90514,90516,90518,90520],{"class":32,"line":112},[30,90515,72734],{"class":40},[30,90517,51575],{"class":321},[30,90519,60643],{"class":40},[30,90521,1480],{"class":321},[30,90523,90524,90526,90528,90530,90532],{"class":32,"line":123},[30,90525,54909],{"class":40},[30,90527,51575],{"class":321},[30,90529,1905],{"class":40},[30,90531,51630],{"class":317},[30,90533,1480],{"class":321},[30,90535,90536,90538,90540,90542,90544],{"class":32,"line":131},[30,90537,54923],{"class":40},[30,90539,51575],{"class":321},[30,90541,1905],{"class":40},[30,90543,51630],{"class":317},[30,90545,1480],{"class":321},[30,90547,90548,90550,90552,90554],{"class":32,"line":142},[30,90549,55022],{"class":40},[30,90551,51575],{"class":321},[30,90553,90144],{"class":40},[30,90555,1480],{"class":321},[30,90557,90558,90560,90562,90564,90566],{"class":32,"line":1811},[30,90559,55060],{"class":40},[30,90561,51575],{"class":321},[30,90563,1145],{"class":40},[30,90565,51630],{"class":317},[30,90567,1480],{"class":321},[30,90569,90570,90572,90574,90576],{"class":32,"line":1825},[30,90571,57554],{"class":40},[30,90573,51575],{"class":321},[30,90575,60980],{"class":40},[30,90577,1480],{"class":321},[30,90579,90580,90582,90584,90586],{"class":32,"line":1830},[30,90581,57424],{"class":40},[30,90583,51575],{"class":321},[30,90585,51730],{"class":40},[30,90587,1480],{"class":321},[30,90589,90590,90592,90594,90596,90598],{"class":32,"line":1836},[30,90591,90183],{"class":40},[30,90593,51575],{"class":321},[30,90595,639],{"class":40},[30,90597,51630],{"class":317},[30,90599,1480],{"class":321},[30,90601,90602],{"class":32,"line":1857},[30,90603,2369],{"class":321},[30,90605,90606,90608,90610],{"class":32,"line":1862},[30,90607,52555],{"class":321},[30,90609,234],{"class":51438},[30,90611,51445],{"class":321},[30,90613,90614,90616,90618],{"class":32,"line":1876},[30,90615,51923],{"class":321},[30,90617,51472],{"class":51438},[30,90619,51445],{"class":321},[30,90621,90622],{"class":32,"line":1881},[30,90623,2582],{"emptyLinePlaceholder":245},[30,90625,90626,90628,90630],{"class":32,"line":1910},[30,90627,1230],{"class":321},[30,90629,51938],{"class":51438},[30,90631,51445],{"class":321},[30,90633,90634,90636,90638,90640,90642,90644,90646,90648],{"class":32,"line":1915},[30,90635,52282],{"class":321},[30,90637,51749],{"class":51438},[30,90639,53624],{"class":36},[30,90641,367],{"class":321},[30,90643,53629],{"class":74},[30,90645,55452],{"class":321},[30,90647,51749],{"class":51438},[30,90649,51445],{"class":321},[30,90651,90652,90654,90656,90658,90660,90662,90664,90666],{"class":32,"line":1932},[30,90653,52282],{"class":321},[30,90655,51951],{"class":51438},[30,90657,55377],{"class":36},[30,90659,367],{"class":321},[30,90661,88412],{"class":74},[30,90663,55452],{"class":321},[30,90665,51951],{"class":51438},[30,90667,51445],{"class":321},[30,90669,90670,90672,90674],{"class":32,"line":1937},[30,90671,52282],{"class":321},[30,90673,51951],{"class":51438},[30,90675,51445],{"class":321},[30,90677,90678,90680,90682,90684,90686,90688,90690,90692],{"class":32,"line":1942},[30,90679,11403],{"class":317},[30,90681,87071],{"class":40},[30,90683,13746],{"class":317},[30,90685,54534],{"class":321},[30,90687,54537],{"class":36},[30,90689,322],{"class":321},[30,90691,90284],{"class":74},[30,90693,328],{"class":321},[30,90695,90696,90698,90700,90702],{"class":32,"line":1947},[30,90697,52357],{"class":317},[30,90699,9620],{"class":321},[30,90701,367],{"class":317},[30,90703,47471],{"class":40},[30,90705,90706,90708,90710],{"class":32,"line":1961},[30,90707,70222],{"class":317},[30,90709,90303],{"class":36},[30,90711,11035],{"class":321},[30,90713,90714,90716,90718,90720],{"class":32,"line":1966},[30,90715,90310],{"class":321},[30,90717,367],{"class":317},[30,90719,3214],{"class":321},[30,90721,2884],{"class":317},[30,90723,90724],{"class":32,"line":2759},[30,90725,90321],{"class":379},[30,90727,90728],{"class":32,"line":2773},[30,90729,2369],{"class":321},[30,90731,90732],{"class":32,"line":2781},[30,90733,90330],{"class":379},[30,90735,90736],{"class":32,"line":2786},[30,90737,90738],{"class":379},"    \u002F\u002F 手写防抖函数\n",[30,90740,90741],{"class":32,"line":2792},[30,90742,90743],{"class":379},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[30,90745,90746],{"class":32,"line":2798},[30,90747,90748],{"class":379},"    \u002F\u002F 1.声明定时器变量\n",[30,90750,90751],{"class":32,"line":2803},[30,90752,90753],{"class":379},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[30,90755,90756],{"class":32,"line":8130},[30,90757,90758],{"class":379},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[30,90760,90761],{"class":32,"line":8154},[30,90762,90763],{"class":379},"    \u002F\u002F 4.定时器里面写函数调用\n",[30,90765,90766,90768,90771,90773,90776,90778,90780],{"class":32,"line":8159},[30,90767,70222],{"class":317},[30,90769,90770],{"class":36}," debounce",[30,90772,322],{"class":321},[30,90774,90775],{"class":5398},"fn",[30,90777,12617],{"class":321},[30,90779,1040],{"class":5398},[30,90781,12624],{"class":321},[30,90783,90784,90786],{"class":32,"line":8165},[30,90785,79910],{"class":317},[30,90787,90788],{"class":321}," timer\n",[30,90790,90791],{"class":32,"line":8192},[30,90792,90793],{"class":379},"      \u002F\u002F return 返回一个匿名函数\n",[30,90795,90796,90798,90800],{"class":32,"line":8197},[30,90797,74120],{"class":317},[30,90799,59056],{"class":317},[30,90801,54590],{"class":321},[30,90803,90804],{"class":32,"line":8203},[30,90805,90806],{"class":379},"        \u002F\u002F 这里边写第二三四步\n",[30,90808,90809,90811,90814,90817],{"class":32,"line":8215},[30,90810,2679],{"class":317},[30,90812,90813],{"class":321}," (timer) ",[30,90815,90816],{"class":36},"clearTimeout",[30,90818,90819],{"class":321},"(timer)\n",[30,90821,90822,90825,90827,90830,90832,90834],{"class":32,"line":8227},[30,90823,90824],{"class":321},"        timer ",[30,90826,367],{"class":317},[30,90828,90829],{"class":36}," setTimeout",[30,90831,322],{"class":321},[30,90833,54587],{"class":317},[30,90835,54590],{"class":321},[30,90837,90838,90841,90843],{"class":32,"line":8239},[30,90839,90840],{"class":36},"          fn",[30,90842,13232],{"class":321},[30,90844,90845],{"class":379},"\u002F\u002F加小括号调用fn }, t)\n",[30,90847,90848],{"class":32,"line":9898},[30,90849,90850],{"class":321},"        }, t)\n",[30,90852,90853],{"class":32,"line":9923},[30,90854,52536],{"class":321},[30,90856,90857],{"class":32,"line":9946},[30,90858,2369],{"class":321},[30,90860,90861,90863,90865,90867,90869,90871,90873,90875,90877],{"class":32,"line":9970},[30,90862,90345],{"class":321},[30,90864,57951],{"class":36},[30,90866,322],{"class":321},[30,90868,90352],{"class":74},[30,90870,12617],{"class":321},[30,90872,90358],{"class":36},[30,90874,90361],{"class":321},[30,90876,65212],{"class":40},[30,90878,30635],{"class":321},[30,90880,90881],{"class":32,"line":9975},[30,90882,2582],{"emptyLinePlaceholder":245},[30,90884,90885],{"class":32,"line":9980},[30,90886,90887],{"class":379},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[30,90889,90890],{"class":32,"line":9985},[30,90891,90892],{"class":379},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[30,90894,90895],{"class":32,"line":9994},[30,90896,90897],{"class":379},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[30,90899,90900],{"class":32,"line":9999},[30,90901,90902],{"class":379},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[30,90904,90905,90907,90909],{"class":32,"line":10005},[30,90906,52555],{"class":321},[30,90908,51951],{"class":51438},[30,90910,51445],{"class":321},[30,90912,90913,90915,90917],{"class":32,"line":10026},[30,90914,51923],{"class":321},[30,90916,51938],{"class":51438},[30,90918,51445],{"class":321},[30,90920,90921],{"class":32,"line":10032},[30,90922,2582],{"emptyLinePlaceholder":245},[30,90924,90925,90927,90929],{"class":32,"line":10046},[30,90926,51923],{"class":321},[30,90928,50773],{"class":51438},[30,90930,51445],{"class":321},[287,90932,90934],{"id":90933},"_4172-节流","4.17.2 节流",[157,90936,90937],{},[160,90938],{"alt":25,"src":90939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[157,90941,90942],{},[160,90943],{"alt":25,"src":90944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[157,90946,90947],{},[469,90948,90949],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[157,90951,90952],{},"实现方式：",[147,90954,90955],{},[150,90956,90957],{},"lodash 提供的节流函数来处理",[157,90959,90960],{},"_.throttle(func,[wait=0],[options=])",[157,90962,90963],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[20,90965,90967],{"className":50771,"code":90966,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n    \u002F\u002F 语法:_.throttle(fun,时间)\n    box.addEventListener('mousemove', _.throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,90968,90969,90979,90993,90997,91005,91019,91039,91051,91059,91065,91075,91087,91099,91109,91121,91131,91141,91153,91157,91165,91173,91177,91185,91203,91221,91229,91247,91257,91265,91275,91279,91283,91287,91292,91297,91318,91326,91334,91338],{"__ignoreMap":25},[30,90970,90971,90973,90975,90977],{"class":32,"line":33},[30,90972,51435],{"class":321},[30,90974,51439],{"class":51438},[30,90976,51442],{"class":36},[30,90978,51445],{"class":321},[30,90980,90981,90983,90985,90987,90989,90991],{"class":32,"line":44},[30,90982,1230],{"class":321},[30,90984,50773],{"class":51438},[30,90986,51454],{"class":36},[30,90988,367],{"class":321},[30,90990,51459],{"class":74},[30,90992,51445],{"class":321},[30,90994,90995],{"class":32,"line":52},[30,90996,2582],{"emptyLinePlaceholder":245},[30,90998,90999,91001,91003],{"class":32,"line":60},[30,91000,1230],{"class":321},[30,91002,51472],{"class":51438},[30,91004,51445],{"class":321},[30,91006,91007,91009,91011,91013,91015,91017],{"class":32,"line":68},[30,91008,52282],{"class":321},[30,91010,51482],{"class":51438},[30,91012,51485],{"class":36},[30,91014,367],{"class":321},[30,91016,51490],{"class":74},[30,91018,51445],{"class":321},[30,91020,91021,91023,91025,91027,91029,91031,91033,91035,91037],{"class":32,"line":80},[30,91022,52282],{"class":321},[30,91024,51482],{"class":51438},[30,91026,15102],{"class":36},[30,91028,367],{"class":321},[30,91030,51529],{"class":74},[30,91032,51509],{"class":36},[30,91034,367],{"class":321},[30,91036,51536],{"class":74},[30,91038,51445],{"class":321},[30,91040,91041,91043,91045,91047,91049],{"class":32,"line":88},[30,91042,52282],{"class":321},[30,91044,51545],{"class":51438},[30,91046,51548],{"class":321},[30,91048,51545],{"class":51438},[30,91050,51445],{"class":321},[30,91052,91053,91055,91057],{"class":32,"line":96},[30,91054,52282],{"class":321},[30,91056,234],{"class":51438},[30,91058,51445],{"class":321},[30,91060,91061,91063],{"class":32,"line":104},[30,91062,54890],{"class":36},[30,91064,15754],{"class":321},[30,91066,91067,91069,91071,91073],{"class":32,"line":112},[30,91068,72734],{"class":40},[30,91070,51575],{"class":321},[30,91072,60643],{"class":40},[30,91074,1480],{"class":321},[30,91076,91077,91079,91081,91083,91085],{"class":32,"line":123},[30,91078,54909],{"class":40},[30,91080,51575],{"class":321},[30,91082,1905],{"class":40},[30,91084,51630],{"class":317},[30,91086,1480],{"class":321},[30,91088,91089,91091,91093,91095,91097],{"class":32,"line":131},[30,91090,54923],{"class":40},[30,91092,51575],{"class":321},[30,91094,1905],{"class":40},[30,91096,51630],{"class":317},[30,91098,1480],{"class":321},[30,91100,91101,91103,91105,91107],{"class":32,"line":142},[30,91102,55022],{"class":40},[30,91104,51575],{"class":321},[30,91106,90144],{"class":40},[30,91108,1480],{"class":321},[30,91110,91111,91113,91115,91117,91119],{"class":32,"line":1811},[30,91112,55060],{"class":40},[30,91114,51575],{"class":321},[30,91116,1145],{"class":40},[30,91118,51630],{"class":317},[30,91120,1480],{"class":321},[30,91122,91123,91125,91127,91129],{"class":32,"line":1825},[30,91124,57554],{"class":40},[30,91126,51575],{"class":321},[30,91128,60980],{"class":40},[30,91130,1480],{"class":321},[30,91132,91133,91135,91137,91139],{"class":32,"line":1830},[30,91134,57424],{"class":40},[30,91136,51575],{"class":321},[30,91138,51730],{"class":40},[30,91140,1480],{"class":321},[30,91142,91143,91145,91147,91149,91151],{"class":32,"line":1836},[30,91144,90183],{"class":40},[30,91146,51575],{"class":321},[30,91148,639],{"class":40},[30,91150,51630],{"class":317},[30,91152,1480],{"class":321},[30,91154,91155],{"class":32,"line":1857},[30,91156,2369],{"class":321},[30,91158,91159,91161,91163],{"class":32,"line":1862},[30,91160,52555],{"class":321},[30,91162,234],{"class":51438},[30,91164,51445],{"class":321},[30,91166,91167,91169,91171],{"class":32,"line":1876},[30,91168,51923],{"class":321},[30,91170,51472],{"class":51438},[30,91172,51445],{"class":321},[30,91174,91175],{"class":32,"line":1881},[30,91176,2582],{"emptyLinePlaceholder":245},[30,91178,91179,91181,91183],{"class":32,"line":1910},[30,91180,1230],{"class":321},[30,91182,51938],{"class":51438},[30,91184,51445],{"class":321},[30,91186,91187,91189,91191,91193,91195,91197,91199,91201],{"class":32,"line":1915},[30,91188,52282],{"class":321},[30,91190,51749],{"class":51438},[30,91192,53624],{"class":36},[30,91194,367],{"class":321},[30,91196,53629],{"class":74},[30,91198,55452],{"class":321},[30,91200,51749],{"class":51438},[30,91202,51445],{"class":321},[30,91204,91205,91207,91209,91211,91213,91215,91217,91219],{"class":32,"line":1932},[30,91206,52282],{"class":321},[30,91208,51951],{"class":51438},[30,91210,55377],{"class":36},[30,91212,367],{"class":321},[30,91214,88412],{"class":74},[30,91216,55452],{"class":321},[30,91218,51951],{"class":51438},[30,91220,51445],{"class":321},[30,91222,91223,91225,91227],{"class":32,"line":1937},[30,91224,52282],{"class":321},[30,91226,51951],{"class":51438},[30,91228,51445],{"class":321},[30,91230,91231,91233,91235,91237,91239,91241,91243,91245],{"class":32,"line":1942},[30,91232,11403],{"class":317},[30,91234,87071],{"class":40},[30,91236,13746],{"class":317},[30,91238,54534],{"class":321},[30,91240,54537],{"class":36},[30,91242,322],{"class":321},[30,91244,90284],{"class":74},[30,91246,328],{"class":321},[30,91248,91249,91251,91253,91255],{"class":32,"line":1947},[30,91250,52357],{"class":317},[30,91252,9620],{"class":321},[30,91254,367],{"class":317},[30,91256,47471],{"class":40},[30,91258,91259,91261,91263],{"class":32,"line":1961},[30,91260,70222],{"class":317},[30,91262,90303],{"class":36},[30,91264,11035],{"class":321},[30,91266,91267,91269,91271,91273],{"class":32,"line":1966},[30,91268,90310],{"class":321},[30,91270,367],{"class":317},[30,91272,3214],{"class":321},[30,91274,2884],{"class":317},[30,91276,91277],{"class":32,"line":2759},[30,91278,90321],{"class":379},[30,91280,91281],{"class":32,"line":2773},[30,91282,2369],{"class":321},[30,91284,91285],{"class":32,"line":2781},[30,91286,90330],{"class":379},[30,91288,91289],{"class":32,"line":2786},[30,91290,91291],{"class":379},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[30,91293,91294],{"class":32,"line":2792},[30,91295,91296],{"class":379},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[30,91298,91299,91301,91303,91305,91307,91309,91312,91314,91316],{"class":32,"line":2798},[30,91300,90345],{"class":321},[30,91302,57951],{"class":36},[30,91304,322],{"class":321},[30,91306,90352],{"class":74},[30,91308,90355],{"class":321},[30,91310,91311],{"class":36},"throttle",[30,91313,90361],{"class":321},[30,91315,65212],{"class":40},[30,91317,30635],{"class":321},[30,91319,91320,91322,91324],{"class":32,"line":2803},[30,91321,52555],{"class":321},[30,91323,51951],{"class":51438},[30,91325,51445],{"class":321},[30,91327,91328,91330,91332],{"class":32,"line":8130},[30,91329,51923],{"class":321},[30,91331,51938],{"class":51438},[30,91333,51445],{"class":321},[30,91335,91336],{"class":32,"line":8154},[30,91337,2582],{"emptyLinePlaceholder":245},[30,91339,91340,91342,91344],{"class":32,"line":8159},[30,91341,51923],{"class":321},[30,91343,50773],{"class":51438},[30,91345,51445],{"class":321},[147,91347,91348],{},[150,91349,91350],{},"手写一个节流函数来处理",[157,91352,71090],{},[157,91354,90404],{},[157,91356,91357],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[157,91359,91360],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[20,91362,91364],{"className":50771,"code":91363,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写节流函数  每隔500ms+1\n    \u002F\u002F 1.声明一个定时器变量\n    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n    \u002F\u002F 3.1定时器里面调用执行函数\n    \u002F\u002F 3.2定时器里面要把定时器清空\n    function throttle(fn, t) {\n      let timer\n      return function () {\n        if (!timer) {\n          timer = setTimeout(function () {\n            fn()\n            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n            timer = null\n            \u002F\u002F 不能用clearTimeout(timer)\n            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n          }, t)\n        }\n      }\n    }\n    box.addEventListener('mousemove', throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,91365,91366,91376,91390,91394,91402,91416,91436,91448,91456,91462,91472,91484,91496,91506,91518,91528,91538,91550,91554,91562,91570,91574,91582,91600,91618,91626,91644,91654,91662,91672,91676,91680,91684,91689,91694,91699,91704,91709,91714,91731,91737,91745,91756,91771,91778,91783,91788,91798,91803,91808,91813,91817,91821,91825,91845,91853,91861,91865],{"__ignoreMap":25},[30,91367,91368,91370,91372,91374],{"class":32,"line":33},[30,91369,51435],{"class":321},[30,91371,51439],{"class":51438},[30,91373,51442],{"class":36},[30,91375,51445],{"class":321},[30,91377,91378,91380,91382,91384,91386,91388],{"class":32,"line":44},[30,91379,1230],{"class":321},[30,91381,50773],{"class":51438},[30,91383,51454],{"class":36},[30,91385,367],{"class":321},[30,91387,51459],{"class":74},[30,91389,51445],{"class":321},[30,91391,91392],{"class":32,"line":52},[30,91393,2582],{"emptyLinePlaceholder":245},[30,91395,91396,91398,91400],{"class":32,"line":60},[30,91397,1230],{"class":321},[30,91399,51472],{"class":51438},[30,91401,51445],{"class":321},[30,91403,91404,91406,91408,91410,91412,91414],{"class":32,"line":68},[30,91405,52282],{"class":321},[30,91407,51482],{"class":51438},[30,91409,51485],{"class":36},[30,91411,367],{"class":321},[30,91413,51490],{"class":74},[30,91415,51445],{"class":321},[30,91417,91418,91420,91422,91424,91426,91428,91430,91432,91434],{"class":32,"line":80},[30,91419,52282],{"class":321},[30,91421,51482],{"class":51438},[30,91423,15102],{"class":36},[30,91425,367],{"class":321},[30,91427,51529],{"class":74},[30,91429,51509],{"class":36},[30,91431,367],{"class":321},[30,91433,51536],{"class":74},[30,91435,51445],{"class":321},[30,91437,91438,91440,91442,91444,91446],{"class":32,"line":88},[30,91439,52282],{"class":321},[30,91441,51545],{"class":51438},[30,91443,51548],{"class":321},[30,91445,51545],{"class":51438},[30,91447,51445],{"class":321},[30,91449,91450,91452,91454],{"class":32,"line":96},[30,91451,52282],{"class":321},[30,91453,234],{"class":51438},[30,91455,51445],{"class":321},[30,91457,91458,91460],{"class":32,"line":104},[30,91459,54890],{"class":36},[30,91461,15754],{"class":321},[30,91463,91464,91466,91468,91470],{"class":32,"line":112},[30,91465,72734],{"class":40},[30,91467,51575],{"class":321},[30,91469,60643],{"class":40},[30,91471,1480],{"class":321},[30,91473,91474,91476,91478,91480,91482],{"class":32,"line":123},[30,91475,54909],{"class":40},[30,91477,51575],{"class":321},[30,91479,1905],{"class":40},[30,91481,51630],{"class":317},[30,91483,1480],{"class":321},[30,91485,91486,91488,91490,91492,91494],{"class":32,"line":131},[30,91487,54923],{"class":40},[30,91489,51575],{"class":321},[30,91491,1905],{"class":40},[30,91493,51630],{"class":317},[30,91495,1480],{"class":321},[30,91497,91498,91500,91502,91504],{"class":32,"line":142},[30,91499,55022],{"class":40},[30,91501,51575],{"class":321},[30,91503,90144],{"class":40},[30,91505,1480],{"class":321},[30,91507,91508,91510,91512,91514,91516],{"class":32,"line":1811},[30,91509,55060],{"class":40},[30,91511,51575],{"class":321},[30,91513,1145],{"class":40},[30,91515,51630],{"class":317},[30,91517,1480],{"class":321},[30,91519,91520,91522,91524,91526],{"class":32,"line":1825},[30,91521,57554],{"class":40},[30,91523,51575],{"class":321},[30,91525,60980],{"class":40},[30,91527,1480],{"class":321},[30,91529,91530,91532,91534,91536],{"class":32,"line":1830},[30,91531,57424],{"class":40},[30,91533,51575],{"class":321},[30,91535,51730],{"class":40},[30,91537,1480],{"class":321},[30,91539,91540,91542,91544,91546,91548],{"class":32,"line":1836},[30,91541,90183],{"class":40},[30,91543,51575],{"class":321},[30,91545,639],{"class":40},[30,91547,51630],{"class":317},[30,91549,1480],{"class":321},[30,91551,91552],{"class":32,"line":1857},[30,91553,2369],{"class":321},[30,91555,91556,91558,91560],{"class":32,"line":1862},[30,91557,52555],{"class":321},[30,91559,234],{"class":51438},[30,91561,51445],{"class":321},[30,91563,91564,91566,91568],{"class":32,"line":1876},[30,91565,51923],{"class":321},[30,91567,51472],{"class":51438},[30,91569,51445],{"class":321},[30,91571,91572],{"class":32,"line":1881},[30,91573,2582],{"emptyLinePlaceholder":245},[30,91575,91576,91578,91580],{"class":32,"line":1910},[30,91577,1230],{"class":321},[30,91579,51938],{"class":51438},[30,91581,51445],{"class":321},[30,91583,91584,91586,91588,91590,91592,91594,91596,91598],{"class":32,"line":1915},[30,91585,52282],{"class":321},[30,91587,51749],{"class":51438},[30,91589,53624],{"class":36},[30,91591,367],{"class":321},[30,91593,53629],{"class":74},[30,91595,55452],{"class":321},[30,91597,51749],{"class":51438},[30,91599,51445],{"class":321},[30,91601,91602,91604,91606,91608,91610,91612,91614,91616],{"class":32,"line":1932},[30,91603,52282],{"class":321},[30,91605,51951],{"class":51438},[30,91607,55377],{"class":36},[30,91609,367],{"class":321},[30,91611,88412],{"class":74},[30,91613,55452],{"class":321},[30,91615,51951],{"class":51438},[30,91617,51445],{"class":321},[30,91619,91620,91622,91624],{"class":32,"line":1937},[30,91621,52282],{"class":321},[30,91623,51951],{"class":51438},[30,91625,51445],{"class":321},[30,91627,91628,91630,91632,91634,91636,91638,91640,91642],{"class":32,"line":1942},[30,91629,11403],{"class":317},[30,91631,87071],{"class":40},[30,91633,13746],{"class":317},[30,91635,54534],{"class":321},[30,91637,54537],{"class":36},[30,91639,322],{"class":321},[30,91641,90284],{"class":74},[30,91643,328],{"class":321},[30,91645,91646,91648,91650,91652],{"class":32,"line":1947},[30,91647,52357],{"class":317},[30,91649,9620],{"class":321},[30,91651,367],{"class":317},[30,91653,47471],{"class":40},[30,91655,91656,91658,91660],{"class":32,"line":1961},[30,91657,70222],{"class":317},[30,91659,90303],{"class":36},[30,91661,11035],{"class":321},[30,91663,91664,91666,91668,91670],{"class":32,"line":1966},[30,91665,90310],{"class":321},[30,91667,367],{"class":317},[30,91669,3214],{"class":321},[30,91671,2884],{"class":317},[30,91673,91674],{"class":32,"line":2759},[30,91675,90321],{"class":379},[30,91677,91678],{"class":32,"line":2773},[30,91679,2369],{"class":321},[30,91681,91682],{"class":32,"line":2781},[30,91683,90330],{"class":379},[30,91685,91686],{"class":32,"line":2786},[30,91687,91688],{"class":379},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[30,91690,91691],{"class":32,"line":2792},[30,91692,91693],{"class":379},"    \u002F\u002F 1.声明一个定时器变量\n",[30,91695,91696],{"class":32,"line":2798},[30,91697,91698],{"class":379},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[30,91700,91701],{"class":32,"line":2803},[30,91702,91703],{"class":379},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[30,91705,91706],{"class":32,"line":8130},[30,91707,91708],{"class":379},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[30,91710,91711],{"class":32,"line":8154},[30,91712,91713],{"class":379},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[30,91715,91716,91718,91721,91723,91725,91727,91729],{"class":32,"line":8159},[30,91717,70222],{"class":317},[30,91719,91720],{"class":36}," throttle",[30,91722,322],{"class":321},[30,91724,90775],{"class":5398},[30,91726,12617],{"class":321},[30,91728,1040],{"class":5398},[30,91730,12624],{"class":321},[30,91732,91733,91735],{"class":32,"line":8165},[30,91734,79910],{"class":317},[30,91736,90788],{"class":321},[30,91738,91739,91741,91743],{"class":32,"line":8192},[30,91740,74120],{"class":317},[30,91742,59056],{"class":317},[30,91744,54590],{"class":321},[30,91746,91747,91749,91751,91753],{"class":32,"line":8197},[30,91748,2679],{"class":317},[30,91750,1841],{"class":321},[30,91752,546],{"class":317},[30,91754,91755],{"class":321},"timer) {\n",[30,91757,91758,91761,91763,91765,91767,91769],{"class":32,"line":8203},[30,91759,91760],{"class":321},"          timer ",[30,91762,367],{"class":317},[30,91764,90829],{"class":36},[30,91766,322],{"class":321},[30,91768,54587],{"class":317},[30,91770,54590],{"class":321},[30,91772,91773,91776],{"class":32,"line":8215},[30,91774,91775],{"class":36},"            fn",[30,91777,2158],{"class":321},[30,91779,91780],{"class":32,"line":8227},[30,91781,91782],{"class":379},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[30,91784,91785],{"class":32,"line":8239},[30,91786,91787],{"class":379},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[30,91789,91790,91793,91795],{"class":32,"line":9898},[30,91791,91792],{"class":321},"            timer ",[30,91794,367],{"class":317},[30,91796,91797],{"class":40}," null\n",[30,91799,91800],{"class":32,"line":9923},[30,91801,91802],{"class":379},"            \u002F\u002F 不能用clearTimeout(timer)\n",[30,91804,91805],{"class":32,"line":9946},[30,91806,91807],{"class":379},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[30,91809,91810],{"class":32,"line":9970},[30,91811,91812],{"class":321},"          }, t)\n",[30,91814,91815],{"class":32,"line":9975},[30,91816,2711],{"class":321},[30,91818,91819],{"class":32,"line":9980},[30,91820,52536],{"class":321},[30,91822,91823],{"class":32,"line":9985},[30,91824,2369],{"class":321},[30,91826,91827,91829,91831,91833,91835,91837,91839,91841,91843],{"class":32,"line":9994},[30,91828,90345],{"class":321},[30,91830,57951],{"class":36},[30,91832,322],{"class":321},[30,91834,90352],{"class":74},[30,91836,12617],{"class":321},[30,91838,91311],{"class":36},[30,91840,90361],{"class":321},[30,91842,65212],{"class":40},[30,91844,30635],{"class":321},[30,91846,91847,91849,91851],{"class":32,"line":9999},[30,91848,52555],{"class":321},[30,91850,51951],{"class":51438},[30,91852,51445],{"class":321},[30,91854,91855,91857,91859],{"class":32,"line":10005},[30,91856,51923],{"class":321},[30,91858,51938],{"class":51438},[30,91860,51445],{"class":321},[30,91862,91863],{"class":32,"line":10026},[30,91864,2582],{"emptyLinePlaceholder":245},[30,91866,91867,91869,91871],{"class":32,"line":10032},[30,91868,51923],{"class":321},[30,91870,50773],{"class":51438},[30,91872,51445],{"class":321},[287,91874,91876],{"id":91875},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[20,91878,91880],{"className":53205,"code":91879,"language":53207,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    let timer = null\n    timer = setTimeout(() => {\n      clearTimeout(timer)\n      console.log(timer)\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[27,91881,91882,91890,91898,91903,91908,91913,91918,91922,91930],{"__ignoreMap":25},[30,91883,91884,91886,91888],{"class":32,"line":33},[30,91885,1230],{"class":321},[30,91887,51938],{"class":51438},[30,91889,51445],{"class":321},[30,91891,91892,91894,91896],{"class":32,"line":44},[30,91893,52282],{"class":321},[30,91895,51951],{"class":51438},[30,91897,51445],{"class":321},[30,91899,91900],{"class":32,"line":52},[30,91901,91902],{"class":321},"    let timer = null\n",[30,91904,91905],{"class":32,"line":60},[30,91906,91907],{"class":321},"    timer = setTimeout(() => {\n",[30,91909,91910],{"class":32,"line":68},[30,91911,91912],{"class":321},"      clearTimeout(timer)\n",[30,91914,91915],{"class":32,"line":80},[30,91916,91917],{"class":321},"      console.log(timer)\n",[30,91919,91920],{"class":32,"line":88},[30,91921,60363],{"class":321},[30,91923,91924,91926,91928],{"class":32,"line":96},[30,91925,52555],{"class":321},[30,91927,51951],{"class":51438},[30,91929,51445],{"class":321},[30,91931,91932,91934,91936],{"class":32,"line":104},[30,91933,51923],{"class":321},[30,91935,51938],{"class":51438},[30,91937,51445],{"class":321},[157,91939,91940],{},"输出为1",[157,91942,91943],{},"在开启的定时器里边写清除定时器",[157,91945,91946],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[287,91948,91950],{"id":91949},"_4174-节流综合案例","4.17.4 节流综合案例",[157,91952,91953],{},"页面打开，可以记录上一次的视频播放位置",[157,91955,91956],{},[160,91957],{"alt":25,"src":91958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[157,91960,91961],{},[160,91962],{"alt":25,"src":91963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[20,91965,91967],{"className":50771,"code":91966,"language":50773,"meta":25,"style":25},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta name=\"referrer\" content=\"never\" \u002F>\n  \u003Ctitle>综合案例\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .container {\n      width: 1200px;\n      margin: 0 auto;\n    }\n\n    .video video {\n      width: 100%;\n      padding: 20px 0;\n    }\n\n    .elevator {\n      position: fixed;\n      top: 280px;\n      right: 20px;\n      z-index: 999;\n      background: #fff;\n      border: 1px solid #e4e4e4;\n      width: 60px;\n    }\n\n    .elevator a {\n      display: block;\n      padding: 10px;\n      text-decoration: none;\n      text-align: center;\n      color: #999;\n    }\n\n    .elevator a.active {\n      color: #1286ff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"container\">\n    \u003Cdiv class=\"header\">\n      \u003Ca href=\"http:\u002F\u002Fpip.itcast.cn\">\n        \u003Cimg src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\" alt=\"\" \u002F>\n      \u003C\u002Fa>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"video\">\n      \u003Cvideo src=\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\" controls>\u003C\u002Fvideo>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"elevator\">\n      \u003Ca href=\"javascript:;\" data-ref=\"video\">视频介绍\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"intro\">课程简介\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"outline\">评论列表\u003C\u002Fa>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    \u002F\u002F 1.获取元素 要对视频进行操作\n    const video = document.querySelector('video')\n    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n    video.ontimeupdate = _.throttle(() => {\n      \u002F\u002F 要进行本地存储,存当前播放的时间\n      \u002F\u002F 控制台输出当前的时间\n      \u002F\u002F console.log(video.currentTime)  \u002F\u002F获得当前的视频时间\n      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n      localStorage.setItem('currentTime', video.currentTime)\n    }, 1000)\n    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n    video.onloadeddata = () => {\n      \u002F\u002F console.log(11)\n      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n      video.currentTime = localStorage.getItem('currentTime') || 0\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[27,91968,91969,91979,91993,91997,92005,92019,92039,92059,92081,92094,92102,92108,92118,92128,92138,92142,92146,92153,92166,92178,92182,92186,92196,92208,92222,92226,92230,92237,92247,92260,92272,92282,92292,92308,92320,92324,92328,92336,92346,92358,92368,92378,92388,92392,92396,92406,92417,92421,92429,92437,92441,92449,92464,92479,92494,92515,92523,92531,92546,92568,92576,92591,92617,92643,92669,92677,92685,92704,92712,92717,92736,92741,92759,92764,92769,92777,92782,92796,92804,92809,92826,92830,92835,92857,92861,92869,92877,92881],{"__ignoreMap":25},[30,91970,91971,91973,91975,91977],{"class":32,"line":33},[30,91972,51435],{"class":321},[30,91974,51439],{"class":51438},[30,91976,51442],{"class":36},[30,91978,51445],{"class":321},[30,91980,91981,91983,91985,91987,91989,91991],{"class":32,"line":44},[30,91982,1230],{"class":321},[30,91984,50773],{"class":51438},[30,91986,51454],{"class":36},[30,91988,367],{"class":321},[30,91990,51459],{"class":74},[30,91992,51445],{"class":321},[30,91994,91995],{"class":32,"line":52},[30,91996,2582],{"emptyLinePlaceholder":245},[30,91998,91999,92001,92003],{"class":32,"line":60},[30,92000,1230],{"class":321},[30,92002,51472],{"class":51438},[30,92004,51445],{"class":321},[30,92006,92007,92009,92011,92013,92015,92017],{"class":32,"line":68},[30,92008,52282],{"class":321},[30,92010,51482],{"class":51438},[30,92012,51485],{"class":36},[30,92014,367],{"class":321},[30,92016,51490],{"class":74},[30,92018,59265],{"class":321},[30,92020,92021,92023,92025,92027,92029,92031,92033,92035,92037],{"class":32,"line":80},[30,92022,52282],{"class":321},[30,92024,51482],{"class":51438},[30,92026,51501],{"class":36},[30,92028,367],{"class":321},[30,92030,51506],{"class":74},[30,92032,51509],{"class":36},[30,92034,367],{"class":321},[30,92036,51514],{"class":74},[30,92038,59265],{"class":321},[30,92040,92041,92043,92045,92047,92049,92051,92053,92055,92057],{"class":32,"line":88},[30,92042,52282],{"class":321},[30,92044,51482],{"class":51438},[30,92046,15102],{"class":36},[30,92048,367],{"class":321},[30,92050,51529],{"class":74},[30,92052,51509],{"class":36},[30,92054,367],{"class":321},[30,92056,51536],{"class":74},[30,92058,59265],{"class":321},[30,92060,92061,92063,92065,92067,92069,92072,92074,92076,92079],{"class":32,"line":96},[30,92062,52282],{"class":321},[30,92064,51482],{"class":51438},[30,92066,15102],{"class":36},[30,92068,367],{"class":321},[30,92070,92071],{"class":74},"\"referrer\"",[30,92073,51509],{"class":36},[30,92075,367],{"class":321},[30,92077,92078],{"class":74},"\"never\"",[30,92080,59265],{"class":321},[30,92082,92083,92085,92087,92090,92092],{"class":32,"line":104},[30,92084,52282],{"class":321},[30,92086,51545],{"class":51438},[30,92088,92089],{"class":321},">综合案例\u003C\u002F",[30,92091,51545],{"class":51438},[30,92093,51445],{"class":321},[30,92095,92096,92098,92100],{"class":32,"line":112},[30,92097,52282],{"class":321},[30,92099,234],{"class":51438},[30,92101,51445],{"class":321},[30,92103,92104,92106],{"class":32,"line":123},[30,92105,6585],{"class":51438},[30,92107,15754],{"class":321},[30,92109,92110,92112,92114,92116],{"class":32,"line":131},[30,92111,54833],{"class":40},[30,92113,51575],{"class":321},[30,92115,511],{"class":40},[30,92117,1480],{"class":321},[30,92119,92120,92122,92124,92126],{"class":32,"line":142},[30,92121,54844],{"class":40},[30,92123,51575],{"class":321},[30,92125,511],{"class":40},[30,92127,1480],{"class":321},[30,92129,92130,92132,92134,92136],{"class":32,"line":1811},[30,92131,72734],{"class":40},[30,92133,51575],{"class":321},[30,92135,60643],{"class":40},[30,92137,1480],{"class":321},[30,92139,92140],{"class":32,"line":1825},[30,92141,2369],{"class":321},[30,92143,92144],{"class":32,"line":1830},[30,92145,2582],{"emptyLinePlaceholder":245},[30,92147,92148,92151],{"class":32,"line":1836},[30,92149,92150],{"class":36},"    .container",[30,92152,15754],{"class":321},[30,92154,92155,92157,92159,92162,92164],{"class":32,"line":1857},[30,92156,54909],{"class":40},[30,92158,51575],{"class":321},[30,92160,92161],{"class":40},"1200",[30,92163,51630],{"class":317},[30,92165,1480],{"class":321},[30,92167,92168,92170,92172,92174,92176],{"class":32,"line":1862},[30,92169,54844],{"class":40},[30,92171,51575],{"class":321},[30,92173,511],{"class":40},[30,92175,51694],{"class":40},[30,92177,1480],{"class":321},[30,92179,92180],{"class":32,"line":1876},[30,92181,2369],{"class":321},[30,92183,92184],{"class":32,"line":1881},[30,92185,2582],{"emptyLinePlaceholder":245},[30,92187,92188,92191,92194],{"class":32,"line":1910},[30,92189,92190],{"class":36},"    .video",[30,92192,92193],{"class":51438}," video",[30,92195,15754],{"class":321},[30,92197,92198,92200,92202,92204,92206],{"class":32,"line":1915},[30,92199,54909],{"class":40},[30,92201,51575],{"class":321},[30,92203,631],{"class":40},[30,92205,648],{"class":317},[30,92207,1480],{"class":321},[30,92209,92210,92212,92214,92216,92218,92220],{"class":32,"line":1932},[30,92211,54833],{"class":40},[30,92213,51575],{"class":321},[30,92215,1020],{"class":40},[30,92217,51630],{"class":317},[30,92219,4275],{"class":40},[30,92221,1480],{"class":321},[30,92223,92224],{"class":32,"line":1937},[30,92225,2369],{"class":321},[30,92227,92228],{"class":32,"line":1942},[30,92229,2582],{"emptyLinePlaceholder":245},[30,92231,92232,92235],{"class":32,"line":1947},[30,92233,92234],{"class":36},"    .elevator",[30,92236,15754],{"class":321},[30,92238,92239,92241,92243,92245],{"class":32,"line":1961},[30,92240,54897],{"class":40},[30,92242,51575],{"class":321},[30,92244,86371],{"class":40},[30,92246,1480],{"class":321},[30,92248,92249,92251,92253,92256,92258],{"class":32,"line":1966},[30,92250,55085],{"class":40},[30,92252,51575],{"class":321},[30,92254,92255],{"class":40},"280",[30,92257,51630],{"class":317},[30,92259,1480],{"class":321},[30,92261,92262,92264,92266,92268,92270],{"class":32,"line":2759},[30,92263,86565],{"class":40},[30,92265,51575],{"class":321},[30,92267,1020],{"class":40},[30,92269,51630],{"class":317},[30,92271,1480],{"class":321},[30,92273,92274,92276,92278,92280],{"class":32,"line":2773},[30,92275,86378],{"class":40},[30,92277,51575],{"class":321},[30,92279,86383],{"class":40},[30,92281,1480],{"class":321},[30,92283,92284,92286,92288,92290],{"class":32,"line":2781},[30,92285,61859],{"class":40},[30,92287,51575],{"class":321},[30,92289,60980],{"class":40},[30,92291,1480],{"class":321},[30,92293,92294,92296,92298,92300,92302,92304,92306],{"class":32,"line":2786},[30,92295,62115],{"class":40},[30,92297,51575],{"class":321},[30,92299,537],{"class":40},[30,92301,51630],{"class":317},[30,92303,51659],{"class":40},[30,92305,62382],{"class":40},[30,92307,1480],{"class":321},[30,92309,92310,92312,92314,92316,92318],{"class":32,"line":2792},[30,92311,54909],{"class":40},[30,92313,51575],{"class":321},[30,92315,1227],{"class":40},[30,92317,51630],{"class":317},[30,92319,1480],{"class":321},[30,92321,92322],{"class":32,"line":2798},[30,92323,2369],{"class":321},[30,92325,92326],{"class":32,"line":2803},[30,92327,2582],{"emptyLinePlaceholder":245},[30,92329,92330,92332,92334],{"class":32,"line":8130},[30,92331,92234],{"class":36},[30,92333,1585],{"class":51438},[30,92335,15754],{"class":321},[30,92337,92338,92340,92342,92344],{"class":32,"line":8154},[30,92339,55147],{"class":40},[30,92341,51575],{"class":321},[30,92343,61007],{"class":40},[30,92345,1480],{"class":321},[30,92347,92348,92350,92352,92354,92356],{"class":32,"line":8159},[30,92349,54833],{"class":40},[30,92351,51575],{"class":321},[30,92353,766],{"class":40},[30,92355,51630],{"class":317},[30,92357,1480],{"class":321},[30,92359,92360,92362,92364,92366],{"class":32,"line":8165},[30,92361,64108],{"class":40},[30,92363,51575],{"class":321},[30,92365,54875],{"class":40},[30,92367,1480],{"class":321},[30,92369,92370,92372,92374,92376],{"class":32,"line":8192},[30,92371,57424],{"class":40},[30,92373,51575],{"class":321},[30,92375,51730],{"class":40},[30,92377,1480],{"class":321},[30,92379,92380,92382,92384,92386],{"class":32,"line":8197},[30,92381,57554],{"class":40},[30,92383,51575],{"class":321},[30,92385,62208],{"class":40},[30,92387,1480],{"class":321},[30,92389,92390],{"class":32,"line":8203},[30,92391,2369],{"class":321},[30,92393,92394],{"class":32,"line":8215},[30,92395,2582],{"emptyLinePlaceholder":245},[30,92397,92398,92400,92402,92404],{"class":32,"line":8227},[30,92399,92234],{"class":36},[30,92401,1585],{"class":51438},[30,92403,64162],{"class":36},[30,92405,15754],{"class":321},[30,92407,92408,92410,92412,92415],{"class":32,"line":8239},[30,92409,57554],{"class":40},[30,92411,51575],{"class":321},[30,92413,92414],{"class":40},"#1286ff",[30,92416,1480],{"class":321},[30,92418,92419],{"class":32,"line":9898},[30,92420,2369],{"class":321},[30,92422,92423,92425,92427],{"class":32,"line":9923},[30,92424,52555],{"class":321},[30,92426,234],{"class":51438},[30,92428,51445],{"class":321},[30,92430,92431,92433,92435],{"class":32,"line":9946},[30,92432,51923],{"class":321},[30,92434,51472],{"class":51438},[30,92436,51445],{"class":321},[30,92438,92439],{"class":32,"line":9970},[30,92440,2582],{"emptyLinePlaceholder":245},[30,92442,92443,92445,92447],{"class":32,"line":9975},[30,92444,1230],{"class":321},[30,92446,51938],{"class":51438},[30,92448,51445],{"class":321},[30,92450,92451,92453,92455,92457,92459,92462],{"class":32,"line":9980},[30,92452,52282],{"class":321},[30,92454,51749],{"class":51438},[30,92456,53624],{"class":36},[30,92458,367],{"class":321},[30,92460,92461],{"class":74},"\"container\"",[30,92463,51445],{"class":321},[30,92465,92466,92468,92470,92472,92474,92477],{"class":32,"line":9985},[30,92467,51479],{"class":321},[30,92469,51749],{"class":51438},[30,92471,53624],{"class":36},[30,92473,367],{"class":321},[30,92475,92476],{"class":74},"\"header\"",[30,92478,51445],{"class":321},[30,92480,92481,92483,92485,92487,92489,92492],{"class":32,"line":9994},[30,92482,55372],{"class":321},[30,92484,558],{"class":51438},[30,92486,61195],{"class":36},[30,92488,367],{"class":321},[30,92490,92491],{"class":74},"\"http:\u002F\u002Fpip.itcast.cn\"",[30,92493,51445],{"class":321},[30,92495,92496,92498,92500,92502,92504,92507,92509,92511,92513],{"class":32,"line":9999},[30,92497,55440],{"class":321},[30,92499,160],{"class":51438},[30,92501,55377],{"class":36},[30,92503,367],{"class":321},[30,92505,92506],{"class":74},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[30,92508,55385],{"class":36},[30,92510,367],{"class":321},[30,92512,7834],{"class":74},[30,92514,59265],{"class":321},[30,92516,92517,92519,92521],{"class":32,"line":10005},[30,92518,55545],{"class":321},[30,92520,558],{"class":51438},[30,92522,51445],{"class":321},[30,92524,92525,92527,92529],{"class":32,"line":10026},[30,92526,51914],{"class":321},[30,92528,51749],{"class":51438},[30,92530,51445],{"class":321},[30,92532,92533,92535,92537,92539,92541,92544],{"class":32,"line":10032},[30,92534,51479],{"class":321},[30,92536,51749],{"class":51438},[30,92538,53624],{"class":36},[30,92540,367],{"class":321},[30,92542,92543],{"class":74},"\"video\"",[30,92545,51445],{"class":321},[30,92547,92548,92550,92552,92554,92556,92559,92562,92564,92566],{"class":32,"line":10046},[30,92549,55372],{"class":321},[30,92551,28321],{"class":51438},[30,92553,55377],{"class":36},[30,92555,367],{"class":321},[30,92557,92558],{"class":74},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[30,92560,92561],{"class":36}," controls",[30,92563,55452],{"class":321},[30,92565,28321],{"class":51438},[30,92567,51445],{"class":321},[30,92569,92570,92572,92574],{"class":32,"line":10052},[30,92571,51914],{"class":321},[30,92573,51749],{"class":51438},[30,92575,51445],{"class":321},[30,92577,92578,92580,92582,92584,92586,92589],{"class":32,"line":10079},[30,92579,51479],{"class":321},[30,92581,51749],{"class":51438},[30,92583,53624],{"class":36},[30,92585,367],{"class":321},[30,92587,92588],{"class":74},"\"elevator\"",[30,92590,51445],{"class":321},[30,92592,92593,92595,92597,92599,92601,92603,92606,92608,92610,92613,92615],{"class":32,"line":10088},[30,92594,55372],{"class":321},[30,92596,558],{"class":51438},[30,92598,61195],{"class":36},[30,92600,367],{"class":321},[30,92602,64374],{"class":74},[30,92604,92605],{"class":36}," data-ref",[30,92607,367],{"class":321},[30,92609,92543],{"class":74},[30,92611,92612],{"class":321},">视频介绍\u003C\u002F",[30,92614,558],{"class":51438},[30,92616,51445],{"class":321},[30,92618,92619,92621,92623,92625,92627,92629,92631,92633,92636,92639,92641],{"class":32,"line":10094},[30,92620,55372],{"class":321},[30,92622,558],{"class":51438},[30,92624,61195],{"class":36},[30,92626,367],{"class":321},[30,92628,64374],{"class":74},[30,92630,92605],{"class":36},[30,92632,367],{"class":321},[30,92634,92635],{"class":74},"\"intro\"",[30,92637,92638],{"class":321},">课程简介\u003C\u002F",[30,92640,558],{"class":51438},[30,92642,51445],{"class":321},[30,92644,92645,92647,92649,92651,92653,92655,92657,92659,92662,92665,92667],{"class":32,"line":10102},[30,92646,55372],{"class":321},[30,92648,558],{"class":51438},[30,92650,61195],{"class":36},[30,92652,367],{"class":321},[30,92654,64374],{"class":74},[30,92656,92605],{"class":36},[30,92658,367],{"class":321},[30,92660,92661],{"class":74},"\"outline\"",[30,92663,92664],{"class":321},">评论列表\u003C\u002F",[30,92666,558],{"class":51438},[30,92668,51445],{"class":321},[30,92670,92671,92673,92675],{"class":32,"line":10107},[30,92672,51914],{"class":321},[30,92674,51749],{"class":51438},[30,92676,51445],{"class":321},[30,92678,92679,92681,92683],{"class":32,"line":16786},[30,92680,52555],{"class":321},[30,92682,51749],{"class":51438},[30,92684,51445],{"class":321},[30,92686,92687,92689,92691,92693,92695,92698,92700,92702],{"class":32,"line":16792},[30,92688,52282],{"class":321},[30,92690,51951],{"class":51438},[30,92692,55377],{"class":36},[30,92694,367],{"class":321},[30,92696,92697],{"class":74},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[30,92699,55452],{"class":321},[30,92701,51951],{"class":51438},[30,92703,51445],{"class":321},[30,92705,92706,92708,92710],{"class":32,"line":16815},[30,92707,52282],{"class":321},[30,92709,51951],{"class":51438},[30,92711,51445],{"class":321},[30,92713,92714],{"class":32,"line":16821},[30,92715,92716],{"class":379},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[30,92718,92719,92721,92723,92725,92727,92729,92731,92734],{"class":32,"line":16844},[30,92720,11403],{"class":317},[30,92722,92193],{"class":40},[30,92724,13746],{"class":317},[30,92726,54534],{"class":321},[30,92728,54537],{"class":36},[30,92730,322],{"class":321},[30,92732,92733],{"class":74},"'video'",[30,92735,328],{"class":321},[30,92737,92738],{"class":32,"line":16858},[30,92739,92740],{"class":379},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[30,92742,92743,92746,92748,92750,92752,92755,92757],{"class":32,"line":16878},[30,92744,92745],{"class":321},"    video.ontimeupdate ",[30,92747,367],{"class":317},[30,92749,88493],{"class":321},[30,92751,91311],{"class":36},[30,92753,92754],{"class":321},"(() ",[30,92756,84860],{"class":317},[30,92758,15754],{"class":321},[30,92760,92761],{"class":32,"line":16884},[30,92762,92763],{"class":379},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[30,92765,92766],{"class":32,"line":16895},[30,92767,92768],{"class":379},"      \u002F\u002F 控制台输出当前的时间\n",[30,92770,92771,92774],{"class":32,"line":16918},[30,92772,92773],{"class":379},"      \u002F\u002F console.log(video.currentTime)",[30,92775,92776],{"class":379},"  \u002F\u002F获得当前的视频时间\n",[30,92778,92779],{"class":32,"line":16940},[30,92780,92781],{"class":379},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[30,92783,92784,92786,92788,92790,92793],{"class":32,"line":16945},[30,92785,74821],{"class":321},[30,92787,71792],{"class":36},[30,92789,322],{"class":321},[30,92791,92792],{"class":74},"'currentTime'",[30,92794,92795],{"class":321},", video.currentTime)\n",[30,92797,92798,92800,92802],{"class":32,"line":16951},[30,92799,54673],{"class":321},[30,92801,6592],{"class":40},[30,92803,328],{"class":321},[30,92805,92806],{"class":32,"line":16965},[30,92807,92808],{"class":379},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[30,92810,92811,92814,92817,92819,92822,92824],{"class":32,"line":16978},[30,92812,92813],{"class":321},"    video.",[30,92815,92816],{"class":36},"onloadeddata",[30,92818,13746],{"class":317},[30,92820,92821],{"class":321}," () ",[30,92823,84860],{"class":317},[30,92825,15754],{"class":321},[30,92827,92828],{"class":32,"line":16983},[30,92829,60150],{"class":379},[30,92831,92832],{"class":32,"line":16997},[30,92833,92834],{"class":379},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[30,92836,92837,92840,92842,92845,92847,92849,92851,92853,92855],{"class":32,"line":17002},[30,92838,92839],{"class":321},"      video.currentTime ",[30,92841,367],{"class":317},[30,92843,92844],{"class":321}," localStorage.",[30,92846,71823],{"class":36},[30,92848,322],{"class":321},[30,92850,92792],{"class":74},[30,92852,13896],{"class":321},[30,92854,71495],{"class":317},[30,92856,47471],{"class":40},[30,92858,92859],{"class":32,"line":17008},[30,92860,2369],{"class":321},[30,92862,92863,92865,92867],{"class":32,"line":17013},[30,92864,52555],{"class":321},[30,92866,51951],{"class":51438},[30,92868,51445],{"class":321},[30,92870,92871,92873,92875],{"class":32,"line":17027},[30,92872,51923],{"class":321},[30,92874,51938],{"class":51438},[30,92876,51445],{"class":321},[30,92878,92879],{"class":32,"line":17032},[30,92880,2582],{"emptyLinePlaceholder":245},[30,92882,92883,92885,92887],{"class":32,"line":17037},[30,92884,51923],{"class":321},[30,92886,50773],{"class":51438},[30,92888,51445],{"class":321},[234,92890,92891],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":92893},[92894,92899,92903,92904,92905,92910,92915,92916,92917,92918,92925,92930,92931,92941,92945,92946,92950],{"id":76829,"depth":44,"text":76830,"children":92895},[92896,92897,92898],{"id":76833,"depth":52,"text":76834},{"id":76858,"depth":52,"text":76859},{"id":76870,"depth":52,"text":76871},{"id":76882,"depth":44,"text":76883,"children":92900},[92901,92902],{"id":76886,"depth":52,"text":76887},{"id":76901,"depth":52,"text":76902},{"id":76953,"depth":44,"text":76954},{"id":76997,"depth":44,"text":76998},{"id":77014,"depth":44,"text":77015,"children":92906},[92907,92908,92909],{"id":77018,"depth":52,"text":77019},{"id":77031,"depth":52,"text":77032},{"id":77136,"depth":52,"text":77137},{"id":77425,"depth":44,"text":77426,"children":92911},[92912,92913,92914],{"id":77429,"depth":52,"text":77430},{"id":77872,"depth":52,"text":77873},{"id":78283,"depth":52,"text":78284},{"id":78346,"depth":44,"text":78347},{"id":78425,"depth":44,"text":78426},{"id":78518,"depth":44,"text":78519},{"id":80363,"depth":44,"text":80364,"children":92919},[92920,92921,92922,92923,92924],{"id":80367,"depth":52,"text":80368},{"id":80379,"depth":52,"text":80380},{"id":80598,"depth":52,"text":80599},{"id":80616,"depth":52,"text":80617},{"id":80676,"depth":52,"text":80677},{"id":84944,"depth":44,"text":84945,"children":92926},[92927,92928,92929],{"id":84948,"depth":52,"text":84949},{"id":84966,"depth":52,"text":84967},{"id":84992,"depth":52,"text":84993},{"id":85001,"depth":44,"text":85002},{"id":85023,"depth":44,"text":85024,"children":92932},[92933,92934,92935,92936,92937,92938,92939,92940],{"id":85027,"depth":52,"text":85028},{"id":85288,"depth":52,"text":85289},{"id":85474,"depth":52,"text":85475},{"id":85841,"depth":52,"text":85842},{"id":85957,"depth":52,"text":85958},{"id":85993,"depth":52,"text":85994},{"id":86040,"depth":52,"text":86041},{"id":86074,"depth":52,"text":86075},{"id":87437,"depth":44,"text":87438,"children":92942},[92943,92944],{"id":87441,"depth":52,"text":87442},{"id":87478,"depth":52,"text":87479},{"id":88833,"depth":44,"text":88834},{"id":89204,"depth":44,"text":89205,"children":92947},[92948,92949],{"id":89208,"depth":52,"text":89209},{"id":89242,"depth":52,"text":89243},{"id":89971,"depth":44,"text":89972,"children":92951},[92952,92953,92954,92955],{"id":89975,"depth":52,"text":89976},{"id":90933,"depth":52,"text":90934},{"id":91875,"depth":52,"text":91876},{"id":91949,"depth":52,"text":91950},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76818,"description":242},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92962,"title":92963,"body":92964,"description":92975,"extension":243,"meta":92976,"navigation":245,"path":92978,"seo":92979,"stem":92980,"__hash__":92981},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92965,"toc":92973},[92966],[157,92967,92968,92969],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[558,92970,92971],{"href":92971,"rel":92972},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24045],{"title":25,"searchDepth":44,"depth":44,"links":92974},[],"三件套第三套学习",{"category":92977},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92963,"description":92975},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92983,"title":92984,"body":92985,"description":242,"extension":243,"meta":93090,"navigation":245,"path":93091,"seo":93092,"stem":93093,"__hash__":93094},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92986,"toc":93085},[92987,92994,92997,93000,93003,93007,93016,93019,93022,93026,93035,93038,93042,93045,93065,93068,93082],[157,92988,92989],{},[558,92990,92993],{"href":92991,"rel":92992},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24045],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92995,92984],{"id":92996},"_1安装",[157,92998,92999],{},"numpy是科学计算基础库,底层是C语言",[157,93001,93002],{},"三种方式：",[15,93004,93006],{"id":93005},"_11-通过pip安装","1.1 通过pip安装",[20,93008,93010],{"className":30516,"code":93009,"language":30518,"meta":25,"style":25},"pip install numpy\n",[27,93011,93012],{"__ignoreMap":25},[30,93013,93014],{"class":32,"line":33},[30,93015,93009],{"class":321},[157,93017,93018],{},"首选方式，自动处理依赖项",[157,93020,93021],{},"在提示系统命令符中使用cmd",[15,93023,93025],{"id":93024},"_12-通过anaconda安装","1.2 通过Anaconda安装",[20,93027,93029],{"className":30516,"code":93028,"language":30518,"meta":25,"style":25},"conda install numpy\n",[27,93030,93031],{"__ignoreMap":25},[30,93032,93033],{"class":32,"line":33},[30,93034,93028],{"class":321},[157,93036,93037],{},"自动解决环境依赖",[15,93039,93041],{"id":93040},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[157,93043,93044],{},"对于Debian\u002FUbuntu",[20,93046,93048],{"className":30516,"code":93047,"language":30518,"meta":25,"style":25},"sudo apt-get install python3-numpy\n",[27,93049,93050],{"__ignoreMap":25},[30,93051,93052,93055,93057,93060,93062],{"class":32,"line":33},[30,93053,93054],{"class":321},"sudo apt",[30,93056,852],{"class":317},[30,93058,93059],{"class":321},"get install python3",[30,93061,852],{"class":317},[30,93063,93064],{"class":321},"numpy\n",[157,93066,93067],{},"对于Fedora:",[20,93069,93071],{"className":30516,"code":93070,"language":30518,"meta":25,"style":25},"sudo dnf install python3-numpy\n",[27,93072,93073],{"__ignoreMap":25},[30,93074,93075,93078,93080],{"class":32,"line":33},[30,93076,93077],{"class":321},"sudo dnf install python3",[30,93079,852],{"class":317},[30,93081,93064],{"class":321},[234,93083,93084],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":44,"depth":44,"links":93086},[93087,93088,93089],{"id":93005,"depth":44,"text":93006},{"id":93024,"depth":44,"text":93025},{"id":93040,"depth":44,"text":93041},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92984,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93096,"title":93097,"body":93098,"description":242,"extension":243,"meta":93211,"navigation":245,"path":93212,"seo":93213,"stem":93214,"__hash__":93215},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93099,"toc":93209},[93100,93103,93106,93109,93112,93115,93118,93121,93124,93127,93203,93206],[10,93101,93097],{"id":93102},"_10算数函数",[157,93104,93105],{},"加减乘除运算跟python基础语法没区别",[157,93107,93108],{},"除了python那种方法外还可以使用函数",[157,93110,93111],{},"加：np.add(a,b)",[157,93113,93114],{},"减：np.subtract(a,b)",[157,93116,93117],{},"乘：np.multiply(a,b)",[157,93119,93120],{},"除：np.divide(a,b) == a\u002Fb",[157,93122,93123],{},"取余：np.mod(a,b) == a%b",[157,93125,93126],{},"必须会的用法：",[20,93128,93130],{"className":30516,"code":93129,"language":30518,"meta":25,"style":25},"a=np.arange(9).reshape(3,3)\nb=np.array([10,10,10])\nresult=np.empty_like(a)\nnp.add(a,b,out=result)\nresult\n",[27,93131,93132,93154,93175,93185,93198],{"__ignoreMap":25},[30,93133,93134,93136,93138,93141,93143,93146,93148,93150,93152],{"class":32,"line":33},[30,93135,558],{"class":321},[30,93137,367],{"class":317},[30,93139,93140],{"class":321},"np.arange(",[30,93142,740],{"class":40},[30,93144,93145],{"class":321},").reshape(",[30,93147,392],{"class":40},[30,93149,698],{"class":321},[30,93151,392],{"class":40},[30,93153,328],{"class":321},[30,93155,93156,93158,93160,93163,93165,93167,93169,93171,93173],{"class":32,"line":44},[30,93157,583],{"class":321},[30,93159,367],{"class":317},[30,93161,93162],{"class":321},"np.array([",[30,93164,766],{"class":40},[30,93166,698],{"class":321},[30,93168,766],{"class":40},[30,93170,698],{"class":321},[30,93172,766],{"class":40},[30,93174,4839],{"class":321},[30,93176,93177,93180,93182],{"class":32,"line":52},[30,93178,93179],{"class":321},"result",[30,93181,367],{"class":317},[30,93183,93184],{"class":321},"np.empty_like(a)\n",[30,93186,93187,93190,93193,93195],{"class":32,"line":60},[30,93188,93189],{"class":321},"np.add(a,b,",[30,93191,93192],{"class":5398},"out",[30,93194,367],{"class":317},[30,93196,93197],{"class":321},"result)\n",[30,93199,93200],{"class":32,"line":68},[30,93201,93202],{"class":321},"result\n",[157,93204,93205],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[234,93207,93208],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":93210},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93097,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93217,"title":93218,"body":93219,"description":242,"extension":243,"meta":93981,"navigation":245,"path":93982,"seo":93983,"stem":93984,"__hash__":93985},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93220,"toc":93968},[93221,93224,93227,93230,93234,93273,93277,93321,93381,93385,93388,93427,93430,93475,93479,93515,93519,93588,93592,93656,93660,93663,93666,93669,93672,93708,93712,93752,93756,93828,93831,93835,93898,93902,93965],[10,93222,93218],{"id":93223},"_11统计函数",[157,93225,93226],{},"sum max min mean",[157,93228,93229],{},"这些有axis参数，可以指定方向",[15,93231,93233],{"id":93232},"_111-sum求和函数","11.1 sum()求和函数",[20,93235,93237],{"className":30516,"code":93236,"language":30518,"meta":25,"style":25},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[27,93238,93239,93244,93265],{"__ignoreMap":25},[30,93240,93241],{"class":32,"line":33},[30,93242,93243],{"class":379},"#创建一维数组\n",[30,93245,93246,93248,93250,93253,93255,93257,93259,93261,93263],{"class":32,"line":44},[30,93247,558],{"class":321},[30,93249,367],{"class":317},[30,93251,93252],{"class":321},"np.random.randint(",[30,93254,537],{"class":40},[30,93256,698],{"class":321},[30,93258,631],{"class":40},[30,93260,698],{"class":321},[30,93262,1020],{"class":40},[30,93264,328],{"class":321},[30,93266,93267,93270],{"class":32,"line":52},[30,93268,93269],{"class":321},"np.sum(a)",[30,93271,93272],{"class":379},"#求和\n",[15,93274,93276],{"id":93275},"_112-max求最大值函数","11.2 max()求最大值函数",[20,93278,93280],{"className":30516,"code":93279,"language":30518,"meta":25,"style":25},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[27,93281,93282,93286,93306,93311,93316],{"__ignoreMap":25},[30,93283,93284],{"class":32,"line":33},[30,93285,93243],{"class":379},[30,93287,93288,93290,93292,93294,93296,93298,93300,93302,93304],{"class":32,"line":44},[30,93289,558],{"class":321},[30,93291,367],{"class":317},[30,93293,93252],{"class":321},[30,93295,537],{"class":40},[30,93297,698],{"class":321},[30,93299,631],{"class":40},[30,93301,698],{"class":321},[30,93303,1020],{"class":40},[30,93305,328],{"class":321},[30,93307,93308],{"class":32,"line":52},[30,93309,93310],{"class":321},"np.max(a)\n",[30,93312,93313],{"class":32,"line":60},[30,93314,93315],{"class":379},"#最大索引(求最大元素的索引)arg\n",[30,93317,93318],{"class":32,"line":68},[30,93319,93320],{"class":321},"np.argmax(a)\n",[20,93322,93324],{"className":30516,"code":93323,"language":30518,"meta":25,"style":25},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[27,93325,93326,93347,93367,93371],{"__ignoreMap":25},[30,93327,93328,93330,93332,93335,93337,93339,93341,93343,93345],{"class":32,"line":33},[30,93329,11101],{"class":321},[30,93331,367],{"class":317},[30,93333,93334],{"class":321}," np.array([",[30,93336,537],{"class":40},[30,93338,12617],{"class":321},[30,93340,639],{"class":40},[30,93342,12617],{"class":321},[30,93344,392],{"class":40},[30,93346,4839],{"class":321},[30,93348,93349,93351,93353,93355,93357,93359,93361,93363,93365],{"class":32,"line":44},[30,93350,11127],{"class":321},[30,93352,367],{"class":317},[30,93354,93334],{"class":321},[30,93356,392],{"class":40},[30,93358,12617],{"class":321},[30,93360,398],{"class":40},[30,93362,12617],{"class":321},[30,93364,613],{"class":40},[30,93366,4839],{"class":321},[30,93368,93369],{"class":32,"line":52},[30,93370,2582],{"emptyLinePlaceholder":245},[30,93372,93373,93375,93378],{"class":32,"line":60},[30,93374,30553],{"class":40},[30,93376,93377],{"class":321},"(np.maximum(a, b))   ",[30,93379,93380],{"class":379},"# [3 5 4]，每个位置上取较大值\n",[15,93382,93384],{"id":93383},"_113-mean求平均值函数","11.3 mean()求平均值函数",[157,93386,93387],{},"①一维数组：",[20,93389,93391],{"className":30516,"code":93390,"language":30518,"meta":25,"style":25},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[27,93392,93393,93397,93417,93422],{"__ignoreMap":25},[30,93394,93395],{"class":32,"line":33},[30,93396,93243],{"class":379},[30,93398,93399,93401,93403,93405,93407,93409,93411,93413,93415],{"class":32,"line":44},[30,93400,558],{"class":321},[30,93402,367],{"class":317},[30,93404,93252],{"class":321},[30,93406,537],{"class":40},[30,93408,698],{"class":321},[30,93410,631],{"class":40},[30,93412,698],{"class":321},[30,93414,1020],{"class":40},[30,93416,328],{"class":321},[30,93418,93419],{"class":32,"line":52},[30,93420,93421],{"class":379},"#求平均值\n",[30,93423,93424],{"class":32,"line":60},[30,93425,93426],{"class":321},"np.mean(a)\n",[157,93428,93429],{},"②二维数组",[20,93431,93433],{"className":30516,"code":93432,"language":30518,"meta":25,"style":25},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[27,93434,93435,93440,93465,93470],{"__ignoreMap":25},[30,93436,93437],{"class":32,"line":33},[30,93438,93439],{"class":379},"#二维数组\n",[30,93441,93442,93445,93447,93449,93451,93453,93455,93457,93459,93461,93463],{"class":32,"line":44},[30,93443,93444],{"class":321},"aa",[30,93446,367],{"class":317},[30,93448,93140],{"class":321},[30,93450,537],{"class":40},[30,93452,698],{"class":321},[30,93454,843],{"class":40},[30,93456,93145],{"class":321},[30,93458,392],{"class":40},[30,93460,698],{"class":321},[30,93462,613],{"class":40},[30,93464,328],{"class":321},[30,93466,93467],{"class":32,"line":52},[30,93468,93469],{"class":379},"#对数组中的所有数求平均\n",[30,93471,93472],{"class":32,"line":60},[30,93473,93474],{"class":321},"np.mean(aa)\n",[15,93476,93478],{"id":93477},"_114-median求中位数函数","11.4 median()求中位数函数",[20,93480,93482],{"className":30516,"code":93481,"language":30518,"meta":25,"style":25},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[27,93483,93484,93489,93505,93510],{"__ignoreMap":25},[30,93485,93486],{"class":32,"line":33},[30,93487,93488],{"class":379},"#求中位数\n",[30,93490,93491,93493,93495,93497,93499,93501,93503],{"class":32,"line":44},[30,93492,583],{"class":321},[30,93494,367],{"class":317},[30,93496,93140],{"class":321},[30,93498,537],{"class":40},[30,93500,698],{"class":321},[30,93502,766],{"class":40},[30,93504,328],{"class":321},[30,93506,93507],{"class":32,"line":52},[30,93508,93509],{"class":321},"np.median(b)\n",[30,93511,93512],{"class":32,"line":60},[30,93513,93514],{"class":379},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[15,93516,93518],{"id":93517},"_115-power求幂运算函数","11.5 power()求幂运算函数",[20,93520,93522],{"className":30516,"code":93521,"language":30518,"meta":25,"style":25},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[27,93523,93524,93540,93545,93550,93559,93564,93573],{"__ignoreMap":25},[30,93525,93526,93528,93530,93532,93534,93536,93538],{"class":32,"line":33},[30,93527,583],{"class":321},[30,93529,367],{"class":317},[30,93531,93140],{"class":321},[30,93533,537],{"class":40},[30,93535,698],{"class":321},[30,93537,766],{"class":40},[30,93539,328],{"class":321},[30,93541,93542],{"class":32,"line":44},[30,93543,93544],{"class":379},"#幂运算\n",[30,93546,93547],{"class":32,"line":52},[30,93548,93549],{"class":379},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[30,93551,93552,93555,93557],{"class":32,"line":60},[30,93553,93554],{"class":321},"np.power(b,",[30,93556,398],{"class":40},[30,93558,328],{"class":321},[30,93560,93561],{"class":32,"line":68},[30,93562,93563],{"class":379},"#或者以下代码，将数据存储起来\n",[30,93565,93566,93568,93570],{"class":32,"line":80},[30,93567,1165],{"class":321},[30,93569,367],{"class":317},[30,93571,93572],{"class":321},"np.empty_like(b)\n",[30,93574,93575,93577,93579,93581,93583,93585],{"class":32,"line":88},[30,93576,93554],{"class":321},[30,93578,398],{"class":40},[30,93580,698],{"class":321},[30,93582,93192],{"class":5398},[30,93584,367],{"class":317},[30,93586,93587],{"class":321},"y)\n",[15,93589,93591],{"id":93590},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[20,93593,93595],{"className":30516,"code":93594,"language":30518,"meta":25,"style":25},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[27,93596,93597,93613,93618,93623,93627,93645],{"__ignoreMap":25},[30,93598,93599,93601,93603,93605,93607,93609,93611],{"class":32,"line":33},[30,93600,583],{"class":321},[30,93602,367],{"class":317},[30,93604,93140],{"class":321},[30,93606,537],{"class":40},[30,93608,698],{"class":321},[30,93610,766],{"class":40},[30,93612,328],{"class":321},[30,93614,93615],{"class":32,"line":44},[30,93616,93617],{"class":379},"#开方\n",[30,93619,93620],{"class":32,"line":52},[30,93621,93622],{"class":321},"np.sqrt(b)\n",[30,93624,93625],{"class":32,"line":60},[30,93626,93563],{"class":379},[30,93628,93629,93631,93633,93636,93639,93641,93643],{"class":32,"line":68},[30,93630,1165],{"class":321},[30,93632,367],{"class":317},[30,93634,93635],{"class":321},"np.empty_like(b,",[30,93637,93638],{"class":5398},"dtype",[30,93640,367],{"class":317},[30,93642,361],{"class":40},[30,93644,328],{"class":321},[30,93646,93647,93650,93652,93654],{"class":32,"line":80},[30,93648,93649],{"class":321},"np.sqrt(b,",[30,93651,93192],{"class":5398},[30,93653,367],{"class":317},[30,93655,93587],{"class":321},[15,93657,93659],{"id":93658},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[157,93661,93662],{},"对数组中的元素累计求和，可指定轴",[157,93664,93665],{},"#累计求和的意思是：",[157,93667,93668],{},"a = np.array([1, 2, 3, 4])",[157,93670,93671],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[20,93673,93675],{"className":30516,"code":93674,"language":30518,"meta":25,"style":25},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[27,93676,93677,93693,93698,93703],{"__ignoreMap":25},[30,93678,93679,93681,93683,93685,93687,93689,93691],{"class":32,"line":33},[30,93680,583],{"class":321},[30,93682,367],{"class":317},[30,93684,93140],{"class":321},[30,93686,537],{"class":40},[30,93688,698],{"class":321},[30,93690,766],{"class":40},[30,93692,328],{"class":321},[30,93694,93695],{"class":32,"line":44},[30,93696,93697],{"class":321},"np.cumsum(b)\n",[30,93699,93700],{"class":32,"line":52},[30,93701,93702],{"class":379},"#结果：\n",[30,93704,93705],{"class":32,"line":60},[30,93706,93707],{"class":379},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[15,93709,93711],{"id":93710},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[20,93713,93715],{"className":30516,"code":93714,"language":30518,"meta":25,"style":25},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[27,93716,93717,93733,93738,93743,93747],{"__ignoreMap":25},[30,93718,93719,93721,93723,93725,93727,93729,93731],{"class":32,"line":33},[30,93720,583],{"class":321},[30,93722,367],{"class":317},[30,93724,93140],{"class":321},[30,93726,537],{"class":40},[30,93728,698],{"class":321},[30,93730,766],{"class":40},[30,93732,328],{"class":321},[30,93734,93735],{"class":32,"line":44},[30,93736,93737],{"class":379},"#对数组中的元素累计求积，可指定轴\n",[30,93739,93740],{"class":32,"line":52},[30,93741,93742],{"class":321},"np.cumprod(b)\n",[30,93744,93745],{"class":32,"line":60},[30,93746,93702],{"class":379},[30,93748,93749],{"class":32,"line":68},[30,93750,93751],{"class":379},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[15,93753,93755],{"id":93754},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[20,93757,93759],{"className":30516,"code":93758,"language":30518,"meta":25,"style":25},"#删除数组中的重复数据，并对数据进行排序\na=np.array([1,2,3,12,3,10,32,0,23,4])\nnp.unique(a)\n#结果：\n#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[27,93760,93761,93766,93814,93819,93823],{"__ignoreMap":25},[30,93762,93763],{"class":32,"line":33},[30,93764,93765],{"class":379},"#删除数组中的重复数据，并对数据进行排序\n",[30,93767,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796,93798,93800,93802,93804,93806,93808,93810,93812],{"class":32,"line":44},[30,93769,558],{"class":321},[30,93771,367],{"class":317},[30,93773,93162],{"class":321},[30,93775,537],{"class":40},[30,93777,698],{"class":321},[30,93779,398],{"class":40},[30,93781,698],{"class":321},[30,93783,392],{"class":40},[30,93785,698],{"class":321},[30,93787,818],{"class":40},[30,93789,698],{"class":321},[30,93791,392],{"class":40},[30,93793,698],{"class":321},[30,93795,766],{"class":40},[30,93797,698],{"class":321},[30,93799,517],{"class":40},[30,93801,698],{"class":321},[30,93803,511],{"class":40},[30,93805,698],{"class":321},[30,93807,1095],{"class":40},[30,93809,698],{"class":321},[30,93811,613],{"class":40},[30,93813,4839],{"class":321},[30,93815,93816],{"class":32,"line":52},[30,93817,93818],{"class":321},"np.unique(a)\n",[30,93820,93821],{"class":32,"line":60},[30,93822,93702],{"class":379},[30,93824,93825],{"class":32,"line":68},[30,93826,93827],{"class":379},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[157,93829,93830],{},"升序形式排序",[15,93832,93834],{"id":93833},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[20,93836,93838],{"className":30516,"code":93837,"language":30518,"meta":25,"style":25},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[27,93839,93840,93888,93893],{"__ignoreMap":25},[30,93841,93842,93844,93846,93848,93850,93852,93854,93856,93858,93860,93862,93864,93866,93868,93870,93872,93874,93876,93878,93880,93882,93884,93886],{"class":32,"line":33},[30,93843,558],{"class":321},[30,93845,367],{"class":317},[30,93847,93162],{"class":321},[30,93849,537],{"class":40},[30,93851,698],{"class":321},[30,93853,398],{"class":40},[30,93855,698],{"class":321},[30,93857,392],{"class":40},[30,93859,698],{"class":321},[30,93861,818],{"class":40},[30,93863,698],{"class":321},[30,93865,392],{"class":40},[30,93867,698],{"class":321},[30,93869,766],{"class":40},[30,93871,698],{"class":321},[30,93873,517],{"class":40},[30,93875,698],{"class":321},[30,93877,511],{"class":40},[30,93879,698],{"class":321},[30,93881,1095],{"class":40},[30,93883,698],{"class":321},[30,93885,613],{"class":40},[30,93887,4839],{"class":321},[30,93889,93890],{"class":32,"line":44},[30,93891,93892],{"class":379},"#返回数组中非零元素的索引\n",[30,93894,93895],{"class":32,"line":52},[30,93896,93897],{"class":321},"np.nonzero(a)\n",[15,93899,93901],{"id":93900},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[20,93903,93905],{"className":30516,"code":93904,"language":30518,"meta":25,"style":25},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[27,93906,93907,93955,93960],{"__ignoreMap":25},[30,93908,93909,93911,93913,93915,93917,93919,93921,93923,93925,93927,93929,93931,93933,93935,93937,93939,93941,93943,93945,93947,93949,93951,93953],{"class":32,"line":33},[30,93910,558],{"class":321},[30,93912,367],{"class":317},[30,93914,93162],{"class":321},[30,93916,537],{"class":40},[30,93918,698],{"class":321},[30,93920,398],{"class":40},[30,93922,698],{"class":321},[30,93924,392],{"class":40},[30,93926,698],{"class":321},[30,93928,818],{"class":40},[30,93930,698],{"class":321},[30,93932,392],{"class":40},[30,93934,698],{"class":321},[30,93936,766],{"class":40},[30,93938,698],{"class":321},[30,93940,517],{"class":40},[30,93942,698],{"class":321},[30,93944,511],{"class":40},[30,93946,698],{"class":321},[30,93948,1095],{"class":40},[30,93950,698],{"class":321},[30,93952,613],{"class":40},[30,93954,4839],{"class":321},[30,93956,93957],{"class":32,"line":44},[30,93958,93959],{"class":379},"#计算一组数中最大值与最小值的差，可指定轴\n",[30,93961,93962],{"class":32,"line":52},[30,93963,93964],{"class":321},"np.ptp(a)\n",[234,93966,93967],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":93969},[93970,93971,93972,93973,93974,93975,93976,93977,93978,93979,93980],{"id":93232,"depth":44,"text":93233},{"id":93275,"depth":44,"text":93276},{"id":93383,"depth":44,"text":93384},{"id":93477,"depth":44,"text":93478},{"id":93517,"depth":44,"text":93518},{"id":93590,"depth":44,"text":93591},{"id":93658,"depth":44,"text":93659},{"id":93710,"depth":44,"text":93711},{"id":93754,"depth":44,"text":93755},{"id":93833,"depth":44,"text":93834},{"id":93900,"depth":44,"text":93901},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93218,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93987,"title":93988,"body":93989,"description":242,"extension":243,"meta":94644,"navigation":245,"path":94645,"seo":94646,"stem":94647,"__hash__":94648},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93990,"toc":94632},[93991,93994,93998,94001,94217,94221,94224,94433,94437,94503,94508,94512,94515,94518,94556,94560,94563,94568,94572,94575,94578,94583,94587,94590,94594,94597,94600,94605,94609,94612,94615,94620,94624,94629],[10,93992,93988],{"id":93993},"_12其他常用函数",[15,93995,93997],{"id":93996},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[157,93999,94000],{},"将数组的数据按照行列复制扩展",[20,94002,94004],{"className":30516,"code":94003,"language":30518,"meta":25,"style":25},"a=np.arange(1,5)\nnp.tile(a,2)\n#结果：\n#array([1, 2, 3, 4, 1, 2, 3, 4])\n#行复制两次，列复制三次\nnp.tile(a,(2,3))\n#结果：\n'''\narray([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n'''\n#创建二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.tile(aa,2)#一个数的时候就是行\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12]])\n'''\nnp.tile(aa,(2,3))\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n'''\n\n",[27,94005,94006,94022,94031,94035,94040,94045,94058,94062,94067,94072,94077,94081,94086,94110,94122,94126,94130,94135,94140,94145,94150,94154,94167,94171,94175,94180,94185,94190,94195,94200,94204,94208,94213],{"__ignoreMap":25},[30,94007,94008,94010,94012,94014,94016,94018,94020],{"class":32,"line":33},[30,94009,558],{"class":321},[30,94011,367],{"class":317},[30,94013,93140],{"class":321},[30,94015,537],{"class":40},[30,94017,698],{"class":321},[30,94019,639],{"class":40},[30,94021,328],{"class":321},[30,94023,94024,94027,94029],{"class":32,"line":44},[30,94025,94026],{"class":321},"np.tile(a,",[30,94028,398],{"class":40},[30,94030,328],{"class":321},[30,94032,94033],{"class":32,"line":52},[30,94034,93702],{"class":379},[30,94036,94037],{"class":32,"line":60},[30,94038,94039],{"class":379},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[30,94041,94042],{"class":32,"line":68},[30,94043,94044],{"class":379},"#行复制两次，列复制三次\n",[30,94046,94047,94050,94052,94054,94056],{"class":32,"line":80},[30,94048,94049],{"class":321},"np.tile(a,(",[30,94051,398],{"class":40},[30,94053,698],{"class":321},[30,94055,392],{"class":40},[30,94057,30635],{"class":321},[30,94059,94060],{"class":32,"line":88},[30,94061,93702],{"class":379},[30,94063,94064],{"class":32,"line":96},[30,94065,94066],{"class":74},"'''\n",[30,94068,94069],{"class":32,"line":104},[30,94070,94071],{"class":74},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[30,94073,94074],{"class":32,"line":112},[30,94075,94076],{"class":74},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[30,94078,94079],{"class":32,"line":123},[30,94080,94066],{"class":74},[30,94082,94083],{"class":32,"line":131},[30,94084,94085],{"class":379},"#创建二维数组\n",[30,94087,94088,94090,94092,94094,94096,94098,94100,94102,94104,94106,94108],{"class":32,"line":142},[30,94089,93444],{"class":321},[30,94091,367],{"class":317},[30,94093,93140],{"class":321},[30,94095,537],{"class":40},[30,94097,698],{"class":321},[30,94099,843],{"class":40},[30,94101,93145],{"class":321},[30,94103,613],{"class":40},[30,94105,698],{"class":321},[30,94107,392],{"class":40},[30,94109,328],{"class":321},[30,94111,94112,94115,94117,94119],{"class":32,"line":1811},[30,94113,94114],{"class":321},"np.tile(aa,",[30,94116,398],{"class":40},[30,94118,749],{"class":321},[30,94120,94121],{"class":379},"#一个数的时候就是行\n",[30,94123,94124],{"class":32,"line":1825},[30,94125,93702],{"class":379},[30,94127,94128],{"class":32,"line":1830},[30,94129,94066],{"class":74},[30,94131,94132],{"class":32,"line":1836},[30,94133,94134],{"class":74},"array([[ 1,  2,  3,  1,  2,  3],\n",[30,94136,94137],{"class":32,"line":1857},[30,94138,94139],{"class":74},"       [ 4,  5,  6,  4,  5,  6],\n",[30,94141,94142],{"class":32,"line":1862},[30,94143,94144],{"class":74},"       [ 7,  8,  9,  7,  8,  9],\n",[30,94146,94147],{"class":32,"line":1876},[30,94148,94149],{"class":74},"       [10, 11, 12, 10, 11, 12]])\n",[30,94151,94152],{"class":32,"line":1881},[30,94153,94066],{"class":74},[30,94155,94156,94159,94161,94163,94165],{"class":32,"line":1910},[30,94157,94158],{"class":321},"np.tile(aa,(",[30,94160,398],{"class":40},[30,94162,698],{"class":321},[30,94164,392],{"class":40},[30,94166,30635],{"class":321},[30,94168,94169],{"class":32,"line":1915},[30,94170,93702],{"class":379},[30,94172,94173],{"class":32,"line":1932},[30,94174,94066],{"class":74},[30,94176,94177],{"class":32,"line":1937},[30,94178,94179],{"class":74},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[30,94181,94182],{"class":32,"line":1942},[30,94183,94184],{"class":74},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[30,94186,94187],{"class":32,"line":1947},[30,94188,94189],{"class":74},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[30,94191,94192],{"class":32,"line":1961},[30,94193,94194],{"class":74},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[30,94196,94197],{"class":32,"line":1966},[30,94198,94199],{"class":74},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[30,94201,94202],{"class":32,"line":2759},[30,94203,94184],{"class":74},[30,94205,94206],{"class":32,"line":2773},[30,94207,94189],{"class":74},[30,94209,94210],{"class":32,"line":2781},[30,94211,94212],{"class":74},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[30,94214,94215],{"class":32,"line":2786},[30,94216,94066],{"class":74},[15,94218,94220],{"id":94219},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[157,94222,94223],{},"repeat()将数组中的每个元素重复若干次",[20,94225,94227],{"className":30516,"code":94226,"language":30518,"meta":25,"style":25},"a=np.arange(1,5)\nnp.repeat(a,3)\n#结果：\n#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\naa=np.arange(1,13).reshape(4,3)\n#这个重复之后二维变成一维\nnp.repeat(aa,2)\n'''\narray([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n'''\n#指定axis\nnp.repeat(aa,2,axis=0)\n#结果：\n'''\narray([[ 1,  2,  3],\n       [ 1,  2,  3],\n       [ 4,  5,  6],\n       [ 4,  5,  6],\n       [ 7,  8,  9],\n       [ 7,  8,  9],\n       [10, 11, 12],\n       [10, 11, 12]])\n'''\nnp.repeat(aa,2,axis=1)\n#结果：\n'''\narray([[ 1,  1,  2,  2,  3,  3],\n       [ 4,  4,  5,  5,  6,  6],\n       [ 7,  7,  8,  8,  9,  9],\n       [10, 10, 11, 11, 12, 12]])\n'''\n",[27,94228,94229,94245,94254,94258,94263,94287,94292,94301,94305,94310,94314,94319,94335,94339,94343,94348,94353,94358,94362,94367,94371,94376,94381,94385,94401,94405,94409,94414,94419,94424,94429],{"__ignoreMap":25},[30,94230,94231,94233,94235,94237,94239,94241,94243],{"class":32,"line":33},[30,94232,558],{"class":321},[30,94234,367],{"class":317},[30,94236,93140],{"class":321},[30,94238,537],{"class":40},[30,94240,698],{"class":321},[30,94242,639],{"class":40},[30,94244,328],{"class":321},[30,94246,94247,94250,94252],{"class":32,"line":44},[30,94248,94249],{"class":321},"np.repeat(a,",[30,94251,392],{"class":40},[30,94253,328],{"class":321},[30,94255,94256],{"class":32,"line":52},[30,94257,93702],{"class":379},[30,94259,94260],{"class":32,"line":60},[30,94261,94262],{"class":379},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[30,94264,94265,94267,94269,94271,94273,94275,94277,94279,94281,94283,94285],{"class":32,"line":68},[30,94266,93444],{"class":321},[30,94268,367],{"class":317},[30,94270,93140],{"class":321},[30,94272,537],{"class":40},[30,94274,698],{"class":321},[30,94276,843],{"class":40},[30,94278,93145],{"class":321},[30,94280,613],{"class":40},[30,94282,698],{"class":321},[30,94284,392],{"class":40},[30,94286,328],{"class":321},[30,94288,94289],{"class":32,"line":80},[30,94290,94291],{"class":379},"#这个重复之后二维变成一维\n",[30,94293,94294,94297,94299],{"class":32,"line":88},[30,94295,94296],{"class":321},"np.repeat(aa,",[30,94298,398],{"class":40},[30,94300,328],{"class":321},[30,94302,94303],{"class":32,"line":96},[30,94304,94066],{"class":74},[30,94306,94307],{"class":32,"line":104},[30,94308,94309],{"class":74},"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",[30,94311,94312],{"class":32,"line":112},[30,94313,94066],{"class":74},[30,94315,94316],{"class":32,"line":123},[30,94317,94318],{"class":379},"#指定axis\n",[30,94320,94321,94323,94325,94327,94329,94331,94333],{"class":32,"line":131},[30,94322,94296],{"class":321},[30,94324,398],{"class":40},[30,94326,698],{"class":321},[30,94328,47652],{"class":5398},[30,94330,367],{"class":317},[30,94332,511],{"class":40},[30,94334,328],{"class":321},[30,94336,94337],{"class":32,"line":142},[30,94338,93702],{"class":379},[30,94340,94341],{"class":32,"line":1811},[30,94342,94066],{"class":74},[30,94344,94345],{"class":32,"line":1825},[30,94346,94347],{"class":74},"array([[ 1,  2,  3],\n",[30,94349,94350],{"class":32,"line":1830},[30,94351,94352],{"class":74},"       [ 1,  2,  3],\n",[30,94354,94355],{"class":32,"line":1836},[30,94356,94357],{"class":74},"       [ 4,  5,  6],\n",[30,94359,94360],{"class":32,"line":1857},[30,94361,94357],{"class":74},[30,94363,94364],{"class":32,"line":1862},[30,94365,94366],{"class":74},"       [ 7,  8,  9],\n",[30,94368,94369],{"class":32,"line":1876},[30,94370,94366],{"class":74},[30,94372,94373],{"class":32,"line":1881},[30,94374,94375],{"class":74},"       [10, 11, 12],\n",[30,94377,94378],{"class":32,"line":1910},[30,94379,94380],{"class":74},"       [10, 11, 12]])\n",[30,94382,94383],{"class":32,"line":1915},[30,94384,94066],{"class":74},[30,94386,94387,94389,94391,94393,94395,94397,94399],{"class":32,"line":1932},[30,94388,94296],{"class":321},[30,94390,398],{"class":40},[30,94392,698],{"class":321},[30,94394,47652],{"class":5398},[30,94396,367],{"class":317},[30,94398,537],{"class":40},[30,94400,328],{"class":321},[30,94402,94403],{"class":32,"line":1937},[30,94404,93702],{"class":379},[30,94406,94407],{"class":32,"line":1942},[30,94408,94066],{"class":74},[30,94410,94411],{"class":32,"line":1947},[30,94412,94413],{"class":74},"array([[ 1,  1,  2,  2,  3,  3],\n",[30,94415,94416],{"class":32,"line":1961},[30,94417,94418],{"class":74},"       [ 4,  4,  5,  5,  6,  6],\n",[30,94420,94421],{"class":32,"line":1966},[30,94422,94423],{"class":74},"       [ 7,  7,  8,  8,  9,  9],\n",[30,94425,94426],{"class":32,"line":2759},[30,94427,94428],{"class":74},"       [10, 10, 11, 11, 12, 12]])\n",[30,94430,94431],{"class":32,"line":2773},[30,94432,94066],{"class":74},[15,94434,94436],{"id":94435},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[20,94438,94440],{"className":30516,"code":94439,"language":30518,"meta":25,"style":25},"a=np.arange(1,5)\n#array([，2，3，4])\nnp.roll(a,2)#传正数向后调多少位，传负数向前调多少位\n#结果：\n#array([3, 4, 1, 2])\nnp.roll(a,-1)\n#结果：\n#array([2, 3, 4, 1])\n",[27,94441,94442,94458,94463,94475,94479,94484,94494,94498],{"__ignoreMap":25},[30,94443,94444,94446,94448,94450,94452,94454,94456],{"class":32,"line":33},[30,94445,558],{"class":321},[30,94447,367],{"class":317},[30,94449,93140],{"class":321},[30,94451,537],{"class":40},[30,94453,698],{"class":321},[30,94455,639],{"class":40},[30,94457,328],{"class":321},[30,94459,94460],{"class":32,"line":44},[30,94461,94462],{"class":379},"#array([，2，3，4])\n",[30,94464,94465,94468,94470,94472],{"class":32,"line":52},[30,94466,94467],{"class":321},"np.roll(a,",[30,94469,398],{"class":40},[30,94471,749],{"class":321},[30,94473,94474],{"class":379},"#传正数向后调多少位，传负数向前调多少位\n",[30,94476,94477],{"class":32,"line":60},[30,94478,93702],{"class":379},[30,94480,94481],{"class":32,"line":68},[30,94482,94483],{"class":379},"#array([3, 4, 1, 2])\n",[30,94485,94486,94488,94490,94492],{"class":32,"line":80},[30,94487,94467],{"class":321},[30,94489,852],{"class":317},[30,94491,537],{"class":40},[30,94493,328],{"class":321},[30,94495,94496],{"class":32,"line":88},[30,94497,93702],{"class":379},[30,94499,94500],{"class":32,"line":96},[30,94501,94502],{"class":379},"#array([2, 3, 4, 1])\n",[157,94504,94505],{},[160,94506],{"alt":25,"src":94507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[15,94509,94511],{"id":94510},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[157,94513,94514],{},"resize()重新调整数组的大小",[157,94516,94517],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[20,94519,94521],{"className":30516,"code":94520,"language":30518,"meta":25,"style":25},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[27,94522,94523,94528,94541],{"__ignoreMap":25},[30,94524,94525],{"class":32,"line":33},[30,94526,94527],{"class":379},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[30,94529,94530,94533,94535,94537,94539],{"class":32,"line":44},[30,94531,94532],{"class":321},"np.resize(aa,(",[30,94534,398],{"class":40},[30,94536,698],{"class":321},[30,94538,664],{"class":40},[30,94540,30635],{"class":321},[30,94542,94543,94545,94547,94549,94551,94553],{"class":32,"line":52},[30,94544,94532],{"class":321},[30,94546,398],{"class":40},[30,94548,698],{"class":321},[30,94550,740],{"class":40},[30,94552,82909],{"class":321},[30,94554,94555],{"class":379},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[15,94557,94559],{"id":94558},"_125-placeput函数","12.5 place()\u002Fput()函数",[157,94561,94562],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[157,94564,94565],{},[160,94566],{"alt":25,"src":94567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[15,94569,94571],{"id":94570},"_126-保存加载文件","12.6 保存加载文件",[157,94573,94574],{},"savetxt():将数据保存到txt文件中",[157,94576,94577],{},"loadtxt():从文件加载数据",[157,94579,94580],{},[160,94581],{"alt":25,"src":94582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[15,94584,94586],{"id":94585},"_127-genfromtxt函数","12.7 genfromtxt()函数",[157,94588,94589],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[15,94591,94593],{"id":94592},"_128-anyall函数","12.8 any()\u002Fall()函数",[157,94595,94596],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[157,94598,94599],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[157,94601,94602],{},[160,94603],{"alt":25,"src":94604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[15,94606,94608],{"id":94607},"_129-where语句","12.9 where语句",[157,94610,94611],{},"np.where(条件,x,y)",[157,94613,94614],{},"如果条件为True,对应值为x,否则对应值为y",[157,94616,94617],{},[160,94618],{"alt":25,"src":94619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[15,94621,94623],{"id":94622},"_1210-dot矩阵","12.10 dot()矩阵",[157,94625,94626],{},[160,94627],{"alt":25,"src":94628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[234,94630,94631],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":94633},[94634,94635,94636,94637,94638,94639,94640,94641,94642,94643],{"id":93996,"depth":44,"text":93997},{"id":94219,"depth":44,"text":94220},{"id":94435,"depth":44,"text":94436},{"id":94510,"depth":44,"text":94511},{"id":94558,"depth":44,"text":94559},{"id":94570,"depth":44,"text":94571},{"id":94585,"depth":44,"text":94586},{"id":94592,"depth":44,"text":94593},{"id":94607,"depth":44,"text":94608},{"id":94622,"depth":44,"text":94623},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93988,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94650,"title":94651,"body":94652,"description":242,"extension":243,"meta":95005,"navigation":245,"path":95006,"seo":95007,"stem":95008,"__hash__":95009},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94653,"toc":95003},[94654,94657,94660,94663,94666,94669,94734,94736,95000],[10,94655,94651],{"id":94656},"_13数组排序",[157,94658,94659],{},"排序主要用到的方法是np.sort和np.argsort",[157,94661,94662],{},"其中np.sort()对数组直接排序",[157,94664,94665],{},"而np.argsort()是返回排序后的原始索引",[157,94667,94668],{},"①一维数组",[20,94670,94672],{"className":30516,"code":94671,"language":30518,"meta":25,"style":25},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[27,94673,94674,94678,94718,94726],{"__ignoreMap":25},[30,94675,94676],{"class":32,"line":33},[30,94677,93243],{"class":379},[30,94679,94680,94682,94684,94686,94688,94690,94692,94694,94696,94698,94700,94702,94704,94706,94708,94710,94712,94714,94716],{"class":32,"line":44},[30,94681,558],{"class":321},[30,94683,367],{"class":317},[30,94685,93162],{"class":321},[30,94687,392],{"class":40},[30,94689,698],{"class":321},[30,94691,818],{"class":40},[30,94693,698],{"class":321},[30,94695,715],{"class":40},[30,94697,698],{"class":321},[30,94699,1095],{"class":40},[30,94701,698],{"class":321},[30,94703,599],{"class":40},[30,94705,698],{"class":321},[30,94707,1213],{"class":40},[30,94709,698],{"class":321},[30,94711,664],{"class":40},[30,94713,698],{"class":321},[30,94715,766],{"class":40},[30,94717,4839],{"class":321},[30,94719,94720,94723],{"class":32,"line":52},[30,94721,94722],{"class":321},"np.sort(a)",[30,94724,94725],{"class":379},"#升序排序\n",[30,94727,94728,94731],{"class":32,"line":60},[30,94729,94730],{"class":321},"np.argsort(a)",[30,94732,94733],{"class":379},"#按照元素大小来索引排序\n",[157,94735,93429],{},[20,94737,94739],{"className":30516,"code":94738,"language":30518,"meta":25,"style":25},"np.random.seed(0)#保证每次值一样\naa=np.random.randint(100,size=(4,6))\n#原数组：\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [83, 21, 36, 87, 70, 88],\n       [88, 12, 58, 65, 39, 87],\n       [46, 88, 81, 37, 25, 77]], dtype=int32)\n'''\nnp.sort(aa)#每行进行了排序\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#axis=0时\nnp.sort(aa,axis=0)\n'''\narray([[44, 12, 36, 37, 25,  9],\n       [46, 21, 58, 65, 39, 77],\n       [83, 47, 64, 67, 67, 87],\n       [88, 88, 81, 87, 70, 88]], dtype=int32)\n'''\n#axis=1时,为默认值\nnp.sort(aa,axis=1)\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#按最后一列排序\nb=aa[:,-1]\n#获取最后一列排好序的索引\nindex=np.argsort(b)\naa[index]\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [46, 88, 81, 37, 25, 77],\n       [88, 12, 58, 65, 39, 87],\n       [83, 21, 36, 87, 70, 88]], dtype=int32)\n'''\n",[27,94740,94741,94753,94779,94784,94788,94793,94798,94803,94808,94812,94820,94824,94829,94834,94839,94844,94848,94853,94866,94870,94875,94880,94885,94890,94894,94899,94911,94915,94919,94923,94927,94931,94935,94940,94955,94960,94969,94974,94978,94982,94987,94991,94996],{"__ignoreMap":25},[30,94742,94743,94746,94748,94750],{"class":32,"line":33},[30,94744,94745],{"class":321},"np.random.seed(",[30,94747,511],{"class":40},[30,94749,749],{"class":321},[30,94751,94752],{"class":379},"#保证每次值一样\n",[30,94754,94755,94757,94759,94761,94763,94765,94767,94769,94771,94773,94775,94777],{"class":32,"line":44},[30,94756,93444],{"class":321},[30,94758,367],{"class":317},[30,94760,93252],{"class":321},[30,94762,631],{"class":40},[30,94764,698],{"class":321},[30,94766,31634],{"class":5398},[30,94768,367],{"class":317},[30,94770,322],{"class":321},[30,94772,613],{"class":40},[30,94774,698],{"class":321},[30,94776,664],{"class":40},[30,94778,30635],{"class":321},[30,94780,94781],{"class":32,"line":52},[30,94782,94783],{"class":379},"#原数组：\n",[30,94785,94786],{"class":32,"line":60},[30,94787,94066],{"class":74},[30,94789,94790],{"class":32,"line":68},[30,94791,94792],{"class":74},"array([[44, 47, 64, 67, 67,  9],\n",[30,94794,94795],{"class":32,"line":80},[30,94796,94797],{"class":74},"       [83, 21, 36, 87, 70, 88],\n",[30,94799,94800],{"class":32,"line":88},[30,94801,94802],{"class":74},"       [88, 12, 58, 65, 39, 87],\n",[30,94804,94805],{"class":32,"line":96},[30,94806,94807],{"class":74},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[30,94809,94810],{"class":32,"line":104},[30,94811,94066],{"class":74},[30,94813,94814,94817],{"class":32,"line":112},[30,94815,94816],{"class":321},"np.sort(aa)",[30,94818,94819],{"class":379},"#每行进行了排序\n",[30,94821,94822],{"class":32,"line":123},[30,94823,94066],{"class":74},[30,94825,94826],{"class":32,"line":131},[30,94827,94828],{"class":74},"array([[ 9, 44, 47, 64, 67, 67],\n",[30,94830,94831],{"class":32,"line":142},[30,94832,94833],{"class":74},"       [21, 36, 70, 83, 87, 88],\n",[30,94835,94836],{"class":32,"line":1811},[30,94837,94838],{"class":74},"       [12, 39, 58, 65, 87, 88],\n",[30,94840,94841],{"class":32,"line":1825},[30,94842,94843],{"class":74},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[30,94845,94846],{"class":32,"line":1830},[30,94847,94066],{"class":74},[30,94849,94850],{"class":32,"line":1836},[30,94851,94852],{"class":379},"#axis=0时\n",[30,94854,94855,94858,94860,94862,94864],{"class":32,"line":1857},[30,94856,94857],{"class":321},"np.sort(aa,",[30,94859,47652],{"class":5398},[30,94861,367],{"class":317},[30,94863,511],{"class":40},[30,94865,328],{"class":321},[30,94867,94868],{"class":32,"line":1862},[30,94869,94066],{"class":74},[30,94871,94872],{"class":32,"line":1876},[30,94873,94874],{"class":74},"array([[44, 12, 36, 37, 25,  9],\n",[30,94876,94877],{"class":32,"line":1881},[30,94878,94879],{"class":74},"       [46, 21, 58, 65, 39, 77],\n",[30,94881,94882],{"class":32,"line":1910},[30,94883,94884],{"class":74},"       [83, 47, 64, 67, 67, 87],\n",[30,94886,94887],{"class":32,"line":1915},[30,94888,94889],{"class":74},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[30,94891,94892],{"class":32,"line":1932},[30,94893,94066],{"class":74},[30,94895,94896],{"class":32,"line":1937},[30,94897,94898],{"class":379},"#axis=1时,为默认值\n",[30,94900,94901,94903,94905,94907,94909],{"class":32,"line":1942},[30,94902,94857],{"class":321},[30,94904,47652],{"class":5398},[30,94906,367],{"class":317},[30,94908,537],{"class":40},[30,94910,328],{"class":321},[30,94912,94913],{"class":32,"line":1947},[30,94914,94066],{"class":74},[30,94916,94917],{"class":32,"line":1961},[30,94918,94828],{"class":74},[30,94920,94921],{"class":32,"line":1966},[30,94922,94833],{"class":74},[30,94924,94925],{"class":32,"line":2759},[30,94926,94838],{"class":74},[30,94928,94929],{"class":32,"line":2773},[30,94930,94843],{"class":74},[30,94932,94933],{"class":32,"line":2781},[30,94934,94066],{"class":74},[30,94936,94937],{"class":32,"line":2786},[30,94938,94939],{"class":379},"#按最后一列排序\n",[30,94941,94942,94944,94946,94949,94951,94953],{"class":32,"line":2792},[30,94943,583],{"class":321},[30,94945,367],{"class":317},[30,94947,94948],{"class":321},"aa[:,",[30,94950,852],{"class":317},[30,94952,537],{"class":40},[30,94954,33384],{"class":321},[30,94956,94957],{"class":32,"line":2798},[30,94958,94959],{"class":379},"#获取最后一列排好序的索引\n",[30,94961,94962,94964,94966],{"class":32,"line":2803},[30,94963,74196],{"class":321},[30,94965,367],{"class":317},[30,94967,94968],{"class":321},"np.argsort(b)\n",[30,94970,94971],{"class":32,"line":8130},[30,94972,94973],{"class":321},"aa[index]\n",[30,94975,94976],{"class":32,"line":8154},[30,94977,94066],{"class":74},[30,94979,94980],{"class":32,"line":8159},[30,94981,94792],{"class":74},[30,94983,94984],{"class":32,"line":8165},[30,94985,94986],{"class":74},"       [46, 88, 81, 37, 25, 77],\n",[30,94988,94989],{"class":32,"line":8192},[30,94990,94802],{"class":74},[30,94992,94993],{"class":32,"line":8197},[30,94994,94995],{"class":74},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[30,94997,94998],{"class":32,"line":8203},[30,94999,94066],{"class":74},[234,95001,95002],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":44,"depth":44,"links":95004},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94651,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95011,"title":95012,"body":95013,"description":242,"extension":243,"meta":95043,"navigation":245,"path":95044,"seo":95045,"stem":95046,"__hash__":95047},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95014,"toc":95041},[95015,95018,95021,95024,95027,95030,95033,95036],[10,95016,95012],{"id":95017},"_14广播机制",[157,95019,95020],{},"广播的规则：",[157,95022,95023],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[157,95025,95026],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[157,95028,95029],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[157,95031,95032],{},"3.如果没有维度形状为1，则会引发异常",[157,95034,95035],{},"也就是只有维度或者个数为1才可以进行广播操作",[157,95037,95038],{},[160,95039],{"alt":25,"src":95040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":25,"searchDepth":44,"depth":44,"links":95042},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95012,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95049,"title":95050,"body":95051,"description":242,"extension":243,"meta":95149,"navigation":245,"path":95150,"seo":95151,"stem":95152,"__hash__":95153},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95052,"toc":95147},[95053,95056,95059,95144],[10,95054,95050],{"id":95055},"_15比较掩码",[157,95057,95058],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[20,95060,95062],{"className":30516,"code":95061,"language":30518,"meta":25,"style":25},"a=np.array([[1,2,3],[11,12,13],[21,22,23]])\na\u003C20#结果是一个由True,False组成的数组\na[a\u003C20]#小于20的元素会存到这个数组中\n#结果：\n#array([ 1,  2,  3, 11, 12, 13])\n",[27,95063,95064,95110,95121,95135,95139],{"__ignoreMap":25},[30,95065,95066,95068,95070,95073,95075,95077,95079,95081,95083,95085,95087,95089,95091,95093,95095,95097,95099,95101,95103,95105,95107],{"class":32,"line":33},[30,95067,558],{"class":321},[30,95069,367],{"class":317},[30,95071,95072],{"class":321},"np.array([[",[30,95074,537],{"class":40},[30,95076,698],{"class":321},[30,95078,398],{"class":40},[30,95080,698],{"class":321},[30,95082,392],{"class":40},[30,95084,48168],{"class":321},[30,95086,792],{"class":40},[30,95088,698],{"class":321},[30,95090,818],{"class":40},[30,95092,698],{"class":321},[30,95094,843],{"class":40},[30,95096,48168],{"class":321},[30,95098,1045],{"class":40},[30,95100,698],{"class":321},[30,95102,1070],{"class":40},[30,95104,698],{"class":321},[30,95106,1095],{"class":40},[30,95108,95109],{"class":321},"]])\n",[30,95111,95112,95114,95116,95118],{"class":32,"line":44},[30,95113,558],{"class":321},[30,95115,1230],{"class":317},[30,95117,1020],{"class":40},[30,95119,95120],{"class":379},"#结果是一个由True,False组成的数组\n",[30,95122,95123,95126,95128,95130,95132],{"class":32,"line":52},[30,95124,95125],{"class":321},"a[a",[30,95127,1230],{"class":317},[30,95129,1020],{"class":40},[30,95131,1260],{"class":321},[30,95133,95134],{"class":379},"#小于20的元素会存到这个数组中\n",[30,95136,95137],{"class":32,"line":60},[30,95138,93702],{"class":379},[30,95140,95141],{"class":32,"line":68},[30,95142,95143],{"class":379},"#array([ 1,  2,  3, 11, 12, 13])\n",[234,95145,95146],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":95148},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95050,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95155,"title":95156,"body":95157,"description":242,"extension":243,"meta":95249,"navigation":245,"path":95250,"seo":95251,"stem":95252,"__hash__":95253},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95158,"toc":95247},[95159,95162,95165,95168,95171,95174,95239,95244],[10,95160,95156],{"id":95161},"_16魔法命令time",[157,95163,95164],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[157,95166,95167],{},"%:行模式",[157,95169,95170],{},"%%:单元格模式",[157,95172,95173],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[20,95175,95177],{"className":30516,"code":95176,"language":30518,"meta":25,"style":25},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[27,95178,95179,95184,95191,95196,95205,95218,95222,95230],{"__ignoreMap":25},[30,95180,95181],{"class":32,"line":33},[30,95182,95183],{"class":379},"#程序执行时间\n",[30,95185,95186,95188],{"class":32,"line":44},[30,95187,30530],{"class":317},[30,95189,95190],{"class":321}," time \n",[30,95192,95193],{"class":32,"line":52},[30,95194,95195],{"class":379},"#获取时间\n",[30,95197,95198,95201,95203],{"class":32,"line":60},[30,95199,95200],{"class":321},"start",[30,95202,367],{"class":317},[30,95204,32556],{"class":321},[30,95206,95207,95210,95213,95215],{"class":32,"line":68},[30,95208,95209],{"class":321},"time.sleep(",[30,95211,95212],{"class":40},"0.4",[30,95214,749],{"class":321},[30,95216,95217],{"class":379},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[30,95219,95220],{"class":32,"line":80},[30,95221,95195],{"class":379},[30,95223,95224,95226,95228],{"class":32,"line":88},[30,95225,45939],{"class":321},[30,95227,367],{"class":317},[30,95229,32556],{"class":321},[30,95231,95232,95234,95236],{"class":32,"line":96},[30,95233,45939],{"class":321},[30,95235,852],{"class":317},[30,95237,95238],{"class":321},"start\n",[157,95240,95241],{},[160,95242],{"alt":25,"src":95243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[234,95245,95246],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":95248},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95156,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95255,"title":95256,"body":95257,"description":242,"extension":243,"meta":95292,"navigation":245,"path":95293,"seo":95294,"stem":95295,"__hash__":95296},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95258,"toc":95290},[95259,95262,95265,95268,95271,95274,95277,95280,95285],[10,95260,95256],{"id":95261},"_17魔法命令timeit",[157,95263,95264],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[157,95266,95267],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[157,95269,95270],{},"单元格模式：",[157,95272,95273],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[157,95275,95276],{},"初始化语句执行次数由轮数来决定",[157,95278,95279],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[157,95281,95282],{},[160,95283],{"alt":25,"src":95284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[157,95286,95287],{},[160,95288],{"alt":25,"src":95289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":25,"searchDepth":44,"depth":44,"links":95291},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95256,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95298,"title":95299,"body":95300,"description":242,"extension":243,"meta":95318,"navigation":245,"path":95319,"seo":95320,"stem":95321,"__hash__":95322},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95301,"toc":95316},[95302,95305,95308,95311],[10,95303,95299],{"id":95304},"_18魔法命令writefile和run",[157,95306,95307],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[157,95309,95310],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[157,95312,95313],{},[160,95314],{"alt":25,"src":95315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":25,"searchDepth":44,"depth":44,"links":95317},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95299,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95324,"title":95325,"body":95326,"description":242,"extension":243,"meta":95379,"navigation":245,"path":95380,"seo":95381,"stem":95382,"__hash__":95383},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95327,"toc":95377},[95328,95331,95334,95336,95339,95342,95347,95350,95353,95356,95359,95362,95365,95368,95371,95374],[10,95329,95325],{"id":95330},"_19魔法命令memit",[157,95332,95333],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[157,95335,24780],{},[157,95337,95338],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[157,95340,95341],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[157,95343,95344],{},[160,95345],{"alt":25,"src":95346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[157,95348,95349],{},"补充：",[157,95351,95352],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[157,95354,95355],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[157,95357,95358],{},"解决方法：",[157,95360,95361],{},"1.cmd",[157,95363,95364],{},"2.依次输入以下代码：",[157,95366,95367],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[157,95369,95370],{},"pip install --upgrade ipython",[157,95372,95373],{},"#升级 memory_profiler 和 setuptools",[157,95375,95376],{},"pip install --upgrade memory_profiler setuptools",{"title":25,"searchDepth":44,"depth":44,"links":95378},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95325,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95385,"title":95386,"body":95387,"description":242,"extension":243,"meta":97033,"navigation":245,"path":97034,"seo":97035,"stem":97036,"__hash__":97037},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95388,"toc":97003},[95389,95392,95396,95400,95461,95464,95469,95473,95478,95483,95488,95493,95496,95501,95505,95509,95542,95545,95548,95551,95603,95606,95642,95645,95687,95691,95712,95714,95751,95753,95758,95760,95765,95769,95772,95800,95804,95808,95861,95865,95957,95961,95965,95968,95973,95977,96002,96007,96011,96014,96017,96020,96023,96026,96029,96032,96044,96048,96052,96055,96087,96090,96113,96116,96142,96145,96171,96174,96208,96211,96273,96277,96280,96284,96287,96313,96316,96319,96324,96327,96396,96398,96403,96464,96467,96478,96484,96489,96493,96496,96509,96513,96528,96530,96553,96555,96581,96584,96587,96590,96638,96640,96645,96649,96653,96680,96684,96711,96714,96719,96724,96814,96818,96876,96881,96884,96887,96929,96933,96989,96994,96997,97000],[10,95390,95386],{"id":95391},"_2创建数组",[15,95393,95395],{"id":95394},"_21-array函数创建数组","2.1 array()函数创建数组",[287,95397,95399],{"id":95398},"_221-函数语句","2.2.1 函数语句",[20,95401,95403],{"className":30516,"code":95402,"language":30518,"meta":25,"style":25},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[27,95404,95405],{"__ignoreMap":25},[30,95406,95407,95410,95413,95415,95417,95419,95421,95423,95426,95428,95431,95433,95436,95438,95440,95442,95445,95447,95450,95452,95455,95457,95459],{"class":32,"line":33},[30,95408,95409],{"class":321},"numpy.array(",[30,95411,95412],{"class":40},"object",[30,95414,12617],{"class":321},[30,95416,93638],{"class":5398},[30,95418,13746],{"class":317},[30,95420,39071],{"class":40},[30,95422,12617],{"class":321},[30,95424,95425],{"class":5398},"copy",[30,95427,13746],{"class":317},[30,95429,95430],{"class":40}," True",[30,95432,12617],{"class":321},[30,95434,95435],{"class":5398},"order",[30,95437,13746],{"class":317},[30,95439,39071],{"class":40},[30,95441,12617],{"class":321},[30,95443,95444],{"class":5398},"subok",[30,95446,13746],{"class":317},[30,95448,95449],{"class":40}," False",[30,95451,12617],{"class":321},[30,95453,95454],{"class":5398},"ndmin",[30,95456,13746],{"class":317},[30,95458,4275],{"class":40},[30,95460,328],{"class":321},[157,95462,95463],{},"参数：",[157,95465,95466],{},[160,95467],{"alt":25,"src":95468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[287,95470,95472],{"id":95471},"_222-实例","2.2.2 实例",[157,95474,95475],{},[160,95476],{"alt":25,"src":95477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[157,95479,95480],{},[160,95481],{"alt":25,"src":95482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[157,95484,95485],{},[160,95486],{"alt":25,"src":95487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[157,95489,95490],{},[160,95491],{"alt":25,"src":95492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[157,95494,95495],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[157,95497,95498],{},[160,95499],{"alt":25,"src":95500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[15,95502,95504],{"id":95503},"_22-随机数创建数组","2.2 随机数创建数组",[287,95506,95508],{"id":95507},"_221-random语句","2.2.1 random语句",[20,95510,95512],{"className":30516,"code":95511,"language":30518,"meta":25,"style":25},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[27,95513,95514,95519,95524,95532,95537],{"__ignoreMap":25},[30,95515,95516],{"class":32,"line":33},[30,95517,95518],{"class":379},"#random.random()\n",[30,95520,95521],{"class":32,"line":44},[30,95522,95523],{"class":379},"#确定随机种子,就是每次运行结果是相同的\n",[30,95525,95526,95528,95530],{"class":32,"line":52},[30,95527,94745],{"class":321},[30,95529,511],{"class":40},[30,95531,328],{"class":321},[30,95533,95534],{"class":32,"line":60},[30,95535,95536],{"class":321},"np.random.random()\n",[30,95538,95539],{"class":32,"line":68},[30,95540,95541],{"class":379},"#生成一个随机的数目\n",[157,95543,95544],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[157,95546,95547],{},"可以指定数组形状 size",[157,95549,95550],{},"①生成一维数组",[20,95552,95554],{"className":30516,"code":95553,"language":30518,"meta":25,"style":25},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[27,95555,95556,95561,95574,95579,95595],{"__ignoreMap":25},[30,95557,95558],{"class":32,"line":33},[30,95559,95560],{"class":379},"#random.random(size())\n",[30,95562,95563,95566,95568,95570,95572],{"class":32,"line":44},[30,95564,95565],{"class":321},"np.random.random(",[30,95567,31634],{"class":5398},[30,95569,367],{"class":317},[30,95571,639],{"class":40},[30,95573,328],{"class":321},[30,95575,95576],{"class":32,"line":52},[30,95577,95578],{"class":379},"#生成一位的五个元素\n",[30,95580,95581,95583,95585,95587,95589,95591,95593],{"class":32,"line":60},[30,95582,558],{"class":321},[30,95584,367],{"class":317},[30,95586,95565],{"class":321},[30,95588,31634],{"class":5398},[30,95590,367],{"class":317},[30,95592,613],{"class":40},[30,95594,328],{"class":321},[30,95596,95597,95600],{"class":32,"line":68},[30,95598,95599],{"class":321},"a.shape ",[30,95601,95602],{"class":379},"#输出数组形状\n",[157,95604,95605],{},"②生成二维数组",[20,95607,95609],{"className":30516,"code":95608,"language":30518,"meta":25,"style":25},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[27,95610,95611,95615,95637],{"__ignoreMap":25},[30,95612,95613],{"class":32,"line":33},[30,95614,93439],{"class":379},[30,95616,95617,95619,95621,95623,95625,95627,95629,95631,95633,95635],{"class":32,"line":44},[30,95618,93444],{"class":321},[30,95620,367],{"class":317},[30,95622,95565],{"class":321},[30,95624,31634],{"class":5398},[30,95626,367],{"class":317},[30,95628,322],{"class":321},[30,95630,613],{"class":40},[30,95632,698],{"class":321},[30,95634,639],{"class":40},[30,95636,30635],{"class":321},[30,95638,95639],{"class":32,"line":52},[30,95640,95641],{"class":379},"#生成四行五列的数组\n",[157,95643,95644],{},"③生成三维数组",[20,95646,95648],{"className":30516,"code":95647,"language":30518,"meta":25,"style":25},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[27,95649,95650,95655,95682],{"__ignoreMap":25},[30,95651,95652],{"class":32,"line":33},[30,95653,95654],{"class":379},"#三维数组\n",[30,95656,95657,95660,95662,95664,95666,95668,95670,95672,95674,95676,95678,95680],{"class":32,"line":44},[30,95658,95659],{"class":321},"aaa",[30,95661,367],{"class":317},[30,95663,95565],{"class":321},[30,95665,31634],{"class":5398},[30,95667,367],{"class":317},[30,95669,322],{"class":321},[30,95671,398],{"class":40},[30,95673,698],{"class":321},[30,95675,392],{"class":40},[30,95677,698],{"class":321},[30,95679,613],{"class":40},[30,95681,30635],{"class":321},[30,95683,95684],{"class":32,"line":52},[30,95685,95686],{"class":321},"aaa.shape\n",[287,95688,95690],{"id":95689},"_222-randint语句","2.2.2 randint语句",[20,95692,95694],{"className":30516,"code":95693,"language":30518,"meta":25,"style":25},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[27,95695,95696,95701],{"__ignoreMap":25},[30,95697,95698],{"class":32,"line":33},[30,95699,95700],{"class":379},"#生成随机的整数 random.randint(low,high,size)\n",[30,95702,95703,95705,95707,95709],{"class":32,"line":44},[30,95704,93252],{"class":321},[30,95706,639],{"class":40},[30,95708,13896],{"class":321},[30,95710,95711],{"class":379},"#0~5中的随机一个数\n",[157,95713,95550],{},[20,95715,95717],{"className":30516,"code":95716,"language":30518,"meta":25,"style":25},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[27,95718,95719,95724,95746],{"__ignoreMap":25},[30,95720,95721],{"class":32,"line":33},[30,95722,95723],{"class":379},"#一维\n",[30,95725,95726,95728,95730,95732,95734,95736,95738,95740,95742,95744],{"class":32,"line":44},[30,95727,93252],{"class":321},[30,95729,537],{"class":40},[30,95731,698],{"class":321},[30,95733,792],{"class":40},[30,95735,698],{"class":321},[30,95737,31634],{"class":5398},[30,95739,367],{"class":317},[30,95741,322],{"class":321},[30,95743,766],{"class":40},[30,95745,30635],{"class":321},[30,95747,95748],{"class":32,"line":52},[30,95749,95750],{"class":379},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[157,95752,95605],{},[157,95754,95755],{},[160,95756],{"alt":25,"src":95757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[157,95759,95644],{},[157,95761,95762],{},[160,95763],{"alt":25,"src":95764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[287,95766,95768],{"id":95767},"_222-rand语句","2.2.2 rand语句",[157,95770,95771],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[20,95773,95775],{"className":30516,"code":95774,"language":30518,"meta":25,"style":25},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[27,95776,95777,95790,95795],{"__ignoreMap":25},[30,95778,95779,95782,95784,95786,95788],{"class":32,"line":33},[30,95780,95781],{"class":321},"np.random.rand(",[30,95783,631],{"class":40},[30,95785,698],{"class":321},[30,95787,766],{"class":40},[30,95789,328],{"class":321},[30,95791,95792],{"class":32,"line":44},[30,95793,95794],{"class":379},"#第一个参数100：行数，表示有100个样本\n",[30,95796,95797],{"class":32,"line":52},[30,95798,95799],{"class":379},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[15,95801,95803],{"id":95802},"_23-arange创建数组","2.3 arange()创建数组",[287,95805,95807],{"id":95806},"_231-函数语句","2.3.1 函数语句",[20,95809,95811],{"className":30516,"code":95810,"language":30518,"meta":25,"style":25},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[27,95812,95813,95827,95832,95837,95842,95847,95852,95857],{"__ignoreMap":25},[30,95814,95815,95818,95820,95822,95825],{"class":32,"line":33},[30,95816,95817],{"class":321},"numpy.arange([start,] stop[, step], ",[30,95819,93638],{"class":5398},[30,95821,367],{"class":317},[30,95823,95824],{"class":40},"None",[30,95826,328],{"class":321},[30,95828,95829],{"class":32,"line":44},[30,95830,95831],{"class":379},"#参数\n",[30,95833,95834],{"class":32,"line":52},[30,95835,95836],{"class":74},"\"\"\"\n",[30,95838,95839],{"class":32,"line":60},[30,95840,95841],{"class":74},"start:起始值，可选，默认从 0 开始。\n",[30,95843,95844],{"class":32,"line":68},[30,95845,95846],{"class":74},"stop:结束值（不包含该值）。\n",[30,95848,95849],{"class":32,"line":80},[30,95850,95851],{"class":74},"step:步长，可选，默认是 1。可以为浮点数。\n",[30,95853,95854],{"class":32,"line":88},[30,95855,95856],{"class":74},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[30,95858,95859],{"class":32,"line":96},[30,95860,95836],{"class":74},[287,95862,95864],{"id":95863},"_232-实例","2.3.2 实例",[20,95866,95868],{"className":30516,"code":95867,"language":30518,"meta":25,"style":25},"#创建一维数组\nnp.arange(1,21,1,dtype=int)\n#输出结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n#创建二维数组\nnp.array([np.arange(1,4),np.arange(4,7)])\n#结果：\n\"\"\"\narray([[1, 2, 3],\n       [4, 5, 6]])\n\"\"\"\n",[27,95869,95870,95874,95898,95903,95908,95912,95935,95939,95943,95948,95953],{"__ignoreMap":25},[30,95871,95872],{"class":32,"line":33},[30,95873,93243],{"class":379},[30,95875,95876,95878,95880,95882,95884,95886,95888,95890,95892,95894,95896],{"class":32,"line":44},[30,95877,93140],{"class":321},[30,95879,537],{"class":40},[30,95881,698],{"class":321},[30,95883,1045],{"class":40},[30,95885,698],{"class":321},[30,95887,537],{"class":40},[30,95889,698],{"class":321},[30,95891,93638],{"class":5398},[30,95893,367],{"class":317},[30,95895,325],{"class":40},[30,95897,328],{"class":321},[30,95899,95900],{"class":32,"line":52},[30,95901,95902],{"class":379},"#输出结果：\n",[30,95904,95905],{"class":32,"line":60},[30,95906,95907],{"class":379},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[30,95909,95910],{"class":32,"line":68},[30,95911,94085],{"class":379},[30,95913,95914,95917,95919,95921,95923,95926,95928,95930,95932],{"class":32,"line":80},[30,95915,95916],{"class":321},"np.array([np.arange(",[30,95918,537],{"class":40},[30,95920,698],{"class":321},[30,95922,613],{"class":40},[30,95924,95925],{"class":321},"),np.arange(",[30,95927,613],{"class":40},[30,95929,698],{"class":321},[30,95931,689],{"class":40},[30,95933,95934],{"class":321},")])\n",[30,95936,95937],{"class":32,"line":88},[30,95938,93702],{"class":379},[30,95940,95941],{"class":32,"line":96},[30,95942,95836],{"class":74},[30,95944,95945],{"class":32,"line":104},[30,95946,95947],{"class":74},"array([[1, 2, 3],\n",[30,95949,95950],{"class":32,"line":112},[30,95951,95952],{"class":74},"       [4, 5, 6]])\n",[30,95954,95955],{"class":32,"line":123},[30,95956,95836],{"class":74},[15,95958,95960],{"id":95959},"_24-生态分布","2.4 生态分布",[287,95962,95964],{"id":95963},"_241-标准正态分布","2.4.1 标准正态分布",[157,95966,95967],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[157,95969,95970],{},[160,95971],{"alt":25,"src":95972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[287,95974,95976],{"id":95975},"_242-常规正态分布","2.4.2 常规正态分布",[20,95978,95980],{"className":30516,"code":95979,"language":30518,"meta":25,"style":25},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[27,95981,95982,95987,95992,95997],{"__ignoreMap":25},[30,95983,95984],{"class":32,"line":33},[30,95985,95986],{"class":321},"random.normal(loc,scale,size)也可以生成正态分布\n",[30,95988,95989],{"class":32,"line":44},[30,95990,95991],{"class":379},"#loc:期望\n",[30,95993,95994],{"class":32,"line":52},[30,95995,95996],{"class":379},"#scale:方差\n",[30,95998,95999],{"class":32,"line":60},[30,96000,96001],{"class":379},"#size:用于确定是几维的数列\n",[157,96003,96004],{},[160,96005],{"alt":25,"src":96006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[15,96008,96010],{"id":96009},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[157,96012,96013],{},"ndim:秩，维度个数",[157,96015,96016],{},"size:数组元素的个数",[157,96018,96019],{},"shape:数组的形状",[157,96021,96022],{},"dtype:数组元素的类型",[157,96024,96025],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[157,96027,96028],{},"他们都是属性，通过数组.属性的形式来确定",[157,96030,96031],{},"如果需要输出多个可以通过以下方式：",[20,96033,96035],{"className":30516,"code":96034,"language":30518,"meta":25,"style":25},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[27,96036,96037],{"__ignoreMap":25},[30,96038,96039,96041],{"class":32,"line":33},[30,96040,30553],{"class":40},[30,96042,96043],{"class":321},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[15,96045,96047],{"id":96046},"_26-其他方式创建数组","2.6 其他方式创建数组",[287,96049,96051],{"id":96050},"_261-zeros创建数组","2.6.1 zeros()创建数组",[157,96053,96054],{},"①创建一维数组",[20,96056,96058],{"className":30516,"code":96057,"language":30518,"meta":25,"style":25},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[27,96059,96060,96069,96073,96078,96083],{"__ignoreMap":25},[30,96061,96062,96065,96067],{"class":32,"line":33},[30,96063,96064],{"class":321},"np.zeros(",[30,96066,766],{"class":40},[30,96068,328],{"class":321},[30,96070,96071],{"class":32,"line":44},[30,96072,95836],{"class":74},[30,96074,96075],{"class":32,"line":52},[30,96076,96077],{"class":74},"输出结果：\n",[30,96079,96080],{"class":32,"line":60},[30,96081,96082],{"class":74},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[30,96084,96085],{"class":32,"line":68},[30,96086,95836],{"class":74},[157,96088,96089],{},"上方代码等价于：",[20,96091,96093],{"className":30516,"code":96092,"language":30518,"meta":25,"style":25},"np.zeros(shape=(10))#创建10个元素的0数组\n",[27,96094,96095],{"__ignoreMap":25},[30,96096,96097,96099,96102,96104,96106,96108,96110],{"class":32,"line":33},[30,96098,96064],{"class":321},[30,96100,96101],{"class":5398},"shape",[30,96103,367],{"class":317},[30,96105,322],{"class":321},[30,96107,766],{"class":40},[30,96109,82909],{"class":321},[30,96111,96112],{"class":379},"#创建10个元素的0数组\n",[157,96114,96115],{},"也可以指定类型",[20,96117,96119],{"className":30516,"code":96118,"language":30518,"meta":25,"style":25},"#指定类型\nnp.zeros(5,dtype=int)\n",[27,96120,96121,96126],{"__ignoreMap":25},[30,96122,96123],{"class":32,"line":33},[30,96124,96125],{"class":379},"#指定类型\n",[30,96127,96128,96130,96132,96134,96136,96138,96140],{"class":32,"line":44},[30,96129,96064],{"class":321},[30,96131,639],{"class":40},[30,96133,698],{"class":321},[30,96135,93638],{"class":5398},[30,96137,367],{"class":317},[30,96139,325],{"class":40},[30,96141,328],{"class":321},[157,96143,96144],{},"②创建二维数组",[20,96146,96148],{"className":30516,"code":96147,"language":30518,"meta":25,"style":25},"np.zeros((3,4),dtype=int)\n",[27,96149,96150],{"__ignoreMap":25},[30,96151,96152,96155,96157,96159,96161,96163,96165,96167,96169],{"class":32,"line":33},[30,96153,96154],{"class":321},"np.zeros((",[30,96156,392],{"class":40},[30,96158,698],{"class":321},[30,96160,613],{"class":40},[30,96162,42394],{"class":321},[30,96164,93638],{"class":5398},[30,96166,367],{"class":317},[30,96168,325],{"class":40},[30,96170,328],{"class":321},[157,96172,96173],{},"③创建三维数组",[20,96175,96177],{"className":30516,"code":96176,"language":30518,"meta":25,"style":25},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[27,96178,96179,96184],{"__ignoreMap":25},[30,96180,96181],{"class":32,"line":33},[30,96182,96183],{"class":379},"#创建三维数组\n",[30,96185,96186,96188,96190,96192,96194,96196,96198,96200,96202,96204,96206],{"class":32,"line":44},[30,96187,96154],{"class":321},[30,96189,392],{"class":40},[30,96191,698],{"class":321},[30,96193,613],{"class":40},[30,96195,698],{"class":321},[30,96197,639],{"class":40},[30,96199,42394],{"class":321},[30,96201,93638],{"class":5398},[30,96203,367],{"class":317},[30,96205,325],{"class":40},[30,96207,328],{"class":321},[157,96209,96210],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[20,96212,96214],{"className":30516,"code":96213,"language":30518,"meta":25,"style":25},"#使用zeros_like将创建的一维数组变成全0的数组\na=np.arange(4)#这个得到的结果：一维数组0，1，2，3\nnp.zeros_like(a)\n#使用zeros_like将创建的二维数组变成全0的数组\naa=np.random.random(size=(4,5))\nnp.zeros_like(aa)\n",[27,96215,96216,96221,96236,96241,96246,96268],{"__ignoreMap":25},[30,96217,96218],{"class":32,"line":33},[30,96219,96220],{"class":379},"#使用zeros_like将创建的一维数组变成全0的数组\n",[30,96222,96223,96225,96227,96229,96231,96233],{"class":32,"line":44},[30,96224,558],{"class":321},[30,96226,367],{"class":317},[30,96228,93140],{"class":321},[30,96230,613],{"class":40},[30,96232,749],{"class":321},[30,96234,96235],{"class":379},"#这个得到的结果：一维数组0，1，2，3\n",[30,96237,96238],{"class":32,"line":52},[30,96239,96240],{"class":321},"np.zeros_like(a)\n",[30,96242,96243],{"class":32,"line":60},[30,96244,96245],{"class":379},"#使用zeros_like将创建的二维数组变成全0的数组\n",[30,96247,96248,96250,96252,96254,96256,96258,96260,96262,96264,96266],{"class":32,"line":68},[30,96249,93444],{"class":321},[30,96251,367],{"class":317},[30,96253,95565],{"class":321},[30,96255,31634],{"class":5398},[30,96257,367],{"class":317},[30,96259,322],{"class":321},[30,96261,613],{"class":40},[30,96263,698],{"class":321},[30,96265,639],{"class":40},[30,96267,30635],{"class":321},[30,96269,96270],{"class":32,"line":80},[30,96271,96272],{"class":321},"np.zeros_like(aa)\n",[287,96274,96276],{"id":96275},"_262-ones创建数组","2.6.2 ones()创建数组",[157,96278,96279],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[287,96281,96283],{"id":96282},"_263-empty创建数组","2.6.3 empty()创建数组",[157,96285,96286],{},"①empty()用法",[20,96288,96290],{"className":30516,"code":96289,"language":30518,"meta":25,"style":25},"numpy.empty(shape,dtype=float,order='c')\n",[27,96291,96292],{"__ignoreMap":25},[30,96293,96294,96297,96299,96301,96303,96305,96307,96309,96311],{"class":32,"line":33},[30,96295,96296],{"class":321},"numpy.empty(shape,",[30,96298,93638],{"class":5398},[30,96300,367],{"class":317},[30,96302,361],{"class":40},[30,96304,698],{"class":321},[30,96306,95435],{"class":5398},[30,96308,367],{"class":317},[30,96310,76166],{"class":74},[30,96312,328],{"class":321},[157,96314,96315],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[157,96317,96318],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[157,96320,96321],{},[160,96322],{"alt":25,"src":96323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[157,96325,96326],{},"②empty()用法",[20,96328,96330],{"className":30516,"code":96329,"language":30518,"meta":25,"style":25},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[27,96331,96332,96353,96365,96386,96391],{"__ignoreMap":25},[30,96333,96334,96336,96338,96341,96343,96345,96347,96349,96351],{"class":32,"line":33},[30,96335,1165],{"class":321},[30,96337,367],{"class":317},[30,96339,96340],{"class":321},"np.empty(",[30,96342,766],{"class":40},[30,96344,698],{"class":321},[30,96346,93638],{"class":5398},[30,96348,367],{"class":317},[30,96350,325],{"class":40},[30,96352,328],{"class":321},[30,96354,96355,96357,96359,96361,96363],{"class":32,"line":44},[30,96356,1140],{"class":321},[30,96358,367],{"class":317},[30,96360,93140],{"class":321},[30,96362,639],{"class":40},[30,96364,328],{"class":321},[30,96366,96367,96370,96372,96375,96377,96379,96382,96384],{"class":32,"line":52},[30,96368,96369],{"class":321},"np.add(",[30,96371,398],{"class":40},[30,96373,96374],{"class":321},",x,",[30,96376,93192],{"class":5398},[30,96378,367],{"class":317},[30,96380,96381],{"class":321},"y[:",[30,96383,639],{"class":40},[30,96385,4839],{"class":321},[30,96387,96388],{"class":32,"line":60},[30,96389,96390],{"class":379},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[30,96392,96393],{"class":32,"line":68},[30,96394,96395],{"class":321},"y\n",[157,96397,11696],{},[157,96399,96400],{},[160,96401],{"alt":25,"src":96402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[20,96404,96406],{"className":30516,"code":96405,"language":30518,"meta":25,"style":25},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[27,96407,96408,96424,96444,96459],{"__ignoreMap":25},[30,96409,96410,96412,96414,96416,96418,96420,96422],{"class":32,"line":33},[30,96411,1140],{"class":321},[30,96413,367],{"class":317},[30,96415,93140],{"class":321},[30,96417,537],{"class":40},[30,96419,698],{"class":321},[30,96421,664],{"class":40},[30,96423,328],{"class":321},[30,96425,96426,96428,96430,96432,96434,96436,96438,96440,96442],{"class":32,"line":44},[30,96427,1165],{"class":321},[30,96429,367],{"class":317},[30,96431,96340],{"class":321},[30,96433,639],{"class":40},[30,96435,698],{"class":321},[30,96437,93638],{"class":5398},[30,96439,367],{"class":317},[30,96441,325],{"class":40},[30,96443,328],{"class":321},[30,96445,96446,96449,96451,96453,96455,96457],{"class":32,"line":52},[30,96447,96448],{"class":321},"np.add(x,",[30,96450,398],{"class":40},[30,96452,698],{"class":321},[30,96454,93192],{"class":5398},[30,96456,367],{"class":317},[30,96458,93587],{"class":321},[30,96460,96461],{"class":32,"line":60},[30,96462,96463],{"class":379},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[157,96465,96466],{},"③empty_like()",[157,96468,96469],{},[469,96470,96471,96472,96477],{},"创建一个",[469,96473,96474],{},[469,96475,96476],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[157,96479,96480,96483],{},[27,96481,96482],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[157,96485,96486],{},[160,96487],{"alt":25,"src":96488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[287,96490,96492],{"id":96491},"_264-用法","2.6.4 ？？用法",[157,96494,96495],{},"当想查看一个函数的参数时，可以通过？？来实现",[20,96497,96499],{"className":30516,"code":96498,"language":30518,"meta":25,"style":25},"np.full??\n",[27,96500,96501],{"__ignoreMap":25},[30,96502,96503,96506],{"class":32,"line":33},[30,96504,96505],{"class":321},"np.full",[30,96507,96508],{"class":77541},"??\n",[287,96510,96512],{"id":96511},"_265-full创建数组","2.6.5 full()创建数组",[20,96514,96516],{"className":30516,"code":96515,"language":30518,"meta":25,"style":25},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[27,96517,96518,96523],{"__ignoreMap":25},[30,96519,96520],{"class":32,"line":33},[30,96521,96522],{"class":321},"full(shape,fill_value)\n",[30,96524,96525],{"class":32,"line":44},[30,96526,96527],{"class":321},"创建全为某个指定值的数组\n",[157,96529,94668],{},[20,96531,96533],{"className":30516,"code":96532,"language":30518,"meta":25,"style":25},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[27,96534,96535,96540],{"__ignoreMap":25},[30,96536,96537],{"class":32,"line":33},[30,96538,96539],{"class":379},"#创建一个一维数组,以20进行填充\n",[30,96541,96542,96545,96547,96549,96551],{"class":32,"line":44},[30,96543,96544],{"class":321},"np.full(",[30,96546,766],{"class":40},[30,96548,698],{"class":321},[30,96550,1020],{"class":40},[30,96552,328],{"class":321},[157,96554,93429],{},[20,96556,96558],{"className":30516,"code":96557,"language":30518,"meta":25,"style":25},"#创建二维数组\nnp.full((3,5),11)\n",[27,96559,96560,96564],{"__ignoreMap":25},[30,96561,96562],{"class":32,"line":33},[30,96563,94085],{"class":379},[30,96565,96566,96569,96571,96573,96575,96577,96579],{"class":32,"line":44},[30,96567,96568],{"class":321},"np.full((",[30,96570,392],{"class":40},[30,96572,698],{"class":321},[30,96574,639],{"class":40},[30,96576,42394],{"class":321},[30,96578,792],{"class":40},[30,96580,328],{"class":321},[157,96582,96583],{},"③full_like用法",[157,96585,96586],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[157,96588,96589],{},"这里是指定填充而已",[20,96591,96593],{"className":30516,"code":96592,"language":30518,"meta":25,"style":25},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[27,96594,96595,96600,96624,96629],{"__ignoreMap":25},[30,96596,96597],{"class":32,"line":33},[30,96598,96599],{"class":379},"#创建一个指定形状数组\n",[30,96601,96602,96604,96606,96608,96610,96612,96614,96616,96618,96620,96622],{"class":32,"line":44},[30,96603,558],{"class":321},[30,96605,367],{"class":317},[30,96607,93140],{"class":321},[30,96609,537],{"class":40},[30,96611,698],{"class":321},[30,96613,645],{"class":40},[30,96615,93145],{"class":321},[30,96617,613],{"class":40},[30,96619,698],{"class":321},[30,96621,740],{"class":40},[30,96623,328],{"class":321},[30,96625,96626],{"class":32,"line":52},[30,96627,96628],{"class":379},"#进行指定填充\n",[30,96630,96631,96634,96636],{"class":32,"line":60},[30,96632,96633],{"class":321},"np.full_like(a,",[30,96635,766],{"class":40},[30,96637,328],{"class":321},[157,96639,11696],{},[157,96641,96642],{},[160,96643],{"alt":25,"src":96644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[287,96646,96648],{"id":96647},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22180,96650,96652],{"id":96651},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[20,96654,96656],{"className":30516,"code":96655,"language":30518,"meta":25,"style":25},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[27,96657,96658,96675],{"__ignoreMap":25},[30,96659,96660,96663,96665,96667,96669,96671,96673],{"class":32,"line":33},[30,96661,96662],{"class":321},"np.eye(",[30,96664,613],{"class":40},[30,96666,698],{"class":321},[30,96668,93638],{"class":5398},[30,96670,367],{"class":317},[30,96672,325],{"class":40},[30,96674,328],{"class":321},[30,96676,96677],{"class":32,"line":44},[30,96678,96679],{"class":379},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22180,96681,96683],{"id":96682},"_2662-法2identity","2.6.6.2 法2：identity()",[20,96685,96687],{"className":30516,"code":96686,"language":30518,"meta":25,"style":25},"#identity()\nnp.identity(5,dtype=int)\n",[27,96688,96689,96694],{"__ignoreMap":25},[30,96690,96691],{"class":32,"line":33},[30,96692,96693],{"class":379},"#identity()\n",[30,96695,96696,96699,96701,96703,96705,96707,96709],{"class":32,"line":44},[30,96697,96698],{"class":321},"np.identity(",[30,96700,639],{"class":40},[30,96702,698],{"class":321},[30,96704,93638],{"class":5398},[30,96706,367],{"class":317},[30,96708,325],{"class":40},[30,96710,328],{"class":321},[157,96712,96713],{},"两个函数是有区别的",[157,96715,96716],{},[160,96717],{"alt":25,"src":96718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[157,96720,96721],{},[160,96722],{"alt":25,"src":96723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[20,96725,96727],{"className":30516,"code":96726,"language":30518,"meta":25,"style":25},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\nnp.eye(3, 4)\n# 输出:\n# [[1. 0. 0. 0.]\n#  [0. 1. 0. 0.]\n#  [0. 0. 1. 0.]]\n\n# 对角线向上偏移1\nnp.eye(3, 4, k=1)\n# 输出:\n# [[0. 1. 0. 0.]\n#  [0. 0. 1. 0.]\n#  [0. 0. 0. 1.]]\n\n",[27,96728,96729,96734,96746,96751,96756,96761,96766,96770,96775,96795,96799,96804,96809],{"__ignoreMap":25},[30,96730,96731],{"class":32,"line":33},[30,96732,96733],{"class":379},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[30,96735,96736,96738,96740,96742,96744],{"class":32,"line":44},[30,96737,96662],{"class":321},[30,96739,392],{"class":40},[30,96741,12617],{"class":321},[30,96743,613],{"class":40},[30,96745,328],{"class":321},[30,96747,96748],{"class":32,"line":52},[30,96749,96750],{"class":379},"# 输出:\n",[30,96752,96753],{"class":32,"line":60},[30,96754,96755],{"class":379},"# [[1. 0. 0. 0.]\n",[30,96757,96758],{"class":32,"line":68},[30,96759,96760],{"class":379},"#  [0. 1. 0. 0.]\n",[30,96762,96763],{"class":32,"line":80},[30,96764,96765],{"class":379},"#  [0. 0. 1. 0.]]\n",[30,96767,96768],{"class":32,"line":88},[30,96769,2582],{"emptyLinePlaceholder":245},[30,96771,96772],{"class":32,"line":96},[30,96773,96774],{"class":379},"# 对角线向上偏移1\n",[30,96776,96777,96779,96781,96783,96785,96787,96789,96791,96793],{"class":32,"line":104},[30,96778,96662],{"class":321},[30,96780,392],{"class":40},[30,96782,12617],{"class":321},[30,96784,613],{"class":40},[30,96786,12617],{"class":321},[30,96788,813],{"class":5398},[30,96790,367],{"class":317},[30,96792,537],{"class":40},[30,96794,328],{"class":321},[30,96796,96797],{"class":32,"line":112},[30,96798,96750],{"class":379},[30,96800,96801],{"class":32,"line":123},[30,96802,96803],{"class":379},"# [[0. 1. 0. 0.]\n",[30,96805,96806],{"class":32,"line":131},[30,96807,96808],{"class":379},"#  [0. 0. 1. 0.]\n",[30,96810,96811],{"class":32,"line":142},[30,96812,96813],{"class":379},"#  [0. 0. 0. 1.]]\n",[287,96815,96817],{"id":96816},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[20,96819,96821],{"className":30516,"code":96820,"language":30518,"meta":25,"style":25},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n\"\"\"\nnp.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n参数介绍：\nstart：序列的起始值\nstop:序列的终止值，如果endpoint为True，该值包含数列中\nnum：要生长的等步长的样本数量，默认为50\nendpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\nretstep：如果为True时，生长的数组中会显示间距，反之不显示\ndtype：ndarry的数据类型\n\"\"\"\n",[27,96822,96823,96828,96832,96837,96842,96847,96852,96857,96862,96867,96872],{"__ignoreMap":25},[30,96824,96825],{"class":32,"line":33},[30,96826,96827],{"class":379},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[30,96829,96830],{"class":32,"line":44},[30,96831,95836],{"class":74},[30,96833,96834],{"class":32,"line":52},[30,96835,96836],{"class":74},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[30,96838,96839],{"class":32,"line":60},[30,96840,96841],{"class":74},"参数介绍：\n",[30,96843,96844],{"class":32,"line":68},[30,96845,96846],{"class":74},"start：序列的起始值\n",[30,96848,96849],{"class":32,"line":80},[30,96850,96851],{"class":74},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[30,96853,96854],{"class":32,"line":88},[30,96855,96856],{"class":74},"num：要生长的等步长的样本数量，默认为50\n",[30,96858,96859],{"class":32,"line":96},[30,96860,96861],{"class":74},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[30,96863,96864],{"class":32,"line":104},[30,96865,96866],{"class":74},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[30,96868,96869],{"class":32,"line":112},[30,96870,96871],{"class":74},"dtype：ndarry的数据类型\n",[30,96873,96874],{"class":32,"line":123},[30,96875,95836],{"class":74},[157,96877,96878],{},[160,96879],{"alt":25,"src":96880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[157,96882,96883],{},"这里num=是可以省略的",[157,96885,96886],{},"也就是下方两行代码结果是一模一样的",[20,96888,96890],{"className":30516,"code":96889,"language":30518,"meta":25,"style":25},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[27,96891,96892,96909],{"__ignoreMap":25},[30,96893,96894,96897,96899,96901,96903,96905,96907],{"class":32,"line":33},[30,96895,96896],{"class":321},"np.linspace(",[30,96898,537],{"class":40},[30,96900,698],{"class":321},[30,96902,639],{"class":40},[30,96904,698],{"class":321},[30,96906,639],{"class":40},[30,96908,328],{"class":321},[30,96910,96911,96913,96915,96917,96919,96921,96923,96925,96927],{"class":32,"line":44},[30,96912,96896],{"class":321},[30,96914,537],{"class":40},[30,96916,698],{"class":321},[30,96918,639],{"class":40},[30,96920,698],{"class":321},[30,96922,1848],{"class":5398},[30,96924,367],{"class":317},[30,96926,639],{"class":40},[30,96928,328],{"class":321},[287,96930,96932],{"id":96931},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[20,96934,96936],{"className":30516,"code":96935,"language":30518,"meta":25,"style":25},"#logspace函数用于创建一个等比数列，格式如下：\n\"\"\"\nnp.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n参数为：\nstart:序列的起始位置为：base**start\nstop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\nnum：要生长的等步长的样本数量，默认为50\nendpoint：是否包含 stop 这个值，默认是 True\nbase：对数的底数，默认是 10（常见对数）\ndtype：ndarry的数据类型\n\"\"\"\n",[27,96937,96938,96943,96947,96952,96957,96962,96967,96971,96976,96981,96985],{"__ignoreMap":25},[30,96939,96940],{"class":32,"line":33},[30,96941,96942],{"class":379},"#logspace函数用于创建一个等比数列，格式如下：\n",[30,96944,96945],{"class":32,"line":44},[30,96946,95836],{"class":74},[30,96948,96949],{"class":32,"line":52},[30,96950,96951],{"class":74},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[30,96953,96954],{"class":32,"line":60},[30,96955,96956],{"class":74},"参数为：\n",[30,96958,96959],{"class":32,"line":68},[30,96960,96961],{"class":74},"start:序列的起始位置为：base**start\n",[30,96963,96964],{"class":32,"line":80},[30,96965,96966],{"class":74},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[30,96968,96969],{"class":32,"line":88},[30,96970,96856],{"class":74},[30,96972,96973],{"class":32,"line":96},[30,96974,96975],{"class":74},"endpoint：是否包含 stop 这个值，默认是 True\n",[30,96977,96978],{"class":32,"line":104},[30,96979,96980],{"class":74},"base：对数的底数，默认是 10（常见对数）\n",[30,96982,96983],{"class":32,"line":112},[30,96984,96871],{"class":74},[30,96986,96987],{"class":32,"line":123},[30,96988,95836],{"class":74},[157,96990,96991],{},[160,96992],{"alt":25,"src":96993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[157,96995,96996],{},"logspace()函数中的num参数也是可以不写num=的",[157,96998,96999],{},"endpoint是不可以省略的",[234,97001,97002],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":25,"searchDepth":44,"depth":44,"links":97004},[97005,97009,97014,97018,97022,97023],{"id":95394,"depth":44,"text":95395,"children":97006},[97007,97008],{"id":95398,"depth":52,"text":95399},{"id":95471,"depth":52,"text":95472},{"id":95503,"depth":44,"text":95504,"children":97010},[97011,97012,97013],{"id":95507,"depth":52,"text":95508},{"id":95689,"depth":52,"text":95690},{"id":95767,"depth":52,"text":95768},{"id":95802,"depth":44,"text":95803,"children":97015},[97016,97017],{"id":95806,"depth":52,"text":95807},{"id":95863,"depth":52,"text":95864},{"id":95959,"depth":44,"text":95960,"children":97019},[97020,97021],{"id":95963,"depth":52,"text":95964},{"id":95975,"depth":52,"text":95976},{"id":96009,"depth":44,"text":96010},{"id":96046,"depth":44,"text":96047,"children":97024},[97025,97026,97027,97028,97029,97030,97031,97032],{"id":96050,"depth":52,"text":96051},{"id":96275,"depth":52,"text":96276},{"id":96282,"depth":52,"text":96283},{"id":96491,"depth":52,"text":96492},{"id":96511,"depth":52,"text":96512},{"id":96647,"depth":52,"text":96648},{"id":96816,"depth":52,"text":96817},{"id":96931,"depth":52,"text":96932},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95386,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97039,"title":97040,"body":97041,"description":242,"extension":243,"meta":97134,"navigation":245,"path":97135,"seo":97136,"stem":97137,"__hash__":97138},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97042,"toc":97132},[97043,97046,97049,97052,97055,97058,97061,97064,97067,97070,97073,97076,97078,97081,97084,97089,97092,97095,97129],[10,97044,97040],{"id":97045},"_20魔法命令mprun",[157,97047,97048],{},"逐行分析数据内存的使用情况",[157,97050,97051],{},"语法格式：",[157,97053,97054],{},"%mprun -f 模块名.函数名 模块名.函数名()",[157,97056,97057],{},"分析结果列如下：",[157,97059,97060],{},"Line行号",[157,97062,97063],{},"Mem usage内存使用大小",[157,97065,97066],{},"increment内存增量",[157,97068,97069],{},"Line content代码内容",[157,97071,97072],{},"补充说明：",[157,97074,97075],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[157,97077,95341],{},[157,97079,97080],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[157,97082,97083],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[157,97085,97086],{},[160,97087],{"alt":25,"src":97088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[157,97090,97091],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[157,97093,97094],{},"这时候需要重新加载模块",[20,97096,97098],{"className":30516,"code":97097,"language":30518,"meta":25,"style":25},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[27,97099,97100,97105,97112,97117],{"__ignoreMap":25},[30,97101,97102],{"class":32,"line":33},[30,97103,97104],{"class":379},"#重新加载模块\n",[30,97106,97107,97109],{"class":32,"line":44},[30,97108,30530],{"class":317},[30,97110,97111],{"class":321}," importlib\n",[30,97113,97114],{"class":32,"line":52},[30,97115,97116],{"class":321},"importlib.reload(mprun_test)\n",[30,97118,97119,97121,97124,97126],{"class":32,"line":60},[30,97120,648],{"class":317},[30,97122,97123],{"class":321},"mprun ",[30,97125,852],{"class":317},[30,97127,97128],{"class":321},"f mprun_test.fun_test mprun_test.fun_test()\n",[234,97130,97131],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":97133},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97040,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97140,"title":97141,"body":97142,"description":242,"extension":243,"meta":97159,"navigation":245,"path":97160,"seo":97161,"stem":97162,"__hash__":97163},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97143,"toc":97157},[97144,97147,97152],[10,97145,97141],{"id":97146},"_3一维数组的索引和切片",[157,97148,97149],{},[160,97150],{"alt":25,"src":97151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[157,97153,97154],{},[160,97155],{"alt":25,"src":97156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":25,"searchDepth":44,"depth":44,"links":97158},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97141,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97165,"title":97166,"body":97167,"description":242,"extension":243,"meta":97650,"navigation":245,"path":97651,"seo":97652,"stem":97653,"__hash__":97654},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97168,"toc":97648},[97169,97172,97175,97180,97213,97216,97254,97257,97291,97294,97399,97402,97439,97442,97543,97546,97597,97600,97642,97645],[10,97170,97166],{"id":97171},"_4二维数组的索引与切片",[157,97173,97174],{},"①获取指定单个元素",[157,97176,97177],{},[160,97178],{"alt":25,"src":97179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[20,97181,97183],{"className":30516,"code":97182,"language":30518,"meta":25,"style":25},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[27,97184,97185,97190,97195,97200],{"__ignoreMap":25},[30,97186,97187],{"class":32,"line":33},[30,97188,97189],{"class":379},"#获取元素9\n",[30,97191,97192],{"class":32,"line":44},[30,97193,97194],{"class":379},"#先获取所在行，再获取所在列\n",[30,97196,97197],{"class":32,"line":52},[30,97198,97199],{"class":379},"#数组[行索引号，列索引号]\n",[30,97201,97202,97205,97207,97209,97211],{"class":32,"line":60},[30,97203,97204],{"class":321},"a[",[30,97206,537],{"class":40},[30,97208,698],{"class":321},[30,97210,398],{"class":40},[30,97212,33384],{"class":321},[157,97214,97215],{},"②获取整行元素",[20,97217,97219],{"className":30516,"code":97218,"language":30518,"meta":25,"style":25},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[27,97220,97221,97226,97231,97239,97244],{"__ignoreMap":25},[30,97222,97223],{"class":32,"line":33},[30,97224,97225],{"class":379},"#获取整行 数组[行索引号]\n",[30,97227,97228],{"class":32,"line":44},[30,97229,97230],{"class":379},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[30,97232,97233,97235,97237],{"class":32,"line":52},[30,97234,97204],{"class":321},[30,97236,398],{"class":40},[30,97238,33384],{"class":321},[30,97240,97241],{"class":32,"line":60},[30,97242,97243],{"class":379},"#也可以负索引获取一行\n",[30,97245,97246,97248,97250,97252],{"class":32,"line":68},[30,97247,97204],{"class":321},[30,97249,852],{"class":317},[30,97251,537],{"class":40},[30,97253,33384],{"class":321},[157,97255,97256],{},"③获取整列元素",[20,97258,97260],{"className":30516,"code":97259,"language":30518,"meta":25,"style":25},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[27,97261,97262,97267,97276,97281],{"__ignoreMap":25},[30,97263,97264],{"class":32,"line":33},[30,97265,97266],{"class":379},"#获取整列 数组名[:,列索引]\n",[30,97268,97269,97272,97274],{"class":32,"line":44},[30,97270,97271],{"class":321},"a[:,",[30,97273,398],{"class":40},[30,97275,33384],{"class":321},[30,97277,97278],{"class":32,"line":52},[30,97279,97280],{"class":379},"#也可以负索引获取一列\n",[30,97282,97283,97285,97287,97289],{"class":32,"line":60},[30,97284,97271],{"class":321},[30,97286,852],{"class":317},[30,97288,537],{"class":40},[30,97290,33384],{"class":321},[157,97292,97293],{},"④部分行部分列的元素",[20,97295,97297],{"className":30516,"code":97296,"language":30518,"meta":25,"style":25},"#部分行部分列 数组名[行切片，列切片]\na[:2,:]\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\na[:,1:4]\n#结果：\n'''\narray([[ 2,  3,  4],\n       [ 8,  9, 10],\n       [14, 15, 16],\n       [20, 21, 22]])\n'''\n#对列行同时进行切片，使用了step参数\na[::2,::2]\n",[27,97298,97299,97304,97314,97318,97322,97327,97332,97336,97348,97352,97356,97361,97366,97371,97376,97380,97385],{"__ignoreMap":25},[30,97300,97301],{"class":32,"line":33},[30,97302,97303],{"class":379},"#部分行部分列 数组名[行切片，列切片]\n",[30,97305,97306,97309,97311],{"class":32,"line":44},[30,97307,97308],{"class":321},"a[:",[30,97310,398],{"class":40},[30,97312,97313],{"class":321},",:]\n",[30,97315,97316],{"class":32,"line":52},[30,97317,93702],{"class":379},[30,97319,97320],{"class":32,"line":60},[30,97321,94066],{"class":74},[30,97323,97324],{"class":32,"line":68},[30,97325,97326],{"class":74},"array([[ 1,  2,  3,  4,  5,  6],\n",[30,97328,97329],{"class":32,"line":80},[30,97330,97331],{"class":74},"       [ 7,  8,  9, 10, 11, 12]])\n",[30,97333,97334],{"class":32,"line":88},[30,97335,94066],{"class":74},[30,97337,97338,97340,97342,97344,97346],{"class":32,"line":96},[30,97339,97271],{"class":321},[30,97341,537],{"class":40},[30,97343,1179],{"class":321},[30,97345,613],{"class":40},[30,97347,33384],{"class":321},[30,97349,97350],{"class":32,"line":104},[30,97351,93702],{"class":379},[30,97353,97354],{"class":32,"line":112},[30,97355,94066],{"class":74},[30,97357,97358],{"class":32,"line":123},[30,97359,97360],{"class":74},"array([[ 2,  3,  4],\n",[30,97362,97363],{"class":32,"line":131},[30,97364,97365],{"class":74},"       [ 8,  9, 10],\n",[30,97367,97368],{"class":32,"line":142},[30,97369,97370],{"class":74},"       [14, 15, 16],\n",[30,97372,97373],{"class":32,"line":1811},[30,97374,97375],{"class":74},"       [20, 21, 22]])\n",[30,97377,97378],{"class":32,"line":1825},[30,97379,94066],{"class":74},[30,97381,97382],{"class":32,"line":1830},[30,97383,97384],{"class":379},"#对列行同时进行切片，使用了step参数\n",[30,97386,97387,97390,97392,97395,97397],{"class":32,"line":1836},[30,97388,97389],{"class":321},"a[::",[30,97391,398],{"class":40},[30,97393,97394],{"class":321},",::",[30,97396,398],{"class":40},[30,97398,33384],{"class":321},[157,97400,97401],{},"⑤同时获取两个元素",[20,97403,97405],{"className":30516,"code":97404,"language":30518,"meta":25,"style":25},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[27,97406,97407,97412,97417],{"__ignoreMap":25},[30,97408,97409],{"class":32,"line":33},[30,97410,97411],{"class":379},"#同时获取第三行第二列，第四行第一列\n",[30,97413,97414],{"class":32,"line":44},[30,97415,97416],{"class":379},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[30,97418,97419,97422,97424,97426,97428,97430,97432,97434,97436],{"class":32,"line":52},[30,97420,97421],{"class":321},"a[(",[30,97423,398],{"class":40},[30,97425,698],{"class":321},[30,97427,392],{"class":40},[30,97429,42385],{"class":321},[30,97431,537],{"class":40},[30,97433,698],{"class":321},[30,97435,511],{"class":40},[30,97437,97438],{"class":321},")]\n",[157,97440,97441],{},"⑥切片，对行进行反向获取",[20,97443,97445],{"className":30516,"code":97444,"language":30518,"meta":25,"style":25},"#切片 对所有行进行反向获取\na[::-1]\n#结果：\n'''\narray([[19, 20, 21, 22, 23, 24],\n       [13, 14, 15, 16, 17, 18],\n       [ 7,  8,  9, 10, 11, 12],\n       [ 1,  2,  3,  4,  5,  6]])\n'''\n#对行列都进行反向切片获取\na[::-1,::-1]\n'''\narray([[24, 23, 22, 21, 20, 19],\n       [18, 17, 16, 15, 14, 13],\n       [12, 11, 10,  9,  8,  7],\n       [ 6,  5,  4,  3,  2,  1]])\n'''\n",[27,97446,97447,97452,97462,97466,97470,97475,97480,97485,97490,97494,97499,97515,97519,97524,97529,97534,97539],{"__ignoreMap":25},[30,97448,97449],{"class":32,"line":33},[30,97450,97451],{"class":379},"#切片 对所有行进行反向获取\n",[30,97453,97454,97456,97458,97460],{"class":32,"line":44},[30,97455,97389],{"class":321},[30,97457,852],{"class":317},[30,97459,537],{"class":40},[30,97461,33384],{"class":321},[30,97463,97464],{"class":32,"line":52},[30,97465,93702],{"class":379},[30,97467,97468],{"class":32,"line":60},[30,97469,94066],{"class":74},[30,97471,97472],{"class":32,"line":68},[30,97473,97474],{"class":74},"array([[19, 20, 21, 22, 23, 24],\n",[30,97476,97477],{"class":32,"line":80},[30,97478,97479],{"class":74},"       [13, 14, 15, 16, 17, 18],\n",[30,97481,97482],{"class":32,"line":88},[30,97483,97484],{"class":74},"       [ 7,  8,  9, 10, 11, 12],\n",[30,97486,97487],{"class":32,"line":96},[30,97488,97489],{"class":74},"       [ 1,  2,  3,  4,  5,  6]])\n",[30,97491,97492],{"class":32,"line":104},[30,97493,94066],{"class":74},[30,97495,97496],{"class":32,"line":112},[30,97497,97498],{"class":379},"#对行列都进行反向切片获取\n",[30,97500,97501,97503,97505,97507,97509,97511,97513],{"class":32,"line":123},[30,97502,97389],{"class":321},[30,97504,852],{"class":317},[30,97506,537],{"class":40},[30,97508,97394],{"class":321},[30,97510,852],{"class":317},[30,97512,537],{"class":40},[30,97514,33384],{"class":321},[30,97516,97517],{"class":32,"line":131},[30,97518,94066],{"class":74},[30,97520,97521],{"class":32,"line":142},[30,97522,97523],{"class":74},"array([[24, 23, 22, 21, 20, 19],\n",[30,97525,97526],{"class":32,"line":1811},[30,97527,97528],{"class":74},"       [18, 17, 16, 15, 14, 13],\n",[30,97530,97531],{"class":32,"line":1825},[30,97532,97533],{"class":74},"       [12, 11, 10,  9,  8,  7],\n",[30,97535,97536],{"class":32,"line":1830},[30,97537,97538],{"class":74},"       [ 6,  5,  4,  3,  2,  1]])\n",[30,97540,97541],{"class":32,"line":1836},[30,97542,94066],{"class":74},[157,97544,97545],{},"⑦修改元素",[20,97547,97549],{"className":30516,"code":97548,"language":30518,"meta":25,"style":25},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[27,97550,97551,97556,97574,97579],{"__ignoreMap":25},[30,97552,97553],{"class":32,"line":33},[30,97554,97555],{"class":379},"#获取前两行和前两列\n",[30,97557,97558,97561,97563,97565,97567,97570,97572],{"class":32,"line":44},[30,97559,97560],{"class":321},"sub_a",[30,97562,367],{"class":317},[30,97564,97308],{"class":321},[30,97566,398],{"class":40},[30,97568,97569],{"class":321},",:",[30,97571,398],{"class":40},[30,97573,33384],{"class":321},[30,97575,97576],{"class":32,"line":52},[30,97577,97578],{"class":379},"#修改sub_a第一个元素的值\n",[30,97580,97581,97584,97586,97588,97590,97592,97594],{"class":32,"line":60},[30,97582,97583],{"class":321},"sub_a[",[30,97585,511],{"class":40},[30,97587,698],{"class":321},[30,97589,511],{"class":40},[30,97591,1260],{"class":321},[30,97593,367],{"class":317},[30,97595,97596],{"class":40},"100\n",[157,97598,97599],{},"⑧数组复制copy()",[20,97601,97603],{"className":30516,"code":97602,"language":30518,"meta":25,"style":25},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[27,97604,97605,97610,97620,97625],{"__ignoreMap":25},[30,97606,97607],{"class":32,"line":33},[30,97608,97609],{"class":379},"#数组复制\n",[30,97611,97612,97615,97617],{"class":32,"line":44},[30,97613,97614],{"class":321},"copy_a",[30,97616,367],{"class":317},[30,97618,97619],{"class":321},"np.copy(sub_a)\n",[30,97621,97622],{"class":32,"line":52},[30,97623,97624],{"class":379},"#修改copy_a后不影响原数组\n",[30,97626,97627,97630,97632,97634,97636,97638,97640],{"class":32,"line":60},[30,97628,97629],{"class":321},"copy_a[",[30,97631,511],{"class":40},[30,97633,698],{"class":321},[30,97635,511],{"class":40},[30,97637,1260],{"class":321},[30,97639,367],{"class":317},[30,97641,97596],{"class":40},[157,97643,97644],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[234,97646,97647],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":44,"depth":44,"links":97649},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97166,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97656,"title":97657,"body":97658,"description":242,"extension":243,"meta":98150,"navigation":245,"path":98151,"seo":98152,"stem":98153,"__hash__":98154},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97659,"toc":98142},[97660,97663,97667,97670,97673,97726,97729,97754,97757,97776,97796,97799,97815,97819,97865,97869,97911,97915,97918,97921,97924,97927,97930,97992,98052,98056,98059,98116,98120,98125,98134,98139],[10,97661,97657],{"id":97662},"_5改变数组的维度",[15,97664,97666],{"id":97665},"_51-使用reshape","5.1 使用reshape()",[157,97668,97669],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[157,97671,97672],{},"①一维数组转换为二维数组",[20,97674,97676],{"className":30516,"code":97675,"language":30518,"meta":25,"style":25},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[27,97677,97678,97694,97699,97704,97709],{"__ignoreMap":25},[30,97679,97680,97682,97684,97686,97688,97690,97692],{"class":32,"line":33},[30,97681,558],{"class":321},[30,97683,367],{"class":317},[30,97685,93140],{"class":321},[30,97687,537],{"class":40},[30,97689,698],{"class":321},[30,97691,843],{"class":40},[30,97693,328],{"class":321},[30,97695,97696],{"class":32,"line":44},[30,97697,97698],{"class":379},"#将一维数组进行转换\n",[30,97700,97701],{"class":32,"line":52},[30,97702,97703],{"class":379},"#注意点：元素个数不可以变\n",[30,97705,97706],{"class":32,"line":60},[30,97707,97708],{"class":379},"#转换维度要保持一致，不一致就异常！！！\n",[30,97710,97711,97713,97715,97718,97720,97722,97724],{"class":32,"line":68},[30,97712,93444],{"class":321},[30,97714,367],{"class":317},[30,97716,97717],{"class":321},"a.reshape(",[30,97719,398],{"class":40},[30,97721,698],{"class":321},[30,97723,664],{"class":40},[30,97725,328],{"class":321},[157,97727,97728],{},"②一维数组转换为三维数组",[20,97730,97732],{"className":30516,"code":97731,"language":30518,"meta":25,"style":25},"aaa=a.reshape(2,3,2)\n",[27,97733,97734],{"__ignoreMap":25},[30,97735,97736,97738,97740,97742,97744,97746,97748,97750,97752],{"class":32,"line":33},[30,97737,95659],{"class":321},[30,97739,367],{"class":317},[30,97741,97717],{"class":321},[30,97743,398],{"class":40},[30,97745,698],{"class":321},[30,97747,392],{"class":40},[30,97749,698],{"class":321},[30,97751,398],{"class":40},[30,97753,328],{"class":321},[157,97755,97756],{},"③二维数组转化为一维数组",[20,97758,97760],{"className":30516,"code":97759,"language":30518,"meta":25,"style":25},"#知道元素个数：\naa.reshape(12)\n",[27,97761,97762,97767],{"__ignoreMap":25},[30,97763,97764],{"class":32,"line":33},[30,97765,97766],{"class":379},"#知道元素个数：\n",[30,97768,97769,97772,97774],{"class":32,"line":44},[30,97770,97771],{"class":321},"aa.reshape(",[30,97773,818],{"class":40},[30,97775,328],{"class":321},[20,97777,97779],{"className":30516,"code":97778,"language":30518,"meta":25,"style":25},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[27,97780,97781,97786],{"__ignoreMap":25},[30,97782,97783],{"class":32,"line":33},[30,97784,97785],{"class":379},"#不知道元素个数，参数传递-1\n",[30,97787,97788,97790,97792,97794],{"class":32,"line":44},[30,97789,97771],{"class":321},[30,97791,852],{"class":317},[30,97793,537],{"class":40},[30,97795,328],{"class":321},[157,97797,97798],{},"④三维数组转换为一维数组",[20,97800,97802],{"className":30516,"code":97801,"language":30518,"meta":25,"style":25},"aaa.reshape(-1)\n",[27,97803,97804],{"__ignoreMap":25},[30,97805,97806,97809,97811,97813],{"class":32,"line":33},[30,97807,97808],{"class":321},"aaa.reshape(",[30,97810,852],{"class":317},[30,97812,537],{"class":40},[30,97814,328],{"class":321},[15,97816,97818],{"id":97817},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[20,97820,97822],{"className":30516,"code":97821,"language":30518,"meta":25,"style":25},"aa=np.arange(1,13).reshape(2,6)#转换为2行6列的数组\naa.revel()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[27,97823,97824,97851,97856,97860],{"__ignoreMap":25},[30,97825,97826,97828,97830,97832,97834,97836,97838,97840,97842,97844,97846,97848],{"class":32,"line":33},[30,97827,93444],{"class":321},[30,97829,367],{"class":317},[30,97831,93140],{"class":321},[30,97833,537],{"class":40},[30,97835,698],{"class":321},[30,97837,843],{"class":40},[30,97839,93145],{"class":321},[30,97841,398],{"class":40},[30,97843,698],{"class":321},[30,97845,664],{"class":40},[30,97847,749],{"class":321},[30,97849,97850],{"class":379},"#转换为2行6列的数组\n",[30,97852,97853],{"class":32,"line":44},[30,97854,97855],{"class":321},"aa.revel()\n",[30,97857,97858],{"class":32,"line":52},[30,97859,93702],{"class":379},[30,97861,97862],{"class":32,"line":60},[30,97863,97864],{"class":379},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[15,97866,97868],{"id":97867},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[20,97870,97872],{"className":30516,"code":97871,"language":30518,"meta":25,"style":25},"aa=np.arange(1,13).reshape(2,6)\naa.flatten()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[27,97873,97874,97898,97903,97907],{"__ignoreMap":25},[30,97875,97876,97878,97880,97882,97884,97886,97888,97890,97892,97894,97896],{"class":32,"line":33},[30,97877,93444],{"class":321},[30,97879,367],{"class":317},[30,97881,93140],{"class":321},[30,97883,537],{"class":40},[30,97885,698],{"class":321},[30,97887,843],{"class":40},[30,97889,93145],{"class":321},[30,97891,398],{"class":40},[30,97893,698],{"class":321},[30,97895,664],{"class":40},[30,97897,328],{"class":321},[30,97899,97900],{"class":32,"line":44},[30,97901,97902],{"class":321},"aa.flatten()\n",[30,97904,97905],{"class":32,"line":52},[30,97906,93702],{"class":379},[30,97908,97909],{"class":32,"line":60},[30,97910,97864],{"class":379},[15,97912,97914],{"id":97913},"_54-使用resize","5.4 使用resize()",[157,97916,97917],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[157,97919,97920],{},"通过resize方法可以改变数组的维度",[157,97922,97923],{},"#resize修改数组维度",[157,97925,97926],{},"#以元组的形式指定形状",[157,97928,97929],{},"#改变的是原数组",[20,97931,97933],{"className":30516,"code":97932,"language":30518,"meta":25,"style":25},"a=np.arange(1,13)\na.shape=(2,6)#改变了原数组\na=resize((12))\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[27,97934,97935,97951,97971,97984,97988],{"__ignoreMap":25},[30,97936,97937,97939,97941,97943,97945,97947,97949],{"class":32,"line":33},[30,97938,558],{"class":321},[30,97940,367],{"class":317},[30,97942,93140],{"class":321},[30,97944,537],{"class":40},[30,97946,698],{"class":321},[30,97948,843],{"class":40},[30,97950,328],{"class":321},[30,97952,97953,97956,97958,97960,97962,97964,97966,97968],{"class":32,"line":44},[30,97954,97955],{"class":321},"a.shape",[30,97957,367],{"class":317},[30,97959,322],{"class":321},[30,97961,398],{"class":40},[30,97963,698],{"class":321},[30,97965,664],{"class":40},[30,97967,749],{"class":321},[30,97969,97970],{"class":379},"#改变了原数组\n",[30,97972,97973,97975,97977,97980,97982],{"class":32,"line":52},[30,97974,558],{"class":321},[30,97976,367],{"class":317},[30,97978,97979],{"class":321},"resize((",[30,97981,818],{"class":40},[30,97983,30635],{"class":321},[30,97985,97986],{"class":32,"line":60},[30,97987,93702],{"class":379},[30,97989,97990],{"class":32,"line":68},[30,97991,97864],{"class":379},[20,97993,97995],{"className":30516,"code":97994,"language":30518,"meta":25,"style":25},"a.resize((6,2))\n#结果：\n'''\narray([[ 1,  2],\n       [ 3,  4],\n       [ 5,  6],\n       [ 7,  8],\n       [ 9, 10],\n       [11, 12]])\n'''\n",[27,97996,97997,98010,98014,98018,98023,98028,98033,98038,98043,98048],{"__ignoreMap":25},[30,97998,97999,98002,98004,98006,98008],{"class":32,"line":33},[30,98000,98001],{"class":321},"a.resize((",[30,98003,664],{"class":40},[30,98005,698],{"class":321},[30,98007,398],{"class":40},[30,98009,30635],{"class":321},[30,98011,98012],{"class":32,"line":44},[30,98013,93702],{"class":379},[30,98015,98016],{"class":32,"line":52},[30,98017,94066],{"class":74},[30,98019,98020],{"class":32,"line":60},[30,98021,98022],{"class":74},"array([[ 1,  2],\n",[30,98024,98025],{"class":32,"line":68},[30,98026,98027],{"class":74},"       [ 3,  4],\n",[30,98029,98030],{"class":32,"line":80},[30,98031,98032],{"class":74},"       [ 5,  6],\n",[30,98034,98035],{"class":32,"line":88},[30,98036,98037],{"class":74},"       [ 7,  8],\n",[30,98039,98040],{"class":32,"line":96},[30,98041,98042],{"class":74},"       [ 9, 10],\n",[30,98044,98045],{"class":32,"line":104},[30,98046,98047],{"class":74},"       [11, 12]])\n",[30,98049,98050],{"class":32,"line":112},[30,98051,94066],{"class":74},[15,98053,98055],{"id":98054},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[157,98057,98058],{},"改变了原数组",[20,98060,98062],{"className":30516,"code":98061,"language":30518,"meta":25,"style":25},"a=np.arange(1,13)\na.shape=(2,6)\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\n",[27,98063,98064,98080,98096,98100,98104,98108,98112],{"__ignoreMap":25},[30,98065,98066,98068,98070,98072,98074,98076,98078],{"class":32,"line":33},[30,98067,558],{"class":321},[30,98069,367],{"class":317},[30,98071,93140],{"class":321},[30,98073,537],{"class":40},[30,98075,698],{"class":321},[30,98077,843],{"class":40},[30,98079,328],{"class":321},[30,98081,98082,98084,98086,98088,98090,98092,98094],{"class":32,"line":44},[30,98083,97955],{"class":321},[30,98085,367],{"class":317},[30,98087,322],{"class":321},[30,98089,398],{"class":40},[30,98091,698],{"class":321},[30,98093,664],{"class":40},[30,98095,328],{"class":321},[30,98097,98098],{"class":32,"line":52},[30,98099,93702],{"class":379},[30,98101,98102],{"class":32,"line":60},[30,98103,94066],{"class":74},[30,98105,98106],{"class":32,"line":68},[30,98107,97326],{"class":74},[30,98109,98110],{"class":32,"line":80},[30,98111,97331],{"class":74},[30,98113,98114],{"class":32,"line":88},[30,98115,94066],{"class":74},[15,98117,98119],{"id":98118},"_56-重要比较","5.6 重要比较：",[157,98121,98122],{},[160,98123],{"alt":25,"src":98124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[157,98126,98127,98128,98130,98131,98133],{},"口诀：NumPy 函数要么用 ",[27,98129,96101],{},"，要么用 ",[27,98132,31634],{},"，创建结构用 shape，造数据用 size",[157,98135,98136],{},[160,98137],{"alt":25,"src":98138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[234,98140,98141],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":44,"depth":44,"links":98143},[98144,98145,98146,98147,98148,98149],{"id":97665,"depth":44,"text":97666},{"id":97817,"depth":44,"text":97818},{"id":97867,"depth":44,"text":97868},{"id":97913,"depth":44,"text":97914},{"id":98054,"depth":44,"text":98055},{"id":98118,"depth":44,"text":98119},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97657,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98156,"title":98157,"body":98158,"description":242,"extension":243,"meta":99230,"navigation":245,"path":99231,"seo":99232,"stem":99233,"__hash__":99234},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98159,"toc":99224},[98160,98163,98167,98170,98173,98176,98241,98244,98284,98287,98369,98372,98377,98399,98401,98406,98411,98414,98417,98572,98575,98777,98781,98784,98787,98855,98857,98862,98865,98868,98948,98952,98955,98957,99030,99032,99037,99039,99119,99123,99126,99129,99132,99135,99138,99141,99221],[10,98161,98157],{"id":98162},"_6数组的拼接",[15,98164,98166],{"id":98165},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[157,98168,98169],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[157,98171,98172],{},"函数内部传两个数列构成的数列或者元组",[157,98174,98175],{},"①一维数组的拼接",[20,98177,98179],{"className":30516,"code":98178,"language":30518,"meta":25,"style":25},"a=np.array([1,2,3])\nb=np.array([4,5,6])\n#调用concatenate进行数组拼接\nnp.concatenate((a,b))\n#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n#np.concatenate([a,b])\n",[27,98180,98181,98201,98221,98226,98231,98236],{"__ignoreMap":25},[30,98182,98183,98185,98187,98189,98191,98193,98195,98197,98199],{"class":32,"line":33},[30,98184,558],{"class":321},[30,98186,367],{"class":317},[30,98188,93162],{"class":321},[30,98190,537],{"class":40},[30,98192,698],{"class":321},[30,98194,398],{"class":40},[30,98196,698],{"class":321},[30,98198,392],{"class":40},[30,98200,4839],{"class":321},[30,98202,98203,98205,98207,98209,98211,98213,98215,98217,98219],{"class":32,"line":44},[30,98204,583],{"class":321},[30,98206,367],{"class":317},[30,98208,93162],{"class":321},[30,98210,613],{"class":40},[30,98212,698],{"class":321},[30,98214,639],{"class":40},[30,98216,698],{"class":321},[30,98218,664],{"class":40},[30,98220,4839],{"class":321},[30,98222,98223],{"class":32,"line":52},[30,98224,98225],{"class":379},"#调用concatenate进行数组拼接\n",[30,98227,98228],{"class":32,"line":60},[30,98229,98230],{"class":321},"np.concatenate((a,b))\n",[30,98232,98233],{"class":32,"line":68},[30,98234,98235],{"class":379},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[30,98237,98238],{"class":32,"line":80},[30,98239,98240],{"class":379},"#np.concatenate([a,b])\n",[157,98242,98243],{},"②一维多个数组拼接",[20,98245,98247],{"className":30516,"code":98246,"language":30518,"meta":25,"style":25},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[27,98248,98249,98254,98274,98279],{"__ignoreMap":25},[30,98250,98251],{"class":32,"line":33},[30,98252,98253],{"class":379},"#也可以多个数组进行拼接\n",[30,98255,98256,98258,98260,98262,98264,98266,98268,98270,98272],{"class":32,"line":44},[30,98257,608],{"class":321},[30,98259,367],{"class":317},[30,98261,93162],{"class":321},[30,98263,766],{"class":40},[30,98265,698],{"class":321},[30,98267,792],{"class":40},[30,98269,698],{"class":321},[30,98271,843],{"class":40},[30,98273,4839],{"class":321},[30,98275,98276],{"class":32,"line":52},[30,98277,98278],{"class":321},"c\n",[30,98280,98281],{"class":32,"line":60},[30,98282,98283],{"class":321},"np.concatenate((a,b,c))\n",[157,98285,98286],{},"③二维数组拼接",[20,98288,98290],{"className":30516,"code":98289,"language":30518,"meta":25,"style":25},"#二维数组使用concatenate进行拼接\naa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\nnp.concatenate((aa,bb),axis=0)\n",[27,98291,98292,98297,98321,98346,98351,98356],{"__ignoreMap":25},[30,98293,98294],{"class":32,"line":33},[30,98295,98296],{"class":379},"#二维数组使用concatenate进行拼接\n",[30,98298,98299,98301,98303,98305,98307,98309,98311,98313,98315,98317,98319],{"class":32,"line":44},[30,98300,93444],{"class":321},[30,98302,367],{"class":317},[30,98304,93140],{"class":321},[30,98306,537],{"class":40},[30,98308,698],{"class":321},[30,98310,843],{"class":40},[30,98312,93145],{"class":321},[30,98314,392],{"class":40},[30,98316,698],{"class":321},[30,98318,613],{"class":40},[30,98320,328],{"class":321},[30,98322,98323,98326,98328,98330,98332,98334,98336,98338,98340,98342,98344],{"class":32,"line":52},[30,98324,98325],{"class":321},"bb",[30,98327,367],{"class":317},[30,98329,93140],{"class":321},[30,98331,657],{"class":40},[30,98333,698],{"class":321},[30,98335,962],{"class":40},[30,98337,93145],{"class":321},[30,98339,392],{"class":40},[30,98341,698],{"class":321},[30,98343,613],{"class":40},[30,98345,328],{"class":321},[30,98347,98348],{"class":32,"line":60},[30,98349,98350],{"class":379},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[30,98352,98353],{"class":32,"line":68},[30,98354,98355],{"class":379},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[30,98357,98358,98361,98363,98365,98367],{"class":32,"line":80},[30,98359,98360],{"class":321},"np.concatenate((aa,bb),",[30,98362,47652],{"class":5398},[30,98364,367],{"class":317},[30,98366,511],{"class":40},[30,98368,328],{"class":321},[157,98370,98371],{},"结果：",[157,98373,98374],{},[160,98375],{"alt":25,"src":98376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[20,98378,98380],{"className":30516,"code":98379,"language":30518,"meta":25,"style":25},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[27,98381,98382,98387],{"__ignoreMap":25},[30,98383,98384],{"class":32,"line":33},[30,98385,98386],{"class":379},"#指定axis为1进行拼接\n",[30,98388,98389,98391,98393,98395,98397],{"class":32,"line":44},[30,98390,98360],{"class":321},[30,98392,47652],{"class":5398},[30,98394,367],{"class":317},[30,98396,537],{"class":40},[30,98398,328],{"class":321},[157,98400,98371],{},[157,98402,98403],{},[160,98404],{"alt":25,"src":98405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[157,98407,98408],{},[469,98409,98410],{},"二维数组总结：0竖着方向，1横着方向",[157,98412,98413],{},"④三维数组拼接",[157,98415,98416],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[20,98418,98420],{"className":30516,"code":98419,"language":30518,"meta":25,"style":25},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#axis=0\ns=np.concatenate((aaa,bbb),axis=0)\ns.shape\n#输出：(4,3,6)\n#axis=1\nss=np.concatenate((aaa,bbb),axis=1)\nss.shape\n#输出：(2,6,6)\n#axis=2\nnp.concatenate((aaa,bbb),axis=2).shape\n#输出：（2，3，12）\n",[27,98421,98422,98427,98455,98485,98490,98507,98512,98517,98522,98539,98544,98549,98554,98567],{"__ignoreMap":25},[30,98423,98424],{"class":32,"line":33},[30,98425,98426],{"class":379},"#两个三行六列\n",[30,98428,98429,98431,98433,98435,98437,98439,98441,98443,98445,98447,98449,98451,98453],{"class":32,"line":44},[30,98430,95659],{"class":321},[30,98432,367],{"class":317},[30,98434,93140],{"class":321},[30,98436,537],{"class":40},[30,98438,698],{"class":321},[30,98440,645],{"class":40},[30,98442,93145],{"class":321},[30,98444,398],{"class":40},[30,98446,698],{"class":321},[30,98448,392],{"class":40},[30,98450,698],{"class":321},[30,98452,664],{"class":40},[30,98454,328],{"class":321},[30,98456,98457,98460,98462,98464,98466,98468,98471,98473,98475,98477,98479,98481,98483],{"class":32,"line":52},[30,98458,98459],{"class":321},"bbb",[30,98461,367],{"class":317},[30,98463,93140],{"class":321},[30,98465,657],{"class":40},[30,98467,698],{"class":321},[30,98469,98470],{"class":40},"137",[30,98472,93145],{"class":321},[30,98474,398],{"class":40},[30,98476,698],{"class":321},[30,98478,392],{"class":40},[30,98480,698],{"class":321},[30,98482,664],{"class":40},[30,98484,328],{"class":321},[30,98486,98487],{"class":32,"line":60},[30,98488,98489],{"class":379},"#axis=0\n",[30,98491,98492,98494,98496,98499,98501,98503,98505],{"class":32,"line":68},[30,98493,1015],{"class":321},[30,98495,367],{"class":317},[30,98497,98498],{"class":321},"np.concatenate((aaa,bbb),",[30,98500,47652],{"class":5398},[30,98502,367],{"class":317},[30,98504,511],{"class":40},[30,98506,328],{"class":321},[30,98508,98509],{"class":32,"line":80},[30,98510,98511],{"class":321},"s.shape\n",[30,98513,98514],{"class":32,"line":88},[30,98515,98516],{"class":379},"#输出：(4,3,6)\n",[30,98518,98519],{"class":32,"line":96},[30,98520,98521],{"class":379},"#axis=1\n",[30,98523,98524,98527,98529,98531,98533,98535,98537],{"class":32,"line":104},[30,98525,98526],{"class":321},"ss",[30,98528,367],{"class":317},[30,98530,98498],{"class":321},[30,98532,47652],{"class":5398},[30,98534,367],{"class":317},[30,98536,537],{"class":40},[30,98538,328],{"class":321},[30,98540,98541],{"class":32,"line":112},[30,98542,98543],{"class":321},"ss.shape\n",[30,98545,98546],{"class":32,"line":123},[30,98547,98548],{"class":379},"#输出：(2,6,6)\n",[30,98550,98551],{"class":32,"line":131},[30,98552,98553],{"class":379},"#axis=2\n",[30,98555,98556,98558,98560,98562,98564],{"class":32,"line":142},[30,98557,98498],{"class":321},[30,98559,47652],{"class":5398},[30,98561,367],{"class":317},[30,98563,398],{"class":40},[30,98565,98566],{"class":321},").shape\n",[30,98568,98569],{"class":32,"line":1811},[30,98570,98571],{"class":379},"#输出：（2，3，12）\n",[157,98573,98574],{},"⑤四维数组拼接",[20,98576,98578],{"className":30516,"code":98577,"language":30518,"meta":25,"style":25},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\naaaa=aaa.reshape(2,3,3,2)\nbbbb=bbb.reshape(2,3,3,2)\n#axis=0\nnp.concatenate((aaaa,bbbb),axis=0).shape\n#结果：（4，3，3，2）\n#axis=1\nnp.concatenate((aaaa,bbbb),axis=1).shape\n#结果：（2，6，3，2）\n#axis=2\nnp.concatenate((aaaa,bbbb),axis=2).shape\n#结果：（2，3，6，2）\n#axis=3\nnp.concatenate((aaaa,bbbb),axis=3).shape\n#结果：（2，3，3，4）\n",[27,98579,98580,98584,98612,98640,98665,98691,98695,98708,98713,98717,98729,98734,98738,98750,98755,98760,98772],{"__ignoreMap":25},[30,98581,98582],{"class":32,"line":33},[30,98583,98426],{"class":379},[30,98585,98586,98588,98590,98592,98594,98596,98598,98600,98602,98604,98606,98608,98610],{"class":32,"line":44},[30,98587,95659],{"class":321},[30,98589,367],{"class":317},[30,98591,93140],{"class":321},[30,98593,537],{"class":40},[30,98595,698],{"class":321},[30,98597,645],{"class":40},[30,98599,93145],{"class":321},[30,98601,398],{"class":40},[30,98603,698],{"class":321},[30,98605,392],{"class":40},[30,98607,698],{"class":321},[30,98609,664],{"class":40},[30,98611,328],{"class":321},[30,98613,98614,98616,98618,98620,98622,98624,98626,98628,98630,98632,98634,98636,98638],{"class":32,"line":52},[30,98615,98459],{"class":321},[30,98617,367],{"class":317},[30,98619,93140],{"class":321},[30,98621,657],{"class":40},[30,98623,698],{"class":321},[30,98625,98470],{"class":40},[30,98627,93145],{"class":321},[30,98629,398],{"class":40},[30,98631,698],{"class":321},[30,98633,392],{"class":40},[30,98635,698],{"class":321},[30,98637,664],{"class":40},[30,98639,328],{"class":321},[30,98641,98642,98645,98647,98649,98651,98653,98655,98657,98659,98661,98663],{"class":32,"line":60},[30,98643,98644],{"class":321},"aaaa",[30,98646,367],{"class":317},[30,98648,97808],{"class":321},[30,98650,398],{"class":40},[30,98652,698],{"class":321},[30,98654,392],{"class":40},[30,98656,698],{"class":321},[30,98658,392],{"class":40},[30,98660,698],{"class":321},[30,98662,398],{"class":40},[30,98664,328],{"class":321},[30,98666,98667,98670,98672,98675,98677,98679,98681,98683,98685,98687,98689],{"class":32,"line":68},[30,98668,98669],{"class":321},"bbbb",[30,98671,367],{"class":317},[30,98673,98674],{"class":321},"bbb.reshape(",[30,98676,398],{"class":40},[30,98678,698],{"class":321},[30,98680,392],{"class":40},[30,98682,698],{"class":321},[30,98684,392],{"class":40},[30,98686,698],{"class":321},[30,98688,398],{"class":40},[30,98690,328],{"class":321},[30,98692,98693],{"class":32,"line":80},[30,98694,98489],{"class":379},[30,98696,98697,98700,98702,98704,98706],{"class":32,"line":88},[30,98698,98699],{"class":321},"np.concatenate((aaaa,bbbb),",[30,98701,47652],{"class":5398},[30,98703,367],{"class":317},[30,98705,511],{"class":40},[30,98707,98566],{"class":321},[30,98709,98710],{"class":32,"line":96},[30,98711,98712],{"class":379},"#结果：（4，3，3，2）\n",[30,98714,98715],{"class":32,"line":104},[30,98716,98521],{"class":379},[30,98718,98719,98721,98723,98725,98727],{"class":32,"line":112},[30,98720,98699],{"class":321},[30,98722,47652],{"class":5398},[30,98724,367],{"class":317},[30,98726,537],{"class":40},[30,98728,98566],{"class":321},[30,98730,98731],{"class":32,"line":123},[30,98732,98733],{"class":379},"#结果：（2，6，3，2）\n",[30,98735,98736],{"class":32,"line":131},[30,98737,98553],{"class":379},[30,98739,98740,98742,98744,98746,98748],{"class":32,"line":142},[30,98741,98699],{"class":321},[30,98743,47652],{"class":5398},[30,98745,367],{"class":317},[30,98747,398],{"class":40},[30,98749,98566],{"class":321},[30,98751,98752],{"class":32,"line":1811},[30,98753,98754],{"class":379},"#结果：（2，3，6，2）\n",[30,98756,98757],{"class":32,"line":1825},[30,98758,98759],{"class":379},"#axis=3\n",[30,98761,98762,98764,98766,98768,98770],{"class":32,"line":1830},[30,98763,98699],{"class":321},[30,98765,47652],{"class":5398},[30,98767,367],{"class":317},[30,98769,392],{"class":40},[30,98771,98566],{"class":321},[30,98773,98774],{"class":32,"line":1836},[30,98775,98776],{"class":379},"#结果：（2，3，3，4）\n",[15,98778,98780],{"id":98779},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[157,98782,98783],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[157,98785,98786],{},"①二维数组",[20,98788,98790],{"className":30516,"code":98789,"language":30518,"meta":25,"style":25},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\nnp.hstack((aa,bb))\n#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n#np.hstack([aa,bb])\n",[27,98791,98792,98816,98840,98845,98850],{"__ignoreMap":25},[30,98793,98794,98796,98798,98800,98802,98804,98806,98808,98810,98812,98814],{"class":32,"line":33},[30,98795,93444],{"class":321},[30,98797,367],{"class":317},[30,98799,93140],{"class":321},[30,98801,537],{"class":40},[30,98803,698],{"class":321},[30,98805,843],{"class":40},[30,98807,93145],{"class":321},[30,98809,392],{"class":40},[30,98811,698],{"class":321},[30,98813,613],{"class":40},[30,98815,328],{"class":321},[30,98817,98818,98820,98822,98824,98826,98828,98830,98832,98834,98836,98838],{"class":32,"line":44},[30,98819,98325],{"class":321},[30,98821,367],{"class":317},[30,98823,93140],{"class":321},[30,98825,657],{"class":40},[30,98827,698],{"class":321},[30,98829,962],{"class":40},[30,98831,93145],{"class":321},[30,98833,392],{"class":40},[30,98835,698],{"class":321},[30,98837,613],{"class":40},[30,98839,328],{"class":321},[30,98841,98842],{"class":32,"line":52},[30,98843,98844],{"class":321},"np.hstack((aa,bb))\n",[30,98846,98847],{"class":32,"line":60},[30,98848,98849],{"class":379},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[30,98851,98852],{"class":32,"line":68},[30,98853,98854],{"class":379},"#np.hstack([aa,bb])\n",[157,98856,98371],{},[157,98858,98859],{},[160,98860],{"alt":25,"src":98861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[157,98863,98864],{},"等效于concatenate()函数中axis=1时的情况",[157,98866,98867],{},"②三维数组",[20,98869,98871],{"className":30516,"code":98870,"language":30518,"meta":25,"style":25},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用hstack\nnp.hstack((aaa,bbb)).shape\n#输出：（2，6，6）\n",[27,98872,98873,98877,98905,98933,98938,98943],{"__ignoreMap":25},[30,98874,98875],{"class":32,"line":33},[30,98876,98426],{"class":379},[30,98878,98879,98881,98883,98885,98887,98889,98891,98893,98895,98897,98899,98901,98903],{"class":32,"line":44},[30,98880,95659],{"class":321},[30,98882,367],{"class":317},[30,98884,93140],{"class":321},[30,98886,537],{"class":40},[30,98888,698],{"class":321},[30,98890,645],{"class":40},[30,98892,93145],{"class":321},[30,98894,398],{"class":40},[30,98896,698],{"class":321},[30,98898,392],{"class":40},[30,98900,698],{"class":321},[30,98902,664],{"class":40},[30,98904,328],{"class":321},[30,98906,98907,98909,98911,98913,98915,98917,98919,98921,98923,98925,98927,98929,98931],{"class":32,"line":52},[30,98908,98459],{"class":321},[30,98910,367],{"class":317},[30,98912,93140],{"class":321},[30,98914,657],{"class":40},[30,98916,698],{"class":321},[30,98918,98470],{"class":40},[30,98920,93145],{"class":321},[30,98922,398],{"class":40},[30,98924,698],{"class":321},[30,98926,392],{"class":40},[30,98928,698],{"class":321},[30,98930,664],{"class":40},[30,98932,328],{"class":321},[30,98934,98935],{"class":32,"line":60},[30,98936,98937],{"class":379},"#使用hstack\n",[30,98939,98940],{"class":32,"line":68},[30,98941,98942],{"class":321},"np.hstack((aaa,bbb)).shape\n",[30,98944,98945],{"class":32,"line":80},[30,98946,98947],{"class":379},"#输出：（2，6，6）\n",[15,98949,98951],{"id":98950},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[157,98953,98954],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[157,98956,98786],{},[20,98958,98960],{"className":30516,"code":98959,"language":30518,"meta":25,"style":25},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#vstack 垂直方向进行堆叠\nnp.vstack((aa,bb))\n#与hstack传的参数类似，等价于：\nnp.vstack([aa,bb])\n",[27,98961,98962,98986,99010,99015,99020,99025],{"__ignoreMap":25},[30,98963,98964,98966,98968,98970,98972,98974,98976,98978,98980,98982,98984],{"class":32,"line":33},[30,98965,93444],{"class":321},[30,98967,367],{"class":317},[30,98969,93140],{"class":321},[30,98971,537],{"class":40},[30,98973,698],{"class":321},[30,98975,843],{"class":40},[30,98977,93145],{"class":321},[30,98979,392],{"class":40},[30,98981,698],{"class":321},[30,98983,613],{"class":40},[30,98985,328],{"class":321},[30,98987,98988,98990,98992,98994,98996,98998,99000,99002,99004,99006,99008],{"class":32,"line":44},[30,98989,98325],{"class":321},[30,98991,367],{"class":317},[30,98993,93140],{"class":321},[30,98995,657],{"class":40},[30,98997,698],{"class":321},[30,98999,962],{"class":40},[30,99001,93145],{"class":321},[30,99003,392],{"class":40},[30,99005,698],{"class":321},[30,99007,613],{"class":40},[30,99009,328],{"class":321},[30,99011,99012],{"class":32,"line":52},[30,99013,99014],{"class":379},"#vstack 垂直方向进行堆叠\n",[30,99016,99017],{"class":32,"line":60},[30,99018,99019],{"class":321},"np.vstack((aa,bb))\n",[30,99021,99022],{"class":32,"line":68},[30,99023,99024],{"class":379},"#与hstack传的参数类似，等价于：\n",[30,99026,99027],{"class":32,"line":80},[30,99028,99029],{"class":321},"np.vstack([aa,bb])\n",[157,99031,98371],{},[157,99033,99034],{},[160,99035],{"alt":25,"src":99036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[157,99038,98867],{},[20,99040,99042],{"className":30516,"code":99041,"language":30518,"meta":25,"style":25},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用vstack\nnp.vstack((aaa,bbb)).shape\n#输出：（4，3，6）\n",[27,99043,99044,99048,99076,99104,99109,99114],{"__ignoreMap":25},[30,99045,99046],{"class":32,"line":33},[30,99047,98426],{"class":379},[30,99049,99050,99052,99054,99056,99058,99060,99062,99064,99066,99068,99070,99072,99074],{"class":32,"line":44},[30,99051,95659],{"class":321},[30,99053,367],{"class":317},[30,99055,93140],{"class":321},[30,99057,537],{"class":40},[30,99059,698],{"class":321},[30,99061,645],{"class":40},[30,99063,93145],{"class":321},[30,99065,398],{"class":40},[30,99067,698],{"class":321},[30,99069,392],{"class":40},[30,99071,698],{"class":321},[30,99073,664],{"class":40},[30,99075,328],{"class":321},[30,99077,99078,99080,99082,99084,99086,99088,99090,99092,99094,99096,99098,99100,99102],{"class":32,"line":52},[30,99079,98459],{"class":321},[30,99081,367],{"class":317},[30,99083,93140],{"class":321},[30,99085,657],{"class":40},[30,99087,698],{"class":321},[30,99089,98470],{"class":40},[30,99091,93145],{"class":321},[30,99093,398],{"class":40},[30,99095,698],{"class":321},[30,99097,392],{"class":40},[30,99099,698],{"class":321},[30,99101,664],{"class":40},[30,99103,328],{"class":321},[30,99105,99106],{"class":32,"line":60},[30,99107,99108],{"class":379},"#使用vstack\n",[30,99110,99111],{"class":32,"line":68},[30,99112,99113],{"class":321},"np.vstack((aaa,bbb)).shape\n",[30,99115,99116],{"class":32,"line":80},[30,99117,99118],{"class":379},"#输出：（4，3，6）\n",[15,99120,99122],{"id":99121},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[157,99124,99125],{},"该方法是三维数组特有的方法",[157,99127,99128],{},"也就是说",[157,99130,99131],{},"一维数组拼接方法用：concatenate()",[157,99133,99134],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[157,99136,99137],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[157,99139,99140],{},"四维数组及多维数组只能用concatenate进行拼接",[20,99142,99144],{"className":30516,"code":99143,"language":30518,"meta":25,"style":25},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用dstack\nnp.dstack((aaa,bbb)).shape\n#结果：（2，3，12）\n",[27,99145,99146,99150,99178,99206,99211,99216],{"__ignoreMap":25},[30,99147,99148],{"class":32,"line":33},[30,99149,98426],{"class":379},[30,99151,99152,99154,99156,99158,99160,99162,99164,99166,99168,99170,99172,99174,99176],{"class":32,"line":44},[30,99153,95659],{"class":321},[30,99155,367],{"class":317},[30,99157,93140],{"class":321},[30,99159,537],{"class":40},[30,99161,698],{"class":321},[30,99163,645],{"class":40},[30,99165,93145],{"class":321},[30,99167,398],{"class":40},[30,99169,698],{"class":321},[30,99171,392],{"class":40},[30,99173,698],{"class":321},[30,99175,664],{"class":40},[30,99177,328],{"class":321},[30,99179,99180,99182,99184,99186,99188,99190,99192,99194,99196,99198,99200,99202,99204],{"class":32,"line":52},[30,99181,98459],{"class":321},[30,99183,367],{"class":317},[30,99185,93140],{"class":321},[30,99187,657],{"class":40},[30,99189,698],{"class":321},[30,99191,98470],{"class":40},[30,99193,93145],{"class":321},[30,99195,398],{"class":40},[30,99197,698],{"class":321},[30,99199,392],{"class":40},[30,99201,698],{"class":321},[30,99203,664],{"class":40},[30,99205,328],{"class":321},[30,99207,99208],{"class":32,"line":60},[30,99209,99210],{"class":379},"#使用dstack\n",[30,99212,99213],{"class":32,"line":68},[30,99214,99215],{"class":321},"np.dstack((aaa,bbb)).shape\n",[30,99217,99218],{"class":32,"line":80},[30,99219,99220],{"class":379},"#结果：（2，3，12）\n",[234,99222,99223],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":99225},[99226,99227,99228,99229],{"id":98165,"depth":44,"text":98166},{"id":98779,"depth":44,"text":98780},{"id":98950,"depth":44,"text":98951},{"id":99121,"depth":44,"text":99122},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98157,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99236,"title":99237,"body":99238,"description":242,"extension":243,"meta":99513,"navigation":245,"path":99514,"seo":99515,"stem":99516,"__hash__":99517},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99239,"toc":99511},[99240,99243,99246,99340,99343,99346,99349,99352,99355,99358,99361,99364,99508],[10,99241,99237],{"id":99242},"_7数组转置",[157,99244,99245],{},"使用transpose()函数",[20,99247,99249],{"className":30516,"code":99248,"language":30518,"meta":25,"style":25},"import numpy as np\na= np.arange(1,13).reshape(4,3)\n#二维数组转置\n#调用transpose()函数\na.transpose()\n#对于二维数组也可以采用.T来实现\na.T#与上述代码一样\n#结果：\n'''\narray([[ 1,  4,  7, 10],\n       [ 2,  5,  8, 11],\n       [ 3,  6,  9, 12]])\n'''\n",[27,99250,99251,99261,99285,99290,99295,99300,99305,99313,99317,99321,99326,99331,99336],{"__ignoreMap":25},[30,99252,99253,99255,99257,99259],{"class":32,"line":33},[30,99254,30530],{"class":317},[30,99256,31518],{"class":321},[30,99258,31521],{"class":317},[30,99260,31524],{"class":321},[30,99262,99263,99265,99267,99269,99271,99273,99275,99277,99279,99281,99283],{"class":32,"line":44},[30,99264,558],{"class":321},[30,99266,367],{"class":317},[30,99268,31855],{"class":321},[30,99270,537],{"class":40},[30,99272,698],{"class":321},[30,99274,843],{"class":40},[30,99276,93145],{"class":321},[30,99278,613],{"class":40},[30,99280,698],{"class":321},[30,99282,392],{"class":40},[30,99284,328],{"class":321},[30,99286,99287],{"class":32,"line":52},[30,99288,99289],{"class":379},"#二维数组转置\n",[30,99291,99292],{"class":32,"line":60},[30,99293,99294],{"class":379},"#调用transpose()函数\n",[30,99296,99297],{"class":32,"line":68},[30,99298,99299],{"class":321},"a.transpose()\n",[30,99301,99302],{"class":32,"line":80},[30,99303,99304],{"class":379},"#对于二维数组也可以采用.T来实现\n",[30,99306,99307,99310],{"class":32,"line":88},[30,99308,99309],{"class":321},"a.T",[30,99311,99312],{"class":379},"#与上述代码一样\n",[30,99314,99315],{"class":32,"line":96},[30,99316,93702],{"class":379},[30,99318,99319],{"class":32,"line":104},[30,99320,94066],{"class":74},[30,99322,99323],{"class":32,"line":112},[30,99324,99325],{"class":74},"array([[ 1,  4,  7, 10],\n",[30,99327,99328],{"class":32,"line":123},[30,99329,99330],{"class":74},"       [ 2,  5,  8, 11],\n",[30,99332,99333],{"class":32,"line":131},[30,99334,99335],{"class":74},"       [ 3,  6,  9, 12]])\n",[30,99337,99338],{"class":32,"line":142},[30,99339,94066],{"class":74},[157,99341,99342],{},"也可以使用np.transpose()的形式",[157,99344,99345],{},"#多维数组进行转置 np.transpose()",[157,99347,99348],{},"#对二维数组也可以使用np.transpose()进行转置",[157,99350,99351],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[157,99353,99354],{},"第二个参数，维度可以理解为用axis中的数来理解",[157,99356,99357],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[157,99359,99360],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[157,99362,99363],{},"四维及以上的数组也是一样的道理",[20,99365,99367],{"className":30516,"code":99366,"language":30518,"meta":25,"style":25},"x=np.arange(1,37).reshape(3,6,2)\nx.shape\n#结果：（3,6,2）\n#使用np.transpose()进行转置 变为(2,6,3)\nnp.transpose(x,(2,1,0)).shape\n#结果：(2,6,3)\naaaa=np.arange(1,37).reshape(3,2,1,6)\naaaa.shape\n#结果：（3，2，1，6）\n#使用np.transpose()进行转置 变为(2,1,3,6)\nnp.transpose(aaaa,(1,2,0,3)).shape\n#结果：(2,1,3,6)\n",[27,99368,99369,99397,99402,99407,99412,99430,99435,99467,99472,99477,99482,99503],{"__ignoreMap":25},[30,99370,99371,99373,99375,99377,99379,99381,99383,99385,99387,99389,99391,99393,99395],{"class":32,"line":33},[30,99372,1140],{"class":321},[30,99374,367],{"class":317},[30,99376,93140],{"class":321},[30,99378,537],{"class":40},[30,99380,698],{"class":321},[30,99382,645],{"class":40},[30,99384,93145],{"class":321},[30,99386,392],{"class":40},[30,99388,698],{"class":321},[30,99390,664],{"class":40},[30,99392,698],{"class":321},[30,99394,398],{"class":40},[30,99396,328],{"class":321},[30,99398,99399],{"class":32,"line":44},[30,99400,99401],{"class":321},"x.shape\n",[30,99403,99404],{"class":32,"line":52},[30,99405,99406],{"class":379},"#结果：（3,6,2）\n",[30,99408,99409],{"class":32,"line":60},[30,99410,99411],{"class":379},"#使用np.transpose()进行转置 变为(2,6,3)\n",[30,99413,99414,99417,99419,99421,99423,99425,99427],{"class":32,"line":68},[30,99415,99416],{"class":321},"np.transpose(x,(",[30,99418,398],{"class":40},[30,99420,698],{"class":321},[30,99422,537],{"class":40},[30,99424,698],{"class":321},[30,99426,511],{"class":40},[30,99428,99429],{"class":321},")).shape\n",[30,99431,99432],{"class":32,"line":80},[30,99433,99434],{"class":379},"#结果：(2,6,3)\n",[30,99436,99437,99439,99441,99443,99445,99447,99449,99451,99453,99455,99457,99459,99461,99463,99465],{"class":32,"line":88},[30,99438,98644],{"class":321},[30,99440,367],{"class":317},[30,99442,93140],{"class":321},[30,99444,537],{"class":40},[30,99446,698],{"class":321},[30,99448,645],{"class":40},[30,99450,93145],{"class":321},[30,99452,392],{"class":40},[30,99454,698],{"class":321},[30,99456,398],{"class":40},[30,99458,698],{"class":321},[30,99460,537],{"class":40},[30,99462,698],{"class":321},[30,99464,664],{"class":40},[30,99466,328],{"class":321},[30,99468,99469],{"class":32,"line":96},[30,99470,99471],{"class":321},"aaaa.shape\n",[30,99473,99474],{"class":32,"line":104},[30,99475,99476],{"class":379},"#结果：（3，2，1，6）\n",[30,99478,99479],{"class":32,"line":112},[30,99480,99481],{"class":379},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[30,99483,99484,99487,99489,99491,99493,99495,99497,99499,99501],{"class":32,"line":123},[30,99485,99486],{"class":321},"np.transpose(aaaa,(",[30,99488,537],{"class":40},[30,99490,698],{"class":321},[30,99492,398],{"class":40},[30,99494,698],{"class":321},[30,99496,511],{"class":40},[30,99498,698],{"class":321},[30,99500,392],{"class":40},[30,99502,99429],{"class":321},[30,99504,99505],{"class":32,"line":131},[30,99506,99507],{"class":379},"#结果：(2,1,3,6)\n",[234,99509,99510],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":99512},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99237,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99519,"title":99520,"body":99521,"description":242,"extension":243,"meta":100255,"navigation":245,"path":100256,"seo":100257,"stem":100258,"__hash__":100259},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99522,"toc":100253},[99523,99526,99529,99532,99535,99538,99541,99544,99547,99656,99659,99662,100250],[10,99524,99520],{"id":99525},"_8数组分割",[157,99527,99528],{},"split分割",[157,99530,99531],{},"numpy.split(ary,indics_or_sections,axis)",[157,99533,99534],{},"解释：",[157,99536,99537],{},"ary:被分割的数组",[157,99539,99540],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[157,99542,99543],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[157,99545,99546],{},"①一维数组的分割",[20,99548,99550],{"className":30516,"code":99549,"language":30518,"meta":25,"style":25},"a=np.arange(1,9)\n#如果传入整数，必须能够平分，否则会报错\nnp.split(a,2)\n#结果：\n#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\nnp.split(a,4)\n#结果：\n#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n#传入数组\nnp.split(a,[3,5])\n#结果：\n#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\nnp.split(a,[5,7])\n#结果：\n#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[27,99551,99552,99568,99573,99582,99586,99591,99599,99603,99608,99613,99626,99630,99635,99647,99651],{"__ignoreMap":25},[30,99553,99554,99556,99558,99560,99562,99564,99566],{"class":32,"line":33},[30,99555,558],{"class":321},[30,99557,367],{"class":317},[30,99559,93140],{"class":321},[30,99561,537],{"class":40},[30,99563,698],{"class":321},[30,99565,740],{"class":40},[30,99567,328],{"class":321},[30,99569,99570],{"class":32,"line":44},[30,99571,99572],{"class":379},"#如果传入整数，必须能够平分，否则会报错\n",[30,99574,99575,99578,99580],{"class":32,"line":52},[30,99576,99577],{"class":321},"np.split(a,",[30,99579,398],{"class":40},[30,99581,328],{"class":321},[30,99583,99584],{"class":32,"line":60},[30,99585,93702],{"class":379},[30,99587,99588],{"class":32,"line":68},[30,99589,99590],{"class":379},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[30,99592,99593,99595,99597],{"class":32,"line":80},[30,99594,99577],{"class":321},[30,99596,613],{"class":40},[30,99598,328],{"class":321},[30,99600,99601],{"class":32,"line":88},[30,99602,93702],{"class":379},[30,99604,99605],{"class":32,"line":96},[30,99606,99607],{"class":379},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[30,99609,99610],{"class":32,"line":104},[30,99611,99612],{"class":379},"#传入数组\n",[30,99614,99615,99618,99620,99622,99624],{"class":32,"line":112},[30,99616,99617],{"class":321},"np.split(a,[",[30,99619,392],{"class":40},[30,99621,698],{"class":321},[30,99623,639],{"class":40},[30,99625,4839],{"class":321},[30,99627,99628],{"class":32,"line":123},[30,99629,93702],{"class":379},[30,99631,99632],{"class":32,"line":131},[30,99633,99634],{"class":379},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[30,99636,99637,99639,99641,99643,99645],{"class":32,"line":142},[30,99638,99617],{"class":321},[30,99640,639],{"class":40},[30,99642,698],{"class":321},[30,99644,689],{"class":40},[30,99646,4839],{"class":321},[30,99648,99649],{"class":32,"line":1811},[30,99650,93702],{"class":379},[30,99652,99653],{"class":32,"line":1825},[30,99654,99655],{"class":379},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[157,99657,99658],{},"②二维数组的分割",[157,99660,99661],{},"使用split()",[20,99663,99665],{"className":30516,"code":99664,"language":30518,"meta":25,"style":25},"#二维数组分割\naa=np.arange(1,37).reshape(6,6)\n#默认axis=0  传入整数平均分,按行来的\nnp.split(aa,3)\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n '''\n#传入数组\nnp.split(aa,[2,5])\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n'''\n#axis=1 按照列来分\nnp.split(aa,3,axis=1)\n#输出结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n '''\n#传入数组\nnp.split(aa,[1,2],axis=1)\n#结果：\n'''\n[array([[ 1],\n        [ 7],\n        [13],\n        [19],\n        [25],\n        [31]]),\n array([[ 2],\n        [ 8],\n        [14],\n        [20],\n        [26],\n        [32]]),\n array([[ 3,  4,  5,  6],\n        [ 9, 10, 11, 12],\n        [15, 16, 17, 18],\n        [21, 22, 23, 24],\n        [27, 28, 29, 30],\n        [33, 34, 35, 36]])]\n'''\n#在处理二维数组时也可以直接用vsplit()和hsplit()函数\nnp.vsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n'''\nnp.hsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n'''\nnp.vsplit(aa,[2,5])\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n '''\n",[27,99666,99667,99672,99696,99701,99710,99714,99718,99723,99728,99733,99738,99743,99748,99753,99757,99770,99774,99778,99782,99786,99790,99795,99800,99805,99809,99814,99830,99834,99838,99843,99848,99853,99858,99863,99868,99873,99878,99883,99888,99893,99898,99903,99908,99913,99918,99923,99928,99932,99936,99956,99960,99964,99969,99974,99979,99984,99989,99994,99999,100004,100009,100014,100019,100024,100029,100034,100039,100044,100049,100054,100058,100063,100072,100076,100080,100084,100088,100092,100096,100100,100104,100108,100117,100121,100125,100129,100133,100137,100141,100145,100149,100153,100157,100161,100165,100169,100173,100177,100181,100185,100189,100193,100197,100201,100214,100218,100222,100226,100230,100234,100238,100242,100246],{"__ignoreMap":25},[30,99668,99669],{"class":32,"line":33},[30,99670,99671],{"class":379},"#二维数组分割\n",[30,99673,99674,99676,99678,99680,99682,99684,99686,99688,99690,99692,99694],{"class":32,"line":44},[30,99675,93444],{"class":321},[30,99677,367],{"class":317},[30,99679,93140],{"class":321},[30,99681,537],{"class":40},[30,99683,698],{"class":321},[30,99685,645],{"class":40},[30,99687,93145],{"class":321},[30,99689,664],{"class":40},[30,99691,698],{"class":321},[30,99693,664],{"class":40},[30,99695,328],{"class":321},[30,99697,99698],{"class":32,"line":52},[30,99699,99700],{"class":379},"#默认axis=0  传入整数平均分,按行来的\n",[30,99702,99703,99706,99708],{"class":32,"line":60},[30,99704,99705],{"class":321},"np.split(aa,",[30,99707,392],{"class":40},[30,99709,328],{"class":321},[30,99711,99712],{"class":32,"line":68},[30,99713,95902],{"class":379},[30,99715,99716],{"class":32,"line":80},[30,99717,94066],{"class":74},[30,99719,99720],{"class":32,"line":88},[30,99721,99722],{"class":74},"[array([[ 1,  2,  3,  4,  5,  6],\n",[30,99724,99725],{"class":32,"line":96},[30,99726,99727],{"class":74},"        [ 7,  8,  9, 10, 11, 12]]),\n",[30,99729,99730],{"class":32,"line":104},[30,99731,99732],{"class":74}," array([[13, 14, 15, 16, 17, 18],\n",[30,99734,99735],{"class":32,"line":112},[30,99736,99737],{"class":74},"        [19, 20, 21, 22, 23, 24]]),\n",[30,99739,99740],{"class":32,"line":123},[30,99741,99742],{"class":74}," array([[25, 26, 27, 28, 29, 30],\n",[30,99744,99745],{"class":32,"line":131},[30,99746,99747],{"class":74},"        [31, 32, 33, 34, 35, 36]])]\n",[30,99749,99750],{"class":32,"line":142},[30,99751,99752],{"class":74}," '''\n",[30,99754,99755],{"class":32,"line":1811},[30,99756,99612],{"class":379},[30,99758,99759,99762,99764,99766,99768],{"class":32,"line":1825},[30,99760,99761],{"class":321},"np.split(aa,[",[30,99763,398],{"class":40},[30,99765,698],{"class":321},[30,99767,639],{"class":40},[30,99769,4839],{"class":321},[30,99771,99772],{"class":32,"line":1830},[30,99773,95902],{"class":379},[30,99775,99776],{"class":32,"line":1836},[30,99777,94066],{"class":74},[30,99779,99780],{"class":32,"line":1857},[30,99781,99722],{"class":74},[30,99783,99784],{"class":32,"line":1862},[30,99785,99727],{"class":74},[30,99787,99788],{"class":32,"line":1876},[30,99789,99732],{"class":74},[30,99791,99792],{"class":32,"line":1881},[30,99793,99794],{"class":74},"        [19, 20, 21, 22, 23, 24],\n",[30,99796,99797],{"class":32,"line":1910},[30,99798,99799],{"class":74},"        [25, 26, 27, 28, 29, 30]]),\n",[30,99801,99802],{"class":32,"line":1915},[30,99803,99804],{"class":74}," array([[31, 32, 33, 34, 35, 36]])]\n",[30,99806,99807],{"class":32,"line":1932},[30,99808,94066],{"class":74},[30,99810,99811],{"class":32,"line":1937},[30,99812,99813],{"class":379},"#axis=1 按照列来分\n",[30,99815,99816,99818,99820,99822,99824,99826,99828],{"class":32,"line":1942},[30,99817,99705],{"class":321},[30,99819,392],{"class":40},[30,99821,698],{"class":321},[30,99823,47652],{"class":5398},[30,99825,367],{"class":317},[30,99827,537],{"class":40},[30,99829,328],{"class":321},[30,99831,99832],{"class":32,"line":1947},[30,99833,95902],{"class":379},[30,99835,99836],{"class":32,"line":1961},[30,99837,94066],{"class":74},[30,99839,99840],{"class":32,"line":1966},[30,99841,99842],{"class":74},"[array([[ 1,  2],\n",[30,99844,99845],{"class":32,"line":2759},[30,99846,99847],{"class":74},"        [ 7,  8],\n",[30,99849,99850],{"class":32,"line":2773},[30,99851,99852],{"class":74},"        [13, 14],\n",[30,99854,99855],{"class":32,"line":2781},[30,99856,99857],{"class":74},"        [19, 20],\n",[30,99859,99860],{"class":32,"line":2786},[30,99861,99862],{"class":74},"        [25, 26],\n",[30,99864,99865],{"class":32,"line":2792},[30,99866,99867],{"class":74},"        [31, 32]]),\n",[30,99869,99870],{"class":32,"line":2798},[30,99871,99872],{"class":74}," array([[ 3,  4],\n",[30,99874,99875],{"class":32,"line":2803},[30,99876,99877],{"class":74},"        [ 9, 10],\n",[30,99879,99880],{"class":32,"line":8130},[30,99881,99882],{"class":74},"        [15, 16],\n",[30,99884,99885],{"class":32,"line":8154},[30,99886,99887],{"class":74},"        [21, 22],\n",[30,99889,99890],{"class":32,"line":8159},[30,99891,99892],{"class":74},"        [27, 28],\n",[30,99894,99895],{"class":32,"line":8165},[30,99896,99897],{"class":74},"        [33, 34]]),\n",[30,99899,99900],{"class":32,"line":8192},[30,99901,99902],{"class":74}," array([[ 5,  6],\n",[30,99904,99905],{"class":32,"line":8197},[30,99906,99907],{"class":74},"        [11, 12],\n",[30,99909,99910],{"class":32,"line":8203},[30,99911,99912],{"class":74},"        [17, 18],\n",[30,99914,99915],{"class":32,"line":8215},[30,99916,99917],{"class":74},"        [23, 24],\n",[30,99919,99920],{"class":32,"line":8227},[30,99921,99922],{"class":74},"        [29, 30],\n",[30,99924,99925],{"class":32,"line":8239},[30,99926,99927],{"class":74},"        [35, 36]])]\n",[30,99929,99930],{"class":32,"line":9898},[30,99931,99752],{"class":74},[30,99933,99934],{"class":32,"line":9923},[30,99935,99612],{"class":379},[30,99937,99938,99940,99942,99944,99946,99948,99950,99952,99954],{"class":32,"line":9946},[30,99939,99761],{"class":321},[30,99941,537],{"class":40},[30,99943,698],{"class":321},[30,99945,398],{"class":40},[30,99947,41747],{"class":321},[30,99949,47652],{"class":5398},[30,99951,367],{"class":317},[30,99953,537],{"class":40},[30,99955,328],{"class":321},[30,99957,99958],{"class":32,"line":9970},[30,99959,93702],{"class":379},[30,99961,99962],{"class":32,"line":9975},[30,99963,94066],{"class":74},[30,99965,99966],{"class":32,"line":9980},[30,99967,99968],{"class":74},"[array([[ 1],\n",[30,99970,99971],{"class":32,"line":9985},[30,99972,99973],{"class":74},"        [ 7],\n",[30,99975,99976],{"class":32,"line":9994},[30,99977,99978],{"class":74},"        [13],\n",[30,99980,99981],{"class":32,"line":9999},[30,99982,99983],{"class":74},"        [19],\n",[30,99985,99986],{"class":32,"line":10005},[30,99987,99988],{"class":74},"        [25],\n",[30,99990,99991],{"class":32,"line":10026},[30,99992,99993],{"class":74},"        [31]]),\n",[30,99995,99996],{"class":32,"line":10032},[30,99997,99998],{"class":74}," array([[ 2],\n",[30,100000,100001],{"class":32,"line":10046},[30,100002,100003],{"class":74},"        [ 8],\n",[30,100005,100006],{"class":32,"line":10052},[30,100007,100008],{"class":74},"        [14],\n",[30,100010,100011],{"class":32,"line":10079},[30,100012,100013],{"class":74},"        [20],\n",[30,100015,100016],{"class":32,"line":10088},[30,100017,100018],{"class":74},"        [26],\n",[30,100020,100021],{"class":32,"line":10094},[30,100022,100023],{"class":74},"        [32]]),\n",[30,100025,100026],{"class":32,"line":10102},[30,100027,100028],{"class":74}," array([[ 3,  4,  5,  6],\n",[30,100030,100031],{"class":32,"line":10107},[30,100032,100033],{"class":74},"        [ 9, 10, 11, 12],\n",[30,100035,100036],{"class":32,"line":16786},[30,100037,100038],{"class":74},"        [15, 16, 17, 18],\n",[30,100040,100041],{"class":32,"line":16792},[30,100042,100043],{"class":74},"        [21, 22, 23, 24],\n",[30,100045,100046],{"class":32,"line":16815},[30,100047,100048],{"class":74},"        [27, 28, 29, 30],\n",[30,100050,100051],{"class":32,"line":16821},[30,100052,100053],{"class":74},"        [33, 34, 35, 36]])]\n",[30,100055,100056],{"class":32,"line":16844},[30,100057,94066],{"class":74},[30,100059,100060],{"class":32,"line":16858},[30,100061,100062],{"class":379},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[30,100064,100065,100068,100070],{"class":32,"line":16878},[30,100066,100067],{"class":321},"np.vsplit(aa,",[30,100069,392],{"class":40},[30,100071,328],{"class":321},[30,100073,100074],{"class":32,"line":16884},[30,100075,93702],{"class":379},[30,100077,100078],{"class":32,"line":16895},[30,100079,94066],{"class":74},[30,100081,100082],{"class":32,"line":16918},[30,100083,99722],{"class":74},[30,100085,100086],{"class":32,"line":16940},[30,100087,99727],{"class":74},[30,100089,100090],{"class":32,"line":16945},[30,100091,99732],{"class":74},[30,100093,100094],{"class":32,"line":16951},[30,100095,99737],{"class":74},[30,100097,100098],{"class":32,"line":16965},[30,100099,99742],{"class":74},[30,100101,100102],{"class":32,"line":16978},[30,100103,99747],{"class":74},[30,100105,100106],{"class":32,"line":16983},[30,100107,94066],{"class":74},[30,100109,100110,100113,100115],{"class":32,"line":16997},[30,100111,100112],{"class":321},"np.hsplit(aa,",[30,100114,392],{"class":40},[30,100116,328],{"class":321},[30,100118,100119],{"class":32,"line":17002},[30,100120,93702],{"class":379},[30,100122,100123],{"class":32,"line":17008},[30,100124,94066],{"class":74},[30,100126,100127],{"class":32,"line":17013},[30,100128,99842],{"class":74},[30,100130,100131],{"class":32,"line":17027},[30,100132,99847],{"class":74},[30,100134,100135],{"class":32,"line":17032},[30,100136,99852],{"class":74},[30,100138,100139],{"class":32,"line":17037},[30,100140,99857],{"class":74},[30,100142,100143],{"class":32,"line":17051},[30,100144,99862],{"class":74},[30,100146,100147],{"class":32,"line":17063},[30,100148,99867],{"class":74},[30,100150,100151],{"class":32,"line":17068},[30,100152,99872],{"class":74},[30,100154,100155],{"class":32,"line":17081},[30,100156,99877],{"class":74},[30,100158,100159],{"class":32,"line":17086},[30,100160,99882],{"class":74},[30,100162,100163],{"class":32,"line":17091},[30,100164,99887],{"class":74},[30,100166,100167],{"class":32,"line":17096},[30,100168,99892],{"class":74},[30,100170,100171],{"class":32,"line":17109},[30,100172,99897],{"class":74},[30,100174,100175],{"class":32,"line":17114},[30,100176,99902],{"class":74},[30,100178,100179],{"class":32,"line":32771},[30,100180,99907],{"class":74},[30,100182,100183],{"class":32,"line":32777},[30,100184,99912],{"class":74},[30,100186,100187],{"class":32,"line":32783},[30,100188,99917],{"class":74},[30,100190,100191],{"class":32,"line":32789},[30,100192,99922],{"class":74},[30,100194,100195],{"class":32,"line":32795},[30,100196,99927],{"class":74},[30,100198,100199],{"class":32,"line":32806},[30,100200,94066],{"class":74},[30,100202,100203,100206,100208,100210,100212],{"class":32,"line":32812},[30,100204,100205],{"class":321},"np.vsplit(aa,[",[30,100207,398],{"class":40},[30,100209,698],{"class":321},[30,100211,639],{"class":40},[30,100213,4839],{"class":321},[30,100215,100216],{"class":32,"line":32832},[30,100217,93702],{"class":379},[30,100219,100220],{"class":32,"line":32838},[30,100221,94066],{"class":74},[30,100223,100224],{"class":32,"line":32849},[30,100225,99722],{"class":74},[30,100227,100228],{"class":32,"line":32855},[30,100229,99727],{"class":74},[30,100231,100232],{"class":32,"line":32861},[30,100233,99732],{"class":74},[30,100235,100236],{"class":32,"line":32867},[30,100237,99794],{"class":74},[30,100239,100240],{"class":32,"line":32873},[30,100241,99799],{"class":74},[30,100243,100244],{"class":32,"line":32879},[30,100245,99804],{"class":74},[30,100247,100248],{"class":32,"line":32885},[30,100249,99752],{"class":74},[234,100251,100252],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":100254},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99520,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100261,"title":100262,"body":100263,"description":242,"extension":243,"meta":100757,"navigation":245,"path":100758,"seo":100759,"stem":100760,"__hash__":100761},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100264,"toc":100748},[100265,100268,100271,100296,100300,100359,100411,100415,100417,100453,100507,100509,100547,100618,100622,100627,100631,100634,100667,100670,100674,100677,100680,100683,100686,100691,100695,100698,100701,100704,100707,100712,100716,100721,100724,100745],[10,100266,100262],{"id":100267},"_9数学函数",[157,100269,100270],{},"补充回顾：python的列表推导式",[20,100272,100274],{"className":30516,"code":100273,"language":30518,"meta":25,"style":25},"[1\u002Fi for i in a]\n",[27,100275,100276],{"__ignoreMap":25},[30,100277,100278,100280,100282,100284,100287,100289,100291,100293],{"class":32,"line":33},[30,100279,1210],{"class":321},[30,100281,537],{"class":40},[30,100283,904],{"class":317},[30,100285,100286],{"class":321},"i ",[30,100288,3207],{"class":317},[30,100290,9620],{"class":321},[30,100292,26181],{"class":317},[30,100294,100295],{"class":321}," a]\n",[15,100297,100299],{"id":100298},"_91-求倒数","9.1 求倒数",[20,100301,100303],{"className":30516,"code":100302,"language":30518,"meta":25,"style":25},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[27,100304,100305,100310,100338,100350],{"__ignoreMap":25},[30,100306,100307],{"class":32,"line":33},[30,100308,100309],{"class":379},"#数组求倒数\n",[30,100311,100312,100314,100316,100318,100320,100322,100324,100326,100328,100330,100332,100334,100336],{"class":32,"line":44},[30,100313,558],{"class":321},[30,100315,367],{"class":317},[30,100317,1210],{"class":321},[30,100319,537],{"class":40},[30,100321,698],{"class":321},[30,100323,398],{"class":40},[30,100325,698],{"class":321},[30,100327,392],{"class":40},[30,100329,698],{"class":321},[30,100331,613],{"class":40},[30,100333,698],{"class":321},[30,100335,639],{"class":40},[30,100337,33384],{"class":321},[30,100339,100340,100342,100344,100347],{"class":32,"line":52},[30,100341,583],{"class":321},[30,100343,367],{"class":317},[30,100345,100346],{"class":321},"np.array(a)",[30,100348,100349],{"class":379},"#将列表转换为数组\n",[30,100351,100352,100354,100356],{"class":32,"line":60},[30,100353,537],{"class":40},[30,100355,904],{"class":317},[30,100357,100358],{"class":321},"b\n",[20,100360,100362],{"className":30516,"code":100361,"language":30518,"meta":25,"style":25},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[27,100363,100364,100392,100401,100406],{"__ignoreMap":25},[30,100365,100366,100368,100370,100372,100374,100376,100378,100380,100382,100384,100386,100388,100390],{"class":32,"line":33},[30,100367,558],{"class":321},[30,100369,367],{"class":317},[30,100371,1210],{"class":321},[30,100373,537],{"class":40},[30,100375,698],{"class":321},[30,100377,398],{"class":40},[30,100379,698],{"class":321},[30,100381,392],{"class":40},[30,100383,698],{"class":321},[30,100385,613],{"class":40},[30,100387,698],{"class":321},[30,100389,639],{"class":40},[30,100391,33384],{"class":321},[30,100393,100394,100396,100398],{"class":32,"line":44},[30,100395,583],{"class":321},[30,100397,367],{"class":317},[30,100399,100400],{"class":321},"np.array(a)\n",[30,100402,100403],{"class":32,"line":52},[30,100404,100405],{"class":379},"#调用numpy中的函数reciprocal()\n",[30,100407,100408],{"class":32,"line":60},[30,100409,100410],{"class":321},"np.reciprocal(b)\n",[15,100412,100414],{"id":100413},"_92-求平方","9.2 求平方",[157,100416,94668],{},[20,100418,100420],{"className":30516,"code":100419,"language":30518,"meta":25,"style":25},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[27,100421,100422,100427,100432,100448],{"__ignoreMap":25},[30,100423,100424],{"class":32,"line":33},[30,100425,100426],{"class":379},"#square()，求平方\n",[30,100428,100429],{"class":32,"line":44},[30,100430,100431],{"class":379},"#一维数组\n",[30,100433,100434,100436,100438,100440,100442,100444,100446],{"class":32,"line":52},[30,100435,558],{"class":321},[30,100437,367],{"class":317},[30,100439,93140],{"class":321},[30,100441,537],{"class":40},[30,100443,698],{"class":321},[30,100445,766],{"class":40},[30,100447,328],{"class":321},[30,100449,100450],{"class":32,"line":60},[30,100451,100452],{"class":321},"np.square(a)\n",[20,100454,100456],{"className":30516,"code":100455,"language":30518,"meta":25,"style":25},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[27,100457,100458,100463,100468,100489],{"__ignoreMap":25},[30,100459,100460],{"class":32,"line":33},[30,100461,100462],{"class":379},"#或者通过循环遍历的形式来计算\n",[30,100464,100465],{"class":32,"line":44},[30,100466,100467],{"class":379},"#这是一个列表\n",[30,100469,100470,100473,100475,100477,100479,100481,100483,100486],{"class":32,"line":52},[30,100471,100472],{"class":321},"[i",[30,100474,775],{"class":317},[30,100476,100286],{"class":321},[30,100478,3207],{"class":317},[30,100480,9620],{"class":321},[30,100482,26181],{"class":317},[30,100484,100485],{"class":321}," a]",[30,100487,100488],{"class":379},"#这个求完之后在数列当中\n",[30,100490,100491,100494,100496,100498,100500,100502,100504],{"class":32,"line":60},[30,100492,100493],{"class":321},"np.array([i",[30,100495,775],{"class":317},[30,100497,100286],{"class":321},[30,100499,3207],{"class":317},[30,100501,9620],{"class":321},[30,100503,26181],{"class":317},[30,100505,100506],{"class":321}," a])\n",[157,100508,93429],{},[20,100510,100512],{"className":30516,"code":100511,"language":30518,"meta":25,"style":25},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[27,100513,100514,100518,100542],{"__ignoreMap":25},[30,100515,100516],{"class":32,"line":33},[30,100517,93439],{"class":379},[30,100519,100520,100522,100524,100526,100528,100530,100532,100534,100536,100538,100540],{"class":32,"line":44},[30,100521,93444],{"class":321},[30,100523,367],{"class":317},[30,100525,93140],{"class":321},[30,100527,537],{"class":40},[30,100529,698],{"class":321},[30,100531,843],{"class":40},[30,100533,93145],{"class":321},[30,100535,613],{"class":40},[30,100537,698],{"class":321},[30,100539,392],{"class":40},[30,100541,328],{"class":321},[30,100543,100544],{"class":32,"line":52},[30,100545,100546],{"class":321},"np.square(aa)\n",[20,100548,100550],{"className":30516,"code":100549,"language":30518,"meta":25,"style":25},"#传统的方式\nbb=np.empty_like(aa)\nfor i in range(4):\n    for j in range(3):\n        bb[i,j]=aa[i,j]*aa[i,j]\nbb\n",[27,100551,100552,100557,100566,100582,100598,100613],{"__ignoreMap":25},[30,100553,100554],{"class":32,"line":33},[30,100555,100556],{"class":379},"#传统的方式\n",[30,100558,100559,100561,100563],{"class":32,"line":44},[30,100560,98325],{"class":321},[30,100562,367],{"class":317},[30,100564,100565],{"class":321},"np.empty_like(aa)\n",[30,100567,100568,100570,100572,100574,100576,100578,100580],{"class":32,"line":52},[30,100569,3207],{"class":317},[30,100571,9620],{"class":321},[30,100573,26181],{"class":317},[30,100575,32581],{"class":40},[30,100577,322],{"class":321},[30,100579,613],{"class":40},[30,100581,30924],{"class":321},[30,100583,100584,100586,100588,100590,100592,100594,100596],{"class":32,"line":60},[30,100585,3383],{"class":317},[30,100587,9682],{"class":321},[30,100589,26181],{"class":317},[30,100591,32581],{"class":40},[30,100593,322],{"class":321},[30,100595,392],{"class":40},[30,100597,30924],{"class":321},[30,100599,100600,100603,100605,100608,100610],{"class":32,"line":68},[30,100601,100602],{"class":321},"        bb[i,j]",[30,100604,367],{"class":317},[30,100606,100607],{"class":321},"aa[i,j]",[30,100609,775],{"class":317},[30,100611,100612],{"class":321},"aa[i,j]\n",[30,100614,100615],{"class":32,"line":80},[30,100616,100617],{"class":321},"bb\n",[15,100619,100621],{"id":100620},"_93-求各元素的符号","9.3 求各元素的符号",[157,100623,100624],{},[160,100625],{"alt":25,"src":100626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[15,100628,100630],{"id":100629},"_94-modf函数","9.4 modf函数",[157,100632,100633],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[20,100635,100637],{"className":30516,"code":100636,"language":30518,"meta":25,"style":25},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[27,100638,100639,100662],{"__ignoreMap":25},[30,100640,100641,100643,100645,100647,100649,100651,100653,100655,100657,100660],{"class":32,"line":33},[30,100642,558],{"class":321},[30,100644,367],{"class":317},[30,100646,93140],{"class":321},[30,100648,852],{"class":317},[30,100650,766],{"class":40},[30,100652,698],{"class":321},[30,100654,766],{"class":40},[30,100656,698],{"class":321},[30,100658,100659],{"class":40},"0.3",[30,100661,328],{"class":321},[30,100663,100664],{"class":32,"line":44},[30,100665,100666],{"class":321},"np.modf(a)\n",[157,100668,100669],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[15,100671,100673],{"id":100672},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[157,100675,100676],{},"np.cell()",[157,100678,100679],{},"np.floor()",[157,100681,100682],{},"np.rint()",[157,100684,100685],{},"对各元素分别向上取整、向下取整、四舍五入",[157,100687,100688],{},[160,100689],{"alt":25,"src":100690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[15,100692,100694],{"id":100693},"_96-around函数","9.6 around()函数",[157,100696,100697],{},"around()函数也可以实现对数的小数位数进行操作",[157,100699,100700],{},"其中的参数：",[157,100702,100703],{},"1.要传的数组",[157,100705,100706],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[157,100708,100709],{},[160,100710],{"alt":25,"src":100711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[15,100713,100715],{"id":100714},"_97-三角函数","9.7 三角函数",[157,100717,100718],{},[160,100719],{"alt":25,"src":100720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[157,100722,100723],{},"引入图像模块非常重要",[20,100725,100727],{"className":30516,"code":100726,"language":30518,"meta":25,"style":25},"from matplotlib import pyplot as plt\n",[27,100728,100729],{"__ignoreMap":25},[30,100730,100731,100733,100736,100738,100741,100743],{"class":32,"line":33},[30,100732,30875],{"class":317},[30,100734,100735],{"class":321}," matplotlib ",[30,100737,30530],{"class":317},[30,100739,100740],{"class":321}," pyplot ",[30,100742,31521],{"class":317},[30,100744,31575],{"class":321},[234,100746,100747],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":44,"depth":44,"links":100749},[100750,100751,100752,100753,100754,100755,100756],{"id":100298,"depth":44,"text":100299},{"id":100413,"depth":44,"text":100414},{"id":100620,"depth":44,"text":100621},{"id":100629,"depth":44,"text":100630},{"id":100672,"depth":44,"text":100673},{"id":100693,"depth":44,"text":100694},{"id":100714,"depth":44,"text":100715},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100262,"description":242},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100763,"title":100764,"body":100765,"description":242,"extension":243,"meta":100769,"navigation":245,"path":100770,"seo":100771,"stem":100772,"__hash__":100773},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100766,"toc":100767},[],{"title":25,"searchDepth":44,"depth":44,"links":100768},[],{"category":50558},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100764,"description":242},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100775,"title":100776,"body":100777,"description":25,"extension":243,"meta":102785,"navigation":245,"path":102786,"seo":102787,"stem":102788,"__hash__":102789},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100778,"toc":102761},[100779,100782,100786,100789,100792,100798,100801,100824,100827,100861,100864,100905,100909,100912,101005,101008,101052,101055,101072,101075,101089,101092,101095,101140,101143,101180,101184,101187,101193,101198,101218,101222,101225,101291,101294,101312,101316,101319,101348,101358,101364,101368,101371,101377,101388,101392,101395,101425,101428,101708,101711,101714,101725,101728,101731,101753,101760,101763,101781,101784,101787,101801,101809,101812,101838,101844,101847,101850,101860,101872,101892,101901,101921,101931,101955,101968,101982,101987,102028,102045,102070,102082,102102,102108,102153,102172,102189,102202,102218,102225,102237,102246,102281,102302,102327,102340,102364,102379,102404,102407,102428,102437,102440,102451,102455,102458,102464,102476,102483,102487,102490,102502,102505,102519,102522,102532,102542,102545,102585,102588,102592,102598,102601,102615,102619,102622,102655,102659,102662,102685,102693,102696,102702,102708,102711,102714,102742,102746,102749,102755,102758],[10,100780,100776],{"id":100781},"_1环境安装与第一个-mujoco-程序",[15,100783,100785],{"id":100784},"_1目标说明","1.目标说明",[157,100787,100788],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[157,100790,100791],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[20,100793,100796],{"className":100794,"code":100795,"language":5369,"meta":25},[5367],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[27,100797,100795],{"__ignoreMap":25},[157,100799,100800],{},"需要掌握:",[271,100802,100803,100806,100809,100814,100819],{},[150,100804,100805],{},"Fedora 44 下 MuJoCo 的系统依赖",[150,100807,100808],{},"Python 虚拟环境创建",[150,100810,100811],{},[27,100812,100813],{},"mujoco.MjModel",[150,100815,100816],{},[27,100817,100818],{},"mujoco.MjData",[150,100820,100821],{},[27,100822,100823],{},"mujoco.mj_step(model, data)",[157,100825,100826],{},"MuJoCo 中最重要的两个对象:",[457,100828,100829,100839],{},[460,100830,100831],{},[463,100832,100833,100836],{},[466,100834,100835],{"align":23918},"对象",[466,100837,100838],{"align":23918},"含义",[504,100840,100841,100851],{},[463,100842,100843,100848],{},[509,100844,100845],{"align":23918},[27,100846,100847],{},"MjModel",[509,100849,100850],{"align":23918},"模型结构，来自 XML，基本不随时间变化",[463,100852,100853,100858],{},[509,100854,100855],{"align":23918},[27,100856,100857],{},"MjData",[509,100859,100860],{"align":23918},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[157,100862,100863],{},"可以先用一个类比理解：",[457,100865,100866,100876],{},[460,100867,100868],{},[463,100869,100870,100873],{},[466,100871,100872],{"align":23918},"类比",[466,100874,100875],{"align":23918},"MuJoCo 对象",[504,100877,100878,100887,100896],{},[463,100879,100880,100883],{},[509,100881,100882],{"align":23918},"游戏地图和角色配置",[509,100884,100885],{"align":23918},[27,100886,100847],{},[463,100888,100889,100892],{},[509,100890,100891],{"align":23918},"游戏运行到当前帧的状态",[509,100893,100894],{"align":23918},[27,100895,100857],{},[463,100897,100898,100901],{},[509,100899,100900],{"align":23918},"前进一帧",[509,100902,100903],{"align":23918},[27,100904,100823],{},[15,100906,100908],{"id":100907},"_2环境与依赖安装","2.环境与依赖安装",[157,100910,100911],{},"Fedora 44 系统依赖:",[20,100913,100915],{"className":22,"code":100914,"language":24,"meta":25,"style":25},"sudo dnf install -y \\\n  python3 python3-pip python3-virtualenv \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr \\\n  gcc gcc-c++ make\n",[27,100916,100917,100929,100942,100955,100965,100975,100994],{"__ignoreMap":25},[30,100918,100919,100921,100923,100925,100927],{"class":32,"line":33},[30,100920,24757],{"class":36},[30,100922,26453],{"class":74},[30,100924,24014],{"class":74},[30,100926,26538],{"class":40},[30,100928,41],{"class":40},[30,100930,100931,100934,100937,100940],{"class":32,"line":44},[30,100932,100933],{"class":74},"  python3",[30,100935,100936],{"class":74}," python3-pip",[30,100938,100939],{"class":74}," python3-virtualenv",[30,100941,41],{"class":40},[30,100943,100944,100947,100950,100953],{"class":32,"line":52},[30,100945,100946],{"class":74},"  mesa-libGL",[30,100948,100949],{"class":74}," mesa-libGLU",[30,100951,100952],{"class":74}," mesa-dri-drivers",[30,100954,41],{"class":40},[30,100956,100957,100960,100963],{"class":32,"line":60},[30,100958,100959],{"class":74},"  libglvnd-glx",[30,100961,100962],{"class":74}," libglvnd-opengl",[30,100964,41],{"class":40},[30,100966,100967,100970,100973],{"class":32,"line":68},[30,100968,100969],{"class":74},"  glfw",[30,100971,100972],{"class":74}," glfw-devel",[30,100974,41],{"class":40},[30,100976,100977,100980,100983,100986,100989,100992],{"class":32,"line":80},[30,100978,100979],{"class":74},"  libX11",[30,100981,100982],{"class":74}," libXcursor",[30,100984,100985],{"class":74}," libXi",[30,100987,100988],{"class":74}," libXinerama",[30,100990,100991],{"class":74}," libXrandr",[30,100993,41],{"class":40},[30,100995,100996,100999,101002],{"class":32,"line":88},[30,100997,100998],{"class":74},"  gcc",[30,101000,101001],{"class":74}," gcc-c++",[30,101003,101004],{"class":74}," make\n",[157,101006,101007],{},"创建 Python 环境:",[20,101009,101011],{"className":22,"code":101010,"language":24,"meta":25,"style":25},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[27,101012,101013,101027,101035],{"__ignoreMap":25},[30,101014,101015,101018,101021,101024],{"class":32,"line":33},[30,101016,101017],{"class":36},"python3",[30,101019,101020],{"class":40}," -m",[30,101022,101023],{"class":74}," venv",[30,101025,101026],{"class":74}," .venv\n",[30,101028,101029,101032],{"class":32,"line":44},[30,101030,101031],{"class":40},"source",[30,101033,101034],{"class":74}," .venv\u002Fbin\u002Factivate\n",[30,101036,101037,101039,101041,101044,101046,101049],{"class":32,"line":52},[30,101038,30518],{"class":36},[30,101040,101020],{"class":40},[30,101042,101043],{"class":74}," pip",[30,101045,24014],{"class":74},[30,101047,101048],{"class":40}," --upgrade",[30,101050,101051],{"class":74}," pip\n",[157,101053,101054],{},"pip 安装:",[20,101056,101058],{"className":22,"code":101057,"language":24,"meta":25,"style":25},"pip install \"mujoco>=2.3\" numpy\n",[27,101059,101060],{"__ignoreMap":25},[30,101061,101062,101064,101066,101069],{"class":32,"line":33},[30,101063,24011],{"class":36},[30,101065,24014],{"class":74},[30,101067,101068],{"class":74}," \"mujoco>=2.3\"",[30,101070,101071],{"class":74}," numpy\n",[157,101073,101074],{},"安装完成后，先做最小检查：",[20,101076,101078],{"className":22,"code":101077,"language":24,"meta":25,"style":25},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[27,101079,101080],{"__ignoreMap":25},[30,101081,101082,101084,101086],{"class":32,"line":33},[30,101083,30518],{"class":36},[30,101085,30496],{"class":40},[30,101087,101088],{"class":74}," \"import mujoco; print(mujoco.__version__)\"\n",[157,101090,101091],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[157,101093,101094],{},"conda 安装:",[20,101096,101098],{"className":22,"code":101097,"language":24,"meta":25,"style":25},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[27,101099,101100,101120,101130],{"__ignoreMap":25},[30,101101,101102,101104,101106,101108,101111,101114,101117],{"class":32,"line":33},[30,101103,30468],{"class":36},[30,101105,29314],{"class":74},[30,101107,25288],{"class":40},[30,101109,101110],{"class":74}," mujoco-study",[30,101112,101113],{"class":74}," python=",[30,101115,101116],{"class":40},"3.10",[30,101118,101119],{"class":40}," -y\n",[30,101121,101122,101124,101127],{"class":32,"line":44},[30,101123,30468],{"class":36},[30,101125,101126],{"class":74}," activate",[30,101128,101129],{"class":74}," mujoco-study\n",[30,101131,101132,101134,101136,101138],{"class":32,"line":52},[30,101133,24011],{"class":36},[30,101135,24014],{"class":74},[30,101137,101068],{"class":74},[30,101139,101071],{"class":74},[157,101141,101142],{},"版本冲突说明:",[271,101144,101145,101151,101161,101170],{},[150,101146,101147,101148,28523],{},"不要安装 ",[27,101149,101150],{},"mujoco-py",[150,101152,101153,101154,101156,101157,101160],{},"如果旧项目里同时安装了 ",[27,101155,101150],{}," 和 ",[27,101158,101159],{},"mujoco","，建议新建干净虚拟环境。",[150,101162,101163,101166,101167,28523],{},[27,101164,101165],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[27,101168,101169],{},"~\u002F.mujoco\u002Fmujoco210",[150,101171,101172,101173,82677,101176,101179],{},"离屏渲染可能涉及 OpenGL 后端，",[27,101174,101175],{},"MUJOCO_GL=egl",[27,101177,101178],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[15,101181,101183],{"id":101182},"_3核心概念解释","3.核心概念解释",[157,101185,101186],{},"MuJoCo 的基本执行流程:",[20,101188,101191],{"className":101189,"code":101190,"language":5369,"meta":25},[5367],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[27,101192,101190],{"__ignoreMap":25},[157,101194,101195,101197],{},[27,101196,100847],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[157,101199,101200,101202,101203,532,101206,532,101209,532,101212,532,101215,28523],{},[27,101201,100857],{}," 存放仿真运行时状态，例如 ",[27,101204,101205],{},"data.time",[27,101207,101208],{},"data.qpos",[27,101210,101211],{},"data.qvel",[27,101213,101214],{},"data.ctrl",[27,101216,101217],{},"data.xpos",[287,101219,101221],{"id":101220},"xml-是什么","XML 是什么",[157,101223,101224],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[20,101226,101228],{"className":53205,"code":101227,"language":53207,"meta":25,"style":25},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[27,101229,101230,101252,101283],{"__ignoreMap":25},[30,101231,101232,101234,101236,101238,101240,101242,101245,101247,101250],{"class":32,"line":33},[30,101233,1230],{"class":321},[30,101235,51938],{"class":51438},[30,101237,15102],{"class":36},[30,101239,367],{"class":321},[30,101241,53629],{"class":74},[30,101243,101244],{"class":36}," pos",[30,101246,367],{"class":321},[30,101248,101249],{"class":74},"\"0 0 1\"",[30,101251,51445],{"class":321},[30,101253,101254,101256,101259,101261,101263,101266,101268,101270,101272,101275,101277,101280],{"class":32,"line":44},[30,101255,52282],{"class":321},[30,101257,101258],{"class":51438},"geom",[30,101260,15102],{"class":36},[30,101262,367],{"class":321},[30,101264,101265],{"class":74},"\"box_geom\"",[30,101267,53962],{"class":36},[30,101269,367],{"class":321},[30,101271,53629],{"class":74},[30,101273,101274],{"class":36}," size",[30,101276,367],{"class":321},[30,101278,101279],{"class":74},"\"0.1 0.1 0.1\"",[30,101281,101282],{"class":321},"\u002F>\n",[30,101284,101285,101287,101289],{"class":32,"line":52},[30,101286,51923],{"class":321},[30,101288,51938],{"class":51438},[30,101290,51445],{"class":321},[157,101292,101293],{},"这段意思是：",[271,101295,101296,101302,101309],{},[150,101297,101298,101299,101301],{},"创建一个叫 ",[27,101300,53852],{}," 的刚体。",[150,101303,101304,101305,101308],{},"它初始放在 ",[27,101306,101307],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[150,101310,101311],{},"它里面有一个盒子形状的几何体。",[287,101313,101315],{"id":101314},"timestep-是什么","timestep 是什么",[157,101317,101318],{},"XML 里的：",[20,101320,101322],{"className":53205,"code":101321,"language":53207,"meta":25,"style":25},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[27,101323,101324],{"__ignoreMap":25},[30,101325,101326,101328,101330,101333,101335,101338,101341,101343,101346],{"class":32,"line":33},[30,101327,1230],{"class":321},[30,101329,69304],{"class":51438},[30,101331,101332],{"class":36}," timestep",[30,101334,367],{"class":321},[30,101336,101337],{"class":74},"\"0.01\"",[30,101339,101340],{"class":36}," gravity",[30,101342,367],{"class":321},[30,101344,101345],{"class":74},"\"0 0 -9.81\"",[30,101347,101282],{"class":321},[157,101349,101350,101351,101354,101355,101357],{},"表示每调用一次 ",[27,101352,101353],{},"mj_step","，仿真时间前进 ",[27,101356,39124],{}," 秒。循环 100 次，大约就是 1 秒：",[20,101359,101362],{"className":101360,"code":101361,"language":5369,"meta":25},[5367],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[27,101363,101361],{"__ignoreMap":25},[287,101365,101367],{"id":101366},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[157,101369,101370],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[20,101372,101375],{"className":101373,"code":101374,"language":5369,"meta":25},[5367],"x y z qw qx qy qz\n",[27,101376,101374],{"__ignoreMap":25},[157,101378,101379,101380,101383,101384,101387],{},"表示一个自由刚体的位置和姿态。其中 ",[27,101381,101382],{},"x y z"," 是位置，",[27,101385,101386],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[15,101389,101391],{"id":101390},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[157,101393,101394],{},"新建文件:",[20,101396,101398],{"className":22,"code":101397,"language":24,"meta":25,"style":25},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[27,101399,101400,101410,101417],{"__ignoreMap":25},[30,101401,101402,101405,101407],{"class":32,"line":33},[30,101403,101404],{"class":36},"mkdir",[30,101406,29354],{"class":40},[30,101408,101409],{"class":74}," mujoco_tutorial\n",[30,101411,101412,101415],{"class":32,"line":44},[30,101413,101414],{"class":40},"cd",[30,101416,101409],{"class":74},[30,101418,101419,101422],{"class":32,"line":52},[30,101420,101421],{"class":36},"touch",[30,101423,101424],{"class":74}," ch1_first_sim.py\n",[157,101426,101427],{},"写入:",[20,101429,101431],{"className":30516,"code":101430,"language":30518,"meta":25,"style":25},"import mujoco\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"first_sim\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n    print(\"initial time:\", data.time)\n    print(\"initial qpos:\", data.qpos.copy())\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    print(\"final time:\", data.time)\n    print(\"final qpos:\", data.qpos.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[27,101432,101433,101440,101444,101448,101458,101463,101468,101472,101477,101482,101486,101491,101496,101501,101506,101511,101516,101520,101524,101528,101541,101555,101565,101569,101581,101593,101605,101617,101629,101633,101650,101655,101659,101670,101681,101685,101689,101703],{"__ignoreMap":25},[30,101434,101435,101437],{"class":32,"line":33},[30,101436,30530],{"class":317},[30,101438,101439],{"class":321}," mujoco\n",[30,101441,101442],{"class":32,"line":44},[30,101443,2582],{"emptyLinePlaceholder":245},[30,101445,101446],{"class":32,"line":52},[30,101447,2582],{"emptyLinePlaceholder":245},[30,101449,101450,101453,101455],{"class":32,"line":60},[30,101451,101452],{"class":40},"XML",[30,101454,13746],{"class":317},[30,101456,101457],{"class":74}," \"\"\"\n",[30,101459,101460],{"class":32,"line":68},[30,101461,101462],{"class":74},"\u003Cmujoco model=\"first_sim\">\n",[30,101464,101465],{"class":32,"line":80},[30,101466,101467],{"class":74},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[30,101469,101470],{"class":32,"line":88},[30,101471,2582],{"emptyLinePlaceholder":245},[30,101473,101474],{"class":32,"line":96},[30,101475,101476],{"class":74},"  \u003Cworldbody>\n",[30,101478,101479],{"class":32,"line":104},[30,101480,101481],{"class":74},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[30,101483,101484],{"class":32,"line":112},[30,101485,2582],{"emptyLinePlaceholder":245},[30,101487,101488],{"class":32,"line":123},[30,101489,101490],{"class":74},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[30,101492,101493],{"class":32,"line":131},[30,101494,101495],{"class":74},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[30,101497,101498],{"class":32,"line":142},[30,101499,101500],{"class":74},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[30,101502,101503],{"class":32,"line":1811},[30,101504,101505],{"class":74},"    \u003C\u002Fbody>\n",[30,101507,101508],{"class":32,"line":1825},[30,101509,101510],{"class":74},"  \u003C\u002Fworldbody>\n",[30,101512,101513],{"class":32,"line":1830},[30,101514,101515],{"class":74},"\u003C\u002Fmujoco>\n",[30,101517,101518],{"class":32,"line":1836},[30,101519,95836],{"class":74},[30,101521,101522],{"class":32,"line":1857},[30,101523,2582],{"emptyLinePlaceholder":245},[30,101525,101526],{"class":32,"line":1862},[30,101527,2582],{"emptyLinePlaceholder":245},[30,101529,101530,101532,101534,101537,101539],{"class":32,"line":1876},[30,101531,32085],{"class":317},[30,101533,2155],{"class":36},[30,101535,101536],{"class":321},"() -> ",[30,101538,95824],{"class":40},[30,101540,3921],{"class":321},[30,101542,101543,101546,101548,101551,101553],{"class":32,"line":1881},[30,101544,101545],{"class":321},"    model ",[30,101547,367],{"class":317},[30,101549,101550],{"class":321}," mujoco.MjModel.from_xml_string(",[30,101552,101452],{"class":40},[30,101554,328],{"class":321},[30,101556,101557,101560,101562],{"class":32,"line":1910},[30,101558,101559],{"class":321},"    data ",[30,101561,367],{"class":317},[30,101563,101564],{"class":321}," mujoco.MjData(model)\n",[30,101566,101567],{"class":32,"line":1915},[30,101568,2582],{"emptyLinePlaceholder":245},[30,101570,101571,101573,101575,101578],{"class":32,"line":1932},[30,101572,31437],{"class":40},[30,101574,322],{"class":321},[30,101576,101577],{"class":74},"\"nq:\"",[30,101579,101580],{"class":321},", model.nq)\n",[30,101582,101583,101585,101587,101590],{"class":32,"line":1937},[30,101584,31437],{"class":40},[30,101586,322],{"class":321},[30,101588,101589],{"class":74},"\"nv:\"",[30,101591,101592],{"class":321},", model.nv)\n",[30,101594,101595,101597,101599,101602],{"class":32,"line":1942},[30,101596,31437],{"class":40},[30,101598,322],{"class":321},[30,101600,101601],{"class":74},"\"nu:\"",[30,101603,101604],{"class":321},", model.nu)\n",[30,101606,101607,101609,101611,101614],{"class":32,"line":1947},[30,101608,31437],{"class":40},[30,101610,322],{"class":321},[30,101612,101613],{"class":74},"\"initial time:\"",[30,101615,101616],{"class":321},", data.time)\n",[30,101618,101619,101621,101623,101626],{"class":32,"line":1961},[30,101620,31437],{"class":40},[30,101622,322],{"class":321},[30,101624,101625],{"class":74},"\"initial qpos:\"",[30,101627,101628],{"class":321},", data.qpos.copy())\n",[30,101630,101631],{"class":32,"line":1966},[30,101632,2582],{"emptyLinePlaceholder":245},[30,101634,101635,101637,101640,101642,101644,101646,101648],{"class":32,"line":2759},[30,101636,3383],{"class":317},[30,101638,101639],{"class":321}," _ ",[30,101641,26181],{"class":317},[30,101643,32581],{"class":40},[30,101645,322],{"class":321},[30,101647,631],{"class":40},[30,101649,30924],{"class":321},[30,101651,101652],{"class":32,"line":2773},[30,101653,101654],{"class":321},"        mujoco.mj_step(model, data)\n",[30,101656,101657],{"class":32,"line":2781},[30,101658,2582],{"emptyLinePlaceholder":245},[30,101660,101661,101663,101665,101668],{"class":32,"line":2786},[30,101662,31437],{"class":40},[30,101664,322],{"class":321},[30,101666,101667],{"class":74},"\"final time:\"",[30,101669,101616],{"class":321},[30,101671,101672,101674,101676,101679],{"class":32,"line":2792},[30,101673,31437],{"class":40},[30,101675,322],{"class":321},[30,101677,101678],{"class":74},"\"final qpos:\"",[30,101680,101628],{"class":321},[30,101682,101683],{"class":32,"line":2798},[30,101684,2582],{"emptyLinePlaceholder":245},[30,101686,101687],{"class":32,"line":2803},[30,101688,2582],{"emptyLinePlaceholder":245},[30,101690,101691,101693,101695,101698,101701],{"class":32,"line":8130},[30,101692,1717],{"class":317},[30,101694,31358],{"class":40},[30,101696,101697],{"class":317}," ==",[30,101699,101700],{"class":74}," \"__main__\"",[30,101702,3921],{"class":321},[30,101704,101705],{"class":32,"line":8154},[30,101706,101707],{"class":321},"    main()\n",[287,101709,101710],{"id":101710},"代码逐段解释",[157,101712,101713],{},"导入库：",[20,101715,101717],{"className":30516,"code":101716,"language":30518,"meta":25,"style":25},"import mujoco\n",[27,101718,101719],{"__ignoreMap":25},[30,101720,101721,101723],{"class":32,"line":33},[30,101722,30530],{"class":317},[30,101724,101439],{"class":321},[157,101726,101727],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[157,101729,101730],{},"定义 XML：",[20,101732,101734],{"className":30516,"code":101733,"language":30518,"meta":25,"style":25},"XML = \"\"\"\n...\n\"\"\"\n",[27,101735,101736,101744,101749],{"__ignoreMap":25},[30,101737,101738,101740,101742],{"class":32,"line":33},[30,101739,101452],{"class":40},[30,101741,13746],{"class":317},[30,101743,101457],{"class":74},[30,101745,101746],{"class":32,"line":44},[30,101747,101748],{"class":74},"...\n",[30,101750,101751],{"class":32,"line":52},[30,101752,95836],{"class":74},[157,101754,101755,101756,101759],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[27,101757,101758],{},"freejoint"," 的方块。",[157,101761,101762],{},"编译模型：",[20,101764,101766],{"className":30516,"code":101765,"language":30518,"meta":25,"style":25},"model = mujoco.MjModel.from_xml_string(XML)\n",[27,101767,101768],{"__ignoreMap":25},[30,101769,101770,101773,101775,101777,101779],{"class":32,"line":33},[30,101771,101772],{"class":321},"model ",[30,101774,367],{"class":317},[30,101776,101550],{"class":321},[30,101778,101452],{"class":40},[30,101780,328],{"class":321},[157,101782,101783],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[157,101785,101786],{},"创建数据：",[20,101788,101790],{"className":30516,"code":101789,"language":30518,"meta":25,"style":25},"data = mujoco.MjData(model)\n",[27,101791,101792],{"__ignoreMap":25},[30,101793,101794,101797,101799],{"class":32,"line":33},[30,101795,101796],{"class":321},"data ",[30,101798,367],{"class":317},[30,101800,101564],{"class":321},[157,101802,101803,101805,101806,101808],{},[27,101804,33539],{}," 会保存仿真当前状态。刚创建时，时间是 ",[27,101807,511],{},"，方块还在初始位置。",[157,101810,101811],{},"推进仿真：",[20,101813,101815],{"className":30516,"code":101814,"language":30518,"meta":25,"style":25},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[27,101816,101817,101833],{"__ignoreMap":25},[30,101818,101819,101821,101823,101825,101827,101829,101831],{"class":32,"line":33},[30,101820,3207],{"class":317},[30,101822,101639],{"class":321},[30,101824,26181],{"class":317},[30,101826,32581],{"class":40},[30,101828,322],{"class":321},[30,101830,631],{"class":40},[30,101832,30924],{"class":321},[30,101834,101835],{"class":32,"line":44},[30,101836,101837],{"class":321},"    mujoco.mj_step(model, data)\n",[157,101839,101840,101841,101843],{},"每次 ",[27,101842,101353],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[287,101845,101846],{"id":101846},"代码逐行细讲",[157,101848,101849],{},"下面把完整代码按新手视角拆开讲。",[20,101851,101852],{"className":30516,"code":101716,"language":30518,"meta":25,"style":25},[27,101853,101854],{"__ignoreMap":25},[30,101855,101856,101858],{"class":32,"line":33},[30,101857,30530],{"class":317},[30,101859,101439],{"class":321},[157,101861,101862,101864,101865,532,101867,532,101869,28523],{},[27,101863,30530],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[27,101866,100813],{},[27,101868,100818],{},[27,101870,101871],{},"mujoco.mj_step",[20,101873,101874],{"className":30516,"code":101733,"language":30518,"meta":25,"style":25},[27,101875,101876,101884,101888],{"__ignoreMap":25},[30,101877,101878,101880,101882],{"class":32,"line":33},[30,101879,101452],{"class":40},[30,101881,13746],{"class":317},[30,101883,101457],{"class":74},[30,101885,101886],{"class":32,"line":44},[30,101887,101748],{"class":74},[30,101889,101890],{"class":32,"line":52},[30,101891,95836],{"class":74},[157,101893,101894,101896,101897,101900],{},[27,101895,101452],{}," 是一个变量名。右边的三引号 ",[27,101898,101899],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[20,101902,101903],{"className":53205,"code":101462,"language":53207,"meta":25,"style":25},[27,101904,101905],{"__ignoreMap":25},[30,101906,101907,101909,101911,101914,101916,101919],{"class":32,"line":33},[30,101908,1230],{"class":321},[30,101910,101159],{"class":51438},[30,101912,101913],{"class":36}," model",[30,101915,367],{"class":321},[30,101917,101918],{"class":74},"\"first_sim\"",[30,101920,51445],{"class":321},[157,101922,101923,101924,101927,101928,28523],{},"这是 XML 的根标签。",[27,101925,101926],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[27,101929,101930],{},"first_sim",[20,101932,101933],{"className":53205,"code":101321,"language":53207,"meta":25,"style":25},[27,101934,101935],{"__ignoreMap":25},[30,101936,101937,101939,101941,101943,101945,101947,101949,101951,101953],{"class":32,"line":33},[30,101938,1230],{"class":321},[30,101940,69304],{"class":51438},[30,101942,101332],{"class":36},[30,101944,367],{"class":321},[30,101946,101337],{"class":74},[30,101948,101340],{"class":36},[30,101950,367],{"class":321},[30,101952,101345],{"class":74},[30,101954,101282],{"class":321},[157,101956,101957,101959,101960,101963,101964,101967],{},[27,101958,69304],{}," 用来设置仿真参数。",[27,101961,101962],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[27,101965,101966],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[20,101969,101971],{"className":53205,"code":101970,"language":53207,"meta":25,"style":25},"\u003Cworldbody>\n",[27,101972,101973],{"__ignoreMap":25},[30,101974,101975,101977,101980],{"class":32,"line":33},[30,101976,1230],{"class":321},[30,101978,101979],{"class":51438},"worldbody",[30,101981,51445],{"class":321},[157,101983,101984,101986],{},[27,101985,101979],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[20,101988,101990],{"className":53205,"code":101989,"language":53207,"meta":25,"style":25},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[27,101991,101992],{"__ignoreMap":25},[30,101993,101994,101996,101998,102000,102002,102005,102007,102009,102012,102014,102016,102019,102021,102023,102026],{"class":32,"line":33},[30,101995,1230],{"class":321},[30,101997,101258],{"class":51438},[30,101999,15102],{"class":36},[30,102001,367],{"class":321},[30,102003,102004],{"class":74},"\"floor\"",[30,102006,53962],{"class":36},[30,102008,367],{"class":321},[30,102010,102011],{"class":74},"\"plane\"",[30,102013,101274],{"class":36},[30,102015,367],{"class":321},[30,102017,102018],{"class":74},"\"2 2 0.1\"",[30,102020,78905],{"class":36},[30,102022,367],{"class":321},[30,102024,102025],{"class":74},"\"0.8 0.8 0.8 1\"",[30,102027,101282],{"class":321},[157,102029,102030,102031,102033,102034,102037,102038,102041,102042,102044],{},"这行创建地面。",[27,102032,101258],{}," 是几何体。",[27,102035,102036],{},"name=\"floor\""," 是名字。",[27,102039,102040],{},"type=\"plane\""," 表示平面。",[27,102043,55248],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[20,102046,102048],{"className":53205,"code":102047,"language":53207,"meta":25,"style":25},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[27,102049,102050],{"__ignoreMap":25},[30,102051,102052,102054,102056,102058,102060,102062,102064,102066,102068],{"class":32,"line":33},[30,102053,1230],{"class":321},[30,102055,51938],{"class":51438},[30,102057,15102],{"class":36},[30,102059,367],{"class":321},[30,102061,53629],{"class":74},[30,102063,101244],{"class":36},[30,102065,367],{"class":321},[30,102067,101249],{"class":74},[30,102069,51445],{"class":321},[157,102071,102072,102073,28523,102075,102078,102079,102081],{},"这行创建一个刚体，名字叫 ",[27,102074,53852],{},[27,102076,102077],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[27,102080,101307],{},"，也就是离地面 1 米高。",[20,102083,102085],{"className":53205,"code":102084,"language":53207,"meta":25,"style":25},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[27,102086,102087],{"__ignoreMap":25},[30,102088,102089,102091,102093,102095,102097,102100],{"class":32,"line":33},[30,102090,1230],{"class":321},[30,102092,101758],{"class":51438},[30,102094,15102],{"class":36},[30,102096,367],{"class":321},[30,102098,102099],{"class":74},"\"box_free\"",[30,102101,101282],{"class":321},[157,102103,102104,102105,102107],{},"这行很重要。",[27,102106,101758],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[20,102109,102111],{"className":53205,"code":102110,"language":53207,"meta":25,"style":25},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[27,102112,102113],{"__ignoreMap":25},[30,102114,102115,102117,102119,102121,102123,102125,102127,102129,102131,102133,102135,102137,102140,102142,102144,102146,102148,102151],{"class":32,"line":33},[30,102116,1230],{"class":321},[30,102118,101258],{"class":51438},[30,102120,15102],{"class":36},[30,102122,367],{"class":321},[30,102124,101265],{"class":74},[30,102126,53962],{"class":36},[30,102128,367],{"class":321},[30,102130,53629],{"class":74},[30,102132,101274],{"class":36},[30,102134,367],{"class":321},[30,102136,101279],{"class":74},[30,102138,102139],{"class":36}," mass",[30,102141,367],{"class":321},[30,102143,3860],{"class":74},[30,102145,78905],{"class":36},[30,102147,367],{"class":321},[30,102149,102150],{"class":74},"\"1 0 0 1\"",[30,102152,101282],{"class":321},[157,102154,102155,102156,102159,102160,102163,102164,102167,102168,102171],{},"这行给 box body 添加一个盒子形状。",[27,102157,102158],{},"type=\"box\""," 表示形状是盒子。",[27,102161,102162],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[27,102165,102166],{},"mass=\"1\""," 表示质量是 1。",[27,102169,102170],{},"rgba=\"1 0 0 1\""," 表示红色。",[20,102173,102175],{"className":30516,"code":102174,"language":30518,"meta":25,"style":25},"def main() -> None:\n",[27,102176,102177],{"__ignoreMap":25},[30,102178,102179,102181,102183,102185,102187],{"class":32,"line":33},[30,102180,32085],{"class":317},[30,102182,2155],{"class":36},[30,102184,101536],{"class":321},[30,102186,95824],{"class":40},[30,102188,3921],{"class":321},[157,102190,102191,102193,102194,102197,102198,102201],{},[27,102192,32085],{}," 用来定义函数。这里定义了一个叫 ",[27,102195,102196],{},"main"," 的函数。",[27,102199,102200],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[20,102203,102204],{"className":30516,"code":101765,"language":30518,"meta":25,"style":25},[27,102205,102206],{"__ignoreMap":25},[30,102207,102208,102210,102212,102214,102216],{"class":32,"line":33},[30,102209,101772],{"class":321},[30,102211,367],{"class":317},[30,102213,101550],{"class":321},[30,102215,101452],{"class":40},[30,102217,328],{"class":321},[157,102219,102220,102221,102224],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[27,102222,102223],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[20,102226,102227],{"className":30516,"code":101789,"language":30518,"meta":25,"style":25},[27,102228,102229],{"__ignoreMap":25},[30,102230,102231,102233,102235],{"class":32,"line":33},[30,102232,101796],{"class":321},[30,102234,367],{"class":317},[30,102236,101564],{"class":321},[157,102238,102239,102240,102242,102243,102245],{},"这行创建仿真数据。",[27,102241,33539],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[27,102244,33539],{}," 都会变化。",[20,102247,102249],{"className":30516,"code":102248,"language":30518,"meta":25,"style":25},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[27,102250,102251,102261,102271],{"__ignoreMap":25},[30,102252,102253,102255,102257,102259],{"class":32,"line":33},[30,102254,30553],{"class":40},[30,102256,322],{"class":321},[30,102258,101577],{"class":74},[30,102260,101580],{"class":321},[30,102262,102263,102265,102267,102269],{"class":32,"line":44},[30,102264,30553],{"class":40},[30,102266,322],{"class":321},[30,102268,101589],{"class":74},[30,102270,101592],{"class":321},[30,102272,102273,102275,102277,102279],{"class":32,"line":52},[30,102274,30553],{"class":40},[30,102276,322],{"class":321},[30,102278,101601],{"class":74},[30,102280,101604],{"class":321},[157,102282,102283,102285,102286,102289,102290,102293,102294,102297,102298,102301],{},[27,102284,30553],{}," 用来输出信息。",[27,102287,102288],{},"model.nq"," 是位置变量数量，",[27,102291,102292],{},"model.nv"," 是速度变量数量，",[27,102295,102296],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[27,102299,102300],{},"nu"," 是 0。",[20,102303,102305],{"className":30516,"code":102304,"language":30518,"meta":25,"style":25},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[27,102306,102307,102317],{"__ignoreMap":25},[30,102308,102309,102311,102313,102315],{"class":32,"line":33},[30,102310,30553],{"class":40},[30,102312,322],{"class":321},[30,102314,101613],{"class":74},[30,102316,101616],{"class":321},[30,102318,102319,102321,102323,102325],{"class":32,"line":44},[30,102320,30553],{"class":40},[30,102322,322],{"class":321},[30,102324,101625],{"class":74},[30,102326,101628],{"class":321},[157,102328,102329,102330,102332,102333,102335,102336,102339],{},"这里打印初始时间和初始位置。",[27,102331,101205],{}," 一开始是 0。",[27,102334,101208],{}," 是位置数组。",[27,102337,102338],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[20,102341,102342],{"className":30516,"code":101814,"language":30518,"meta":25,"style":25},[27,102343,102344,102360],{"__ignoreMap":25},[30,102345,102346,102348,102350,102352,102354,102356,102358],{"class":32,"line":33},[30,102347,3207],{"class":317},[30,102349,101639],{"class":321},[30,102351,26181],{"class":317},[30,102353,32581],{"class":40},[30,102355,322],{"class":321},[30,102357,631],{"class":40},[30,102359,30924],{"class":321},[30,102361,102362],{"class":32,"line":44},[30,102363,101837],{"class":321},[157,102365,102366,102368,102369,102372,102373,102375,102376,102378],{},[27,102367,3207],{}," 是循环。",[27,102370,102371],{},"range(100)"," 表示循环 100 次。",[27,102374,1312],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[27,102377,101353],{},"，仿真就前进一步。",[20,102380,102382],{"className":30516,"code":102381,"language":30518,"meta":25,"style":25},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[27,102383,102384,102394],{"__ignoreMap":25},[30,102385,102386,102388,102390,102392],{"class":32,"line":33},[30,102387,30553],{"class":40},[30,102389,322],{"class":321},[30,102391,101667],{"class":74},[30,102393,101616],{"class":321},[30,102395,102396,102398,102400,102402],{"class":32,"line":44},[30,102397,30553],{"class":40},[30,102399,322],{"class":321},[30,102401,101678],{"class":74},[30,102403,101628],{"class":321},[157,102405,102406],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[20,102408,102410],{"className":30516,"code":102409,"language":30518,"meta":25,"style":25},"if __name__ == \"__main__\":\n    main()\n",[27,102411,102412,102424],{"__ignoreMap":25},[30,102413,102414,102416,102418,102420,102422],{"class":32,"line":33},[30,102415,1717],{"class":317},[30,102417,31358],{"class":40},[30,102419,101697],{"class":317},[30,102421,101700],{"class":74},[30,102423,3921],{"class":321},[30,102425,102426],{"class":32,"line":44},[30,102427,101707],{"class":321},[157,102429,102430,102431,102434,102435,28523],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[27,102432,102433],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[27,102436,102433],{},[157,102438,102439],{},"运行:",[20,102441,102443],{"className":22,"code":102442,"language":24,"meta":25,"style":25},"python ch1_first_sim.py\n",[27,102444,102445],{"__ignoreMap":25},[30,102446,102447,102449],{"class":32,"line":33},[30,102448,30518],{"class":36},[30,102450,101424],{"class":74},[15,102452,102454],{"id":102453},"_5运行结果说明","5.运行结果说明",[157,102456,102457],{},"你应该看到类似输出:",[20,102459,102462],{"className":102460,"code":102461,"language":5369,"meta":25},[5367],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[27,102463,102461],{"__ignoreMap":25},[157,102465,102466,102468,102469,102472,102473,28523],{},[27,102467,101758],{}," 有 7 个位置变量: ",[27,102470,102471],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[27,102474,102475],{},"vx vy vz wx wy wz",[157,102477,102478,102479,102482],{},"你还会看到 ",[27,102480,102481],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[15,102484,102486],{"id":102485},"_6验证步骤","6.验证步骤",[157,102488,102489],{},"确认版本:",[20,102491,102492],{"className":22,"code":101077,"language":24,"meta":25,"style":25},[27,102493,102494],{"__ignoreMap":25},[30,102495,102496,102498,102500],{"class":32,"line":33},[30,102497,30518],{"class":36},[30,102499,30496],{"class":40},[30,102501,101088],{"class":74},[157,102503,102504],{},"确认导入的是官方 bindings:",[20,102506,102508],{"className":22,"code":102507,"language":24,"meta":25,"style":25},"python -c \"import mujoco; print(mujoco)\"\n",[27,102509,102510],{"__ignoreMap":25},[30,102511,102512,102514,102516],{"class":32,"line":33},[30,102513,30518],{"class":36},[30,102515,30496],{"class":40},[30,102517,102518],{"class":74}," \"import mujoco; print(mujoco)\"\n",[157,102520,102521],{},"运行程序:",[20,102523,102524],{"className":22,"code":102442,"language":24,"meta":25,"style":25},[27,102525,102526],{"__ignoreMap":25},[30,102527,102528,102530],{"class":32,"line":33},[30,102529,30518],{"class":36},[30,102531,101424],{"class":74},[157,102533,102534,102535,102538,102539,28523],{},"检查 ",[27,102536,102537],{},"final time"," 是否约等于 ",[27,102540,102541],{},"1.0",[157,102543,102544],{},"再做几个小实验：",[271,102546,102547,102557,102565,102578],{},[150,102548,102549,102550,102552,102553,102556],{},"把 ",[27,102551,102077],{}," 改成 ",[27,102554,102555],{},"pos=\"0 0 2\"","，观察初始高度变化。",[150,102558,102549,102559,102552,102561,102564],{},[27,102560,101966],{},[27,102562,102563],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[150,102566,102549,102567,102552,102569,102572,102573,102575,102576,28523],{},[27,102568,101962],{},[27,102570,102571],{},"timestep=\"0.005\"","，观察 100 步后的 ",[27,102574,102537],{}," 是否变成约 ",[27,102577,35467],{},[150,102579,102580,102581,102584],{},"删除 ",[27,102582,102583],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[157,102586,102587],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[15,102589,102591],{"id":102590},"_7常见错误与解决方案","7.常见错误与解决方案",[287,102593,102595],{"id":102594},"modulenotfounderror-no-module-named-mujoco",[27,102596,102597],{},"ModuleNotFoundError: No module named 'mujoco'",[157,102599,102600],{},"解决:",[20,102602,102604],{"className":22,"code":102603,"language":24,"meta":25,"style":25},"pip install \"mujoco>=2.3\"\n",[27,102605,102606],{"__ignoreMap":25},[30,102607,102608,102610,102612],{"class":32,"line":33},[30,102609,24011],{"class":36},[30,102611,24014],{"class":74},[30,102613,102614],{"class":74}," \"mujoco>=2.3\"\n",[287,102616,102618],{"id":102617},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[157,102620,102621],{},"先安装系统依赖:",[20,102623,102625],{"className":22,"code":102624,"language":24,"meta":25,"style":25},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[27,102626,102627],{"__ignoreMap":25},[30,102628,102629,102631,102633,102635,102637,102640,102642,102645,102647,102650,102652],{"class":32,"line":33},[30,102630,24757],{"class":36},[30,102632,26453],{"class":74},[30,102634,24014],{"class":74},[30,102636,26538],{"class":40},[30,102638,102639],{"class":74}," mesa-libGL",[30,102641,100952],{"class":74},[30,102643,102644],{"class":74}," glfw",[30,102646,100972],{"class":74},[30,102648,102649],{"class":74}," libX11",[30,102651,100985],{"class":74},[30,102653,102654],{"class":74}," libXrandr\n",[287,102656,102658],{"id":102657},"xml-解析失败","XML 解析失败",[157,102660,102661],{},"检查:",[271,102663,102664,102667,102670,102676],{},[150,102665,102666],{},"标签是否闭合",[150,102668,102669],{},"属性是否带引号",[150,102671,102672,102673],{},"根节点是否是 ",[27,102674,102675],{},"\u003Cmujoco>",[150,102677,102678,102680,102681,102684],{},[27,102679,51938],{}," 是否放在 ",[27,102682,102683],{},"\u003Cworldbody>"," 内部",[287,102686,102688,102690,102691],{"id":102687},"final-time-不是严格等于-10",[27,102689,102537],{}," 不是严格等于 ",[27,102692,102541],{},[157,102694,102695],{},"这通常不是错误。浮点数计算可能得到：",[20,102697,102700],{"className":102698,"code":102699,"language":5369,"meta":25},[5367],"1.0000000000000007\n",[27,102701,102699],{"__ignoreMap":25},[157,102703,102704,102705,102707],{},"只要接近 ",[27,102706,102541],{}," 就正常。",[287,102709,102710],{"id":102710},"方块没有掉下来",[157,102712,102713],{},"检查：",[271,102715,102716,102722,102728,102733],{},[150,102717,102718,102719],{},"方块 body 里是否有 ",[27,102720,102721],{},"\u003Cfreejoint\u002F>",[150,102723,102724,102725],{},"重力是否是 ",[27,102726,102727],{},"0 0 -9.81",[150,102729,102730,102731],{},"是否真的调用了 ",[27,102732,100823],{},[150,102734,102735,102736,102738,102739],{},"你看的是否是 ",[27,102737,102481],{},"，不是 ",[27,102740,102741],{},"initial qpos",[15,102743,102745],{"id":102744},"_8本章小结","8.本章小结",[157,102747,102748],{},"本章你已经完成了 MuJoCo 的最小闭环：",[20,102750,102753],{"className":102751,"code":102752,"language":5369,"meta":25},[5367],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[27,102754,102752],{"__ignoreMap":25},[157,102756,102757],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[234,102759,102760],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":25,"searchDepth":44,"depth":44,"links":102762},[102763,102764,102765,102770,102774,102775,102776,102784],{"id":100784,"depth":44,"text":100785},{"id":100907,"depth":44,"text":100908},{"id":101182,"depth":44,"text":101183,"children":102766},[102767,102768,102769],{"id":101220,"depth":52,"text":101221},{"id":101314,"depth":52,"text":101315},{"id":101366,"depth":52,"text":101367},{"id":101390,"depth":44,"text":101391,"children":102771},[102772,102773],{"id":101710,"depth":52,"text":101710},{"id":101846,"depth":52,"text":101846},{"id":102453,"depth":44,"text":102454},{"id":102485,"depth":44,"text":102486},{"id":102590,"depth":44,"text":102591,"children":102777},[102778,102779,102780,102781,102783],{"id":102594,"depth":52,"text":102597},{"id":102617,"depth":52,"text":102618},{"id":102657,"depth":52,"text":102658},{"id":102687,"depth":52,"text":102782},"final time 不是严格等于 1.0",{"id":102710,"depth":52,"text":102710},{"id":102744,"depth":44,"text":102745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100776,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102791,"title":102792,"body":102793,"description":25,"extension":243,"meta":104449,"navigation":245,"path":104450,"seo":104451,"stem":104452,"__hash__":104453},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102794,"toc":104425},[102795,102798,102800,102803,102806,102823,102918,102921,102927,102929,102931,102955,102958,102972,102975,103016,103018,103031,103033,103036,103084,103096,103099,103102,103108,103121,103188,103191,103210,103213,103216,103222,103224,103233,103236,103240,103249,103331,103340,103344,103350,103364,103374,103376,103706,103709,103721,103723,103734,103736,103739,103757,103760,103763,103781,103792,103795,103810,103820,103822,103843,103860,103880,103886,103926,103942,103958,103964,103967,103991,104007,104012,104042,104059,104084,104087,104102,104111,104126,104135,104150,104157,104159,104169,104182,104189,104192,104231,104238,104240,104292,104294,104300,104303,104310,104317,104320,104322,104340,104343,104346,104380,104392,104394,104397,104419,104422],[10,102796,102792],{"id":102797},"_2xml-与-mjcf-物理建模基础",[15,102799,100785],{"id":100784},[157,102801,102802],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[157,102804,102805],{},"本章结束后，你应该能看懂一个简单模型里：",[271,102807,102808,102811,102814,102817,102820],{},[150,102809,102810],{},"地面在哪里。",[150,102812,102813],{},"物体初始位置在哪里。",[150,102815,102816],{},"几何体是什么形状。",[150,102818,102819],{},"哪些 body 可以自由运动。",[150,102821,102822],{},"如何用名字在 Python 里找到 XML 中的对象。",[457,102824,102825,102835],{},[460,102826,102827],{},[463,102828,102829,102832],{},[466,102830,102831],{"align":23918},"标签",[466,102833,102834],{"align":23918},"作用",[504,102836,102837,102846,102856,102865,102875,102885,102898,102908],{},[463,102838,102839,102843],{},[509,102840,102841],{"align":23918},[27,102842,102675],{},[509,102844,102845],{"align":23918},"根节点",[463,102847,102848,102853],{},[509,102849,102850],{"align":23918},[27,102851,102852],{},"\u003Coption>",[509,102854,102855],{"align":23918},"仿真参数",[463,102857,102858,102862],{},[509,102859,102860],{"align":23918},[27,102861,102683],{},[509,102863,102864],{"align":23918},"世界中的物体",[463,102866,102867,102872],{},[509,102868,102869],{"align":23918},[27,102870,102871],{},"\u003Cbody>",[509,102873,102874],{"align":23918},"刚体",[463,102876,102877,102882],{},[509,102878,102879],{"align":23918},[27,102880,102881],{},"\u003Cgeom>",[509,102883,102884],{"align":23918},"几何体、碰撞体、可视体",[463,102886,102887,102895],{},[509,102888,102889,25151,102892],{"align":23918},[27,102890,102891],{},"\u003Cjoint>",[27,102893,102894],{},"\u003Cfreejoint>",[509,102896,102897],{"align":23918},"关节",[463,102899,102900,102905],{},[509,102901,102902],{"align":23918},[27,102903,102904],{},"\u003Csite>",[509,102906,102907],{"align":23918},"标记点",[463,102909,102910,102915],{},[509,102911,102912],{"align":23918},[27,102913,102914],{},"\u003Cactuator>",[509,102916,102917],{"align":23918},"控制器",[157,102919,102920],{},"初学时可以先记住：",[20,102922,102925],{"className":102923,"code":102924,"language":5369,"meta":25},[5367],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[27,102926,102924],{"__ignoreMap":25},[15,102928,100908],{"id":100907},[157,102930,100911],{},[20,102932,102934],{"className":22,"code":102933,"language":24,"meta":25,"style":25},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[27,102935,102936],{"__ignoreMap":25},[30,102937,102938,102940,102942,102944,102946,102948,102950,102952],{"class":32,"line":33},[30,102939,24757],{"class":36},[30,102941,26453],{"class":74},[30,102943,24014],{"class":74},[30,102945,26538],{"class":40},[30,102947,102639],{"class":74},[30,102949,100952],{"class":74},[30,102951,102644],{"class":74},[30,102953,102954],{"class":74}," glfw-devel\n",[157,102956,102957],{},"pip:",[20,102959,102960],{"className":22,"code":101057,"language":24,"meta":25,"style":25},[27,102961,102962],{"__ignoreMap":25},[30,102963,102964,102966,102968,102970],{"class":32,"line":33},[30,102965,24011],{"class":36},[30,102967,24014],{"class":74},[30,102969,101068],{"class":74},[30,102971,101071],{"class":74},[157,102973,102974],{},"conda:",[20,102976,102978],{"className":22,"code":102977,"language":24,"meta":25,"style":25},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[27,102979,102980,102997,103006],{"__ignoreMap":25},[30,102981,102982,102984,102986,102988,102991,102993,102995],{"class":32,"line":33},[30,102983,30468],{"class":36},[30,102985,29314],{"class":74},[30,102987,25288],{"class":40},[30,102989,102990],{"class":74}," mujoco-xml",[30,102992,101113],{"class":74},[30,102994,101116],{"class":40},[30,102996,101119],{"class":40},[30,102998,102999,103001,103003],{"class":32,"line":44},[30,103000,30468],{"class":36},[30,103002,101126],{"class":74},[30,103004,103005],{"class":74}," mujoco-xml\n",[30,103007,103008,103010,103012,103014],{"class":32,"line":52},[30,103009,24011],{"class":36},[30,103011,24014],{"class":74},[30,103013,101068],{"class":74},[30,103015,101071],{"class":74},[157,103017,101142],{},[271,103019,103020,103023,103028],{},[150,103021,103022],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[150,103024,103025,103026,28523],{},"本章使用基础标签，适用于 ",[27,103027,101165],{},[150,103029,103030],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[15,103032,101183],{"id":101182},[157,103034,103035],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[20,103037,103039],{"className":53205,"code":103038,"language":53207,"meta":25,"style":25},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[27,103040,103041,103055,103063,103068,103076],{"__ignoreMap":25},[30,103042,103043,103045,103047,103049,103051,103053],{"class":32,"line":33},[30,103044,1230],{"class":321},[30,103046,101159],{"class":51438},[30,103048,101913],{"class":36},[30,103050,367],{"class":321},[30,103052,62817],{"class":74},[30,103054,51445],{"class":321},[30,103056,103057,103059,103061],{"class":32,"line":44},[30,103058,52282],{"class":321},[30,103060,101979],{"class":51438},[30,103062,51445],{"class":321},[30,103064,103065],{"class":32,"line":52},[30,103066,103067],{"class":321},"    ...\n",[30,103069,103070,103072,103074],{"class":32,"line":60},[30,103071,52555],{"class":321},[30,103073,101979],{"class":51438},[30,103075,51445],{"class":321},[30,103077,103078,103080,103082],{"class":32,"line":68},[30,103079,51923],{"class":321},[30,103081,101159],{"class":51438},[30,103083,51445],{"class":321},[157,103085,103086,103088,103089,103091,103092,103095],{},[27,103087,51938],{}," 表示刚体。",[27,103090,101258],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[27,103093,103094],{},"joint"," 表示刚体相对父刚体如何运动。",[287,103097,103098],{"id":103098},"层级结构非常重要",[157,103100,103101],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[20,103103,103106],{"className":103104,"code":103105,"language":5369,"meta":25},[5367],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[27,103107,103105],{"__ignoreMap":25},[157,103109,103110,101156,103113,103116,103117,103120],{},[27,103111,103112],{},"red_box_geom",[27,103114,103115],{},"box_center"," 都属于 ",[27,103118,103119],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[20,103122,103124],{"className":53205,"code":103123,"language":53207,"meta":25,"style":25},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cfreejoint name=\"box_free\"\u002F>\n  \u003Cgeom type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[27,103125,103126,103146,103160,103180],{"__ignoreMap":25},[30,103127,103128,103130,103132,103134,103136,103138,103140,103142,103144],{"class":32,"line":33},[30,103129,1230],{"class":321},[30,103131,51938],{"class":51438},[30,103133,15102],{"class":36},[30,103135,367],{"class":321},[30,103137,53629],{"class":74},[30,103139,101244],{"class":36},[30,103141,367],{"class":321},[30,103143,101249],{"class":74},[30,103145,51445],{"class":321},[30,103147,103148,103150,103152,103154,103156,103158],{"class":32,"line":44},[30,103149,52282],{"class":321},[30,103151,101758],{"class":51438},[30,103153,15102],{"class":36},[30,103155,367],{"class":321},[30,103157,102099],{"class":74},[30,103159,101282],{"class":321},[30,103161,103162,103164,103166,103168,103170,103172,103174,103176,103178],{"class":32,"line":52},[30,103163,52282],{"class":321},[30,103165,101258],{"class":51438},[30,103167,53962],{"class":36},[30,103169,367],{"class":321},[30,103171,53629],{"class":74},[30,103173,101274],{"class":36},[30,103175,367],{"class":321},[30,103177,101279],{"class":74},[30,103179,101282],{"class":321},[30,103181,103182,103184,103186],{"class":32,"line":60},[30,103183,51923],{"class":321},[30,103185,51938],{"class":51438},[30,103187,51445],{"class":321},[157,103189,103190],{},"含义:",[271,103192,103193,103199,103204,103207],{},[150,103194,103195,103196,103198],{},"创建名为 ",[27,103197,53852],{}," 的刚体",[150,103200,103201,103202],{},"初始位置在世界坐标 ",[27,103203,101307],{},[150,103205,103206],{},"它有一个自由关节",[150,103208,103209],{},"它有一个盒子几何体",[287,103211,103212],{"id":103212},"坐标怎么理解",[157,103214,103215],{},"MuJoCo 默认使用三维坐标：",[20,103217,103220],{"className":103218,"code":103219,"language":5369,"meta":25},[5367],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[27,103221,103219],{"__ignoreMap":25},[157,103223,14815],{},[20,103225,103227],{"className":53205,"code":103226,"language":53207,"meta":25,"style":25},"pos=\"0 0 1\"\n",[27,103228,103229],{"__ignoreMap":25},[30,103230,103231],{"class":32,"line":33},[30,103232,103226],{"class":321},[157,103234,103235],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[287,103237,103239],{"id":103238},"geom-的-size-怎么理解","geom 的 size 怎么理解",[157,103241,103242,103243,82668,103246,103248],{},"不同 ",[27,103244,103245],{},"type",[27,103247,31634],{}," 含义不同：",[457,103250,103251,103266],{},[460,103252,103253],{},[463,103254,103255,103259,103264],{},[466,103256,103257],{"align":23918},[27,103258,103245],{},[466,103260,103261,103263],{"align":23918},[27,103262,31634],{}," 示例",[466,103265,100838],{"align":23918},[504,103267,103268,103282,103297,103316],{},[463,103269,103270,103274,103279],{},[509,103271,103272],{"align":23918},[27,103273,53852],{},[509,103275,103276],{"align":23918},[27,103277,103278],{},"size=\"0.1 0.2 0.3\"",[509,103280,103281],{"align":23918},"x\u002Fy\u002Fz 半边长，不是完整长度",[463,103283,103284,103289,103294],{},[509,103285,103286],{"align":23918},[27,103287,103288],{},"sphere",[509,103290,103291],{"align":23918},[27,103292,103293],{},"size=\"0.1\"",[509,103295,103296],{"align":23918},"球半径",[463,103298,103299,103304,103309],{},[509,103300,103301],{"align":23918},[27,103302,103303],{},"capsule",[509,103305,103306],{"align":23918},[27,103307,103308],{},"size=\"0.03\"",[509,103310,103311,103312,103315],{"align":23918},"胶囊半径，长度常用 ",[27,103313,103314],{},"fromto"," 指定",[463,103317,103318,103323,103328],{},[509,103319,103320],{"align":23918},[27,103321,103322],{},"plane",[509,103324,103325],{"align":23918},[27,103326,103327],{},"size=\"3 3 0.1\"",[509,103329,103330],{"align":23918},"可视平面大小，通常当地面",[157,103332,103333,103334,103336,103337,103339],{},"最容易踩坑的是 box：",[27,103335,102162],{}," 表示边长大约是 ",[27,103338,32175],{},"，因为 MuJoCo 用的是半边长。",[287,103341,103343],{"id":103342},"site-是什么","site 是什么",[157,103345,103346,103349],{},[27,103347,103348],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[271,103351,103352,103355,103358,103361],{},[150,103353,103354],{},"标记机械臂末端。",[150,103356,103357],{},"标记目标位置。",[150,103359,103360],{},"放传感器或相机参考点。",[150,103362,103363],{},"在 Python 中读取某个关键点的世界坐标。",[157,103365,103366,103367,101156,103370,103373],{},"在后面的 Reacher 任务中，",[27,103368,103369],{},"tip",[27,103371,103372],{},"target"," 就会用 site 表示。",[15,103375,101391],{"id":101390},[20,103377,103379],{"className":30516,"code":103378,"language":30518,"meta":25,"style":25},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"xml_basic\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n\n    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"red_box_free\"\u002F>\n      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n\n    if box_body_id \u003C 0:\n        raise RuntimeError(\"body red_box not found\")\n    if site_id \u003C 0:\n        raise RuntimeError(\"site box_center not found\")\n\n    for _ in range(200):\n        mujoco.mj_step(model, data)\n\n    print(\"simulation time:\", data.time)\n    print(\"box body position:\", data.xpos[box_body_id].copy())\n    print(\"site position:\", data.site_xpos[site_id].copy())\n    print(\"box qpos:\", np.array(data.qpos))\n\n\nif __name__ == \"__main__\":\n    main()\n",[27,103380,103381,103387,103397,103401,103405,103413,103418,103422,103426,103430,103435,103439,103444,103449,103454,103459,103463,103467,103471,103475,103479,103483,103495,103507,103515,103519,103534,103549,103553,103566,103581,103594,103607,103611,103627,103631,103635,103646,103658,103670,103682,103686,103690,103702],{"__ignoreMap":25},[30,103382,103383,103385],{"class":32,"line":33},[30,103384,30530],{"class":317},[30,103386,101439],{"class":321},[30,103388,103389,103391,103393,103395],{"class":32,"line":44},[30,103390,30530],{"class":317},[30,103392,31518],{"class":321},[30,103394,31521],{"class":317},[30,103396,31524],{"class":321},[30,103398,103399],{"class":32,"line":52},[30,103400,2582],{"emptyLinePlaceholder":245},[30,103402,103403],{"class":32,"line":60},[30,103404,2582],{"emptyLinePlaceholder":245},[30,103406,103407,103409,103411],{"class":32,"line":68},[30,103408,101452],{"class":40},[30,103410,13746],{"class":317},[30,103412,101457],{"class":74},[30,103414,103415],{"class":32,"line":80},[30,103416,103417],{"class":74},"\u003Cmujoco model=\"xml_basic\">\n",[30,103419,103420],{"class":32,"line":88},[30,103421,101467],{"class":74},[30,103423,103424],{"class":32,"line":96},[30,103425,2582],{"emptyLinePlaceholder":245},[30,103427,103428],{"class":32,"line":104},[30,103429,101476],{"class":74},[30,103431,103432],{"class":32,"line":112},[30,103433,103434],{"class":74},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[30,103436,103437],{"class":32,"line":123},[30,103438,2582],{"emptyLinePlaceholder":245},[30,103440,103441],{"class":32,"line":131},[30,103442,103443],{"class":74},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[30,103445,103446],{"class":32,"line":142},[30,103447,103448],{"class":74},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[30,103450,103451],{"class":32,"line":1811},[30,103452,103453],{"class":74},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[30,103455,103456],{"class":32,"line":1825},[30,103457,103458],{"class":74},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[30,103460,103461],{"class":32,"line":1830},[30,103462,101505],{"class":74},[30,103464,103465],{"class":32,"line":1836},[30,103466,101510],{"class":74},[30,103468,103469],{"class":32,"line":1857},[30,103470,101515],{"class":74},[30,103472,103473],{"class":32,"line":1862},[30,103474,95836],{"class":74},[30,103476,103477],{"class":32,"line":1876},[30,103478,2582],{"emptyLinePlaceholder":245},[30,103480,103481],{"class":32,"line":1881},[30,103482,2582],{"emptyLinePlaceholder":245},[30,103484,103485,103487,103489,103491,103493],{"class":32,"line":1910},[30,103486,32085],{"class":317},[30,103488,2155],{"class":36},[30,103490,101536],{"class":321},[30,103492,95824],{"class":40},[30,103494,3921],{"class":321},[30,103496,103497,103499,103501,103503,103505],{"class":32,"line":1915},[30,103498,101545],{"class":321},[30,103500,367],{"class":317},[30,103502,101550],{"class":321},[30,103504,101452],{"class":40},[30,103506,328],{"class":321},[30,103508,103509,103511,103513],{"class":32,"line":1932},[30,103510,101559],{"class":321},[30,103512,367],{"class":317},[30,103514,101564],{"class":321},[30,103516,103517],{"class":32,"line":1937},[30,103518,2582],{"emptyLinePlaceholder":245},[30,103520,103521,103524,103526,103529,103532],{"class":32,"line":1942},[30,103522,103523],{"class":321},"    box_body_id ",[30,103525,367],{"class":317},[30,103527,103528],{"class":321}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[30,103530,103531],{"class":74},"\"red_box\"",[30,103533,328],{"class":321},[30,103535,103536,103539,103541,103544,103547],{"class":32,"line":1947},[30,103537,103538],{"class":321},"    site_id ",[30,103540,367],{"class":317},[30,103542,103543],{"class":321}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[30,103545,103546],{"class":74},"\"box_center\"",[30,103548,328],{"class":321},[30,103550,103551],{"class":32,"line":1961},[30,103552,2582],{"emptyLinePlaceholder":245},[30,103554,103555,103557,103560,103562,103564],{"class":32,"line":1966},[30,103556,3283],{"class":317},[30,103558,103559],{"class":321}," box_body_id ",[30,103561,1230],{"class":317},[30,103563,4275],{"class":40},[30,103565,3921],{"class":321},[30,103567,103568,103571,103574,103576,103579],{"class":32,"line":2759},[30,103569,103570],{"class":317},"        raise",[30,103572,103573],{"class":40}," RuntimeError",[30,103575,322],{"class":321},[30,103577,103578],{"class":74},"\"body red_box not found\"",[30,103580,328],{"class":321},[30,103582,103583,103585,103588,103590,103592],{"class":32,"line":2773},[30,103584,3283],{"class":317},[30,103586,103587],{"class":321}," site_id ",[30,103589,1230],{"class":317},[30,103591,4275],{"class":40},[30,103593,3921],{"class":321},[30,103595,103596,103598,103600,103602,103605],{"class":32,"line":2781},[30,103597,103570],{"class":317},[30,103599,103573],{"class":40},[30,103601,322],{"class":321},[30,103603,103604],{"class":74},"\"site box_center not found\"",[30,103606,328],{"class":321},[30,103608,103609],{"class":32,"line":2786},[30,103610,2582],{"emptyLinePlaceholder":245},[30,103612,103613,103615,103617,103619,103621,103623,103625],{"class":32,"line":2792},[30,103614,3383],{"class":317},[30,103616,101639],{"class":321},[30,103618,26181],{"class":317},[30,103620,32581],{"class":40},[30,103622,322],{"class":321},[30,103624,1905],{"class":40},[30,103626,30924],{"class":321},[30,103628,103629],{"class":32,"line":2798},[30,103630,101654],{"class":321},[30,103632,103633],{"class":32,"line":2803},[30,103634,2582],{"emptyLinePlaceholder":245},[30,103636,103637,103639,103641,103644],{"class":32,"line":8130},[30,103638,31437],{"class":40},[30,103640,322],{"class":321},[30,103642,103643],{"class":74},"\"simulation time:\"",[30,103645,101616],{"class":321},[30,103647,103648,103650,103652,103655],{"class":32,"line":8154},[30,103649,31437],{"class":40},[30,103651,322],{"class":321},[30,103653,103654],{"class":74},"\"box body position:\"",[30,103656,103657],{"class":321},", data.xpos[box_body_id].copy())\n",[30,103659,103660,103662,103664,103667],{"class":32,"line":8159},[30,103661,31437],{"class":40},[30,103663,322],{"class":321},[30,103665,103666],{"class":74},"\"site position:\"",[30,103668,103669],{"class":321},", data.site_xpos[site_id].copy())\n",[30,103671,103672,103674,103676,103679],{"class":32,"line":8165},[30,103673,31437],{"class":40},[30,103675,322],{"class":321},[30,103677,103678],{"class":74},"\"box qpos:\"",[30,103680,103681],{"class":321},", np.array(data.qpos))\n",[30,103683,103684],{"class":32,"line":8192},[30,103685,2582],{"emptyLinePlaceholder":245},[30,103687,103688],{"class":32,"line":8197},[30,103689,2582],{"emptyLinePlaceholder":245},[30,103691,103692,103694,103696,103698,103700],{"class":32,"line":8203},[30,103693,1717],{"class":317},[30,103695,31358],{"class":40},[30,103697,101697],{"class":317},[30,103699,101700],{"class":74},[30,103701,3921],{"class":321},[30,103703,103704],{"class":32,"line":8215},[30,103705,101707],{"class":321},[157,103707,103708],{},"保存为：",[20,103710,103712],{"className":22,"code":103711,"language":24,"meta":25,"style":25},"touch ch2_xml_basic.py\n",[27,103713,103714],{"__ignoreMap":25},[30,103715,103716,103718],{"class":32,"line":33},[30,103717,101421],{"class":36},[30,103719,103720],{"class":74}," ch2_xml_basic.py\n",[157,103722,102439],{},[20,103724,103726],{"className":22,"code":103725,"language":24,"meta":25,"style":25},"python ch2_xml_basic.py\n",[27,103727,103728],{"__ignoreMap":25},[30,103729,103730,103732],{"class":32,"line":33},[30,103731,30518],{"class":36},[30,103733,103720],{"class":74},[287,103735,101710],{"id":101710},[157,103737,103738],{},"用名字查找 body：",[20,103740,103742],{"className":30516,"code":103741,"language":30518,"meta":25,"style":25},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[27,103743,103744],{"__ignoreMap":25},[30,103745,103746,103749,103751,103753,103755],{"class":32,"line":33},[30,103747,103748],{"class":321},"box_body_id ",[30,103750,367],{"class":317},[30,103752,103528],{"class":321},[30,103754,103531],{"class":74},[30,103756,328],{"class":321},[157,103758,103759],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[157,103761,103762],{},"用名字查找 site：",[20,103764,103766],{"className":30516,"code":103765,"language":30518,"meta":25,"style":25},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[27,103767,103768],{"__ignoreMap":25},[30,103769,103770,103773,103775,103777,103779],{"class":32,"line":33},[30,103771,103772],{"class":321},"site_id ",[30,103774,367],{"class":317},[30,103776,103543],{"class":321},[30,103778,103546],{"class":74},[30,103780,328],{"class":321},[157,103782,103783,103784,103787,103788,103791],{},"注意第二个参数是对象类型。查 body 就用 ",[27,103785,103786],{},"mjOBJ_BODY","，查 site 就用 ",[27,103789,103790],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[157,103793,103794],{},"读取世界坐标：",[20,103796,103798],{"className":30516,"code":103797,"language":30518,"meta":25,"style":25},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[27,103799,103800,103805],{"__ignoreMap":25},[30,103801,103802],{"class":32,"line":33},[30,103803,103804],{"class":321},"data.xpos[box_body_id]\n",[30,103806,103807],{"class":32,"line":44},[30,103808,103809],{"class":321},"data.site_xpos[site_id]\n",[157,103811,103812,103815,103816,103819],{},[27,103813,103814],{},"xpos"," 是 body 的世界坐标，",[27,103817,103818],{},"site_xpos"," 是 site 的世界坐标。",[287,103821,101846],{"id":101846},[20,103823,103825],{"className":30516,"code":103824,"language":30518,"meta":25,"style":25},"import mujoco\nimport numpy as np\n",[27,103826,103827,103833],{"__ignoreMap":25},[30,103828,103829,103831],{"class":32,"line":33},[30,103830,30530],{"class":317},[30,103832,101439],{"class":321},[30,103834,103835,103837,103839,103841],{"class":32,"line":44},[30,103836,30530],{"class":317},[30,103838,31518],{"class":321},[30,103840,31521],{"class":317},[30,103842,31524],{"class":321},[157,103844,103845,103846,103849,103850,103853,103854,532,103857,28523],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[27,103847,103848],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[27,103851,103852],{},"as np"," 是习惯写法，后面就可以写 ",[27,103855,103856],{},"np.array(...)",[27,103858,103859],{},"np.round(...)",[20,103861,103862],{"className":30516,"code":101733,"language":30518,"meta":25,"style":25},[27,103863,103864,103872,103876],{"__ignoreMap":25},[30,103865,103866,103868,103870],{"class":32,"line":33},[30,103867,101452],{"class":40},[30,103869,13746],{"class":317},[30,103871,101457],{"class":74},[30,103873,103874],{"class":32,"line":44},[30,103875,101748],{"class":74},[30,103877,103878],{"class":32,"line":52},[30,103879,95836],{"class":74},[157,103881,103882,103883,28523],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[27,103884,103885],{},"mujoco.MjModel.from_xml_string(XML)",[20,103887,103889],{"className":53205,"code":103888,"language":53207,"meta":25,"style":25},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[27,103890,103891],{"__ignoreMap":25},[30,103892,103893,103895,103897,103899,103901,103903,103905,103907,103910,103912,103914,103917,103919,103921,103924],{"class":32,"line":33},[30,103894,1230],{"class":321},[30,103896,103348],{"class":51438},[30,103898,15102],{"class":36},[30,103900,367],{"class":321},[30,103902,103546],{"class":74},[30,103904,101244],{"class":36},[30,103906,367],{"class":321},[30,103908,103909],{"class":74},"\"0 0 0\"",[30,103911,101274],{"class":36},[30,103913,367],{"class":321},[30,103915,103916],{"class":74},"\"0.03\"",[30,103918,78905],{"class":36},[30,103920,367],{"class":321},[30,103922,103923],{"class":74},"\"0 1 0 1\"",[30,103925,101282],{"class":321},[157,103927,103928,103930,103931,103934,103935,103937,103938,103941],{},[27,103929,103348],{}," 是标记点。",[27,103932,103933],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[27,103936,103308],{}," 表示显示出来的小球大小。",[27,103939,103940],{},"rgba=\"0 1 0 1\""," 表示绿色。",[20,103943,103944],{"className":30516,"code":103741,"language":30518,"meta":25,"style":25},[27,103945,103946],{"__ignoreMap":25},[30,103947,103948,103950,103952,103954,103956],{"class":32,"line":33},[30,103949,103748],{"class":321},[30,103951,367],{"class":317},[30,103953,103528],{"class":321},[30,103955,103531],{"class":74},[30,103957,328],{"class":321},[157,103959,103960,103961,103963],{},"这行的作用是：根据名字 ",[27,103962,103531],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[157,103965,103966],{},"拆开看：",[271,103968,103969,103975,103980,103986],{},[150,103970,103971,103974],{},[27,103972,103973],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[150,103976,103977,103979],{},[27,103978,102223],{}," 是被查询的模型。",[150,103981,103982,103985],{},[27,103983,103984],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[150,103987,103988,103990],{},[27,103989,103531],{}," 是 XML 里写的名字。",[20,103992,103993],{"className":30516,"code":103765,"language":30518,"meta":25,"style":25},[27,103994,103995],{"__ignoreMap":25},[30,103996,103997,103999,104001,104003,104005],{"class":32,"line":33},[30,103998,103772],{"class":321},[30,104000,367],{"class":317},[30,104002,103543],{"class":321},[30,104004,103546],{"class":74},[30,104006,328],{"class":321},[157,104008,104009,104010,28523],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[27,104011,103546],{},[20,104013,104015],{"className":30516,"code":104014,"language":30518,"meta":25,"style":25},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[27,104016,104017,104029],{"__ignoreMap":25},[30,104018,104019,104021,104023,104025,104027],{"class":32,"line":33},[30,104020,1717],{"class":317},[30,104022,103559],{"class":321},[30,104024,1230],{"class":317},[30,104026,4275],{"class":40},[30,104028,3921],{"class":321},[30,104030,104031,104034,104036,104038,104040],{"class":32,"line":44},[30,104032,104033],{"class":317},"    raise",[30,104035,103573],{"class":40},[30,104037,322],{"class":321},[30,104039,103578],{"class":74},[30,104041,328],{"class":321},[157,104043,104044,104046,104047,104050,104051,104054,104055,104058],{},[27,104045,1717],{}," 是条件判断。",[27,104048,104049],{},"mj_name2id"," 找不到对象时会返回 ",[27,104052,104053],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[27,104056,104057],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[20,104060,104062],{"className":30516,"code":104061,"language":30518,"meta":25,"style":25},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[27,104063,104064,104080],{"__ignoreMap":25},[30,104065,104066,104068,104070,104072,104074,104076,104078],{"class":32,"line":33},[30,104067,3207],{"class":317},[30,104069,101639],{"class":321},[30,104071,26181],{"class":317},[30,104073,32581],{"class":40},[30,104075,322],{"class":321},[30,104077,1905],{"class":40},[30,104079,30924],{"class":321},[30,104081,104082],{"class":32,"line":44},[30,104083,101837],{"class":321},[157,104085,104086],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[20,104088,104090],{"className":30516,"code":104089,"language":30518,"meta":25,"style":25},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[27,104091,104092],{"__ignoreMap":25},[30,104093,104094,104096,104098,104100],{"class":32,"line":33},[30,104095,30553],{"class":40},[30,104097,322],{"class":321},[30,104099,103654],{"class":74},[30,104101,103657],{"class":321},[157,104103,104104,104106,104107,104110],{},[27,104105,101217],{}," 保存所有 body 的世界坐标。",[27,104108,104109],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[20,104112,104114],{"className":30516,"code":104113,"language":30518,"meta":25,"style":25},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[27,104115,104116],{"__ignoreMap":25},[30,104117,104118,104120,104122,104124],{"class":32,"line":33},[30,104119,30553],{"class":40},[30,104121,322],{"class":321},[30,104123,103666],{"class":74},[30,104125,103669],{"class":321},[157,104127,104128,104131,104132,104134],{},[27,104129,104130],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[27,104133,103115],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[20,104136,104138],{"className":30516,"code":104137,"language":30518,"meta":25,"style":25},"print(\"box qpos:\", np.array(data.qpos))\n",[27,104139,104140],{"__ignoreMap":25},[30,104141,104142,104144,104146,104148],{"class":32,"line":33},[30,104143,30553],{"class":40},[30,104145,322],{"class":321},[30,104147,103678],{"class":74},[30,104149,103681],{"class":321},[157,104151,104152,104153,104156],{},"这里打印广义位置数组。",[27,104154,104155],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[15,104158,102454],{"id":102453},[157,104160,104161,104162,104165,104166,28523],{},"程序会输出 ",[27,104163,104164],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[27,104167,104168],{},"qpos",[157,104170,104171,104173,104174,104177,104178,104181],{},[27,104172,104109],{}," 是 body 的世界坐标位置。",[27,104175,104176],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[27,104179,104180],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[157,104183,82360,104184,82668,104186,104188],{},[27,104185,103115],{},[27,104187,103933],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[157,104190,104191],{},"如果你把 site 改成：",[20,104193,104195],{"className":53205,"code":104194,"language":53207,"meta":25,"style":25},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[27,104196,104197],{"__ignoreMap":25},[30,104198,104199,104201,104203,104205,104207,104210,104212,104214,104217,104219,104221,104223,104225,104227,104229],{"class":32,"line":33},[30,104200,1230],{"class":321},[30,104202,103348],{"class":51438},[30,104204,15102],{"class":36},[30,104206,367],{"class":321},[30,104208,104209],{"class":74},"\"box_top\"",[30,104211,101244],{"class":36},[30,104213,367],{"class":321},[30,104215,104216],{"class":74},"\"0 0 0.15\"",[30,104218,101274],{"class":36},[30,104220,367],{"class":321},[30,104222,103916],{"class":74},[30,104224,78905],{"class":36},[30,104226,367],{"class":321},[30,104228,103923],{"class":74},[30,104230,101282],{"class":321},[157,104232,104233,104234,104237],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[27,104235,104236],{},"site position"," 就会比 body position 的 z 坐标更高。",[15,104239,102486],{"id":102485},[271,104241,104242,104251,104254,104261,104267,104278],{},[150,104243,102549,104244,104246,104247,102552,104249,28523],{},[27,104245,103119],{}," 的初始高度从 ",[27,104248,537],{},[27,104250,398],{},[150,104252,104253],{},"重新运行程序。",[150,104255,104256,104257,104260],{},"观察 ",[27,104258,104259],{},"box qpos"," 和最终位置是否变化。",[150,104262,104263,104264,104266],{},"故意把 ",[27,104265,103348],{}," 名称改错，确认程序能报错。",[150,104268,102549,104269,104271,104272,102552,104274,104277],{},[27,104270,101258],{}," 的颜色 ",[27,104273,102170],{},[27,104275,104276],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[150,104279,102549,104280,82668,104282,102552,104285,104288,104289,104291],{},[27,104281,103115],{},[27,104283,104284],{},"pos",[27,104286,104287],{},"0 0 0.2","，观察 ",[27,104290,104236],{}," 如何变化。",[15,104293,102591],{"id":102590},[287,104295,104297],{"id":104296},"xml-error-schema-violation",[27,104298,104299],{},"XML Error: Schema violation",[157,104301,104302],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[287,104304,104306,81428,104308],{"id":104305},"mj_name2id-返回-1",[27,104307,104049],{},[27,104309,104053],{},[157,104311,104312,104313,104316],{},"说明名字没有找到。检查 XML 中 ",[27,104314,104315],{},"name=\"...\"","，并确认对象类型正确。",[287,104318,104319],{"id":104319},"物体不下落",[157,104321,102661],{},[271,104323,104324,104329,104334],{},[150,104325,104326,104327],{},"body 是否有 ",[27,104328,101758],{},[150,104330,104331,104332],{},"gravity 是否为 ",[27,104333,102727],{},[150,104335,104336,104337,104339],{},"body 是否被固定在 ",[27,104338,101979],{}," 中",[287,104341,104342],{"id":104342},"坐标看起来不符合预期",[157,104344,104345],{},"先区分两种坐标：",[457,104347,104348,104357],{},[460,104349,104350],{},[463,104351,104352,104355],{},[466,104353,104354],{"align":23918},"坐标",[466,104356,100838],{"align":23918},[504,104358,104359,104369],{},[463,104360,104361,104366],{},[509,104362,104363,104364],{"align":23918},"XML 里的 ",[27,104365,104284],{},[509,104367,104368],{"align":23918},"相对父 body 的局部坐标",[463,104370,104371,104377],{},[509,104372,104373,25151,104375],{"align":23918},[27,104374,101217],{},[27,104376,104130],{},[509,104378,104379],{"align":23918},"仿真更新后的世界坐标",[157,104381,104382,104383,104385,104386,82677,104389,104391],{},"如果你修改了 ",[27,104384,101208],{},"，但还没调用 ",[27,104387,104388],{},"mj_forward",[27,104390,101353],{},"，世界坐标可能还没有更新。",[15,104393,102745],{"id":102744},[157,104395,104396],{},"MJCF 建模先掌握四件事：",[271,104398,104399,104404,104409,104414],{},[150,104400,104401,104403],{},[27,104402,51938],{}," 表示刚体层级。",[150,104405,104406,104408],{},[27,104407,101258],{}," 表示形状、碰撞和质量。",[150,104410,104411,104413],{},[27,104412,103094],{}," 决定 body 能不能动、怎么动。",[150,104415,104416,104418],{},[27,104417,103348],{}," 用来标记关键点，方便 Python 读取位置。",[157,104420,104421],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[234,104423,104424],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":44,"depth":44,"links":104426},[104427,104428,104429,104435,104439,104440,104441,104448],{"id":100784,"depth":44,"text":100785},{"id":100907,"depth":44,"text":100908},{"id":101182,"depth":44,"text":101183,"children":104430},[104431,104432,104433,104434],{"id":103098,"depth":52,"text":103098},{"id":103212,"depth":52,"text":103212},{"id":103238,"depth":52,"text":103239},{"id":103342,"depth":52,"text":103343},{"id":101390,"depth":44,"text":101391,"children":104436},[104437,104438],{"id":101710,"depth":52,"text":101710},{"id":101846,"depth":52,"text":101846},{"id":102453,"depth":44,"text":102454},{"id":102485,"depth":44,"text":102486},{"id":102590,"depth":44,"text":102591,"children":104442},[104443,104444,104446,104447],{"id":104296,"depth":52,"text":104299},{"id":104305,"depth":52,"text":104445},"mj_name2id 返回 -1",{"id":104319,"depth":52,"text":104319},{"id":104342,"depth":52,"text":104342},{"id":102744,"depth":44,"text":102745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102792,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104455,"title":104456,"body":104457,"description":25,"extension":243,"meta":105952,"navigation":245,"path":105953,"seo":105954,"stem":105955,"__hash__":105956},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104458,"toc":105924},[104459,104462,104464,104467,104470,104508,104511,104517,104520,104522,104524,104551,104553,104567,104569,104610,104612,104636,104638,104641,104650,104659,104662,104671,104679,104688,104691,104701,104704,104756,104763,104769,104777,104825,104828,104847,104850,104858,104862,104871,104904,104906,105254,105256,105268,105270,105281,105283,105286,105307,105313,105316,105341,105351,105354,105362,105365,105368,105389,105400,105402,105422,105425,105446,105455,105474,105480,105505,105508,105522,105529,105553,105556,105564,105573,105589,105601,105609,105618,105620,105623,105647,105652,105655,105677,105679,105718,105720,105727,105729,105737,105740,105743,105755,105796,105803,105814,105821,105824,105873,105876,105879,105885,105887,105892,105918,105921],[10,104460,104456],{"id":104461},"_3python-控制接口读取状态与推进仿真",[15,104463,100785],{"id":100784},[157,104465,104466],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[157,104468,104469],{},"你将学习:",[271,104471,104472,104477,104482,104486,104491,104502],{},[150,104473,104474],{},[27,104475,104476],{},"MjModel.from_xml_string",[150,104478,104479],{},[27,104480,104481],{},"MjData(model)",[150,104483,104484],{},[27,104485,101353],{},[150,104487,104488],{},[27,104489,104490],{},"mj_resetData",[150,104492,104493,104494,532,104496,532,104499],{},"读取 ",[27,104495,104168],{},[27,104497,104498],{},"qvel",[27,104500,104501],{},"ctrl",[150,104503,104504,104505],{},"使用 ",[27,104506,104507],{},"model.opt.timestep",[157,104509,104510],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[20,104512,104515],{"className":104513,"code":104514,"language":5369,"meta":25},[5367],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[27,104516,104514],{"__ignoreMap":25},[157,104518,104519],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[15,104521,100908],{"id":100907},[157,104523,100911],{},[20,104525,104527],{"className":22,"code":104526,"language":24,"meta":25,"style":25},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[27,104528,104529],{"__ignoreMap":25},[30,104530,104531,104533,104535,104537,104539,104542,104544,104546,104548],{"class":32,"line":33},[30,104532,24757],{"class":36},[30,104534,26453],{"class":74},[30,104536,24014],{"class":74},[30,104538,26538],{"class":40},[30,104540,104541],{"class":74}," python3",[30,104543,100936],{"class":74},[30,104545,102639],{"class":74},[30,104547,100952],{"class":74},[30,104549,104550],{"class":74}," glfw\n",[157,104552,102957],{},[20,104554,104555],{"className":22,"code":101057,"language":24,"meta":25,"style":25},[27,104556,104557],{"__ignoreMap":25},[30,104558,104559,104561,104563,104565],{"class":32,"line":33},[30,104560,24011],{"class":36},[30,104562,24014],{"class":74},[30,104564,101068],{"class":74},[30,104566,101071],{"class":74},[157,104568,102974],{},[20,104570,104572],{"className":22,"code":104571,"language":24,"meta":25,"style":25},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[27,104573,104574,104591,104600],{"__ignoreMap":25},[30,104575,104576,104578,104580,104582,104585,104587,104589],{"class":32,"line":33},[30,104577,30468],{"class":36},[30,104579,29314],{"class":74},[30,104581,25288],{"class":40},[30,104583,104584],{"class":74}," mujoco-python-api",[30,104586,101113],{"class":74},[30,104588,101116],{"class":40},[30,104590,101119],{"class":40},[30,104592,104593,104595,104597],{"class":32,"line":44},[30,104594,30468],{"class":36},[30,104596,101126],{"class":74},[30,104598,104599],{"class":74}," mujoco-python-api\n",[30,104601,104602,104604,104606,104608],{"class":32,"line":52},[30,104603,24011],{"class":36},[30,104605,24014],{"class":74},[30,104607,101068],{"class":74},[30,104609,101071],{"class":74},[157,104611,101142],{},[271,104613,104614,104621,104630],{},[150,104615,104616,101156,104618,104620],{},[27,104617,100813],{},[27,104619,100818],{}," 是官方 Python bindings 的类名。",[150,104622,104623,104624,104627,104628,28523],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[27,104625,104626],{},"mjModel"," 在 Python 中是 ",[27,104629,100847],{},[150,104631,104632,104633,28523],{},"不要使用 ",[27,104634,104635],{},"sim = mujoco_py.MjSim(...)",[15,104637,101183],{"id":101182},[157,104639,104640],{},"仿真推进核心代码:",[20,104642,104644],{"className":30516,"code":104643,"language":30518,"meta":25,"style":25},"mujoco.mj_step(model, data)\n",[27,104645,104646],{"__ignoreMap":25},[30,104647,104648],{"class":32,"line":33},[30,104649,104643],{"class":321},[157,104651,104652,104653,532,104655,532,104657,28523],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[27,104654,101208],{},[27,104656,101211],{},[27,104658,101205],{},[157,104660,104661],{},"重置仿真:",[20,104663,104665],{"className":30516,"code":104664,"language":30518,"meta":25,"style":25},"mujoco.mj_resetData(model, data)\n",[27,104666,104667],{"__ignoreMap":25},[30,104668,104669],{"class":32,"line":33},[30,104670,104664],{"class":321},[157,104672,104673,104674,82677,104676,104678],{},"如果手动修改了 ",[27,104675,101208],{},[27,104677,101211],{},"，通常应调用:",[20,104680,104682],{"className":30516,"code":104681,"language":30518,"meta":25,"style":25},"mujoco.mj_forward(model, data)\n",[27,104683,104684],{"__ignoreMap":25},[30,104685,104686],{"class":32,"line":33},[30,104687,104681],{"class":321},[157,104689,104690],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[287,104692,104694,532,104696,532,104698,104700],{"id":104693},"qposqvelctrl-是什么",[27,104695,104168],{},[27,104697,104498],{},[27,104699,104501],{}," 是什么",[157,104702,104703],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[457,104705,104706,104718],{},[460,104707,104708],{},[463,104709,104710,104713,104715],{},[466,104711,104712],{"align":23918},"字段",[466,104714,100838],{"align":23918},[466,104716,104717],{"align":23918},"谁来修改",[504,104719,104720,104732,104744],{},[463,104721,104722,104726,104729],{},[509,104723,104724],{"align":23918},[27,104725,101208],{},[509,104727,104728],{"align":23918},"广义位置，例如小车位置、关节角、自由物体位置姿态",[509,104730,104731],{"align":23918},"MuJoCo 更新，也可以手动设置初始状态",[463,104733,104734,104738,104741],{},[509,104735,104736],{"align":23918},[27,104737,101211],{},[509,104739,104740],{"align":23918},"广义速度，例如小车速度、关节角速度",[509,104742,104743],{"align":23918},"MuJoCo 更新，也可以手动清零",[463,104745,104746,104750,104753],{},[509,104747,104748],{"align":23918},[27,104749,101214],{},[509,104751,104752],{"align":23918},"actuator 的控制输入",[509,104754,104755],{"align":23918},"主要由你的控制代码写入",[157,104757,9207,104758,101156,104760,104762],{},[27,104759,104168],{},[27,104761,104498],{}," 不一定同维。自由刚体就是典型例子：",[20,104764,104767],{"className":104765,"code":104766,"language":5369,"meta":25},[5367],"freejoint: qpos 7 维，qvel 6 维\n",[27,104768,104766],{"__ignoreMap":25},[287,104770,104772,101156,104774,104776],{"id":104771},"mj_step-和-mj_forward-的区别",[27,104773,101353],{},[27,104775,104388],{}," 的区别",[457,104778,104779,104792],{},[460,104780,104781],{},[463,104782,104783,104786,104789],{},[466,104784,104785],{"align":23918},"函数",[466,104787,104788],{"align":23918},"是否推进时间",[466,104790,104791],{"align":23918},"什么时候用",[504,104793,104794,104807],{},[463,104795,104796,104801,104804],{},[509,104797,104798],{"align":23918},[27,104799,104800],{},"mj_step(model, data)",[509,104802,104803],{"align":23918},"是",[509,104805,104806],{"align":23918},"正常仿真循环，每调用一次前进一步",[463,104808,104809,104814,104817],{},[509,104810,104811],{"align":23918},[27,104812,104813],{},"mj_forward(model, data)",[509,104815,104816],{"align":23918},"否",[509,104818,104819,104820,532,104822,104824],{"align":23918},"手动改了 ",[27,104821,104168],{},[27,104823,104498],{}," 后，刷新派生量",[157,104826,104827],{},"例如你写：",[20,104829,104831],{"className":30516,"code":104830,"language":30518,"meta":25,"style":25},"data.qpos[2] = 2.0\n",[27,104832,104833],{"__ignoreMap":25},[30,104834,104835,104838,104840,104842,104844],{"class":32,"line":33},[30,104836,104837],{"class":321},"data.qpos[",[30,104839,398],{"class":40},[30,104841,4625],{"class":321},[30,104843,367],{"class":317},[30,104845,104846],{"class":40}," 2.0\n",[157,104848,104849],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[20,104851,104852],{"className":30516,"code":104681,"language":30518,"meta":25,"style":25},[27,104853,104854],{"__ignoreMap":25},[30,104855,104856],{"class":32,"line":33},[30,104857,104681],{"class":321},[287,104859,104861],{"id":104860},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[157,104863,104864,104867,104868,104870],{},[27,104865,104866],{},"mujoco.mj_resetData(model, data)"," 会把 ",[27,104869,33539],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[20,104872,104874],{"className":30516,"code":104873,"language":30518,"meta":25,"style":25},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[27,104875,104876,104880,104890,104900],{"__ignoreMap":25},[30,104877,104878],{"class":32,"line":33},[30,104879,104664],{"class":321},[30,104881,104882,104885,104887],{"class":32,"line":44},[30,104883,104884],{"class":321},"data.qpos[:] ",[30,104886,367],{"class":317},[30,104888,104889],{"class":321}," random_qpos\n",[30,104891,104892,104895,104897],{"class":32,"line":52},[30,104893,104894],{"class":321},"data.qvel[:] ",[30,104896,367],{"class":317},[30,104898,104899],{"class":40}," 0.0\n",[30,104901,104902],{"class":32,"line":60},[30,104903,104681],{"class":321},[15,104905,101391],{"id":101390},[20,104907,104909],{"className":30516,"code":104908,"language":30518,"meta":25,"style":25},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"state_api\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n\n    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"ball_free\"\u002F>\n      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n    print(prefix)\n    print(\"  timestep:\", model.opt.timestep)\n    print(\"  time:\", data.time)\n    print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"  qvel:\", np.round(data.qvel.copy(), 4))\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print_state(\"initial\", model, data)\n\n    for _ in range(50):\n        mujoco.mj_step(model, data)\n\n    print_state(\"after 50 steps\", model, data)\n\n    mujoco.mj_resetData(model, data)\n    print_state(\"after reset\", model, data)\n\n    data.qpos[2] = 2.0\n    mujoco.mj_forward(model, data)\n    print_state(\"after manual qpos edit\", model, data)\n\n\nif __name__ == \"__main__\":\n    main()\n",[27,104910,104911,104917,104927,104931,104935,104943,104948,104952,104956,104960,104965,104969,104974,104979,104984,104988,104992,104996,105000,105004,105008,105027,105034,105046,105057,105073,105089,105093,105097,105109,105121,105129,105133,105144,105148,105164,105168,105172,105181,105185,105190,105199,105203,105216,105221,105230,105234,105238,105250],{"__ignoreMap":25},[30,104912,104913,104915],{"class":32,"line":33},[30,104914,30530],{"class":317},[30,104916,101439],{"class":321},[30,104918,104919,104921,104923,104925],{"class":32,"line":44},[30,104920,30530],{"class":317},[30,104922,31518],{"class":321},[30,104924,31521],{"class":317},[30,104926,31524],{"class":321},[30,104928,104929],{"class":32,"line":52},[30,104930,2582],{"emptyLinePlaceholder":245},[30,104932,104933],{"class":32,"line":60},[30,104934,2582],{"emptyLinePlaceholder":245},[30,104936,104937,104939,104941],{"class":32,"line":68},[30,104938,101452],{"class":40},[30,104940,13746],{"class":317},[30,104942,101457],{"class":74},[30,104944,104945],{"class":32,"line":80},[30,104946,104947],{"class":74},"\u003Cmujoco model=\"state_api\">\n",[30,104949,104950],{"class":32,"line":88},[30,104951,101467],{"class":74},[30,104953,104954],{"class":32,"line":96},[30,104955,2582],{"emptyLinePlaceholder":245},[30,104957,104958],{"class":32,"line":104},[30,104959,101476],{"class":74},[30,104961,104962],{"class":32,"line":112},[30,104963,104964],{"class":74},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[30,104966,104967],{"class":32,"line":123},[30,104968,2582],{"emptyLinePlaceholder":245},[30,104970,104971],{"class":32,"line":131},[30,104972,104973],{"class":74},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[30,104975,104976],{"class":32,"line":142},[30,104977,104978],{"class":74},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[30,104980,104981],{"class":32,"line":1811},[30,104982,104983],{"class":74},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[30,104985,104986],{"class":32,"line":1825},[30,104987,101505],{"class":74},[30,104989,104990],{"class":32,"line":1830},[30,104991,101510],{"class":74},[30,104993,104994],{"class":32,"line":1836},[30,104995,101515],{"class":74},[30,104997,104998],{"class":32,"line":1857},[30,104999,95836],{"class":74},[30,105001,105002],{"class":32,"line":1862},[30,105003,2582],{"emptyLinePlaceholder":245},[30,105005,105006],{"class":32,"line":1876},[30,105007,2582],{"emptyLinePlaceholder":245},[30,105009,105010,105012,105015,105018,105020,105023,105025],{"class":32,"line":1881},[30,105011,32085],{"class":317},[30,105013,105014],{"class":36}," print_state",[30,105016,105017],{"class":321},"(prefix: ",[30,105019,1489],{"class":40},[30,105021,105022],{"class":321},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[30,105024,95824],{"class":40},[30,105026,3921],{"class":321},[30,105028,105029,105031],{"class":32,"line":1910},[30,105030,31437],{"class":40},[30,105032,105033],{"class":321},"(prefix)\n",[30,105035,105036,105038,105040,105043],{"class":32,"line":1915},[30,105037,31437],{"class":40},[30,105039,322],{"class":321},[30,105041,105042],{"class":74},"\"  timestep:\"",[30,105044,105045],{"class":321},", model.opt.timestep)\n",[30,105047,105048,105050,105052,105055],{"class":32,"line":1932},[30,105049,31437],{"class":40},[30,105051,322],{"class":321},[30,105053,105054],{"class":74},"\"  time:\"",[30,105056,101616],{"class":321},[30,105058,105059,105061,105063,105066,105069,105071],{"class":32,"line":1937},[30,105060,31437],{"class":40},[30,105062,322],{"class":321},[30,105064,105065],{"class":74},"\"  qpos:\"",[30,105067,105068],{"class":321},", np.round(data.qpos.copy(), ",[30,105070,613],{"class":40},[30,105072,30635],{"class":321},[30,105074,105075,105077,105079,105082,105085,105087],{"class":32,"line":1942},[30,105076,31437],{"class":40},[30,105078,322],{"class":321},[30,105080,105081],{"class":74},"\"  qvel:\"",[30,105083,105084],{"class":321},", np.round(data.qvel.copy(), ",[30,105086,613],{"class":40},[30,105088,30635],{"class":321},[30,105090,105091],{"class":32,"line":1947},[30,105092,2582],{"emptyLinePlaceholder":245},[30,105094,105095],{"class":32,"line":1961},[30,105096,2582],{"emptyLinePlaceholder":245},[30,105098,105099,105101,105103,105105,105107],{"class":32,"line":1966},[30,105100,32085],{"class":317},[30,105102,2155],{"class":36},[30,105104,101536],{"class":321},[30,105106,95824],{"class":40},[30,105108,3921],{"class":321},[30,105110,105111,105113,105115,105117,105119],{"class":32,"line":2759},[30,105112,101545],{"class":321},[30,105114,367],{"class":317},[30,105116,101550],{"class":321},[30,105118,101452],{"class":40},[30,105120,328],{"class":321},[30,105122,105123,105125,105127],{"class":32,"line":2773},[30,105124,101559],{"class":321},[30,105126,367],{"class":317},[30,105128,101564],{"class":321},[30,105130,105131],{"class":32,"line":2781},[30,105132,2582],{"emptyLinePlaceholder":245},[30,105134,105135,105138,105141],{"class":32,"line":2786},[30,105136,105137],{"class":321},"    print_state(",[30,105139,105140],{"class":74},"\"initial\"",[30,105142,105143],{"class":321},", model, data)\n",[30,105145,105146],{"class":32,"line":2792},[30,105147,2582],{"emptyLinePlaceholder":245},[30,105149,105150,105152,105154,105156,105158,105160,105162],{"class":32,"line":2798},[30,105151,3383],{"class":317},[30,105153,101639],{"class":321},[30,105155,26181],{"class":317},[30,105157,32581],{"class":40},[30,105159,322],{"class":321},[30,105161,976],{"class":40},[30,105163,30924],{"class":321},[30,105165,105166],{"class":32,"line":2803},[30,105167,101654],{"class":321},[30,105169,105170],{"class":32,"line":8130},[30,105171,2582],{"emptyLinePlaceholder":245},[30,105173,105174,105176,105179],{"class":32,"line":8154},[30,105175,105137],{"class":321},[30,105177,105178],{"class":74},"\"after 50 steps\"",[30,105180,105143],{"class":321},[30,105182,105183],{"class":32,"line":8159},[30,105184,2582],{"emptyLinePlaceholder":245},[30,105186,105187],{"class":32,"line":8165},[30,105188,105189],{"class":321},"    mujoco.mj_resetData(model, data)\n",[30,105191,105192,105194,105197],{"class":32,"line":8192},[30,105193,105137],{"class":321},[30,105195,105196],{"class":74},"\"after reset\"",[30,105198,105143],{"class":321},[30,105200,105201],{"class":32,"line":8197},[30,105202,2582],{"emptyLinePlaceholder":245},[30,105204,105205,105208,105210,105212,105214],{"class":32,"line":8203},[30,105206,105207],{"class":321},"    data.qpos[",[30,105209,398],{"class":40},[30,105211,4625],{"class":321},[30,105213,367],{"class":317},[30,105215,104846],{"class":40},[30,105217,105218],{"class":32,"line":8215},[30,105219,105220],{"class":321},"    mujoco.mj_forward(model, data)\n",[30,105222,105223,105225,105228],{"class":32,"line":8227},[30,105224,105137],{"class":321},[30,105226,105227],{"class":74},"\"after manual qpos edit\"",[30,105229,105143],{"class":321},[30,105231,105232],{"class":32,"line":8239},[30,105233,2582],{"emptyLinePlaceholder":245},[30,105235,105236],{"class":32,"line":9898},[30,105237,2582],{"emptyLinePlaceholder":245},[30,105239,105240,105242,105244,105246,105248],{"class":32,"line":9923},[30,105241,1717],{"class":317},[30,105243,31358],{"class":40},[30,105245,101697],{"class":317},[30,105247,101700],{"class":74},[30,105249,3921],{"class":321},[30,105251,105252],{"class":32,"line":9946},[30,105253,101707],{"class":321},[157,105255,103708],{},[20,105257,105259],{"className":22,"code":105258,"language":24,"meta":25,"style":25},"touch ch3_python_state.py\n",[27,105260,105261],{"__ignoreMap":25},[30,105262,105263,105265],{"class":32,"line":33},[30,105264,101421],{"class":36},[30,105266,105267],{"class":74}," ch3_python_state.py\n",[157,105269,102439],{},[20,105271,105273],{"className":22,"code":105272,"language":24,"meta":25,"style":25},"python ch3_python_state.py\n",[27,105274,105275],{"__ignoreMap":25},[30,105276,105277,105279],{"class":32,"line":33},[30,105278,30518],{"class":36},[30,105280,105267],{"class":74},[287,105282,101710],{"id":101710},[157,105284,105285],{},"打印状态的函数：",[20,105287,105289],{"className":30516,"code":105288,"language":30518,"meta":25,"style":25},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[27,105290,105291],{"__ignoreMap":25},[30,105292,105293,105295,105297,105299,105301,105303,105305],{"class":32,"line":33},[30,105294,32085],{"class":317},[30,105296,105014],{"class":36},[30,105298,105017],{"class":321},[30,105300,1489],{"class":40},[30,105302,105022],{"class":321},[30,105304,95824],{"class":40},[30,105306,3921],{"class":321},[157,105308,105309,105310,105312],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[27,105311,33539],{}," 里发生了什么。",[157,105314,105315],{},"推进 50 步：",[20,105317,105319],{"className":30516,"code":105318,"language":30518,"meta":25,"style":25},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[27,105320,105321,105337],{"__ignoreMap":25},[30,105322,105323,105325,105327,105329,105331,105333,105335],{"class":32,"line":33},[30,105324,3207],{"class":317},[30,105326,101639],{"class":321},[30,105328,26181],{"class":317},[30,105330,32581],{"class":40},[30,105332,322],{"class":321},[30,105334,976],{"class":40},[30,105336,30924],{"class":321},[30,105338,105339],{"class":32,"line":44},[30,105340,101837],{"class":321},[157,105342,105343,105344,105347,105348,105350],{},"由于 ",[27,105345,105346],{},"timestep=0.01","，所以 50 步后时间约为 ",[27,105349,35467],{}," 秒。",[157,105352,105353],{},"重置：",[20,105355,105356],{"className":30516,"code":104664,"language":30518,"meta":25,"style":25},[27,105357,105358],{"__ignoreMap":25},[30,105359,105360],{"class":32,"line":33},[30,105361,104664],{"class":321},[157,105363,105364],{},"这会把时间、位置、速度恢复到初始状态。",[157,105366,105367],{},"手动改高度：",[20,105369,105371],{"className":30516,"code":105370,"language":30518,"meta":25,"style":25},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[27,105372,105373,105385],{"__ignoreMap":25},[30,105374,105375,105377,105379,105381,105383],{"class":32,"line":33},[30,105376,104837],{"class":321},[30,105378,398],{"class":40},[30,105380,4625],{"class":321},[30,105382,367],{"class":317},[30,105384,104846],{"class":40},[30,105386,105387],{"class":32,"line":44},[30,105388,104681],{"class":321},[157,105390,105391,105392,105395,105396,105399],{},"这个例子里 ",[27,105393,105394],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[27,105397,105398],{},"2.0"," 表示把小球放到更高的位置。",[287,105401,101846],{"id":101846},[20,105403,105404],{"className":30516,"code":105288,"language":30518,"meta":25,"style":25},[27,105405,105406],{"__ignoreMap":25},[30,105407,105408,105410,105412,105414,105416,105418,105420],{"class":32,"line":33},[30,105409,32085],{"class":317},[30,105411,105014],{"class":36},[30,105413,105017],{"class":321},[30,105415,1489],{"class":40},[30,105417,105022],{"class":321},[30,105419,95824],{"class":40},[30,105421,3921],{"class":321},[157,105423,105424],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[271,105426,105427,105436,105441],{},[150,105428,105429,105432,105433,105435],{},[27,105430,105431],{},"prefix","：一段文字，比如 ",[27,105434,105140],{},"，用来说明现在打印的是哪个阶段。",[150,105437,105438,105440],{},[27,105439,102223],{},"：MuJoCo 模型。",[150,105442,105443,105445],{},[27,105444,33539],{},"：MuJoCo 当前状态。",[157,105447,105448,532,105451,105454],{},[27,105449,105450],{},"prefix: str",[27,105452,105453],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[20,105456,105458],{"className":30516,"code":105457,"language":30518,"meta":25,"style":25},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[27,105459,105460],{"__ignoreMap":25},[30,105461,105462,105464,105466,105468,105470,105472],{"class":32,"line":33},[30,105463,30553],{"class":40},[30,105465,322],{"class":321},[30,105467,105065],{"class":74},[30,105469,105068],{"class":321},[30,105471,613],{"class":40},[30,105473,30635],{"class":321},[157,105475,105476,105479],{},[27,105477,105478],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[20,105481,105483],{"className":30516,"code":105482,"language":30518,"meta":25,"style":25},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[27,105484,105485,105497],{"__ignoreMap":25},[30,105486,105487,105489,105491,105493,105495],{"class":32,"line":33},[30,105488,101772],{"class":321},[30,105490,367],{"class":317},[30,105492,101550],{"class":321},[30,105494,101452],{"class":40},[30,105496,328],{"class":321},[30,105498,105499,105501,105503],{"class":32,"line":44},[30,105500,101796],{"class":321},[30,105502,367],{"class":317},[30,105504,101564],{"class":321},[157,105506,105507],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[20,105509,105511],{"className":30516,"code":105510,"language":30518,"meta":25,"style":25},"print_state(\"initial\", model, data)\n",[27,105512,105513],{"__ignoreMap":25},[30,105514,105515,105518,105520],{"class":32,"line":33},[30,105516,105517],{"class":321},"print_state(",[30,105519,105140],{"class":74},[30,105521,105143],{"class":321},[157,105523,105524,105525,105528],{},"调用刚才定义的 ",[27,105526,105527],{},"print_state"," 函数，打印初始状态。",[20,105530,105531],{"className":30516,"code":105318,"language":30518,"meta":25,"style":25},[27,105532,105533,105549],{"__ignoreMap":25},[30,105534,105535,105537,105539,105541,105543,105545,105547],{"class":32,"line":33},[30,105536,3207],{"class":317},[30,105538,101639],{"class":321},[30,105540,26181],{"class":317},[30,105542,32581],{"class":40},[30,105544,322],{"class":321},[30,105546,976],{"class":40},[30,105548,30924],{"class":321},[30,105550,105551],{"class":32,"line":44},[30,105552,101837],{"class":321},[157,105554,105555],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[20,105557,105558],{"className":30516,"code":104664,"language":30518,"meta":25,"style":25},[27,105559,105560],{"__ignoreMap":25},[30,105561,105562],{"class":32,"line":33},[30,105563,104664],{"class":321},[157,105565,105566,105567,105569,105570,105572],{},"重置 ",[27,105568,33539],{},"。注意它不会重新创建 ",[27,105571,102223],{},"，因为模型结构没有变，只是状态回到初始值。",[20,105574,105575],{"className":30516,"code":104830,"language":30518,"meta":25,"style":25},[27,105576,105577],{"__ignoreMap":25},[30,105578,105579,105581,105583,105585,105587],{"class":32,"line":33},[30,105580,104837],{"class":321},[30,105582,398],{"class":40},[30,105584,4625],{"class":321},[30,105586,367],{"class":317},[30,105588,104846],{"class":40},[157,105590,105591,105592,532,105595,532,105598,105600],{},"这行是“手动改状态”。在 freejoint 中，",[27,105593,105594],{},"qpos[0]",[27,105596,105597],{},"qpos[1]",[27,105599,105394],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[20,105602,105603],{"className":30516,"code":104681,"language":30518,"meta":25,"style":25},[27,105604,105605],{"__ignoreMap":25},[30,105606,105607],{"class":32,"line":33},[30,105608,104681],{"class":321},[157,105610,105611,105612,105614,105615,105617],{},"手动改完 ",[27,105613,104168],{}," 后，调用 ",[27,105616,104388],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[15,105619,102454],{"id":102453},[157,105621,105622],{},"你会看到:",[271,105624,105625,105630,105635,105638],{},[150,105626,105627,105628],{},"初始时间为 ",[27,105629,511],{},[150,105631,105632,105633],{},"50 步后时间约为 ",[27,105634,35467],{},[150,105636,105637],{},"reset 后状态恢复",[150,105639,105640,105641,105644,105645],{},"手动修改 ",[27,105642,105643],{},"data.qpos[2]"," 后，小球高度变为 ",[27,105646,105398],{},[157,105648,105649,105651],{},[27,105650,105394],{}," 在这个例子中表示自由刚体的 z 坐标。",[157,105653,105654],{},"输出里可以重点看三件事：",[271,105656,105657,105665,105670],{},[150,105658,105659,105661,105662,105664],{},[27,105660,2569],{}," 是否随着 ",[27,105663,101353],{}," 增加。",[150,105666,105667,105669],{},[27,105668,104168],{}," 的 z 坐标是否因为下落而变化。",[150,105671,105672,105674,105675,28523],{},[27,105673,104490],{}," 后时间是否回到 ",[27,105676,511],{},[15,105678,102486],{"id":102485},[271,105680,105681,105687,105693,105699,105702,105711],{},[150,105682,105683,105684,28523],{},"修改 timestep 为 ",[27,105685,105686],{},"0.005",[150,105688,105689,105690,28523],{},"重新运行，检查 50 步后时间是否约为 ",[27,105691,105692],{},"0.25",[150,105694,105695,105696,28523],{},"修改重力为 ",[27,105697,105698],{},"0 0 -1.0",[150,105700,105701],{},"观察小球下降速度是否变慢。",[150,105703,102549,105704,102552,105707,105710],{},[27,105705,105706],{},"data.qpos[2] = 2.0",[27,105708,105709],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[150,105712,105713,105714,105717],{},"注释掉 ",[27,105715,105716],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[15,105719,102591],{"id":102590},[287,105721,105723,105724,105726],{"id":105722},"修改-dataqpos-后位置没有更新","修改 ",[27,105725,101208],{}," 后位置没有更新",[157,105728,102600],{},[20,105730,105731],{"className":30516,"code":104681,"language":30518,"meta":25,"style":25},[27,105732,105733],{"__ignoreMap":25},[30,105734,105735],{"class":32,"line":33},[30,105736,104681],{"class":321},[287,105738,105739],{"id":105739},"数组维度看不懂",[157,105741,105742],{},"打印模型维度:",[20,105744,105746],{"className":30516,"code":105745,"language":30518,"meta":25,"style":25},"print(model.nq, model.nv, model.nu)\n",[27,105747,105748],{"__ignoreMap":25},[30,105749,105750,105752],{"class":32,"line":33},[30,105751,30553],{"class":40},[30,105753,105754],{"class":321},"(model.nq, model.nv, model.nu)\n",[457,105756,105757,105765],{},[460,105758,105759],{},[463,105760,105761,105763],{},[466,105762,104712],{"align":23918},[466,105764,100838],{"align":23918},[504,105766,105767,105777,105787],{},[463,105768,105769,105774],{},[509,105770,105771],{"align":23918},[27,105772,105773],{},"nq",[509,105775,105776],{"align":23918},"位置变量数量",[463,105778,105779,105784],{},[509,105780,105781],{"align":23918},[27,105782,105783],{},"nv",[509,105785,105786],{"align":23918},"速度变量数量",[463,105788,105789,105793],{},[509,105790,105791],{"align":23918},[27,105792,102300],{},[509,105794,105795],{"align":23918},"控制输入数量",[287,105797,105799,105800,105802],{"id":105798},"误以为-qpos-一定等于关节数","误以为 ",[27,105801,104168],{}," 一定等于关节数",[157,105804,105805,105806,82668,105808,105810,105811,105813],{},"不是。例如 ",[27,105807,101758],{},[27,105809,104168],{}," 是 7 维，但 ",[27,105812,104498],{}," 是 6 维。",[287,105815,105817,105818,105820],{"id":105816},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[27,105819,104168],{}," 的第几位",[157,105822,105823],{},"初学时可以先打印：",[20,105825,105827],{"className":30516,"code":105826,"language":30518,"meta":25,"style":25},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[27,105828,105829,105839,105849,105861],{"__ignoreMap":25},[30,105830,105831,105833,105835,105837],{"class":32,"line":33},[30,105832,30553],{"class":40},[30,105834,322],{"class":321},[30,105836,101577],{"class":74},[30,105838,101580],{"class":321},[30,105840,105841,105843,105845,105847],{"class":32,"line":44},[30,105842,30553],{"class":40},[30,105844,322],{"class":321},[30,105846,101589],{"class":74},[30,105848,101592],{"class":321},[30,105850,105851,105853,105855,105858],{"class":32,"line":52},[30,105852,30553],{"class":40},[30,105854,322],{"class":321},[30,105856,105857],{"class":74},"\"qpos:\"",[30,105859,105860],{"class":321},", data.qpos)\n",[30,105862,105863,105865,105867,105870],{"class":32,"line":60},[30,105864,30553],{"class":40},[30,105866,322],{"class":321},[30,105868,105869],{"class":74},"\"qvel:\"",[30,105871,105872],{"class":321},", data.qvel)\n",[157,105874,105875],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[287,105877,105878],{"id":105878},"仿真结果每次都一样",[157,105880,105881,105882,105884],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[27,105883,104168],{},"、目标点或控制输入。",[15,105886,102745],{"id":102744},[157,105888,105889,105890,24799],{},"Python 控制 MuJoCo 的核心就是读写 ",[27,105891,33539],{},[271,105893,105894,105902,105907,105912],{},[150,105895,105896,105897,101156,105899,105901],{},"用 ",[27,105898,101208],{},[27,105900,101211],{}," 读取状态。",[150,105903,105896,105904,105906],{},[27,105905,101214],{}," 写入控制。",[150,105908,105896,105909,105911],{},[27,105910,101353],{}," 推进时间。",[150,105913,105914,105915,105917],{},"手动改状态后用 ",[27,105916,104388],{}," 刷新派生量。",[157,105919,105920],{},"理解这一章后，就可以进入关节和 actuator 控制。",[234,105922,105923],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":44,"depth":44,"links":105925},[105926,105927,105928,105935,105939,105940,105941,105951],{"id":100784,"depth":44,"text":100785},{"id":100907,"depth":44,"text":100908},{"id":101182,"depth":44,"text":101183,"children":105929},[105930,105932,105934],{"id":104693,"depth":52,"text":105931},"qpos、qvel、ctrl 是什么",{"id":104771,"depth":52,"text":105933},"mj_step 和 mj_forward 的区别",{"id":104860,"depth":52,"text":104861},{"id":101390,"depth":44,"text":101391,"children":105936},[105937,105938],{"id":101710,"depth":52,"text":101710},{"id":101846,"depth":52,"text":101846},{"id":102453,"depth":44,"text":102454},{"id":102485,"depth":44,"text":102486},{"id":102590,"depth":44,"text":102591,"children":105942},[105943,105945,105946,105948,105950],{"id":105722,"depth":52,"text":105944},"修改 data.qpos 后位置没有更新",{"id":105739,"depth":52,"text":105739},{"id":105798,"depth":52,"text":105947},"误以为 qpos 一定等于关节数",{"id":105816,"depth":52,"text":105949},"不知道某个元素在 qpos 的第几位",{"id":105878,"depth":52,"text":105878},{"id":102744,"depth":44,"text":102745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104456,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105958,"title":105959,"body":105960,"description":25,"extension":243,"meta":107650,"navigation":245,"path":107651,"seo":107652,"stem":107653,"__hash__":107654},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105961,"toc":107626},[105962,105965,105967,105970,105972,105997,106000,106019,106022,106024,106026,106050,106052,106066,106068,106109,106111,106135,106137,106140,106174,106176,106189,106192,106260,106269,106273,106276,106310,106316,106319,106323,106362,106365,106385,106389,106432,106434,106463,106466,106472,106475,106477,106871,106873,106885,106887,106898,106900,106903,106932,106940,106943,106978,106981,106983,106991,106994,106996,107007,107017,107037,107040,107076,107088,107136,107155,107197,107210,107238,107243,107264,107274,107292,107295,107329,107332,107352,107355,107374,107380,107382,107385,107391,107397,107407,107410,107416,107425,107427,107473,107475,107481,107487,107490,107493,107513,107516,107522,107528,107530,107553,107556,107559,107568,107571,107609,107611,107614,107620,107623],[10,105963,105959],{"id":105964},"_4关节actuator-与力控制",[15,105966,100785],{"id":100784},[157,105968,105969],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[157,105971,104469],{},[271,105973,105974,105980,105985,105989,105994],{},[150,105975,105976,105979],{},[27,105977,105978],{},"hinge"," 关节",[150,105981,105982],{},[27,105983,105984],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[150,105986,105987],{},[27,105988,101214],{},[150,105990,105991],{},[27,105992,105993],{},"ctrlrange",[150,105995,105996],{},"读取关节角和角速度",[157,105998,105999],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[20,106001,106003],{"className":30516,"code":106002,"language":30518,"meta":25,"style":25},"data.ctrl[0] = ...\n",[27,106004,106005],{"__ignoreMap":25},[30,106006,106007,106010,106012,106014,106016],{"class":32,"line":33},[30,106008,106009],{"class":321},"data.ctrl[",[30,106011,511],{"class":40},[30,106013,4625],{"class":321},[30,106015,367],{"class":317},[30,106017,106018],{"class":40}," ...\n",[157,106020,106021],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[15,106023,100908],{"id":100907},[157,106025,100911],{},[20,106027,106028],{"className":22,"code":104526,"language":24,"meta":25,"style":25},[27,106029,106030],{"__ignoreMap":25},[30,106031,106032,106034,106036,106038,106040,106042,106044,106046,106048],{"class":32,"line":33},[30,106033,24757],{"class":36},[30,106035,26453],{"class":74},[30,106037,24014],{"class":74},[30,106039,26538],{"class":40},[30,106041,104541],{"class":74},[30,106043,100936],{"class":74},[30,106045,102639],{"class":74},[30,106047,100952],{"class":74},[30,106049,104550],{"class":74},[157,106051,102957],{},[20,106053,106054],{"className":22,"code":101057,"language":24,"meta":25,"style":25},[27,106055,106056],{"__ignoreMap":25},[30,106057,106058,106060,106062,106064],{"class":32,"line":33},[30,106059,24011],{"class":36},[30,106061,24014],{"class":74},[30,106063,101068],{"class":74},[30,106065,101071],{"class":74},[157,106067,102974],{},[20,106069,106071],{"className":22,"code":106070,"language":24,"meta":25,"style":25},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[27,106072,106073,106090,106099],{"__ignoreMap":25},[30,106074,106075,106077,106079,106081,106084,106086,106088],{"class":32,"line":33},[30,106076,30468],{"class":36},[30,106078,29314],{"class":74},[30,106080,25288],{"class":40},[30,106082,106083],{"class":74}," mujoco-control",[30,106085,101113],{"class":74},[30,106087,101116],{"class":40},[30,106089,101119],{"class":40},[30,106091,106092,106094,106096],{"class":32,"line":44},[30,106093,30468],{"class":36},[30,106095,101126],{"class":74},[30,106097,106098],{"class":74}," mujoco-control\n",[30,106100,106101,106103,106105,106107],{"class":32,"line":52},[30,106102,24011],{"class":36},[30,106104,24014],{"class":74},[30,106106,101068],{"class":74},[30,106108,101071],{"class":74},[157,106110,101142],{},[271,106112,106113,106119,106126,106132],{},[150,106114,106115,106118],{},[27,106116,106117],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[150,106120,106121,106123,106124,28523],{},[27,106122,101214],{}," 长度等于 ",[27,106125,102296],{},[150,106127,82360,106128,106131],{},[27,106129,106130],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[150,106133,106134],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[15,106136,101183],{"id":101182},[157,106138,106139],{},"关节决定 body 如何运动:",[20,106141,106143],{"className":53205,"code":106142,"language":53207,"meta":25,"style":25},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[27,106144,106145],{"__ignoreMap":25},[30,106146,106147,106149,106151,106153,106155,106158,106160,106162,106164,106167,106169,106172],{"class":32,"line":33},[30,106148,1230],{"class":321},[30,106150,103094],{"class":51438},[30,106152,15102],{"class":36},[30,106154,367],{"class":321},[30,106156,106157],{"class":74},"\"hinge\"",[30,106159,53962],{"class":36},[30,106161,367],{"class":321},[30,106163,106157],{"class":74},[30,106165,106166],{"class":36}," axis",[30,106168,367],{"class":321},[30,106170,106171],{"class":74},"\"0 1 0\"",[30,106173,101282],{"class":321},[157,106175,103190],{},[271,106177,106178,106183,106186],{},[150,106179,106180,106181],{},"名字是 ",[27,106182,105978],{},[150,106184,106185],{},"类型是旋转关节",[150,106187,106188],{},"绕 y 轴旋转",[157,106190,106191],{},"actuator 决定如何施加控制:",[20,106193,106195],{"className":53205,"code":106194,"language":53207,"meta":25,"style":25},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[27,106196,106197,106206,106252],{"__ignoreMap":25},[30,106198,106199,106201,106204],{"class":32,"line":33},[30,106200,1230],{"class":321},[30,106202,106203],{"class":51438},"actuator",[30,106205,51445],{"class":321},[30,106207,106208,106210,106213,106215,106217,106220,106223,106225,106227,106230,106232,106234,106237,106239,106242,106245,106247,106250],{"class":32,"line":44},[30,106209,52282],{"class":321},[30,106211,106212],{"class":51438},"motor",[30,106214,15102],{"class":36},[30,106216,367],{"class":321},[30,106218,106219],{"class":74},"\"hinge_motor\"",[30,106221,106222],{"class":36}," joint",[30,106224,367],{"class":321},[30,106226,106157],{"class":74},[30,106228,106229],{"class":36}," gear",[30,106231,367],{"class":321},[30,106233,3860],{"class":74},[30,106235,106236],{"class":36}," ctrlrange",[30,106238,367],{"class":321},[30,106240,106241],{"class":74},"\"-2 2\"",[30,106243,106244],{"class":36}," ctrllimited",[30,106246,367],{"class":321},[30,106248,106249],{"class":74},"\"true\"",[30,106251,101282],{"class":321},[30,106253,106254,106256,106258],{"class":32,"line":52},[30,106255,51923],{"class":321},[30,106257,106203],{"class":51438},[30,106259,51445],{"class":321},[157,106261,106262,106265,106266,28523],{},[27,106263,106264],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[27,106267,106268],{},"[-2, 2]",[287,106270,106272],{"id":106271},"joint-和-actuator-的关系","joint 和 actuator 的关系",[157,106274,106275],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[457,106277,106278,106288],{},[460,106279,106280],{},[463,106281,106282,106284,106286],{},[466,106283,25891],{"align":23918},[466,106285,102834],{"align":23918},[466,106287,100872],{"align":23918},[504,106289,106290,106300],{},[463,106291,106292,106294,106297],{},[509,106293,103094],{"align":23918},[509,106295,106296],{"align":23918},"定义能怎么动",[509,106298,106299],{"align":23918},"门轴允许门旋转",[463,106301,106302,106304,106307],{},[509,106303,106203],{"align":23918},[509,106305,106306],{"align":23918},"定义怎么施力或控制",[509,106308,106309],{"align":23918},"人推门、马达带动门",[157,106311,106312,106313,106315],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[27,106314,101214],{}," 主动控制它。",[157,106317,106318],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[287,106320,106322],{"id":106321},"hinge-joint","hinge joint",[20,106324,106326],{"className":53205,"code":106325,"language":53207,"meta":25,"style":25},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[27,106327,106328],{"__ignoreMap":25},[30,106329,106330,106332,106334,106336,106338,106340,106342,106344,106346,106348,106350,106352,106355,106357,106360],{"class":32,"line":33},[30,106331,1230],{"class":321},[30,106333,103094],{"class":51438},[30,106335,15102],{"class":36},[30,106337,367],{"class":321},[30,106339,106157],{"class":74},[30,106341,53962],{"class":36},[30,106343,367],{"class":321},[30,106345,106157],{"class":74},[30,106347,106166],{"class":36},[30,106349,367],{"class":321},[30,106351,106171],{"class":74},[30,106353,106354],{"class":36}," damping",[30,106356,367],{"class":321},[30,106358,106359],{"class":74},"\"0.1\"",[30,106361,101282],{"class":321},[157,106363,106364],{},"含义：",[271,106366,106367,106373,106379],{},[150,106368,106369,106372],{},[27,106370,106371],{},"type=\"hinge\"","：只能绕一个轴旋转。",[150,106374,106375,106378],{},[27,106376,106377],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[150,106380,106381,106384],{},[27,106382,106383],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[287,106386,106388],{"id":106387},"motor-actuator","motor actuator",[20,106390,106392],{"className":53205,"code":106391,"language":53207,"meta":25,"style":25},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[27,106393,106394],{"__ignoreMap":25},[30,106395,106396,106398,106400,106402,106404,106406,106408,106410,106412,106414,106416,106418,106420,106422,106424,106426,106428,106430],{"class":32,"line":33},[30,106397,1230],{"class":321},[30,106399,106212],{"class":51438},[30,106401,15102],{"class":36},[30,106403,367],{"class":321},[30,106405,106219],{"class":74},[30,106407,106222],{"class":36},[30,106409,367],{"class":321},[30,106411,106157],{"class":74},[30,106413,106229],{"class":36},[30,106415,367],{"class":321},[30,106417,3860],{"class":74},[30,106419,106236],{"class":36},[30,106421,367],{"class":321},[30,106423,106241],{"class":74},[30,106425,106244],{"class":36},[30,106427,367],{"class":321},[30,106429,106249],{"class":74},[30,106431,101282],{"class":321},[157,106433,106364],{},[271,106435,106436,106445,106451,106457],{},[150,106437,106438,106441,106442,106444],{},[27,106439,106440],{},"joint=\"hinge\"","：这个电机作用在名为 ",[27,106443,105978],{}," 的关节上。",[150,106446,106447,106450],{},[27,106448,106449],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[150,106452,106453,106456],{},[27,106454,106455],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[150,106458,106459,106462],{},[27,106460,106461],{},"ctrllimited=\"true\"","：启用控制范围限制。",[157,106464,106465],{},"简单理解：",[20,106467,106470],{"className":106468,"code":106469,"language":5369,"meta":25},[5367],"实际施加效果 ≈ data.ctrl[0] * gear\n",[27,106471,106469],{"__ignoreMap":25},[157,106473,106474],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[15,106476,101391],{"id":101390},[20,106478,106480],{"className":30516,"code":106479,"language":30518,"meta":25,"style":25},"import math\n\nimport mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"one_link_motor\">\n  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n\n      \u003Cbody name=\"link\" pos=\"0 0 0\">\n        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n\n    if model.nu != 1:\n        raise RuntimeError(\"expected exactly one actuator\")\n\n    for step in range(2000):\n        t = step * model.opt.timestep\n        data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n        mujoco.mj_step(model, data)\n\n    print(\"time:\", data.time)\n    print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"joint qvel:\", np.round(data.qvel.copy(), 4))\n    print(\"last ctrl:\", data.ctrl.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[27,106481,106482,106489,106493,106499,106509,106513,106517,106525,106530,106535,106539,106543,106548,106553,106557,106562,106567,106572,106577,106581,106585,106589,106594,106599,106604,106608,106612,106616,106620,106632,106644,106652,106656,106666,106676,106686,106690,106703,106716,106720,106737,106751,106786,106790,106794,106805,106820,106835,106847,106851,106855,106867],{"__ignoreMap":25},[30,106483,106484,106486],{"class":32,"line":33},[30,106485,30530],{"class":317},[30,106487,106488],{"class":321}," math\n",[30,106490,106491],{"class":32,"line":44},[30,106492,2582],{"emptyLinePlaceholder":245},[30,106494,106495,106497],{"class":32,"line":52},[30,106496,30530],{"class":317},[30,106498,101439],{"class":321},[30,106500,106501,106503,106505,106507],{"class":32,"line":60},[30,106502,30530],{"class":317},[30,106504,31518],{"class":321},[30,106506,31521],{"class":317},[30,106508,31524],{"class":321},[30,106510,106511],{"class":32,"line":68},[30,106512,2582],{"emptyLinePlaceholder":245},[30,106514,106515],{"class":32,"line":80},[30,106516,2582],{"emptyLinePlaceholder":245},[30,106518,106519,106521,106523],{"class":32,"line":88},[30,106520,101452],{"class":40},[30,106522,13746],{"class":317},[30,106524,101457],{"class":74},[30,106526,106527],{"class":32,"line":96},[30,106528,106529],{"class":74},"\u003Cmujoco model=\"one_link_motor\">\n",[30,106531,106532],{"class":32,"line":104},[30,106533,106534],{"class":74},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[30,106536,106537],{"class":32,"line":112},[30,106538,2582],{"emptyLinePlaceholder":245},[30,106540,106541],{"class":32,"line":123},[30,106542,101476],{"class":74},[30,106544,106545],{"class":32,"line":131},[30,106546,106547],{"class":74},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[30,106549,106550],{"class":32,"line":142},[30,106551,106552],{"class":74},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[30,106554,106555],{"class":32,"line":1811},[30,106556,2582],{"emptyLinePlaceholder":245},[30,106558,106559],{"class":32,"line":1825},[30,106560,106561],{"class":74},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[30,106563,106564],{"class":32,"line":1830},[30,106565,106566],{"class":74},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[30,106568,106569],{"class":32,"line":1836},[30,106570,106571],{"class":74},"        \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",[30,106573,106574],{"class":32,"line":1857},[30,106575,106576],{"class":74},"      \u003C\u002Fbody>\n",[30,106578,106579],{"class":32,"line":1862},[30,106580,101505],{"class":74},[30,106582,106583],{"class":32,"line":1876},[30,106584,101510],{"class":74},[30,106586,106587],{"class":32,"line":1881},[30,106588,2582],{"emptyLinePlaceholder":245},[30,106590,106591],{"class":32,"line":1910},[30,106592,106593],{"class":74},"  \u003Cactuator>\n",[30,106595,106596],{"class":32,"line":1915},[30,106597,106598],{"class":74},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[30,106600,106601],{"class":32,"line":1932},[30,106602,106603],{"class":74},"  \u003C\u002Factuator>\n",[30,106605,106606],{"class":32,"line":1937},[30,106607,101515],{"class":74},[30,106609,106610],{"class":32,"line":1942},[30,106611,95836],{"class":74},[30,106613,106614],{"class":32,"line":1947},[30,106615,2582],{"emptyLinePlaceholder":245},[30,106617,106618],{"class":32,"line":1961},[30,106619,2582],{"emptyLinePlaceholder":245},[30,106621,106622,106624,106626,106628,106630],{"class":32,"line":1966},[30,106623,32085],{"class":317},[30,106625,2155],{"class":36},[30,106627,101536],{"class":321},[30,106629,95824],{"class":40},[30,106631,3921],{"class":321},[30,106633,106634,106636,106638,106640,106642],{"class":32,"line":2759},[30,106635,101545],{"class":321},[30,106637,367],{"class":317},[30,106639,101550],{"class":321},[30,106641,101452],{"class":40},[30,106643,328],{"class":321},[30,106645,106646,106648,106650],{"class":32,"line":2773},[30,106647,101559],{"class":321},[30,106649,367],{"class":317},[30,106651,101564],{"class":321},[30,106653,106654],{"class":32,"line":2781},[30,106655,2582],{"emptyLinePlaceholder":245},[30,106657,106658,106660,106662,106664],{"class":32,"line":2786},[30,106659,31437],{"class":40},[30,106661,322],{"class":321},[30,106663,101577],{"class":74},[30,106665,101580],{"class":321},[30,106667,106668,106670,106672,106674],{"class":32,"line":2792},[30,106669,31437],{"class":40},[30,106671,322],{"class":321},[30,106673,101589],{"class":74},[30,106675,101592],{"class":321},[30,106677,106678,106680,106682,106684],{"class":32,"line":2798},[30,106679,31437],{"class":40},[30,106681,322],{"class":321},[30,106683,101601],{"class":74},[30,106685,101604],{"class":321},[30,106687,106688],{"class":32,"line":2803},[30,106689,2582],{"emptyLinePlaceholder":245},[30,106691,106692,106694,106697,106699,106701],{"class":32,"line":8130},[30,106693,3283],{"class":317},[30,106695,106696],{"class":321}," model.nu ",[30,106698,21130],{"class":317},[30,106700,25291],{"class":40},[30,106702,3921],{"class":321},[30,106704,106705,106707,106709,106711,106714],{"class":32,"line":8154},[30,106706,103570],{"class":317},[30,106708,103573],{"class":40},[30,106710,322],{"class":321},[30,106712,106713],{"class":74},"\"expected exactly one actuator\"",[30,106715,328],{"class":321},[30,106717,106718],{"class":32,"line":8159},[30,106719,2582],{"emptyLinePlaceholder":245},[30,106721,106722,106724,106726,106728,106730,106732,106735],{"class":32,"line":8165},[30,106723,3383],{"class":317},[30,106725,31754],{"class":321},[30,106727,26181],{"class":317},[30,106729,32581],{"class":40},[30,106731,322],{"class":321},[30,106733,106734],{"class":40},"2000",[30,106736,30924],{"class":321},[30,106738,106739,106742,106744,106746,106748],{"class":32,"line":8192},[30,106740,106741],{"class":321},"        t ",[30,106743,367],{"class":317},[30,106745,31754],{"class":321},[30,106747,775],{"class":317},[30,106749,106750],{"class":321}," model.opt.timestep\n",[30,106752,106753,106756,106758,106760,106762,106765,106767,106770,106772,106774,106777,106779,106781,106783],{"class":32,"line":8197},[30,106754,106755],{"class":321},"        data.ctrl[",[30,106757,511],{"class":40},[30,106759,4625],{"class":321},[30,106761,367],{"class":317},[30,106763,106764],{"class":40}," 1.5",[30,106766,6700],{"class":317},[30,106768,106769],{"class":321}," math.sin(",[30,106771,105398],{"class":40},[30,106773,6700],{"class":317},[30,106775,106776],{"class":321}," math.pi ",[30,106778,775],{"class":317},[30,106780,62005],{"class":40},[30,106782,6700],{"class":317},[30,106784,106785],{"class":321}," t)\n",[30,106787,106788],{"class":32,"line":8203},[30,106789,101654],{"class":321},[30,106791,106792],{"class":32,"line":8215},[30,106793,2582],{"emptyLinePlaceholder":245},[30,106795,106796,106798,106800,106803],{"class":32,"line":8227},[30,106797,31437],{"class":40},[30,106799,322],{"class":321},[30,106801,106802],{"class":74},"\"time:\"",[30,106804,101616],{"class":321},[30,106806,106807,106809,106811,106814,106816,106818],{"class":32,"line":8239},[30,106808,31437],{"class":40},[30,106810,322],{"class":321},[30,106812,106813],{"class":74},"\"joint qpos:\"",[30,106815,105068],{"class":321},[30,106817,613],{"class":40},[30,106819,30635],{"class":321},[30,106821,106822,106824,106826,106829,106831,106833],{"class":32,"line":9898},[30,106823,31437],{"class":40},[30,106825,322],{"class":321},[30,106827,106828],{"class":74},"\"joint qvel:\"",[30,106830,105084],{"class":321},[30,106832,613],{"class":40},[30,106834,30635],{"class":321},[30,106836,106837,106839,106841,106844],{"class":32,"line":9923},[30,106838,31437],{"class":40},[30,106840,322],{"class":321},[30,106842,106843],{"class":74},"\"last ctrl:\"",[30,106845,106846],{"class":321},", data.ctrl.copy())\n",[30,106848,106849],{"class":32,"line":9946},[30,106850,2582],{"emptyLinePlaceholder":245},[30,106852,106853],{"class":32,"line":9970},[30,106854,2582],{"emptyLinePlaceholder":245},[30,106856,106857,106859,106861,106863,106865],{"class":32,"line":9975},[30,106858,1717],{"class":317},[30,106860,31358],{"class":40},[30,106862,101697],{"class":317},[30,106864,101700],{"class":74},[30,106866,3921],{"class":321},[30,106868,106869],{"class":32,"line":9980},[30,106870,101707],{"class":321},[157,106872,103708],{},[20,106874,106876],{"className":22,"code":106875,"language":24,"meta":25,"style":25},"touch ch4_joint_motor.py\n",[27,106877,106878],{"__ignoreMap":25},[30,106879,106880,106882],{"class":32,"line":33},[30,106881,101421],{"class":36},[30,106883,106884],{"class":74}," ch4_joint_motor.py\n",[157,106886,102439],{},[20,106888,106890],{"className":22,"code":106889,"language":24,"meta":25,"style":25},"python ch4_joint_motor.py\n",[27,106891,106892],{"__ignoreMap":25},[30,106893,106894,106896],{"class":32,"line":33},[30,106895,30518],{"class":36},[30,106897,106884],{"class":74},[287,106899,101710],{"id":101710},[157,106901,106902],{},"检查 actuator 数量：",[20,106904,106906],{"className":30516,"code":106905,"language":30518,"meta":25,"style":25},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[27,106907,106908,106920],{"__ignoreMap":25},[30,106909,106910,106912,106914,106916,106918],{"class":32,"line":33},[30,106911,1717],{"class":317},[30,106913,106696],{"class":321},[30,106915,21130],{"class":317},[30,106917,25291],{"class":40},[30,106919,3921],{"class":321},[30,106921,106922,106924,106926,106928,106930],{"class":32,"line":44},[30,106923,104033],{"class":317},[30,106925,103573],{"class":40},[30,106927,322],{"class":321},[30,106929,106713],{"class":74},[30,106931,328],{"class":321},[157,106933,106934,106936,106937,106939],{},[27,106935,102296],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[27,106938,101214],{}," 长度应该是 1。",[157,106941,106942],{},"产生正弦控制信号：",[20,106944,106946],{"className":30516,"code":106945,"language":30518,"meta":25,"style":25},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[27,106947,106948],{"__ignoreMap":25},[30,106949,106950,106952,106954,106956,106958,106960,106962,106964,106966,106968,106970,106972,106974,106976],{"class":32,"line":33},[30,106951,106009],{"class":321},[30,106953,511],{"class":40},[30,106955,4625],{"class":321},[30,106957,367],{"class":317},[30,106959,106764],{"class":40},[30,106961,6700],{"class":317},[30,106963,106769],{"class":321},[30,106965,105398],{"class":40},[30,106967,6700],{"class":317},[30,106969,106776],{"class":321},[30,106971,775],{"class":317},[30,106973,62005],{"class":40},[30,106975,6700],{"class":317},[30,106977,106785],{"class":321},[157,106979,106980],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[157,106982,101811],{},[20,106984,106985],{"className":30516,"code":104643,"language":30518,"meta":25,"style":25},[27,106986,106987],{"__ignoreMap":25},[30,106988,106989],{"class":32,"line":33},[30,106990,104643],{"class":321},[157,106992,106993],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[287,106995,101846],{"id":101846},[20,106997,106999],{"className":30516,"code":106998,"language":30518,"meta":25,"style":25},"import math\n",[27,107000,107001],{"__ignoreMap":25},[30,107002,107003,107005],{"class":32,"line":33},[30,107004,30530],{"class":317},[30,107006,106488],{"class":321},[157,107008,107009,107010,101156,107013,107016],{},"导入 Python 标准库里的数学模块。后面要用 ",[27,107011,107012],{},"math.sin",[27,107014,107015],{},"math.pi"," 生成周期变化的控制信号。",[20,107018,107019],{"className":30516,"code":103824,"language":30518,"meta":25,"style":25},[27,107020,107021,107027],{"__ignoreMap":25},[30,107022,107023,107025],{"class":32,"line":33},[30,107024,30530],{"class":317},[30,107026,101439],{"class":321},[30,107028,107029,107031,107033,107035],{"class":32,"line":44},[30,107030,30530],{"class":317},[30,107032,31518],{"class":321},[30,107034,31521],{"class":317},[30,107036,31524],{"class":321},[157,107038,107039],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[20,107041,107042],{"className":53205,"code":106325,"language":53207,"meta":25,"style":25},[27,107043,107044],{"__ignoreMap":25},[30,107045,107046,107048,107050,107052,107054,107056,107058,107060,107062,107064,107066,107068,107070,107072,107074],{"class":32,"line":33},[30,107047,1230],{"class":321},[30,107049,103094],{"class":51438},[30,107051,15102],{"class":36},[30,107053,367],{"class":321},[30,107055,106157],{"class":74},[30,107057,53962],{"class":36},[30,107059,367],{"class":321},[30,107061,106157],{"class":74},[30,107063,106166],{"class":36},[30,107065,367],{"class":321},[30,107067,106171],{"class":74},[30,107069,106354],{"class":36},[30,107071,367],{"class":321},[30,107073,106359],{"class":74},[30,107075,101282],{"class":321},[157,107077,107078,107079,107081,107082,107084,107085,107087],{},"这行定义关节。",[27,107080,105978],{}," 表示旋转关节。",[27,107083,106377],{}," 表示绕 y 轴旋转。",[27,107086,106383],{}," 表示有一点阻尼，运动不会完全无损耗。",[20,107089,107091],{"className":53205,"code":107090,"language":53207,"meta":25,"style":25},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[27,107092,107093],{"__ignoreMap":25},[30,107094,107095,107097,107099,107101,107103,107106,107108,107110,107113,107116,107118,107121,107123,107125,107127,107129,107131,107134],{"class":32,"line":33},[30,107096,1230],{"class":321},[30,107098,101258],{"class":51438},[30,107100,15102],{"class":36},[30,107102,367],{"class":321},[30,107104,107105],{"class":74},"\"link_geom\"",[30,107107,53962],{"class":36},[30,107109,367],{"class":321},[30,107111,107112],{"class":74},"\"capsule\"",[30,107114,107115],{"class":36}," fromto",[30,107117,367],{"class":321},[30,107119,107120],{"class":74},"\"0 0 0 0 0 0.5\"",[30,107122,101274],{"class":36},[30,107124,367],{"class":321},[30,107126,103916],{"class":74},[30,107128,102139],{"class":36},[30,107130,367],{"class":321},[30,107132,107133],{"class":74},"\"0.5\"",[30,107135,101282],{"class":321},[157,107137,107138,107139,107141,107142,107144,107145,107148,107149,28523,107152,107154],{},"这行定义摆杆的形状。",[27,107140,103303],{}," 是胶囊体，适合表示杆子。",[27,107143,103314],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[27,107146,107147],{},"(0,0,0)"," 延伸到 ",[27,107150,107151],{},"(0,0,0.5)",[27,107153,103308],{}," 是半径。",[20,107156,107157],{"className":53205,"code":106391,"language":53207,"meta":25,"style":25},[27,107158,107159],{"__ignoreMap":25},[30,107160,107161,107163,107165,107167,107169,107171,107173,107175,107177,107179,107181,107183,107185,107187,107189,107191,107193,107195],{"class":32,"line":33},[30,107162,1230],{"class":321},[30,107164,106212],{"class":51438},[30,107166,15102],{"class":36},[30,107168,367],{"class":321},[30,107170,106219],{"class":74},[30,107172,106222],{"class":36},[30,107174,367],{"class":321},[30,107176,106157],{"class":74},[30,107178,106229],{"class":36},[30,107180,367],{"class":321},[30,107182,3860],{"class":74},[30,107184,106236],{"class":36},[30,107186,367],{"class":321},[30,107188,106241],{"class":74},[30,107190,106244],{"class":36},[30,107192,367],{"class":321},[30,107194,106249],{"class":74},[30,107196,101282],{"class":321},[157,107198,107199,107200,107202,107203,107206,107207,107209],{},"这行定义电机。它作用在 ",[27,107201,105978],{}," 关节上。",[27,107204,107205],{},"gear"," 可以理解成放大倍数。",[27,107208,105993],{}," 限制控制输入范围。",[20,107211,107212],{"className":30516,"code":106905,"language":30518,"meta":25,"style":25},[27,107213,107214,107226],{"__ignoreMap":25},[30,107215,107216,107218,107220,107222,107224],{"class":32,"line":33},[30,107217,1717],{"class":317},[30,107219,106696],{"class":321},[30,107221,21130],{"class":317},[30,107223,25291],{"class":40},[30,107225,3921],{"class":321},[30,107227,107228,107230,107232,107234,107236],{"class":32,"line":44},[30,107229,104033],{"class":317},[30,107231,103573],{"class":40},[30,107233,322],{"class":321},[30,107235,106713],{"class":74},[30,107237,328],{"class":321},[157,107239,107240,107242],{},[27,107241,102296],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[20,107244,107246],{"className":30516,"code":107245,"language":30518,"meta":25,"style":25},"for step in range(2000):\n",[27,107247,107248],{"__ignoreMap":25},[30,107249,107250,107252,107254,107256,107258,107260,107262],{"class":32,"line":33},[30,107251,3207],{"class":317},[30,107253,31754],{"class":321},[30,107255,26181],{"class":317},[30,107257,32581],{"class":40},[30,107259,322],{"class":321},[30,107261,106734],{"class":40},[30,107263,30924],{"class":321},[157,107265,107266,107267,107269,107270,107273],{},"循环 2000 步。这里没有用 ",[27,107268,1312],{},"，而是用 ",[27,107271,107272],{},"step","，因为后面要用当前步数计算时间。",[20,107275,107277],{"className":30516,"code":107276,"language":30518,"meta":25,"style":25},"t = step * model.opt.timestep\n",[27,107278,107279],{"__ignoreMap":25},[30,107280,107281,107284,107286,107288,107290],{"class":32,"line":33},[30,107282,107283],{"class":321},"t ",[30,107285,367],{"class":317},[30,107287,31754],{"class":321},[30,107289,775],{"class":317},[30,107291,106750],{"class":321},[157,107293,107294],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[20,107296,107297],{"className":30516,"code":106945,"language":30518,"meta":25,"style":25},[27,107298,107299],{"__ignoreMap":25},[30,107300,107301,107303,107305,107307,107309,107311,107313,107315,107317,107319,107321,107323,107325,107327],{"class":32,"line":33},[30,107302,106009],{"class":321},[30,107304,511],{"class":40},[30,107306,4625],{"class":321},[30,107308,367],{"class":317},[30,107310,106764],{"class":40},[30,107312,6700],{"class":317},[30,107314,106769],{"class":321},[30,107316,105398],{"class":40},[30,107318,6700],{"class":317},[30,107320,106776],{"class":321},[30,107322,775],{"class":317},[30,107324,62005],{"class":40},[30,107326,6700],{"class":317},[30,107328,106785],{"class":321},[157,107330,107331],{},"这行给电机输入一个正弦波。拆开看：",[271,107333,107334,107340,107346],{},[150,107335,107336,107339],{},[27,107337,107338],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[150,107341,107342,107345],{},[27,107343,107344],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[150,107347,107348,107351],{},[27,107349,107350],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[157,107353,107354],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[20,107356,107358],{"className":30516,"code":107357,"language":30518,"meta":25,"style":25},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[27,107359,107360],{"__ignoreMap":25},[30,107361,107362,107364,107366,107368,107370,107372],{"class":32,"line":33},[30,107363,30553],{"class":40},[30,107365,322],{"class":321},[30,107367,106813],{"class":74},[30,107369,105068],{"class":321},[30,107371,613],{"class":40},[30,107373,30635],{"class":321},[157,107375,107376,107377,107379],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[27,107378,101208],{}," 只有一个数。",[15,107381,102454],{"id":102453},[157,107383,107384],{},"输出类似:",[20,107386,107389],{"className":107387,"code":107388,"language":5369,"meta":25},[5367],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[27,107390,107388],{"__ignoreMap":25},[157,107392,107393,107394,107396],{},"这里 ",[27,107395,106264],{}," 是电机输入。",[157,107398,107399,107402,107403,107406],{},[27,107400,107401],{},"joint qpos"," 是关节角度，单位通常是弧度。",[27,107404,107405],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[157,107408,107409],{},"角度单位提示：",[20,107411,107414],{"className":107412,"code":107413,"language":5369,"meta":25},[5367],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[27,107415,107413],{"__ignoreMap":25},[157,107417,107418,107419,107421,107422,107424],{},"如果你看到 ",[27,107420,104168],{}," 是 ",[27,107423,35467],{},"，大约就是 28.6 度。",[15,107426,102486],{"id":102485},[271,107428,107429,107436,107439,107446,107449,107457,107465],{},[150,107430,102549,107431,102552,107433,28523],{},[27,107432,106449],{},[27,107434,107435],{},"gear=\"5\"",[150,107437,107438],{},"重新运行，观察关节运动是否更剧烈。",[150,107440,102549,107441,102552,107443,28523],{},[27,107442,105993],{},[27,107444,107445],{},"-0.2 0.2",[150,107447,107448],{},"重新运行，观察控制能力是否变弱。",[150,107450,107451,107452,107454,107455,28523],{},"去掉 actuator，确认 ",[27,107453,102296],{}," 变成 ",[27,107456,511],{},[150,107458,102549,107459,102552,107461,107464],{},[27,107460,106383],{},[27,107462,107463],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[150,107466,102549,107467,102552,107469,107472],{},[27,107468,106377],{},[27,107470,107471],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[15,107474,102591],{"id":102590},[287,107476,107478],{"id":107477},"indexerror-index-0-is-out-of-bounds",[27,107479,107480],{},"IndexError: index 0 is out of bounds",[157,107482,107483,107484,107486],{},"原因是 ",[27,107485,106130],{},"，没有 actuator。",[287,107488,107489],{"id":107489},"关节几乎不动",[157,107491,107492],{},"可能原因:",[271,107494,107495,107500,107504,107510],{},[150,107496,107497,107499],{},[27,107498,107205],{}," 太小",[150,107501,107502,107499],{},[27,107503,105993],{},[150,107505,107506,107509],{},[27,107507,107508],{},"damping"," 太大",[150,107511,107512],{},"重力方向导致运动不明显",[287,107514,107515],{"id":107515},"模型编译失败",[157,107517,107518,107519,107521],{},"检查 actuator 引用的 ",[27,107520,106440],{}," 是否存在，joint 名称是否拼写一致。",[287,107523,107525,107527],{"id":107524},"datactrl0-写了但没有效果",[27,107526,106264],{}," 写了但没有效果",[157,107529,102713],{},[271,107531,107532,107537,107540,107545,107550],{},[150,107533,107534,107536],{},[27,107535,102296],{}," 是否大于 0。",[150,107538,107539],{},"motor 是否引用了正确 joint。",[150,107541,107542,107544],{},[27,107543,107205],{}," 是否太小。",[150,107546,107547,107549],{},[27,107548,105993],{}," 是否把输入限制得太小。",[150,107551,107552],{},"body 是否真的有可动 joint。",[287,107554,107555],{"id":107555},"控制输入超过范围会怎样",[157,107557,107558],{},"如果设置了：",[20,107560,107562],{"className":53205,"code":107561,"language":53207,"meta":25,"style":25},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[27,107563,107564],{"__ignoreMap":25},[30,107565,107566],{"class":32,"line":33},[30,107567,107561],{"class":321},[157,107569,107570],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[20,107572,107574],{"className":30516,"code":107573,"language":30518,"meta":25,"style":25},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[27,107575,107576,107596],{"__ignoreMap":25},[30,107577,107578,107581,107583,107586,107588,107590,107592,107594],{"class":32,"line":33},[30,107579,107580],{"class":321},"action ",[30,107582,367],{"class":317},[30,107584,107585],{"class":321}," np.clip(action, ",[30,107587,852],{"class":317},[30,107589,105398],{"class":40},[30,107591,12617],{"class":321},[30,107593,105398],{"class":40},[30,107595,328],{"class":321},[30,107597,107598,107600,107602,107604,107606],{"class":32,"line":44},[30,107599,106009],{"class":321},[30,107601,511],{"class":40},[30,107603,4625],{"class":321},[30,107605,367],{"class":317},[30,107607,107608],{"class":321}," action\n",[15,107610,102745],{"id":102744},[157,107612,107613],{},"这一章建立了控制任务的基本形式：",[20,107615,107618],{"className":107616,"code":107617,"language":5369,"meta":25},[5367],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[27,107619,107617],{"__ignoreMap":25},[157,107621,107622],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[234,107624,107625],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":25,"searchDepth":44,"depth":44,"links":107627},[107628,107629,107630,107635,107639,107640,107641,107649],{"id":100784,"depth":44,"text":100785},{"id":100907,"depth":44,"text":100908},{"id":101182,"depth":44,"text":101183,"children":107631},[107632,107633,107634],{"id":106271,"depth":52,"text":106272},{"id":106321,"depth":52,"text":106322},{"id":106387,"depth":52,"text":106388},{"id":101390,"depth":44,"text":101391,"children":107636},[107637,107638],{"id":101710,"depth":52,"text":101710},{"id":101846,"depth":52,"text":101846},{"id":102453,"depth":44,"text":102454},{"id":102485,"depth":44,"text":102486},{"id":102590,"depth":44,"text":102591,"children":107642},[107643,107644,107645,107646,107648],{"id":107477,"depth":52,"text":107480},{"id":107489,"depth":52,"text":107489},{"id":107515,"depth":52,"text":107515},{"id":107524,"depth":52,"text":107647},"data.ctrl[0] 写了但没有效果",{"id":107555,"depth":52,"text":107555},{"id":102744,"depth":44,"text":102745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105959,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107656,"title":107657,"body":107658,"description":25,"extension":243,"meta":109567,"navigation":245,"path":109568,"seo":109569,"stem":109570,"__hash__":109571},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107659,"toc":109543},[107660,107663,107665,107668,107676,107679,107696,107699,107724,107727,107773,107775,107777,107832,107834,107853,107855,107898,107901,107918,107921,107937,107947,107954,107956,107959,107962,107996,107999,108047,108051,108054,108068,108077,108081,108084,108109,108112,108116,108129,108132,108138,108141,108156,108158,108161,108421,108423,108435,108438,108750,108752,108764,108766,108769,108784,108789,108792,108814,108817,108820,108854,108857,108861,108872,108875,108892,108895,108909,108916,108936,108943,108957,108960,108972,108987,109007,109010,109032,109035,109039,109054,109065,109080,109083,109113,109129,109158,109166,109190,109193,109211,109221,109233,109240,109249,109255,109264,109267,109269,109278,109281,109296,109298,109301,109312,109315,109326,109329,109347,109349,109366,109369,109397,109399,109403,109406,109436,109442,109445,109449,109457,109460,109462,109483,109486,109489,109505,109508,109524,109526,109529,109540],[10,107661,107657],{"id":107662},"_5viewer-可视化与-renderer-离屏渲染",[15,107664,100785],{"id":100784},[157,107666,107667],{},"本章掌握两类可视化方式:",[271,107669,107670,107673],{},[150,107671,107672],{},"交互式 viewer: 适合人工观察仿真",[150,107674,107675],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[157,107677,107678],{},"使用官方接口:",[20,107680,107682],{"className":30516,"code":107681,"language":30518,"meta":25,"style":25},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[27,107683,107684,107691],{"__ignoreMap":25},[30,107685,107686,107688],{"class":32,"line":33},[30,107687,30530],{"class":317},[30,107689,107690],{"class":321}," mujoco.viewer\n",[30,107692,107693],{"class":32,"line":44},[30,107694,107695],{"class":321},"mujoco.viewer.launch_passive(model, data)\n",[157,107697,107698],{},"以及:",[20,107700,107702],{"className":30516,"code":107701,"language":30518,"meta":25,"style":25},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[27,107703,107704,107714],{"__ignoreMap":25},[30,107705,107706,107709,107711],{"class":32,"line":33},[30,107707,107708],{"class":321},"renderer ",[30,107710,367],{"class":317},[30,107712,107713],{"class":321}," mujoco.Renderer(model)\n",[30,107715,107716,107719,107721],{"class":32,"line":44},[30,107717,107718],{"class":321},"image ",[30,107720,367],{"class":317},[30,107722,107723],{"class":321}," renderer.render()\n",[157,107725,107726],{},"新手建议先理解二者区别：",[457,107728,107729,107745],{},[460,107730,107731],{},[463,107732,107733,107736,107739,107742],{},[466,107734,107735],{"align":23918},"工具",[466,107737,107738],{"align":23918},"用途",[466,107740,107741],{"align":23918},"是否打开窗口",[466,107743,107744],{"align":23918},"常见场景",[504,107746,107747,107760],{},[463,107748,107749,107752,107755,107757],{},[509,107750,107751],{"align":23918},"Viewer",[509,107753,107754],{"align":23918},"人眼实时观察仿真",[509,107756,104803],{"align":23918},[509,107758,107759],{"align":23918},"调试模型、看控制效果",[463,107761,107762,107765,107768,107770],{},[509,107763,107764],{"align":23918},"Renderer",[509,107766,107767],{"align":23918},"生成图像数组",[509,107769,104816],{"align":23918},[509,107771,107772],{"align":23918},"保存图片、训练视觉策略、服务器批量采集",[15,107774,100908],{"id":100907},[157,107776,100911],{},[20,107778,107780],{"className":22,"code":107779,"language":24,"meta":25,"style":25},"sudo dnf install -y \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr\n",[27,107781,107782,107794,107804,107812,107820],{"__ignoreMap":25},[30,107783,107784,107786,107788,107790,107792],{"class":32,"line":33},[30,107785,24757],{"class":36},[30,107787,26453],{"class":74},[30,107789,24014],{"class":74},[30,107791,26538],{"class":40},[30,107793,41],{"class":40},[30,107795,107796,107798,107800,107802],{"class":32,"line":44},[30,107797,100946],{"class":74},[30,107799,100949],{"class":74},[30,107801,100952],{"class":74},[30,107803,41],{"class":40},[30,107805,107806,107808,107810],{"class":32,"line":52},[30,107807,100959],{"class":74},[30,107809,100962],{"class":74},[30,107811,41],{"class":40},[30,107813,107814,107816,107818],{"class":32,"line":60},[30,107815,100969],{"class":74},[30,107817,100972],{"class":74},[30,107819,41],{"class":40},[30,107821,107822,107824,107826,107828,107830],{"class":32,"line":68},[30,107823,100979],{"class":74},[30,107825,100982],{"class":74},[30,107827,100985],{"class":74},[30,107829,100988],{"class":74},[30,107831,102654],{"class":74},[157,107833,102957],{},[20,107835,107837],{"className":22,"code":107836,"language":24,"meta":25,"style":25},"pip install \"mujoco>=2.3\" numpy pillow\n",[27,107838,107839],{"__ignoreMap":25},[30,107840,107841,107843,107845,107847,107850],{"class":32,"line":33},[30,107842,24011],{"class":36},[30,107844,24014],{"class":74},[30,107846,101068],{"class":74},[30,107848,107849],{"class":74}," numpy",[30,107851,107852],{"class":74}," pillow\n",[157,107854,102974],{},[20,107856,107858],{"className":22,"code":107857,"language":24,"meta":25,"style":25},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[27,107859,107860,107877,107886],{"__ignoreMap":25},[30,107861,107862,107864,107866,107868,107871,107873,107875],{"class":32,"line":33},[30,107863,30468],{"class":36},[30,107865,29314],{"class":74},[30,107867,25288],{"class":40},[30,107869,107870],{"class":74}," mujoco-render",[30,107872,101113],{"class":74},[30,107874,101116],{"class":40},[30,107876,101119],{"class":40},[30,107878,107879,107881,107883],{"class":32,"line":44},[30,107880,30468],{"class":36},[30,107882,101126],{"class":74},[30,107884,107885],{"class":74}," mujoco-render\n",[30,107887,107888,107890,107892,107894,107896],{"class":32,"line":52},[30,107889,24011],{"class":36},[30,107891,24014],{"class":74},[30,107893,101068],{"class":74},[30,107895,107849],{"class":74},[30,107897,107852],{"class":74},[157,107899,107900],{},"离屏渲染后端:",[20,107902,107904],{"className":22,"code":107903,"language":24,"meta":25,"style":25},"export MUJOCO_GL=egl\n",[27,107905,107906],{"__ignoreMap":25},[30,107907,107908,107910,107913,107915],{"class":32,"line":33},[30,107909,25215],{"class":317},[30,107911,107912],{"class":321}," MUJOCO_GL",[30,107914,367],{"class":317},[30,107916,107917],{"class":321},"egl\n",[157,107919,107920],{},"或:",[20,107922,107924],{"className":22,"code":107923,"language":24,"meta":25,"style":25},"export MUJOCO_GL=osmesa\n",[27,107925,107926],{"__ignoreMap":25},[30,107927,107928,107930,107932,107934],{"class":32,"line":33},[30,107929,25215],{"class":317},[30,107931,107912],{"class":321},[30,107933,367],{"class":317},[30,107935,107936],{"class":321},"osmesa\n",[157,107938,107939,107940,107943,107944,28523],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[27,107941,107942],{},"egl"," 失败，再尝试 ",[27,107945,107946],{},"osmesa",[157,107948,107949,107950,107953],{},"如果你在本机桌面环境运行，通常先不要设置 ",[27,107951,107952],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[15,107955,101183],{"id":101182},[157,107957,107958],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[157,107960,107961],{},"典型 viewer 流程:",[20,107963,107965],{"className":30516,"code":107964,"language":30518,"meta":25,"style":25},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[27,107966,107967,107980,107987,107991],{"__ignoreMap":25},[30,107968,107969,107972,107975,107977],{"class":32,"line":33},[30,107970,107971],{"class":317},"with",[30,107973,107974],{"class":321}," mujoco.viewer.launch_passive(model, data) ",[30,107976,31521],{"class":317},[30,107978,107979],{"class":321}," viewer:\n",[30,107981,107982,107984],{"class":32,"line":44},[30,107983,2433],{"class":317},[30,107985,107986],{"class":321}," viewer.is_running():\n",[30,107988,107989],{"class":32,"line":52},[30,107990,101654],{"class":321},[30,107992,107993],{"class":32,"line":60},[30,107994,107995],{"class":321},"        viewer.sync()\n",[157,107997,107998],{},"典型 renderer 流程:",[20,108000,108002],{"className":30516,"code":108001,"language":30518,"meta":25,"style":25},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[27,108003,108004,108030,108034,108039],{"__ignoreMap":25},[30,108005,108006,108008,108010,108013,108015,108017,108019,108021,108023,108025,108028],{"class":32,"line":33},[30,108007,107708],{"class":321},[30,108009,367],{"class":317},[30,108011,108012],{"class":321}," mujoco.Renderer(model, ",[30,108014,25154],{"class":5398},[30,108016,367],{"class":317},[30,108018,42480],{"class":40},[30,108020,12617],{"class":321},[30,108022,25150],{"class":5398},[30,108024,367],{"class":317},[30,108026,108027],{"class":40},"640",[30,108029,328],{"class":321},[30,108031,108032],{"class":32,"line":44},[30,108033,104643],{"class":321},[30,108035,108036],{"class":32,"line":52},[30,108037,108038],{"class":321},"renderer.update_scene(data)\n",[30,108040,108041,108043,108045],{"class":32,"line":60},[30,108042,107718],{"class":321},[30,108044,367],{"class":317},[30,108046,107723],{"class":321},[287,108048,108050],{"id":108049},"viewer-的同步逻辑","viewer 的同步逻辑",[157,108052,108053],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[20,108055,108057],{"className":30516,"code":108056,"language":30518,"meta":25,"style":25},"mujoco.mj_step(model, data)\nviewer.sync()\n",[27,108058,108059,108063],{"__ignoreMap":25},[30,108060,108061],{"class":32,"line":33},[30,108062,104643],{"class":321},[30,108064,108065],{"class":32,"line":44},[30,108066,108067],{"class":321},"viewer.sync()\n",[157,108069,108070,108072,108073,108076],{},[27,108071,101353],{}," 负责算物理，",[27,108074,108075],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[287,108078,108080],{"id":108079},"为什么要-sleep","为什么要 sleep",[157,108082,108083],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[20,108085,108087],{"className":30516,"code":108086,"language":30518,"meta":25,"style":25},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[27,108088,108089],{"__ignoreMap":25},[30,108090,108091,108094,108096,108099,108101,108104,108106],{"class":32,"line":33},[30,108092,108093],{"class":321},"sleep_time ",[30,108095,367],{"class":317},[30,108097,108098],{"class":321}," model.opt.timestep ",[30,108100,852],{"class":317},[30,108102,108103],{"class":321}," (time.time() ",[30,108105,852],{"class":317},[30,108107,108108],{"class":321}," step_start)\n",[157,108110,108111],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[287,108113,108115],{"id":108114},"renderer-输出是什么","renderer 输出是什么",[20,108117,108119],{"className":30516,"code":108118,"language":30518,"meta":25,"style":25},"image = renderer.render()\n",[27,108120,108121],{"__ignoreMap":25},[30,108122,108123,108125,108127],{"class":32,"line":33},[30,108124,107718],{"class":321},[30,108126,367],{"class":317},[30,108128,107723],{"class":321},[157,108130,108131],{},"得到的是 NumPy 数组，形状通常是：",[20,108133,108136],{"className":108134,"code":108135,"language":5369,"meta":25},[5367],"(height, width, 3)\n",[27,108137,108135],{"__ignoreMap":25},[157,108139,108140],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[20,108142,108144],{"className":30516,"code":108143,"language":30518,"meta":25,"style":25},"Image.fromarray(image).save(\"render_output.png\")\n",[27,108145,108146],{"__ignoreMap":25},[30,108147,108148,108151,108154],{"class":32,"line":33},[30,108149,108150],{"class":321},"Image.fromarray(image).save(",[30,108152,108153],{"class":74},"\"render_output.png\"",[30,108155,328],{"class":321},[15,108157,101391],{"id":101390},[157,108159,108160],{},"交互式 Viewer:",[20,108162,108164],{"className":30516,"code":108163,"language":30518,"meta":25,"style":25},"import time\n\nimport mujoco\nimport mujoco.viewer\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"viewer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    with mujoco.viewer.launch_passive(model, data) as viewer:\n        while viewer.is_running() and data.time \u003C 5.0:\n            step_start = time.time()\n            mujoco.mj_step(model, data)\n            viewer.sync()\n\n            sleep_time = model.opt.timestep - (time.time() - step_start)\n            if sleep_time > 0:\n                time.sleep(sleep_time)\n\n\nif __name__ == \"__main__\":\n    main()\n",[27,108165,108166,108172,108176,108182,108188,108192,108196,108204,108209,108213,108217,108221,108226,108231,108235,108239,108243,108248,108252,108256,108260,108264,108268,108272,108284,108296,108304,108308,108318,108338,108348,108353,108358,108362,108379,108392,108397,108401,108405,108417],{"__ignoreMap":25},[30,108167,108168,108170],{"class":32,"line":33},[30,108169,30530],{"class":317},[30,108171,31967],{"class":321},[30,108173,108174],{"class":32,"line":44},[30,108175,2582],{"emptyLinePlaceholder":245},[30,108177,108178,108180],{"class":32,"line":52},[30,108179,30530],{"class":317},[30,108181,101439],{"class":321},[30,108183,108184,108186],{"class":32,"line":60},[30,108185,30530],{"class":317},[30,108187,107690],{"class":321},[30,108189,108190],{"class":32,"line":68},[30,108191,2582],{"emptyLinePlaceholder":245},[30,108193,108194],{"class":32,"line":80},[30,108195,2582],{"emptyLinePlaceholder":245},[30,108197,108198,108200,108202],{"class":32,"line":88},[30,108199,101452],{"class":40},[30,108201,13746],{"class":317},[30,108203,101457],{"class":74},[30,108205,108206],{"class":32,"line":96},[30,108207,108208],{"class":74},"\u003Cmujoco model=\"viewer_demo\">\n",[30,108210,108211],{"class":32,"line":104},[30,108212,101467],{"class":74},[30,108214,108215],{"class":32,"line":112},[30,108216,2582],{"emptyLinePlaceholder":245},[30,108218,108219],{"class":32,"line":123},[30,108220,101476],{"class":74},[30,108222,108223],{"class":32,"line":131},[30,108224,108225],{"class":74},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[30,108227,108228],{"class":32,"line":142},[30,108229,108230],{"class":74},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[30,108232,108233],{"class":32,"line":1811},[30,108234,2582],{"emptyLinePlaceholder":245},[30,108236,108237],{"class":32,"line":1825},[30,108238,101490],{"class":74},[30,108240,108241],{"class":32,"line":1830},[30,108242,101495],{"class":74},[30,108244,108245],{"class":32,"line":1836},[30,108246,108247],{"class":74},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[30,108249,108250],{"class":32,"line":1857},[30,108251,101505],{"class":74},[30,108253,108254],{"class":32,"line":1862},[30,108255,101510],{"class":74},[30,108257,108258],{"class":32,"line":1876},[30,108259,101515],{"class":74},[30,108261,108262],{"class":32,"line":1881},[30,108263,95836],{"class":74},[30,108265,108266],{"class":32,"line":1910},[30,108267,2582],{"emptyLinePlaceholder":245},[30,108269,108270],{"class":32,"line":1915},[30,108271,2582],{"emptyLinePlaceholder":245},[30,108273,108274,108276,108278,108280,108282],{"class":32,"line":1932},[30,108275,32085],{"class":317},[30,108277,2155],{"class":36},[30,108279,101536],{"class":321},[30,108281,95824],{"class":40},[30,108283,3921],{"class":321},[30,108285,108286,108288,108290,108292,108294],{"class":32,"line":1937},[30,108287,101545],{"class":321},[30,108289,367],{"class":317},[30,108291,101550],{"class":321},[30,108293,101452],{"class":40},[30,108295,328],{"class":321},[30,108297,108298,108300,108302],{"class":32,"line":1942},[30,108299,101559],{"class":321},[30,108301,367],{"class":317},[30,108303,101564],{"class":321},[30,108305,108306],{"class":32,"line":1947},[30,108307,2582],{"emptyLinePlaceholder":245},[30,108309,108310,108312,108314,108316],{"class":32,"line":1961},[30,108311,34316],{"class":317},[30,108313,107974],{"class":321},[30,108315,31521],{"class":317},[30,108317,107979],{"class":321},[30,108319,108320,108323,108326,108328,108331,108333,108336],{"class":32,"line":1966},[30,108321,108322],{"class":317},"        while",[30,108324,108325],{"class":321}," viewer.is_running() ",[30,108327,30600],{"class":317},[30,108329,108330],{"class":321}," data.time ",[30,108332,1230],{"class":317},[30,108334,108335],{"class":40}," 5.0",[30,108337,3921],{"class":321},[30,108339,108340,108343,108345],{"class":32,"line":2759},[30,108341,108342],{"class":321},"            step_start ",[30,108344,367],{"class":317},[30,108346,108347],{"class":321}," time.time()\n",[30,108349,108350],{"class":32,"line":2773},[30,108351,108352],{"class":321},"            mujoco.mj_step(model, data)\n",[30,108354,108355],{"class":32,"line":2781},[30,108356,108357],{"class":321},"            viewer.sync()\n",[30,108359,108360],{"class":32,"line":2786},[30,108361,2582],{"emptyLinePlaceholder":245},[30,108363,108364,108367,108369,108371,108373,108375,108377],{"class":32,"line":2792},[30,108365,108366],{"class":321},"            sleep_time ",[30,108368,367],{"class":317},[30,108370,108098],{"class":321},[30,108372,852],{"class":317},[30,108374,108103],{"class":321},[30,108376,852],{"class":317},[30,108378,108108],{"class":321},[30,108380,108381,108383,108386,108388,108390],{"class":32,"line":2798},[30,108382,4824],{"class":317},[30,108384,108385],{"class":321}," sleep_time ",[30,108387,1280],{"class":317},[30,108389,4275],{"class":40},[30,108391,3921],{"class":321},[30,108393,108394],{"class":32,"line":2803},[30,108395,108396],{"class":321},"                time.sleep(sleep_time)\n",[30,108398,108399],{"class":32,"line":8130},[30,108400,2582],{"emptyLinePlaceholder":245},[30,108402,108403],{"class":32,"line":8154},[30,108404,2582],{"emptyLinePlaceholder":245},[30,108406,108407,108409,108411,108413,108415],{"class":32,"line":8159},[30,108408,1717],{"class":317},[30,108410,31358],{"class":40},[30,108412,101697],{"class":317},[30,108414,101700],{"class":74},[30,108416,3921],{"class":321},[30,108418,108419],{"class":32,"line":8165},[30,108420,101707],{"class":321},[157,108422,103708],{},[20,108424,108426],{"className":22,"code":108425,"language":24,"meta":25,"style":25},"touch ch5_viewer.py\n",[27,108427,108428],{"__ignoreMap":25},[30,108429,108430,108432],{"class":32,"line":33},[30,108431,101421],{"class":36},[30,108433,108434],{"class":74}," ch5_viewer.py\n",[157,108436,108437],{},"离屏 Renderer 保存图片:",[20,108439,108441],{"className":30516,"code":108440,"language":30518,"meta":25,"style":25},"from pathlib import Path\n\nimport mujoco\nfrom PIL import Image\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"renderer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    renderer = mujoco.Renderer(model, height=480, width=640)\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    renderer.update_scene(data, camera=\"fixed_camera\")\n    image = renderer.render()\n\n    output_path = Path(\"render_output.png\")\n    Image.fromarray(image).save(output_path)\n    renderer.close()\n\n    print(\"saved:\", output_path.resolve())\n    print(\"image shape:\", image.shape)\n\n\nif __name__ == \"__main__\":\n    main()\n",[27,108442,108443,108455,108459,108465,108475,108479,108483,108491,108496,108500,108504,108508,108512,108517,108521,108525,108529,108533,108537,108541,108545,108549,108553,108557,108561,108573,108585,108593,108618,108622,108638,108642,108646,108661,108670,108674,108688,108693,108698,108702,108714,108726,108730,108734,108746],{"__ignoreMap":25},[30,108444,108445,108447,108450,108452],{"class":32,"line":33},[30,108446,30875],{"class":317},[30,108448,108449],{"class":321}," pathlib ",[30,108451,30530],{"class":317},[30,108453,108454],{"class":321}," Path\n",[30,108456,108457],{"class":32,"line":44},[30,108458,2582],{"emptyLinePlaceholder":245},[30,108460,108461,108463],{"class":32,"line":52},[30,108462,30530],{"class":317},[30,108464,101439],{"class":321},[30,108466,108467,108469,108471,108473],{"class":32,"line":60},[30,108468,30875],{"class":317},[30,108470,47401],{"class":40},[30,108472,47404],{"class":317},[30,108474,47407],{"class":321},[30,108476,108477],{"class":32,"line":68},[30,108478,2582],{"emptyLinePlaceholder":245},[30,108480,108481],{"class":32,"line":80},[30,108482,2582],{"emptyLinePlaceholder":245},[30,108484,108485,108487,108489],{"class":32,"line":88},[30,108486,101452],{"class":40},[30,108488,13746],{"class":317},[30,108490,101457],{"class":74},[30,108492,108493],{"class":32,"line":96},[30,108494,108495],{"class":74},"\u003Cmujoco model=\"renderer_demo\">\n",[30,108497,108498],{"class":32,"line":104},[30,108499,101467],{"class":74},[30,108501,108502],{"class":32,"line":112},[30,108503,2582],{"emptyLinePlaceholder":245},[30,108505,108506],{"class":32,"line":123},[30,108507,101476],{"class":74},[30,108509,108510],{"class":32,"line":131},[30,108511,108225],{"class":74},[30,108513,108514],{"class":32,"line":142},[30,108515,108516],{"class":74},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[30,108518,108519],{"class":32,"line":1811},[30,108520,108230],{"class":74},[30,108522,108523],{"class":32,"line":1825},[30,108524,2582],{"emptyLinePlaceholder":245},[30,108526,108527],{"class":32,"line":1830},[30,108528,101490],{"class":74},[30,108530,108531],{"class":32,"line":1836},[30,108532,101495],{"class":74},[30,108534,108535],{"class":32,"line":1857},[30,108536,108247],{"class":74},[30,108538,108539],{"class":32,"line":1862},[30,108540,101505],{"class":74},[30,108542,108543],{"class":32,"line":1876},[30,108544,101510],{"class":74},[30,108546,108547],{"class":32,"line":1881},[30,108548,101515],{"class":74},[30,108550,108551],{"class":32,"line":1910},[30,108552,95836],{"class":74},[30,108554,108555],{"class":32,"line":1915},[30,108556,2582],{"emptyLinePlaceholder":245},[30,108558,108559],{"class":32,"line":1932},[30,108560,2582],{"emptyLinePlaceholder":245},[30,108562,108563,108565,108567,108569,108571],{"class":32,"line":1937},[30,108564,32085],{"class":317},[30,108566,2155],{"class":36},[30,108568,101536],{"class":321},[30,108570,95824],{"class":40},[30,108572,3921],{"class":321},[30,108574,108575,108577,108579,108581,108583],{"class":32,"line":1942},[30,108576,101545],{"class":321},[30,108578,367],{"class":317},[30,108580,101550],{"class":321},[30,108582,101452],{"class":40},[30,108584,328],{"class":321},[30,108586,108587,108589,108591],{"class":32,"line":1947},[30,108588,101559],{"class":321},[30,108590,367],{"class":317},[30,108592,101564],{"class":321},[30,108594,108595,108598,108600,108602,108604,108606,108608,108610,108612,108614,108616],{"class":32,"line":1961},[30,108596,108597],{"class":321},"    renderer ",[30,108599,367],{"class":317},[30,108601,108012],{"class":321},[30,108603,25154],{"class":5398},[30,108605,367],{"class":317},[30,108607,42480],{"class":40},[30,108609,12617],{"class":321},[30,108611,25150],{"class":5398},[30,108613,367],{"class":317},[30,108615,108027],{"class":40},[30,108617,328],{"class":321},[30,108619,108620],{"class":32,"line":1966},[30,108621,2582],{"emptyLinePlaceholder":245},[30,108623,108624,108626,108628,108630,108632,108634,108636],{"class":32,"line":2759},[30,108625,3383],{"class":317},[30,108627,101639],{"class":321},[30,108629,26181],{"class":317},[30,108631,32581],{"class":40},[30,108633,322],{"class":321},[30,108635,631],{"class":40},[30,108637,30924],{"class":321},[30,108639,108640],{"class":32,"line":2773},[30,108641,101654],{"class":321},[30,108643,108644],{"class":32,"line":2781},[30,108645,2582],{"emptyLinePlaceholder":245},[30,108647,108648,108651,108654,108656,108659],{"class":32,"line":2786},[30,108649,108650],{"class":321},"    renderer.update_scene(data, ",[30,108652,108653],{"class":5398},"camera",[30,108655,367],{"class":317},[30,108657,108658],{"class":74},"\"fixed_camera\"",[30,108660,328],{"class":321},[30,108662,108663,108666,108668],{"class":32,"line":2792},[30,108664,108665],{"class":321},"    image ",[30,108667,367],{"class":317},[30,108669,107723],{"class":321},[30,108671,108672],{"class":32,"line":2798},[30,108673,2582],{"emptyLinePlaceholder":245},[30,108675,108676,108679,108681,108684,108686],{"class":32,"line":2803},[30,108677,108678],{"class":321},"    output_path ",[30,108680,367],{"class":317},[30,108682,108683],{"class":321}," Path(",[30,108685,108153],{"class":74},[30,108687,328],{"class":321},[30,108689,108690],{"class":32,"line":8130},[30,108691,108692],{"class":321},"    Image.fromarray(image).save(output_path)\n",[30,108694,108695],{"class":32,"line":8154},[30,108696,108697],{"class":321},"    renderer.close()\n",[30,108699,108700],{"class":32,"line":8159},[30,108701,2582],{"emptyLinePlaceholder":245},[30,108703,108704,108706,108708,108711],{"class":32,"line":8165},[30,108705,31437],{"class":40},[30,108707,322],{"class":321},[30,108709,108710],{"class":74},"\"saved:\"",[30,108712,108713],{"class":321},", output_path.resolve())\n",[30,108715,108716,108718,108720,108723],{"class":32,"line":8192},[30,108717,31437],{"class":40},[30,108719,322],{"class":321},[30,108721,108722],{"class":74},"\"image shape:\"",[30,108724,108725],{"class":321},", image.shape)\n",[30,108727,108728],{"class":32,"line":8197},[30,108729,2582],{"emptyLinePlaceholder":245},[30,108731,108732],{"class":32,"line":8203},[30,108733,2582],{"emptyLinePlaceholder":245},[30,108735,108736,108738,108740,108742,108744],{"class":32,"line":8215},[30,108737,1717],{"class":317},[30,108739,31358],{"class":40},[30,108741,101697],{"class":317},[30,108743,101700],{"class":74},[30,108745,3921],{"class":321},[30,108747,108748],{"class":32,"line":8227},[30,108749,101707],{"class":321},[157,108751,103708],{},[20,108753,108755],{"className":22,"code":108754,"language":24,"meta":25,"style":25},"touch ch5_renderer.py\n",[27,108756,108757],{"__ignoreMap":25},[30,108758,108759,108761],{"class":32,"line":33},[30,108760,101421],{"class":36},[30,108762,108763],{"class":74}," ch5_renderer.py\n",[287,108765,101710],{"id":101710},[157,108767,108768],{},"viewer 上下文：",[20,108770,108772],{"className":30516,"code":108771,"language":30518,"meta":25,"style":25},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[27,108773,108774],{"__ignoreMap":25},[30,108775,108776,108778,108780,108782],{"class":32,"line":33},[30,108777,107971],{"class":317},[30,108779,107974],{"class":321},[30,108781,31521],{"class":317},[30,108783,107979],{"class":321},[157,108785,108786,108788],{},[27,108787,107971],{}," 语句会创建窗口，并在退出时自动清理资源。",[157,108790,108791],{},"窗口循环：",[20,108793,108795],{"className":30516,"code":108794,"language":30518,"meta":25,"style":25},"while viewer.is_running() and data.time \u003C 5.0:\n",[27,108796,108797],{"__ignoreMap":25},[30,108798,108799,108802,108804,108806,108808,108810,108812],{"class":32,"line":33},[30,108800,108801],{"class":317},"while",[30,108803,108325],{"class":321},[30,108805,30600],{"class":317},[30,108807,108330],{"class":321},[30,108809,1230],{"class":317},[30,108811,108335],{"class":40},[30,108813,3921],{"class":321},[157,108815,108816],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[157,108818,108819],{},"固定相机：",[20,108821,108823],{"className":53205,"code":108822,"language":53207,"meta":25,"style":25},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[27,108824,108825],{"__ignoreMap":25},[30,108826,108827,108829,108831,108833,108835,108837,108839,108841,108844,108847,108849,108852],{"class":32,"line":33},[30,108828,1230],{"class":321},[30,108830,108653],{"class":51438},[30,108832,15102],{"class":36},[30,108834,367],{"class":321},[30,108836,108658],{"class":74},[30,108838,101244],{"class":36},[30,108840,367],{"class":321},[30,108842,108843],{"class":74},"\"1.5 -2.0 1.2\"",[30,108845,108846],{"class":36}," xyaxes",[30,108848,367],{"class":321},[30,108850,108851],{"class":74},"\"1 0.75 0 0 0 1\"",[30,108853,101282],{"class":321},[157,108855,108856],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[287,108858,108860],{"id":108859},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[20,108862,108864],{"className":30516,"code":108863,"language":30518,"meta":25,"style":25},"import time\n",[27,108865,108866],{"__ignoreMap":25},[30,108867,108868,108870],{"class":32,"line":33},[30,108869,30530],{"class":317},[30,108871,31967],{"class":321},[157,108873,108874],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[20,108876,108878],{"className":30516,"code":108877,"language":30518,"meta":25,"style":25},"import mujoco\nimport mujoco.viewer\n",[27,108879,108880,108886],{"__ignoreMap":25},[30,108881,108882,108884],{"class":32,"line":33},[30,108883,30530],{"class":317},[30,108885,101439],{"class":321},[30,108887,108888,108890],{"class":32,"line":44},[30,108889,30530],{"class":317},[30,108891,107690],{"class":321},[157,108893,108894],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[20,108896,108897],{"className":30516,"code":108771,"language":30518,"meta":25,"style":25},[27,108898,108899],{"__ignoreMap":25},[30,108900,108901,108903,108905,108907],{"class":32,"line":33},[30,108902,107971],{"class":317},[30,108904,107974],{"class":321},[30,108906,31521],{"class":317},[30,108908,107979],{"class":321},[157,108910,108911,108912,108915],{},"打开一个 viewer 窗口。",[27,108913,108914],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[20,108917,108918],{"className":30516,"code":108794,"language":30518,"meta":25,"style":25},[27,108919,108920],{"__ignoreMap":25},[30,108921,108922,108924,108926,108928,108930,108932,108934],{"class":32,"line":33},[30,108923,108801],{"class":317},[30,108925,108325],{"class":321},[30,108927,30600],{"class":317},[30,108929,108330],{"class":321},[30,108931,1230],{"class":317},[30,108933,108335],{"class":40},[30,108935,3921],{"class":321},[157,108937,108938,108939,108942],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[27,108940,108941],{},"viewer.is_running()"," 会变成 false，循环结束。",[20,108944,108946],{"className":30516,"code":108945,"language":30518,"meta":25,"style":25},"step_start = time.time()\n",[27,108947,108948],{"__ignoreMap":25},[30,108949,108950,108953,108955],{"class":32,"line":33},[30,108951,108952],{"class":321},"step_start ",[30,108954,367],{"class":317},[30,108956,108347],{"class":321},[157,108958,108959],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[20,108961,108962],{"className":30516,"code":108056,"language":30518,"meta":25,"style":25},[27,108963,108964,108968],{"__ignoreMap":25},[30,108965,108966],{"class":32,"line":33},[30,108967,104643],{"class":321},[30,108969,108970],{"class":32,"line":44},[30,108971,108067],{"class":321},[157,108973,108974,108976,108977,108979,108980,108982,108983,108986],{},[27,108975,101353],{}," 推进物理仿真。",[27,108978,108075],{}," 把最新的 ",[27,108981,33539],{}," 同步到窗口里显示。没有 ",[27,108984,108985],{},"sync()","，窗口可能看不到最新状态。",[20,108988,108989],{"className":30516,"code":108086,"language":30518,"meta":25,"style":25},[27,108990,108991],{"__ignoreMap":25},[30,108992,108993,108995,108997,108999,109001,109003,109005],{"class":32,"line":33},[30,108994,108093],{"class":321},[30,108996,367],{"class":317},[30,108998,108098],{"class":321},[30,109000,852],{"class":317},[30,109002,108103],{"class":321},[30,109004,852],{"class":317},[30,109006,108108],{"class":321},[157,109008,109009],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[20,109011,109013],{"className":30516,"code":109012,"language":30518,"meta":25,"style":25},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[27,109014,109015,109027],{"__ignoreMap":25},[30,109016,109017,109019,109021,109023,109025],{"class":32,"line":33},[30,109018,1717],{"class":317},[30,109020,108385],{"class":321},[30,109022,1280],{"class":317},[30,109024,4275],{"class":40},[30,109026,3921],{"class":321},[30,109028,109029],{"class":32,"line":44},[30,109030,109031],{"class":321},"    time.sleep(sleep_time)\n",[157,109033,109034],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[287,109036,109038],{"id":109037},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[20,109040,109042],{"className":30516,"code":109041,"language":30518,"meta":25,"style":25},"from pathlib import Path\n",[27,109043,109044],{"__ignoreMap":25},[30,109045,109046,109048,109050,109052],{"class":32,"line":33},[30,109047,30875],{"class":317},[30,109049,108449],{"class":321},[30,109051,30530],{"class":317},[30,109053,108454],{"class":321},[157,109055,109056,109057,109060,109061,109064],{},"导入 ",[27,109058,109059],{},"Path","，用来处理文件路径。相比直接写字符串，",[27,109062,109063],{},"Path(\"render_output.png\")"," 更清晰。",[20,109066,109068],{"className":30516,"code":109067,"language":30518,"meta":25,"style":25},"from PIL import Image\n",[27,109069,109070],{"__ignoreMap":25},[30,109071,109072,109074,109076,109078],{"class":32,"line":33},[30,109073,30875],{"class":317},[30,109075,47401],{"class":40},[30,109077,47404],{"class":317},[30,109079,47407],{"class":321},[157,109081,109082],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[20,109084,109085],{"className":53205,"code":108822,"language":53207,"meta":25,"style":25},[27,109086,109087],{"__ignoreMap":25},[30,109088,109089,109091,109093,109095,109097,109099,109101,109103,109105,109107,109109,109111],{"class":32,"line":33},[30,109090,1230],{"class":321},[30,109092,108653],{"class":51438},[30,109094,15102],{"class":36},[30,109096,367],{"class":321},[30,109098,108658],{"class":74},[30,109100,101244],{"class":36},[30,109102,367],{"class":321},[30,109104,108843],{"class":74},[30,109106,108846],{"class":36},[30,109108,367],{"class":321},[30,109110,108851],{"class":74},[30,109112,101282],{"class":321},[157,109114,109115,109116,109118,109119,109121,109122,109125,109126,109128],{},"定义一个相机。",[27,109117,79948],{}," 是相机名字。",[27,109120,104284],{}," 是相机在世界里的位置。",[27,109123,109124],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[27,109127,104284],{}," 来调视角。",[20,109130,109132],{"className":30516,"code":109131,"language":30518,"meta":25,"style":25},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[27,109133,109134],{"__ignoreMap":25},[30,109135,109136,109138,109140,109142,109144,109146,109148,109150,109152,109154,109156],{"class":32,"line":33},[30,109137,107708],{"class":321},[30,109139,367],{"class":317},[30,109141,108012],{"class":321},[30,109143,25154],{"class":5398},[30,109145,367],{"class":317},[30,109147,42480],{"class":40},[30,109149,12617],{"class":321},[30,109151,25150],{"class":5398},[30,109153,367],{"class":317},[30,109155,108027],{"class":40},[30,109157,328],{"class":321},[157,109159,109160,109161,101156,109163,109165],{},"创建离屏渲染器。",[27,109162,25154],{},[27,109164,25150],{}," 决定输出图片大小。",[20,109167,109168],{"className":30516,"code":101814,"language":30518,"meta":25,"style":25},[27,109169,109170,109186],{"__ignoreMap":25},[30,109171,109172,109174,109176,109178,109180,109182,109184],{"class":32,"line":33},[30,109173,3207],{"class":317},[30,109175,101639],{"class":321},[30,109177,26181],{"class":317},[30,109179,32581],{"class":40},[30,109181,322],{"class":321},[30,109183,631],{"class":40},[30,109185,30924],{"class":321},[30,109187,109188],{"class":32,"line":44},[30,109189,101837],{"class":321},[157,109191,109192],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[20,109194,109196],{"className":30516,"code":109195,"language":30518,"meta":25,"style":25},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[27,109197,109198],{"__ignoreMap":25},[30,109199,109200,109203,109205,109207,109209],{"class":32,"line":33},[30,109201,109202],{"class":321},"renderer.update_scene(data, ",[30,109204,108653],{"class":5398},[30,109206,367],{"class":317},[30,109208,108658],{"class":74},[30,109210,328],{"class":321},[157,109212,109213,109214,109216,109217,109220],{},"告诉 renderer：用当前 ",[27,109215,33539],{}," 的状态更新画面，并使用名为 ",[27,109218,109219],{},"fixed_camera"," 的相机视角。",[20,109222,109223],{"className":30516,"code":108118,"language":30518,"meta":25,"style":25},[27,109224,109225],{"__ignoreMap":25},[30,109226,109227,109229,109231],{"class":32,"line":33},[30,109228,107718],{"class":321},[30,109230,367],{"class":317},[30,109232,107723],{"class":321},[157,109234,109235,109236,109239],{},"真正渲染出图像。",[27,109237,109238],{},"image"," 是一个 NumPy 数组，不是文件。",[20,109241,109243],{"className":30516,"code":109242,"language":30518,"meta":25,"style":25},"Image.fromarray(image).save(output_path)\n",[27,109244,109245],{"__ignoreMap":25},[30,109246,109247],{"class":32,"line":33},[30,109248,109242],{"class":321},[157,109250,109251,109252,28523],{},"把数组转换成图片，并保存到 ",[27,109253,109254],{},"render_output.png",[20,109256,109258],{"className":30516,"code":109257,"language":30518,"meta":25,"style":25},"renderer.close()\n",[27,109259,109260],{"__ignoreMap":25},[30,109261,109262],{"class":32,"line":33},[30,109263,109257],{"class":321},[157,109265,109266],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[15,109268,102454],{"id":102453},[157,109270,109271,109272,109274,109275,28523],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[27,109273,109254],{},"，并输出图像数组形状，例如 ",[27,109276,109277],{},"(480, 640, 3)",[157,109279,109280],{},"如果图片里看不到方块，先检查：",[271,109282,109283,109286,109289],{},[150,109284,109285],{},"方块是否掉到相机视野外。",[150,109287,109288],{},"camera 位置是否合理。",[150,109290,109291,109292,109295],{},"是否在 ",[27,109293,109294],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[15,109297,102486],{"id":102485},[157,109299,109300],{},"运行 viewer:",[20,109302,109304],{"className":22,"code":109303,"language":24,"meta":25,"style":25},"python ch5_viewer.py\n",[27,109305,109306],{"__ignoreMap":25},[30,109307,109308,109310],{"class":32,"line":33},[30,109309,30518],{"class":36},[30,109311,108434],{"class":74},[157,109313,109314],{},"运行 renderer:",[20,109316,109318],{"className":22,"code":109317,"language":24,"meta":25,"style":25},"python ch5_renderer.py\n",[27,109319,109320],{"__ignoreMap":25},[30,109321,109322,109324],{"class":32,"line":33},[30,109323,30518],{"class":36},[30,109325,108763],{"class":74},[157,109327,109328],{},"如果在服务器上运行:",[20,109330,109332],{"className":22,"code":109331,"language":24,"meta":25,"style":25},"MUJOCO_GL=egl python ch5_renderer.py\n",[27,109333,109334],{"__ignoreMap":25},[30,109335,109336,109338,109340,109342,109345],{"class":32,"line":33},[30,109337,107952],{"class":321},[30,109339,367],{"class":317},[30,109341,107942],{"class":74},[30,109343,109344],{"class":36}," python",[30,109346,108763],{"class":74},[157,109348,107920],{},[20,109350,109352],{"className":22,"code":109351,"language":24,"meta":25,"style":25},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[27,109353,109354],{"__ignoreMap":25},[30,109355,109356,109358,109360,109362,109364],{"class":32,"line":33},[30,109357,107952],{"class":321},[30,109359,367],{"class":317},[30,109361,107946],{"class":74},[30,109363,109344],{"class":36},[30,109365,108763],{"class":74},[157,109367,109368],{},"再做几个练习：",[271,109370,109371,109378,109381,109387],{},[150,109372,109373,109374,109377],{},"把 renderer 分辨率改成 ",[27,109375,109376],{},"height=240, width=320","，观察输出 shape。",[150,109379,109380],{},"把方块颜色改成蓝色，重新保存图片。",[150,109382,109383,109384,109386],{},"把相机 ",[27,109385,104284],{}," 改远一点，观察画面中物体是否变小。",[150,109388,109389,109390,102552,109393,109396],{},"把 viewer 示例中的 ",[27,109391,109392],{},"data.time \u003C 5.0",[27,109394,109395],{},"data.time \u003C 20.0","，观察更长时间。",[15,109398,102591],{"id":102590},[287,109400,109402],{"id":109401},"viewer-窗口打不开","viewer 窗口打不开",[157,109404,109405],{},"安装:",[20,109407,109409],{"className":22,"code":109408,"language":24,"meta":25,"style":25},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[27,109410,109411],{"__ignoreMap":25},[30,109412,109413,109415,109417,109419,109421,109423,109425,109427,109429,109431,109433],{"class":32,"line":33},[30,109414,24757],{"class":36},[30,109416,26453],{"class":74},[30,109418,24014],{"class":74},[30,109420,26538],{"class":40},[30,109422,102644],{"class":74},[30,109424,100972],{"class":74},[30,109426,102649],{"class":74},[30,109428,100985],{"class":74},[30,109430,100991],{"class":74},[30,109432,100982],{"class":74},[30,109434,109435],{"class":74}," libXinerama\n",[287,109437,109439],{"id":109438},"glfwerror",[27,109440,109441],{},"GLFWError",[157,109443,109444],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[287,109446,109448],{"id":109447},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[157,109450,109451,109452,82677,109454,109456],{},"尝试 ",[27,109453,101175],{},[27,109455,101178],{},"。可能存在版本差异。",[287,109458,109459],{"id":109459},"保存图片是黑的",[157,109461,102713],{},[271,109463,109464,109467,109470,109480],{},[150,109465,109466],{},"XML 里是否有 light。",[150,109468,109469],{},"相机是否对着模型。",[150,109471,109472,109473,109476,109477,28523],{},"是否先 ",[27,109474,109475],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[27,109478,109479],{},"renderer.render()",[150,109481,109482],{},"物体是否已经掉出视野。",[287,109484,109485],{"id":109485},"远程服务器没有显示器",[157,109487,109488],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[20,109490,109491],{"className":22,"code":109331,"language":24,"meta":25,"style":25},[27,109492,109493],{"__ignoreMap":25},[30,109494,109495,109497,109499,109501,109503],{"class":32,"line":33},[30,109496,107952],{"class":321},[30,109498,367],{"class":317},[30,109500,107942],{"class":74},[30,109502,109344],{"class":36},[30,109504,108763],{"class":74},[157,109506,109507],{},"如果 EGL 不可用，再尝试：",[20,109509,109510],{"className":22,"code":109351,"language":24,"meta":25,"style":25},[27,109511,109512],{"__ignoreMap":25},[30,109513,109514,109516,109518,109520,109522],{"class":32,"line":33},[30,109515,107952],{"class":321},[30,109517,367],{"class":317},[30,109519,107946],{"class":74},[30,109521,109344],{"class":36},[30,109523,108763],{"class":74},[15,109525,102745],{"id":102744},[157,109527,109528],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[271,109530,109531,109534,109537],{},[150,109532,109533],{},"先用 viewer 看模型和控制是否正常。",[150,109535,109536],{},"再用 renderer 保存图片或构造视觉观测。",[150,109538,109539],{},"最后把状态、动作、图像、奖励组织成训练数据。",[234,109541,109542],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":25,"searchDepth":44,"depth":44,"links":109544},[109545,109546,109547,109552,109557,109558,109559,109566],{"id":100784,"depth":44,"text":100785},{"id":100907,"depth":44,"text":100908},{"id":101182,"depth":44,"text":101183,"children":109548},[109549,109550,109551],{"id":108049,"depth":52,"text":108050},{"id":108079,"depth":52,"text":108080},{"id":108114,"depth":52,"text":108115},{"id":101390,"depth":44,"text":101391,"children":109553},[109554,109555,109556],{"id":101710,"depth":52,"text":101710},{"id":108859,"depth":52,"text":108860},{"id":109037,"depth":52,"text":109038},{"id":102453,"depth":44,"text":102454},{"id":102485,"depth":44,"text":102486},{"id":102590,"depth":44,"text":102591,"children":109560},[109561,109562,109563,109564,109565],{"id":109401,"depth":52,"text":109402},{"id":109438,"depth":52,"text":109441},{"id":109447,"depth":52,"text":109448},{"id":109459,"depth":52,"text":109459},{"id":109485,"depth":52,"text":109485},{"id":102744,"depth":44,"text":102745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107657,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109573,"title":109574,"body":109575,"description":25,"extension":243,"meta":111486,"navigation":245,"path":111487,"seo":111488,"stem":111489,"__hash__":111490},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109576,"toc":111462},[109577,109580,109582,109585,109587,109606,109609,109615,109618,109620,109622,109646,109648,109662,109664,109705,109707,109718,109720,109723,109729,109732,109766,109769,109801,109804,109836,109840,109843,109883,109886,109892,109895,109901,109905,109908,109914,109917,109921,109924,109964,109966,109979,109982,109984,110566,110568,110580,110583,110594,110596,110599,110618,110630,110633,110654,110657,110660,110703,110706,110709,110729,110736,110738,110756,110771,110774,110780,110783,110789,110806,110813,110844,110855,110889,110900,110917,110926,110934,110939,110953,110956,110977,110983,110997,111002,111032,111042,111067,111075,111098,111101,111117,111120,111128,111134,111156,111169,111190,111199,111238,111249,111251,111254,111260,111263,111266,111272,111275,111295,111298,111300,111339,111341,111344,111352,111355,111358,111385,111388,111398,111404,111407,111413,111415,111421,111425,111428,111430,111433,111457,111460],[10,109578,109574],{"id":109579},"_6控制任务cartpole",[15,109581,100785],{"id":100784},[157,109583,109584],{},"本章搭建一个最小 Cartpole 控制任务。",[157,109586,104469],{},[271,109588,109589,109592,109594,109597,109600,109603],{},[150,109590,109591],{},"slide joint",[150,109593,106322],{},[150,109595,109596],{},"cart force actuator",[150,109598,109599],{},"状态观测",[150,109601,109602],{},"简单控制循环",[150,109604,109605],{},"reward 设计雏形",[157,109607,109608],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[20,109610,109613],{"className":109611,"code":109612,"language":5369,"meta":25},[5367],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[27,109614,109612],{"__ignoreMap":25},[157,109616,109617],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[15,109619,100908],{"id":100907},[157,109621,100911],{},[20,109623,109624],{"className":22,"code":104526,"language":24,"meta":25,"style":25},[27,109625,109626],{"__ignoreMap":25},[30,109627,109628,109630,109632,109634,109636,109638,109640,109642,109644],{"class":32,"line":33},[30,109629,24757],{"class":36},[30,109631,26453],{"class":74},[30,109633,24014],{"class":74},[30,109635,26538],{"class":40},[30,109637,104541],{"class":74},[30,109639,100936],{"class":74},[30,109641,102639],{"class":74},[30,109643,100952],{"class":74},[30,109645,104550],{"class":74},[157,109647,102957],{},[20,109649,109650],{"className":22,"code":101057,"language":24,"meta":25,"style":25},[27,109651,109652],{"__ignoreMap":25},[30,109653,109654,109656,109658,109660],{"class":32,"line":33},[30,109655,24011],{"class":36},[30,109657,24014],{"class":74},[30,109659,101068],{"class":74},[30,109661,101071],{"class":74},[157,109663,102974],{},[20,109665,109667],{"className":22,"code":109666,"language":24,"meta":25,"style":25},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[27,109668,109669,109686,109695],{"__ignoreMap":25},[30,109670,109671,109673,109675,109677,109680,109682,109684],{"class":32,"line":33},[30,109672,30468],{"class":36},[30,109674,29314],{"class":74},[30,109676,25288],{"class":40},[30,109678,109679],{"class":74}," mujoco-cartpole",[30,109681,101113],{"class":74},[30,109683,101116],{"class":40},[30,109685,101119],{"class":40},[30,109687,109688,109690,109692],{"class":32,"line":44},[30,109689,30468],{"class":36},[30,109691,101126],{"class":74},[30,109693,109694],{"class":74}," mujoco-cartpole\n",[30,109696,109697,109699,109701,109703],{"class":32,"line":52},[30,109698,24011],{"class":36},[30,109700,24014],{"class":74},[30,109702,101068],{"class":74},[30,109704,101071],{"class":74},[157,109706,101142],{},[271,109708,109709,109712,109715],{},[150,109710,109711],{},"本章不依赖 Gymnasium。",[150,109713,109714],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[150,109716,109717],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[15,109719,101183],{"id":101182},[157,109721,109722],{},"Cartpole 的模型结构:",[20,109724,109727],{"className":109725,"code":109726,"language":5369,"meta":25},[5367],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[27,109728,109726],{"__ignoreMap":25},[157,109730,109731],{},"小车通过 slide joint 左右移动:",[20,109733,109735],{"className":53205,"code":109734,"language":53207,"meta":25,"style":25},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[27,109736,109737],{"__ignoreMap":25},[30,109738,109739,109741,109743,109745,109747,109750,109752,109754,109757,109759,109761,109764],{"class":32,"line":33},[30,109740,1230],{"class":321},[30,109742,103094],{"class":51438},[30,109744,15102],{"class":36},[30,109746,367],{"class":321},[30,109748,109749],{"class":74},"\"cart_x\"",[30,109751,53962],{"class":36},[30,109753,367],{"class":321},[30,109755,109756],{"class":74},"\"slide\"",[30,109758,106166],{"class":36},[30,109760,367],{"class":321},[30,109762,109763],{"class":74},"\"1 0 0\"",[30,109765,101282],{"class":321},[157,109767,109768],{},"杆子通过 hinge joint 旋转:",[20,109770,109772],{"className":53205,"code":109771,"language":53207,"meta":25,"style":25},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[27,109773,109774],{"__ignoreMap":25},[30,109775,109776,109778,109780,109782,109784,109787,109789,109791,109793,109795,109797,109799],{"class":32,"line":33},[30,109777,1230],{"class":321},[30,109779,103094],{"class":51438},[30,109781,15102],{"class":36},[30,109783,367],{"class":321},[30,109785,109786],{"class":74},"\"pole_hinge\"",[30,109788,53962],{"class":36},[30,109790,367],{"class":321},[30,109792,106157],{"class":74},[30,109794,106166],{"class":36},[30,109796,367],{"class":321},[30,109798,106171],{"class":74},[30,109800,101282],{"class":321},[157,109802,109803],{},"控制力作用在小车 slide joint 上:",[20,109805,109807],{"className":53205,"code":109806,"language":53207,"meta":25,"style":25},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[27,109808,109809],{"__ignoreMap":25},[30,109810,109811,109813,109815,109817,109819,109822,109824,109826,109828,109830,109832,109834],{"class":32,"line":33},[30,109812,1230],{"class":321},[30,109814,106212],{"class":51438},[30,109816,15102],{"class":36},[30,109818,367],{"class":321},[30,109820,109821],{"class":74},"\"cart_motor\"",[30,109823,106222],{"class":36},[30,109825,367],{"class":321},[30,109827,109749],{"class":74},[30,109829,106229],{"class":36},[30,109831,367],{"class":321},[30,109833,54454],{"class":74},[30,109835,101282],{"class":321},[287,109837,109839],{"id":109838},"cartpole-的状态是什么","Cartpole 的状态是什么",[157,109841,109842],{},"这个简化模型有两个关节：",[457,109844,109845,109856],{},[460,109846,109847],{},[463,109848,109849,109851,109853],{},[466,109850,102897],{"align":23918},[466,109852,23919],{"align":23918},[466,109854,109855],{"align":23918},"对应状态",[504,109857,109858,109871],{},[463,109859,109860,109865,109868],{},[509,109861,109862],{"align":23918},[27,109863,109864],{},"cart_x",[509,109866,109867],{"align":23918},"slide",[509,109869,109870],{"align":23918},"小车 x 位置",[463,109872,109873,109878,109880],{},[509,109874,109875],{"align":23918},[27,109876,109877],{},"pole_hinge",[509,109879,105978],{"align":23918},[509,109881,109882],{"align":23918},"杆子角度",[157,109884,109885],{},"所以：",[20,109887,109890],{"className":109888,"code":109889,"language":5369,"meta":25},[5367],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[27,109891,109889],{"__ignoreMap":25},[157,109893,109894],{},"把它们拼起来就是观测：",[20,109896,109899],{"className":109897,"code":109898,"language":5369,"meta":25},[5367],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[27,109900,109898],{"__ignoreMap":25},[287,109902,109904],{"id":109903},"action-是什么","action 是什么",[157,109906,109907],{},"本章只有一个 actuator：",[20,109909,109912],{"className":109910,"code":109911,"language":5369,"meta":25},[5367],"data.ctrl[0] = action\n",[27,109913,109911],{"__ignoreMap":25},[157,109915,109916],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[287,109918,109920],{"id":109919},"reward-是什么","reward 是什么",[157,109922,109923],{},"奖励函数：",[20,109925,109927],{"className":30516,"code":109926,"language":30518,"meta":25,"style":25},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[27,109928,109929],{"__ignoreMap":25},[30,109930,109931,109933,109936,109938,109940,109942,109945,109947,109950,109952,109954,109956,109959,109961],{"class":32,"line":33},[30,109932,17228],{"class":317},[30,109934,109935],{"class":40}," float",[30,109937,322],{"class":321},[30,109939,102541],{"class":40},[30,109941,52409],{"class":317},[30,109943,109944],{"class":40}," 0.1",[30,109946,6700],{"class":317},[30,109948,109949],{"class":321}," cart_x ",[30,109951,775],{"class":317},[30,109953,109949],{"class":321},[30,109955,852],{"class":317},[30,109957,109958],{"class":321}," pole_angle ",[30,109960,775],{"class":317},[30,109962,109963],{"class":321}," pole_angle)\n",[157,109965,106364],{},[271,109967,109968,109973,109976],{},[150,109969,109970,109971,28523],{},"基础奖励是 ",[27,109972,102541],{},[150,109974,109975],{},"小车离中心越远，扣分越多。",[150,109977,109978],{},"杆子角度越大，扣分越多。",[157,109980,109981],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[15,109983,101391],{"id":101390},[20,109985,109987],{"className":30516,"code":109986,"language":30518,"meta":25,"style":25},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"cartpole\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n\n\ndef compute_reward(obs: np.ndarray) -> float:\n    cart_x = obs[0]\n    pole_angle = obs[1]\n    return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    data.qpos[1] = 0.1\n    mujoco.mj_forward(model, data)\n\n    total_reward = 0.0\n\n    for step in range(1000):\n        obs = get_observation(data)\n        pole_angle = obs[1]\n        pole_angular_velocity = obs[3]\n\n        action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n        action = np.clip(action, -1.0, 1.0)\n\n        data.ctrl[0] = action\n        mujoco.mj_step(model, data)\n\n        reward = compute_reward(get_observation(data))\n        total_reward += reward\n\n        if step % 100 == 0:\n            print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final obs:\", np.round(get_observation(data), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[27,109988,109989,109995,110005,110009,110013,110021,110026,110030,110034,110038,110043,110047,110052,110057,110062,110066,110071,110076,110081,110085,110089,110093,110097,110101,110106,110110,110114,110118,110122,110126,110136,110143,110147,110151,110165,110179,110192,110222,110226,110230,110242,110254,110262,110266,110279,110283,110287,110296,110300,110316,110326,110339,110352,110356,110379,110397,110401,110413,110417,110421,110431,110441,110445,110461,110502,110506,110526,110542,110546,110550,110562],{"__ignoreMap":25},[30,109990,109991,109993],{"class":32,"line":33},[30,109992,30530],{"class":317},[30,109994,101439],{"class":321},[30,109996,109997,109999,110001,110003],{"class":32,"line":44},[30,109998,30530],{"class":317},[30,110000,31518],{"class":321},[30,110002,31521],{"class":317},[30,110004,31524],{"class":321},[30,110006,110007],{"class":32,"line":52},[30,110008,2582],{"emptyLinePlaceholder":245},[30,110010,110011],{"class":32,"line":60},[30,110012,2582],{"emptyLinePlaceholder":245},[30,110014,110015,110017,110019],{"class":32,"line":68},[30,110016,101452],{"class":40},[30,110018,13746],{"class":317},[30,110020,101457],{"class":74},[30,110022,110023],{"class":32,"line":80},[30,110024,110025],{"class":74},"\u003Cmujoco model=\"cartpole\">\n",[30,110027,110028],{"class":32,"line":88},[30,110029,101467],{"class":74},[30,110031,110032],{"class":32,"line":96},[30,110033,2582],{"emptyLinePlaceholder":245},[30,110035,110036],{"class":32,"line":104},[30,110037,101476],{"class":74},[30,110039,110040],{"class":32,"line":112},[30,110041,110042],{"class":74},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[30,110044,110045],{"class":32,"line":123},[30,110046,2582],{"emptyLinePlaceholder":245},[30,110048,110049],{"class":32,"line":131},[30,110050,110051],{"class":74},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[30,110053,110054],{"class":32,"line":142},[30,110055,110056],{"class":74},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[30,110058,110059],{"class":32,"line":1811},[30,110060,110061],{"class":74},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[30,110063,110064],{"class":32,"line":1825},[30,110065,2582],{"emptyLinePlaceholder":245},[30,110067,110068],{"class":32,"line":1830},[30,110069,110070],{"class":74},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[30,110072,110073],{"class":32,"line":1836},[30,110074,110075],{"class":74},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[30,110077,110078],{"class":32,"line":1857},[30,110079,110080],{"class":74},"        \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",[30,110082,110083],{"class":32,"line":1862},[30,110084,106576],{"class":74},[30,110086,110087],{"class":32,"line":1876},[30,110088,101505],{"class":74},[30,110090,110091],{"class":32,"line":1881},[30,110092,101510],{"class":74},[30,110094,110095],{"class":32,"line":1910},[30,110096,2582],{"emptyLinePlaceholder":245},[30,110098,110099],{"class":32,"line":1915},[30,110100,106593],{"class":74},[30,110102,110103],{"class":32,"line":1932},[30,110104,110105],{"class":74},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[30,110107,110108],{"class":32,"line":1937},[30,110109,106603],{"class":74},[30,110111,110112],{"class":32,"line":1942},[30,110113,101515],{"class":74},[30,110115,110116],{"class":32,"line":1947},[30,110117,95836],{"class":74},[30,110119,110120],{"class":32,"line":1961},[30,110121,2582],{"emptyLinePlaceholder":245},[30,110123,110124],{"class":32,"line":1966},[30,110125,2582],{"emptyLinePlaceholder":245},[30,110127,110128,110130,110133],{"class":32,"line":2759},[30,110129,32085],{"class":317},[30,110131,110132],{"class":36}," get_observation",[30,110134,110135],{"class":321},"(data: mujoco.MjData) -> np.ndarray:\n",[30,110137,110138,110140],{"class":32,"line":2773},[30,110139,4272],{"class":317},[30,110141,110142],{"class":321}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[30,110144,110145],{"class":32,"line":2781},[30,110146,2582],{"emptyLinePlaceholder":245},[30,110148,110149],{"class":32,"line":2786},[30,110150,2582],{"emptyLinePlaceholder":245},[30,110152,110153,110155,110158,110161,110163],{"class":32,"line":2792},[30,110154,32085],{"class":317},[30,110156,110157],{"class":36}," compute_reward",[30,110159,110160],{"class":321},"(obs: np.ndarray) -> ",[30,110162,361],{"class":40},[30,110164,3921],{"class":321},[30,110166,110167,110170,110172,110175,110177],{"class":32,"line":2798},[30,110168,110169],{"class":321},"    cart_x ",[30,110171,367],{"class":317},[30,110173,110174],{"class":321}," obs[",[30,110176,511],{"class":40},[30,110178,33384],{"class":321},[30,110180,110181,110184,110186,110188,110190],{"class":32,"line":2803},[30,110182,110183],{"class":321},"    pole_angle ",[30,110185,367],{"class":317},[30,110187,110174],{"class":321},[30,110189,537],{"class":40},[30,110191,33384],{"class":321},[30,110193,110194,110196,110198,110200,110202,110204,110206,110208,110210,110212,110214,110216,110218,110220],{"class":32,"line":8130},[30,110195,4272],{"class":317},[30,110197,109935],{"class":40},[30,110199,322],{"class":321},[30,110201,102541],{"class":40},[30,110203,52409],{"class":317},[30,110205,109944],{"class":40},[30,110207,6700],{"class":317},[30,110209,109949],{"class":321},[30,110211,775],{"class":317},[30,110213,109949],{"class":321},[30,110215,852],{"class":317},[30,110217,109958],{"class":321},[30,110219,775],{"class":317},[30,110221,109963],{"class":321},[30,110223,110224],{"class":32,"line":8154},[30,110225,2582],{"emptyLinePlaceholder":245},[30,110227,110228],{"class":32,"line":8159},[30,110229,2582],{"emptyLinePlaceholder":245},[30,110231,110232,110234,110236,110238,110240],{"class":32,"line":8165},[30,110233,32085],{"class":317},[30,110235,2155],{"class":36},[30,110237,101536],{"class":321},[30,110239,95824],{"class":40},[30,110241,3921],{"class":321},[30,110243,110244,110246,110248,110250,110252],{"class":32,"line":8192},[30,110245,101545],{"class":321},[30,110247,367],{"class":317},[30,110249,101550],{"class":321},[30,110251,101452],{"class":40},[30,110253,328],{"class":321},[30,110255,110256,110258,110260],{"class":32,"line":8197},[30,110257,101559],{"class":321},[30,110259,367],{"class":317},[30,110261,101564],{"class":321},[30,110263,110264],{"class":32,"line":8203},[30,110265,2582],{"emptyLinePlaceholder":245},[30,110267,110268,110270,110272,110274,110276],{"class":32,"line":8215},[30,110269,105207],{"class":321},[30,110271,537],{"class":40},[30,110273,4625],{"class":321},[30,110275,367],{"class":317},[30,110277,110278],{"class":40}," 0.1\n",[30,110280,110281],{"class":32,"line":8227},[30,110282,105220],{"class":321},[30,110284,110285],{"class":32,"line":8239},[30,110286,2582],{"emptyLinePlaceholder":245},[30,110288,110289,110292,110294],{"class":32,"line":9898},[30,110290,110291],{"class":321},"    total_reward ",[30,110293,367],{"class":317},[30,110295,104899],{"class":40},[30,110297,110298],{"class":32,"line":9923},[30,110299,2582],{"emptyLinePlaceholder":245},[30,110301,110302,110304,110306,110308,110310,110312,110314],{"class":32,"line":9946},[30,110303,3383],{"class":317},[30,110305,31754],{"class":321},[30,110307,26181],{"class":317},[30,110309,32581],{"class":40},[30,110311,322],{"class":321},[30,110313,6592],{"class":40},[30,110315,30924],{"class":321},[30,110317,110318,110321,110323],{"class":32,"line":9970},[30,110319,110320],{"class":321},"        obs ",[30,110322,367],{"class":317},[30,110324,110325],{"class":321}," get_observation(data)\n",[30,110327,110328,110331,110333,110335,110337],{"class":32,"line":9975},[30,110329,110330],{"class":321},"        pole_angle ",[30,110332,367],{"class":317},[30,110334,110174],{"class":321},[30,110336,537],{"class":40},[30,110338,33384],{"class":321},[30,110340,110341,110344,110346,110348,110350],{"class":32,"line":9980},[30,110342,110343],{"class":321},"        pole_angular_velocity ",[30,110345,367],{"class":317},[30,110347,110174],{"class":321},[30,110349,392],{"class":40},[30,110351,33384],{"class":321},[30,110353,110354],{"class":32,"line":9985},[30,110355,2582],{"emptyLinePlaceholder":245},[30,110357,110358,110361,110363,110366,110368,110370,110372,110374,110376],{"class":32,"line":9994},[30,110359,110360],{"class":321},"        action ",[30,110362,367],{"class":317},[30,110364,110365],{"class":40}," 2.0",[30,110367,6700],{"class":317},[30,110369,109958],{"class":321},[30,110371,801],{"class":317},[30,110373,62005],{"class":40},[30,110375,6700],{"class":317},[30,110377,110378],{"class":321}," pole_angular_velocity\n",[30,110380,110381,110383,110385,110387,110389,110391,110393,110395],{"class":32,"line":9999},[30,110382,110360],{"class":321},[30,110384,367],{"class":317},[30,110386,107585],{"class":321},[30,110388,852],{"class":317},[30,110390,102541],{"class":40},[30,110392,12617],{"class":321},[30,110394,102541],{"class":40},[30,110396,328],{"class":321},[30,110398,110399],{"class":32,"line":10005},[30,110400,2582],{"emptyLinePlaceholder":245},[30,110402,110403,110405,110407,110409,110411],{"class":32,"line":10026},[30,110404,106755],{"class":321},[30,110406,511],{"class":40},[30,110408,4625],{"class":321},[30,110410,367],{"class":317},[30,110412,107608],{"class":321},[30,110414,110415],{"class":32,"line":10032},[30,110416,101654],{"class":321},[30,110418,110419],{"class":32,"line":10046},[30,110420,2582],{"emptyLinePlaceholder":245},[30,110422,110423,110426,110428],{"class":32,"line":10052},[30,110424,110425],{"class":321},"        reward ",[30,110427,367],{"class":317},[30,110429,110430],{"class":321}," compute_reward(get_observation(data))\n",[30,110432,110433,110436,110438],{"class":32,"line":10079},[30,110434,110435],{"class":321},"        total_reward ",[30,110437,9659],{"class":317},[30,110439,110440],{"class":321}," reward\n",[30,110442,110443],{"class":32,"line":10088},[30,110444,2582],{"emptyLinePlaceholder":245},[30,110446,110447,110449,110451,110453,110455,110457,110459],{"class":32,"line":10094},[30,110448,2679],{"class":317},[30,110450,31754],{"class":321},[30,110452,648],{"class":317},[30,110454,5936],{"class":40},[30,110456,101697],{"class":317},[30,110458,4275],{"class":40},[30,110460,3921],{"class":321},[30,110462,110463,110465,110467,110470,110473,110476,110479,110481,110484,110487,110489,110491,110493,110495,110498,110500],{"class":32,"line":10102},[30,110464,34788],{"class":40},[30,110466,322],{"class":321},[30,110468,110469],{"class":74},"\"step:\"",[30,110471,110472],{"class":321},", step, ",[30,110474,110475],{"class":74},"\"obs:\"",[30,110477,110478],{"class":321},", np.round(obs, ",[30,110480,392],{"class":40},[30,110482,110483],{"class":321},"), ",[30,110485,110486],{"class":74},"\"action:\"",[30,110488,12617],{"class":321},[30,110490,32156],{"class":40},[30,110492,322],{"class":321},[30,110494,361],{"class":40},[30,110496,110497],{"class":321},"(action), ",[30,110499,392],{"class":40},[30,110501,30635],{"class":321},[30,110503,110504],{"class":32,"line":10107},[30,110505,2582],{"emptyLinePlaceholder":245},[30,110507,110508,110510,110512,110515,110517,110519,110522,110524],{"class":32,"line":16786},[30,110509,31437],{"class":40},[30,110511,322],{"class":321},[30,110513,110514],{"class":74},"\"total_reward:\"",[30,110516,12617],{"class":321},[30,110518,32156],{"class":40},[30,110520,110521],{"class":321},"(total_reward, ",[30,110523,392],{"class":40},[30,110525,30635],{"class":321},[30,110527,110528,110530,110532,110535,110538,110540],{"class":32,"line":16792},[30,110529,31437],{"class":40},[30,110531,322],{"class":321},[30,110533,110534],{"class":74},"\"final obs:\"",[30,110536,110537],{"class":321},", np.round(get_observation(data), ",[30,110539,392],{"class":40},[30,110541,30635],{"class":321},[30,110543,110544],{"class":32,"line":16815},[30,110545,2582],{"emptyLinePlaceholder":245},[30,110547,110548],{"class":32,"line":16821},[30,110549,2582],{"emptyLinePlaceholder":245},[30,110551,110552,110554,110556,110558,110560],{"class":32,"line":16844},[30,110553,1717],{"class":317},[30,110555,31358],{"class":40},[30,110557,101697],{"class":317},[30,110559,101700],{"class":74},[30,110561,3921],{"class":321},[30,110563,110564],{"class":32,"line":16858},[30,110565,101707],{"class":321},[157,110567,103708],{},[20,110569,110571],{"className":22,"code":110570,"language":24,"meta":25,"style":25},"touch ch6_cartpole.py\n",[27,110572,110573],{"__ignoreMap":25},[30,110574,110575,110577],{"class":32,"line":33},[30,110576,101421],{"class":36},[30,110578,110579],{"class":74}," ch6_cartpole.py\n",[157,110581,110582],{},"运行：",[20,110584,110586],{"className":22,"code":110585,"language":24,"meta":25,"style":25},"python ch6_cartpole.py\n",[27,110587,110588],{"__ignoreMap":25},[30,110589,110590,110592],{"class":32,"line":33},[30,110591,30518],{"class":36},[30,110593,110579],{"class":74},[287,110595,101710],{"id":101710},[157,110597,110598],{},"构造观测：",[20,110600,110602],{"className":30516,"code":110601,"language":30518,"meta":25,"style":25},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[27,110603,110604,110612],{"__ignoreMap":25},[30,110605,110606,110608,110610],{"class":32,"line":33},[30,110607,32085],{"class":317},[30,110609,110132],{"class":36},[30,110611,110135],{"class":321},[30,110613,110614,110616],{"class":32,"line":44},[30,110615,4272],{"class":317},[30,110617,110142],{"class":321},[157,110619,110620,110623,110624,110626,110627,110629],{},[27,110621,110622],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[27,110625,104168],{}," 2 维，",[27,110628,104498],{}," 2 维，所以 obs 是 4 维。",[157,110631,110632],{},"设置初始角度：",[20,110634,110636],{"className":30516,"code":110635,"language":30518,"meta":25,"style":25},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[27,110637,110638,110650],{"__ignoreMap":25},[30,110639,110640,110642,110644,110646,110648],{"class":32,"line":33},[30,110641,104837],{"class":321},[30,110643,537],{"class":40},[30,110645,4625],{"class":321},[30,110647,367],{"class":317},[30,110649,110278],{"class":40},[30,110651,110652],{"class":32,"line":44},[30,110653,104681],{"class":321},[157,110655,110656],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[157,110658,110659],{},"简单反馈控制：",[20,110661,110663],{"className":30516,"code":110662,"language":30518,"meta":25,"style":25},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[27,110664,110665,110685],{"__ignoreMap":25},[30,110666,110667,110669,110671,110673,110675,110677,110679,110681,110683],{"class":32,"line":33},[30,110668,107580],{"class":321},[30,110670,367],{"class":317},[30,110672,110365],{"class":40},[30,110674,6700],{"class":317},[30,110676,109958],{"class":321},[30,110678,801],{"class":317},[30,110680,62005],{"class":40},[30,110682,6700],{"class":317},[30,110684,110378],{"class":321},[30,110686,110687,110689,110691,110693,110695,110697,110699,110701],{"class":32,"line":44},[30,110688,107580],{"class":321},[30,110690,367],{"class":317},[30,110692,107585],{"class":321},[30,110694,852],{"class":317},[30,110696,102541],{"class":40},[30,110698,12617],{"class":321},[30,110700,102541],{"class":40},[30,110702,328],{"class":321},[157,110704,110705],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[157,110707,110708],{},"限制动作：",[20,110710,110712],{"className":30516,"code":110711,"language":30518,"meta":25,"style":25},"np.clip(action, -1.0, 1.0)\n",[27,110713,110714],{"__ignoreMap":25},[30,110715,110716,110719,110721,110723,110725,110727],{"class":32,"line":33},[30,110717,110718],{"class":321},"np.clip(action, ",[30,110720,852],{"class":317},[30,110722,102541],{"class":40},[30,110724,12617],{"class":321},[30,110726,102541],{"class":40},[30,110728,328],{"class":321},[157,110730,110731,110732,110735],{},"因为 XML 里 ",[27,110733,110734],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[287,110737,101846],{"id":101846},[20,110739,110740],{"className":30516,"code":110601,"language":30518,"meta":25,"style":25},[27,110741,110742,110750],{"__ignoreMap":25},[30,110743,110744,110746,110748],{"class":32,"line":33},[30,110745,32085],{"class":317},[30,110747,110132],{"class":36},[30,110749,110135],{"class":321},[30,110751,110752,110754],{"class":32,"line":44},[30,110753,4272],{"class":317},[30,110755,110142],{"class":321},[157,110757,110758,110759,110762,110763,110766,110767,110770],{},"这段定义了一个函数，用来获取当前观测。",[27,110760,110761],{},"data.qpos.copy()"," 是位置数组副本，",[27,110764,110765],{},"data.qvel.copy()"," 是速度数组副本。",[27,110768,110769],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[157,110772,110773],{},"在本章模型里：",[20,110775,110778],{"className":110776,"code":110777,"language":5369,"meta":25},[5367],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[27,110779,110777],{"__ignoreMap":25},[157,110781,110782],{},"所以返回的 obs 是：",[20,110784,110787],{"className":110785,"code":110786,"language":5369,"meta":25},[5367],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[27,110788,110786],{"__ignoreMap":25},[20,110790,110792],{"className":30516,"code":110791,"language":30518,"meta":25,"style":25},"def compute_reward(obs: np.ndarray) -> float:\n",[27,110793,110794],{"__ignoreMap":25},[30,110795,110796,110798,110800,110802,110804],{"class":32,"line":33},[30,110797,32085],{"class":317},[30,110799,110157],{"class":36},[30,110801,110160],{"class":321},[30,110803,361],{"class":40},[30,110805,3921],{"class":321},[157,110807,110808,110809,110812],{},"这行定义奖励函数。输入是观测 ",[27,110810,110811],{},"obs","，输出是一个浮点数奖励。",[20,110814,110816],{"className":30516,"code":110815,"language":30518,"meta":25,"style":25},"cart_x = obs[0]\npole_angle = obs[1]\n",[27,110817,110818,110831],{"__ignoreMap":25},[30,110819,110820,110823,110825,110827,110829],{"class":32,"line":33},[30,110821,110822],{"class":321},"cart_x ",[30,110824,367],{"class":317},[30,110826,110174],{"class":321},[30,110828,511],{"class":40},[30,110830,33384],{"class":321},[30,110832,110833,110836,110838,110840,110842],{"class":32,"line":44},[30,110834,110835],{"class":321},"pole_angle ",[30,110837,367],{"class":317},[30,110839,110174],{"class":321},[30,110841,537],{"class":40},[30,110843,33384],{"class":321},[157,110845,110846,110847,110850,110851,110854],{},"数组索引从 0 开始。",[27,110848,110849],{},"obs[0]"," 是第一个元素，也就是小车位置。",[27,110852,110853],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[20,110856,110857],{"className":30516,"code":109926,"language":30518,"meta":25,"style":25},[27,110858,110859],{"__ignoreMap":25},[30,110860,110861,110863,110865,110867,110869,110871,110873,110875,110877,110879,110881,110883,110885,110887],{"class":32,"line":33},[30,110862,17228],{"class":317},[30,110864,109935],{"class":40},[30,110866,322],{"class":321},[30,110868,102541],{"class":40},[30,110870,52409],{"class":317},[30,110872,109944],{"class":40},[30,110874,6700],{"class":317},[30,110876,109949],{"class":321},[30,110878,775],{"class":317},[30,110880,109949],{"class":321},[30,110882,852],{"class":317},[30,110884,109958],{"class":321},[30,110886,775],{"class":317},[30,110888,109963],{"class":321},[157,110890,110891,110892,110895,110896,110899],{},"这行计算奖励。",[27,110893,110894],{},"cart_x * cart_x"," 是小车位置的平方，",[27,110897,110898],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[20,110901,110903],{"className":30516,"code":110902,"language":30518,"meta":25,"style":25},"data.qpos[1] = 0.1\n",[27,110904,110905],{"__ignoreMap":25},[30,110906,110907,110909,110911,110913,110915],{"class":32,"line":33},[30,110908,104837],{"class":321},[30,110910,537],{"class":40},[30,110912,4625],{"class":321},[30,110914,367],{"class":317},[30,110916,110278],{"class":40},[157,110918,110919,110920,110922,110923,110925],{},"手动设置杆子的初始角度。因为 ",[27,110921,105594],{}," 是小车位置，",[27,110924,105597],{}," 是杆子角度，所以这里改的是杆子。",[20,110927,110928],{"className":30516,"code":104681,"language":30518,"meta":25,"style":25},[27,110929,110930],{"__ignoreMap":25},[30,110931,110932],{"class":32,"line":33},[30,110933,104681],{"class":321},[157,110935,105640,110936,110938],{},[27,110937,104168],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[20,110940,110942],{"className":30516,"code":110941,"language":30518,"meta":25,"style":25},"total_reward = 0.0\n",[27,110943,110944],{"__ignoreMap":25},[30,110945,110946,110949,110951],{"class":32,"line":33},[30,110947,110948],{"class":321},"total_reward ",[30,110950,367],{"class":317},[30,110952,104899],{"class":40},[157,110954,110955],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[20,110957,110959],{"className":30516,"code":110958,"language":30518,"meta":25,"style":25},"for step in range(1000):\n",[27,110960,110961],{"__ignoreMap":25},[30,110962,110963,110965,110967,110969,110971,110973,110975],{"class":32,"line":33},[30,110964,3207],{"class":317},[30,110966,31754],{"class":321},[30,110968,26181],{"class":317},[30,110970,32581],{"class":40},[30,110972,322],{"class":321},[30,110974,6592],{"class":40},[30,110976,30924],{"class":321},[157,110978,110979,110980,110982],{},"循环 1000 步。",[27,110981,107272],{}," 是当前步数，从 0 到 999。",[20,110984,110986],{"className":30516,"code":110985,"language":30518,"meta":25,"style":25},"obs = get_observation(data)\n",[27,110987,110988],{"__ignoreMap":25},[30,110989,110990,110993,110995],{"class":32,"line":33},[30,110991,110992],{"class":321},"obs ",[30,110994,367],{"class":317},[30,110996,110325],{"class":321},[157,110998,110999,111000,28523],{},"读取当前状态，保存到 ",[27,111001,110811],{},[20,111003,111005],{"className":30516,"code":111004,"language":30518,"meta":25,"style":25},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[27,111006,111007,111019],{"__ignoreMap":25},[30,111008,111009,111011,111013,111015,111017],{"class":32,"line":33},[30,111010,110835],{"class":321},[30,111012,367],{"class":317},[30,111014,110174],{"class":321},[30,111016,537],{"class":40},[30,111018,33384],{"class":321},[30,111020,111021,111024,111026,111028,111030],{"class":32,"line":44},[30,111022,111023],{"class":321},"pole_angular_velocity ",[30,111025,367],{"class":317},[30,111027,110174],{"class":321},[30,111029,392],{"class":40},[30,111031,33384],{"class":321},[157,111033,111034,111035,111038,111039,28523],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[27,111036,111037],{},"obs[3]","？因为 obs 的顺序是 ",[27,111040,111041],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[20,111043,111045],{"className":30516,"code":111044,"language":30518,"meta":25,"style":25},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[27,111046,111047],{"__ignoreMap":25},[30,111048,111049,111051,111053,111055,111057,111059,111061,111063,111065],{"class":32,"line":33},[30,111050,107580],{"class":321},[30,111052,367],{"class":317},[30,111054,110365],{"class":40},[30,111056,6700],{"class":317},[30,111058,109958],{"class":321},[30,111060,801],{"class":317},[30,111062,62005],{"class":40},[30,111064,6700],{"class":317},[30,111066,110378],{"class":321},[157,111068,111069,111070,101156,111072,111074],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[27,111071,105398],{},[27,111073,35467],{}," 是人为设置的系数，不是固定公式。",[20,111076,111078],{"className":30516,"code":111077,"language":30518,"meta":25,"style":25},"action = np.clip(action, -1.0, 1.0)\n",[27,111079,111080],{"__ignoreMap":25},[30,111081,111082,111084,111086,111088,111090,111092,111094,111096],{"class":32,"line":33},[30,111083,107580],{"class":321},[30,111085,367],{"class":317},[30,111087,107585],{"class":321},[30,111089,852],{"class":317},[30,111091,102541],{"class":40},[30,111093,12617],{"class":321},[30,111095,102541],{"class":40},[30,111097,328],{"class":321},[157,111099,111100],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[20,111102,111103],{"className":30516,"code":109911,"language":30518,"meta":25,"style":25},[27,111104,111105],{"__ignoreMap":25},[30,111106,111107,111109,111111,111113,111115],{"class":32,"line":33},[30,111108,106009],{"class":321},[30,111110,511],{"class":40},[30,111112,4625],{"class":321},[30,111114,367],{"class":317},[30,111116,107608],{"class":321},[157,111118,111119],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[20,111121,111122],{"className":30516,"code":104643,"language":30518,"meta":25,"style":25},[27,111123,111124],{"__ignoreMap":25},[30,111125,111126],{"class":32,"line":33},[30,111127,104643],{"class":321},[157,111129,111130,111131,111133],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[27,111132,106264],{}," 计算小车和杆子的下一刻状态。",[20,111135,111137],{"className":30516,"code":111136,"language":30518,"meta":25,"style":25},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[27,111138,111139,111148],{"__ignoreMap":25},[30,111140,111141,111144,111146],{"class":32,"line":33},[30,111142,111143],{"class":321},"reward ",[30,111145,367],{"class":317},[30,111147,110430],{"class":321},[30,111149,111150,111152,111154],{"class":32,"line":44},[30,111151,110948],{"class":321},[30,111153,9659],{"class":317},[30,111155,110440],{"class":321},[157,111157,111158,111159,111161,111162,111165,111166,28523],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[27,111160,9659],{}," 是简写，",[27,111163,111164],{},"total_reward += reward"," 等价于 ",[27,111167,111168],{},"total_reward = total_reward + reward",[20,111170,111172],{"className":30516,"code":111171,"language":30518,"meta":25,"style":25},"if step % 100 == 0:\n",[27,111173,111174],{"__ignoreMap":25},[30,111175,111176,111178,111180,111182,111184,111186,111188],{"class":32,"line":33},[30,111177,1717],{"class":317},[30,111179,31754],{"class":321},[30,111181,648],{"class":317},[30,111183,5936],{"class":40},[30,111185,101697],{"class":317},[30,111187,4275],{"class":40},[30,111189,3921],{"class":321},[157,111191,111192,111194,111195,111198],{},[27,111193,648],{}," 是取余数。",[27,111196,111197],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[20,111200,111202],{"className":30516,"code":111201,"language":30518,"meta":25,"style":25},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[27,111203,111204],{"__ignoreMap":25},[30,111205,111206,111208,111210,111212,111214,111216,111218,111220,111222,111224,111226,111228,111230,111232,111234,111236],{"class":32,"line":33},[30,111207,30553],{"class":40},[30,111209,322],{"class":321},[30,111211,110469],{"class":74},[30,111213,110472],{"class":321},[30,111215,110475],{"class":74},[30,111217,110478],{"class":321},[30,111219,392],{"class":40},[30,111221,110483],{"class":321},[30,111223,110486],{"class":74},[30,111225,12617],{"class":321},[30,111227,32156],{"class":40},[30,111229,322],{"class":321},[30,111231,361],{"class":40},[30,111233,110497],{"class":321},[30,111235,392],{"class":40},[30,111237,30635],{"class":321},[157,111239,111240,111241,111244,111245,111248],{},"打印当前步数、观测和动作。",[27,111242,111243],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[27,111246,111247],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[15,111250,102454],{"id":102453},[157,111252,111253],{},"观测向量:",[20,111255,111258],{"className":111256,"code":111257,"language":5369,"meta":25},[5367],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[27,111259,111257],{"__ignoreMap":25},[157,111261,111262],{},"控制器是教学用的简单线性反馈，不保证最优。",[157,111264,111265],{},"每隔 100 步会打印一次：",[20,111267,111270],{"className":111268,"code":111269,"language":5369,"meta":25},[5367],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[27,111271,111269],{"__ignoreMap":25},[157,111273,111274],{},"重点观察：",[271,111276,111277,111283,111288],{},[150,111278,111279,111282],{},[27,111280,111281],{},"pole_angle"," 是否越来越大。",[150,111284,111285,111287],{},[27,111286,109864],{}," 是否跑得太远。",[150,111289,111290,111291,82677,111293,28523],{},"action 是否经常被 clip 到 ",[27,111292,104053],{},[27,111294,537],{},[157,111296,111297],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[15,111299,102486],{"id":102485},[271,111301,111302,111308,111311,111317,111327,111333,111336],{},[150,111303,111304,111305,28523],{},"把初始角度改为 ",[27,111306,111307],{},"data.qpos[1] = 0.3",[150,111309,111310],{},"重新运行，观察控制是否变差。",[150,111312,111313,111314,111316],{},"把 actuator ",[27,111315,107205],{}," 改小。",[150,111318,111319,111320,111323,111324,28523],{},"打印 ",[27,111321,111322],{},"model.nq, model.nv, model.nu","，应为 ",[27,111325,111326],{},"2 2 1",[150,111328,111329,111330,111332],{},"把 reward 里的 ",[27,111331,110898],{}," 系数改大，观察总奖励变化。",[150,111334,111335],{},"把控制器改成反号，观察杆子是否更容易倒。",[150,111337,111338],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[15,111340,102591],{"id":102590},[287,111342,111343],{"id":111343},"杆子方向和预期不一致",[157,111345,102534,111346,111348,111349,111351],{},[27,111347,106377],{}," 和 capsule 的 ",[27,111350,103314],{},"，必要时用 viewer 可视化确认。",[287,111353,111354],{"id":111354},"控制器越控越倒",[157,111356,111357],{},"说明反馈符号可能反了，尝试:",[20,111359,111361],{"className":30516,"code":111360,"language":30518,"meta":25,"style":25},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[27,111362,111363],{"__ignoreMap":25},[30,111364,111365,111367,111369,111371,111373,111375,111377,111379,111381,111383],{"class":32,"line":33},[30,111366,107580],{"class":321},[30,111368,367],{"class":317},[30,111370,52409],{"class":317},[30,111372,105398],{"class":40},[30,111374,6700],{"class":317},[30,111376,109958],{"class":321},[30,111378,852],{"class":317},[30,111380,62005],{"class":40},[30,111382,6700],{"class":317},[30,111384,110378],{"class":321},[287,111386,111387],{"id":111387},"小车飞走",[157,111389,111390,111391,111393,111394,111397],{},"降低 ",[27,111392,107205],{}," 或缩小 ",[27,111395,111396],{},"action"," 的 clip 范围。",[287,111399,111401,111403],{"id":111400},"obs3-为什么是杆子角速度",[27,111402,111037],{}," 为什么是杆子角速度",[157,111405,111406],{},"因为这个模型里：",[20,111408,111411],{"className":111409,"code":111410,"language":5369,"meta":25},[5367],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[27,111412,111410],{"__ignoreMap":25},[157,111414,109885],{},[20,111416,111419],{"className":111417,"code":111418,"language":5369,"meta":25},[5367],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[27,111420,111418],{"__ignoreMap":25},[287,111422,111424],{"id":111423},"reward-变成负数是否错误","reward 变成负数是否错误",[157,111426,111427],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[15,111429,102745],{"id":102744},[157,111431,111432],{},"一个控制任务通常包含：",[271,111434,111435,111438,111446,111451,111454],{},[150,111436,111437],{},"模型：Cartpole 的 body、joint、actuator。",[150,111439,111440,111441,532,111443,111445],{},"观测：从 ",[27,111442,104168],{},[27,111444,104498],{}," 里取状态。",[150,111447,111448,111449,28523],{},"动作：写入 ",[27,111450,101214],{},[150,111452,111453],{},"奖励：根据任务目标打分。",[150,111455,111456],{},"循环：obs -> action -> step -> reward。",[157,111458,111459],{},"这就是后面 Gymnasium 环境的基本骨架。",[234,111461,104424],{},{"title":25,"searchDepth":44,"depth":44,"links":111463},[111464,111465,111466,111471,111475,111476,111477,111485],{"id":100784,"depth":44,"text":100785},{"id":100907,"depth":44,"text":100908},{"id":101182,"depth":44,"text":101183,"children":111467},[111468,111469,111470],{"id":109838,"depth":52,"text":109839},{"id":109903,"depth":52,"text":109904},{"id":109919,"depth":52,"text":109920},{"id":101390,"depth":44,"text":101391,"children":111472},[111473,111474],{"id":101710,"depth":52,"text":101710},{"id":101846,"depth":52,"text":101846},{"id":102453,"depth":44,"text":102454},{"id":102485,"depth":44,"text":102486},{"id":102590,"depth":44,"text":102591,"children":111478},[111479,111480,111481,111482,111484],{"id":111343,"depth":52,"text":111343},{"id":111354,"depth":52,"text":111354},{"id":111387,"depth":52,"text":111387},{"id":111400,"depth":52,"text":111483},"obs[3] 为什么是杆子角速度",{"id":111423,"depth":52,"text":111424},{"id":102744,"depth":44,"text":102745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109574,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111492,"title":111493,"body":111494,"description":25,"extension":243,"meta":113508,"navigation":245,"path":113509,"seo":113510,"stem":113511,"__hash__":113512},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111495,"toc":113484},[111496,111499,111501,111504,111506,111523,111526,111529,111535,111538,111540,111542,111566,111568,111582,111584,111625,111627,111645,111647,111650,111656,111659,111687,111691,111697,111722,111725,111756,111763,111766,111769,111775,111778,111784,111787,111793,111797,111800,111825,111828,111830,112590,112592,112604,112606,112617,112619,112622,112639,112642,112644,112655,112658,112660,112706,112709,112722,112725,112807,112810,112812,112828,112838,112851,112854,112893,112903,112914,112924,112937,112940,112969,112972,112982,112985,112991,113008,113019,113021,113027,113044,113055,113076,113079,113091,113094,113115,113118,113126,113134,113151,113154,113223,113230,113238,113241,113254,113261,113263,113266,113272,113275,113278,113284,113290,113292,113332,113334,113340,113349,113352,113354,113374,113377,113380,113386,113390,113392,113419,113422,113425,113452,113458,113461,113464,113466,113469,113472,113478,113481],[10,111497,111493],{"id":111498},"_7控制任务reacher-机械臂到达目标",[15,111500,100785],{"id":100784},[157,111502,111503],{},"本章搭建一个二维两关节 reacher 任务。",[157,111505,104469],{},[271,111507,111508,111511,111514,111517,111520],{},[150,111509,111510],{},"两个 hinge joint",[150,111512,111513],{},"两个 motor actuator",[150,111515,111516],{},"site 作为末端点和目标点",[150,111518,111519],{},"根据末端和目标距离设计 reward",[150,111521,111522],{},"构造机械臂任务的基本形式",[157,111524,111525],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[157,111527,111528],{},"Reacher 任务可以理解为：",[20,111530,111533],{"className":111531,"code":111532,"language":5369,"meta":25},[5367],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[27,111534,111532],{"__ignoreMap":25},[157,111536,111537],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[15,111539,100908],{"id":100907},[157,111541,100911],{},[20,111543,111544],{"className":22,"code":104526,"language":24,"meta":25,"style":25},[27,111545,111546],{"__ignoreMap":25},[30,111547,111548,111550,111552,111554,111556,111558,111560,111562,111564],{"class":32,"line":33},[30,111549,24757],{"class":36},[30,111551,26453],{"class":74},[30,111553,24014],{"class":74},[30,111555,26538],{"class":40},[30,111557,104541],{"class":74},[30,111559,100936],{"class":74},[30,111561,102639],{"class":74},[30,111563,100952],{"class":74},[30,111565,104550],{"class":74},[157,111567,102957],{},[20,111569,111570],{"className":22,"code":101057,"language":24,"meta":25,"style":25},[27,111571,111572],{"__ignoreMap":25},[30,111573,111574,111576,111578,111580],{"class":32,"line":33},[30,111575,24011],{"class":36},[30,111577,24014],{"class":74},[30,111579,101068],{"class":74},[30,111581,101071],{"class":74},[157,111583,102974],{},[20,111585,111587],{"className":22,"code":111586,"language":24,"meta":25,"style":25},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[27,111588,111589,111606,111615],{"__ignoreMap":25},[30,111590,111591,111593,111595,111597,111600,111602,111604],{"class":32,"line":33},[30,111592,30468],{"class":36},[30,111594,29314],{"class":74},[30,111596,25288],{"class":40},[30,111598,111599],{"class":74}," mujoco-reacher",[30,111601,101113],{"class":74},[30,111603,101116],{"class":40},[30,111605,101119],{"class":40},[30,111607,111608,111610,111612],{"class":32,"line":44},[30,111609,30468],{"class":36},[30,111611,101126],{"class":74},[30,111613,111614],{"class":74}," mujoco-reacher\n",[30,111616,111617,111619,111621,111623],{"class":32,"line":52},[30,111618,24011],{"class":36},[30,111620,24014],{"class":74},[30,111622,101068],{"class":74},[30,111624,101071],{"class":74},[157,111626,101142],{},[271,111628,111629,111632,111635],{},[150,111630,111631],{},"本章使用低维状态，不使用图像输入。",[150,111633,111634],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[150,111636,111637,111638,532,111640,532,111642,111644],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[27,111639,104168],{},[27,111641,104498],{},[27,111643,103818],{}," 的方法一致。",[15,111646,101183],{"id":101182},[157,111648,111649],{},"Reacher 任务核心:",[20,111651,111654],{"className":111652,"code":111653,"language":5369,"meta":25},[5367],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[27,111655,111653],{"__ignoreMap":25},[157,111657,111658],{},"读取 site 世界坐标:",[20,111660,111662],{"className":30516,"code":111661,"language":30518,"meta":25,"style":25},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[27,111663,111664,111677],{"__ignoreMap":25},[30,111665,111666,111668,111670,111672,111675],{"class":32,"line":33},[30,111667,103772],{"class":321},[30,111669,367],{"class":317},[30,111671,103543],{"class":321},[30,111673,111674],{"class":74},"\"tip\"",[30,111676,328],{"class":321},[30,111678,111679,111682,111684],{"class":32,"line":44},[30,111680,111681],{"class":321},"tip_pos ",[30,111683,367],{"class":317},[30,111685,111686],{"class":321}," data.site_xpos[site_id]\n",[287,111688,111690],{"id":111689},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[157,111692,111693,111694,111696],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[27,111695,104168],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[20,111698,111700],{"className":30516,"code":111699,"language":30518,"meta":25,"style":25},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[27,111701,111702,111712],{"__ignoreMap":25},[30,111703,111704,111707,111709],{"class":32,"line":33},[30,111705,111706],{"class":321},"tip ",[30,111708,367],{"class":317},[30,111710,111711],{"class":321}," data.site_xpos[tip_site_id]\n",[30,111713,111714,111717,111719],{"class":32,"line":44},[30,111715,111716],{"class":321},"target ",[30,111718,367],{"class":317},[30,111720,111721],{"class":321}," data.site_xpos[target_site_id]\n",[157,111723,111724],{},"这样 reward 就很容易写：",[20,111726,111728],{"className":30516,"code":111727,"language":30518,"meta":25,"style":25},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[27,111729,111730,111745],{"__ignoreMap":25},[30,111731,111732,111735,111737,111740,111742],{"class":32,"line":33},[30,111733,111734],{"class":321},"dist ",[30,111736,367],{"class":317},[30,111738,111739],{"class":321}," np.linalg.norm(tip ",[30,111741,852],{"class":317},[30,111743,111744],{"class":321}," target)\n",[30,111746,111747,111749,111751,111753],{"class":32,"line":44},[30,111748,111143],{"class":321},[30,111750,367],{"class":317},[30,111752,52409],{"class":317},[30,111754,111755],{"class":321},"dist\n",[157,111757,111758,111759,111762],{},"距离越小，",[27,111760,111761],{},"-dist"," 越接近 0，奖励越高。",[287,111764,111765],{"id":111765},"两关节机械臂的状态",[157,111767,111768],{},"这个模型有两个 hinge joint：",[20,111770,111773],{"className":111771,"code":111772,"language":5369,"meta":25},[5367],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[27,111774,111772],{"__ignoreMap":25},[157,111776,111777],{},"再加上末端和目标位置：",[20,111779,111782],{"className":111780,"code":111781,"language":5369,"meta":25},[5367],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[27,111783,111781],{"__ignoreMap":25},[157,111785,111786],{},"总维度：",[20,111788,111791],{"className":111789,"code":111790,"language":5369,"meta":25},[5367],"2 + 2 + 3 + 3 = 10\n",[27,111792,111790],{"__ignoreMap":25},[287,111794,111796],{"id":111795},"为什么-gravity-是-0","为什么 gravity 是 0",[157,111798,111799],{},"本章把重力设为：",[20,111801,111803],{"className":53205,"code":111802,"language":53207,"meta":25,"style":25},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[27,111804,111805],{"__ignoreMap":25},[30,111806,111807,111809,111811,111813,111815,111817,111819,111821,111823],{"class":32,"line":33},[30,111808,1230],{"class":321},[30,111810,69304],{"class":51438},[30,111812,101332],{"class":36},[30,111814,367],{"class":321},[30,111816,101337],{"class":74},[30,111818,101340],{"class":36},[30,111820,367],{"class":321},[30,111822,103909],{"class":74},[30,111824,101282],{"class":321},[157,111826,111827],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[15,111829,101391],{"id":101390},[20,111831,111833],{"className":30516,"code":111832,"language":30518,"meta":25,"style":25},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"two_link_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n    if site_id \u003C 0:\n        raise RuntimeError(f\"site not found: {name}\")\n    return data.site_xpos[site_id].copy()\n\n\ndef get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n\n\ndef reward(model: mujoco.MjModel, data: mujoco.MjData) -> float:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    dist = np.linalg.norm(tip - target)\n    control_cost = 0.01 * np.sum(np.square(data.ctrl))\n    return float(-dist - control_cost)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    total_reward = 0.0\n\n    for step in range(500):\n        mujoco.mj_forward(model, data)\n        tip = site_position(model, data, \"tip\")\n        target = site_position(model, data, \"target\")\n        error = target - tip\n\n        data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\n        data.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n\n        mujoco.mj_step(model, data)\n        total_reward += reward(model, data)\n\n        if step % 100 == 0:\n            obs = get_obs(model, data)\n            print(\"step:\", step)\n            print(\"  tip:\", np.round(tip, 3))\n            print(\"  target:\", np.round(target, 3))\n            print(\"  ctrl:\", np.round(data.ctrl.copy(), 3))\n            print(\"  obs_dim:\", obs.shape[0])\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final tip:\", np.round(site_position(model, data, \"tip\"), 3))\n    print(\"target:\", np.round(site_position(model, data, \"target\"), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[27,111834,111835,111841,111851,111855,111859,111867,111872,111877,111881,111885,111890,111895,111899,111904,111909,111914,111918,111923,111928,111933,111938,111942,111946,111950,111954,111958,111963,111968,111972,111976,111980,111984,111988,112003,112012,112024,112047,112054,112058,112062,112072,112086,112100,112107,112111,112115,112129,112141,112153,112166,112181,112198,112202,112206,112218,112230,112238,112246,112250,112266,112271,112284,112297,112312,112316,112351,112383,112387,112391,112400,112404,112420,112430,112441,112457,112473,112489,112505,112509,112527,112547,112566,112570,112574,112586],{"__ignoreMap":25},[30,111836,111837,111839],{"class":32,"line":33},[30,111838,30530],{"class":317},[30,111840,101439],{"class":321},[30,111842,111843,111845,111847,111849],{"class":32,"line":44},[30,111844,30530],{"class":317},[30,111846,31518],{"class":321},[30,111848,31521],{"class":317},[30,111850,31524],{"class":321},[30,111852,111853],{"class":32,"line":52},[30,111854,2582],{"emptyLinePlaceholder":245},[30,111856,111857],{"class":32,"line":60},[30,111858,2582],{"emptyLinePlaceholder":245},[30,111860,111861,111863,111865],{"class":32,"line":68},[30,111862,101452],{"class":40},[30,111864,13746],{"class":317},[30,111866,101457],{"class":74},[30,111868,111869],{"class":32,"line":80},[30,111870,111871],{"class":74},"\u003Cmujoco model=\"two_link_reacher\">\n",[30,111873,111874],{"class":32,"line":88},[30,111875,111876],{"class":74},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[30,111878,111879],{"class":32,"line":96},[30,111880,2582],{"emptyLinePlaceholder":245},[30,111882,111883],{"class":32,"line":104},[30,111884,101476],{"class":74},[30,111886,111887],{"class":32,"line":112},[30,111888,111889],{"class":74},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[30,111891,111892],{"class":32,"line":123},[30,111893,111894],{"class":74},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[30,111896,111897],{"class":32,"line":131},[30,111898,2582],{"emptyLinePlaceholder":245},[30,111900,111901],{"class":32,"line":142},[30,111902,111903],{"class":74},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[30,111905,111906],{"class":32,"line":1811},[30,111907,111908],{"class":74},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[30,111910,111911],{"class":32,"line":1825},[30,111912,111913],{"class":74},"      \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",[30,111915,111916],{"class":32,"line":1830},[30,111917,2582],{"emptyLinePlaceholder":245},[30,111919,111920],{"class":32,"line":1836},[30,111921,111922],{"class":74},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[30,111924,111925],{"class":32,"line":1857},[30,111926,111927],{"class":74},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[30,111929,111930],{"class":32,"line":1862},[30,111931,111932],{"class":74},"        \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",[30,111934,111935],{"class":32,"line":1876},[30,111936,111937],{"class":74},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[30,111939,111940],{"class":32,"line":1881},[30,111941,106576],{"class":74},[30,111943,111944],{"class":32,"line":1910},[30,111945,101505],{"class":74},[30,111947,111948],{"class":32,"line":1915},[30,111949,101510],{"class":74},[30,111951,111952],{"class":32,"line":1932},[30,111953,2582],{"emptyLinePlaceholder":245},[30,111955,111956],{"class":32,"line":1937},[30,111957,106593],{"class":74},[30,111959,111960],{"class":32,"line":1942},[30,111961,111962],{"class":74},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[30,111964,111965],{"class":32,"line":1947},[30,111966,111967],{"class":74},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[30,111969,111970],{"class":32,"line":1961},[30,111971,106603],{"class":74},[30,111973,111974],{"class":32,"line":1966},[30,111975,101515],{"class":74},[30,111977,111978],{"class":32,"line":2759},[30,111979,95836],{"class":74},[30,111981,111982],{"class":32,"line":2773},[30,111983,2582],{"emptyLinePlaceholder":245},[30,111985,111986],{"class":32,"line":2781},[30,111987,2582],{"emptyLinePlaceholder":245},[30,111989,111990,111992,111995,111998,112000],{"class":32,"line":2786},[30,111991,32085],{"class":317},[30,111993,111994],{"class":36}," site_position",[30,111996,111997],{"class":321},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[30,111999,1489],{"class":40},[30,112001,112002],{"class":321},") -> np.ndarray:\n",[30,112004,112005,112007,112009],{"class":32,"line":2792},[30,112006,103538],{"class":321},[30,112008,367],{"class":317},[30,112010,112011],{"class":321}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[30,112013,112014,112016,112018,112020,112022],{"class":32,"line":2798},[30,112015,3283],{"class":317},[30,112017,103587],{"class":321},[30,112019,1230],{"class":317},[30,112021,4275],{"class":40},[30,112023,3921],{"class":321},[30,112025,112026,112028,112030,112032,112034,112037,112039,112041,112043,112045],{"class":32,"line":2803},[30,112027,103570],{"class":317},[30,112029,103573],{"class":40},[30,112031,322],{"class":321},[30,112033,373],{"class":317},[30,112035,112036],{"class":74},"\"site not found: ",[30,112038,1216],{"class":40},[30,112040,79948],{"class":321},[30,112042,1266],{"class":40},[30,112044,571],{"class":74},[30,112046,328],{"class":321},[30,112048,112049,112051],{"class":32,"line":8130},[30,112050,4272],{"class":317},[30,112052,112053],{"class":321}," data.site_xpos[site_id].copy()\n",[30,112055,112056],{"class":32,"line":8154},[30,112057,2582],{"emptyLinePlaceholder":245},[30,112059,112060],{"class":32,"line":8159},[30,112061,2582],{"emptyLinePlaceholder":245},[30,112063,112064,112066,112069],{"class":32,"line":8165},[30,112065,32085],{"class":317},[30,112067,112068],{"class":36}," get_obs",[30,112070,112071],{"class":321},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[30,112073,112074,112077,112079,112082,112084],{"class":32,"line":8192},[30,112075,112076],{"class":321},"    tip ",[30,112078,367],{"class":317},[30,112080,112081],{"class":321}," site_position(model, data, ",[30,112083,111674],{"class":74},[30,112085,328],{"class":321},[30,112087,112088,112091,112093,112095,112098],{"class":32,"line":8197},[30,112089,112090],{"class":321},"    target ",[30,112092,367],{"class":317},[30,112094,112081],{"class":321},[30,112096,112097],{"class":74},"\"target\"",[30,112099,328],{"class":321},[30,112101,112102,112104],{"class":32,"line":8203},[30,112103,4272],{"class":317},[30,112105,112106],{"class":321}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[30,112108,112109],{"class":32,"line":8215},[30,112110,2582],{"emptyLinePlaceholder":245},[30,112112,112113],{"class":32,"line":8227},[30,112114,2582],{"emptyLinePlaceholder":245},[30,112116,112117,112119,112122,112125,112127],{"class":32,"line":8239},[30,112118,32085],{"class":317},[30,112120,112121],{"class":36}," reward",[30,112123,112124],{"class":321},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[30,112126,361],{"class":40},[30,112128,3921],{"class":321},[30,112130,112131,112133,112135,112137,112139],{"class":32,"line":9898},[30,112132,112076],{"class":321},[30,112134,367],{"class":317},[30,112136,112081],{"class":321},[30,112138,111674],{"class":74},[30,112140,328],{"class":321},[30,112142,112143,112145,112147,112149,112151],{"class":32,"line":9923},[30,112144,112090],{"class":321},[30,112146,367],{"class":317},[30,112148,112081],{"class":321},[30,112150,112097],{"class":74},[30,112152,328],{"class":321},[30,112154,112155,112158,112160,112162,112164],{"class":32,"line":9946},[30,112156,112157],{"class":321},"    dist ",[30,112159,367],{"class":317},[30,112161,111739],{"class":321},[30,112163,852],{"class":317},[30,112165,111744],{"class":321},[30,112167,112168,112171,112173,112176,112178],{"class":32,"line":9970},[30,112169,112170],{"class":321},"    control_cost ",[30,112172,367],{"class":317},[30,112174,112175],{"class":40}," 0.01",[30,112177,6700],{"class":317},[30,112179,112180],{"class":321}," np.sum(np.square(data.ctrl))\n",[30,112182,112183,112185,112187,112189,112191,112193,112195],{"class":32,"line":9975},[30,112184,4272],{"class":317},[30,112186,109935],{"class":40},[30,112188,322],{"class":321},[30,112190,852],{"class":317},[30,112192,111734],{"class":321},[30,112194,852],{"class":317},[30,112196,112197],{"class":321}," control_cost)\n",[30,112199,112200],{"class":32,"line":9980},[30,112201,2582],{"emptyLinePlaceholder":245},[30,112203,112204],{"class":32,"line":9985},[30,112205,2582],{"emptyLinePlaceholder":245},[30,112207,112208,112210,112212,112214,112216],{"class":32,"line":9994},[30,112209,32085],{"class":317},[30,112211,2155],{"class":36},[30,112213,101536],{"class":321},[30,112215,95824],{"class":40},[30,112217,3921],{"class":321},[30,112219,112220,112222,112224,112226,112228],{"class":32,"line":9999},[30,112221,101545],{"class":321},[30,112223,367],{"class":317},[30,112225,101550],{"class":321},[30,112227,101452],{"class":40},[30,112229,328],{"class":321},[30,112231,112232,112234,112236],{"class":32,"line":10005},[30,112233,101559],{"class":321},[30,112235,367],{"class":317},[30,112237,101564],{"class":321},[30,112239,112240,112242,112244],{"class":32,"line":10026},[30,112241,110291],{"class":321},[30,112243,367],{"class":317},[30,112245,104899],{"class":40},[30,112247,112248],{"class":32,"line":10032},[30,112249,2582],{"emptyLinePlaceholder":245},[30,112251,112252,112254,112256,112258,112260,112262,112264],{"class":32,"line":10046},[30,112253,3383],{"class":317},[30,112255,31754],{"class":321},[30,112257,26181],{"class":317},[30,112259,32581],{"class":40},[30,112261,322],{"class":321},[30,112263,65212],{"class":40},[30,112265,30924],{"class":321},[30,112267,112268],{"class":32,"line":10052},[30,112269,112270],{"class":321},"        mujoco.mj_forward(model, data)\n",[30,112272,112273,112276,112278,112280,112282],{"class":32,"line":10079},[30,112274,112275],{"class":321},"        tip ",[30,112277,367],{"class":317},[30,112279,112081],{"class":321},[30,112281,111674],{"class":74},[30,112283,328],{"class":321},[30,112285,112286,112289,112291,112293,112295],{"class":32,"line":10088},[30,112287,112288],{"class":321},"        target ",[30,112290,367],{"class":317},[30,112292,112081],{"class":321},[30,112294,112097],{"class":74},[30,112296,328],{"class":321},[30,112298,112299,112302,112304,112307,112309],{"class":32,"line":10094},[30,112300,112301],{"class":321},"        error ",[30,112303,367],{"class":317},[30,112305,112306],{"class":321}," target ",[30,112308,852],{"class":317},[30,112310,112311],{"class":321}," tip\n",[30,112313,112314],{"class":32,"line":10102},[30,112315,2582],{"emptyLinePlaceholder":245},[30,112317,112318,112320,112322,112324,112326,112329,112331,112333,112336,112338,112341,112343,112345,112347,112349],{"class":32,"line":10107},[30,112319,106755],{"class":321},[30,112321,511],{"class":40},[30,112323,4625],{"class":321},[30,112325,367],{"class":317},[30,112327,112328],{"class":321}," np.clip(",[30,112330,105398],{"class":40},[30,112332,6700],{"class":317},[30,112334,112335],{"class":321}," error[",[30,112337,398],{"class":40},[30,112339,112340],{"class":321},"], ",[30,112342,852],{"class":317},[30,112344,102541],{"class":40},[30,112346,12617],{"class":321},[30,112348,102541],{"class":40},[30,112350,328],{"class":321},[30,112352,112353,112355,112357,112359,112361,112363,112365,112367,112369,112371,112373,112375,112377,112379,112381],{"class":32,"line":16786},[30,112354,106755],{"class":321},[30,112356,537],{"class":40},[30,112358,4625],{"class":321},[30,112360,367],{"class":317},[30,112362,112328],{"class":321},[30,112364,105398],{"class":40},[30,112366,6700],{"class":317},[30,112368,112335],{"class":321},[30,112370,511],{"class":40},[30,112372,112340],{"class":321},[30,112374,852],{"class":317},[30,112376,102541],{"class":40},[30,112378,12617],{"class":321},[30,112380,102541],{"class":40},[30,112382,328],{"class":321},[30,112384,112385],{"class":32,"line":16792},[30,112386,2582],{"emptyLinePlaceholder":245},[30,112388,112389],{"class":32,"line":16815},[30,112390,101654],{"class":321},[30,112392,112393,112395,112397],{"class":32,"line":16821},[30,112394,110435],{"class":321},[30,112396,9659],{"class":317},[30,112398,112399],{"class":321}," reward(model, data)\n",[30,112401,112402],{"class":32,"line":16844},[30,112403,2582],{"emptyLinePlaceholder":245},[30,112405,112406,112408,112410,112412,112414,112416,112418],{"class":32,"line":16858},[30,112407,2679],{"class":317},[30,112409,31754],{"class":321},[30,112411,648],{"class":317},[30,112413,5936],{"class":40},[30,112415,101697],{"class":317},[30,112417,4275],{"class":40},[30,112419,3921],{"class":321},[30,112421,112422,112425,112427],{"class":32,"line":16878},[30,112423,112424],{"class":321},"            obs ",[30,112426,367],{"class":317},[30,112428,112429],{"class":321}," get_obs(model, data)\n",[30,112431,112432,112434,112436,112438],{"class":32,"line":16884},[30,112433,34788],{"class":40},[30,112435,322],{"class":321},[30,112437,110469],{"class":74},[30,112439,112440],{"class":321},", step)\n",[30,112442,112443,112445,112447,112450,112453,112455],{"class":32,"line":16895},[30,112444,34788],{"class":40},[30,112446,322],{"class":321},[30,112448,112449],{"class":74},"\"  tip:\"",[30,112451,112452],{"class":321},", np.round(tip, ",[30,112454,392],{"class":40},[30,112456,30635],{"class":321},[30,112458,112459,112461,112463,112466,112469,112471],{"class":32,"line":16918},[30,112460,34788],{"class":40},[30,112462,322],{"class":321},[30,112464,112465],{"class":74},"\"  target:\"",[30,112467,112468],{"class":321},", np.round(target, ",[30,112470,392],{"class":40},[30,112472,30635],{"class":321},[30,112474,112475,112477,112479,112482,112485,112487],{"class":32,"line":16940},[30,112476,34788],{"class":40},[30,112478,322],{"class":321},[30,112480,112481],{"class":74},"\"  ctrl:\"",[30,112483,112484],{"class":321},", np.round(data.ctrl.copy(), ",[30,112486,392],{"class":40},[30,112488,30635],{"class":321},[30,112490,112491,112493,112495,112498,112501,112503],{"class":32,"line":16945},[30,112492,34788],{"class":40},[30,112494,322],{"class":321},[30,112496,112497],{"class":74},"\"  obs_dim:\"",[30,112499,112500],{"class":321},", obs.shape[",[30,112502,511],{"class":40},[30,112504,4839],{"class":321},[30,112506,112507],{"class":32,"line":16951},[30,112508,2582],{"emptyLinePlaceholder":245},[30,112510,112511,112513,112515,112517,112519,112521,112523,112525],{"class":32,"line":16965},[30,112512,31437],{"class":40},[30,112514,322],{"class":321},[30,112516,110514],{"class":74},[30,112518,12617],{"class":321},[30,112520,32156],{"class":40},[30,112522,110521],{"class":321},[30,112524,392],{"class":40},[30,112526,30635],{"class":321},[30,112528,112529,112531,112533,112536,112539,112541,112543,112545],{"class":32,"line":16978},[30,112530,31437],{"class":40},[30,112532,322],{"class":321},[30,112534,112535],{"class":74},"\"final tip:\"",[30,112537,112538],{"class":321},", np.round(site_position(model, data, ",[30,112540,111674],{"class":74},[30,112542,110483],{"class":321},[30,112544,392],{"class":40},[30,112546,30635],{"class":321},[30,112548,112549,112551,112553,112556,112558,112560,112562,112564],{"class":32,"line":16983},[30,112550,31437],{"class":40},[30,112552,322],{"class":321},[30,112554,112555],{"class":74},"\"target:\"",[30,112557,112538],{"class":321},[30,112559,112097],{"class":74},[30,112561,110483],{"class":321},[30,112563,392],{"class":40},[30,112565,30635],{"class":321},[30,112567,112568],{"class":32,"line":16997},[30,112569,2582],{"emptyLinePlaceholder":245},[30,112571,112572],{"class":32,"line":17002},[30,112573,2582],{"emptyLinePlaceholder":245},[30,112575,112576,112578,112580,112582,112584],{"class":32,"line":17008},[30,112577,1717],{"class":317},[30,112579,31358],{"class":40},[30,112581,101697],{"class":317},[30,112583,101700],{"class":74},[30,112585,3921],{"class":321},[30,112587,112588],{"class":32,"line":17013},[30,112589,101707],{"class":321},[157,112591,103708],{},[20,112593,112595],{"className":22,"code":112594,"language":24,"meta":25,"style":25},"touch ch7_reacher.py\n",[27,112596,112597],{"__ignoreMap":25},[30,112598,112599,112601],{"class":32,"line":33},[30,112600,101421],{"class":36},[30,112602,112603],{"class":74}," ch7_reacher.py\n",[157,112605,110582],{},[20,112607,112609],{"className":22,"code":112608,"language":24,"meta":25,"style":25},"python ch7_reacher.py\n",[27,112610,112611],{"__ignoreMap":25},[30,112612,112613,112615],{"class":32,"line":33},[30,112614,30518],{"class":36},[30,112616,112603],{"class":74},[287,112618,101710],{"id":101710},[157,112620,112621],{},"读取 site 坐标：",[20,112623,112625],{"className":30516,"code":112624,"language":30518,"meta":25,"style":25},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[27,112626,112627],{"__ignoreMap":25},[30,112628,112629,112631,112633,112635,112637],{"class":32,"line":33},[30,112630,32085],{"class":317},[30,112632,111994],{"class":36},[30,112634,111997],{"class":321},[30,112636,1489],{"class":40},[30,112638,112002],{"class":321},[157,112640,112641],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[157,112643,110598],{},[20,112645,112647],{"className":30516,"code":112646,"language":30518,"meta":25,"style":25},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[27,112648,112649],{"__ignoreMap":25},[30,112650,112651,112653],{"class":32,"line":33},[30,112652,17228],{"class":317},[30,112654,112106],{"class":321},[157,112656,112657],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[157,112659,109923],{},[20,112661,112663],{"className":30516,"code":112662,"language":30518,"meta":25,"style":25},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[27,112664,112665,112677,112690],{"__ignoreMap":25},[30,112666,112667,112669,112671,112673,112675],{"class":32,"line":33},[30,112668,111734],{"class":321},[30,112670,367],{"class":317},[30,112672,111739],{"class":321},[30,112674,852],{"class":317},[30,112676,111744],{"class":321},[30,112678,112679,112682,112684,112686,112688],{"class":32,"line":44},[30,112680,112681],{"class":321},"control_cost ",[30,112683,367],{"class":317},[30,112685,112175],{"class":40},[30,112687,6700],{"class":317},[30,112689,112180],{"class":321},[30,112691,112692,112694,112696,112698,112700,112702,112704],{"class":32,"line":52},[30,112693,17228],{"class":317},[30,112695,109935],{"class":40},[30,112697,322],{"class":321},[30,112699,852],{"class":317},[30,112701,111734],{"class":321},[30,112703,852],{"class":317},[30,112705,112197],{"class":321},[157,112707,112708],{},"奖励由两部分组成：",[271,112710,112711,112716],{},[150,112712,112713,112715],{},[27,112714,111761],{},"：末端离目标越远，奖励越低。",[150,112717,112718,112721],{},[27,112719,112720],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[157,112723,112724],{},"简单控制器：",[20,112726,112728],{"className":30516,"code":112727,"language":30518,"meta":25,"style":25},"error = target - tip\ndata.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[27,112729,112730,112743,112775],{"__ignoreMap":25},[30,112731,112732,112735,112737,112739,112741],{"class":32,"line":33},[30,112733,112734],{"class":321},"error ",[30,112736,367],{"class":317},[30,112738,112306],{"class":321},[30,112740,852],{"class":317},[30,112742,112311],{"class":321},[30,112744,112745,112747,112749,112751,112753,112755,112757,112759,112761,112763,112765,112767,112769,112771,112773],{"class":32,"line":44},[30,112746,106009],{"class":321},[30,112748,511],{"class":40},[30,112750,4625],{"class":321},[30,112752,367],{"class":317},[30,112754,112328],{"class":321},[30,112756,105398],{"class":40},[30,112758,6700],{"class":317},[30,112760,112335],{"class":321},[30,112762,398],{"class":40},[30,112764,112340],{"class":321},[30,112766,852],{"class":317},[30,112768,102541],{"class":40},[30,112770,12617],{"class":321},[30,112772,102541],{"class":40},[30,112774,328],{"class":321},[30,112776,112777,112779,112781,112783,112785,112787,112789,112791,112793,112795,112797,112799,112801,112803,112805],{"class":32,"line":52},[30,112778,106009],{"class":321},[30,112780,537],{"class":40},[30,112782,4625],{"class":321},[30,112784,367],{"class":317},[30,112786,112328],{"class":321},[30,112788,105398],{"class":40},[30,112790,6700],{"class":317},[30,112792,112335],{"class":321},[30,112794,511],{"class":40},[30,112796,112340],{"class":321},[30,112798,852],{"class":317},[30,112800,102541],{"class":40},[30,112802,12617],{"class":321},[30,112804,102541],{"class":40},[30,112806,328],{"class":321},[157,112808,112809],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[287,112811,101846],{"id":101846},[20,112813,112814],{"className":30516,"code":112624,"language":30518,"meta":25,"style":25},[27,112815,112816],{"__ignoreMap":25},[30,112817,112818,112820,112822,112824,112826],{"class":32,"line":33},[30,112819,32085],{"class":317},[30,112821,111994],{"class":36},[30,112823,111997],{"class":321},[30,112825,1489],{"class":40},[30,112827,112002],{"class":321},[157,112829,112830,112831,112833,112834,82677,112836,28523],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[27,112832,79948],{}," 是 site 的名字，比如 ",[27,112835,111674],{},[27,112837,112097],{},[20,112839,112841],{"className":30516,"code":112840,"language":30518,"meta":25,"style":25},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[27,112842,112843],{"__ignoreMap":25},[30,112844,112845,112847,112849],{"class":32,"line":33},[30,112846,103772],{"class":321},[30,112848,367],{"class":317},[30,112850,112011],{"class":321},[157,112852,112853],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[20,112855,112857],{"className":30516,"code":112856,"language":30518,"meta":25,"style":25},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[27,112858,112859,112871],{"__ignoreMap":25},[30,112860,112861,112863,112865,112867,112869],{"class":32,"line":33},[30,112862,1717],{"class":317},[30,112864,103587],{"class":321},[30,112866,1230],{"class":317},[30,112868,4275],{"class":40},[30,112870,3921],{"class":321},[30,112872,112873,112875,112877,112879,112881,112883,112885,112887,112889,112891],{"class":32,"line":44},[30,112874,104033],{"class":317},[30,112876,103573],{"class":40},[30,112878,322],{"class":321},[30,112880,373],{"class":317},[30,112882,112036],{"class":74},[30,112884,1216],{"class":40},[30,112886,79948],{"class":321},[30,112888,1266],{"class":40},[30,112890,571],{"class":74},[30,112892,328],{"class":321},[157,112894,112895,112896,112899,112900,112902],{},"如果 site 没找到，就主动报错。",[27,112897,112898],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[27,112901,79948],{}," 的值放进字符串里。",[20,112904,112906],{"className":30516,"code":112905,"language":30518,"meta":25,"style":25},"return data.site_xpos[site_id].copy()\n",[27,112907,112908],{"__ignoreMap":25},[30,112909,112910,112912],{"class":32,"line":33},[30,112911,17228],{"class":317},[30,112913,112053],{"class":321},[157,112915,112916,112917,112919,112920,112923],{},"返回这个 site 的世界坐标。",[27,112918,103818],{}," 里的每一行都是一个 site 的 ",[27,112921,112922],{},"(x, y, z)"," 坐标。",[20,112925,112927],{"className":30516,"code":112926,"language":30518,"meta":25,"style":25},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[27,112928,112929],{"__ignoreMap":25},[30,112930,112931,112933,112935],{"class":32,"line":33},[30,112932,32085],{"class":317},[30,112934,112068],{"class":36},[30,112936,112071],{"class":321},[157,112938,112939],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[20,112941,112943],{"className":30516,"code":112942,"language":30518,"meta":25,"style":25},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[27,112944,112945,112957],{"__ignoreMap":25},[30,112946,112947,112949,112951,112953,112955],{"class":32,"line":33},[30,112948,111706],{"class":321},[30,112950,367],{"class":317},[30,112952,112081],{"class":321},[30,112954,111674],{"class":74},[30,112956,328],{"class":321},[30,112958,112959,112961,112963,112965,112967],{"class":32,"line":44},[30,112960,111716],{"class":321},[30,112962,367],{"class":317},[30,112964,112081],{"class":321},[30,112966,112097],{"class":74},[30,112968,328],{"class":321},[157,112970,112971],{},"分别读取末端点和目标点的世界坐标。",[20,112973,112974],{"className":30516,"code":112646,"language":30518,"meta":25,"style":25},[27,112975,112976],{"__ignoreMap":25},[30,112977,112978,112980],{"class":32,"line":33},[30,112979,17228],{"class":317},[30,112981,112106],{"class":321},[157,112983,112984],{},"把四部分拼成一个观测数组：",[20,112986,112989],{"className":112987,"code":112988,"language":5369,"meta":25},[5367],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[27,112990,112988],{"__ignoreMap":25},[20,112992,112994],{"className":30516,"code":112993,"language":30518,"meta":25,"style":25},"dist = np.linalg.norm(tip - target)\n",[27,112995,112996],{"__ignoreMap":25},[30,112997,112998,113000,113002,113004,113006],{"class":32,"line":33},[30,112999,111734],{"class":321},[30,113001,367],{"class":317},[30,113003,111739],{"class":321},[30,113005,852],{"class":317},[30,113007,111744],{"class":321},[157,113009,113010,113011,113014,113015,113018],{},"计算 tip 到 target 的距离。",[27,113012,113013],{},"tip - target"," 得到一个三维向量，",[27,113016,113017],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[157,113020,14815],{},[20,113022,113025],{"className":113023,"code":113024,"language":5369,"meta":25},[5367],"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",[27,113026,113024],{"__ignoreMap":25},[20,113028,113030],{"className":30516,"code":113029,"language":30518,"meta":25,"style":25},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[27,113031,113032],{"__ignoreMap":25},[30,113033,113034,113036,113038,113040,113042],{"class":32,"line":33},[30,113035,112681],{"class":321},[30,113037,367],{"class":317},[30,113039,112175],{"class":40},[30,113041,6700],{"class":317},[30,113043,112180],{"class":321},[157,113045,113046,113047,113050,113051,113054],{},"计算动作惩罚。",[27,113048,113049],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[27,113052,113053],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[20,113056,113058],{"className":30516,"code":113057,"language":30518,"meta":25,"style":25},"return float(-dist - control_cost)\n",[27,113059,113060],{"__ignoreMap":25},[30,113061,113062,113064,113066,113068,113070,113072,113074],{"class":32,"line":33},[30,113063,17228],{"class":317},[30,113065,109935],{"class":40},[30,113067,322],{"class":321},[30,113069,852],{"class":317},[30,113071,111734],{"class":321},[30,113073,852],{"class":317},[30,113075,112197],{"class":321},[157,113077,113078],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[20,113080,113081],{"className":30516,"code":110941,"language":30518,"meta":25,"style":25},[27,113082,113083],{"__ignoreMap":25},[30,113084,113085,113087,113089],{"class":32,"line":33},[30,113086,110948],{"class":321},[30,113088,367],{"class":317},[30,113090,104899],{"class":40},[157,113092,113093],{},"累计奖励变量，记录整个运行过程的总分。",[20,113095,113097],{"className":30516,"code":113096,"language":30518,"meta":25,"style":25},"for step in range(500):\n",[27,113098,113099],{"__ignoreMap":25},[30,113100,113101,113103,113105,113107,113109,113111,113113],{"class":32,"line":33},[30,113102,3207],{"class":317},[30,113104,31754],{"class":321},[30,113106,26181],{"class":317},[30,113108,32581],{"class":40},[30,113110,322],{"class":321},[30,113112,65212],{"class":40},[30,113114,30924],{"class":321},[157,113116,113117],{},"运行 500 个控制步。",[20,113119,113120],{"className":30516,"code":104681,"language":30518,"meta":25,"style":25},[27,113121,113122],{"__ignoreMap":25},[30,113123,113124],{"class":32,"line":33},[30,113125,104681],{"class":321},[157,113127,113128,113129,101156,113131,113133],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[27,113130,103369],{},[27,113132,103372],{}," 是当前状态下的坐标。",[20,113135,113137],{"className":30516,"code":113136,"language":30518,"meta":25,"style":25},"error = target - tip\n",[27,113138,113139],{"__ignoreMap":25},[30,113140,113141,113143,113145,113147,113149],{"class":32,"line":33},[30,113142,112734],{"class":321},[30,113144,367],{"class":317},[30,113146,112306],{"class":321},[30,113148,852],{"class":317},[30,113150,112311],{"class":321},[157,113152,113153],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[20,113155,113157],{"className":30516,"code":113156,"language":30518,"meta":25,"style":25},"data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[27,113158,113159,113191],{"__ignoreMap":25},[30,113160,113161,113163,113165,113167,113169,113171,113173,113175,113177,113179,113181,113183,113185,113187,113189],{"class":32,"line":33},[30,113162,106009],{"class":321},[30,113164,511],{"class":40},[30,113166,4625],{"class":321},[30,113168,367],{"class":317},[30,113170,112328],{"class":321},[30,113172,105398],{"class":40},[30,113174,6700],{"class":317},[30,113176,112335],{"class":321},[30,113178,398],{"class":40},[30,113180,112340],{"class":321},[30,113182,852],{"class":317},[30,113184,102541],{"class":40},[30,113186,12617],{"class":321},[30,113188,102541],{"class":40},[30,113190,328],{"class":321},[30,113192,113193,113195,113197,113199,113201,113203,113205,113207,113209,113211,113213,113215,113217,113219,113221],{"class":32,"line":44},[30,113194,106009],{"class":321},[30,113196,537],{"class":40},[30,113198,4625],{"class":321},[30,113200,367],{"class":317},[30,113202,112328],{"class":321},[30,113204,105398],{"class":40},[30,113206,6700],{"class":317},[30,113208,112335],{"class":321},[30,113210,511],{"class":40},[30,113212,112340],{"class":321},[30,113214,852],{"class":317},[30,113216,102541],{"class":40},[30,113218,12617],{"class":321},[30,113220,102541],{"class":40},[30,113222,328],{"class":321},[157,113224,113225,113226,113229],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[27,113227,113228],{},"error -> ctrl -> step"," 的流程。",[20,113231,113232],{"className":30516,"code":104643,"language":30518,"meta":25,"style":25},[27,113233,113234],{"__ignoreMap":25},[30,113235,113236],{"class":32,"line":33},[30,113237,104643],{"class":321},[157,113239,113240],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[20,113242,113244],{"className":30516,"code":113243,"language":30518,"meta":25,"style":25},"obs = get_obs(model, data)\n",[27,113245,113246],{"__ignoreMap":25},[30,113247,113248,113250,113252],{"class":32,"line":33},[30,113249,110992],{"class":321},[30,113251,367],{"class":317},[30,113253,112429],{"class":321},[157,113255,113256,113257,113260],{},"读取最新观测。后面打印 ",[27,113258,113259],{},"obs.shape[0]","，用来确认观测维度是 10。",[15,113262,102454],{"id":102453},[157,113264,113265],{},"观测维度为:",[20,113267,113270],{"className":113268,"code":113269,"language":5369,"meta":25},[5367],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[27,113271,113269],{"__ignoreMap":25},[157,113273,113274],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[157,113276,113277],{},"程序每 100 步打印：",[20,113279,113282],{"className":113280,"code":113281,"language":5369,"meta":25},[5367],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[27,113283,113281],{"__ignoreMap":25},[157,113285,113286,113287,113289],{},"如果控制有效，你应该看到最终 ",[27,113288,103369],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[15,113291,102486],{"id":102485},[271,113293,113294,113297,113300,113306,113312,113319,113329],{},[150,113295,113296],{},"修改目标点位置。",[150,113298,113299],{},"重新运行，观察最终 tip 是否变化。",[150,113301,113302,113303,113305],{},"把 gravity 改成 ",[27,113304,102727],{},"，观察控制是否变差。",[150,113307,111319,113308,111323,113310,28523],{},[27,113309,102296],{},[27,113311,398],{},[150,113313,102549,113314,102552,113316,113318],{},[27,113315,110734],{},[27,113317,107445],{},"，观察机械臂是否更难移动。",[150,113320,102549,113321,82668,113323,102552,113325,113328],{},[27,113322,103372],{},[27,113324,104284],{},[27,113326,113327],{},"0.2 0 0.6","，观察 reward 和 final tip。",[150,113330,113331],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[15,113333,102591],{"id":102590},[287,113335,113337],{"id":113336},"site-not-found",[27,113338,113339],{},"site not found",[157,113341,113342,113343,101156,113346,28523],{},"检查 XML 中是否有 ",[27,113344,113345],{},"site name=\"tip\"",[27,113347,113348],{},"site name=\"target\"",[287,113350,113351],{"id":113351},"机械臂完全不动",[157,113353,102661],{},[271,113355,113356,113361,113364,113369],{},[150,113357,113358,113360],{},[27,113359,102296],{}," 是否为 2",[150,113362,113363],{},"actuator 是否引用正确 joint",[150,113365,113366,113368],{},[27,113367,101214],{}," 是否被赋值",[150,113370,113371,113372],{},"是否执行了 ",[27,113373,100823],{},[287,113375,113376],{"id":113376},"控制效果不好",[157,113378,113379],{},"正常。本章重点不是控制器最优，而是任务结构:",[20,113381,113384],{"className":113382,"code":113383,"language":5369,"meta":25},[5367],"obs → action → mj_step → reward → next_obs\n",[27,113385,113383],{"__ignoreMap":25},[287,113387,113389],{"id":113388},"tip-坐标不变化","tip 坐标不变化",[157,113391,102713],{},[271,113393,113394,113399,113407,113416],{},[150,113395,113396,113397,28523],{},"是否每步调用了 ",[27,113398,100823],{},[150,113400,113401,113402,101156,113404,28523],{},"是否写入了 ",[27,113403,106264],{},[27,113405,113406],{},"data.ctrl[1]",[150,113408,113409,113410,532,113413,28523],{},"actuator 是否正确引用 ",[27,113411,113412],{},"joint1",[27,113414,113415],{},"joint2",[150,113417,113418],{},"控制输入是否太小。",[287,113420,113421],{"id":113421},"目标点不会动",[157,113423,113424],{},"本章的 target 是固定 site：",[20,113426,113428],{"className":53205,"code":113427,"language":53207,"meta":25,"style":25},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[27,113429,113430],{"__ignoreMap":25},[30,113431,113432,113434,113436,113438,113440,113442,113444,113446,113449],{"class":32,"line":33},[30,113433,1230],{"class":321},[30,113435,103348],{"class":51438},[30,113437,15102],{"class":36},[30,113439,367],{"class":321},[30,113441,112097],{"class":74},[30,113443,101244],{"class":36},[30,113445,367],{"class":321},[30,113447,113448],{"class":74},"\"0.5 0 0.4\"",[30,113450,113451],{"class":321}," ...\u002F>\n",[157,113453,113454,113455,113457],{},"它直接挂在 ",[27,113456,101979],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[287,113459,113460],{"id":113460},"机械臂不像真实机械臂",[157,113462,113463],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[15,113465,102745],{"id":102744},[157,113467,113468],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[157,113470,113471],{},"核心公式：",[20,113473,113476],{"className":113474,"code":113475,"language":5369,"meta":25},[5367],"distance = ||tip - target||\nreward = -distance - action_cost\n",[27,113477,113475],{"__ignoreMap":25},[157,113479,113480],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[234,113482,113483],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":25,"searchDepth":44,"depth":44,"links":113485},[113486,113487,113488,113493,113497,113498,113499,113507],{"id":100784,"depth":44,"text":100785},{"id":100907,"depth":44,"text":100908},{"id":101182,"depth":44,"text":101183,"children":113489},[113490,113491,113492],{"id":111689,"depth":52,"text":111690},{"id":111765,"depth":52,"text":111765},{"id":111795,"depth":52,"text":111796},{"id":101390,"depth":44,"text":101391,"children":113494},[113495,113496],{"id":101710,"depth":52,"text":101710},{"id":101846,"depth":52,"text":101846},{"id":102453,"depth":44,"text":102454},{"id":102485,"depth":44,"text":102486},{"id":102590,"depth":44,"text":102591,"children":113500},[113501,113502,113503,113504,113505,113506],{"id":113336,"depth":52,"text":113339},{"id":113351,"depth":52,"text":113351},{"id":113376,"depth":52,"text":113376},{"id":113388,"depth":52,"text":113389},{"id":113421,"depth":52,"text":113421},{"id":113460,"depth":52,"text":113460},{"id":102744,"depth":44,"text":102745},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111493,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113514,"title":113515,"body":113516,"description":25,"extension":243,"meta":116978,"navigation":245,"path":116979,"seo":116980,"stem":116981,"__hash__":116982},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113517,"toc":116949},[113518,113521,113523,113526,113529,113554,113557,113563,113566,113572,113574,113576,113600,113602,113620,113622,113665,113667,113694,113696,113699,113751,113754,113760,113769,113772,113810,113813,113852,113855,113863,113870,113873,113879,113881,113935,113942,113987,113990,113994,114010,114020,114022,115283,115285,115297,115299,115310,115312,115315,115336,115339,115342,115375,115381,115384,115417,115420,115423,115464,115469,115483,115486,115499,115504,115527,115529,115544,115554,115569,115576,115596,115611,115629,115632,115649,115657,115673,115679,115711,115724,115756,115766,115801,115815,115861,115875,115917,115928,115941,115947,115980,115983,116010,116020,116060,116070,116087,116094,116112,116115,116156,116169,116184,116187,116210,116213,116225,116228,116247,116252,116273,116276,116291,116294,116328,116340,116355,116358,116383,116386,116405,116408,116440,116443,116467,116473,116503,116510,116523,116526,116528,116530,116536,116539,116542,116554,116557,116559,116613,116615,116619,116625,116634,116637,116644,116646,116669,116672,116676,116678,116696,116702,116704,116737,116740,116746,116750,116753,116773,116778,116782,116789,116809,116814,116818,116821,116841,116844,116930,116934,116937,116943,116946],[10,113519,113515],{"id":113520},"_8gymnasium-风格强化学习接口基础",[15,113522,100785],{"id":100784},[157,113524,113525],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[157,113527,113528],{},"你将实现:",[20,113530,113532],{"className":30516,"code":113531,"language":30518,"meta":25,"style":25},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[27,113533,113534,113544],{"__ignoreMap":25},[30,113535,113536,113539,113541],{"class":32,"line":33},[30,113537,113538],{"class":321},"obs, info ",[30,113540,367],{"class":317},[30,113542,113543],{"class":321}," env.reset()\n",[30,113545,113546,113549,113551],{"class":32,"line":44},[30,113547,113548],{"class":321},"obs, reward, terminated, truncated, info ",[30,113550,367],{"class":317},[30,113552,113553],{"class":321}," env.step(action)\n",[157,113555,113556],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[157,113558,113559,113560,113562],{},"前面章节的代码都是“脚本式”的：在 ",[27,113561,102433],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[157,113564,113565],{},"可以先记住 Gymnasium 环境的核心交互：",[20,113567,113570],{"className":113568,"code":113569,"language":5369,"meta":25},[5367],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[27,113571,113569],{"__ignoreMap":25},[15,113573,100908],{"id":100907},[157,113575,100911],{},[20,113577,113578],{"className":22,"code":104526,"language":24,"meta":25,"style":25},[27,113579,113580],{"__ignoreMap":25},[30,113581,113582,113584,113586,113588,113590,113592,113594,113596,113598],{"class":32,"line":33},[30,113583,24757],{"class":36},[30,113585,26453],{"class":74},[30,113587,24014],{"class":74},[30,113589,26538],{"class":40},[30,113591,104541],{"class":74},[30,113593,100936],{"class":74},[30,113595,102639],{"class":74},[30,113597,100952],{"class":74},[30,113599,104550],{"class":74},[157,113601,102957],{},[20,113603,113605],{"className":22,"code":113604,"language":24,"meta":25,"style":25},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[27,113606,113607],{"__ignoreMap":25},[30,113608,113609,113611,113613,113615,113617],{"class":32,"line":33},[30,113610,24011],{"class":36},[30,113612,24014],{"class":74},[30,113614,101068],{"class":74},[30,113616,107849],{"class":74},[30,113618,113619],{"class":74}," gymnasium\n",[157,113621,102974],{},[20,113623,113625],{"className":22,"code":113624,"language":24,"meta":25,"style":25},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[27,113626,113627,113644,113653],{"__ignoreMap":25},[30,113628,113629,113631,113633,113635,113638,113640,113642],{"class":32,"line":33},[30,113630,30468],{"class":36},[30,113632,29314],{"class":74},[30,113634,25288],{"class":40},[30,113636,113637],{"class":74}," mujoco-gym-api",[30,113639,101113],{"class":74},[30,113641,101116],{"class":40},[30,113643,101119],{"class":40},[30,113645,113646,113648,113650],{"class":32,"line":44},[30,113647,30468],{"class":36},[30,113649,101126],{"class":74},[30,113651,113652],{"class":74}," mujoco-gym-api\n",[30,113654,113655,113657,113659,113661,113663],{"class":32,"line":52},[30,113656,24011],{"class":36},[30,113658,24014],{"class":74},[30,113660,101068],{"class":74},[30,113662,107849],{"class":74},[30,113664,113619],{"class":74},[157,113666,101142],{},[271,113668,113669,113679,113682,113688],{},[150,113670,113671,113672,113675,113676,28523],{},"本章使用 ",[27,113673,113674],{},"gymnasium","，不是旧版 ",[27,113677,113678],{},"gym",[150,113680,113681],{},"Gymnasium API 与旧 Gym API 有差异。",[150,113683,113684,113685,28523],{},"旧 Gym 常见返回值是 4 个: ",[27,113686,113687],{},"obs, reward, done, info",[150,113689,113690,113691,28523],{},"Gymnasium 返回值是 5 个: ",[27,113692,113693],{},"obs, reward, terminated, truncated, info",[15,113695,101183],{"id":101182},[157,113697,113698],{},"强化学习环境接口包含:",[457,113700,113701,113710],{},[460,113702,113703],{},[463,113704,113705,113708],{},[466,113706,113707],{"align":23918},"方法",[466,113709,102834],{"align":23918},[504,113711,113712,113722,113732,113742],{},[463,113713,113714,113719],{},[509,113715,113716],{"align":23918},[27,113717,113718],{},"reset()",[509,113720,113721],{"align":23918},"重置环境",[463,113723,113724,113729],{},[509,113725,113726],{"align":23918},[27,113727,113728],{},"step(action)",[509,113730,113731],{"align":23918},"执行动作",[463,113733,113734,113739],{},[509,113735,113736],{"align":23918},[27,113737,113738],{},"observation_space",[509,113740,113741],{"align":23918},"观测空间",[463,113743,113744,113749],{},[509,113745,113746],{"align":23918},[27,113747,113748],{},"action_space",[509,113750,23836],{"align":23918},[157,113752,113753],{},"一个最小环境需要完成:",[20,113755,113758],{"className":113756,"code":113757,"language":5369,"meta":25},[5367],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[27,113759,113757],{"__ignoreMap":25},[287,113761,113763,101156,113766,104776],{"id":113762},"terminated-和-truncated-的区别",[27,113764,113765],{},"terminated",[27,113767,113768],{},"truncated",[157,113770,113771],{},"Gymnasium 把“结束”拆成两个概念：",[457,113773,113774,113784],{},[460,113775,113776],{},[463,113777,113778,113780,113782],{},[466,113779,104712],{"align":23918},[466,113781,100838],{"align":23918},[466,113783,21369],{"align":23918},[504,113785,113786,113798],{},[463,113787,113788,113792,113795],{},[509,113789,113790],{"align":23918},[27,113791,113765],{},[509,113793,113794],{"align":23918},"任务自然结束",[509,113796,113797],{"align":23918},"机械臂到达目标、机器人摔倒",[463,113799,113800,113804,113807],{},[509,113801,113802],{"align":23918},[27,113803,113768],{},[509,113805,113806],{"align":23918},"因外部限制截断",[509,113808,113809],{"align":23918},"达到最大步数、时间限制",[157,113811,113812],{},"本章中：",[20,113814,113816],{"className":30516,"code":113815,"language":30518,"meta":25,"style":25},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[27,113817,113818,113833],{"__ignoreMap":25},[30,113819,113820,113823,113825,113828,113830],{"class":32,"line":33},[30,113821,113822],{"class":321},"terminated ",[30,113824,367],{"class":317},[30,113826,113827],{"class":321}," dist ",[30,113829,1230],{"class":317},[30,113831,113832],{"class":40}," 0.05\n",[30,113834,113835,113838,113840,113842,113845,113847,113849],{"class":32,"line":44},[30,113836,113837],{"class":321},"truncated ",[30,113839,367],{"class":317},[30,113841,39011],{"class":40},[30,113843,113844],{"class":321},".steps ",[30,113846,1893],{"class":317},[30,113848,39011],{"class":40},[30,113850,113851],{"class":321},".max_steps\n",[157,113853,113854],{},"也就是：",[271,113856,113857,113860],{},[150,113858,113859],{},"末端距离目标小于 0.05，任务成功结束。",[150,113861,113862],{},"步数超过上限，episode 被截断。",[287,113864,113866,101156,113868],{"id":113865},"observation_space-和-action_space",[27,113867,113738],{},[27,113869,113748],{},[157,113871,113872],{},"这两个对象告诉算法：",[20,113874,113877],{"className":113875,"code":113876,"language":5369,"meta":25},[5367],"观测长什么样\n动作允许多大\n",[27,113878,113876],{"__ignoreMap":25},[157,113880,14815],{},[20,113882,113884],{"className":30516,"code":113883,"language":30518,"meta":25,"style":25},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[27,113885,113886],{"__ignoreMap":25},[30,113887,113888,113890,113893,113895,113898,113901,113904,113906,113908,113911,113913,113915,113917,113919,113921,113923,113925,113928,113930,113932],{"class":32,"line":33},[30,113889,30961],{"class":40},[30,113891,113892],{"class":321},".action_space ",[30,113894,367],{"class":317},[30,113896,113897],{"class":321}," spaces.Box(",[30,113899,113900],{"class":5398},"low",[30,113902,113903],{"class":317},"=-",[30,113905,102541],{"class":40},[30,113907,12617],{"class":321},[30,113909,113910],{"class":5398},"high",[30,113912,367],{"class":317},[30,113914,102541],{"class":40},[30,113916,12617],{"class":321},[30,113918,96101],{"class":5398},[30,113920,367],{"class":317},[30,113922,322],{"class":321},[30,113924,398],{"class":40},[30,113926,113927],{"class":321},",), ",[30,113929,93638],{"class":5398},[30,113931,367],{"class":317},[30,113933,113934],{"class":321},"np.float32)\n",[157,113936,113937,113938,113941],{},"表示动作是 2 维数组，每个值都在 ",[27,113939,113940],{},"[-1, 1]"," 范围内。",[20,113943,113945],{"className":30516,"code":113944,"language":30518,"meta":25,"style":25},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[27,113946,113947],{"__ignoreMap":25},[30,113948,113949,113951,113954,113956,113958,113960,113962,113965,113967,113969,113971,113973,113975,113977,113979,113981,113983,113985],{"class":32,"line":33},[30,113950,30961],{"class":40},[30,113952,113953],{"class":321},".observation_space ",[30,113955,367],{"class":317},[30,113957,113897],{"class":321},[30,113959,113900],{"class":5398},[30,113961,113903],{"class":317},[30,113963,113964],{"class":321},"np.inf, ",[30,113966,113910],{"class":5398},[30,113968,367],{"class":317},[30,113970,113964],{"class":321},[30,113972,96101],{"class":5398},[30,113974,367],{"class":317},[30,113976,322],{"class":321},[30,113978,766],{"class":40},[30,113980,113927],{"class":321},[30,113982,93638],{"class":5398},[30,113984,367],{"class":317},[30,113986,113934],{"class":321},[157,113988,113989],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[287,113991,113993],{"id":113992},"frame_skip-是什么","frame_skip 是什么",[20,113995,113997],{"className":30516,"code":113996,"language":30518,"meta":25,"style":25},"self.frame_skip = 5\n",[27,113998,113999],{"__ignoreMap":25},[30,114000,114001,114003,114006,114008],{"class":32,"line":33},[30,114002,30961],{"class":40},[30,114004,114005],{"class":321},".frame_skip ",[30,114007,367],{"class":317},[30,114009,54565],{"class":40},[157,114011,114012,114013,114016,114017,114019],{},"表示外部调用一次 ",[27,114014,114015],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[27,114018,101353],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[15,114021,101391],{"id":101390},[20,114023,114025],{"className":30516,"code":114024,"language":30518,"meta":25,"style":25},"import gymnasium as gym\nimport mujoco\nimport numpy as np\nfrom gymnasium import spaces\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"gym_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\nclass ReacherEnv(gym.Env):\n    metadata = {\"render_modes\": []}\n\n    def __init__(self) -> None:\n        super().__init__()\n        self.model = mujoco.MjModel.from_xml_string(XML)\n        self.data = mujoco.MjData(self.model)\n\n        self.tip_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\n        self.target_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"target\")\n        if self.tip_site_id \u003C 0 or self.target_site_id \u003C 0:\n            raise RuntimeError(\"required sites not found\")\n\n        self.frame_skip = 5\n        self.max_steps = 200\n        self.steps = 0\n\n        self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n        self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n\n    def _get_obs(self) -> np.ndarray:\n        tip = self.data.site_xpos[self.tip_site_id].copy()\n        target = self.data.site_xpos[self.target_site_id].copy()\n        obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\n        return obs.astype(np.float32)\n\n    def _get_reward(self) -> float:\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = np.linalg.norm(tip - target)\n        control_cost = 0.01 * np.sum(np.square(self.data.ctrl))\n        return float(-dist - control_cost)\n\n    def reset(self, *, seed: int | None = None, options: dict | None = None):\n        super().reset(seed=seed)\n        mujoco.mj_resetData(self.model, self.data)\n\n        self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n        self.data.qvel[:] = 0.0\n        mujoco.mj_forward(self.model, self.data)\n\n        self.steps = 0\n        return self._get_obs(), {}\n\n    def step(self, action):\n        action = np.asarray(action, dtype=np.float32)\n        action = np.clip(action, self.action_space.low, self.action_space.high)\n\n        self.data.ctrl[:] = action\n        for _ in range(self.frame_skip):\n            mujoco.mj_step(self.model, self.data)\n\n        self.steps += 1\n\n        obs = self._get_obs()\n        reward = self._get_reward()\n\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = float(np.linalg.norm(tip - target))\n\n        terminated = dist \u003C 0.05\n        truncated = self.steps >= self.max_steps\n        info = {\"distance\": dist}\n        return obs, reward, terminated, truncated, info\n\n\ndef main() -> None:\n    env = ReacherEnv()\n    obs, info = env.reset(seed=0)\n    print(\"initial obs shape:\", obs.shape)\n    print(\"initial info:\", info)\n\n    total_reward = 0.0\n    for step in range(20):\n        action = env.action_space.sample()\n        obs, reward, terminated, truncated, info = env.step(action)\n        total_reward += reward\n        print(\"step:\", step, \"reward:\", round(reward, 3), \"distance:\", round(info[\"distance\"], 3))\n        if terminated or truncated:\n            break\n\n    print(\"total_reward:\", round(total_reward, 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[27,114026,114027,114039,114045,114055,114066,114070,114074,114082,114087,114091,114095,114099,114103,114107,114111,114115,114120,114124,114128,114132,114137,114141,114145,114149,114153,114157,114161,114165,114169,114173,114177,114181,114185,114189,114207,114222,114226,114239,114249,114264,114281,114285,114306,114325,114350,114364,114368,114378,114390,114400,114404,114446,114484,114488,114498,114514,114529,114548,114555,114559,114572,114587,114602,114615,114634,114650,114654,114695,114710,114725,114729,114768,114779,114792,114796,114806,114815,114819,114829,114844,114862,114866,114877,114894,114907,114911,114921,114925,114936,114947,114951,114965,114979,114995,114999,115012,115029,115044,115051,115055,115059,115071,115081,115099,115111,115123,115127,115135,115151,115160,115169,115177,115219,115232,115237,115241,115259,115263,115267,115279],{"__ignoreMap":25},[30,114028,114029,114031,114034,114036],{"class":32,"line":33},[30,114030,30530],{"class":317},[30,114032,114033],{"class":321}," gymnasium ",[30,114035,31521],{"class":317},[30,114037,114038],{"class":321}," gym\n",[30,114040,114041,114043],{"class":32,"line":44},[30,114042,30530],{"class":317},[30,114044,101439],{"class":321},[30,114046,114047,114049,114051,114053],{"class":32,"line":52},[30,114048,30530],{"class":317},[30,114050,31518],{"class":321},[30,114052,31521],{"class":317},[30,114054,31524],{"class":321},[30,114056,114057,114059,114061,114063],{"class":32,"line":60},[30,114058,30875],{"class":317},[30,114060,114033],{"class":321},[30,114062,30530],{"class":317},[30,114064,114065],{"class":321}," spaces\n",[30,114067,114068],{"class":32,"line":68},[30,114069,2582],{"emptyLinePlaceholder":245},[30,114071,114072],{"class":32,"line":80},[30,114073,2582],{"emptyLinePlaceholder":245},[30,114075,114076,114078,114080],{"class":32,"line":88},[30,114077,101452],{"class":40},[30,114079,13746],{"class":317},[30,114081,101457],{"class":74},[30,114083,114084],{"class":32,"line":96},[30,114085,114086],{"class":74},"\u003Cmujoco model=\"gym_reacher\">\n",[30,114088,114089],{"class":32,"line":104},[30,114090,111876],{"class":74},[30,114092,114093],{"class":32,"line":112},[30,114094,2582],{"emptyLinePlaceholder":245},[30,114096,114097],{"class":32,"line":123},[30,114098,101476],{"class":74},[30,114100,114101],{"class":32,"line":131},[30,114102,111894],{"class":74},[30,114104,114105],{"class":32,"line":142},[30,114106,2582],{"emptyLinePlaceholder":245},[30,114108,114109],{"class":32,"line":1811},[30,114110,111903],{"class":74},[30,114112,114113],{"class":32,"line":1825},[30,114114,111908],{"class":74},[30,114116,114117],{"class":32,"line":1830},[30,114118,114119],{"class":74},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[30,114121,114122],{"class":32,"line":1836},[30,114123,2582],{"emptyLinePlaceholder":245},[30,114125,114126],{"class":32,"line":1857},[30,114127,111922],{"class":74},[30,114129,114130],{"class":32,"line":1862},[30,114131,111927],{"class":74},[30,114133,114134],{"class":32,"line":1876},[30,114135,114136],{"class":74},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[30,114138,114139],{"class":32,"line":1881},[30,114140,111937],{"class":74},[30,114142,114143],{"class":32,"line":1910},[30,114144,106576],{"class":74},[30,114146,114147],{"class":32,"line":1915},[30,114148,101505],{"class":74},[30,114150,114151],{"class":32,"line":1932},[30,114152,101510],{"class":74},[30,114154,114155],{"class":32,"line":1937},[30,114156,2582],{"emptyLinePlaceholder":245},[30,114158,114159],{"class":32,"line":1942},[30,114160,106593],{"class":74},[30,114162,114163],{"class":32,"line":1947},[30,114164,111962],{"class":74},[30,114166,114167],{"class":32,"line":1961},[30,114168,111967],{"class":74},[30,114170,114171],{"class":32,"line":1966},[30,114172,106603],{"class":74},[30,114174,114175],{"class":32,"line":2759},[30,114176,101515],{"class":74},[30,114178,114179],{"class":32,"line":2773},[30,114180,95836],{"class":74},[30,114182,114183],{"class":32,"line":2781},[30,114184,2582],{"emptyLinePlaceholder":245},[30,114186,114187],{"class":32,"line":2786},[30,114188,2582],{"emptyLinePlaceholder":245},[30,114190,114191,114193,114196,114198,114200,114202,114205],{"class":32,"line":2792},[30,114192,14876],{"class":317},[30,114194,114195],{"class":36}," ReacherEnv",[30,114197,322],{"class":321},[30,114199,113678],{"class":36},[30,114201,878],{"class":321},[30,114203,114204],{"class":36},"Env",[30,114206,30924],{"class":321},[30,114208,114209,114212,114214,114216,114219],{"class":32,"line":2798},[30,114210,114211],{"class":321},"    metadata ",[30,114213,367],{"class":317},[30,114215,4630],{"class":321},[30,114217,114218],{"class":74},"\"render_modes\"",[30,114220,114221],{"class":321},": []}\n",[30,114223,114224],{"class":32,"line":2803},[30,114225,2582],{"emptyLinePlaceholder":245},[30,114227,114228,114230,114232,114235,114237],{"class":32,"line":8130},[30,114229,30939],{"class":317},[30,114231,30942],{"class":40},[30,114233,114234],{"class":321},"(self) -> ",[30,114236,95824],{"class":40},[30,114238,3921],{"class":321},[30,114240,114241,114243,114245,114247],{"class":32,"line":8154},[30,114242,30955],{"class":40},[30,114244,17443],{"class":321},[30,114246,30967],{"class":40},[30,114248,2158],{"class":321},[30,114250,114251,114253,114256,114258,114260,114262],{"class":32,"line":8159},[30,114252,30983],{"class":40},[30,114254,114255],{"class":321},".model ",[30,114257,367],{"class":317},[30,114259,101550],{"class":321},[30,114261,101452],{"class":40},[30,114263,328],{"class":321},[30,114265,114266,114268,114271,114273,114276,114278],{"class":32,"line":8165},[30,114267,30983],{"class":40},[30,114269,114270],{"class":321},".data ",[30,114272,367],{"class":317},[30,114274,114275],{"class":321}," mujoco.MjData(",[30,114277,30961],{"class":40},[30,114279,114280],{"class":321},".model)\n",[30,114282,114283],{"class":32,"line":8192},[30,114284,2582],{"emptyLinePlaceholder":245},[30,114286,114287,114289,114292,114294,114297,114299,114302,114304],{"class":32,"line":8197},[30,114288,30983],{"class":40},[30,114290,114291],{"class":321},".tip_site_id ",[30,114293,367],{"class":317},[30,114295,114296],{"class":321}," mujoco.mj_name2id(",[30,114298,30961],{"class":40},[30,114300,114301],{"class":321},".model, mujoco.mjtObj.mjOBJ_SITE, ",[30,114303,111674],{"class":74},[30,114305,328],{"class":321},[30,114307,114308,114310,114313,114315,114317,114319,114321,114323],{"class":32,"line":8203},[30,114309,30983],{"class":40},[30,114311,114312],{"class":321},".target_site_id ",[30,114314,367],{"class":317},[30,114316,114296],{"class":321},[30,114318,30961],{"class":40},[30,114320,114301],{"class":321},[30,114322,112097],{"class":74},[30,114324,328],{"class":321},[30,114326,114327,114329,114331,114333,114335,114337,114340,114342,114344,114346,114348],{"class":32,"line":8215},[30,114328,2679],{"class":317},[30,114330,39011],{"class":40},[30,114332,114291],{"class":321},[30,114334,1230],{"class":317},[30,114336,4275],{"class":40},[30,114338,114339],{"class":317}," or",[30,114341,39011],{"class":40},[30,114343,114312],{"class":321},[30,114345,1230],{"class":317},[30,114347,4275],{"class":40},[30,114349,3921],{"class":321},[30,114351,114352,114355,114357,114359,114362],{"class":32,"line":8227},[30,114353,114354],{"class":317},"            raise",[30,114356,103573],{"class":40},[30,114358,322],{"class":321},[30,114360,114361],{"class":74},"\"required sites not found\"",[30,114363,328],{"class":321},[30,114365,114366],{"class":32,"line":8239},[30,114367,2582],{"emptyLinePlaceholder":245},[30,114369,114370,114372,114374,114376],{"class":32,"line":9898},[30,114371,30983],{"class":40},[30,114373,114005],{"class":321},[30,114375,367],{"class":317},[30,114377,54565],{"class":40},[30,114379,114380,114382,114385,114387],{"class":32,"line":9923},[30,114381,30983],{"class":40},[30,114383,114384],{"class":321},".max_steps ",[30,114386,367],{"class":317},[30,114388,114389],{"class":40}," 200\n",[30,114391,114392,114394,114396,114398],{"class":32,"line":9946},[30,114393,30983],{"class":40},[30,114395,113844],{"class":321},[30,114397,367],{"class":317},[30,114399,47471],{"class":40},[30,114401,114402],{"class":32,"line":9970},[30,114403,2582],{"emptyLinePlaceholder":245},[30,114405,114406,114408,114410,114412,114414,114416,114418,114420,114422,114424,114426,114428,114430,114432,114434,114436,114438,114440,114442,114444],{"class":32,"line":9975},[30,114407,30983],{"class":40},[30,114409,113892],{"class":321},[30,114411,367],{"class":317},[30,114413,113897],{"class":321},[30,114415,113900],{"class":5398},[30,114417,113903],{"class":317},[30,114419,102541],{"class":40},[30,114421,12617],{"class":321},[30,114423,113910],{"class":5398},[30,114425,367],{"class":317},[30,114427,102541],{"class":40},[30,114429,12617],{"class":321},[30,114431,96101],{"class":5398},[30,114433,367],{"class":317},[30,114435,322],{"class":321},[30,114437,398],{"class":40},[30,114439,113927],{"class":321},[30,114441,93638],{"class":5398},[30,114443,367],{"class":317},[30,114445,113934],{"class":321},[30,114447,114448,114450,114452,114454,114456,114458,114460,114462,114464,114466,114468,114470,114472,114474,114476,114478,114480,114482],{"class":32,"line":9980},[30,114449,30983],{"class":40},[30,114451,113953],{"class":321},[30,114453,367],{"class":317},[30,114455,113897],{"class":321},[30,114457,113900],{"class":5398},[30,114459,113903],{"class":317},[30,114461,113964],{"class":321},[30,114463,113910],{"class":5398},[30,114465,367],{"class":317},[30,114467,113964],{"class":321},[30,114469,96101],{"class":5398},[30,114471,367],{"class":317},[30,114473,322],{"class":321},[30,114475,766],{"class":40},[30,114477,113927],{"class":321},[30,114479,93638],{"class":5398},[30,114481,367],{"class":317},[30,114483,113934],{"class":321},[30,114485,114486],{"class":32,"line":9985},[30,114487,2582],{"emptyLinePlaceholder":245},[30,114489,114490,114492,114495],{"class":32,"line":9994},[30,114491,30939],{"class":317},[30,114493,114494],{"class":36}," _get_obs",[30,114496,114497],{"class":321},"(self) -> np.ndarray:\n",[30,114499,114500,114502,114504,114506,114509,114511],{"class":32,"line":9999},[30,114501,112275],{"class":321},[30,114503,367],{"class":317},[30,114505,39011],{"class":40},[30,114507,114508],{"class":321},".data.site_xpos[",[30,114510,30961],{"class":40},[30,114512,114513],{"class":321},".tip_site_id].copy()\n",[30,114515,114516,114518,114520,114522,114524,114526],{"class":32,"line":10005},[30,114517,112288],{"class":321},[30,114519,367],{"class":317},[30,114521,39011],{"class":40},[30,114523,114508],{"class":321},[30,114525,30961],{"class":40},[30,114527,114528],{"class":321},".target_site_id].copy()\n",[30,114530,114531,114533,114535,114538,114540,114543,114545],{"class":32,"line":10026},[30,114532,110320],{"class":321},[30,114534,367],{"class":317},[30,114536,114537],{"class":321}," np.concatenate([",[30,114539,30961],{"class":40},[30,114541,114542],{"class":321},".data.qpos.copy(), ",[30,114544,30961],{"class":40},[30,114546,114547],{"class":321},".data.qvel.copy(), tip, target])\n",[30,114549,114550,114552],{"class":32,"line":10032},[30,114551,14934],{"class":317},[30,114553,114554],{"class":321}," obs.astype(np.float32)\n",[30,114556,114557],{"class":32,"line":10046},[30,114558,2582],{"emptyLinePlaceholder":245},[30,114560,114561,114563,114566,114568,114570],{"class":32,"line":10052},[30,114562,30939],{"class":317},[30,114564,114565],{"class":36}," _get_reward",[30,114567,114234],{"class":321},[30,114569,361],{"class":40},[30,114571,3921],{"class":321},[30,114573,114574,114576,114578,114580,114582,114584],{"class":32,"line":10079},[30,114575,112275],{"class":321},[30,114577,367],{"class":317},[30,114579,39011],{"class":40},[30,114581,114508],{"class":321},[30,114583,30961],{"class":40},[30,114585,114586],{"class":321},".tip_site_id]\n",[30,114588,114589,114591,114593,114595,114597,114599],{"class":32,"line":10088},[30,114590,112288],{"class":321},[30,114592,367],{"class":317},[30,114594,39011],{"class":40},[30,114596,114508],{"class":321},[30,114598,30961],{"class":40},[30,114600,114601],{"class":321},".target_site_id]\n",[30,114603,114604,114607,114609,114611,114613],{"class":32,"line":10094},[30,114605,114606],{"class":321},"        dist ",[30,114608,367],{"class":317},[30,114610,111739],{"class":321},[30,114612,852],{"class":317},[30,114614,111744],{"class":321},[30,114616,114617,114620,114622,114624,114626,114629,114631],{"class":32,"line":10102},[30,114618,114619],{"class":321},"        control_cost ",[30,114621,367],{"class":317},[30,114623,112175],{"class":40},[30,114625,6700],{"class":317},[30,114627,114628],{"class":321}," np.sum(np.square(",[30,114630,30961],{"class":40},[30,114632,114633],{"class":321},".data.ctrl))\n",[30,114635,114636,114638,114640,114642,114644,114646,114648],{"class":32,"line":10107},[30,114637,14934],{"class":317},[30,114639,109935],{"class":40},[30,114641,322],{"class":321},[30,114643,852],{"class":317},[30,114645,111734],{"class":321},[30,114647,852],{"class":317},[30,114649,112197],{"class":321},[30,114651,114652],{"class":32,"line":16786},[30,114653,2582],{"emptyLinePlaceholder":245},[30,114655,114656,114658,114661,114664,114666,114669,114671,114673,114675,114677,114679,114682,114685,114687,114689,114691,114693],{"class":32,"line":16792},[30,114657,30939],{"class":317},[30,114659,114660],{"class":36}," reset",[30,114662,114663],{"class":321},"(self, ",[30,114665,775],{"class":317},[30,114667,114668],{"class":321},", seed: ",[30,114670,325],{"class":40},[30,114672,25282],{"class":317},[30,114674,39071],{"class":40},[30,114676,13746],{"class":317},[30,114678,39071],{"class":40},[30,114680,114681],{"class":321},", options: ",[30,114683,114684],{"class":40},"dict",[30,114686,25282],{"class":317},[30,114688,39071],{"class":40},[30,114690,13746],{"class":317},[30,114692,39071],{"class":40},[30,114694,30924],{"class":321},[30,114696,114697,114699,114702,114705,114707],{"class":32,"line":16815},[30,114698,30955],{"class":40},[30,114700,114701],{"class":321},"().reset(",[30,114703,114704],{"class":5398},"seed",[30,114706,367],{"class":317},[30,114708,114709],{"class":321},"seed)\n",[30,114711,114712,114715,114717,114720,114722],{"class":32,"line":16821},[30,114713,114714],{"class":321},"        mujoco.mj_resetData(",[30,114716,30961],{"class":40},[30,114718,114719],{"class":321},".model, ",[30,114721,30961],{"class":40},[30,114723,114724],{"class":321},".data)\n",[30,114726,114727],{"class":32,"line":16844},[30,114728,2582],{"emptyLinePlaceholder":245},[30,114730,114731,114733,114736,114738,114740,114743,114745,114747,114749,114751,114753,114755,114757,114759,114761,114763,114765],{"class":32,"line":16858},[30,114732,30983],{"class":40},[30,114734,114735],{"class":321},".data.qpos[:] ",[30,114737,367],{"class":317},[30,114739,39011],{"class":40},[30,114741,114742],{"class":321},".np_random.uniform(",[30,114744,113900],{"class":5398},[30,114746,113903],{"class":317},[30,114748,86348],{"class":40},[30,114750,12617],{"class":321},[30,114752,113910],{"class":5398},[30,114754,367],{"class":317},[30,114756,86348],{"class":40},[30,114758,12617],{"class":321},[30,114760,31634],{"class":5398},[30,114762,367],{"class":317},[30,114764,30961],{"class":40},[30,114766,114767],{"class":321},".model.nq)\n",[30,114769,114770,114772,114775,114777],{"class":32,"line":16878},[30,114771,30983],{"class":40},[30,114773,114774],{"class":321},".data.qvel[:] ",[30,114776,367],{"class":317},[30,114778,104899],{"class":40},[30,114780,114781,114784,114786,114788,114790],{"class":32,"line":16884},[30,114782,114783],{"class":321},"        mujoco.mj_forward(",[30,114785,30961],{"class":40},[30,114787,114719],{"class":321},[30,114789,30961],{"class":40},[30,114791,114724],{"class":321},[30,114793,114794],{"class":32,"line":16895},[30,114795,2582],{"emptyLinePlaceholder":245},[30,114797,114798,114800,114802,114804],{"class":32,"line":16918},[30,114799,30983],{"class":40},[30,114801,113844],{"class":321},[30,114803,367],{"class":317},[30,114805,47471],{"class":40},[30,114807,114808,114810,114812],{"class":32,"line":16940},[30,114809,14934],{"class":317},[30,114811,39011],{"class":40},[30,114813,114814],{"class":321},"._get_obs(), {}\n",[30,114816,114817],{"class":32,"line":16945},[30,114818,2582],{"emptyLinePlaceholder":245},[30,114820,114821,114823,114826],{"class":32,"line":16951},[30,114822,30939],{"class":317},[30,114824,114825],{"class":36}," step",[30,114827,114828],{"class":321},"(self, action):\n",[30,114830,114831,114833,114835,114838,114840,114842],{"class":32,"line":16965},[30,114832,110360],{"class":321},[30,114834,367],{"class":317},[30,114836,114837],{"class":321}," np.asarray(action, ",[30,114839,93638],{"class":5398},[30,114841,367],{"class":317},[30,114843,113934],{"class":321},[30,114845,114846,114848,114850,114852,114854,114857,114859],{"class":32,"line":16978},[30,114847,110360],{"class":321},[30,114849,367],{"class":317},[30,114851,107585],{"class":321},[30,114853,30961],{"class":40},[30,114855,114856],{"class":321},".action_space.low, ",[30,114858,30961],{"class":40},[30,114860,114861],{"class":321},".action_space.high)\n",[30,114863,114864],{"class":32,"line":16983},[30,114865,2582],{"emptyLinePlaceholder":245},[30,114867,114868,114870,114873,114875],{"class":32,"line":16997},[30,114869,30983],{"class":40},[30,114871,114872],{"class":321},".data.ctrl[:] ",[30,114874,367],{"class":317},[30,114876,107608],{"class":321},[30,114878,114879,114881,114883,114885,114887,114889,114891],{"class":32,"line":17002},[30,114880,3585],{"class":317},[30,114882,101639],{"class":321},[30,114884,26181],{"class":317},[30,114886,32581],{"class":40},[30,114888,322],{"class":321},[30,114890,30961],{"class":40},[30,114892,114893],{"class":321},".frame_skip):\n",[30,114895,114896,114899,114901,114903,114905],{"class":32,"line":17008},[30,114897,114898],{"class":321},"            mujoco.mj_step(",[30,114900,30961],{"class":40},[30,114902,114719],{"class":321},[30,114904,30961],{"class":40},[30,114906,114724],{"class":321},[30,114908,114909],{"class":32,"line":17013},[30,114910,2582],{"emptyLinePlaceholder":245},[30,114912,114913,114915,114917,114919],{"class":32,"line":17027},[30,114914,30983],{"class":40},[30,114916,113844],{"class":321},[30,114918,9659],{"class":317},[30,114920,55837],{"class":40},[30,114922,114923],{"class":32,"line":17032},[30,114924,2582],{"emptyLinePlaceholder":245},[30,114926,114927,114929,114931,114933],{"class":32,"line":17037},[30,114928,110320],{"class":321},[30,114930,367],{"class":317},[30,114932,39011],{"class":40},[30,114934,114935],{"class":321},"._get_obs()\n",[30,114937,114938,114940,114942,114944],{"class":32,"line":17051},[30,114939,110425],{"class":321},[30,114941,367],{"class":317},[30,114943,39011],{"class":40},[30,114945,114946],{"class":321},"._get_reward()\n",[30,114948,114949],{"class":32,"line":17063},[30,114950,2582],{"emptyLinePlaceholder":245},[30,114952,114953,114955,114957,114959,114961,114963],{"class":32,"line":17068},[30,114954,112275],{"class":321},[30,114956,367],{"class":317},[30,114958,39011],{"class":40},[30,114960,114508],{"class":321},[30,114962,30961],{"class":40},[30,114964,114586],{"class":321},[30,114966,114967,114969,114971,114973,114975,114977],{"class":32,"line":17081},[30,114968,112288],{"class":321},[30,114970,367],{"class":317},[30,114972,39011],{"class":40},[30,114974,114508],{"class":321},[30,114976,30961],{"class":40},[30,114978,114601],{"class":321},[30,114980,114981,114983,114985,114987,114990,114992],{"class":32,"line":17086},[30,114982,114606],{"class":321},[30,114984,367],{"class":317},[30,114986,109935],{"class":40},[30,114988,114989],{"class":321},"(np.linalg.norm(tip ",[30,114991,852],{"class":317},[30,114993,114994],{"class":321}," target))\n",[30,114996,114997],{"class":32,"line":17091},[30,114998,2582],{"emptyLinePlaceholder":245},[30,115000,115001,115004,115006,115008,115010],{"class":32,"line":17096},[30,115002,115003],{"class":321},"        terminated ",[30,115005,367],{"class":317},[30,115007,113827],{"class":321},[30,115009,1230],{"class":317},[30,115011,113832],{"class":40},[30,115013,115014,115017,115019,115021,115023,115025,115027],{"class":32,"line":17109},[30,115015,115016],{"class":321},"        truncated ",[30,115018,367],{"class":317},[30,115020,39011],{"class":40},[30,115022,113844],{"class":321},[30,115024,1893],{"class":317},[30,115026,39011],{"class":40},[30,115028,113851],{"class":321},[30,115030,115031,115034,115036,115038,115041],{"class":32,"line":17114},[30,115032,115033],{"class":321},"        info ",[30,115035,367],{"class":317},[30,115037,4630],{"class":321},[30,115039,115040],{"class":74},"\"distance\"",[30,115042,115043],{"class":321},": dist}\n",[30,115045,115046,115048],{"class":32,"line":32771},[30,115047,14934],{"class":317},[30,115049,115050],{"class":321}," obs, reward, terminated, truncated, info\n",[30,115052,115053],{"class":32,"line":32777},[30,115054,2582],{"emptyLinePlaceholder":245},[30,115056,115057],{"class":32,"line":32783},[30,115058,2582],{"emptyLinePlaceholder":245},[30,115060,115061,115063,115065,115067,115069],{"class":32,"line":32789},[30,115062,32085],{"class":317},[30,115064,2155],{"class":36},[30,115066,101536],{"class":321},[30,115068,95824],{"class":40},[30,115070,3921],{"class":321},[30,115072,115073,115076,115078],{"class":32,"line":32795},[30,115074,115075],{"class":321},"    env ",[30,115077,367],{"class":317},[30,115079,115080],{"class":321}," ReacherEnv()\n",[30,115082,115083,115086,115088,115091,115093,115095,115097],{"class":32,"line":32806},[30,115084,115085],{"class":321},"    obs, info ",[30,115087,367],{"class":317},[30,115089,115090],{"class":321}," env.reset(",[30,115092,114704],{"class":5398},[30,115094,367],{"class":317},[30,115096,511],{"class":40},[30,115098,328],{"class":321},[30,115100,115101,115103,115105,115108],{"class":32,"line":32812},[30,115102,31437],{"class":40},[30,115104,322],{"class":321},[30,115106,115107],{"class":74},"\"initial obs shape:\"",[30,115109,115110],{"class":321},", obs.shape)\n",[30,115112,115113,115115,115117,115120],{"class":32,"line":32832},[30,115114,31437],{"class":40},[30,115116,322],{"class":321},[30,115118,115119],{"class":74},"\"initial info:\"",[30,115121,115122],{"class":321},", info)\n",[30,115124,115125],{"class":32,"line":32838},[30,115126,2582],{"emptyLinePlaceholder":245},[30,115128,115129,115131,115133],{"class":32,"line":32849},[30,115130,110291],{"class":321},[30,115132,367],{"class":317},[30,115134,104899],{"class":40},[30,115136,115137,115139,115141,115143,115145,115147,115149],{"class":32,"line":32855},[30,115138,3383],{"class":317},[30,115140,31754],{"class":321},[30,115142,26181],{"class":317},[30,115144,32581],{"class":40},[30,115146,322],{"class":321},[30,115148,1020],{"class":40},[30,115150,30924],{"class":321},[30,115152,115153,115155,115157],{"class":32,"line":32861},[30,115154,110360],{"class":321},[30,115156,367],{"class":317},[30,115158,115159],{"class":321}," env.action_space.sample()\n",[30,115161,115162,115165,115167],{"class":32,"line":32867},[30,115163,115164],{"class":321},"        obs, reward, terminated, truncated, info ",[30,115166,367],{"class":317},[30,115168,113553],{"class":321},[30,115170,115171,115173,115175],{"class":32,"line":32873},[30,115172,110435],{"class":321},[30,115174,9659],{"class":317},[30,115176,110440],{"class":321},[30,115178,115179,115181,115183,115185,115187,115190,115192,115194,115197,115199,115201,115204,115206,115208,115211,115213,115215,115217],{"class":32,"line":32879},[30,115180,32589],{"class":40},[30,115182,322],{"class":321},[30,115184,110469],{"class":74},[30,115186,110472],{"class":321},[30,115188,115189],{"class":74},"\"reward:\"",[30,115191,12617],{"class":321},[30,115193,32156],{"class":40},[30,115195,115196],{"class":321},"(reward, ",[30,115198,392],{"class":40},[30,115200,110483],{"class":321},[30,115202,115203],{"class":74},"\"distance:\"",[30,115205,12617],{"class":321},[30,115207,32156],{"class":40},[30,115209,115210],{"class":321},"(info[",[30,115212,115040],{"class":74},[30,115214,112340],{"class":321},[30,115216,392],{"class":40},[30,115218,30635],{"class":321},[30,115220,115221,115223,115226,115229],{"class":32,"line":32885},[30,115222,2679],{"class":317},[30,115224,115225],{"class":321}," terminated ",[30,115227,115228],{"class":317},"or",[30,115230,115231],{"class":321}," truncated:\n",[30,115233,115234],{"class":32,"line":32891},[30,115235,115236],{"class":317},"            break\n",[30,115238,115239],{"class":32,"line":32911},[30,115240,2582],{"emptyLinePlaceholder":245},[30,115242,115243,115245,115247,115249,115251,115253,115255,115257],{"class":32,"line":32917},[30,115244,31437],{"class":40},[30,115246,322],{"class":321},[30,115248,110514],{"class":74},[30,115250,12617],{"class":321},[30,115252,32156],{"class":40},[30,115254,110521],{"class":321},[30,115256,392],{"class":40},[30,115258,30635],{"class":321},[30,115260,115261],{"class":32,"line":32933},[30,115262,2582],{"emptyLinePlaceholder":245},[30,115264,115265],{"class":32,"line":32939},[30,115266,2582],{"emptyLinePlaceholder":245},[30,115268,115269,115271,115273,115275,115277],{"class":32,"line":32953},[30,115270,1717],{"class":317},[30,115272,31358],{"class":40},[30,115274,101697],{"class":317},[30,115276,101700],{"class":74},[30,115278,3921],{"class":321},[30,115280,115281],{"class":32,"line":32959},[30,115282,101707],{"class":321},[157,115284,103708],{},[20,115286,115288],{"className":22,"code":115287,"language":24,"meta":25,"style":25},"touch ch8_gym_env.py\n",[27,115289,115290],{"__ignoreMap":25},[30,115291,115292,115294],{"class":32,"line":33},[30,115293,101421],{"class":36},[30,115295,115296],{"class":74}," ch8_gym_env.py\n",[157,115298,110582],{},[20,115300,115302],{"className":22,"code":115301,"language":24,"meta":25,"style":25},"python ch8_gym_env.py\n",[27,115303,115304],{"__ignoreMap":25},[30,115305,115306,115308],{"class":32,"line":33},[30,115307,30518],{"class":36},[30,115309,115296],{"class":74},[287,115311,101710],{"id":101710},[157,115313,115314],{},"继承 Gymnasium 环境：",[20,115316,115318],{"className":30516,"code":115317,"language":30518,"meta":25,"style":25},"class ReacherEnv(gym.Env):\n",[27,115319,115320],{"__ignoreMap":25},[30,115321,115322,115324,115326,115328,115330,115332,115334],{"class":32,"line":33},[30,115323,14876],{"class":317},[30,115325,114195],{"class":36},[30,115327,322],{"class":321},[30,115329,113678],{"class":36},[30,115331,878],{"class":321},[30,115333,114204],{"class":36},[30,115335,30924],{"class":321},[157,115337,115338],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[157,115340,115341],{},"初始化模型：",[20,115343,115345],{"className":30516,"code":115344,"language":30518,"meta":25,"style":25},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[27,115346,115347,115361],{"__ignoreMap":25},[30,115348,115349,115351,115353,115355,115357,115359],{"class":32,"line":33},[30,115350,30961],{"class":40},[30,115352,114255],{"class":321},[30,115354,367],{"class":317},[30,115356,101550],{"class":321},[30,115358,101452],{"class":40},[30,115360,328],{"class":321},[30,115362,115363,115365,115367,115369,115371,115373],{"class":32,"line":44},[30,115364,30961],{"class":40},[30,115366,114270],{"class":321},[30,115368,367],{"class":317},[30,115370,114275],{"class":321},[30,115372,30961],{"class":40},[30,115374,114280],{"class":321},[157,115376,115377,115378,115380],{},"这和前面章节一样，只是现在放到了类的 ",[27,115379,30967],{}," 里。",[157,115382,115383],{},"缓存 site ID：",[20,115385,115387],{"className":30516,"code":115386,"language":30518,"meta":25,"style":25},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[27,115388,115389,115403],{"__ignoreMap":25},[30,115390,115391,115393,115395,115397,115399,115401],{"class":32,"line":33},[30,115392,30961],{"class":40},[30,115394,114291],{"class":321},[30,115396,367],{"class":317},[30,115398,114296],{"class":321},[30,115400,89692],{"class":40},[30,115402,328],{"class":321},[30,115404,115405,115407,115409,115411,115413,115415],{"class":32,"line":44},[30,115406,30961],{"class":40},[30,115408,114312],{"class":321},[30,115410,367],{"class":317},[30,115412,114296],{"class":321},[30,115414,89692],{"class":40},[30,115416,328],{"class":321},[157,115418,115419],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[157,115421,115422],{},"reset：",[20,115424,115426],{"className":30516,"code":115425,"language":30518,"meta":25,"style":25},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[27,115427,115428],{"__ignoreMap":25},[30,115429,115430,115432,115434,115436,115438,115440,115442,115444,115446,115448,115450,115452,115454,115456,115458,115460,115462],{"class":32,"line":33},[30,115431,32085],{"class":317},[30,115433,114660],{"class":36},[30,115435,114663],{"class":321},[30,115437,775],{"class":317},[30,115439,114668],{"class":321},[30,115441,325],{"class":40},[30,115443,25282],{"class":317},[30,115445,39071],{"class":40},[30,115447,13746],{"class":317},[30,115449,39071],{"class":40},[30,115451,114681],{"class":321},[30,115453,114684],{"class":40},[30,115455,25282],{"class":317},[30,115457,39071],{"class":40},[30,115459,13746],{"class":317},[30,115461,39071],{"class":40},[30,115463,30924],{"class":321},[157,115465,115466,115468],{},[27,115467,70194],{}," 做四件事：",[271,115470,115471,115474,115477,115480],{},[150,115472,115473],{},"设置随机种子。",[150,115475,115476],{},"重置 MuJoCo data。",[150,115478,115479],{},"随机初始化关节角。",[150,115481,115482],{},"返回初始观测和 info。",[157,115484,115485],{},"step：",[20,115487,115489],{"className":30516,"code":115488,"language":30518,"meta":25,"style":25},"def step(self, action):\n",[27,115490,115491],{"__ignoreMap":25},[30,115492,115493,115495,115497],{"class":32,"line":33},[30,115494,32085],{"class":317},[30,115496,114825],{"class":36},[30,115498,114828],{"class":321},[157,115500,115501,115503],{},[27,115502,107272],{}," 做六件事：",[271,115505,115506,115509,115515,115518,115521,115524],{},[150,115507,115508],{},"检查并裁剪 action。",[150,115510,115511,115512,28523],{},"写入 ",[27,115513,115514],{},"self.data.ctrl",[150,115516,115517],{},"连续推进若干个 MuJoCo 物理步。",[150,115519,115520],{},"计算新观测。",[150,115522,115523],{},"计算奖励和结束条件。",[150,115525,115526],{},"返回 Gymnasium 标准五元组。",[287,115528,101846],{"id":101846},[20,115530,115532],{"className":30516,"code":115531,"language":30518,"meta":25,"style":25},"import gymnasium as gym\n",[27,115533,115534],{"__ignoreMap":25},[30,115535,115536,115538,115540,115542],{"class":32,"line":33},[30,115537,30530],{"class":317},[30,115539,114033],{"class":321},[30,115541,31521],{"class":317},[30,115543,114038],{"class":321},[157,115545,115546,115547,115549,115550,115553],{},"导入 Gymnasium，并起别名 ",[27,115548,113678],{},"。后面写 ",[27,115551,115552],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[20,115555,115557],{"className":30516,"code":115556,"language":30518,"meta":25,"style":25},"from gymnasium import spaces\n",[27,115558,115559],{"__ignoreMap":25},[30,115560,115561,115563,115565,115567],{"class":32,"line":33},[30,115562,30875],{"class":317},[30,115564,114033],{"class":321},[30,115566,30530],{"class":317},[30,115568,114065],{"class":321},[157,115570,115571,115572,115575],{},"导入空间定义工具。",[27,115573,115574],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[20,115577,115578],{"className":30516,"code":115317,"language":30518,"meta":25,"style":25},[27,115579,115580],{"__ignoreMap":25},[30,115581,115582,115584,115586,115588,115590,115592,115594],{"class":32,"line":33},[30,115583,14876],{"class":317},[30,115585,114195],{"class":36},[30,115587,322],{"class":321},[30,115589,113678],{"class":36},[30,115591,878],{"class":321},[30,115593,114204],{"class":36},[30,115595,30924],{"class":321},[157,115597,115598,115599,115602,115603,115605,115606,101156,115608,115610],{},"定义一个类，名字叫 ",[27,115600,115601],{},"ReacherEnv","。括号里的 ",[27,115604,115552],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[27,115607,70194],{},[27,115609,107272],{}," 这两个核心方法。",[20,115612,115614],{"className":30516,"code":115613,"language":30518,"meta":25,"style":25},"metadata = {\"render_modes\": []}\n",[27,115615,115616],{"__ignoreMap":25},[30,115617,115618,115621,115623,115625,115627],{"class":32,"line":33},[30,115619,115620],{"class":321},"metadata ",[30,115622,367],{"class":317},[30,115624,4630],{"class":321},[30,115626,114218],{"class":74},[30,115628,114221],{"class":321},[157,115630,115631],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[20,115633,115635],{"className":30516,"code":115634,"language":30518,"meta":25,"style":25},"def __init__(self) -> None:\n",[27,115636,115637],{"__ignoreMap":25},[30,115638,115639,115641,115643,115645,115647],{"class":32,"line":33},[30,115640,32085],{"class":317},[30,115642,30942],{"class":40},[30,115644,114234],{"class":321},[30,115646,95824],{"class":40},[30,115648,3921],{"class":321},[157,115650,115651,115653,115654,28523],{},[27,115652,30967],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[27,115655,115656],{},"env = ReacherEnv()",[20,115658,115660],{"className":30516,"code":115659,"language":30518,"meta":25,"style":25},"super().__init__()\n",[27,115661,115662],{"__ignoreMap":25},[30,115663,115664,115667,115669,115671],{"class":32,"line":33},[30,115665,115666],{"class":40},"super",[30,115668,17443],{"class":321},[30,115670,30967],{"class":40},[30,115672,2158],{"class":321},[157,115674,115675,115676,115678],{},"调用父类 ",[27,115677,115552],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[20,115680,115681],{"className":30516,"code":115344,"language":30518,"meta":25,"style":25},[27,115682,115683,115697],{"__ignoreMap":25},[30,115684,115685,115687,115689,115691,115693,115695],{"class":32,"line":33},[30,115686,30961],{"class":40},[30,115688,114255],{"class":321},[30,115690,367],{"class":317},[30,115692,101550],{"class":321},[30,115694,101452],{"class":40},[30,115696,328],{"class":321},[30,115698,115699,115701,115703,115705,115707,115709],{"class":32,"line":44},[30,115700,30961],{"class":40},[30,115702,114270],{"class":321},[30,115704,367],{"class":317},[30,115706,114275],{"class":321},[30,115708,30961],{"class":40},[30,115710,114280],{"class":321},[157,115712,115713,115714,115716,115717,101156,115720,115723],{},"把 MuJoCo 模型和状态保存到 ",[27,115715,30961],{}," 上。",[27,115718,115719],{},"self.model",[27,115721,115722],{},"self.data"," 表示这个环境对象自己的模型和状态。",[20,115725,115726],{"className":30516,"code":115386,"language":30518,"meta":25,"style":25},[27,115727,115728,115742],{"__ignoreMap":25},[30,115729,115730,115732,115734,115736,115738,115740],{"class":32,"line":33},[30,115731,30961],{"class":40},[30,115733,114291],{"class":321},[30,115735,367],{"class":317},[30,115737,114296],{"class":321},[30,115739,89692],{"class":40},[30,115741,328],{"class":321},[30,115743,115744,115746,115748,115750,115752,115754],{"class":32,"line":44},[30,115745,30961],{"class":40},[30,115747,114312],{"class":321},[30,115749,367],{"class":317},[30,115751,114296],{"class":321},[30,115753,89692],{"class":40},[30,115755,328],{"class":321},[157,115757,115758,115759,101156,115762,115765],{},"提前查好 tip 和 target 的 site ID。这样 ",[27,115760,115761],{},"_get_obs",[27,115763,115764],{},"_get_reward"," 里就不用每次按名字查找。",[20,115767,115769],{"className":30516,"code":115768,"language":30518,"meta":25,"style":25},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[27,115770,115771,115781,115791],{"__ignoreMap":25},[30,115772,115773,115775,115777,115779],{"class":32,"line":33},[30,115774,30961],{"class":40},[30,115776,114005],{"class":321},[30,115778,367],{"class":317},[30,115780,54565],{"class":40},[30,115782,115783,115785,115787,115789],{"class":32,"line":44},[30,115784,30961],{"class":40},[30,115786,114384],{"class":321},[30,115788,367],{"class":317},[30,115790,114389],{"class":40},[30,115792,115793,115795,115797,115799],{"class":32,"line":52},[30,115794,30961],{"class":40},[30,115796,113844],{"class":321},[30,115798,367],{"class":317},[30,115800,47471],{"class":40},[157,115802,115803,115806,115807,115810,115811,115814],{},[27,115804,115805],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[27,115808,115809],{},"max_steps"," 是一个 episode 最多运行多少步。",[27,115812,115813],{},"steps"," 记录当前 episode 已经走了多少步。",[20,115816,115817],{"className":30516,"code":113883,"language":30518,"meta":25,"style":25},[27,115818,115819],{"__ignoreMap":25},[30,115820,115821,115823,115825,115827,115829,115831,115833,115835,115837,115839,115841,115843,115845,115847,115849,115851,115853,115855,115857,115859],{"class":32,"line":33},[30,115822,30961],{"class":40},[30,115824,113892],{"class":321},[30,115826,367],{"class":317},[30,115828,113897],{"class":321},[30,115830,113900],{"class":5398},[30,115832,113903],{"class":317},[30,115834,102541],{"class":40},[30,115836,12617],{"class":321},[30,115838,113910],{"class":5398},[30,115840,367],{"class":317},[30,115842,102541],{"class":40},[30,115844,12617],{"class":321},[30,115846,96101],{"class":5398},[30,115848,367],{"class":317},[30,115850,322],{"class":321},[30,115852,398],{"class":40},[30,115854,113927],{"class":321},[30,115856,93638],{"class":5398},[30,115858,367],{"class":317},[30,115860,113934],{"class":321},[157,115862,115863,115864,115867,115868,101156,115871,115874],{},"定义动作空间。",[27,115865,115866],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[27,115869,115870],{},"low=-1.0",[27,115872,115873],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[20,115876,115877],{"className":30516,"code":113944,"language":30518,"meta":25,"style":25},[27,115878,115879],{"__ignoreMap":25},[30,115880,115881,115883,115885,115887,115889,115891,115893,115895,115897,115899,115901,115903,115905,115907,115909,115911,115913,115915],{"class":32,"line":33},[30,115882,30961],{"class":40},[30,115884,113953],{"class":321},[30,115886,367],{"class":317},[30,115888,113897],{"class":321},[30,115890,113900],{"class":5398},[30,115892,113903],{"class":317},[30,115894,113964],{"class":321},[30,115896,113910],{"class":5398},[30,115898,367],{"class":317},[30,115900,113964],{"class":321},[30,115902,96101],{"class":5398},[30,115904,367],{"class":317},[30,115906,322],{"class":321},[30,115908,766],{"class":40},[30,115910,113927],{"class":321},[30,115912,93638],{"class":5398},[30,115914,367],{"class":317},[30,115916,113934],{"class":321},[157,115918,115919,115920,115923,115924,115927],{},"定义观测空间。",[27,115921,115922],{},"shape=(10,)"," 表示观测是 10 个数。",[27,115925,115926],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[20,115929,115931],{"className":30516,"code":115930,"language":30518,"meta":25,"style":25},"def _get_obs(self) -> np.ndarray:\n",[27,115932,115933],{"__ignoreMap":25},[30,115934,115935,115937,115939],{"class":32,"line":33},[30,115936,32085],{"class":317},[30,115938,114494],{"class":36},[30,115940,114497],{"class":321},[157,115942,115943,115944,115946],{},"定义内部函数，用来生成观测。函数名前面的 ",[27,115945,1312],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[20,115948,115950],{"className":30516,"code":115949,"language":30518,"meta":25,"style":25},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[27,115951,115952,115966],{"__ignoreMap":25},[30,115953,115954,115956,115958,115960,115962,115964],{"class":32,"line":33},[30,115955,111706],{"class":321},[30,115957,367],{"class":317},[30,115959,39011],{"class":40},[30,115961,114508],{"class":321},[30,115963,30961],{"class":40},[30,115965,114513],{"class":321},[30,115967,115968,115970,115972,115974,115976,115978],{"class":32,"line":44},[30,115969,111716],{"class":321},[30,115971,367],{"class":317},[30,115973,39011],{"class":40},[30,115975,114508],{"class":321},[30,115977,30961],{"class":40},[30,115979,114528],{"class":321},[157,115981,115982],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[20,115984,115986],{"className":30516,"code":115985,"language":30518,"meta":25,"style":25},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[27,115987,115988,116004],{"__ignoreMap":25},[30,115989,115990,115992,115994,115996,115998,116000,116002],{"class":32,"line":33},[30,115991,110992],{"class":321},[30,115993,367],{"class":317},[30,115995,114537],{"class":321},[30,115997,30961],{"class":40},[30,115999,114542],{"class":321},[30,116001,30961],{"class":40},[30,116003,114547],{"class":321},[30,116005,116006,116008],{"class":32,"line":44},[30,116007,17228],{"class":317},[30,116009,114554],{"class":321},[157,116011,116012,116013,116016,116017,116019],{},"拼接观测，并转换成 ",[27,116014,116015],{},"float32","。很多强化学习库默认使用 ",[27,116018,116015],{},"，所以这里主动转换。",[20,116021,116022],{"className":30516,"code":115425,"language":30518,"meta":25,"style":25},[27,116023,116024],{"__ignoreMap":25},[30,116025,116026,116028,116030,116032,116034,116036,116038,116040,116042,116044,116046,116048,116050,116052,116054,116056,116058],{"class":32,"line":33},[30,116027,32085],{"class":317},[30,116029,114660],{"class":36},[30,116031,114663],{"class":321},[30,116033,775],{"class":317},[30,116035,114668],{"class":321},[30,116037,325],{"class":40},[30,116039,25282],{"class":317},[30,116041,39071],{"class":40},[30,116043,13746],{"class":317},[30,116045,39071],{"class":40},[30,116047,114681],{"class":321},[30,116049,114684],{"class":40},[30,116051,25282],{"class":317},[30,116053,39071],{"class":40},[30,116055,13746],{"class":317},[30,116057,39071],{"class":40},[30,116059,30924],{"class":321},[157,116061,116062,116063,116065,116066,116069],{},"定义 reset。",[27,116064,114704],{}," 用来控制随机数，保证实验可以复现。",[27,116067,116068],{},"options"," 用来接收额外配置，本章暂时不用。",[20,116071,116073],{"className":30516,"code":116072,"language":30518,"meta":25,"style":25},"super().reset(seed=seed)\n",[27,116074,116075],{"__ignoreMap":25},[30,116076,116077,116079,116081,116083,116085],{"class":32,"line":33},[30,116078,115666],{"class":40},[30,116080,114701],{"class":321},[30,116082,114704],{"class":5398},[30,116084,367],{"class":317},[30,116086,114709],{"class":321},[157,116088,116089,116090,116093],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[27,116091,116092],{},"self.np_random"," 生成可复现的随机数。",[20,116095,116097],{"className":30516,"code":116096,"language":30518,"meta":25,"style":25},"mujoco.mj_resetData(self.model, self.data)\n",[27,116098,116099],{"__ignoreMap":25},[30,116100,116101,116104,116106,116108,116110],{"class":32,"line":33},[30,116102,116103],{"class":321},"mujoco.mj_resetData(",[30,116105,30961],{"class":40},[30,116107,114719],{"class":321},[30,116109,30961],{"class":40},[30,116111,114724],{"class":321},[157,116113,116114],{},"把 MuJoCo 状态重置到默认状态。",[20,116116,116118],{"className":30516,"code":116117,"language":30518,"meta":25,"style":25},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[27,116119,116120],{"__ignoreMap":25},[30,116121,116122,116124,116126,116128,116130,116132,116134,116136,116138,116140,116142,116144,116146,116148,116150,116152,116154],{"class":32,"line":33},[30,116123,30961],{"class":40},[30,116125,114735],{"class":321},[30,116127,367],{"class":317},[30,116129,39011],{"class":40},[30,116131,114742],{"class":321},[30,116133,113900],{"class":5398},[30,116135,113903],{"class":317},[30,116137,86348],{"class":40},[30,116139,12617],{"class":321},[30,116141,113910],{"class":5398},[30,116143,367],{"class":317},[30,116145,86348],{"class":40},[30,116147,12617],{"class":321},[30,116149,31634],{"class":5398},[30,116151,367],{"class":317},[30,116153,30961],{"class":40},[30,116155,114767],{"class":321},[157,116157,115479,116158,116161,116162,116165,116166,116168],{},[27,116159,116160],{},"[:]"," 表示修改整个数组。",[27,116163,116164],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[27,116167,102288],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[20,116170,116172],{"className":30516,"code":116171,"language":30518,"meta":25,"style":25},"self.data.qvel[:] = 0.0\n",[27,116173,116174],{"__ignoreMap":25},[30,116175,116176,116178,116180,116182],{"class":32,"line":33},[30,116177,30961],{"class":40},[30,116179,114774],{"class":321},[30,116181,367],{"class":317},[30,116183,104899],{"class":40},[157,116185,116186],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[20,116188,116190],{"className":30516,"code":116189,"language":30518,"meta":25,"style":25},"self.steps = 0\nreturn self._get_obs(), {}\n",[27,116191,116192,116202],{"__ignoreMap":25},[30,116193,116194,116196,116198,116200],{"class":32,"line":33},[30,116195,30961],{"class":40},[30,116197,113844],{"class":321},[30,116199,367],{"class":317},[30,116201,47471],{"class":40},[30,116203,116204,116206,116208],{"class":32,"line":44},[30,116205,17228],{"class":317},[30,116207,39011],{"class":40},[30,116209,114814],{"class":321},[157,116211,116212],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[20,116214,116215],{"className":30516,"code":115488,"language":30518,"meta":25,"style":25},[27,116216,116217],{"__ignoreMap":25},[30,116218,116219,116221,116223],{"class":32,"line":33},[30,116220,32085],{"class":317},[30,116222,114825],{"class":36},[30,116224,114828],{"class":321},[157,116226,116227],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[20,116229,116231],{"className":30516,"code":116230,"language":30518,"meta":25,"style":25},"action = np.asarray(action, dtype=np.float32)\n",[27,116232,116233],{"__ignoreMap":25},[30,116234,116235,116237,116239,116241,116243,116245],{"class":32,"line":33},[30,116236,107580],{"class":321},[30,116238,367],{"class":317},[30,116240,114837],{"class":321},[30,116242,93638],{"class":5398},[30,116244,367],{"class":317},[30,116246,113934],{"class":321},[157,116248,116249,116250,28523],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[27,116251,116015],{},[20,116253,116255],{"className":30516,"code":116254,"language":30518,"meta":25,"style":25},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[27,116256,116257],{"__ignoreMap":25},[30,116258,116259,116261,116263,116265,116267,116269,116271],{"class":32,"line":33},[30,116260,107580],{"class":321},[30,116262,367],{"class":317},[30,116264,107585],{"class":321},[30,116266,30961],{"class":40},[30,116268,114856],{"class":321},[30,116270,30961],{"class":40},[30,116272,114861],{"class":321},[157,116274,116275],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[20,116277,116279],{"className":30516,"code":116278,"language":30518,"meta":25,"style":25},"self.data.ctrl[:] = action\n",[27,116280,116281],{"__ignoreMap":25},[30,116282,116283,116285,116287,116289],{"class":32,"line":33},[30,116284,30961],{"class":40},[30,116286,114872],{"class":321},[30,116288,367],{"class":317},[30,116290,107608],{"class":321},[157,116292,116293],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[20,116295,116297],{"className":30516,"code":116296,"language":30518,"meta":25,"style":25},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[27,116298,116299,116315],{"__ignoreMap":25},[30,116300,116301,116303,116305,116307,116309,116311,116313],{"class":32,"line":33},[30,116302,3207],{"class":317},[30,116304,101639],{"class":321},[30,116306,26181],{"class":317},[30,116308,32581],{"class":40},[30,116310,322],{"class":321},[30,116312,30961],{"class":40},[30,116314,114893],{"class":321},[30,116316,116317,116320,116322,116324,116326],{"class":32,"line":44},[30,116318,116319],{"class":321},"    mujoco.mj_step(",[30,116321,30961],{"class":40},[30,116323,114719],{"class":321},[30,116325,30961],{"class":40},[30,116327,114724],{"class":321},[157,116329,116330,116331,116334,116335,116337,116338,28523],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[27,116332,116333],{},"frame_skip=5","，所以外部调用一次 ",[27,116336,114015],{},"，内部实际执行 5 次 ",[27,116339,101353],{},[20,116341,116343],{"className":30516,"code":116342,"language":30518,"meta":25,"style":25},"self.steps += 1\n",[27,116344,116345],{"__ignoreMap":25},[30,116346,116347,116349,116351,116353],{"class":32,"line":33},[30,116348,30961],{"class":40},[30,116350,113844],{"class":321},[30,116352,9659],{"class":317},[30,116354,55837],{"class":40},[157,116356,116357],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[20,116359,116361],{"className":30516,"code":116360,"language":30518,"meta":25,"style":25},"obs = self._get_obs()\nreward = self._get_reward()\n",[27,116362,116363,116373],{"__ignoreMap":25},[30,116364,116365,116367,116369,116371],{"class":32,"line":33},[30,116366,110992],{"class":321},[30,116368,367],{"class":317},[30,116370,39011],{"class":40},[30,116372,114935],{"class":321},[30,116374,116375,116377,116379,116381],{"class":32,"line":44},[30,116376,111143],{"class":321},[30,116378,367],{"class":317},[30,116380,39011],{"class":40},[30,116382,114946],{"class":321},[157,116384,116385],{},"计算新的观测和奖励。",[20,116387,116389],{"className":30516,"code":116388,"language":30518,"meta":25,"style":25},"dist = float(np.linalg.norm(tip - target))\n",[27,116390,116391],{"__ignoreMap":25},[30,116392,116393,116395,116397,116399,116401,116403],{"class":32,"line":33},[30,116394,111734],{"class":321},[30,116396,367],{"class":317},[30,116398,109935],{"class":40},[30,116400,114989],{"class":321},[30,116402,852],{"class":317},[30,116404,114994],{"class":321},[157,116406,116407],{},"计算末端到目标的距离，并转换成 Python float。",[20,116409,116410],{"className":30516,"code":113815,"language":30518,"meta":25,"style":25},[27,116411,116412,116424],{"__ignoreMap":25},[30,116413,116414,116416,116418,116420,116422],{"class":32,"line":33},[30,116415,113822],{"class":321},[30,116417,367],{"class":317},[30,116419,113827],{"class":321},[30,116421,1230],{"class":317},[30,116423,113832],{"class":40},[30,116425,116426,116428,116430,116432,116434,116436,116438],{"class":32,"line":44},[30,116427,113837],{"class":321},[30,116429,367],{"class":317},[30,116431,39011],{"class":40},[30,116433,113844],{"class":321},[30,116435,1893],{"class":317},[30,116437,39011],{"class":40},[30,116439,113851],{"class":321},[157,116441,116442],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[20,116444,116446],{"className":30516,"code":116445,"language":30518,"meta":25,"style":25},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[27,116447,116448,116461],{"__ignoreMap":25},[30,116449,116450,116453,116455,116457,116459],{"class":32,"line":33},[30,116451,116452],{"class":321},"info ",[30,116454,367],{"class":317},[30,116456,4630],{"class":321},[30,116458,115040],{"class":74},[30,116460,115043],{"class":321},[30,116462,116463,116465],{"class":32,"line":44},[30,116464,17228],{"class":317},[30,116466,115050],{"class":321},[157,116468,116469,116472],{},[27,116470,116471],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[20,116474,116476],{"className":30516,"code":116475,"language":30518,"meta":25,"style":25},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[27,116477,116478,116487],{"__ignoreMap":25},[30,116479,116480,116483,116485],{"class":32,"line":33},[30,116481,116482],{"class":321},"env ",[30,116484,367],{"class":317},[30,116486,115080],{"class":321},[30,116488,116489,116491,116493,116495,116497,116499,116501],{"class":32,"line":44},[30,116490,113538],{"class":321},[30,116492,367],{"class":317},[30,116494,115090],{"class":321},[30,116496,114704],{"class":5398},[30,116498,367],{"class":317},[30,116500,511],{"class":40},[30,116502,328],{"class":321},[157,116504,116505,116506,116509],{},"创建环境并重置。",[27,116507,116508],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[20,116511,116513],{"className":30516,"code":116512,"language":30518,"meta":25,"style":25},"action = env.action_space.sample()\n",[27,116514,116515],{"__ignoreMap":25},[30,116516,116517,116519,116521],{"class":32,"line":33},[30,116518,107580],{"class":321},[30,116520,367],{"class":317},[30,116522,115159],{"class":321},[157,116524,116525],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[15,116527,102454],{"id":102453},[157,116529,105622],{},[20,116531,116534],{"className":116532,"code":116533,"language":5369,"meta":25},[5367],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[27,116535,116533],{"__ignoreMap":25},[157,116537,116538],{},"这个环境已经具备强化学习环境的基本结构。",[157,116540,116541],{},"主函数里使用随机动作：",[20,116543,116544],{"className":30516,"code":116512,"language":30518,"meta":25,"style":25},[27,116545,116546],{"__ignoreMap":25},[30,116547,116548,116550,116552],{"class":32,"line":33},[30,116549,107580],{"class":321},[30,116551,367],{"class":317},[30,116553,115159],{"class":321},[157,116555,116556],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[15,116558,102486],{"id":102485},[271,116560,116561,116564,116570,116579,116588,116597,116603],{},[150,116562,116563],{},"运行程序。",[150,116565,116566,116567,28523],{},"确认 ",[27,116568,116569],{},"obs.shape == (10,)",[150,116571,111319,116572,116575,116576,28523],{},[27,116573,116574],{},"env.action_space","，应类似 ",[27,116577,116578],{},"Box(-1.0, 1.0, (2,), float32)",[150,116580,105723,116581,116584,116585,28523],{},[27,116582,116583],{},"self.max_steps = 10","，确认环境会更快 ",[27,116586,116587],{},"truncated=True",[150,116589,102549,116590,102552,116593,116596],{},[27,116591,116592],{},"terminated = dist \u003C 0.05",[27,116594,116595],{},"dist \u003C 0.2","，观察是否更容易结束。",[150,116598,102549,116599,116602],{},[27,116600,116601],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[150,116604,116605,116606,116608,116609,116612],{},"在 ",[27,116607,116471],{}," 里加入 ",[27,116610,116611],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[15,116614,102591],{"id":102590},[287,116616,116618],{"id":116617},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[157,116620,116621,116622,116624],{},"Gymnasium 的 ",[27,116623,107272],{}," 返回 5 个值:",[20,116626,116628],{"className":30516,"code":116627,"language":30518,"meta":25,"style":25},"obs, reward, terminated, truncated, info\n",[27,116629,116630],{"__ignoreMap":25},[30,116631,116632],{"class":32,"line":33},[30,116633,116627],{"class":321},[157,116635,116636],{},"不是旧 Gym 的 4 个值。",[287,116638,116640,116643],{"id":116639},"datactrl-action-维度错误",[27,116641,116642],{},"data.ctrl[:] = action"," 维度错误",[157,116645,102661],{},[20,116647,116649],{"className":30516,"code":116648,"language":30518,"meta":25,"style":25},"print(self.model.nu)\nprint(action.shape)\n",[27,116650,116651,116662],{"__ignoreMap":25},[30,116652,116653,116655,116657,116659],{"class":32,"line":33},[30,116654,30553],{"class":40},[30,116656,322],{"class":321},[30,116658,30961],{"class":40},[30,116660,116661],{"class":321},".model.nu)\n",[30,116663,116664,116666],{"class":32,"line":44},[30,116665,30553],{"class":40},[30,116667,116668],{"class":321},"(action.shape)\n",[157,116670,116671],{},"两者必须匹配。",[287,116673,116675],{"id":116674},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[157,116677,102600],{},[20,116679,116681],{"className":30516,"code":116680,"language":30518,"meta":25,"style":25},"mujoco.mj_forward(self.model, self.data)\n",[27,116682,116683],{"__ignoreMap":25},[30,116684,116685,116688,116690,116692,116694],{"class":32,"line":33},[30,116686,116687],{"class":321},"mujoco.mj_forward(",[30,116689,30961],{"class":40},[30,116691,114719],{"class":321},[30,116693,30961],{"class":40},[30,116695,114724],{"class":321},[287,116697,116699,116701],{"id":116698},"observation_space-维度和-obs-不一致",[27,116700,113738],{}," 维度和 obs 不一致",[157,116703,102713],{},[20,116705,116707],{"className":30516,"code":116706,"language":30518,"meta":25,"style":25},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[27,116708,116709,116719,116726],{"__ignoreMap":25},[30,116710,116711,116713,116715,116717],{"class":32,"line":33},[30,116712,110992],{"class":321},[30,116714,367],{"class":317},[30,116716,39011],{"class":40},[30,116718,114935],{"class":321},[30,116720,116721,116723],{"class":32,"line":44},[30,116722,30553],{"class":40},[30,116724,116725],{"class":321},"(obs.shape)\n",[30,116727,116728,116730,116732,116734],{"class":32,"line":52},[30,116729,30553],{"class":40},[30,116731,322],{"class":321},[30,116733,30961],{"class":40},[30,116735,116736],{"class":321},".observation_space.shape)\n",[157,116738,116739],{},"两者必须一致。本章观测是：",[20,116741,116744],{"className":116742,"code":116743,"language":5369,"meta":25},[5367],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[27,116745,116743],{"__ignoreMap":25},[287,116747,116749],{"id":116748},"action-超过范围","action 超过范围",[157,116751,116752],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[20,116754,116755],{"className":30516,"code":116254,"language":30518,"meta":25,"style":25},[27,116756,116757],{"__ignoreMap":25},[30,116758,116759,116761,116763,116765,116767,116769,116771],{"class":32,"line":33},[30,116760,107580],{"class":321},[30,116762,367],{"class":317},[30,116764,107585],{"class":321},[30,116766,30961],{"class":40},[30,116768,114856],{"class":321},[30,116770,30961],{"class":40},[30,116772,114861],{"class":321},[157,116774,116775,116776,28523],{},"这能避免无效动作直接写入 ",[27,116777,101214],{},[287,116779,116781],{"id":116780},"忘记返回-info","忘记返回 info",[157,116783,116621,116784,101156,116786,116788],{},[27,116785,70194],{},[27,116787,107272],{}," 都会返回 info：",[20,116790,116791],{"className":30516,"code":113531,"language":30518,"meta":25,"style":25},[27,116792,116793,116801],{"__ignoreMap":25},[30,116794,116795,116797,116799],{"class":32,"line":33},[30,116796,113538],{"class":321},[30,116798,367],{"class":317},[30,116800,113543],{"class":321},[30,116802,116803,116805,116807],{"class":32,"line":44},[30,116804,113548],{"class":321},[30,116806,367],{"class":317},[30,116808,113553],{"class":321},[157,116810,116811,116812,28523],{},"即使暂时没有额外信息，也返回 ",[27,116813,32597],{},[15,116815,116817],{"id":116816},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[157,116819,116820],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[271,116822,116823,116826,116829,116832,116835,116838],{},[150,116824,116825],{},"更稳定的 reward。",[150,116827,116828],{},"合理的 episode 长度。",[150,116830,116831],{},"可重复的随机目标采样。",[150,116833,116834],{},"render 接口。",[150,116836,116837],{},"环境注册代码。",[150,116839,116840],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[157,116842,116843],{},"如果只是自己写训练循环，最小形式是：",[20,116845,116847],{"className":30516,"code":116846,"language":30518,"meta":25,"style":25},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n\nfor _ in range(1000):\n    action = env.action_space.sample()\n    obs, reward, terminated, truncated, info = env.step(action)\n    if terminated or truncated:\n        obs, info = env.reset()\n",[27,116848,116849,116857,116873,116877,116893,116902,116911,116921],{"__ignoreMap":25},[30,116850,116851,116853,116855],{"class":32,"line":33},[30,116852,116482],{"class":321},[30,116854,367],{"class":317},[30,116856,115080],{"class":321},[30,116858,116859,116861,116863,116865,116867,116869,116871],{"class":32,"line":44},[30,116860,113538],{"class":321},[30,116862,367],{"class":317},[30,116864,115090],{"class":321},[30,116866,114704],{"class":5398},[30,116868,367],{"class":317},[30,116870,511],{"class":40},[30,116872,328],{"class":321},[30,116874,116875],{"class":32,"line":52},[30,116876,2582],{"emptyLinePlaceholder":245},[30,116878,116879,116881,116883,116885,116887,116889,116891],{"class":32,"line":60},[30,116880,3207],{"class":317},[30,116882,101639],{"class":321},[30,116884,26181],{"class":317},[30,116886,32581],{"class":40},[30,116888,322],{"class":321},[30,116890,6592],{"class":40},[30,116892,30924],{"class":321},[30,116894,116895,116898,116900],{"class":32,"line":68},[30,116896,116897],{"class":321},"    action ",[30,116899,367],{"class":317},[30,116901,115159],{"class":321},[30,116903,116904,116907,116909],{"class":32,"line":80},[30,116905,116906],{"class":321},"    obs, reward, terminated, truncated, info ",[30,116908,367],{"class":317},[30,116910,113553],{"class":321},[30,116912,116913,116915,116917,116919],{"class":32,"line":88},[30,116914,3283],{"class":317},[30,116916,115225],{"class":321},[30,116918,115228],{"class":317},[30,116920,115231],{"class":321},[30,116922,116923,116926,116928],{"class":32,"line":96},[30,116924,116925],{"class":321},"        obs, info ",[30,116927,367],{"class":317},[30,116929,113543],{"class":321},[15,116931,116933],{"id":116932},"_9本章小结","9.本章小结",[157,116935,116936],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[20,116938,116941],{"className":116939,"code":116940,"language":5369,"meta":25},[5367],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[27,116942,116940],{"__ignoreMap":25},[157,116944,116945],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[234,116947,116948],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":116950},[116951,116952,116953,116960,116964,116965,116966,116976,116977],{"id":100784,"depth":44,"text":100785},{"id":100907,"depth":44,"text":100908},{"id":101182,"depth":44,"text":101183,"children":116954},[116955,116957,116959],{"id":113762,"depth":52,"text":116956},"terminated 和 truncated 的区别",{"id":113865,"depth":52,"text":116958},"observation_space 和 action_space",{"id":113992,"depth":52,"text":113993},{"id":101390,"depth":44,"text":101391,"children":116961},[116962,116963],{"id":101710,"depth":52,"text":101710},{"id":101846,"depth":52,"text":101846},{"id":102453,"depth":44,"text":102454},{"id":102485,"depth":44,"text":102486},{"id":102590,"depth":44,"text":102591,"children":116967},[116968,116969,116971,116972,116974,116975],{"id":116617,"depth":52,"text":116618},{"id":116639,"depth":52,"text":116970},"data.ctrl[:] = action 维度错误",{"id":116674,"depth":52,"text":116675},{"id":116698,"depth":52,"text":116973},"observation_space 维度和 obs 不一致",{"id":116748,"depth":52,"text":116749},{"id":116780,"depth":52,"text":116781},{"id":116816,"depth":44,"text":116817},{"id":116932,"depth":44,"text":116933},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113515,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116984,"title":116985,"body":116986,"description":117409,"extension":243,"meta":117410,"navigation":245,"path":117411,"seo":117412,"stem":117413,"__hash__":117414},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116987,"toc":117399},[116988,116992,116995,116998,117018,117024,117030,117040,117043,117046,117066,117069,117073,117076,117082,117085,117099,117102,117105,117179,117182,117188,117191,117214,117217,117267,117270,117276,117279,117282,117285,117304,117307,117313,117316,117319,117322,117342,117345,117348,117351,117396],[10,116989,116991],{"id":116990},"mujoco-学习","MuJoCo 学习",[157,116993,116994],{},"初版",[157,116996,116997],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[271,116999,117000,117003,117006,117015],{},[150,117001,117002],{},"MuJoCo 模型文件在描述什么。",[150,117004,117005],{},"Python 代码怎样读取和推进仿真。",[150,117007,117008,532,117010,532,117012,117014],{},[27,117009,104168],{},[27,117011,104498],{},[27,117013,104501],{}," 这些数组为什么重要。",[150,117016,117017],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[157,117019,117020,117021,117023],{},"默认环境为 Fedora 44、Python >= 3.10、",[27,117022,101165],{}," 官方 Python bindings。",[157,117025,117026,117027,117029],{},"注意：本文禁止使用 ",[27,117028,101150],{},"。所有示例均使用：",[20,117031,117032],{"className":30516,"code":101716,"language":30518,"meta":25,"style":25},[27,117033,117034],{"__ignoreMap":25},[30,117035,117036,117038],{"class":32,"line":33},[30,117037,30530],{"class":317},[30,117039,101439],{"class":321},[15,117041,117042],{"id":117042},"适合谁阅读",[157,117044,117045],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[271,117047,117048,117051,117054,117057],{},[150,117049,117050],{},"没学过 MuJoCo，只会一点 Python。",[150,117052,117053],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[150,117055,117056],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[150,117058,117059,117060,117062,117063,117065],{},"以前接触过 ",[27,117061,101150],{},"，现在想迁移到官方 ",[27,117064,101159],{}," Python bindings。",[157,117067,117068],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[15,117070,117072],{"id":117071},"mujoco-到底是什么","MuJoCo 到底是什么",[157,117074,117075],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[20,117077,117080],{"className":117078,"code":117079,"language":5369,"meta":25},[5367],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[27,117081,117079],{"__ignoreMap":25},[157,117083,117084],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[271,117086,117087,117090,117093,117096],{},[150,117088,117089],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[150,117091,117092],{},"快速测试控制算法，不必一开始就上真实机器人。",[150,117094,117095],{},"生成强化学习环境。",[150,117097,117098],{},"采集状态、动作、图像、奖励等训练数据。",[15,117100,117101],{"id":117101},"学习前的心智模型",[157,117103,117104],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[457,117106,117107,117119],{},[460,117108,117109],{},[463,117110,117111,117114,117117],{},[466,117112,117113],{"align":23918},"部分",[466,117115,117116],{"align":23918},"负责什么",[466,117118,21369],{"align":23918},[504,117120,117121,117132,117144,117156,117168],{},[463,117122,117123,117126,117129],{},[509,117124,117125],{"align":23918},"MJCF XML",[509,117127,117128],{"align":23918},"定义世界和机器人结构",[509,117130,117131],{"align":23918},"地面、盒子、关节、电机、摄像头",[463,117133,117134,117138,117141],{},[509,117135,117136],{"align":23918},[27,117137,100847],{},[509,117139,117140],{"align":23918},"编译后的静态模型",[509,117142,117143],{"align":23918},"有几个关节、有几个电机、时间步长是多少",[463,117145,117146,117150,117153],{},[509,117147,117148],{"align":23918},[27,117149,100857],{},[509,117151,117152],{"align":23918},"运行中的动态状态",[509,117154,117155],{"align":23918},"当前时间、位置、速度、电机输入",[463,117157,117158,117162,117165],{},[509,117159,117160],{"align":23918},[27,117161,101353],{},[509,117163,117164],{"align":23918},"推进一步物理仿真",[509,117166,117167],{"align":23918},"根据重力、力、碰撞更新状态",[463,117169,117170,117173,117176],{},[509,117171,117172],{"align":23918},"Viewer \u002F Renderer",[509,117174,117175],{"align":23918},"把仿真显示出来",[509,117177,117178],{"align":23918},"打开窗口或保存图片",[157,117180,117181],{},"一句话总结：",[20,117183,117186],{"className":117184,"code":117185,"language":5369,"meta":25},[5367],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[27,117187,117185],{"__ignoreMap":25},[157,117189,117190],{},"参考来源：",[147,117192,117193,117200,117207],{},[150,117194,117195,117196],{},"MuJoCo Python 官方文档：",[558,117197,117198],{"href":117198,"rel":117199},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24045],[150,117201,117202,117203],{},"MuJoCo XML Reference：",[558,117204,117205],{"href":117205,"rel":117206},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24045],[150,117208,117209,117210],{},"MuJoCo Overview：",[558,117211,117212],{"href":117212,"rel":117213},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24045],[15,117215,117216],{"id":117216},"章节目录",[271,117218,117219,117225,117231,117237,117243,117249,117255,117261],{},[150,117220,117221],{},[558,117222,117224],{"href":117223},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[150,117226,117227],{},[558,117228,117230],{"href":117229},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[150,117232,117233],{},[558,117234,117236],{"href":117235},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[150,117238,117239],{},[558,117240,117242],{"href":117241},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[150,117244,117245],{},[558,117246,117248],{"href":117247},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[150,117250,117251],{},[558,117252,117254],{"href":117253},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[150,117256,117257],{},[558,117258,117260],{"href":117259},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[150,117262,117263],{},[558,117264,117266],{"href":117265},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[15,117268,117269],{"id":117269},"推荐学习路线",[20,117271,117274],{"className":117272,"code":117273,"language":5369,"meta":25},[5367],"环境安装\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",[27,117275,117273],{"__ignoreMap":25},[157,117277,117278],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[15,117280,117281],{"id":117281},"建议的目录结构",[157,117283,117284],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[20,117286,117288],{"className":22,"code":117287,"language":24,"meta":25,"style":25},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[27,117289,117290,117298],{"__ignoreMap":25},[30,117291,117292,117294,117296],{"class":32,"line":33},[30,117293,101404],{"class":36},[30,117295,29354],{"class":40},[30,117297,101409],{"class":74},[30,117299,117300,117302],{"class":32,"line":44},[30,117301,101414],{"class":40},[30,117303,101409],{"class":74},[157,117305,117306],{},"每一章的代码都单独保存：",[20,117308,117311],{"className":117309,"code":117310,"language":5369,"meta":25},[5367],"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",[27,117312,117310],{"__ignoreMap":25},[157,117314,117315],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[15,117317,117318],{"id":117318},"学习方法",[157,117320,117321],{},"每章建议按这个顺序操作：",[271,117323,117324,117327,117330,117333,117336,117339],{},[150,117325,117326],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[150,117328,117329],{},"复制最小可运行代码，保存成指定文件。",[150,117331,117332],{},"运行代码，确认没有报错。",[150,117334,117335],{},"对照“运行结果说明”理解输出。",[150,117337,117338],{},"做“验证步骤”，主动改一两个参数。",[150,117340,117341],{},"遇到报错先看“常见错误与解决方案”。",[157,117343,117344],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[15,117346,117347],{"id":117347},"全局排错顺序",[157,117349,117350],{},"遇到问题时，按下面顺序查：",[271,117352,117353,117359,117365,117370,117373,117376,117383,117393],{},[150,117354,117355,117356],{},"Python 环境是否激活：",[27,117357,117358],{},"which python",[150,117360,117361,117362],{},"MuJoCo 是否能导入：",[27,117363,117364],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[150,117366,117367,117368],{},"是否误装了 ",[27,117369,101150],{},[150,117371,117372],{},"XML 标签是否闭合、属性是否拼写正确",[150,117374,117375],{},"actuator 引用的 joint 名字是否存在",[150,117377,117378,117380,117381],{},[27,117379,101214],{}," 的长度是否等于 ",[27,117382,102296],{},[150,117384,105723,117385,82677,117387,117389,117390],{},[27,117386,104168],{},[27,117388,104498],{}," 后是否调用了 ",[27,117391,117392],{},"mujoco.mj_forward",[150,117394,117395],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[234,117397,117398],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":44,"depth":44,"links":117400},[117401,117402,117403,117404,117405,117406,117407,117408],{"id":117042,"depth":44,"text":117042},{"id":117071,"depth":44,"text":117072},{"id":117101,"depth":44,"text":117101},{"id":117216,"depth":44,"text":117216},{"id":117269,"depth":44,"text":117269},{"id":117281,"depth":44,"text":117281},{"id":117318,"depth":44,"text":117318},{"id":117347,"depth":44,"text":117347},"仿真搭建。",{"category":23560},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116985,"description":117409},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117416,"title":117417,"body":117418,"description":242,"extension":243,"meta":117873,"navigation":245,"path":117874,"seo":117875,"stem":117876,"__hash__":117877},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117419,"toc":117871},[117420,117423,117426,117432,117868],[10,117421,117417],{"id":117422},"_1-最常用的基本操作更新",[157,117424,117425],{},"装linux系统教程：",[157,117427,117428],{},[558,117429,117430],{"href":117430,"rel":117431},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24045],[20,117433,117437],{"className":117434,"code":117435,"language":117436,"meta":25,"style":25},"language-Bash shiki shiki-themes github-light github-dark","#更新相关的知识\n# 更新软件包列表（从服务器获取最新软件信息）\nsudo apt update\n# 升级所有可更新的软件包（不删除旧包）\nsudo apt upgrade\n#更新和升级软件包\nsudo apt update && sudo apt upgrade -y\n#列出可更新的软件包及版本信息\napt list --upgradable\n#彻底升级（处理依赖关系，可能删除旧包）\nsudo apt full-upgrade\n#设置指定版本\nsudo apt install \u003Cpackage_name>=\u003Cversion_number>\n#只安装软件包不升级\nsudo apt install \u003Cpackage_name> --no-upgrade\n#只升级，不存在就不安装\nsudo apt install \u003Cpackage_name> --only-upgrade\n\n#安装指定的软件命令\nsudo apt install \u003Cpackage_name>\n\n#安装多个软件包\nsudo apt install \u003Cpackage_1> \u003Cpackage_2> \u003Cpackage_3>\n\n#更新指定的软件命令\nsudo apt update \u003Cpackage_name>\n\n#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\napt show \u003Cpackage_name>\n\n#删除软件包命令\nsudo apt remove \u003Cpackage_name>\n\n# 清理旧版本和缓存（释放磁盘空间）\nsudo apt autoremove  # 删除不再需要的依赖和库文件\nsudo apt clean       # 清理下载的缓存包\n\n#移除软件包及配置文件\nsudo apt purge \u003Cpackage_name>\n\n#查找软件包命令\nsudo apt search \u003Ckeyword>\n\n#列出所有已安装的包\napt list --installed\n\n#列出所有已安装的包的版本信息\napt list --all-versions\n","Bash",[27,117438,117439,117444,117449,117458,117463,117472,117477,117497,117502,117513,117518,117527,117532,117560,117565,117584,117589,117608,117612,117617,117633,117637,117642,117672,117676,117681,117697,117701,117706,117721,117725,117730,117746,117750,117755,117767,117779,117783,117788,117805,117809,117814,117832,117836,117841,117850,117854,117859],{"__ignoreMap":25},[30,117440,117441],{"class":32,"line":33},[30,117442,117443],{"class":379},"#更新相关的知识\n",[30,117445,117446],{"class":32,"line":44},[30,117447,117448],{"class":379},"# 更新软件包列表（从服务器获取最新软件信息）\n",[30,117450,117451,117453,117456],{"class":32,"line":52},[30,117452,24757],{"class":36},[30,117454,117455],{"class":74}," apt",[30,117457,26380],{"class":74},[30,117459,117460],{"class":32,"line":60},[30,117461,117462],{"class":379},"# 升级所有可更新的软件包（不删除旧包）\n",[30,117464,117465,117467,117469],{"class":32,"line":68},[30,117466,24757],{"class":36},[30,117468,117455],{"class":74},[30,117470,117471],{"class":74}," upgrade\n",[30,117473,117474],{"class":32,"line":80},[30,117475,117476],{"class":379},"#更新和升级软件包\n",[30,117478,117479,117481,117483,117486,117488,117490,117492,117495],{"class":32,"line":88},[30,117480,24757],{"class":36},[30,117482,117455],{"class":74},[30,117484,117485],{"class":74}," update",[30,117487,26328],{"class":321},[30,117489,24757],{"class":36},[30,117491,117455],{"class":74},[30,117493,117494],{"class":74}," upgrade",[30,117496,101119],{"class":40},[30,117498,117499],{"class":32,"line":96},[30,117500,117501],{"class":379},"#列出可更新的软件包及版本信息\n",[30,117503,117504,117507,117510],{"class":32,"line":104},[30,117505,117506],{"class":36},"apt",[30,117508,117509],{"class":74}," list",[30,117511,117512],{"class":40}," --upgradable\n",[30,117514,117515],{"class":32,"line":112},[30,117516,117517],{"class":379},"#彻底升级（处理依赖关系，可能删除旧包）\n",[30,117519,117520,117522,117524],{"class":32,"line":123},[30,117521,24757],{"class":36},[30,117523,117455],{"class":74},[30,117525,117526],{"class":74}," full-upgrade\n",[30,117528,117529],{"class":32,"line":131},[30,117530,117531],{"class":379},"#设置指定版本\n",[30,117533,117534,117536,117538,117540,117542,117545,117547,117549,117551,117553,117556,117558],{"class":32,"line":142},[30,117535,24757],{"class":36},[30,117537,117455],{"class":74},[30,117539,24014],{"class":74},[30,117541,29040],{"class":317},[30,117543,117544],{"class":74},"package_nam",[30,117546,395],{"class":321},[30,117548,1280],{"class":317},[30,117550,367],{"class":74},[30,117552,1230],{"class":317},[30,117554,117555],{"class":74},"version_numbe",[30,117557,990],{"class":321},[30,117559,51445],{"class":317},[30,117561,117562],{"class":32,"line":1811},[30,117563,117564],{"class":379},"#只安装软件包不升级\n",[30,117566,117567,117569,117571,117573,117575,117577,117579,117581],{"class":32,"line":1825},[30,117568,24757],{"class":36},[30,117570,117455],{"class":74},[30,117572,24014],{"class":74},[30,117574,29040],{"class":317},[30,117576,117544],{"class":74},[30,117578,395],{"class":321},[30,117580,1280],{"class":317},[30,117582,117583],{"class":40}," --no-upgrade\n",[30,117585,117586],{"class":32,"line":1830},[30,117587,117588],{"class":379},"#只升级，不存在就不安装\n",[30,117590,117591,117593,117595,117597,117599,117601,117603,117605],{"class":32,"line":1836},[30,117592,24757],{"class":36},[30,117594,117455],{"class":74},[30,117596,24014],{"class":74},[30,117598,29040],{"class":317},[30,117600,117544],{"class":74},[30,117602,395],{"class":321},[30,117604,1280],{"class":317},[30,117606,117607],{"class":40}," --only-upgrade\n",[30,117609,117610],{"class":32,"line":1857},[30,117611,2582],{"emptyLinePlaceholder":245},[30,117613,117614],{"class":32,"line":1862},[30,117615,117616],{"class":379},"#安装指定的软件命令\n",[30,117618,117619,117621,117623,117625,117627,117629,117631],{"class":32,"line":1876},[30,117620,24757],{"class":36},[30,117622,117455],{"class":74},[30,117624,24014],{"class":74},[30,117626,29040],{"class":317},[30,117628,117544],{"class":74},[30,117630,395],{"class":321},[30,117632,51445],{"class":317},[30,117634,117635],{"class":32,"line":1881},[30,117636,2582],{"emptyLinePlaceholder":245},[30,117638,117639],{"class":32,"line":1910},[30,117640,117641],{"class":379},"#安装多个软件包\n",[30,117643,117644,117646,117648,117650,117652,117655,117658,117660,117662,117665,117667,117669],{"class":32,"line":1915},[30,117645,24757],{"class":36},[30,117647,117455],{"class":74},[30,117649,24014],{"class":74},[30,117651,29040],{"class":317},[30,117653,117654],{"class":74},"package_",[30,117656,117657],{"class":317},"1>",[30,117659,29040],{"class":317},[30,117661,117654],{"class":74},[30,117663,117664],{"class":317},"2>",[30,117666,29040],{"class":317},[30,117668,117654],{"class":74},[30,117670,117671],{"class":317},"3>\n",[30,117673,117674],{"class":32,"line":1932},[30,117675,2582],{"emptyLinePlaceholder":245},[30,117677,117678],{"class":32,"line":1937},[30,117679,117680],{"class":379},"#更新指定的软件命令\n",[30,117682,117683,117685,117687,117689,117691,117693,117695],{"class":32,"line":1942},[30,117684,24757],{"class":36},[30,117686,117455],{"class":74},[30,117688,117485],{"class":74},[30,117690,29040],{"class":317},[30,117692,117544],{"class":74},[30,117694,395],{"class":321},[30,117696,51445],{"class":317},[30,117698,117699],{"class":32,"line":1947},[30,117700,2582],{"emptyLinePlaceholder":245},[30,117702,117703],{"class":32,"line":1961},[30,117704,117705],{"class":379},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[30,117707,117708,117710,117713,117715,117717,117719],{"class":32,"line":1966},[30,117709,117506],{"class":36},[30,117711,117712],{"class":74}," show",[30,117714,29040],{"class":317},[30,117716,117544],{"class":74},[30,117718,395],{"class":321},[30,117720,51445],{"class":317},[30,117722,117723],{"class":32,"line":2759},[30,117724,2582],{"emptyLinePlaceholder":245},[30,117726,117727],{"class":32,"line":2773},[30,117728,117729],{"class":379},"#删除软件包命令\n",[30,117731,117732,117734,117736,117738,117740,117742,117744],{"class":32,"line":2781},[30,117733,24757],{"class":36},[30,117735,117455],{"class":74},[30,117737,26217],{"class":74},[30,117739,29040],{"class":317},[30,117741,117544],{"class":74},[30,117743,395],{"class":321},[30,117745,51445],{"class":317},[30,117747,117748],{"class":32,"line":2786},[30,117749,2582],{"emptyLinePlaceholder":245},[30,117751,117752],{"class":32,"line":2792},[30,117753,117754],{"class":379},"# 清理旧版本和缓存（释放磁盘空间）\n",[30,117756,117757,117759,117761,117764],{"class":32,"line":2798},[30,117758,24757],{"class":36},[30,117760,117455],{"class":74},[30,117762,117763],{"class":74}," autoremove",[30,117765,117766],{"class":379},"  # 删除不再需要的依赖和库文件\n",[30,117768,117769,117771,117773,117776],{"class":32,"line":2803},[30,117770,24757],{"class":36},[30,117772,117455],{"class":74},[30,117774,117775],{"class":74}," clean",[30,117777,117778],{"class":379},"       # 清理下载的缓存包\n",[30,117780,117781],{"class":32,"line":8130},[30,117782,2582],{"emptyLinePlaceholder":245},[30,117784,117785],{"class":32,"line":8154},[30,117786,117787],{"class":379},"#移除软件包及配置文件\n",[30,117789,117790,117792,117794,117797,117799,117801,117803],{"class":32,"line":8159},[30,117791,24757],{"class":36},[30,117793,117455],{"class":74},[30,117795,117796],{"class":74}," purge",[30,117798,29040],{"class":317},[30,117800,117544],{"class":74},[30,117802,395],{"class":321},[30,117804,51445],{"class":317},[30,117806,117807],{"class":32,"line":8165},[30,117808,2582],{"emptyLinePlaceholder":245},[30,117810,117811],{"class":32,"line":8192},[30,117812,117813],{"class":379},"#查找软件包命令\n",[30,117815,117816,117818,117820,117823,117825,117828,117830],{"class":32,"line":8197},[30,117817,24757],{"class":36},[30,117819,117455],{"class":74},[30,117821,117822],{"class":74}," search",[30,117824,29040],{"class":317},[30,117826,117827],{"class":74},"keywor",[30,117829,634],{"class":321},[30,117831,51445],{"class":317},[30,117833,117834],{"class":32,"line":8203},[30,117835,2582],{"emptyLinePlaceholder":245},[30,117837,117838],{"class":32,"line":8215},[30,117839,117840],{"class":379},"#列出所有已安装的包\n",[30,117842,117843,117845,117847],{"class":32,"line":8227},[30,117844,117506],{"class":36},[30,117846,117509],{"class":74},[30,117848,117849],{"class":40}," --installed\n",[30,117851,117852],{"class":32,"line":8239},[30,117853,2582],{"emptyLinePlaceholder":245},[30,117855,117856],{"class":32,"line":9898},[30,117857,117858],{"class":379},"#列出所有已安装的包的版本信息\n",[30,117860,117861,117863,117865],{"class":32,"line":9923},[30,117862,117506],{"class":36},[30,117864,117509],{"class":74},[30,117866,117867],{"class":40}," --all-versions\n",[234,117869,117870],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":117872},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117417,"description":242},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117879,"title":117880,"body":117881,"description":242,"extension":243,"meta":118622,"navigation":245,"path":118623,"seo":118624,"stem":118625,"__hash__":118626},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117882,"toc":118609},[117883,117886,117890,117893,117899,117903,117907,117913,117918,117923,117928,117933,117938,117941,117944,117947,117950,117954,117957,117962,117965,117970,117973,117978,117985,117988,117991,117994,117997,118000,118011,118015,118019,118024,118029,118033,118038,118042,118047,118051,118055,118060,118063,118108,118113,118117,118121,118126,118132,118137,118147,118152,118162,118167,118172,118199,118203,118206,118211,118214,118239,118243,118248,118251,118256,118261,118281,118286,118289,118304,118308,118361,118364,118369,118373,118376,118391,118394,118397,118402,118406,118410,118413,118417,118421,118424,118429,118434,118438,118445,118453,118456,118463,118468,118473,118476,118481,118488,118493,118500,118504,118506,118511,118515,118518,118521,118526,118529,118534,118537,118542,118547,118552,118556,118561,118565,118606],[10,117884,117880],{"id":117885},"_2-linux装机教程",[15,117887,117889],{"id":117888},"_21-实体机","2.1 实体机",[157,117891,117892],{},"使用清华源：（Ubuntu24.04）",[157,117894,117895],{},[558,117896,117897],{"href":117897,"rel":117898},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24045],[15,117900,117902],{"id":117901},"_22-普通虚拟机","2.2 普通虚拟机",[287,117904,117906],{"id":117905},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[157,117908,117909],{},[558,117910,117911],{"href":117911,"rel":117912},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24045],[157,117914,117915],{},[160,117916],{"alt":25,"src":117917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[157,117919,117920],{},[160,117921],{"alt":25,"src":117922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[157,117924,117925],{},[160,117926],{"alt":25,"src":117927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[157,117929,117930],{},[160,117931],{"alt":25,"src":117932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[157,117934,117935],{},[160,117936],{"alt":25,"src":117937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[157,117939,117940],{},"内存4G（4096MB）；",[157,117942,117943],{},"CPU给4个核；",[157,117945,117946],{},"硬盘动态分配60G；",[157,117948,117949],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[287,117951,117953],{"id":117952},"_222-安装ubuntu","2.2.2 安装Ubuntu",[157,117955,117956],{},"按照1.1的步骤下载Ubuntu",[157,117958,117959],{},[160,117960],{"alt":25,"src":117961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[157,117963,117964],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[157,117966,117967],{},[160,117968],{"alt":25,"src":117969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[157,117971,117972],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[157,117974,117975],{},[160,117976],{"alt":25,"src":117977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[157,117979,117980,117981,117984],{},"选择“正常安装”(找不到都用Alt+F7)， ",[469,117982,117983],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[157,117986,117987],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[157,117989,117990],{},"将改动写入磁盘吗 继续",[157,117992,117993],{},"选择东八区（shanghai，大致在地图上点一下），继续",[157,117995,117996],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[157,117998,117999],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[157,118001,118002,118003,118006,118007,118010],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[469,118004,118005],{},"除了"," 选不发送系统信息与不升级之外， ",[469,118008,118009],{},"其它"," 都跳过或前进）",[287,118012,118014],{"id":118013},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22180,118016,118018],{"id":118017},"_2231-全屏","2.2.3.1 全屏",[157,118020,118021],{},[160,118022],{"alt":25,"src":118023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[157,118025,118026],{},[160,118027],{"alt":25,"src":118028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22180,118030,118032],{"id":118031},"_2232-文件交换","2.2.3.2 文件交换",[157,118034,118035],{},[160,118036],{"alt":25,"src":118037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22180,118039,118041],{"id":118040},"_2233-新建文本文档","2.2.3.3 新建文本文档",[157,118043,118044],{},[160,118045],{"alt":25,"src":118046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[15,118048,118050],{"id":118049},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[287,118052,118054],{"id":118053},"_231-简介与优缺点","2.3.1 简介与优缺点",[271,118056,118057],{},[150,118058,118059],{},"什么情况下推荐？",[157,118061,118062],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[271,118064,118065],{"start":44},[150,118066,118067,118068],{},"优缺点：",[271,118069,118070,118100],{},[150,118071,118072,118073],{},"优点：",[271,118074,118075,118078,118085,118088,118091,118094,118097],{},[150,118076,118077],{},"WSL2是最好的Linux发行版;(bushi)",[150,118079,118080,118081,118084],{},"性能损耗极低。且比在Windows上跑深度性能 ",[469,118082,118083],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[150,118086,118087],{},"非常方便调用USB设备，可以USB直通;",[150,118089,118090],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[150,118092,118093],{},"非常方便Win与WSL2互相传文件等协同操作;",[150,118095,118096],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[150,118098,118099],{},"非常方便使用Windows的VScode远程开发;",[150,118101,118102,118103],{},"缺点：",[271,118104,118105],{},[150,118106,118107],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[157,118109,118110],{},[160,118111],{"alt":25,"src":118112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[287,118114,118116],{"id":118115},"_232-安装教程","2.3.2 安装教程",[22180,118118,118120],{"id":118119},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[271,118122,118123],{},[150,118124,118125],{},"方法一(图形界面)",[157,118127,118128,118129,24799],{},"用Win+R输入",[27,118130,118131],{},"appwiz.cpl",[157,118133,118134],{},[160,118135],{"alt":25,"src":118136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[157,118138,118139,118140,118143,118144,26611],{},"点击OK进入 ",[469,118141,118142],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[469,118145,118146],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[157,118148,118149],{},[160,118150],{"alt":25,"src":118151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[157,118153,118154,118155,101156,118158,118161],{},"选择 ",[469,118156,118157],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[469,118159,118160],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[157,118163,118164],{},[160,118165],{"alt":25,"src":118166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[271,118168,118169],{"start":44},[150,118170,118171],{},"方法二(命令行)",[20,118173,118177],{"className":118174,"code":118175,"language":118176,"meta":25,"style":25},"language-PowerShell shiki shiki-themes github-light github-dark","# 开启 Linux 子系统\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n# 开启虚拟机平台\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n","PowerShell",[27,118178,118179,118184,118189,118194],{"__ignoreMap":25},[30,118180,118181],{"class":32,"line":33},[30,118182,118183],{},"# 开启 Linux 子系统\n",[30,118185,118186],{"class":32,"line":44},[30,118187,118188],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[30,118190,118191],{"class":32,"line":52},[30,118192,118193],{},"# 开启虚拟机平台\n",[30,118195,118196],{"class":32,"line":60},[30,118197,118198],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22180,118200,118202],{"id":118201},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[157,118204,118205],{},"用管理员权限打开powershell",[157,118207,118208],{},[160,118209],{"alt":25,"src":118210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[157,118212,118213],{},"升级WSL并设置默认版本为WSL2",[20,118215,118217],{"className":118174,"code":118216,"language":118176,"meta":25,"style":25},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[27,118218,118219,118224,118229,118234],{"__ignoreMap":25},[30,118220,118221],{"class":32,"line":33},[30,118222,118223],{},"# 更新 wsl\n",[30,118225,118226],{"class":32,"line":44},[30,118227,118228],{},"wsl --update\n",[30,118230,118231],{"class":32,"line":52},[30,118232,118233],{},"# 将 wsl 版本设置为 wsl2\n",[30,118235,118236],{"class":32,"line":60},[30,118237,118238],{},"wsl --set-default-version 2\n",[22180,118240,118242],{"id":118241},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[271,118244,118245],{},[150,118246,118247],{},"方式一(商店下载)",[157,118249,118250],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[157,118252,118253],{},[160,118254],{"alt":25,"src":118255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[271,118257,118258],{"start":44},[150,118259,118260],{},"方式二(命令行安装)",[20,118262,118264],{"className":118174,"code":118263,"language":118176,"meta":25,"style":25},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[27,118265,118266,118271,118276],{"__ignoreMap":25},[30,118267,118268],{"class":32,"line":33},[30,118269,118270],{},"# 列出可安装的 Linux 版本\n",[30,118272,118273],{"class":32,"line":44},[30,118274,118275],{},"#（需要科学手段）\n",[30,118277,118278],{"class":32,"line":52},[30,118279,118280],{},"wsl --list --online\n",[157,118282,118283],{},[160,118284],{"alt":25,"src":118285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[157,118287,118288],{},"选择对应发行版并安装",[20,118290,118292],{"className":118174,"code":118291,"language":118176,"meta":25,"style":25},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[27,118293,118294,118299],{"__ignoreMap":25},[30,118295,118296],{"class":32,"line":33},[30,118297,118298],{},"# Ubuntu安装完毕后需要重启系统\n",[30,118300,118301],{"class":32,"line":44},[30,118302,118303],{},"wsl --install -d Ubuntu-24.04\n",[22180,118305,118307],{"id":118306},"_2324-查看系统状态","2.3.2.4 查看系统状态",[20,118309,118311],{"className":118174,"code":118310,"language":118176,"meta":25,"style":25},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[27,118312,118313,118318,118323,118328,118333,118337,118341,118346,118351,118356],{"__ignoreMap":25},[30,118314,118315],{"class":32,"line":33},[30,118316,118317],{},"# 查看 wsl\n",[30,118319,118320],{"class":32,"line":44},[30,118321,118322],{},"wsl -l\n",[30,118324,118325],{"class":32,"line":52},[30,118326,118327],{},"# 查看 wsl 运行版本或模式\n",[30,118329,118330],{"class":32,"line":60},[30,118331,118332],{},"wsl -l -v\n",[30,118334,118335],{"class":32,"line":68},[30,118336,2582],{"emptyLinePlaceholder":245},[30,118338,118339],{"class":32,"line":80},[30,118340,2582],{"emptyLinePlaceholder":245},[30,118342,118343],{"class":32,"line":88},[30,118344,118345],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[30,118347,118348],{"class":32,"line":96},[30,118349,118350],{},"wsl --set-version \u003Cdistro> 2\n",[30,118352,118353],{"class":32,"line":104},[30,118354,118355],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[30,118357,118358],{"class":32,"line":112},[30,118359,118360],{},"wsl --unregister \u003Cdistro>\n",[157,118362,118363],{},"输出Version为2即正常",[157,118365,118366],{},[160,118367],{"alt":25,"src":118368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22180,118370,118372],{"id":118371},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[157,118374,118375],{},"直接在Powershell里输入wsl命令进入子系统",[20,118377,118379],{"className":118174,"code":118378,"language":118176,"meta":25,"style":25},"# 进入子系统\nwsl\n",[27,118380,118381,118386],{"__ignoreMap":25},[30,118382,118383],{"class":32,"line":33},[30,118384,118385],{},"# 进入子系统\n",[30,118387,118388],{"class":32,"line":44},[30,118389,118390],{},"wsl\n",[157,118392,118393],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[157,118395,118396],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[157,118398,118399],{},[160,118400],{"alt":25,"src":118401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[287,118403,118405],{"id":118404},"_233-配置各种环境","2.3.3 配置各种环境",[22180,118407,118409],{"id":118408},"_2331-换源","2.3.3.1 换源",[157,118411,118412],{},"(同实体机LINUX，往下找教程)",[22180,118414,118416],{"id":118415},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23092,118418,118420],{"id":118419},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[157,118422,118423],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[157,118425,118426],{},[160,118427],{"alt":25,"src":118428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[157,118430,118431],{},[160,118432],{"alt":25,"src":118433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23092,118435,118437],{"id":118436},"_23322-cuda","2.3.3.2.2 CUDA",[157,118439,118440,118441],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[558,118442,118443],{"href":118443,"rel":118444},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24045],[157,118446,118447,118450],{},[160,118448],{"alt":25,"src":118449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[160,118451],{"alt":25,"src":118452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[157,118454,118455],{},"在下方的网站，选择合适的版本。",[157,118457,118458,118459],{},"WSL2 专属 CUDA 指南：",[558,118460,118461],{"href":118461,"rel":118462},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24045],[157,118464,118465],{},[469,118466,118467],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[157,118469,118470],{},[160,118471],{"alt":25,"src":118472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[157,118474,118475],{},"挨行敲一遍",[157,118477,118478],{},[160,118479],{"alt":25,"src":118480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[157,118482,118483,118484,118487],{},"敲完后，输入",[27,118485,118486],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[157,118489,118490],{},[160,118491],{"alt":25,"src":118492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[157,118494,118495,118496,118499],{},"（请详看下方教程的",[469,118497,118498],{},"安装CUDA的配置环境来看","如何配置环境）",[23092,118501,118503],{"id":118502},"_23323-cudnn","2.3.3.2.3 cuDNN",[157,118505,118412],{},[157,118507,118508],{},[160,118509],{"alt":25,"src":118510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22180,118512,118514],{"id":118513},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[157,118516,118517],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[157,118519,118520],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[157,118522,118523],{},[160,118524],{"alt":25,"src":118525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[157,118527,118528],{},"连接WSL2",[157,118530,118531],{},[160,118532],{"alt":25,"src":118533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[157,118535,118536],{},"远程开发成功。",[157,118538,118539],{},[160,118540],{"alt":25,"src":118541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[157,118543,118544],{},[160,118545],{"alt":25,"src":118546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[157,118548,118549],{},[160,118550],{"alt":25,"src":118551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22180,118553,118555],{"id":118554},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[157,118557,118558],{},[160,118559],{"alt":25,"src":118560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22180,118562,118564],{"id":118563},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[20,118566,118568],{"className":117434,"code":118567,"language":117436,"meta":25,"style":25},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[27,118569,118570,118578,118586,118597,118601],{"__ignoreMap":25},[30,118571,118572,118574,118576],{"class":32,"line":33},[30,118573,24757],{"class":36},[30,118575,117455],{"class":74},[30,118577,26380],{"class":74},[30,118579,118580,118582,118584],{"class":32,"line":44},[30,118581,24757],{"class":36},[30,118583,117455],{"class":74},[30,118585,117471],{"class":74},[30,118587,118588,118590,118592,118594],{"class":32,"line":52},[30,118589,24757],{"class":36},[30,118591,117455],{"class":74},[30,118593,24014],{"class":74},[30,118595,118596],{"class":74}," mesa-utils\n",[30,118598,118599],{"class":32,"line":60},[30,118600,2582],{"emptyLinePlaceholder":245},[30,118602,118603],{"class":32,"line":68},[30,118604,118605],{"class":379},"#然后重启wsl2即可\n",[234,118607,118608],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":44,"depth":44,"links":118610},[118611,118612,118617],{"id":117888,"depth":44,"text":117889},{"id":117901,"depth":44,"text":117902,"children":118613},[118614,118615,118616],{"id":117905,"depth":52,"text":117906},{"id":117952,"depth":52,"text":117953},{"id":118013,"depth":52,"text":118014},{"id":118049,"depth":44,"text":118050,"children":118618},[118619,118620,118621],{"id":118053,"depth":52,"text":118054},{"id":118115,"depth":52,"text":118116},{"id":118404,"depth":52,"text":118405},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117880,"description":242},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118628,"title":118629,"body":118630,"description":242,"extension":243,"meta":121566,"navigation":245,"path":121567,"seo":121568,"stem":121569,"__hash__":121570},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118631,"toc":121538},[118632,118635,118639,118645,118649,118655,118659,118847,118850,118855,118859,118863,118866,118869,118875,118880,118883,118886,118891,118924,118929,118933,119010,119013,119018,119022,119025,119064,119067,119076,119094,119099,119106,119223,119228,119231,119258,119263,119267,119276,119326,119333,119337,119340,119354,119361,119395,119400,119404,119427,119430,119435,119439,119442,119445,119448,119490,119494,119497,119500,119541,119545,119549,119552,119557,119562,119565,119588,119591,119599,119604,119607,119612,119617,119620,119625,119629,119634,119657,119662,119724,119732,119737,119742,119745,119750,119753,119758,119763,119781,119786,119792,119797,119811,119815,119818,119821,119824,119867,119870,119875,119976,119979,119984,119988,119992,120029,120033,120037,120041,120087,120091,120136,120140,120147,120155,120210,120213,120290,120293,120316,120320,120323,120328,120333,120341,120344,120349,120354,120359,120362,120367,120376,120379,120384,120387,120458,120463,120466,120471,120474,120479,120482,120487,120490,120495,120500,120503,120578,120581,120594,120599,120602,120616,120619,120648,120653,120682,120685,120690,120694,120699,120708,120711,120716,120719,120724,120727,120730,120735,120738,120743,120748,120751,120756,120759,120884,120889,120919,120922,120927,120932,120949,120952,120995,120998,121025,121030,121043,121186,121190,121195,121209,121212,121263,121266,121296,121299,121315,121320,121334,121337,121404,121409,121418,121423,121426,121438,121443,121450,121474,121477,121482,121485,121504,121509,121516,121528,121535],[10,118633,118629],{"id":118634},"_3-安装必备配置",[15,118636,118638],{"id":118637},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[20,118640,118643],{"className":118641,"code":118642,"language":5369},[5367],"  打开下方网站（注意，该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",[27,118644,118642],{"__ignoreMap":25},[287,118646,118648],{"id":118647},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[20,118650,118653],{"className":118651,"code":118652,"language":5369},[5367],"  输入以下命令\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",[27,118654,118652],{"__ignoreMap":25},[287,118656,118658],{"id":118657},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[20,118660,118664],{"className":118661,"code":118662,"language":118663,"meta":25,"style":25},"language-Shell shiki shiki-themes github-light github-dark","sudo apt update\nsudo apt install vim\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list.d\u002F**\n\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n```\n\n\n选择好Ubuntu版本后，复制下方的内容。\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png)\n\n粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png)\n\n按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png)\n\n输入以下命令\n\n```Bash\nsudo apt update\n","Shell",[27,118665,118666,118674,118685,118697,118711,118715,118725,118730,118734,118738,118743,118747,118759,118763,118768,118772,118783,118787,118803,118807,118818,118822,118827,118831,118839],{"__ignoreMap":25},[30,118667,118668,118670,118672],{"class":32,"line":33},[30,118669,24757],{"class":36},[30,118671,117455],{"class":74},[30,118673,26380],{"class":74},[30,118675,118676,118678,118680,118682],{"class":32,"line":44},[30,118677,24757],{"class":36},[30,118679,117455],{"class":74},[30,118681,24014],{"class":74},[30,118683,118684],{"class":74}," vim\n",[30,118686,118687,118689,118692,118694],{"class":32,"line":52},[30,118688,24757],{"class":36},[30,118690,118691],{"class":74}," rm",[30,118693,179],{"class":40},[30,118695,118696],{"class":74}," \u002Fetc\u002Fapt\u002Fsources.list\n",[30,118698,118699,118701,118703,118705,118708],{"class":32,"line":60},[30,118700,24757],{"class":36},[30,118702,118691],{"class":74},[30,118704,179],{"class":40},[30,118706,118707],{"class":74}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[30,118709,118710],{"class":40},"**\n",[30,118712,118713],{"class":32,"line":68},[30,118714,2582],{"emptyLinePlaceholder":245},[30,118716,118717,118719,118722],{"class":32,"line":80},[30,118718,24757],{"class":36},[30,118720,118721],{"class":74}," vim",[30,118723,118724],{"class":74}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[30,118726,118727],{"class":32,"line":88},[30,118728,118729],{"class":74},"```\n",[30,118731,118732],{"class":32,"line":96},[30,118733,2582],{"emptyLinePlaceholder":245},[30,118735,118736],{"class":32,"line":104},[30,118737,2582],{"emptyLinePlaceholder":245},[30,118739,118740],{"class":32,"line":112},[30,118741,118742],{"class":36},"选择好Ubuntu版本后，复制下方的内容。\n",[30,118744,118745],{"class":32,"line":123},[30,118746,2582],{"emptyLinePlaceholder":245},[30,118748,118749,118751,118754,118757],{"class":32,"line":131},[30,118750,546],{"class":317},[30,118752,118753],{"class":74},"[](",[30,118755,118756],{"class":36},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[30,118758,328],{"class":74},[30,118760,118761],{"class":32,"line":142},[30,118762,2582],{"emptyLinePlaceholder":245},[30,118764,118765],{"class":32,"line":1811},[30,118766,118767],{"class":36},"粘贴进去\n",[30,118769,118770],{"class":32,"line":1825},[30,118771,2582],{"emptyLinePlaceholder":245},[30,118773,118774,118776,118778,118781],{"class":32,"line":1830},[30,118775,546],{"class":317},[30,118777,118753],{"class":74},[30,118779,118780],{"class":36},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[30,118782,328],{"class":74},[30,118784,118785],{"class":32,"line":1836},[30,118786,2582],{"emptyLinePlaceholder":245},[30,118788,118789,118792,118795,118798,118800],{"class":32,"line":1857},[30,118790,118791],{"class":36},"按一下ESC，然后英文冒号，输入",[30,118793,118794],{"class":74}," `",[30,118796,118797],{"class":36},":wq!",[30,118799,1292],{"class":74},[30,118801,118802],{"class":36},"然后回车\n",[30,118804,118805],{"class":32,"line":1862},[30,118806,2582],{"emptyLinePlaceholder":245},[30,118808,118809,118811,118813,118816],{"class":32,"line":1876},[30,118810,546],{"class":317},[30,118812,118753],{"class":74},[30,118814,118815],{"class":36},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[30,118817,328],{"class":74},[30,118819,118820],{"class":32,"line":1881},[30,118821,2582],{"emptyLinePlaceholder":245},[30,118823,118824],{"class":32,"line":1910},[30,118825,118826],{"class":36},"输入以下命令\n",[30,118828,118829],{"class":32,"line":1915},[30,118830,2582],{"emptyLinePlaceholder":245},[30,118832,118833,118836],{"class":32,"line":1932},[30,118834,118835],{"class":74},"```",[30,118837,118838],{"class":36},"Bash\n",[30,118840,118841,118843,118845],{"class":32,"line":1937},[30,118842,24757],{"class":36},[30,118844,117455],{"class":74},[30,118846,26380],{"class":74},[157,118848,118849],{},"这里被替换成对应学校则成功",[157,118851,118852],{},[160,118853],{"alt":25,"src":118854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[15,118856,118858],{"id":118857},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[287,118860,118862],{"id":118861},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[157,118864,118865],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[157,118867,118868],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[157,118870,118871],{},[558,118872,118873],{"href":118873,"rel":118874},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24045],[157,118876,118877],{},[160,118878],{"alt":25,"src":118879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[157,118881,118882],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[157,118884,118885],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[157,118887,118888],{},[160,118889],{"alt":25,"src":118890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[20,118892,118894],{"className":117434,"code":118893,"language":117436,"meta":25,"style":25},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[27,118895,118896,118901,118908,118913],{"__ignoreMap":25},[30,118897,118898],{"class":32,"line":33},[30,118899,118900],{"class":379},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[30,118902,118903,118905],{"class":32,"line":44},[30,118904,101414],{"class":40},[30,118906,118907],{"class":74}," ~\u002FDownloads\n",[30,118909,118910],{"class":32,"line":52},[30,118911,118912],{"class":379},"#下方chrome安装包名不一定是这个，根据名字来看\n",[30,118914,118915,118917,118919,118921],{"class":32,"line":60},[30,118916,24757],{"class":36},[30,118918,117455],{"class":74},[30,118920,24014],{"class":74},[30,118922,118923],{"class":74}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[157,118925,118926],{},[160,118927],{"alt":25,"src":118928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[287,118930,118932],{"id":118931},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[20,118934,118936],{"className":117434,"code":118935,"language":117436,"meta":25,"style":25},"# 老版\nsudo apt update\nsudo apt install neofetch\nneofetch\n\n# 新版\nsudo add-apt-repository ppa:zhangsongcui3371\u002Ffastfetch\nsudo apt update\nsudo apt install fastfetch\nfastfetch\n",[27,118937,118938,118943,118951,118962,118967,118971,118976,118986,118994,119005],{"__ignoreMap":25},[30,118939,118940],{"class":32,"line":33},[30,118941,118942],{"class":379},"# 老版\n",[30,118944,118945,118947,118949],{"class":32,"line":44},[30,118946,24757],{"class":36},[30,118948,117455],{"class":74},[30,118950,26380],{"class":74},[30,118952,118953,118955,118957,118959],{"class":32,"line":52},[30,118954,24757],{"class":36},[30,118956,117455],{"class":74},[30,118958,24014],{"class":74},[30,118960,118961],{"class":74}," neofetch\n",[30,118963,118964],{"class":32,"line":60},[30,118965,118966],{"class":36},"neofetch\n",[30,118968,118969],{"class":32,"line":68},[30,118970,2582],{"emptyLinePlaceholder":245},[30,118972,118973],{"class":32,"line":80},[30,118974,118975],{"class":379},"# 新版\n",[30,118977,118978,118980,118983],{"class":32,"line":88},[30,118979,24757],{"class":36},[30,118981,118982],{"class":74}," add-apt-repository",[30,118984,118985],{"class":74}," ppa:zhangsongcui3371\u002Ffastfetch\n",[30,118987,118988,118990,118992],{"class":32,"line":96},[30,118989,24757],{"class":36},[30,118991,117455],{"class":74},[30,118993,26380],{"class":74},[30,118995,118996,118998,119000,119002],{"class":32,"line":104},[30,118997,24757],{"class":36},[30,118999,117455],{"class":74},[30,119001,24014],{"class":74},[30,119003,119004],{"class":74}," fastfetch\n",[30,119006,119007],{"class":32,"line":112},[30,119008,119009],{"class":36},"fastfetch\n",[157,119011,119012],{},"这里显示，一共有3162个debian的程序，7个snap程序",[157,119014,119015],{},[160,119016],{"alt":25,"src":119017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[287,119019,119021],{"id":119020},"_323-移除snap应用","3.2.3 移除snap应用",[157,119023,119024],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[20,119026,119028],{"className":117434,"code":119027,"language":117436,"meta":25,"style":25},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[27,119029,119030,119042,119053],{"__ignoreMap":25},[30,119031,119032,119034,119036,119039],{"class":32,"line":33},[30,119033,24757],{"class":36},[30,119035,26651],{"class":74},[30,119037,119038],{"class":74}," disable",[30,119040,119041],{"class":74}," snapd.service\n",[30,119043,119044,119046,119048,119050],{"class":32,"line":44},[30,119045,24757],{"class":36},[30,119047,26651],{"class":74},[30,119049,119038],{"class":74},[30,119051,119052],{"class":74}," snapd.socket\n",[30,119054,119055,119057,119059,119061],{"class":32,"line":52},[30,119056,24757],{"class":36},[30,119058,26651],{"class":74},[30,119060,119038],{"class":74},[30,119062,119063],{"class":74}," snapd.seeded.service\n",[157,119065,119066],{},"然后查看snap应用列表",[157,119068,119069,119070,119075],{},"根据你安装的选择不同（最小安装或普通安装），有",[558,119071,119074],{"href":119072,"rel":119073},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24045],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[20,119077,119079],{"className":117434,"code":119078,"language":117436,"meta":25,"style":25},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[27,119080,119081,119086],{"__ignoreMap":25},[30,119082,119083],{"class":32,"line":33},[30,119084,119085],{"class":379},"# 查询当前系统上snap安装了哪些app\n",[30,119087,119088,119091],{"class":32,"line":44},[30,119089,119090],{"class":36},"snap",[30,119092,119093],{"class":74}," list\n",[157,119095,119096],{},[160,119097],{"alt":25,"src":119098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[157,119100,119101,119102,119105],{},"卸载掉图中所有应用，按照 ",[469,119103,119104],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[20,119107,119109],{"className":117434,"code":119108,"language":117436,"meta":25,"style":25},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\nsudo snap remove snap-store\n#移除firefox浏览器\nsudo snap remove firefox\n#移除gnome-42-2204\nsudo snap remove gnome-42-2204\n#移除gtk-common-themes\nsudo snap remove gtk-common-themes\n#移除其它...\n \n#移除core22,bare以及snapd\nsudo snap remove core22\nsudo snap remove bare\nsudo snap remove snapd\n",[27,119110,119111,119116,119128,119133,119144,119149,119160,119165,119176,119181,119185,119190,119201,119212],{"__ignoreMap":25},[30,119112,119113],{"class":32,"line":33},[30,119114,119115],{"class":379},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[30,119117,119118,119120,119123,119125],{"class":32,"line":44},[30,119119,24757],{"class":36},[30,119121,119122],{"class":74}," snap",[30,119124,26217],{"class":74},[30,119126,119127],{"class":74}," snap-store\n",[30,119129,119130],{"class":32,"line":52},[30,119131,119132],{"class":379},"#移除firefox浏览器\n",[30,119134,119135,119137,119139,119141],{"class":32,"line":60},[30,119136,24757],{"class":36},[30,119138,119122],{"class":74},[30,119140,26217],{"class":74},[30,119142,119143],{"class":74}," firefox\n",[30,119145,119146],{"class":32,"line":68},[30,119147,119148],{"class":379},"#移除gnome-42-2204\n",[30,119150,119151,119153,119155,119157],{"class":32,"line":80},[30,119152,24757],{"class":36},[30,119154,119122],{"class":74},[30,119156,26217],{"class":74},[30,119158,119159],{"class":74}," gnome-42-2204\n",[30,119161,119162],{"class":32,"line":88},[30,119163,119164],{"class":379},"#移除gtk-common-themes\n",[30,119166,119167,119169,119171,119173],{"class":32,"line":96},[30,119168,24757],{"class":36},[30,119170,119122],{"class":74},[30,119172,26217],{"class":74},[30,119174,119175],{"class":74}," gtk-common-themes\n",[30,119177,119178],{"class":32,"line":104},[30,119179,119180],{"class":379},"#移除其它...\n",[30,119182,119183],{"class":32,"line":112},[30,119184,2856],{"class":321},[30,119186,119187],{"class":32,"line":123},[30,119188,119189],{"class":379},"#移除core22,bare以及snapd\n",[30,119191,119192,119194,119196,119198],{"class":32,"line":131},[30,119193,24757],{"class":36},[30,119195,119122],{"class":74},[30,119197,26217],{"class":74},[30,119199,119200],{"class":74}," core22\n",[30,119202,119203,119205,119207,119209],{"class":32,"line":142},[30,119204,24757],{"class":36},[30,119206,119122],{"class":74},[30,119208,26217],{"class":74},[30,119210,119211],{"class":74}," bare\n",[30,119213,119214,119216,119218,119220],{"class":32,"line":1811},[30,119215,24757],{"class":36},[30,119217,119122],{"class":74},[30,119219,26217],{"class":74},[30,119221,119222],{"class":74}," snapd\n",[157,119224,119225],{},[160,119226],{"alt":25,"src":119227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[157,119229,119230],{},"输入以下命令查看是否还有snap包",[20,119232,119234],{"className":117434,"code":119233,"language":117436,"meta":25,"style":25},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[27,119235,119236,119242,119246,119250,119254],{"__ignoreMap":25},[30,119237,119238,119240],{"class":32,"line":33},[30,119239,119090],{"class":36},[30,119241,119093],{"class":74},[30,119243,119244],{"class":32,"line":44},[30,119245,118942],{"class":379},[30,119247,119248],{"class":32,"line":52},[30,119249,118966],{"class":36},[30,119251,119252],{"class":32,"line":60},[30,119253,118975],{"class":379},[30,119255,119256],{"class":32,"line":68},[30,119257,119009],{"class":36},[157,119259,119260],{},[160,119261],{"alt":25,"src":119262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[287,119264,119266],{"id":119265},"_324-移除snap","3.2.4 移除snap",[157,119268,119269,119270,119275],{},"在删除掉",[558,119271,119274],{"href":119272,"rel":119273},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24045],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[20,119277,119279],{"className":117434,"code":119278,"language":117436,"meta":25,"style":25}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[27,119280,119281,119286,119299,119304,119315],{"__ignoreMap":25},[30,119282,119283],{"class":32,"line":33},[30,119284,119285],{"class":379}," #使用apt移除掉snap\n",[30,119287,119288,119290,119292,119294,119297],{"class":32,"line":44},[30,119289,24757],{"class":36},[30,119291,117455],{"class":74},[30,119293,117763],{"class":74},[30,119295,119296],{"class":40}," --purge",[30,119298,119222],{"class":74},[30,119300,119301],{"class":32,"line":52},[30,119302,119303],{"class":379},"#移除snapd的一些目录\n",[30,119305,119306,119308,119310,119312],{"class":32,"line":60},[30,119307,24757],{"class":36},[30,119309,118691],{"class":74},[30,119311,179],{"class":40},[30,119313,119314],{"class":74}," \u002Fvar\u002Fcache\u002Fsnapd\n",[30,119316,119317,119319,119321,119323],{"class":32,"line":68},[30,119318,24757],{"class":36},[30,119320,118691],{"class":74},[30,119322,179],{"class":40},[30,119324,119325],{"class":74}," ~\u002Fsnap\n",[157,119327,119328,119329,119332],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[27,119330,119331],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[287,119334,119336],{"id":119335},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[157,119338,119339],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[20,119341,119343],{"className":117434,"code":119342,"language":117436,"meta":25,"style":25},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[27,119344,119345],{"__ignoreMap":25},[30,119346,119347,119349,119351],{"class":32,"line":33},[30,119348,24757],{"class":36},[30,119350,118721],{"class":74},[30,119352,119353],{"class":74}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[157,119355,119356,119357,119360],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[27,119358,119359],{},":wq"," 回车",[20,119362,119364],{"className":117434,"code":119363,"language":117436,"meta":25,"style":25},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[27,119365,119366,119373,119387],{"__ignoreMap":25},[30,119367,119368,119371],{"class":32,"line":33},[30,119369,119370],{"class":36},"Package:",[30,119372,119222],{"class":74},[30,119374,119375,119378,119381,119384],{"class":32,"line":44},[30,119376,119377],{"class":36},"Pin:",[30,119379,119380],{"class":74}," release",[30,119382,119383],{"class":74}," a=",[30,119385,119386],{"class":40},"*\n",[30,119388,119389,119392],{"class":32,"line":52},[30,119390,119391],{"class":36},"Pin-Priority:",[30,119393,119394],{"class":40}," -10\n",[157,119396,119397],{},[160,119398],{"alt":25,"src":119399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[287,119401,119403],{"id":119402},"_326-测试是否成功","3.2.6 测试是否成功",[20,119405,119407],{"className":117434,"code":119406,"language":117436,"meta":25,"style":25},"sudo apt update\nsudo apt install firefox\n",[27,119408,119409,119417],{"__ignoreMap":25},[30,119410,119411,119413,119415],{"class":32,"line":33},[30,119412,24757],{"class":36},[30,119414,117455],{"class":74},[30,119416,26380],{"class":74},[30,119418,119419,119421,119423,119425],{"class":32,"line":44},[30,119420,24757],{"class":36},[30,119422,117455],{"class":74},[30,119424,24014],{"class":74},[30,119426,119143],{"class":74},[157,119428,119429],{},"这里提示snapd无法被安装，就证明成功了",[157,119431,119432],{},[160,119433],{"alt":25,"src":119434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[287,119436,119438],{"id":119437},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[157,119440,119441],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[157,119443,119444],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[157,119446,119447],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[20,119449,119451],{"className":117434,"code":119450,"language":117436,"meta":25,"style":25},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[27,119452,119453,119458,119467,119472,119480],{"__ignoreMap":25},[30,119454,119455],{"class":32,"line":33},[30,119456,119457],{"class":379},"# 添加Mozilla提供的源\n",[30,119459,119460,119462,119464],{"class":32,"line":44},[30,119461,24757],{"class":36},[30,119463,118982],{"class":74},[30,119465,119466],{"class":74}," ppa:mozillateam\u002Fppa\n",[30,119468,119469],{"class":32,"line":52},[30,119470,119471],{"class":379},"# 安装Firefox\n",[30,119473,119474,119476,119478],{"class":32,"line":60},[30,119475,24757],{"class":36},[30,119477,117455],{"class":74},[30,119479,26380],{"class":74},[30,119481,119482,119484,119486,119488],{"class":32,"line":68},[30,119483,24757],{"class":36},[30,119485,117455],{"class":74},[30,119487,24014],{"class":74},[30,119489,119143],{"class":74},[287,119491,119493],{"id":119492},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[157,119495,119496],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[157,119498,119499],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[20,119501,119503],{"className":117434,"code":119502,"language":117436,"meta":25,"style":25},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[27,119504,119505,119510,119520,119528,119532],{"__ignoreMap":25},[30,119506,119507],{"class":32,"line":33},[30,119508,119509],{"class":379},"#删掉禁止安装snap的配置文件\n",[30,119511,119512,119514,119516,119518],{"class":32,"line":44},[30,119513,24757],{"class":36},[30,119515,118691],{"class":74},[30,119517,179],{"class":40},[30,119519,119353],{"class":74},[30,119521,119522,119524,119526],{"class":32,"line":52},[30,119523,24757],{"class":36},[30,119525,117455],{"class":74},[30,119527,26380],{"class":74},[30,119529,119530],{"class":32,"line":60},[30,119531,2582],{"emptyLinePlaceholder":245},[30,119533,119534,119536,119538],{"class":32,"line":68},[30,119535,24757],{"class":36},[30,119537,117455],{"class":74},[30,119539,119540],{"class":74}," dist-update\n",[15,119542,119544],{"id":119543},"_33-中文输入法","3.3 中文输入法",[287,119546,119548],{"id":119547},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[157,119550,119551],{},"官网下载搜狗输入法",[157,119553,119554],{},[160,119555],{"alt":25,"src":119556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[157,119558,119559],{},[160,119560],{"alt":25,"src":119561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[157,119563,119564],{},"打开终端输入如下",[20,119566,119568],{"className":117434,"code":119567,"language":117436,"meta":25,"style":25},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[27,119569,119570,119577],{"__ignoreMap":25},[30,119571,119572,119574],{"class":32,"line":33},[30,119573,101414],{"class":40},[30,119575,119576],{"class":74}," ~\u002FDownloads\u002F\n",[30,119578,119579,119581,119583,119585],{"class":32,"line":44},[30,119580,24757],{"class":36},[30,119582,117455],{"class":74},[30,119584,24014],{"class":74},[30,119586,119587],{"class":74}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[157,119589,119590],{},"打开Fcitx",[157,119592,119593,119596],{},[160,119594],{"alt":25,"src":119595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[160,119597],{"alt":25,"src":119598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[157,119600,119601],{},[160,119602],{"alt":25,"src":119603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[157,119605,119606],{},"添加搜狗输入法",[157,119608,119609],{},[160,119610],{"alt":25,"src":119611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[157,119613,119614],{},[160,119615],{"alt":25,"src":119616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[157,119618,119619],{},"将搜狗输入法设置为唯一输入法",[157,119621,119622],{},[160,119623],{"alt":25,"src":119624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[287,119626,119628],{"id":119627},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[271,119630,119631],{},[150,119632,119633],{},"卸载旧输入法",[20,119635,119637],{"className":118661,"code":119636,"language":118663,"meta":25,"style":25},"sudo apt purge fcitx* ibus*\n",[27,119638,119639],{"__ignoreMap":25},[30,119640,119641,119643,119645,119647,119650,119652,119655],{"class":32,"line":33},[30,119642,24757],{"class":36},[30,119644,117455],{"class":74},[30,119646,117796],{"class":74},[30,119648,119649],{"class":74}," fcitx",[30,119651,775],{"class":40},[30,119653,119654],{"class":74}," ibus",[30,119656,119386],{"class":40},[271,119658,119659],{"start":44},[150,119660,119661],{},"安装Fcitx5",[20,119663,119665],{"className":117434,"code":119664,"language":117436,"meta":25,"style":25},"# Ubuntu22.04及以上、Debian12及以上\nsudo apt install fcitx5 fcitx5-chinese-addons\n\n# Ubuntu20.04\nsudo add-apt-repository ppa:zhsj\u002Ffcitx5\nsudo apt update\nsudo apt install fcitx5 fcitx5-chinese-addons\n",[27,119666,119667,119672,119686,119690,119695,119704,119712],{"__ignoreMap":25},[30,119668,119669],{"class":32,"line":33},[30,119670,119671],{"class":379},"# Ubuntu22.04及以上、Debian12及以上\n",[30,119673,119674,119676,119678,119680,119683],{"class":32,"line":44},[30,119675,24757],{"class":36},[30,119677,117455],{"class":74},[30,119679,24014],{"class":74},[30,119681,119682],{"class":74}," fcitx5",[30,119684,119685],{"class":74}," fcitx5-chinese-addons\n",[30,119687,119688],{"class":32,"line":52},[30,119689,2582],{"emptyLinePlaceholder":245},[30,119691,119692],{"class":32,"line":60},[30,119693,119694],{"class":379},"# Ubuntu20.04\n",[30,119696,119697,119699,119701],{"class":32,"line":68},[30,119698,24757],{"class":36},[30,119700,118982],{"class":74},[30,119702,119703],{"class":74}," ppa:zhsj\u002Ffcitx5\n",[30,119705,119706,119708,119710],{"class":32,"line":80},[30,119707,24757],{"class":36},[30,119709,117455],{"class":74},[30,119711,26380],{"class":74},[30,119713,119714,119716,119718,119720,119722],{"class":32,"line":88},[30,119715,24757],{"class":36},[30,119717,117455],{"class":74},[30,119719,24014],{"class":74},[30,119721,119682],{"class":74},[30,119723,119685],{"class":74},[271,119725,119726,119729],{"start":52},[150,119727,119728],{},"Reboot System",[150,119730,119731],{},"启动Fcitx5",[157,119733,119734],{},[160,119735],{"alt":25,"src":119736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[271,119738,119739],{"start":68},[150,119740,119741],{},"修改一些设置",[157,119743,119744],{},"将Pinyin和Keyboard - English US加入到左边。",[157,119746,119747],{},[160,119748],{"alt":25,"src":119749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[157,119751,119752],{},"添加快捷键以便于更好切换中英文",[157,119754,119755],{},[160,119756],{"alt":25,"src":119757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[271,119759,119760],{"start":80},[150,119761,119762],{},"重启",[20,119764,119766],{"className":118661,"code":119765,"language":118663,"meta":25,"style":25},"sudo shutdown -r now\n",[27,119767,119768],{"__ignoreMap":25},[30,119769,119770,119772,119775,119778],{"class":32,"line":33},[30,119771,24757],{"class":36},[30,119773,119774],{"class":74}," shutdown",[30,119776,119777],{"class":40}," -r",[30,119779,119780],{"class":74}," now\n",[271,119782,119783],{"start":88},[150,119784,119785],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[157,119787,119788],{},[558,119789,119790],{"href":119790,"rel":119791},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24045],[271,119793,119794],{"start":96},[150,119795,119796],{},"再重启",[20,119798,119799],{"className":118661,"code":119765,"language":118663,"meta":25,"style":25},[27,119800,119801],{"__ignoreMap":25},[30,119802,119803,119805,119807,119809],{"class":32,"line":33},[30,119804,24757],{"class":36},[30,119806,119774],{"class":74},[30,119808,119777],{"class":40},[30,119810,119780],{"class":74},[15,119812,119814],{"id":119813},"_34-pip3源替换","3.4 pip3源替换",[157,119816,119817],{},"非Debian系发行版需要做。",[157,119819,119820],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[157,119822,119823],{},"使用dnf的系统也可能不用做。",[20,119825,119827],{"className":117434,"code":119826,"language":117436,"meta":25,"style":25},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[27,119828,119829,119834,119841,119846,119851],{"__ignoreMap":25},[30,119830,119831],{"class":32,"line":33},[30,119832,119833],{"class":379},"# 检查是否已安装 pip\n",[30,119835,119836,119839],{"class":32,"line":44},[30,119837,119838],{"class":36},"pip3",[30,119840,26431],{"class":40},[30,119842,119843],{"class":32,"line":52},[30,119844,119845],{"class":379},"# 如果未安装，先安装 pip3（见下方）\n",[30,119847,119848],{"class":32,"line":60},[30,119849,119850],{"class":379},"# 配置 pip 使用清华源\n",[30,119852,119853,119855,119858,119861,119864],{"class":32,"line":68},[30,119854,119838],{"class":36},[30,119856,119857],{"class":74}," config",[30,119859,119860],{"class":74}," set",[30,119862,119863],{"class":74}," global.index-url",[30,119865,119866],{"class":74}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[157,119868,119869],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[157,119871,119872],{},[160,119873],{"alt":25,"src":119874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[20,119876,119878],{"className":117434,"code":119877,"language":117436,"meta":25,"style":25},"#安装pip3\nsudo apt update\nsudo apt-get install python3-pip\n\n#更新pip3\npython3 -m pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple --upgrade pip\n\n#设置pip源为清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n\n#测试\npython3 -m pip install --upgrade pip\n",[27,119879,119880,119885,119893,119904,119908,119913,119932,119936,119941,119953,119957,119962],{"__ignoreMap":25},[30,119881,119882],{"class":32,"line":33},[30,119883,119884],{"class":379},"#安装pip3\n",[30,119886,119887,119889,119891],{"class":32,"line":44},[30,119888,24757],{"class":36},[30,119890,117455],{"class":74},[30,119892,26380],{"class":74},[30,119894,119895,119897,119899,119901],{"class":32,"line":52},[30,119896,24757],{"class":36},[30,119898,26214],{"class":74},[30,119900,24014],{"class":74},[30,119902,119903],{"class":74}," python3-pip\n",[30,119905,119906],{"class":32,"line":60},[30,119907,2582],{"emptyLinePlaceholder":245},[30,119909,119910],{"class":32,"line":68},[30,119911,119912],{"class":379},"#更新pip3\n",[30,119914,119915,119917,119919,119921,119923,119925,119928,119930],{"class":32,"line":80},[30,119916,101017],{"class":36},[30,119918,101020],{"class":40},[30,119920,101043],{"class":74},[30,119922,24014],{"class":74},[30,119924,26568],{"class":40},[30,119926,119927],{"class":74}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[30,119929,101048],{"class":40},[30,119931,101051],{"class":74},[30,119933,119934],{"class":32,"line":88},[30,119935,2582],{"emptyLinePlaceholder":245},[30,119937,119938],{"class":32,"line":96},[30,119939,119940],{"class":379},"#设置pip源为清华源\n",[30,119942,119943,119945,119947,119949,119951],{"class":32,"line":104},[30,119944,119838],{"class":36},[30,119946,119857],{"class":74},[30,119948,119860],{"class":74},[30,119950,119863],{"class":74},[30,119952,119866],{"class":74},[30,119954,119955],{"class":32,"line":112},[30,119956,2582],{"emptyLinePlaceholder":245},[30,119958,119959],{"class":32,"line":123},[30,119960,119961],{"class":379},"#测试\n",[30,119963,119964,119966,119968,119970,119972,119974],{"class":32,"line":131},[30,119965,101017],{"class":36},[30,119967,101020],{"class":40},[30,119969,101043],{"class":74},[30,119971,24014],{"class":74},[30,119973,101048],{"class":40},[30,119975,101051],{"class":74},[157,119977,119978],{},"成功的话，会看到Looking后面是tsinghua字样。",[157,119980,119981],{},[160,119982],{"alt":25,"src":119983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[15,119985,119987],{"id":119986},"_35-显卡驱动安装","3.5 显卡驱动安装",[287,119989,119991],{"id":119990},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[20,119993,119995],{"className":118661,"code":119994,"language":118663,"meta":25,"style":25},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[27,119996,119997,120002,120017,120022],{"__ignoreMap":25},[30,119998,119999],{"class":32,"line":33},[30,120000,120001],{"class":379},"# 如果是使用apt安装的驱动\n",[30,120003,120004,120006,120008,120010,120012,120015],{"class":32,"line":44},[30,120005,24757],{"class":36},[30,120007,26214],{"class":74},[30,120009,26217],{"class":74},[30,120011,119296],{"class":40},[30,120013,120014],{"class":74}," nvidia",[30,120016,119386],{"class":40},[30,120018,120019],{"class":32,"line":52},[30,120020,120021],{"class":379},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[30,120023,120024,120026],{"class":32,"line":60},[30,120025,24757],{"class":36},[30,120027,120028],{"class":74}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[287,120030,120032],{"id":120031},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22180,120034,120036],{"id":120035},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23092,120038,120040],{"id":120039},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[20,120042,120044],{"className":118661,"code":120043,"language":118663,"meta":25,"style":25},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[27,120045,120046,120051,120062,120067,120077,120082],{"__ignoreMap":25},[30,120047,120048],{"class":32,"line":33},[30,120049,120050],{"class":379},"# 安装英伟达驱动\n",[30,120052,120053,120055,120057,120059],{"class":32,"line":44},[30,120054,24757],{"class":36},[30,120056,117455],{"class":74},[30,120058,24014],{"class":74},[30,120060,120061],{"class":74}," nvidia-driver-版本号\n",[30,120063,120064],{"class":32,"line":52},[30,120065,120066],{"class":379},"# 重启 \n",[30,120068,120069,120071,120073,120075],{"class":32,"line":60},[30,120070,24757],{"class":36},[30,120072,119774],{"class":74},[30,120074,119777],{"class":40},[30,120076,119780],{"class":74},[30,120078,120079],{"class":32,"line":68},[30,120080,120081],{"class":379},"# 检查驱动是否安装成功\n",[30,120083,120084],{"class":32,"line":80},[30,120085,120086],{"class":36},"nvidia-smi\n",[23092,120088,120090],{"id":120089},"_35212-debian","3.5.2.1.2 Debian",[20,120092,120094],{"className":118661,"code":120093,"language":118663,"meta":25,"style":25},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[27,120095,120096,120100,120114,120118,120128,120132],{"__ignoreMap":25},[30,120097,120098],{"class":32,"line":33},[30,120099,120050],{"class":379},[30,120101,120102,120104,120106,120108,120111],{"class":32,"line":44},[30,120103,24757],{"class":36},[30,120105,117455],{"class":74},[30,120107,24014],{"class":74},[30,120109,120110],{"class":74}," nvidia-driver",[30,120112,120113],{"class":74}," nvidia-settings\n",[30,120115,120116],{"class":32,"line":52},[30,120117,120066],{"class":379},[30,120119,120120,120122,120124,120126],{"class":32,"line":60},[30,120121,24757],{"class":36},[30,120123,119774],{"class":74},[30,120125,119777],{"class":40},[30,120127,119780],{"class":74},[30,120129,120130],{"class":32,"line":68},[30,120131,120081],{"class":379},[30,120133,120134],{"class":32,"line":80},[30,120135,120086],{"class":36},[22180,120137,120139],{"id":120138},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[157,120141,120142,120143,120146],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[469,120144,120145],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[157,120148,120149,120150],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23735,120151,120152],{},[469,120153,120154],{},"（也可以不禁用桌面环境，直接进行下一步。）",[20,120156,120158],{"className":118661,"code":120157,"language":118663,"meta":25,"style":25},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[27,120159,120160,120165,120175,120180,120193,120198],{"__ignoreMap":25},[30,120161,120162],{"class":32,"line":33},[30,120163,120164],{"class":379},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[30,120166,120167,120169,120172],{"class":32,"line":44},[30,120168,24757],{"class":36},[30,120170,120171],{"class":74}," telinit",[30,120173,120174],{"class":40}," 3\n",[30,120176,120177],{"class":32,"line":52},[30,120178,120179],{"class":379},"# ubuntu 使用下方命令\n",[30,120181,120182,120184,120187,120190],{"class":32,"line":60},[30,120183,24757],{"class":36},[30,120185,120186],{"class":74}," service",[30,120188,120189],{"class":74}," lightdm",[30,120191,120192],{"class":74}," stop\n",[30,120194,120195],{"class":32,"line":68},[30,120196,120197],{"class":379},"# Fedora 使用下方命令\n",[30,120199,120200,120202,120204,120207],{"class":32,"line":80},[30,120201,24757],{"class":36},[30,120203,26651],{"class":74},[30,120205,120206],{"class":74}," isolate",[30,120208,120209],{"class":74}," multi-user.target\n",[157,120211,120212],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[20,120214,120216],{"className":118661,"code":120215,"language":118663,"meta":25,"style":25},"# 编译环境+准备工作\nsudo apt install build-essential\n# 进入到.run目录中\ncd \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n# 给驱动文件增加可执行权限：\nsudo chmod a+x NVIDIA-Linux-x86_64-550.107.02.run\n# 然后执行安装：\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run  --no-opengl-files\n",[27,120217,120218,120223,120234,120239,120246,120251,120263,120268,120275,120280],{"__ignoreMap":25},[30,120219,120220],{"class":32,"line":33},[30,120221,120222],{"class":379},"# 编译环境+准备工作\n",[30,120224,120225,120227,120229,120231],{"class":32,"line":44},[30,120226,24757],{"class":36},[30,120228,117455],{"class":74},[30,120230,24014],{"class":74},[30,120232,120233],{"class":74}," build-essential\n",[30,120235,120236],{"class":32,"line":52},[30,120237,120238],{"class":379},"# 进入到.run目录中\n",[30,120240,120241,120243],{"class":32,"line":60},[30,120242,101414],{"class":40},[30,120244,120245],{"class":74}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[30,120247,120248],{"class":32,"line":68},[30,120249,120250],{"class":379},"# 给驱动文件增加可执行权限：\n",[30,120252,120253,120255,120257,120260],{"class":32,"line":80},[30,120254,24757],{"class":36},[30,120256,24760],{"class":74},[30,120258,120259],{"class":74}," a+x",[30,120261,120262],{"class":74}," NVIDIA-Linux-x86_64-550.107.02.run\n",[30,120264,120265],{"class":32,"line":88},[30,120266,120267],{"class":379},"# 然后执行安装：\n",[30,120269,120270,120272],{"class":32,"line":96},[30,120271,24757],{"class":36},[30,120273,120274],{"class":74}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[30,120276,120277],{"class":32,"line":104},[30,120278,120279],{"class":379},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[30,120281,120282,120284,120287],{"class":32,"line":112},[30,120283,24757],{"class":36},[30,120285,120286],{"class":74}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[30,120288,120289],{"class":40},"  --no-opengl-files\n",[157,120291,120292],{},"安装完毕重启即可",[20,120294,120296],{"className":118661,"code":120295,"language":118663,"meta":25,"style":25},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[27,120297,120298,120302,120308,120312],{"__ignoreMap":25},[30,120299,120300],{"class":32,"line":33},[30,120301,120066],{"class":379},[30,120303,120304,120306],{"class":32,"line":44},[30,120305,24757],{"class":36},[30,120307,26785],{"class":74},[30,120309,120310],{"class":32,"line":52},[30,120311,120081],{"class":379},[30,120313,120314],{"class":32,"line":60},[30,120315,120086],{"class":36},[287,120317,120319],{"id":120318},"_353-安装cuda","3.5.3 安装CUDA",[157,120321,120322],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[157,120324,120325],{},[160,120326],{"alt":25,"src":120327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[271,120329,120330],{},[150,120331,120332],{},"先查看显卡驱动所支持的最高CUDA版本",[20,120334,120335],{"className":118661,"code":120086,"language":118663,"meta":25,"style":25},[27,120336,120337],{"__ignoreMap":25},[30,120338,120339],{"class":32,"line":33},[30,120340,120086],{"class":36},[157,120342,120343],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[157,120345,120346],{},[160,120347],{"alt":25,"src":120348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[271,120350,120351],{"start":44},[150,120352,120353],{},"下载CUDA并安装CUDA",[157,120355,118440,120356],{},[558,120357,118443],{"href":118443,"rel":120358},[24045],[157,120360,120361],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[157,120363,120364],{},[160,120365],{"alt":25,"src":120366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[157,120368,120369,120370,120375],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[558,120371,120374],{"href":120372,"rel":120373},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24045],"Vinci机器人队单片机教程","）",[157,120377,120378],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[157,120380,120381],{},[160,120382],{"alt":25,"src":120383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[157,120385,120386],{},"将最下方框框里的命令敲入终端",[20,120388,120390],{"className":118661,"code":120389,"language":118663,"meta":25,"style":25},"# 在当前文件夹下创建一个ttt的子文件夹\nmkdir -p .\u002Fttt\n# 进入ttt文件夹\ncd ttt\n# 输入复制的第一条命令（用来下载cuda的runfile文件）\nwget https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n# 给予权限\nsudo chmod a+x .\u002Fcuda_12.4.0_550.54.14_linux.run\n# 运行脚本\nsudo .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[27,120391,120392,120397,120406,120411,120418,120423,120431,120436,120447,120452],{"__ignoreMap":25},[30,120393,120394],{"class":32,"line":33},[30,120395,120396],{"class":379},"# 在当前文件夹下创建一个ttt的子文件夹\n",[30,120398,120399,120401,120403],{"class":32,"line":44},[30,120400,101404],{"class":36},[30,120402,29354],{"class":40},[30,120404,120405],{"class":74}," .\u002Fttt\n",[30,120407,120408],{"class":32,"line":52},[30,120409,120410],{"class":379},"# 进入ttt文件夹\n",[30,120412,120413,120415],{"class":32,"line":60},[30,120414,101414],{"class":40},[30,120416,120417],{"class":74}," ttt\n",[30,120419,120420],{"class":32,"line":68},[30,120421,120422],{"class":379},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[30,120424,120425,120428],{"class":32,"line":80},[30,120426,120427],{"class":36},"wget",[30,120429,120430],{"class":74}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[30,120432,120433],{"class":32,"line":88},[30,120434,120435],{"class":379},"# 给予权限\n",[30,120437,120438,120440,120442,120444],{"class":32,"line":96},[30,120439,24757],{"class":36},[30,120441,24760],{"class":74},[30,120443,120259],{"class":74},[30,120445,120446],{"class":74}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[30,120448,120449],{"class":32,"line":104},[30,120450,120451],{"class":379},"# 运行脚本\n",[30,120453,120454,120456],{"class":32,"line":112},[30,120455,24757],{"class":36},[30,120457,120446],{"class":74},[157,120459,120460],{},[160,120461],{"alt":25,"src":120462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[157,120464,120465],{},"正在安装中：",[157,120467,120468],{},[160,120469],{"alt":25,"src":120470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[157,120472,120473],{},"输入accept接受即可",[157,120475,120476],{},[160,120477],{"alt":25,"src":120478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[157,120480,120481],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[157,120483,120484],{},[160,120485],{"alt":25,"src":120486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[157,120488,120489],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[157,120491,120492],{},[160,120493],{"alt":25,"src":120494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[271,120496,120497],{"start":52},[150,120498,120499],{},"配置环境",[157,120501,120502],{},"根据上方确认一下路径，比如我上面红色框起来的为",[20,120504,120506],{"className":118661,"code":120505,"language":118663,"meta":25,"style":25},"Please make sure that \n -   PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin \n -   LD_LIBRARY_PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64, or, add \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64 to \u002Fetc\u002Fld.so.conf and run ldconfig as root\n",[27,120507,120508,120524,120539],{"__ignoreMap":25},[30,120509,120510,120513,120516,120519,120522],{"class":32,"line":33},[30,120511,120512],{"class":36},"Please",[30,120514,120515],{"class":74}," make",[30,120517,120518],{"class":74}," sure",[30,120520,120521],{"class":74}," that",[30,120523,2856],{"class":321},[30,120525,120526,120528,120531,120534,120537],{"class":32,"line":44},[30,120527,52409],{"class":36},[30,120529,120530],{"class":74},"   PATH",[30,120532,120533],{"class":74}," includes",[30,120535,120536],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[30,120538,2856],{"class":321},[30,120540,120541,120543,120546,120548,120551,120554,120556,120559,120562,120565,120568,120570,120573,120575],{"class":32,"line":52},[30,120542,52409],{"class":36},[30,120544,120545],{"class":74},"   LD_LIBRARY_PATH",[30,120547,120533],{"class":74},[30,120549,120550],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[30,120552,120553],{"class":74}," or,",[30,120555,5391],{"class":74},[30,120557,120558],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[30,120560,120561],{"class":74}," to",[30,120563,120564],{"class":74}," \u002Fetc\u002Fld.so.conf",[30,120566,120567],{"class":74}," and",[30,120569,27368],{"class":74},[30,120571,120572],{"class":74}," ldconfig",[30,120574,64742],{"class":74},[30,120576,120577],{"class":74}," root\n",[157,120579,120580],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[20,120582,120584],{"className":118661,"code":120583,"language":118663,"meta":25,"style":25},"which nvcc\n",[27,120585,120586],{"__ignoreMap":25},[30,120587,120588,120591],{"class":32,"line":33},[30,120589,120590],{"class":40},"which",[30,120592,120593],{"class":74}," nvcc\n",[157,120595,120596],{},[160,120597],{"alt":25,"src":120598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[157,120600,120601],{},"所以我进行以下操作：",[20,120603,120605],{"className":118661,"code":120604,"language":118663,"meta":25,"style":25},"sudo vim ~\u002F.bashrc\n",[27,120606,120607],{"__ignoreMap":25},[30,120608,120609,120611,120613],{"class":32,"line":33},[30,120610,24757],{"class":36},[30,120612,118721],{"class":74},[30,120614,120615],{"class":74}," ~\u002F.bashrc\n",[157,120617,120618],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[20,120620,120622],{"className":118661,"code":120621,"language":118663,"meta":25,"style":25},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[27,120623,120624,120636],{"__ignoreMap":25},[30,120625,120626,120628,120631,120633],{"class":32,"line":33},[30,120627,25215],{"class":317},[30,120629,120630],{"class":321}," PATH",[30,120632,367],{"class":317},[30,120634,120635],{"class":321},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[30,120637,120638,120640,120643,120645],{"class":32,"line":44},[30,120639,25215],{"class":317},[30,120641,120642],{"class":321}," LD_LIBRARY_PATH",[30,120644,367],{"class":317},[30,120646,120647],{"class":321},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[157,120649,120650],{},[160,120651],{"alt":25,"src":120652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[20,120654,120656],{"className":118661,"code":120655,"language":118663,"meta":25,"style":25},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[27,120657,120658,120663,120669,120674],{"__ignoreMap":25},[30,120659,120660],{"class":32,"line":33},[30,120661,120662],{"class":379},"# 刷新当前终端的环境变量\n",[30,120664,120665,120667],{"class":32,"line":44},[30,120666,101031],{"class":40},[30,120668,120615],{"class":74},[30,120670,120671],{"class":32,"line":52},[30,120672,120673],{"class":379},"# 验证CUDA是否安装成功\n",[30,120675,120676,120679],{"class":32,"line":60},[30,120677,120678],{"class":36},"nvcc",[30,120680,120681],{"class":40}," -V\n",[157,120683,120684],{},"出现下图这种则安装成功。",[157,120686,120687],{},[160,120688],{"alt":25,"src":120689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[287,120691,120693],{"id":120692},"_354-安装cudnn","3.5.4 安装cuDNN",[271,120695,120696],{},[150,120697,120698],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[157,120700,120701,120702,120707],{},"前往 NVIDIA cuDNN 下载页面：",[558,120703,120706],{"href":120704,"rel":120705},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24045],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[157,120709,120710],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[157,120712,120713],{},[160,120714],{"alt":25,"src":120715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[157,120717,120718],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[157,120720,120721],{},[160,120722],{"alt":25,"src":120723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[157,120725,120726],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[157,120728,120729],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[157,120731,120732],{},[469,120733,120734],{},"我这里选择所有Linux X86_64最通用的办法：",[157,120736,120737],{},"下载好的：",[157,120739,120740],{},[160,120741],{"alt":25,"src":120742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[271,120744,120745],{"start":44},[150,120746,120747],{},"安装cuDNN",[157,120749,120750],{},"找到该文件所在目录，并打开终端，cd到该目录。",[157,120752,120753],{},[160,120754],{"alt":25,"src":120755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[157,120757,120758],{},"解压文件，并复制到对应位置完成安装",[20,120760,120762],{"className":118661,"code":120761,"language":118663,"meta":25,"style":25},"# 解压cuDNN文件\ntar -xvf .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n# cd进文件夹\ncd .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n# 复制cuDNN文件到CUDA目录\nsudo cp include\u002Fcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude \nsudo cp lib\u002Flibcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n# 对比一下有没有缺文件\nls \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn* \nls \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n# 给予权限\nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn*   \nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n",[27,120763,120764,120769,120780,120785,120792,120797,120813,120827,120832,120843,120852,120856,120872],{"__ignoreMap":25},[30,120765,120766],{"class":32,"line":33},[30,120767,120768],{"class":379},"# 解压cuDNN文件\n",[30,120770,120771,120774,120777],{"class":32,"line":44},[30,120772,120773],{"class":36},"tar",[30,120775,120776],{"class":40}," -xvf",[30,120778,120779],{"class":74}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[30,120781,120782],{"class":32,"line":52},[30,120783,120784],{"class":379},"# cd进文件夹\n",[30,120786,120787,120789],{"class":32,"line":60},[30,120788,101414],{"class":40},[30,120790,120791],{"class":74}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[30,120793,120794],{"class":32,"line":68},[30,120795,120796],{"class":379},"# 复制cuDNN文件到CUDA目录\n",[30,120798,120799,120801,120803,120806,120808,120811],{"class":32,"line":80},[30,120800,24757],{"class":36},[30,120802,27999],{"class":74},[30,120804,120805],{"class":74}," include\u002Fcudnn",[30,120807,775],{"class":40},[30,120809,120810],{"class":74},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[30,120812,2856],{"class":321},[30,120814,120815,120817,120819,120822,120824],{"class":32,"line":88},[30,120816,24757],{"class":36},[30,120818,27999],{"class":74},[30,120820,120821],{"class":74}," lib\u002Flibcudnn",[30,120823,775],{"class":40},[30,120825,120826],{"class":74},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[30,120828,120829],{"class":32,"line":96},[30,120830,120831],{"class":379},"# 对比一下有没有缺文件\n",[30,120833,120834,120836,120839,120841],{"class":32,"line":104},[30,120835,26899],{"class":36},[30,120837,120838],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[30,120840,775],{"class":40},[30,120842,2856],{"class":321},[30,120844,120845,120847,120850],{"class":32,"line":112},[30,120846,26899],{"class":36},[30,120848,120849],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[30,120851,119386],{"class":40},[30,120853,120854],{"class":32,"line":123},[30,120855,120435],{"class":379},[30,120857,120858,120860,120862,120865,120867,120869],{"class":32,"line":131},[30,120859,24757],{"class":36},[30,120861,24760],{"class":74},[30,120863,120864],{"class":74}," a+r",[30,120866,120838],{"class":74},[30,120868,775],{"class":40},[30,120870,120871],{"class":321},"   \n",[30,120873,120874,120876,120878,120880,120882],{"class":32,"line":142},[30,120875,24757],{"class":36},[30,120877,24760],{"class":74},[30,120879,120864],{"class":74},[30,120881,120849],{"class":74},[30,120883,119386],{"class":40},[271,120885,120886],{"start":52},[150,120887,120888],{},"检查是否安装成功",[20,120890,120892],{"className":118661,"code":120891,"language":118663,"meta":25,"style":25},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[27,120893,120894,120899],{"__ignoreMap":25},[30,120895,120896],{"class":32,"line":33},[30,120897,120898],{"class":379},"# 检查cuDNN版本命令\n",[30,120900,120901,120904,120907,120909,120911,120914,120917],{"class":32,"line":44},[30,120902,120903],{"class":36},"cat",[30,120905,120906],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[30,120908,25282],{"class":317},[30,120910,30374],{"class":36},[30,120912,120913],{"class":74}," CUDNN_MAJOR",[30,120915,120916],{"class":40}," -A",[30,120918,47861],{"class":40},[157,120920,120921],{},"出现下图这样的就是安装成功了",[157,120923,120924],{},[160,120925],{"alt":25,"src":120926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[271,120928,120929],{"start":60},[150,120930,120931],{},"软链接(一般不需要)",[20,120933,120935],{"className":118661,"code":120934,"language":118663,"meta":25,"style":25},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[27,120936,120937,120942],{"__ignoreMap":25},[30,120938,120939],{"class":32,"line":33},[30,120940,120941],{"class":379},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[30,120943,120944,120946],{"class":32,"line":44},[30,120945,24757],{"class":36},[30,120947,120948],{"class":74}," ldconfig\n",[157,120950,120951],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[20,120953,120958],{"className":120954,"code":120955,"language":120956,"meta":120957,"style":25},"language-Plain shiki shiki-themes github-light github-dark","ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n","Plain","Text",[27,120959,120960,120965,120970,120975,120980,120985,120990],{"__ignoreMap":25},[30,120961,120962],{"class":32,"line":33},[30,120963,120964],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[30,120966,120967],{"class":32,"line":44},[30,120968,120969],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[30,120971,120972],{"class":32,"line":52},[30,120973,120974],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[30,120976,120977],{"class":32,"line":60},[30,120978,120979],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[30,120981,120982],{"class":32,"line":68},[30,120983,120984],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[30,120986,120987],{"class":32,"line":80},[30,120988,120989],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[30,120991,120992],{"class":32,"line":88},[30,120993,120994],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[157,120996,120997],{},"运行下方的命令",[20,120999,121001],{"className":118661,"code":121000,"language":118663,"meta":25,"style":25},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[27,121002,121003,121008,121015,121020],{"__ignoreMap":25},[30,121004,121005],{"class":32,"line":33},[30,121006,121007],{"class":379},"# cd进入CUDA路径\n",[30,121009,121010,121012],{"class":32,"line":44},[30,121011,101414],{"class":40},[30,121013,121014],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[30,121016,121017],{"class":32,"line":52},[30,121018,121019],{"class":379}," # 查看本路径下的需要软链接的文件名\n",[30,121021,121022],{"class":32,"line":60},[30,121023,121024],{"class":36}," ls\n",[157,121026,121027],{},[160,121028],{"alt":25,"src":121029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[157,121031,121032,121033,18592,121036,18592,121039,121042],{},"如上图，我需要将",[27,121034,121035],{},"libcudnn_xxx_xxxxx.so.8.9.7",[27,121037,121038],{},"libcudnn_xxx_xxxxx.so.8",[27,121040,121041],{},"libcudnn_xxx_xxxxx.so","软链接",[20,121044,121046],{"className":118661,"code":121045,"language":118663,"meta":25,"style":25},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\nsudo ln -sf libcudnn_cnn_train.so.8.9.7 libcudnn_cnn_train.so.8\nsudo ln -sf libcudnn_adv_infer.so.8.9.7 libcudnn_adv_infer.so.8\nsudo ln -sf libcudnn_adv_train.so.8.9.7 libcudnn_adv_train.so.8\nsudo ln -sf libcudnn_cnn_infer.so.8.9.7 libcudnn_cnn_infer.so.8\nsudo ln -sf libcudnn.so.8.9.7 libcudnn.so.8\nsudo ln -sf libcudnn_ops_infer.so.8.9.7 libcudnn_ops_infer.so.8\nsudo ln -sf libcudnn_ops_train.so.8.9.7 libcudnn_ops_train.so.8\n# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\nsudo ldconfig\n# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\nls -l \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_*.so*\n",[27,121047,121048,121053,121069,121083,121097,121111,121125,121139,121153,121158,121164,121169],{"__ignoreMap":25},[30,121049,121050],{"class":32,"line":33},[30,121051,121052],{"class":379},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[30,121054,121055,121057,121060,121063,121066],{"class":32,"line":44},[30,121056,24757],{"class":36},[30,121058,121059],{"class":74}," ln",[30,121061,121062],{"class":40}," -sf",[30,121064,121065],{"class":74}," libcudnn_cnn_train.so.8.9.7",[30,121067,121068],{"class":74}," libcudnn_cnn_train.so.8\n",[30,121070,121071,121073,121075,121077,121080],{"class":32,"line":52},[30,121072,24757],{"class":36},[30,121074,121059],{"class":74},[30,121076,121062],{"class":40},[30,121078,121079],{"class":74}," libcudnn_adv_infer.so.8.9.7",[30,121081,121082],{"class":74}," libcudnn_adv_infer.so.8\n",[30,121084,121085,121087,121089,121091,121094],{"class":32,"line":60},[30,121086,24757],{"class":36},[30,121088,121059],{"class":74},[30,121090,121062],{"class":40},[30,121092,121093],{"class":74}," libcudnn_adv_train.so.8.9.7",[30,121095,121096],{"class":74}," libcudnn_adv_train.so.8\n",[30,121098,121099,121101,121103,121105,121108],{"class":32,"line":68},[30,121100,24757],{"class":36},[30,121102,121059],{"class":74},[30,121104,121062],{"class":40},[30,121106,121107],{"class":74}," libcudnn_cnn_infer.so.8.9.7",[30,121109,121110],{"class":74}," libcudnn_cnn_infer.so.8\n",[30,121112,121113,121115,121117,121119,121122],{"class":32,"line":80},[30,121114,24757],{"class":36},[30,121116,121059],{"class":74},[30,121118,121062],{"class":40},[30,121120,121121],{"class":74}," libcudnn.so.8.9.7",[30,121123,121124],{"class":74}," libcudnn.so.8\n",[30,121126,121127,121129,121131,121133,121136],{"class":32,"line":88},[30,121128,24757],{"class":36},[30,121130,121059],{"class":74},[30,121132,121062],{"class":40},[30,121134,121135],{"class":74}," libcudnn_ops_infer.so.8.9.7",[30,121137,121138],{"class":74}," libcudnn_ops_infer.so.8\n",[30,121140,121141,121143,121145,121147,121150],{"class":32,"line":96},[30,121142,24757],{"class":36},[30,121144,121059],{"class":74},[30,121146,121062],{"class":40},[30,121148,121149],{"class":74}," libcudnn_ops_train.so.8.9.7",[30,121151,121152],{"class":74}," libcudnn_ops_train.so.8\n",[30,121154,121155],{"class":32,"line":104},[30,121156,121157],{"class":379},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[30,121159,121160,121162],{"class":32,"line":112},[30,121161,24757],{"class":36},[30,121163,120948],{"class":74},[30,121165,121166],{"class":32,"line":123},[30,121167,121168],{"class":379},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[30,121170,121171,121173,121176,121179,121181,121184],{"class":32,"line":131},[30,121172,26899],{"class":36},[30,121174,121175],{"class":40}," -l",[30,121177,121178],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[30,121180,775],{"class":40},[30,121182,121183],{"class":74},".so",[30,121185,119386],{"class":40},[287,121187,121189],{"id":121188},"_355-常见问题","3.5.5 常见问题",[271,121191,121192],{},[150,121193,121194],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[20,121196,121198],{"className":118661,"code":121197,"language":118663,"meta":25,"style":25},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[27,121199,121200],{"__ignoreMap":25},[30,121201,121202,121204,121206],{"class":32,"line":33},[30,121203,24757],{"class":36},[30,121205,118721],{"class":74},[30,121207,121208],{"class":74}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[157,121210,121211],{},"blacklist-nouveau.conf文件内容如下：",[20,121213,121215],{"className":118661,"code":121214,"language":118663,"meta":25,"style":25},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[27,121216,121217,121225,121232,121244,121254],{"__ignoreMap":25},[30,121218,121219,121222],{"class":32,"line":33},[30,121220,121221],{"class":36},"blacklist",[30,121223,121224],{"class":74}," nouveau\n",[30,121226,121227,121229],{"class":32,"line":44},[30,121228,121221],{"class":36},[30,121230,121231],{"class":74}," lbm-nouveau\n",[30,121233,121234,121236,121239,121242],{"class":32,"line":52},[30,121235,116068],{"class":36},[30,121237,121238],{"class":74}," nouveau",[30,121240,121241],{"class":74}," modeset=",[30,121243,3267],{"class":40},[30,121245,121246,121249,121251],{"class":32,"line":60},[30,121247,121248],{"class":40},"alias",[30,121250,121238],{"class":74},[30,121252,121253],{"class":74}," off\n",[30,121255,121256,121258,121261],{"class":32,"line":68},[30,121257,121248],{"class":40},[30,121259,121260],{"class":74}," lbm-nouveau",[30,121262,121253],{"class":74},[157,121264,121265],{},"接着运行下方命令",[20,121267,121269],{"className":118661,"code":121268,"language":118663,"meta":25,"style":25},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[27,121270,121271,121281,121286],{"__ignoreMap":25},[30,121272,121273,121275,121278],{"class":32,"line":33},[30,121274,24757],{"class":36},[30,121276,121277],{"class":74}," update-initramfs",[30,121279,121280],{"class":40}," -u\n",[30,121282,121283],{"class":32,"line":44},[30,121284,121285],{"class":36},"或者\n",[30,121287,121288,121290,121293],{"class":32,"line":52},[30,121289,24757],{"class":36},[30,121291,121292],{"class":74}," dracut",[30,121294,121295],{"class":40}," --force\n",[157,121297,121298],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[20,121300,121302],{"className":118661,"code":121301,"language":118663,"meta":25,"style":25},"lsmod | grep nouveau\n",[27,121303,121304],{"__ignoreMap":25},[30,121305,121306,121309,121311,121313],{"class":32,"line":33},[30,121307,121308],{"class":36},"lsmod",[30,121310,25282],{"class":317},[30,121312,30374],{"class":36},[30,121314,121224],{"class":74},[271,121316,121317],{"start":44},[150,121318,121319],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[20,121321,121323],{"className":118661,"code":121322,"language":118663,"meta":25,"style":25},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[27,121324,121325],{"__ignoreMap":25},[30,121326,121327,121329,121331],{"class":32,"line":33},[30,121328,24757],{"class":36},[30,121330,118721],{"class":74},[30,121332,121333],{"class":74}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[157,121335,121336],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[20,121338,121340],{"className":118661,"code":121339,"language":118663,"meta":25,"style":25},"Section \"OutputClass\"\n   Identifier \"nvidia\"\n   MatchDriver \"nvidia-drm\"\n   Driver \"nvidia\"\n   Option \"AllowEmptyInitialConfiguration\"\n   Option \"PrimaryGPU\" \"yes\"\n   ModulePath \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\nEndSection\n",[27,121341,121342,121350,121358,121366,121373,121381,121391,121399],{"__ignoreMap":25},[30,121343,121344,121347],{"class":32,"line":33},[30,121345,121346],{"class":36},"Section",[30,121348,121349],{"class":74}," \"OutputClass\"\n",[30,121351,121352,121355],{"class":32,"line":44},[30,121353,121354],{"class":36},"   Identifier",[30,121356,121357],{"class":74}," \"nvidia\"\n",[30,121359,121360,121363],{"class":32,"line":52},[30,121361,121362],{"class":36},"   MatchDriver",[30,121364,121365],{"class":74}," \"nvidia-drm\"\n",[30,121367,121368,121371],{"class":32,"line":60},[30,121369,121370],{"class":36},"   Driver",[30,121372,121357],{"class":74},[30,121374,121375,121378],{"class":32,"line":68},[30,121376,121377],{"class":36},"   Option",[30,121379,121380],{"class":74}," \"AllowEmptyInitialConfiguration\"\n",[30,121382,121383,121385,121388],{"class":32,"line":80},[30,121384,121377],{"class":36},[30,121386,121387],{"class":74}," \"PrimaryGPU\"",[30,121389,121390],{"class":74}," \"yes\"\n",[30,121392,121393,121396],{"class":32,"line":88},[30,121394,121395],{"class":36},"   ModulePath",[30,121397,121398],{"class":74}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[30,121400,121401],{"class":32,"line":96},[30,121402,121403],{"class":36},"EndSection\n",[271,121405,121406],{"start":52},[150,121407,121408],{},"安装N卡驱动提示错误",[20,121410,121412],{"className":120954,"code":121411,"language":120956,"meta":120957,"style":25},"Unable to find the kernel source tree for the currently running kernel.  Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' or 'kernel-devel' RPM installed.If you know the correct kernel source files are installed, you may specify the kernel source path with the '--kernel-source-path' command line option.\n",[27,121413,121414],{"__ignoreMap":25},[30,121415,121416],{"class":32,"line":33},[30,121417,121411],{},[271,121419,121420],{},[150,121421,121422],{},"检查当前运行的内核版本：",[157,121424,121425],{},"运行以下命令以查看你当前正在使用的内核版本：",[20,121427,121429],{"className":117434,"code":121428,"language":117436,"meta":25,"style":25},"uname -r\n",[27,121430,121431],{"__ignoreMap":25},[30,121432,121433,121435],{"class":32,"line":33},[30,121434,70342],{"class":36},[30,121436,121437],{"class":40}," -r\n",[271,121439,121440],{"start":44},[150,121441,121442],{},"安装内核开发文件：",[157,121444,121445,121446,121449],{},"确保你已经安装了与当前内核版本相匹配的 ",[27,121447,121448],{},"kernel-devel"," 包。运行以下命令来安装：",[20,121451,121453],{"className":117434,"code":121452,"language":117436,"meta":25,"style":25},"sudo dnf install kernel-devel-$(uname -r)\n",[27,121454,121455],{"__ignoreMap":25},[30,121456,121457,121459,121461,121463,121466,121468,121470,121472],{"class":32,"line":33},[30,121458,24757],{"class":36},[30,121460,26453],{"class":74},[30,121462,24014],{"class":74},[30,121464,121465],{"class":74}," kernel-devel-",[30,121467,25272],{"class":321},[30,121469,70342],{"class":36},[30,121471,119777],{"class":40},[30,121473,328],{"class":321},[157,121475,121476],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[271,121478,121479],{"start":52},[150,121480,121481],{},"安装内核源代码（如果需要）：",[157,121483,121484],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[20,121486,121488],{"className":117434,"code":121487,"language":117436,"meta":25,"style":25},"sudo dnf install kernel-headers kernel-source\n",[27,121489,121490],{"__ignoreMap":25},[30,121491,121492,121494,121496,121498,121501],{"class":32,"line":33},[30,121493,24757],{"class":36},[30,121495,26453],{"class":74},[30,121497,24014],{"class":74},[30,121499,121500],{"class":74}," kernel-headers",[30,121502,121503],{"class":74}," kernel-source\n",[271,121505,121506],{"start":60},[150,121507,121508],{},"检查安装：",[157,121510,121511,121512,121515],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[27,121513,121514],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[20,121517,121519],{"className":117434,"code":121518,"language":117436,"meta":25,"style":25},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[27,121520,121521],{"__ignoreMap":25},[30,121522,121523,121525],{"class":32,"line":33},[30,121524,26899],{"class":36},[30,121526,121527],{"class":74}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[157,121529,121530,121531,121534],{},"如果仍然遇到问题，可以通过 ",[27,121532,121533],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[234,121536,121537],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":25,"searchDepth":44,"depth":44,"links":121539},[121540,121544,121554,121558,121559],{"id":118637,"depth":44,"text":118638,"children":121541},[121542,121543],{"id":118647,"depth":52,"text":118648},{"id":118657,"depth":52,"text":118658},{"id":118857,"depth":44,"text":118858,"children":121545},[121546,121547,121548,121549,121550,121551,121552,121553],{"id":118861,"depth":52,"text":118862},{"id":118931,"depth":52,"text":118932},{"id":119020,"depth":52,"text":119021},{"id":119265,"depth":52,"text":119266},{"id":119335,"depth":52,"text":119336},{"id":119402,"depth":52,"text":119403},{"id":119437,"depth":52,"text":119438},{"id":119492,"depth":52,"text":119493},{"id":119543,"depth":44,"text":119544,"children":121555},[121556,121557],{"id":119547,"depth":52,"text":119548},{"id":119627,"depth":52,"text":119628},{"id":119813,"depth":44,"text":119814},{"id":119986,"depth":44,"text":119987,"children":121560},[121561,121562,121563,121564,121565],{"id":119990,"depth":52,"text":119991},{"id":120031,"depth":52,"text":120032},{"id":120318,"depth":52,"text":120319},{"id":120692,"depth":52,"text":120693},{"id":121188,"depth":52,"text":121189},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118629,"description":242},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121572,"title":121573,"body":121574,"description":242,"extension":243,"meta":121914,"navigation":245,"path":121915,"seo":121916,"stem":121917,"__hash__":121918},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121575,"toc":121912},[121576,121579,121584,121587,121833,121838,121841,121877,121880,121909],[10,121577,121573],{"id":121578},"_4-命令教程长期积累",[271,121580,121581],{},[150,121582,121583],{},"大多数命令",[157,121585,121586],{},"常用 Linux 命令速查：",[20,121588,121590],{"className":117434,"code":121589,"language":117436,"meta":25,"style":25},"# 文件与目录\nls        # 列出目录内容\ncd        # 切换目录\npwd       # 显示当前路径\nmkdir     # 创建目录\nrm        # 删除文件或目录\ncp        # 复制文件或目录\nmv        # 移动\u002F重命名文件或目录\ntouch     # 创建空文件\ncat       # 查看文件内容\nhead\u002Ftail # 查看文件头部\u002F尾部\n\n# 权限管理\nchmod     # 修改文件权限\nchown     # 修改文件所有者\nsudo      # 以管理员身份执行\n\n# 系统信息\nuname     # 系统信息\ndf        # 磁盘使用情况\nfree      # 内存使用情况\ntop\u002Fhtop  # 进程监控\nps        # 查看进程\n\n# 网络\nping      # 测试网络连通性\ncurl      # 发送 HTTP 请求\nwget      # 下载文件\nssh       # 远程登录\nscp       # 远程文件传输\n\n# 包管理（Debian\u002FUbuntu）\napt update   # 更新软件源\napt install  # 安装软件包\napt remove   # 卸载软件包\n",[27,121591,121592,121597,121604,121611,121619,121626,121633,121641,121649,121656,121663,121671,121675,121680,121687,121695,121702,121706,121711,121718,121726,121734,121742,121750,121754,121759,121767,121774,121781,121789,121797,121801,121806,121815,121824],{"__ignoreMap":25},[30,121593,121594],{"class":32,"line":33},[30,121595,121596],{"class":379},"# 文件与目录\n",[30,121598,121599,121601],{"class":32,"line":44},[30,121600,26899],{"class":36},[30,121602,121603],{"class":379},"        # 列出目录内容\n",[30,121605,121606,121608],{"class":32,"line":52},[30,121607,101414],{"class":40},[30,121609,121610],{"class":379},"        # 切换目录\n",[30,121612,121613,121616],{"class":32,"line":60},[30,121614,121615],{"class":40},"pwd",[30,121617,121618],{"class":379},"       # 显示当前路径\n",[30,121620,121621,121623],{"class":32,"line":68},[30,121622,101404],{"class":36},[30,121624,121625],{"class":379},"     # 创建目录\n",[30,121627,121628,121630],{"class":32,"line":80},[30,121629,176],{"class":36},[30,121631,121632],{"class":379},"        # 删除文件或目录\n",[30,121634,121635,121638],{"class":32,"line":88},[30,121636,121637],{"class":36},"cp",[30,121639,121640],{"class":379},"        # 复制文件或目录\n",[30,121642,121643,121646],{"class":32,"line":96},[30,121644,121645],{"class":36},"mv",[30,121647,121648],{"class":379},"        # 移动\u002F重命名文件或目录\n",[30,121650,121651,121653],{"class":32,"line":104},[30,121652,101421],{"class":36},[30,121654,121655],{"class":379},"     # 创建空文件\n",[30,121657,121658,121660],{"class":32,"line":112},[30,121659,120903],{"class":36},[30,121661,121662],{"class":379},"       # 查看文件内容\n",[30,121664,121665,121668],{"class":32,"line":123},[30,121666,121667],{"class":36},"head\u002Ftail",[30,121669,121670],{"class":379}," # 查看文件头部\u002F尾部\n",[30,121672,121673],{"class":32,"line":131},[30,121674,2582],{"emptyLinePlaceholder":245},[30,121676,121677],{"class":32,"line":142},[30,121678,121679],{"class":379},"# 权限管理\n",[30,121681,121682,121684],{"class":32,"line":1811},[30,121683,24792],{"class":36},[30,121685,121686],{"class":379},"     # 修改文件权限\n",[30,121688,121689,121692],{"class":32,"line":1825},[30,121690,121691],{"class":36},"chown",[30,121693,121694],{"class":379},"     # 修改文件所有者\n",[30,121696,121697,121699],{"class":32,"line":1830},[30,121698,24757],{"class":36},[30,121700,121701],{"class":379},"      # 以管理员身份执行\n",[30,121703,121704],{"class":32,"line":1836},[30,121705,2582],{"emptyLinePlaceholder":245},[30,121707,121708],{"class":32,"line":1857},[30,121709,121710],{"class":379},"# 系统信息\n",[30,121712,121713,121715],{"class":32,"line":1862},[30,121714,70342],{"class":36},[30,121716,121717],{"class":379},"     # 系统信息\n",[30,121719,121720,121723],{"class":32,"line":1876},[30,121721,121722],{"class":36},"df",[30,121724,121725],{"class":379},"        # 磁盘使用情况\n",[30,121727,121728,121731],{"class":32,"line":1881},[30,121729,121730],{"class":36},"free",[30,121732,121733],{"class":379},"      # 内存使用情况\n",[30,121735,121736,121739],{"class":32,"line":1910},[30,121737,121738],{"class":36},"top\u002Fhtop",[30,121740,121741],{"class":379},"  # 进程监控\n",[30,121743,121744,121747],{"class":32,"line":1915},[30,121745,121746],{"class":36},"ps",[30,121748,121749],{"class":379},"        # 查看进程\n",[30,121751,121752],{"class":32,"line":1932},[30,121753,2582],{"emptyLinePlaceholder":245},[30,121755,121756],{"class":32,"line":1937},[30,121757,121758],{"class":379},"# 网络\n",[30,121760,121761,121764],{"class":32,"line":1942},[30,121762,121763],{"class":36},"ping",[30,121765,121766],{"class":379},"      # 测试网络连通性\n",[30,121768,121769,121771],{"class":32,"line":1947},[30,121770,26987],{"class":36},[30,121772,121773],{"class":379},"      # 发送 HTTP 请求\n",[30,121775,121776,121778],{"class":32,"line":1961},[30,121777,120427],{"class":36},[30,121779,121780],{"class":379},"      # 下载文件\n",[30,121782,121783,121786],{"class":32,"line":1966},[30,121784,121785],{"class":36},"ssh",[30,121787,121788],{"class":379},"       # 远程登录\n",[30,121790,121791,121794],{"class":32,"line":2759},[30,121792,121793],{"class":36},"scp",[30,121795,121796],{"class":379},"       # 远程文件传输\n",[30,121798,121799],{"class":32,"line":2773},[30,121800,2582],{"emptyLinePlaceholder":245},[30,121802,121803],{"class":32,"line":2781},[30,121804,121805],{"class":379},"# 包管理（Debian\u002FUbuntu）\n",[30,121807,121808,121810,121812],{"class":32,"line":2786},[30,121809,117506],{"class":36},[30,121811,117485],{"class":74},[30,121813,121814],{"class":379},"   # 更新软件源\n",[30,121816,121817,121819,121821],{"class":32,"line":2792},[30,121818,117506],{"class":36},[30,121820,24014],{"class":74},[30,121822,121823],{"class":379},"  # 安装软件包\n",[30,121825,121826,121828,121830],{"class":32,"line":2798},[30,121827,117506],{"class":36},[30,121829,26217],{"class":74},[30,121831,121832],{"class":379},"   # 卸载软件包\n",[271,121834,121835],{"start":44},[150,121836,121837],{},"KDE Dolphin 以root打开",[157,121839,121840],{},"kde5",[20,121842,121844],{"className":117434,"code":121843,"language":117436,"meta":25,"style":25},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[27,121845,121846],{"__ignoreMap":25},[30,121847,121848,121851,121854,121857,121859,121861,121864,121867,121869,121872,121874],{"class":32,"line":33},[30,121849,121850],{"class":36},"pkexec",[30,121852,121853],{"class":74}," env",[30,121855,121856],{"class":74}," DISPLAY=",[30,121858,28281],{"class":321},[30,121860,28339],{"class":74},[30,121862,121863],{"class":321},"$XAUTHORITY ",[30,121865,121866],{"class":74},"KDE_SESSION_VERSION=",[30,121868,639],{"class":40},[30,121870,121871],{"class":74}," KDE_FULL_SESSION=",[30,121873,1549],{"class":40},[30,121875,121876],{"class":74}," dolphin\n",[157,121878,121879],{},"kde6",[20,121881,121883],{"className":117434,"code":121882,"language":117436,"meta":25,"style":25},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[27,121884,121885],{"__ignoreMap":25},[30,121886,121887,121889,121891,121893,121895,121897,121899,121901,121903,121905,121907],{"class":32,"line":33},[30,121888,121850],{"class":36},[30,121890,121853],{"class":74},[30,121892,121856],{"class":74},[30,121894,28281],{"class":321},[30,121896,28339],{"class":74},[30,121898,121863],{"class":321},[30,121900,121866],{"class":74},[30,121902,664],{"class":40},[30,121904,121871],{"class":74},[30,121906,1549],{"class":40},[30,121908,121876],{"class":74},[234,121910,121911],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":25,"searchDepth":44,"depth":44,"links":121913},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121573,"description":242},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121920,"title":121921,"body":121922,"description":242,"extension":243,"meta":121936,"navigation":245,"path":121937,"seo":121938,"stem":121939,"__hash__":121940},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121923,"toc":121934},[121924,121927],[10,121925,121921],{"id":121926},"_5-各种环境配置",[157,121928,121929],{},[558,121930,121933],{"href":121931,"rel":121932},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24045],"电控组环境搭建大全",{"title":25,"searchDepth":44,"depth":44,"links":121935},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121921,"description":242},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121942,"title":121943,"body":121944,"description":242,"extension":243,"meta":122292,"navigation":245,"path":122293,"seo":122294,"stem":122295,"__hash__":122296},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121945,"toc":122284},[121946,121949,121953,121957,121961,121966,121973,121977,122270,122274,122281],[10,121947,121943],{"id":121948},"_6-拓展功能",[15,121950,121952],{"id":121951},"_61-wine","6.1 Wine",[15,121954,121956],{"id":121955},"_62-android","6.2 Android",[287,121958,121960],{"id":121959},"_621-i卡a卡","6.2.1 I卡、A卡",[271,121962,121963],{},[150,121964,121965],{},"Wayland-Waydroid(体验超级好)",[157,121967,121968,121969],{},"Waydroid 官网与安装指南：",[558,121970,121971],{"href":121971,"rel":121972},"https:\u002F\u002Fwaydro.id\u002F",[24045],[287,121974,121976],{"id":121975},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[271,121978,121979],{},[150,121980,121981,121982,121984,121985,121989,121991,121994,121999,122196],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53854,121983],{},"BlissOS 官网下载：",[558,121986,121987],{"href":121987,"rel":121988},"https:\u002F\u002Fblissos.org\u002F",[24045],[53854,121990],{},[160,121992],{"alt":25,"src":121993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[271,121995,121996],{"start":52},[150,121997,121998],{},"比较推荐的配置",[20,122000,122002],{"className":117434,"code":122001,"language":117436,"meta":25,"style":25},"qemu-system-x86_64 \\\n        -M q35,vmport=off \\\n        -accel kvm \\\n        -cpu qemu64,+sse3,+sse4.2 \\\n        -smp 8,cores=4 \\\n        -m 6G \\\n        -usb \\\n        -device virtio-tablet \\\n        -device virtio-keyboard \\\n        -device usb-tablet \\\n        -bios OVMF-pure-efi64.fd \\\n        -net user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022 \\\n        -net nic,model=virtio \\\n        -audio sdl,model=hda \\\n        -display sdl,gl=on,show-cursor=on \\\n        -device virtio-vga-gl,xres=1920,yres=1080 \\\n        -drive file=disk.qcow2,media=disk,if=virtio,cache=writeback \\\n        -drive file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom \\\n        -monitor stdio \\\n        -serial none\n",[27,122003,122004,122011,122021,122031,122041,122053,122063,122070,122080,122089,122098,122108,122118,122127,122137,122147,122159,122169,122178,122188],{"__ignoreMap":25},[30,122005,122006,122009],{"class":32,"line":33},[30,122007,122008],{"class":36},"qemu-system-x86_64",[30,122010,41],{"class":40},[30,122012,122013,122016,122019],{"class":32,"line":44},[30,122014,122015],{"class":40},"        -M",[30,122017,122018],{"class":74}," q35,vmport=off",[30,122020,41],{"class":40},[30,122022,122023,122026,122029],{"class":32,"line":52},[30,122024,122025],{"class":40},"        -accel",[30,122027,122028],{"class":74}," kvm",[30,122030,41],{"class":40},[30,122032,122033,122036,122039],{"class":32,"line":60},[30,122034,122035],{"class":40},"        -cpu",[30,122037,122038],{"class":74}," qemu64,+sse3,+sse4.2",[30,122040,41],{"class":40},[30,122042,122043,122046,122049,122051],{"class":32,"line":68},[30,122044,122045],{"class":40},"        -smp",[30,122047,122048],{"class":74}," 8,cores=",[30,122050,613],{"class":40},[30,122052,41],{"class":40},[30,122054,122055,122058,122061],{"class":32,"line":80},[30,122056,122057],{"class":40},"        -m",[30,122059,122060],{"class":74}," 6G",[30,122062,41],{"class":40},[30,122064,122065,122068],{"class":32,"line":88},[30,122066,122067],{"class":40},"        -usb",[30,122069,41],{"class":40},[30,122071,122072,122075,122078],{"class":32,"line":96},[30,122073,122074],{"class":40},"        -device",[30,122076,122077],{"class":74}," virtio-tablet",[30,122079,41],{"class":40},[30,122081,122082,122084,122087],{"class":32,"line":104},[30,122083,122074],{"class":40},[30,122085,122086],{"class":74}," virtio-keyboard",[30,122088,41],{"class":40},[30,122090,122091,122093,122096],{"class":32,"line":112},[30,122092,122074],{"class":40},[30,122094,122095],{"class":74}," usb-tablet",[30,122097,41],{"class":40},[30,122099,122100,122103,122106],{"class":32,"line":123},[30,122101,122102],{"class":40},"        -bios",[30,122104,122105],{"class":74}," OVMF-pure-efi64.fd",[30,122107,41],{"class":40},[30,122109,122110,122113,122116],{"class":32,"line":131},[30,122111,122112],{"class":40},"        -net",[30,122114,122115],{"class":74}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[30,122117,41],{"class":40},[30,122119,122120,122122,122125],{"class":32,"line":142},[30,122121,122112],{"class":40},[30,122123,122124],{"class":74}," nic,model=virtio",[30,122126,41],{"class":40},[30,122128,122129,122132,122135],{"class":32,"line":1811},[30,122130,122131],{"class":40},"        -audio",[30,122133,122134],{"class":74}," sdl,model=hda",[30,122136,41],{"class":40},[30,122138,122139,122142,122145],{"class":32,"line":1825},[30,122140,122141],{"class":40},"        -display",[30,122143,122144],{"class":74}," sdl,gl=on,show-cursor=on",[30,122146,41],{"class":40},[30,122148,122149,122151,122154,122157],{"class":32,"line":1830},[30,122150,122074],{"class":40},[30,122152,122153],{"class":74}," virtio-vga-gl,xres=1920,yres=",[30,122155,122156],{"class":40},"1080",[30,122158,41],{"class":40},[30,122160,122161,122164,122167],{"class":32,"line":1836},[30,122162,122163],{"class":40},"        -drive",[30,122165,122166],{"class":74}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[30,122168,41],{"class":40},[30,122170,122171,122173,122176],{"class":32,"line":1857},[30,122172,122163],{"class":40},[30,122174,122175],{"class":74}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[30,122177,41],{"class":40},[30,122179,122180,122183,122186],{"class":32,"line":1862},[30,122181,122182],{"class":40},"        -monitor",[30,122184,122185],{"class":74}," stdio",[30,122187,41],{"class":40},[30,122189,122190,122193],{"class":32,"line":1876},[30,122191,122192],{"class":40},"        -serial",[30,122194,122195],{"class":74}," none\n",[271,122197,122198],{"start":68},[150,122199,122200,122201],{},"常用操作：",[271,122202,122203,122206,122262],{},[150,122204,122205],{},"全屏：Ctrl+Alt+F",[150,122207,122208,122209,122214],{},"adb调试",[271,122210,122211],{},[150,122212,122213],{},"使Linux与Android用ADB连接。",[20,122215,122217],{"className":117434,"code":122216,"language":117436,"meta":25,"style":25},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[27,122218,122219,122224,122235,122240,122252,122257],{"__ignoreMap":25},[30,122220,122221],{"class":32,"line":33},[30,122222,122223],{"class":379},"# 连接安卓\n",[30,122225,122226,122229,122232],{"class":32,"line":44},[30,122227,122228],{"class":36},"adb",[30,122230,122231],{"class":74}," connect",[30,122233,122234],{"class":40}," 127.0.0.1\n",[30,122236,122237],{"class":32,"line":52},[30,122238,122239],{"class":379},"# 打开shell\n",[30,122241,122242,122244,122246,122249],{"class":32,"line":60},[30,122243,122228],{"class":36},[30,122245,27021],{"class":40},[30,122247,122248],{"class":74}," 127.0.0.1:5555",[30,122250,122251],{"class":74}," shell\n",[30,122253,122254],{"class":32,"line":68},[30,122255,122256],{"class":379},"# 使用root权限\n",[30,122258,122259],{"class":32,"line":80},[30,122260,122261],{"class":36},"su\n",[150,122263,122264,122265],{},"中文输入法",[271,122266,122267],{},[150,122268,122269],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[15,122271,122273],{"id":122272},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[157,122275,122276,122277],{},"rEFInd 官网与文档：",[558,122278,122279],{"href":122279,"rel":122280},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24045],[234,122282,122283],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":44,"depth":44,"links":122285},[122286,122287,122291],{"id":121951,"depth":44,"text":121952},{"id":121955,"depth":44,"text":121956,"children":122288},[122289,122290],{"id":121959,"depth":52,"text":121960},{"id":121975,"depth":52,"text":121976},{"id":122272,"depth":44,"text":122273},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121943,"description":242},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122298,"title":122299,"body":122300,"description":242,"extension":243,"meta":125599,"navigation":245,"path":125600,"seo":125601,"stem":125602,"__hash__":125603},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122301,"toc":125573},[122302,122305,122309,122312,122319,122569,122572,122644,122647,122651,122655,122660,122663,122666,122669,122674,122677,122680,122683,122688,122691,122696,122699,122702,122707,122710,122715,122718,122722,122726,122729,122734,122737,122751,122754,122757,122766,122769,122778,122781,122784,122793,122796,122805,122808,122811,122820,122823,122826,122841,122844,122847,122856,122861,122864,122867,122876,122879,122888,122891,122900,122903,122912,122917,122920,122928,122933,122936,122945,122948,122956,122961,122964,122973,122976,122979,122983,122986,122991,122994,122999,123013,123018,123023,123034,123039,123045,123050,123065,123070,123073,123078,123083,123088,123096,123101,123108,123113,123124,123129,123132,123136,123139,123142,123147,123150,123169,123174,123177,123186,123191,123194,123216,123219,123249,123252,123257,123260,123274,123279,123298,123301,123304,123309,123321,123326,123331,123334,123339,123342,123357,123360,123365,123370,123374,123379,123419,123422,123426,123432,123438,123443,123446,123453,123458,123465,123468,123471,123478,123492,123495,123555,123558,123572,123584,123587,123590,123593,123657,123660,123663,123666,123686,123689,123694,123701,123705,123708,123712,123717,123722,123726,123729,123732,123774,123779,123782,123804,123819,123821,123826,123838,123898,123900,123902,123956,123958,123960,123966,123971,123974,123979,123983,123986,124048,124053,124056,124058,124062,124074,124156,124158,124160,124214,124220,124222,124226,124231,124233,124238,124242,124262,124297,124301,124304,124307,124310,124317,124320,124332,124335,124350,124353,124372,124420,124423,124440,124443,124457,124462,124465,124474,124489,124501,124539,124544,124553,124558,124563,124589,124598,124602,124606,124611,124614,124618,124622,124627,124630,124635,124638,124643,124646,124651,124654,124658,124663,124666,124671,124674,124678,124683,124686,124691,124694,124699,124702,124706,124711,124714,124719,124722,124727,124730,124734,124739,124742,124747,124750,124755,124758,124763,124766,124771,124774,124779,124782,124786,124791,124794,124799,124806,124810,124815,124818,124823,124826,124830,124835,124838,124841,124844,124847,124850,124854,124857,124867,124872,124877,124899,124904,124909,124916,124920,124925,124928,124931,124936,124939,124942,124945,124948,124951,124954,124957,124960,124963,124966,124969,124972,124977,124982,124987,124992,124997,125002,125007,125010,125014,125017,125021,125026,125031,125036,125041,125045,125051,125059,125064,125067,125072,125087,125090,125095,125129,125144,125147,125202,125228,125240,125243,125252,125255,125270,125275,125278,125284,125289,125292,125297,125300,125305,125310,125317,125320,125335,125338,125373,125378,125386,125424,125427,125430,125435,125438,125443,125454,125488,125493,125496,125505,125510,125516,125519,125524,125533,125538,125541,125544,125549,125557,125560,125565,125570],[10,122303,122299],{"id":122304},"_7-其他操作",[15,122306,122308],{"id":122307},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[157,122310,122311],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[157,122313,122314,122315,122318],{},"进入工控机的硬盘目录，进入",[27,122316,122317],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[20,122320,122324],{"className":122321,"code":122322,"language":122323,"meta":25,"style":25},"language-YAML shiki shiki-themes github-light github-dark","network: \n  version: 2 \n  wifis: \n    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96: \n      renderer: NetworkManager \n      match: \n        name: \"wlan0\" \n      dhcp4: true \n      dhcp6: true \n      access-points: \n        \"EMIS_Vinci_Robocon_5G\": \n          auth: \n            key-management: \"psk\" \n            password: \"vinci666\" \n          networkmanager: \n            uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n            name: \"EMIS_Vinci_Robocon_5G\" \n            passthrough: \n              wifi-security.auth-alg: \"open\" \n              ipv6.addr-gen-mode: \"default\" \n              ipv6.ip6-privacy: \"-1\" \n              proxy._: \"\" \n      networkmanager: \n        uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n        name: \"EMIS_Vinci_Robocon_5G\"\n \n","YAML",[27,122325,122326,122334,122345,122352,122359,122371,122378,122390,122401,122412,122419,122426,122433,122445,122457,122464,122476,122488,122495,122507,122519,122531,122542,122549,122560],{"__ignoreMap":25},[30,122327,122328,122331],{"class":32,"line":33},[30,122329,122330],{"class":51438},"network",[30,122332,122333],{"class":321},": \n",[30,122335,122336,122339,122341,122343],{"class":32,"line":44},[30,122337,122338],{"class":51438},"  version",[30,122340,51575],{"class":321},[30,122342,398],{"class":40},[30,122344,2856],{"class":321},[30,122346,122347,122350],{"class":32,"line":52},[30,122348,122349],{"class":51438},"  wifis",[30,122351,122333],{"class":321},[30,122353,122354,122357],{"class":32,"line":60},[30,122355,122356],{"class":51438},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[30,122358,122333],{"class":321},[30,122360,122361,122364,122366,122369],{"class":32,"line":68},[30,122362,122363],{"class":51438},"      renderer",[30,122365,51575],{"class":321},[30,122367,122368],{"class":74},"NetworkManager",[30,122370,2856],{"class":321},[30,122372,122373,122376],{"class":32,"line":80},[30,122374,122375],{"class":51438},"      match",[30,122377,122333],{"class":321},[30,122379,122380,122383,122385,122388],{"class":32,"line":88},[30,122381,122382],{"class":51438},"        name",[30,122384,51575],{"class":321},[30,122386,122387],{"class":74},"\"wlan0\"",[30,122389,2856],{"class":321},[30,122391,122392,122395,122397,122399],{"class":32,"line":96},[30,122393,122394],{"class":51438},"      dhcp4",[30,122396,51575],{"class":321},[30,122398,1549],{"class":40},[30,122400,2856],{"class":321},[30,122402,122403,122406,122408,122410],{"class":32,"line":104},[30,122404,122405],{"class":51438},"      dhcp6",[30,122407,51575],{"class":321},[30,122409,1549],{"class":40},[30,122411,2856],{"class":321},[30,122413,122414,122417],{"class":32,"line":112},[30,122415,122416],{"class":51438},"      access-points",[30,122418,122333],{"class":321},[30,122420,122421,122424],{"class":32,"line":123},[30,122422,122423],{"class":74},"        \"EMIS_Vinci_Robocon_5G\"",[30,122425,122333],{"class":321},[30,122427,122428,122431],{"class":32,"line":131},[30,122429,122430],{"class":51438},"          auth",[30,122432,122333],{"class":321},[30,122434,122435,122438,122440,122443],{"class":32,"line":142},[30,122436,122437],{"class":51438},"            key-management",[30,122439,51575],{"class":321},[30,122441,122442],{"class":74},"\"psk\"",[30,122444,2856],{"class":321},[30,122446,122447,122450,122452,122455],{"class":32,"line":1811},[30,122448,122449],{"class":51438},"            password",[30,122451,51575],{"class":321},[30,122453,122454],{"class":74},"\"vinci666\"",[30,122456,2856],{"class":321},[30,122458,122459,122462],{"class":32,"line":1825},[30,122460,122461],{"class":51438},"          networkmanager",[30,122463,122333],{"class":321},[30,122465,122466,122469,122471,122474],{"class":32,"line":1830},[30,122467,122468],{"class":51438},"            uuid",[30,122470,51575],{"class":321},[30,122472,122473],{"class":74},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[30,122475,2856],{"class":321},[30,122477,122478,122481,122483,122486],{"class":32,"line":1836},[30,122479,122480],{"class":51438},"            name",[30,122482,51575],{"class":321},[30,122484,122485],{"class":74},"\"EMIS_Vinci_Robocon_5G\"",[30,122487,2856],{"class":321},[30,122489,122490,122493],{"class":32,"line":1857},[30,122491,122492],{"class":51438},"            passthrough",[30,122494,122333],{"class":321},[30,122496,122497,122500,122502,122505],{"class":32,"line":1862},[30,122498,122499],{"class":51438},"              wifi-security.auth-alg",[30,122501,51575],{"class":321},[30,122503,122504],{"class":74},"\"open\"",[30,122506,2856],{"class":321},[30,122508,122509,122512,122514,122517],{"class":32,"line":1876},[30,122510,122511],{"class":51438},"              ipv6.addr-gen-mode",[30,122513,51575],{"class":321},[30,122515,122516],{"class":74},"\"default\"",[30,122518,2856],{"class":321},[30,122520,122521,122524,122526,122529],{"class":32,"line":1881},[30,122522,122523],{"class":51438},"              ipv6.ip6-privacy",[30,122525,51575],{"class":321},[30,122527,122528],{"class":74},"\"-1\"",[30,122530,2856],{"class":321},[30,122532,122533,122536,122538,122540],{"class":32,"line":1910},[30,122534,122535],{"class":51438},"              proxy._",[30,122537,51575],{"class":321},[30,122539,7834],{"class":74},[30,122541,2856],{"class":321},[30,122543,122544,122547],{"class":32,"line":1915},[30,122545,122546],{"class":51438},"      networkmanager",[30,122548,122333],{"class":321},[30,122550,122551,122554,122556,122558],{"class":32,"line":1932},[30,122552,122553],{"class":51438},"        uuid",[30,122555,51575],{"class":321},[30,122557,122473],{"class":74},[30,122559,2856],{"class":321},[30,122561,122562,122564,122566],{"class":32,"line":1937},[30,122563,122382],{"class":51438},[30,122565,51575],{"class":321},[30,122567,122568],{"class":74},"\"EMIS_Vinci_Robocon_5G\"\n",[157,122570,122571],{},"将其改为新wifi的名和密码：",[20,122573,122575],{"className":122321,"code":122574,"language":122323,"meta":25,"style":25},"network:\n  version: 2\n  wifis:\n    wlan0:\n      dhcp4: true\n      dhcp6: true\n      access-points:\n        \"EMIS_Vinci_Robocon_5G\":\n          password: \"vinci666\"\n\n",[27,122576,122577,122583,122592,122598,122605,122614,122622,122628,122634],{"__ignoreMap":25},[30,122578,122579,122581],{"class":32,"line":33},[30,122580,122330],{"class":51438},[30,122582,3921],{"class":321},[30,122584,122585,122587,122589],{"class":32,"line":44},[30,122586,122338],{"class":51438},[30,122588,51575],{"class":321},[30,122590,122591],{"class":40},"2\n",[30,122593,122594,122596],{"class":32,"line":52},[30,122595,122349],{"class":51438},[30,122597,3921],{"class":321},[30,122599,122600,122603],{"class":32,"line":60},[30,122601,122602],{"class":51438},"    wlan0",[30,122604,3921],{"class":321},[30,122606,122607,122609,122611],{"class":32,"line":68},[30,122608,122394],{"class":51438},[30,122610,51575],{"class":321},[30,122612,122613],{"class":40},"true\n",[30,122615,122616,122618,122620],{"class":32,"line":80},[30,122617,122405],{"class":51438},[30,122619,51575],{"class":321},[30,122621,122613],{"class":40},[30,122623,122624,122626],{"class":32,"line":88},[30,122625,122416],{"class":51438},[30,122627,3921],{"class":321},[30,122629,122630,122632],{"class":32,"line":96},[30,122631,122423],{"class":74},[30,122633,3921],{"class":321},[30,122635,122636,122639,122641],{"class":32,"line":104},[30,122637,122638],{"class":51438},"          password",[30,122640,51575],{"class":321},[30,122642,122643],{"class":74},"\"vinci666\"\n",[157,122645,122646],{},"工控机开机即可连上网。",[15,122648,122650],{"id":122649},"_72-ssh远程开发","7.2 SSH远程开发",[287,122652,122654],{"id":122653},"_721-环境准备","7.2.1 环境准备",[157,122656,122657],{},[469,122658,122659],{},"1.硬件准备",[157,122661,122662],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[157,122664,122665],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[157,122667,122668],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[157,122670,122671],{},[469,122672,122673],{},"2.设置固定IP",[157,122675,122676],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[157,122678,122679],{},"1.进入设置界面",[157,122681,122682],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[157,122684,122685],{},[160,122686],{"alt":25,"src":122687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[157,122689,122690],{},"2.配置所连接的网络",[157,122692,122693],{},[160,122694],{"alt":25,"src":122695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[157,122697,122698],{},"3.设置固定IP",[157,122700,122701],{},"查看当前IP地址。",[157,122703,122704],{},[160,122705],{"alt":25,"src":122706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[157,122708,122709],{},"设置固定IP。",[157,122711,122712],{},[160,122713],{"alt":25,"src":122714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[157,122716,122717],{},"至此，IP配置完毕。",[287,122719,122721],{"id":122720},"_722-环境搭建","7.2.2 环境搭建",[157,122723,122724],{},[469,122725,25891],{},[157,122727,122728],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[157,122730,122731],{},[469,122732,122733],{},"实现",[157,122735,122736],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[271,122738,122739,122742,122745,122748],{},[150,122740,122741],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[150,122743,122744],{},"远程主机启动SSH服务；",[150,122746,122747],{},"本地主机登陆远程主机；",[150,122749,122750],{},"实现数据传输。",[157,122752,122753],{},"1.安装SSH客户端与服务端",[157,122755,122756],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[20,122758,122760],{"className":120954,"code":122759,"language":120956,"meta":120957,"style":25}," sudo apt install openssh-server\n",[27,122761,122762],{"__ignoreMap":25},[30,122763,122764],{"class":32,"line":33},[30,122765,122759],{},[157,122767,122768],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[20,122770,122772],{"className":120954,"code":122771,"language":120956,"meta":120957,"style":25},"sudo apt install openssh-client\n",[27,122773,122774],{"__ignoreMap":25},[30,122775,122776],{"class":32,"line":33},[30,122777,122771],{},[157,122779,122780],{},"2.远程主机启动SSH服务",[157,122782,122783],{},"远程主机启动 ssh 服务命令如下：",[20,122785,122787],{"className":120954,"code":122786,"language":120956,"meta":120957,"style":25},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[27,122788,122789],{"__ignoreMap":25},[30,122790,122791],{"class":32,"line":33},[30,122792,122786],{},[157,122794,122795],{},"启动后可使用如下命令查看服务是否正常运行：",[20,122797,122799],{"className":120954,"code":122798,"language":120956,"meta":120957,"style":25},"ps -e | grep ssh\n",[27,122800,122801],{"__ignoreMap":25},[30,122802,122803],{"class":32,"line":33},[30,122804,122798],{},[157,122806,122807],{},"如果启动成功，会包含 sshd 程序。",[157,122809,122810],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[20,122812,122814],{"className":120954,"code":122813,"language":120956,"meta":120957,"style":25},"sudo systemctl enable ssh\n",[27,122815,122816],{"__ignoreMap":25},[30,122817,122818],{"class":32,"line":33},[30,122819,122813],{},[157,122821,122822],{},"3.本地远程登录",[157,122824,122825],{},"登录远程主机可以调用如下命令:",[20,122827,122829],{"className":117434,"code":122828,"language":117436,"meta":25,"style":25},"ssh -X 用户名@ip地址\n",[27,122830,122831],{"__ignoreMap":25},[30,122832,122833,122835,122838],{"class":32,"line":33},[30,122834,121785],{"class":36},[30,122836,122837],{"class":40}," -X",[30,122839,122840],{"class":74}," 用户名@ip地址\n",[157,122842,122843],{},"然后根据提示，录入登陆密码，即可成功登录。",[157,122845,122846],{},"如果退出，可以调用exit命令：",[20,122848,122850],{"className":120954,"code":122849,"language":120956,"meta":120957,"style":25},"exit\n",[27,122851,122852],{"__ignoreMap":25},[30,122853,122854],{"class":32,"line":33},[30,122855,122849],{},[157,122857,122858],{},[469,122859,122860],{},"4.实现数据传输",[157,122862,122863],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[157,122865,122866],{},"上传文件指令格式如下：",[20,122868,122870],{"className":120954,"code":122869,"language":120956,"meta":120957,"style":25},"scp 本地文件路径 账号@ip:路径\n",[27,122871,122872],{"__ignoreMap":25},[30,122873,122874],{"class":32,"line":33},[30,122875,122869],{},[157,122877,122878],{},"上传文件夹指令格式如下：",[20,122880,122882],{"className":120954,"code":122881,"language":120956,"meta":120957,"style":25},"scp -r 本地文件夹路径 账号@ip:路径\n",[27,122883,122884],{"__ignoreMap":25},[30,122885,122886],{"class":32,"line":33},[30,122887,122881],{},[157,122889,122890],{},"下载文件指令格式如下：",[20,122892,122894],{"className":120954,"code":122893,"language":120956,"meta":120957,"style":25},"scp 账号@ip:路径 本地文件夹路径\n",[27,122895,122896],{"__ignoreMap":25},[30,122897,122898],{"class":32,"line":33},[30,122899,122893],{},[157,122901,122902],{},"下载文件夹指令格式如下：",[20,122904,122906],{"className":120954,"code":122905,"language":120956,"meta":120957,"style":25},"scp -r 账号@ip:路径 本地文件夹路径\n",[27,122907,122908],{"__ignoreMap":25},[30,122909,122910],{"class":32,"line":33},[30,122911,122905],{},[157,122913,122914],{},[469,122915,122916],{},"优化",[157,122918,122919],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[271,122921,122922,122925],{},[150,122923,122924],{},"本地生成密钥对；",[150,122926,122927],{},"将公钥上传至远程主机。",[157,122929,122930],{},[469,122931,122932],{},"1.生成密钥对",[157,122934,122935],{},"本地客户端生成公私钥：（一路回车默认即可）",[20,122937,122939],{"className":120954,"code":122938,"language":120956,"meta":120957,"style":25},"ssh-keygen\n",[27,122940,122941],{"__ignoreMap":25},[30,122942,122943],{"class":32,"line":33},[30,122944,122938],{},[157,122946,122947],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[271,122949,122950,122953],{},[150,122951,122952],{},"id_rsa （私钥）；",[150,122954,122955],{},"id_rsa.pub (公钥)。",[157,122957,122958],{},[469,122959,122960],{},"2.公钥上传",[157,122962,122963],{},"上传指令如下：",[20,122965,122967],{"className":120954,"code":122966,"language":120956,"meta":120957,"style":25},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[27,122968,122969],{"__ignoreMap":25},[30,122970,122971],{"class":32,"line":33},[30,122972,122966],{},[157,122974,122975],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[157,122977,122978],{},"以后再远程登录就无需录入密码了。",[287,122980,122982],{"id":122981},"_723-使用vscode优化","7.2.3 使用VScode优化",[157,122984,122985],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[157,122987,122988],{},[469,122989,122990],{},"1.准备工作",[157,122992,122993],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[157,122995,122996],{},[469,122997,122998],{},"2.为VScode安装远程开发插件",[157,123000,123001,123002,123005,123006,123009,123010,28523],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[27,123003,123004],{},"扩展：商店","的搜索栏输入",[27,123007,123008],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[27,123011,123012],{},"安装",[157,123014,123015],{},[160,123016],{"alt":25,"src":123017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[157,123019,123020],{},[469,123021,123022],{},"3.配置远程连接",[157,123024,123025,123026,123029,123030,123033],{},"步骤1：使用快捷键",[27,123027,123028],{},"ctrl + shift + p","打开命令输入窗口，并输入",[27,123031,123032],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[157,123035,123036],{},[160,123037],{"alt":25,"src":123038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[157,123040,123041,123042,28523],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[27,123043,123044],{},"Add New SSH Host",[157,123046,123047],{},[160,123048],{"alt":25,"src":123049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[157,123051,123052,123053,123056,123057,123060,123061,123064],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[27,123054,123055],{},"ssh +X ubuntu@192.168.43.164","，其中，",[27,123058,123059],{},"ubuntu","需要替换为你的登录用户名，",[27,123062,123063],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[157,123066,123067],{},[160,123068],{"alt":25,"src":123069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[157,123071,123072],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[157,123074,123075],{},[160,123076],{"alt":25,"src":123077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[157,123079,123080],{},[160,123081],{"alt":25,"src":123082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[157,123084,123085],{},[469,123086,123087],{},"4.使用",[157,123089,123090,123091,123029,123093,123095],{},"步骤1：继续使用快捷键",[27,123092,123028],{},[27,123094,123032],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[157,123097,123098],{},[160,123099],{"alt":25,"src":123100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[157,123102,123103,123104,123107],{},"或者，也可以点击侧边栏的",[27,123105,123106],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[157,123109,123110],{},[160,123111],{"alt":25,"src":123112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[157,123114,123115,123116,123119,123120,123123],{},"步骤2：选择菜单栏的",[27,123117,123118],{},"文件","下的",[27,123121,123122],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[157,123125,123126],{},[160,123127],{"alt":25,"src":123128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[157,123130,123131],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[15,123133,123135],{"id":123134},"_73-远程桌面","7.3 远程桌面",[157,123137,123138],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[157,123140,123141],{},"我们选择使用VNC来看。",[271,123143,123144],{},[150,123145,123146],{},"安装VNC服务器：",[157,123148,123149],{},"这里以TigerVNC为例进行安装：",[20,123151,123153],{"className":117434,"code":123152,"language":117436,"meta":25,"style":25},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[27,123154,123155],{"__ignoreMap":25},[30,123156,123157,123159,123161,123163,123166],{"class":32,"line":33},[30,123158,24757],{"class":36},[30,123160,117455],{"class":74},[30,123162,24014],{"class":74},[30,123164,123165],{"class":74}," tigervnc-standalone-server",[30,123167,123168],{"class":74}," tigervnc-common\n",[271,123170,123171],{"start":44},[150,123172,123173],{},"设置VNC密码：",[157,123175,123176],{},"为VNC用户设置密码，运行以下命令：",[20,123178,123180],{"className":117434,"code":123179,"language":117436,"meta":25,"style":25},"vncpasswd\n",[27,123181,123182],{"__ignoreMap":25},[30,123183,123184],{"class":32,"line":33},[30,123185,123179],{"class":36},[271,123187,123188],{"start":52},[150,123189,123190],{},"配置VNC启动脚本:",[157,123192,123193],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[20,123195,123197],{"className":117434,"code":123196,"language":117436,"meta":25,"style":25},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[27,123198,123199,123208],{"__ignoreMap":25},[30,123200,123201,123203,123205],{"class":32,"line":33},[30,123202,101404],{"class":36},[30,123204,29354],{"class":40},[30,123206,123207],{"class":74}," ~\u002F.vnc\n",[30,123209,123210,123213],{"class":32,"line":44},[30,123211,123212],{"class":36},"nano",[30,123214,123215],{"class":74}," ~\u002F.vnc\u002Fxstartup\n",[157,123217,123218],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[20,123220,123222],{"className":117434,"code":123221,"language":117436,"meta":25,"style":25},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[27,123223,123224,123229,123237,123244],{"__ignoreMap":25},[30,123225,123226],{"class":32,"line":33},[30,123227,123228],{"class":379},"#!\u002Fbin\u002Fsh\n",[30,123230,123231,123234],{"class":32,"line":44},[30,123232,123233],{"class":40},"unset",[30,123235,123236],{"class":74}," SESSION_MANAGER\n",[30,123238,123239,123241],{"class":32,"line":52},[30,123240,123233],{"class":40},[30,123242,123243],{"class":74}," DBUS_SESSION_BUS_ADDRESS\n",[30,123245,123246],{"class":32,"line":60},[30,123247,123248],{"class":36},"gnome-session\n",[157,123250,123251],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[271,123253,123254],{"start":60},[150,123255,123256],{},"给予执行权限：",[157,123258,123259],{},"为xstartup文件设置执行权限：",[20,123261,123263],{"className":117434,"code":123262,"language":117436,"meta":25,"style":25},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[27,123264,123265],{"__ignoreMap":25},[30,123266,123267,123269,123272],{"class":32,"line":33},[30,123268,24792],{"class":36},[30,123270,123271],{"class":74}," +x",[30,123273,123215],{"class":74},[271,123275,123276],{"start":68},[150,123277,123278],{},"启动VNC服务器：",[20,123280,123282],{"className":117434,"code":123281,"language":117436,"meta":25,"style":25},"vncserver -geometry 1920x1080 -localhost=0\n",[27,123283,123284],{"__ignoreMap":25},[30,123285,123286,123289,123292,123295],{"class":32,"line":33},[30,123287,123288],{"class":36},"vncserver",[30,123290,123291],{"class":40}," -geometry",[30,123293,123294],{"class":74}," 1920x1080",[30,123296,123297],{"class":40}," -localhost=0\n",[157,123299,123300],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[157,123302,123303],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[271,123305,123306],{"start":80},[150,123307,123308],{},"查看已开启的VNC服务器：",[20,123310,123312],{"className":117434,"code":123311,"language":117436,"meta":25,"style":25},"vncserver -list\n",[27,123313,123314],{"__ignoreMap":25},[30,123315,123316,123318],{"class":32,"line":33},[30,123317,123288],{"class":36},[30,123319,123320],{"class":40}," -list\n",[157,123322,123323],{},[160,123324],{"alt":25,"src":123325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[271,123327,123328],{"start":88},[150,123329,123330],{},"连接到VNC服务器：",[157,123332,123333],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[271,123335,123336],{"start":96},[150,123337,123338],{},"停止VNC服务器：",[157,123340,123341],{},"如果需要停止VNC服务器，可以使用以下命令：",[20,123343,123345],{"className":117434,"code":123344,"language":117436,"meta":25,"style":25},"vncserver -kill :1\n",[27,123346,123347],{"__ignoreMap":25},[30,123348,123349,123351,123354],{"class":32,"line":33},[30,123350,123288],{"class":36},[30,123352,123353],{"class":40}," -kill",[30,123355,123356],{"class":74}," :1\n",[157,123358,123359],{},"将:1替换为你实际使用的显示编号。",[157,123361,123362],{},[160,123363],{"alt":25,"src":123364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[157,123366,123367],{},[160,123368],{"alt":25,"src":123369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[15,123371,123373],{"id":123372},"_74-usb端口设置","7.4 USB端口设置",[157,123375,123376],{},[469,123377,123378],{},"首先先配置好权限",[20,123380,123382],{"className":117434,"code":123381,"language":117436,"meta":25,"style":25},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[27,123383,123384,123389,123402,123409,123414],{"__ignoreMap":25},[30,123385,123386],{"class":32,"line":33},[30,123387,123388],{"class":379},"# 将用户权限提高\n",[30,123390,123391,123393,123395,123397,123400],{"class":32,"line":44},[30,123392,24757],{"class":36},[30,123394,26712],{"class":74},[30,123396,26715],{"class":40},[30,123398,123399],{"class":74}," dialout",[30,123401,26720],{"class":321},[30,123403,123404,123406],{"class":32,"line":52},[30,123405,26739],{"class":36},[30,123407,123408],{"class":74}," dialout\n",[30,123410,123411],{"class":32,"line":60},[30,123412,123413],{"class":379},"# 查看下面命令是否输出dialout（若输出才正常）\n",[30,123415,123416],{"class":32,"line":68},[30,123417,123418],{"class":36},"groups\n",[157,123420,123421],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[287,123423,123425],{"id":123424},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[157,123427,123428,123431],{},[469,123429,123430],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[157,123433,123434,123437],{},[469,123435,123436],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[157,123439,123440],{},[469,123441,123442],{},"流程如下：",[157,123444,123445],{},"（1）.查找设备idVendor和idProduct",[157,123447,123448,123449,123452],{},"接入两个USB设备，在终端调用指令",[27,123450,123451],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[157,123454,123455],{},[160,123456],{"alt":25,"src":123457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[157,123459,123460,123461,123464],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[27,123462,123463],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[157,123466,123467],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[157,123469,123470],{},"（2）.编写映射规则",[157,123472,123473,123474,123477],{},"在",[27,123475,123476],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[20,123479,123481],{"className":117434,"code":123480,"language":117436,"meta":25,"style":25},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[27,123482,123483],{"__ignoreMap":25},[30,123484,123485,123487,123489],{"class":32,"line":33},[30,123486,24757],{"class":36},[30,123488,118721],{"class":74},[30,123490,123491],{"class":74}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[157,123493,123494],{},"输入如下内容：",[20,123496,123498],{"className":117434,"code":123497,"language":117436,"meta":25,"style":25},"KERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"10c4\", ATTRS{idProduct}==\"ea60\", MODE:=\"0777\", SYMLINK+=\"mylidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"mycar\"\n",[27,123499,123500,123530],{"__ignoreMap":25},[30,123501,123502,123505,123507,123510,123513,123516,123519,123521,123524,123527],{"class":32,"line":33},[30,123503,123504],{"class":321},"KERNEL",[30,123506,367],{"class":317},[30,123508,123509],{"class":74},"=\"ttyUSB*\",",[30,123511,123512],{"class":36}," ATTRS",[30,123514,123515],{"class":74},"{idVendor}==",[30,123517,123518],{"class":36},"\"10c4\"",[30,123520,698],{"class":36},[30,123522,123523],{"class":74}," ATTRS{idProduct}==\"ea60\",",[30,123525,123526],{"class":74}," MODE:=\"0777\",",[30,123528,123529],{"class":74}," SYMLINK+=\"mylidar\"\n",[30,123531,123532,123534,123536,123538,123540,123542,123545,123547,123550,123552],{"class":32,"line":44},[30,123533,123504],{"class":321},[30,123535,367],{"class":317},[30,123537,123509],{"class":74},[30,123539,123512],{"class":36},[30,123541,123515],{"class":74},[30,123543,123544],{"class":36},"\"1a86\"",[30,123546,698],{"class":36},[30,123548,123549],{"class":74}," ATTRS{idProduct}==\"7523\",",[30,123551,123526],{"class":74},[30,123553,123554],{"class":74}," SYMLINK+=\"mycar\"\n",[157,123556,123557],{},"代码解释：",[147,123559,123560,123563,123566,123569],{},[150,123561,123562],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[150,123564,123565],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[150,123567,123568],{},"SYMLINK是符号连接，即绑定的别名；",[150,123570,123571],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[157,123573,123574,123575,123578,123581],{},"***小提示：***",[23735,123576,123577],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[27,123579,123580],{},"\u002Fetc\u002Fudev\u002Frule.d",[23735,123582,123583],{},"目录即可。",[157,123585,123586],{},"表格 还在加载中，请等待加载完成后再尝试复制",[157,123588,123589],{},"（3）.使规则生效",[157,123591,123592],{},"在终端下输入如下指令：",[20,123594,123596],{"className":117434,"code":123595,"language":117436,"meta":25,"style":25},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[27,123597,123598,123603,123615,123626,123630,123635,123648],{"__ignoreMap":25},[30,123599,123600],{"class":32,"line":33},[30,123601,123602],{"class":379},"# Ubuntu用下方命令\n",[30,123604,123605,123607,123609,123612],{"class":32,"line":44},[30,123606,24757],{"class":36},[30,123608,120186],{"class":74},[30,123610,123611],{"class":74}," udev",[30,123613,123614],{"class":74}," reload\n",[30,123616,123617,123619,123621,123623],{"class":32,"line":52},[30,123618,24757],{"class":36},[30,123620,120186],{"class":74},[30,123622,123611],{"class":74},[30,123624,123625],{"class":74}," restart\n",[30,123627,123628],{"class":32,"line":60},[30,123629,2582],{"emptyLinePlaceholder":245},[30,123631,123632],{"class":32,"line":68},[30,123633,123634],{"class":379},"#Fedora用下方命令\n",[30,123636,123637,123639,123642,123645],{"class":32,"line":80},[30,123638,24757],{"class":36},[30,123640,123641],{"class":74}," udevadm",[30,123643,123644],{"class":74}," control",[30,123646,123647],{"class":40}," --reload\n",[30,123649,123650,123652,123654],{"class":32,"line":88},[30,123651,24757],{"class":36},[30,123653,123641],{"class":74},[30,123655,123656],{"class":74}," trigger\n",[157,123658,123659],{},"再重新插拔设备即可。",[157,123661,123662],{},"（4）.测试",[157,123664,123665],{},"终端下输入如下指令",[20,123667,123669],{"className":117434,"code":123668,"language":117436,"meta":25,"style":25},"ll \u002Fdev | grep ttyUSB\n",[27,123670,123671],{"__ignoreMap":25},[30,123672,123673,123676,123679,123681,123683],{"class":32,"line":33},[30,123674,123675],{"class":36},"ll",[30,123677,123678],{"class":74}," \u002Fdev",[30,123680,25282],{"class":317},[30,123682,30374],{"class":36},[30,123684,123685],{"class":74}," ttyUSB\n",[157,123687,123688],{},"运行结果如下：",[157,123690,123691],{},[160,123692],{"alt":25,"src":123693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[157,123695,123696,123697,123700],{},"也可以多次插拔USB设备，会发现设备端口",[27,123698,123699],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[157,123702,123703],{},[469,123704,118102],{},[157,123706,123707],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[287,123709,123711],{"id":123710},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[157,123713,123714,123716],{},[469,123715,123430],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[157,123718,123719,123721],{},[469,123720,123436],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[157,123723,123724],{},[469,123725,123442],{},[157,123727,123728],{},"（1）.查看所连接的主机USB接口的KERNELS",[157,123730,123731],{},"调用如下指令查看第一台雷达的USB信息：",[20,123733,123735],{"className":117434,"code":123734,"language":117436,"meta":25,"style":25},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[27,123736,123737,123757],{"__ignoreMap":25},[30,123738,123739,123742,123744,123747,123750,123752,123754],{"class":32,"line":33},[30,123740,123741],{"class":36},"udevadm",[30,123743,69959],{"class":74},[30,123745,123746],{"class":40}," --attribute-walk",[30,123748,123749],{"class":40}," --name=\u002Fdev\u002FttyUSB0",[30,123751,25282],{"class":317},[30,123753,30374],{"class":36},[30,123755,123756],{"class":74}," KERNELS\n",[30,123758,123759,123761,123763,123765,123768,123770,123772],{"class":32,"line":44},[30,123760,123741],{"class":36},[30,123762,69959],{"class":74},[30,123764,123746],{"class":40},[30,123766,123767],{"class":40}," --name=\u002Fdev\u002FttyACM0",[30,123769,25282],{"class":317},[30,123771,30374],{"class":36},[30,123773,123756],{"class":74},[157,123775,123776],{},[160,123777],{"alt":25,"src":123778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[157,123780,123781],{},"调用如下指令查看第二台雷达的USB信息：",[20,123783,123785],{"className":117434,"code":123784,"language":117436,"meta":25,"style":25},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[27,123786,123787],{"__ignoreMap":25},[30,123788,123789,123791,123793,123795,123798,123800,123802],{"class":32,"line":33},[30,123790,123741],{"class":36},[30,123792,69959],{"class":74},[30,123794,123746],{"class":40},[30,123796,123797],{"class":40}," --name=\u002Fdev\u002FttyUSB1",[30,123799,25282],{"class":317},[30,123801,30374],{"class":36},[30,123803,123756],{"class":74},[157,123805,123806,123807,123810,123811,123814,123815,123818],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[27,123808,123809],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[27,123812,123813],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[469,123816,123817],{},"唯一性标识","”。",[157,123820,123470],{},[157,123822,123473,123823,123825],{},[27,123824,123476],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[20,123827,123828],{"className":117434,"code":123480,"language":117436,"meta":25,"style":25},[27,123829,123830],{"__ignoreMap":25},[30,123831,123832,123834,123836],{"class":32,"line":33},[30,123833,24757],{"class":36},[30,123835,118721],{"class":74},[30,123837,123491],{"class":74},[20,123839,123841],{"className":117434,"code":123840,"language":117436,"meta":25,"style":25},"KERNEL==\"ttyUSB*\", KERNELS==\"1-1.3:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_front\"\nKERNEL==\"ttyUSB*\", KERNELS==\"1-1.4:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_back\"\n",[27,123842,123843,123872],{"__ignoreMap":25},[30,123844,123845,123847,123849,123851,123854,123856,123859,123862,123864,123867,123869],{"class":32,"line":33},[30,123846,123504],{"class":321},[30,123848,367],{"class":317},[30,123850,123509],{"class":74},[30,123852,123853],{"class":321}," KERNELS",[30,123855,367],{"class":317},[30,123857,123858],{"class":74},"=\"1-1.3:1.0\",",[30,123860,123861],{"class":36}," MODE:",[30,123863,367],{"class":74},[30,123865,123866],{"class":36},"\"0777\"",[30,123868,698],{"class":36},[30,123870,123871],{"class":74}," SYMLINK+=\"rplidar_front\"\n",[30,123873,123874,123876,123878,123880,123882,123884,123887,123889,123891,123893,123895],{"class":32,"line":44},[30,123875,123504],{"class":321},[30,123877,367],{"class":317},[30,123879,123509],{"class":74},[30,123881,123853],{"class":321},[30,123883,367],{"class":317},[30,123885,123886],{"class":74},"=\"1-1.4:1.0\",",[30,123888,123861],{"class":36},[30,123890,367],{"class":74},[30,123892,123866],{"class":36},[30,123894,698],{"class":36},[30,123896,123897],{"class":74}," SYMLINK+=\"rplidar_back\"\n",[157,123899,123589],{},[157,123901,123592],{},[20,123903,123904],{"className":117434,"code":123595,"language":117436,"meta":25,"style":25},[27,123905,123906,123910,123920,123930,123934,123938,123948],{"__ignoreMap":25},[30,123907,123908],{"class":32,"line":33},[30,123909,123602],{"class":379},[30,123911,123912,123914,123916,123918],{"class":32,"line":44},[30,123913,24757],{"class":36},[30,123915,120186],{"class":74},[30,123917,123611],{"class":74},[30,123919,123614],{"class":74},[30,123921,123922,123924,123926,123928],{"class":32,"line":52},[30,123923,24757],{"class":36},[30,123925,120186],{"class":74},[30,123927,123611],{"class":74},[30,123929,123625],{"class":74},[30,123931,123932],{"class":32,"line":60},[30,123933,2582],{"emptyLinePlaceholder":245},[30,123935,123936],{"class":32,"line":68},[30,123937,123634],{"class":379},[30,123939,123940,123942,123944,123946],{"class":32,"line":80},[30,123941,24757],{"class":36},[30,123943,123641],{"class":74},[30,123945,123644],{"class":74},[30,123947,123647],{"class":40},[30,123949,123950,123952,123954],{"class":32,"line":88},[30,123951,24757],{"class":36},[30,123953,123641],{"class":74},[30,123955,123656],{"class":74},[157,123957,123659],{},[157,123959,123662],{},[157,123961,123665,123962,123965],{},[27,123963,123964],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[157,123967,123968],{},[160,123969],{"alt":25,"src":123970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[157,123972,123973],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[157,123975,123976,123978],{},[469,123977,118102],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[287,123980,123982],{"id":123981},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[157,123984,123985],{},"（1）.查看所连接的主机USB接口的信息",[20,123987,123989],{"className":117434,"code":123988,"language":117436,"meta":25,"style":25},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[27,123990,123991,124021],{"__ignoreMap":25},[30,123992,123993,123995,123997,124000,124002,124004,124006,124008,124011,124014,124016,124019],{"class":32,"line":33},[30,123994,123741],{"class":36},[30,123996,69959],{"class":74},[30,123998,123999],{"class":40}," -a",[30,124001,29354],{"class":40},[30,124003,28560],{"class":321},[30,124005,123741],{"class":36},[30,124007,69959],{"class":74},[30,124009,124010],{"class":40}," -q",[30,124012,124013],{"class":74}," path",[30,124015,25288],{"class":40},[30,124017,124018],{"class":74}," \u002Fdev\u002FttyACM0",[30,124020,328],{"class":321},[30,124022,124023,124025,124027,124029,124031,124033,124035,124037,124039,124041,124043,124046],{"class":32,"line":44},[30,124024,123741],{"class":36},[30,124026,69959],{"class":74},[30,124028,123999],{"class":40},[30,124030,29354],{"class":40},[30,124032,28560],{"class":321},[30,124034,123741],{"class":36},[30,124036,69959],{"class":74},[30,124038,124010],{"class":40},[30,124040,124013],{"class":74},[30,124042,25288],{"class":40},[30,124044,124045],{"class":74}," \u002Fdev\u002FttyUSB0",[30,124047,328],{"class":321},[157,124049,124050],{},[160,124051],{"alt":25,"src":124052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[157,124054,124055],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[157,124057,123470],{},[157,124059,123473,124060,123825],{},[27,124061,123476],{},[20,124063,124064],{"className":117434,"code":123480,"language":117436,"meta":25,"style":25},[27,124065,124066],{"__ignoreMap":25},[30,124067,124068,124070,124072],{"class":32,"line":33},[30,124069,24757],{"class":36},[30,124071,118721],{"class":74},[30,124073,123491],{"class":74},[20,124075,124077],{"className":117434,"code":124076,"language":117436,"meta":25,"style":25},"KERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0001\", MODE:=\"0777\", SYMLINK+=\"ttyACM_MCU\"\nKERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0002\", MODE:=\"0777\", SYMLINK+=\"ttyACM_Lidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"ttyUSB_IMU\"\n",[27,124078,124079,124107,124133],{"__ignoreMap":25},[30,124080,124081,124083,124085,124088,124090,124092,124094,124096,124099,124102,124104],{"class":32,"line":33},[30,124082,123504],{"class":321},[30,124084,367],{"class":317},[30,124086,124087],{"class":74},"=\"ttyACM*\",",[30,124089,123512],{"class":36},[30,124091,123515],{"class":74},[30,124093,123544],{"class":36},[30,124095,698],{"class":36},[30,124097,124098],{"class":74}," ATTRS{idProduct}==\"55d4\",",[30,124100,124101],{"class":74}," ATTRS{serial}==\"0001\",",[30,124103,123526],{"class":74},[30,124105,124106],{"class":74}," SYMLINK+=\"ttyACM_MCU\"\n",[30,124108,124109,124111,124113,124115,124117,124119,124121,124123,124125,124128,124130],{"class":32,"line":44},[30,124110,123504],{"class":321},[30,124112,367],{"class":317},[30,124114,124087],{"class":74},[30,124116,123512],{"class":36},[30,124118,123515],{"class":74},[30,124120,123544],{"class":36},[30,124122,698],{"class":36},[30,124124,124098],{"class":74},[30,124126,124127],{"class":74}," ATTRS{serial}==\"0002\",",[30,124129,123526],{"class":74},[30,124131,124132],{"class":74}," SYMLINK+=\"ttyACM_Lidar\"\n",[30,124134,124135,124137,124139,124141,124143,124145,124147,124149,124151,124153],{"class":32,"line":52},[30,124136,123504],{"class":321},[30,124138,367],{"class":317},[30,124140,123509],{"class":74},[30,124142,123512],{"class":36},[30,124144,123515],{"class":74},[30,124146,123544],{"class":36},[30,124148,698],{"class":36},[30,124150,123549],{"class":74},[30,124152,123526],{"class":74},[30,124154,124155],{"class":74}," SYMLINK+=\"ttyUSB_IMU\"\n",[157,124157,123589],{},[157,124159,123592],{},[20,124161,124162],{"className":117434,"code":123595,"language":117436,"meta":25,"style":25},[27,124163,124164,124168,124178,124188,124192,124196,124206],{"__ignoreMap":25},[30,124165,124166],{"class":32,"line":33},[30,124167,123602],{"class":379},[30,124169,124170,124172,124174,124176],{"class":32,"line":44},[30,124171,24757],{"class":36},[30,124173,120186],{"class":74},[30,124175,123611],{"class":74},[30,124177,123614],{"class":74},[30,124179,124180,124182,124184,124186],{"class":32,"line":52},[30,124181,24757],{"class":36},[30,124183,120186],{"class":74},[30,124185,123611],{"class":74},[30,124187,123625],{"class":74},[30,124189,124190],{"class":32,"line":60},[30,124191,2582],{"emptyLinePlaceholder":245},[30,124193,124194],{"class":32,"line":68},[30,124195,123634],{"class":379},[30,124197,124198,124200,124202,124204],{"class":32,"line":80},[30,124199,24757],{"class":36},[30,124201,123641],{"class":74},[30,124203,123644],{"class":74},[30,124205,123647],{"class":40},[30,124207,124208,124210,124212],{"class":32,"line":88},[30,124209,24757],{"class":36},[30,124211,123641],{"class":74},[30,124213,123656],{"class":74},[157,124215,124216,124217],{},"再重新插拔设备即可，或者 ",[469,124218,124219],{},"直接重启系统。",[157,124221,123662],{},[157,124223,123665,124224,123965],{},[27,124225,123964],{},[157,124227,124228],{},[160,124229],{"alt":25,"src":124230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[157,124232,123973],{},[157,124234,124235,124237],{},[469,124236,118102],{}," 一些设备可能没有串口号等。",[287,124239,124241],{"id":124240},"_744-其他注意事项","7.4.4 其他注意事项",[157,124243,124244,124245,124247,124248,124251,124252,18592,124255,124258,124259,124261],{},"并非所有的USB设备端口号都是",[27,124246,123699],{},"的格式，比如Arduino的端口号可能是",[27,124249,124250],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[27,124253,124254],{},"videon",[27,124256,124257],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[27,124260,124254],{},"端口，绑定时需要关联的也是该接口。",[157,124263,124264,124265,124268,124269,124272,124273,124275,124276,124279,124280,124283,124284,124287,124288,124287,124291,124287,124294,28523],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[27,124266,124267],{},"KERNEL==\"ttyUSB*\"","修改为",[27,124270,124271],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[27,124274,124267],{},"修改为类似于",[27,124277,124278],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[27,124281,124282],{},"video[0,2,4,6]","表示可以绑定的端口为",[27,124285,124286],{},"video0","或",[27,124289,124290],{},"video2",[27,124292,124293],{},"video4",[27,124295,124296],{},"video6",[15,124298,124300],{"id":124299},"_75-挂载内网网页","7.5 挂载内网网页",[157,124302,124303],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[157,124305,124306],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[157,124308,124309],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[157,124311,124312,124313],{},"Termux 下载地址（F-Droid）：",[558,124314,124315],{"href":124315,"rel":124316},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24045],[157,124318,124319],{},"首先打开app后，先更新软件缓存：",[20,124321,124323],{"className":117434,"code":124322,"language":117436,"meta":25,"style":25},"pkg update\n",[27,124324,124325],{"__ignoreMap":25},[30,124326,124327,124330],{"class":32,"line":33},[30,124328,124329],{"class":36},"pkg",[30,124331,26380],{"class":74},[157,124333,124334],{},"然后换源",[20,124336,124338],{"className":117434,"code":124337,"language":117436,"meta":25,"style":25},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[27,124339,124340],{"__ignoreMap":25},[30,124341,124342,124344,124347],{"class":32,"line":33},[30,124343,123212],{"class":36},[30,124345,124346],{"class":321}," $PREFIX",[30,124348,124349],{"class":74},"\u002Fetc\u002Fapt\u002Fsources.list\n",[157,124351,124352],{},"将该文件内容替换为下面：",[20,124354,124356],{"className":117434,"code":124355,"language":117436,"meta":25,"style":25},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[27,124357,124358],{"__ignoreMap":25},[30,124359,124360,124363,124366,124369],{"class":32,"line":33},[30,124361,124362],{"class":36},"deb",[30,124364,124365],{"class":74}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[30,124367,124368],{"class":74}," stable",[30,124370,124371],{"class":74}," main\n",[147,124373,124374,124401],{},[150,124375,124376,124377,124379,124380],{},"如果你使用的是",[27,124378,123212],{},"编辑器：",[147,124381,124382,124389,124395],{},[150,124383,124384,124385,124388],{},"按 ",[27,124386,124387],{},"Ctrl+O"," 保存文件。",[150,124390,124384,124391,124394],{},[27,124392,124393],{},"Enter"," 确认文件名。",[150,124396,124384,124397,124400],{},[27,124398,124399],{},"Ctrl+X"," 退出编辑器。",[150,124402,124376,124403,124379,124406],{},[27,124404,124405],{},"vim",[147,124407,124408,124414],{},[150,124409,124384,124410,124413],{},[27,124411,124412],{},"Esc"," 退出编辑模式。",[150,124415,124416,124417,124419],{},"输入 ",[27,124418,119359],{}," 保存并退出。",[157,124421,124422],{},"接下来重新更新软件源：",[20,124424,124426],{"className":117434,"code":124425,"language":117436,"meta":25,"style":25},"pkg update && pkg upgrade\n",[27,124427,124428],{"__ignoreMap":25},[30,124429,124430,124432,124434,124436,124438],{"class":32,"line":33},[30,124431,124329],{"class":36},[30,124433,117485],{"class":74},[30,124435,26328],{"class":321},[30,124437,124329],{"class":36},[30,124439,117471],{"class":74},[157,124441,124442],{},"安装python：",[20,124444,124446],{"className":117434,"code":124445,"language":117436,"meta":25,"style":25},"pkg install python\n",[27,124447,124448],{"__ignoreMap":25},[30,124449,124450,124452,124454],{"class":32,"line":33},[30,124451,124329],{"class":36},[30,124453,24014],{"class":74},[30,124455,124456],{"class":74}," python\n",[157,124458,124459,26611],{},[469,124460,124461],{},"通过Termux访问设备存储",[157,124463,124464],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[20,124466,124468],{"className":117434,"code":124467,"language":117436,"meta":25,"style":25},"termux-setup-storage\n",[27,124469,124470],{"__ignoreMap":25},[30,124471,124472],{"class":32,"line":33},[30,124473,124467],{"class":36},[271,124475,124476],{},[150,124477,124478,26611,124481],{},[469,124479,124480],{},"进入HTML文件所在的目录",[271,124482,124483],{},[150,124484,124485,124486,124488],{},"使用",[27,124487,101414],{},"命令进入HTML文件所在的目录：",[20,124490,124492],{"className":117434,"code":124491,"language":117436,"meta":25,"style":25},"cd ~\u002Fyour_html_folder\n",[27,124493,124494],{"__ignoreMap":25},[30,124495,124496,124498],{"class":32,"line":33},[30,124497,101414],{"class":40},[30,124499,124500],{"class":74}," ~\u002Fyour_html_folder\n",[271,124502,124503],{"start":44},[150,124504,124505,26611,124508,124513,124530],{},[469,124506,124507],{},"启动Python HTTP服务器",[271,124509,124510],{},[150,124511,124512],{},"运行以下命令启动一个简单的HTTP服务器：",[20,124514,124516],{"className":117434,"code":124515,"language":117436,"meta":25,"style":25},"python -m http.server 8000\n",[27,124517,124518],{"__ignoreMap":25},[30,124519,124520,124522,124524,124527],{"class":32,"line":33},[30,124521,30518],{"class":36},[30,124523,101020],{"class":40},[30,124525,124526],{"class":74}," http.server",[30,124528,124529],{"class":40}," 8000\n",[271,124531,124532],{"start":52},[150,124533,124534,124535,124538],{},"这会在端口",[27,124536,124537],{},"8000","上启动一个Web服务器。",[147,124540,124541],{},[150,124542,124543],{},"启动服务器后，Termux会显示日志信息，例如：",[20,124545,124547],{"className":120954,"code":124546,"language":120956,"meta":120957,"style":25},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[27,124548,124549],{"__ignoreMap":25},[30,124550,124551],{"class":32,"line":33},[30,124552,124546],{},[147,124554,124555],{},[150,124556,124557],{},"这表示服务器已成功启动。",[157,124559,124560],{},[469,124561,124562],{},"在浏览器中访问HTML文件",[271,124564,124565],{},[150,124566,124567,26611,124570,124575],{},[469,124568,124569],{},"在同一设备上访问",[271,124571,124572],{},[150,124573,124574],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[20,124576,124579],{"className":124577,"code":124578,"language":71802,"meta":25,"style":25},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[27,124580,124581],{"__ignoreMap":25},[30,124582,124583,124586],{"class":32,"line":33},[30,124584,124585],{"class":321},"http:",[30,124587,124588],{"class":379},"\u002F\u002Flocalhost:8000\n",[147,124590,124591],{},[150,124592,124593,124594,124597],{},"如果HTML文件中有",[27,124595,124596],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[15,124599,124601],{"id":124600},"_76-linux重点知识","7.6 Linux重点知识",[287,124603,124605],{"id":124604},"_761-关于点的说明","7.6.1 关于点的说明",[157,124607,124608],{},[160,124609],{"alt":25,"src":124610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[157,124612,124613],{},"一点本目录，两点上目录",[287,124615,124617],{"id":124616},"_762-目录","7.6.2 目录",[22180,124619,124621],{"id":124620},"_7621-系统启动必须","7.6.2.1 系统启动必须",[157,124623,124624],{},[469,124625,124626],{},"\u002Fboot:",[157,124628,124629],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[157,124631,124632],{},[469,124633,124634],{},"\u002Fetc:",[157,124636,124637],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[157,124639,124640],{},[469,124641,124642],{},"\u002Flib：",[157,124644,124645],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[157,124647,124648],{},[469,124649,124650],{},"\u002Fsys:",[157,124652,124653],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22180,124655,124657],{"id":124656},"_7622-指令集合","7.6.2.2 指令集合",[157,124659,124660],{},[469,124661,124662],{},"\u002Fbin:",[157,124664,124665],{},"为二进制文件的缩写，存放最经常使用的命令",[157,124667,124668],{},[469,124669,124670],{},"\u002Fsbin:",[157,124672,124673],{},"只有系统管理员才能使用的程序和指令",[22180,124675,124677],{"id":124676},"_7623-外部文件管理","7.6.2.3 外部文件管理",[157,124679,124680],{},[469,124681,124682],{},"\u002Fdev:",[157,124684,124685],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[157,124687,124688],{},[469,124689,124690],{},"\u002Fmedia:",[157,124692,124693],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[157,124695,124696],{},[469,124697,124698],{},"\u002Fmnt:",[157,124700,124701],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22180,124703,124705],{"id":124704},"_7624-临时文件","7.6.2.4 临时文件",[157,124707,124708],{},[469,124709,124710],{},"\u002Frun:",[157,124712,124713],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[157,124715,124716],{},[469,124717,124718],{},"\u002Flost+found:",[157,124720,124721],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[157,124723,124724],{},[469,124725,124726],{},"\u002Ftmp:",[157,124728,124729],{},"这个目录是用来存放一些临时文件的",[22180,124731,124733],{"id":124732},"_7625-账户","7.6.2.5 账户",[157,124735,124736],{},[469,124737,124738],{},"\u002Froot：",[157,124740,124741],{},"系统管理员的用户主目录",[157,124743,124744,26611],{},[469,124745,124746],{},"\u002Fhome",[157,124748,124749],{},"用户的主目录，以用户的账号命名的",[157,124751,124752,26611],{},[469,124753,124754],{},"\u002Fusr",[157,124756,124757],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[157,124759,124760],{},[469,124761,124762],{},"\u002Fusr\u002Fbin：",[157,124764,124765],{},"系统用户使用的应用程序与指令",[157,124767,124768],{},[469,124769,124770],{},"\u002Fusr\u002Fsbin：",[157,124772,124773],{},"超级用户使用的比较高级的管理程序和系统守护程序",[157,124775,124776],{},[469,124777,124778],{},"\u002Fusr\u002Fsrc：",[157,124780,124781],{},"内核源代码默认的放置目录",[22180,124783,124785],{"id":124784},"_7626-运行过程要用","7.6.2.6 运行过程要用",[157,124787,124788],{},[469,124789,124790],{},"\u002Fvar：",[157,124792,124793],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[157,124795,124796],{},[469,124797,124798],{},"\u002Fproc:",[157,124800,124801,124802,124805],{},"管理 ",[469,124803,124804],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22180,124807,124809],{"id":124808},"_7627-扩展用的","7.6.2.7 扩展用的",[157,124811,124812],{},[469,124813,124814],{},"\u002Fopt:",[157,124816,124817],{},"默认是空的，我们安装额外软件可以放在这个里面",[157,124819,124820],{},[469,124821,124822],{},"\u002Fsrv:",[157,124824,124825],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[287,124827,124829],{"id":124828},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[157,124831,124832],{},[160,124833],{"alt":25,"src":124834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[157,124836,124837],{},"windows-->linux:",[157,124839,124840],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[157,124842,124843],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[157,124845,124846],{},"linux传输文件到windows",[157,124848,124849],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[287,124851,124853],{"id":124852},"_764-易忘知识","7.6.4 易忘知识",[157,124855,124856],{},"操作系统内核查看",[20,124858,124859],{"className":117434,"code":121428,"language":117436,"meta":25,"style":25},[27,124860,124861],{"__ignoreMap":25},[30,124862,124863,124865],{"class":32,"line":33},[30,124864,70342],{"class":36},[30,124866,121437],{"class":40},[157,124868,124869],{},[160,124870],{"alt":25,"src":124871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[157,124873,124874],{},[160,124875],{"alt":25,"src":124876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[20,124878,124880],{"className":117434,"code":124879,"language":117436,"meta":25,"style":25},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[27,124881,124882,124894],{"__ignoreMap":25},[30,124883,124884,124886,124889,124892],{"class":32,"line":33},[30,124885,121645],{"class":36},[30,124887,124888],{"class":74}," mvtest",[30,124890,124891],{"class":74}," mvtest2",[30,124893,2856],{"class":321},[30,124895,124896],{"class":32,"line":44},[30,124897,124898],{"class":36},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[157,124900,124901],{},[160,124902],{"alt":25,"src":124903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[157,124905,124906],{},[160,124907],{"alt":25,"src":124908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[157,124910,124911,124912,124915],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[27,124913,124914],{},"du -a"," 可以快速查看磁盘使用细节。",[287,124917,124919],{"id":124918},"_765-vim","7.6.5 Vim",[157,124921,124922],{},[160,124923],{"alt":25,"src":124924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[157,124926,124927],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[157,124929,124930],{},"一开始进去为命令模式，此时点击输入的字母为命令",[157,124932,124933],{},[469,124934,124935],{},"1.命令模式：",[157,124937,124938],{},"i 切换到输入模式，在光标当前位置开始输入文本",[157,124940,124941],{},"x 删除当前光标所在处的字符",[157,124943,124944],{},"：切换到底线命令模式，以在最底一行输入命令",[157,124946,124947],{},"a 进行插入模式，在光标下一个位置输入文本",[157,124949,124950],{},"o 在当前的下方插入一个新行，并进入插入模式",[157,124952,124953],{},"0 在当前行的上方插入一个新行，并进入插入模式",[157,124955,124956],{},"dd 剪切当前行",[157,124958,124959],{},"yy 复制当前行",[157,124961,124962],{},"p 粘贴剪贴板内容到光标下方",[157,124964,124965],{},"P 粘贴剪贴板内容到光标上方",[157,124967,124968],{},"u 撤销上一次操作",[157,124970,124971],{},"ctrl+r 重做上一次操作",[157,124973,124974,124976],{},[1115,124975],{}," 保存文件",[157,124978,124979,124981],{},[965,124980],{}," 退出Vim编辑器",[157,124983,124984,124986],{},[965,124985],{},"! 强制退出Vim编辑器，不保存修改",[157,124988,124989],{},[469,124990,124991],{},"2.输入模式：",[157,124993,124994],{},[160,124995],{"alt":25,"src":124996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[157,124998,124999],{},[469,125000,125001],{},"3.底线命令模式：",[157,125003,125004],{},[160,125005],{"alt":25,"src":125006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[157,125008,125009],{},"按下esc可以退出底线命令模式",[287,125011,125013],{"id":125012},"_766-apt","7.6.6 apt",[157,125015,125016],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[287,125018,125020],{"id":125019},"_767-home与root的区别","7.6.7 home与root的区别",[157,125022,125023],{},[160,125024],{"alt":25,"src":125025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[157,125027,125028],{},[160,125029],{"alt":25,"src":125030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[157,125032,125033],{},[160,125034],{"alt":25,"src":125035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[157,125037,125038],{},[160,125039],{"alt":25,"src":125040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[287,125042,125044],{"id":125043},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[157,125046,125047],{},[558,125048,125049],{"href":125049,"rel":125050},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24045],[271,125052,125053,125056],{},[150,125054,125055],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[150,125057,125058],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[157,125060,125061],{},[160,125062],{"alt":25,"src":125063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[157,125065,125066],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[157,125068,125069],{},[160,125070],{"alt":25,"src":125071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[20,125073,125075],{"className":120954,"code":125074,"language":120956,"meta":120957,"style":25},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[27,125076,125077,125082],{"__ignoreMap":25},[30,125078,125079],{"class":32,"line":33},[30,125080,125081],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[30,125083,125084],{"class":32,"line":44},[30,125085,125086],{},".\u002Fpycharm.sh\n",[157,125088,125089],{},"3️⃣创建.desktop文件",[157,125091,125092],{},[469,125093,125094],{},"原理：",[147,125096,125097,125107],{},[150,125098,125099,125100,125106],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[469,125101,125102,125105],{},[27,125103,125104],{},".desktop"," 文件"," 来识别应用。",[150,125108,125109,125111,125112],{},[27,125110,125104],{}," 文件相当于一个“应用注册表”，告诉系统：",[147,125113,125114,125117,125120,125123,125126],{},[150,125115,125116],{},"应用名字（Name）",[150,125118,125119],{},"图标（Icon）",[150,125121,125122],{},"执行命令（Exec）",[150,125124,125125],{},"分类（Categories）",[150,125127,125128],{},"是否需要终端（Terminal）",[20,125130,125132],{"className":120954,"code":125131,"language":120956,"meta":120957,"style":25},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[27,125133,125134,125139],{"__ignoreMap":25},[30,125135,125136],{"class":32,"line":33},[30,125137,125138],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[30,125140,125141],{"class":32,"line":44},[30,125142,125143],{},"nano pycharm.desktop\n",[157,125145,125146],{},"nano是一个命令行下的编辑器，也可以使用vim",[20,125148,125150],{"className":120954,"code":125149,"language":120956,"meta":120957,"style":25},"[Desktop Entry]\nVersion=1.0\nType=Application\nName=PyCharm\nIcon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\nExec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\nComment=JetBrains PyCharm IDE\nCategories=Development;IDE;\nTerminal=false\nStartupWMClass=jetbrains-pycharm\n",[27,125151,125152,125157,125162,125167,125172,125177,125182,125187,125192,125197],{"__ignoreMap":25},[30,125153,125154],{"class":32,"line":33},[30,125155,125156],{},"[Desktop Entry]\n",[30,125158,125159],{"class":32,"line":44},[30,125160,125161],{},"Version=1.0\n",[30,125163,125164],{"class":32,"line":52},[30,125165,125166],{},"Type=Application\n",[30,125168,125169],{"class":32,"line":60},[30,125170,125171],{},"Name=PyCharm\n",[30,125173,125174],{"class":32,"line":68},[30,125175,125176],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[30,125178,125179],{"class":32,"line":80},[30,125180,125181],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[30,125183,125184],{"class":32,"line":88},[30,125185,125186],{},"Comment=JetBrains PyCharm IDE\n",[30,125188,125189],{"class":32,"line":96},[30,125190,125191],{},"Categories=Development;IDE;\n",[30,125193,125194],{"class":32,"line":104},[30,125195,125196],{},"Terminal=false\n",[30,125198,125199],{"class":32,"line":112},[30,125200,125201],{},"StartupWMClass=jetbrains-pycharm\n",[147,125203,125204,125210,125216,125222],{},[150,125205,125206,125209],{},[27,125207,125208],{},"Exec"," → 点击图标时执行的命令",[150,125211,125212,125215],{},[27,125213,125214],{},"Icon"," → 显示在菜单和桌面上的图标",[150,125217,125218,125221],{},[27,125219,125220],{},"Terminal=false"," → 不打开终端",[150,125223,125224,125227],{},[27,125225,125226],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125229,125230,125231],"blockquote",{},[157,125232,125233,125234,125236,125237],{},"可以理解成 ",[27,125235,125104],{}," 文件是 Linux 的 ",[469,125238,125239],{},"快捷方式配置文件",[157,125241,125242],{},"4️⃣设置可执行权限",[20,125244,125246],{"className":120954,"code":125245,"language":120956,"meta":120957,"style":25},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[27,125247,125248],{"__ignoreMap":25},[30,125249,125250],{"class":32,"line":33},[30,125251,125245],{},[157,125253,125254],{},"5️⃣桌面图标启动的话如下：",[20,125256,125258],{"className":120954,"code":125257,"language":120956,"meta":120957,"style":25},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[27,125259,125260,125265],{"__ignoreMap":25},[30,125261,125262],{"class":32,"line":33},[30,125263,125264],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[30,125266,125267],{"class":32,"line":44},[30,125268,125269],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[271,125271,125272],{"start":52},[150,125273,125274],{},"下载Appimage文件实现软件的安装",[157,125276,125277],{},"1️⃣先下载appimage",[157,125279,125280],{},[558,125281,125282],{"href":125282,"rel":125283},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24045],[157,125285,125286],{},[160,125287],{"alt":25,"src":125288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[157,125290,125291],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[157,125293,125294],{},[160,125295],{"alt":25,"src":125296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[157,125298,125299],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[157,125301,125302],{},[160,125303],{"alt":25,"src":125304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[157,125306,125307],{},[160,125308],{"alt":25,"src":125309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[157,125311,125312,125313,125316],{},"3️⃣给他们放在",[27,125314,125315],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[157,125318,125319],{},"4️⃣给软件执行权限",[20,125321,125323],{"className":120954,"code":125322,"language":120956,"meta":120957,"style":25},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[27,125324,125325,125330],{"__ignoreMap":25},[30,125326,125327],{"class":32,"line":33},[30,125328,125329],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[30,125331,125332],{"class":32,"line":44},[30,125333,125334],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[157,125336,125337],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[20,125339,125341],{"className":117434,"code":125340,"language":117436,"meta":25,"style":25},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[27,125342,125343,125350,125357,125363],{"__ignoreMap":25},[30,125344,125345,125347],{"class":32,"line":33},[30,125346,101414],{"class":40},[30,125348,125349],{"class":74}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[30,125351,125352,125354],{"class":32,"line":44},[30,125353,101421],{"class":36},[30,125355,125356],{"class":74}," .\u002Fqqmusic.desktop\n",[30,125358,125359,125361],{"class":32,"line":52},[30,125360,124405],{"class":36},[30,125362,125356],{"class":74},[30,125364,125365,125367,125369,125371],{"class":32,"line":60},[30,125366,24757],{"class":36},[30,125368,24760],{"class":74},[30,125370,123271],{"class":74},[30,125372,125356],{"class":74},[157,125374,125375,125377],{},[27,125376,101421],{},"：一个 Linux 命令，主要功能是：",[147,125379,125380,125383],{},[150,125381,125382],{},"如果文件不存在，就创建一个新的空文件",[150,125384,125385],{},"如果文件已存在，就更新该文件的最后修改时间",[20,125387,125389],{"className":120954,"code":125388,"language":120956,"meta":120957,"style":25},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[27,125390,125391,125395,125400,125405,125410,125414,125419],{"__ignoreMap":25},[30,125392,125393],{"class":32,"line":33},[30,125394,125156],{},[30,125396,125397],{"class":32,"line":44},[30,125398,125399],{},"Name=QQ音乐\n",[30,125401,125402],{"class":32,"line":52},[30,125403,125404],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[30,125406,125407],{"class":32,"line":60},[30,125408,125409],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[30,125411,125412],{"class":32,"line":68},[30,125413,125166],{},[30,125415,125416],{"class":32,"line":80},[30,125417,125418],{},"Categories=Audio;Music;Player;\n",[30,125420,125421],{"class":32,"line":88},[30,125422,125423],{},"Comment=QQ Music Client for Linux\n",[157,125425,125426],{},"将文件复制进去",[157,125428,125429],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[157,125431,125432],{},[160,125433],{"alt":25,"src":125434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[157,125436,125437],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[157,125439,125440],{},[160,125441],{"alt":25,"src":125442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[157,125444,125445,125446,125449,125450,125453],{},"如果你用的不是KDE，那么也可以直接修改",[27,125447,125448],{},"qqmuic.desktop","：在exec的末尾加上",[27,125451,125452],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[20,125455,125457],{"className":120954,"code":125456,"language":120956,"meta":120957,"style":25},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[27,125458,125459,125463,125467,125472,125476,125480,125484],{"__ignoreMap":25},[30,125460,125461],{"class":32,"line":33},[30,125462,125156],{},[30,125464,125465],{"class":32,"line":44},[30,125466,125399],{},[30,125468,125469],{"class":32,"line":52},[30,125470,125471],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[30,125473,125474],{"class":32,"line":60},[30,125475,125409],{},[30,125477,125478],{"class":32,"line":68},[30,125479,125166],{},[30,125481,125482],{"class":32,"line":80},[30,125483,125418],{},[30,125485,125486],{"class":32,"line":88},[30,125487,125423],{},[157,125489,125490],{},[160,125491],{"alt":25,"src":125492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[157,125494,125495],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[20,125497,125499],{"className":120954,"code":125498,"language":120956,"meta":120957,"style":25},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[27,125500,125501],{"__ignoreMap":25},[30,125502,125503],{"class":32,"line":33},[30,125504,125498],{},[271,125506,125507],{"start":60},[150,125508,125509],{},"去Flathub上安装软件",[157,125511,125512],{},[558,125513,125514],{"href":125514,"rel":125515},"https:\u002F\u002Fflathub.org\u002F",[24045],[157,125517,125518],{},"1️⃣去上面的官网搜索软件+下载软件",[157,125520,125521],{},[160,125522],{"alt":25,"src":125523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[20,125525,125527],{"className":120954,"code":125526,"language":120956,"meta":120957,"style":25},"flatpak install flathub com.obsproject.Studio\n",[27,125528,125529],{"__ignoreMap":25},[30,125530,125531],{"class":32,"line":33},[30,125532,125526],{},[157,125534,125535],{},[160,125536],{"alt":25,"src":125537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[157,125539,125540],{},"2️⃣运行软件",[157,125542,125543],{},"a.官方方式：",[157,125545,125546],{},[160,125547],{"alt":25,"src":125548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[20,125550,125551],{"className":120954,"code":125526,"language":120956,"meta":120957,"style":25},[27,125552,125553],{"__ignoreMap":25},[30,125554,125555],{"class":32,"line":33},[30,125556,125526],{},[157,125558,125559],{},"b.当普通软件运行：",[157,125561,125562],{},[160,125563],{"alt":25,"src":125564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[157,125566,125567],{},[160,125568],{"alt":25,"src":125569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[234,125571,125572],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":25,"searchDepth":44,"depth":44,"links":125574},[125575,125576,125581,125582,125588,125589],{"id":122307,"depth":44,"text":122308},{"id":122649,"depth":44,"text":122650,"children":125577},[125578,125579,125580],{"id":122653,"depth":52,"text":122654},{"id":122720,"depth":52,"text":122721},{"id":122981,"depth":52,"text":122982},{"id":123134,"depth":44,"text":123135},{"id":123372,"depth":44,"text":123373,"children":125583},[125584,125585,125586,125587],{"id":123424,"depth":52,"text":123425},{"id":123710,"depth":52,"text":123711},{"id":123981,"depth":52,"text":123982},{"id":124240,"depth":52,"text":124241},{"id":124299,"depth":44,"text":124300},{"id":124600,"depth":44,"text":124601,"children":125590},[125591,125592,125593,125594,125595,125596,125597,125598],{"id":124604,"depth":52,"text":124605},{"id":124616,"depth":52,"text":124617},{"id":124828,"depth":52,"text":124829},{"id":124852,"depth":52,"text":124853},{"id":124918,"depth":52,"text":124919},{"id":125012,"depth":52,"text":125013},{"id":125019,"depth":52,"text":125020},{"id":125043,"depth":52,"text":125044},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122299,"description":242},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125605,"title":125606,"body":125607,"description":242,"extension":243,"meta":125611,"navigation":245,"path":125612,"seo":125613,"stem":125614,"__hash__":125615},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125608,"toc":125609},[],{"title":25,"searchDepth":44,"depth":44,"links":125610},[],{"category":30401},"\u002Fwiki\u002F2025-01-27-linux",{"title":125606,"description":242},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125617,"title":125618,"body":125619,"description":125623,"extension":243,"meta":126014,"navigation":245,"path":126015,"seo":126016,"stem":126017,"__hash__":126018},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125620,"toc":126012},[125621,125624,125628,125645,125648,125701,125705,125707,125747,125756,125760,125763,126004,126009],[157,125622,125623],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125625,125627],{"id":125626},"_1ubuntu环境配置","1.Ubuntu环境配置",[271,125629,125630,125633,125636,125639,125642],{},[150,125631,125632],{},"ubuntu环境换源",[150,125634,125635],{},"安装cuda",[150,125637,125638],{},"安装miniconda",[150,125640,125641],{},"安装pytorch",[150,125643,125644],{},"安装genesis",[157,125646,125647],{},"参考链接：",[20,125649,125651],{"className":22,"code":125650,"language":24,"meta":25,"style":25},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[27,125652,125653],{"__ignoreMap":25},[30,125654,125655,125658,125661,125664,125666,125669,125672,125674,125677,125680,125682,125685,125688,125690,125693,125696,125698],{"class":32,"line":33},[30,125656,125657],{"class":36},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[30,125659,125660],{"class":74},"=blogdetail",[30,125662,125663],{"class":321},"&sharetype",[30,125665,367],{"class":317},[30,125667,125668],{"class":74},"blogdetail",[30,125670,125671],{"class":321},"&sharerId",[30,125673,367],{"class":317},[30,125675,125676],{"class":74},"144728092",[30,125678,125679],{"class":321},"&sharerefer",[30,125681,367],{"class":317},[30,125683,125684],{"class":74},"PC",[30,125686,125687],{"class":321},"&sharesource",[30,125689,367],{"class":317},[30,125691,125692],{"class":74},"qq_69379513",[30,125694,125695],{"class":321},"&sharefrom",[30,125697,367],{"class":317},[30,125699,125700],{"class":74},"from_link\n",[10,125702,125704],{"id":125703},"_2genesis-报错issue","2.Genesis 报错issue",[157,125706,125647],{},[20,125708,125709],{"className":22,"code":125650,"language":24,"meta":25,"style":25},[27,125710,125711],{"__ignoreMap":25},[30,125712,125713,125715,125717,125719,125721,125723,125725,125727,125729,125731,125733,125735,125737,125739,125741,125743,125745],{"class":32,"line":33},[30,125714,125657],{"class":36},[30,125716,125660],{"class":74},[30,125718,125663],{"class":321},[30,125720,367],{"class":317},[30,125722,125668],{"class":74},[30,125724,125671],{"class":321},[30,125726,367],{"class":317},[30,125728,125676],{"class":74},[30,125730,125679],{"class":321},[30,125732,367],{"class":317},[30,125734,125684],{"class":74},[30,125736,125687],{"class":321},[30,125738,367],{"class":317},[30,125740,125692],{"class":74},[30,125742,125695],{"class":321},[30,125744,367],{"class":317},[30,125746,125700],{"class":74},[20,125748,125750],{"className":22,"code":125749,"language":24,"meta":25,"style":25},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[27,125751,125752],{"__ignoreMap":25},[30,125753,125754],{"class":32,"line":33},[30,125755,125749],{"class":36},[10,125757,125759],{"id":125758},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[157,125761,125762],{},"hello_robot.py",[20,125764,125766],{"className":30516,"code":125765,"language":30518,"meta":25,"style":25},"import os\nos.environ['PYOPENGL_PLATFORM'] = 'glx'\n\nimport genesis as gs\nfrom pynput import keyboard\n\ngs.init(backend=gs.gpu)\n\nscene = gs.Scene(show_viewer=True)\nplane = scene.add_entity(gs.morphs.Plane())\nfranka = scene.add_entity(\n    gs.morphs.MJCF(file='xml\u002Ffranka_emika_panda\u002Fpanda.xml'),\n)\n\nscene.build()\n\ndef on_press(key):\n    try:\n        if key.char == 'q':\n            return False\n    except AttributeError:\n        pass\n\nlistener = keyboard.Listener(on_press=on_press)\nlistener.start()\n\nwhile listener.running:\n    scene.step()\n",[27,125767,125768,125774,125789,125793,125805,125817,125821,125834,125838,125857,125867,125877,125891,125895,125899,125904,125908,125918,125925,125939,125946,125956,125961,125965,125983,125988,125992,125999],{"__ignoreMap":25},[30,125769,125770,125772],{"class":32,"line":33},[30,125771,30530],{"class":317},[30,125773,45443],{"class":321},[30,125775,125776,125779,125782,125784,125786],{"class":32,"line":44},[30,125777,125778],{"class":321},"os.environ[",[30,125780,125781],{"class":74},"'PYOPENGL_PLATFORM'",[30,125783,4625],{"class":321},[30,125785,367],{"class":317},[30,125787,125788],{"class":74}," 'glx'\n",[30,125790,125791],{"class":32,"line":52},[30,125792,2582],{"emptyLinePlaceholder":245},[30,125794,125795,125797,125800,125802],{"class":32,"line":60},[30,125796,30530],{"class":317},[30,125798,125799],{"class":321}," genesis ",[30,125801,31521],{"class":317},[30,125803,125804],{"class":321}," gs\n",[30,125806,125807,125809,125812,125814],{"class":32,"line":68},[30,125808,30875],{"class":317},[30,125810,125811],{"class":321}," pynput ",[30,125813,30530],{"class":317},[30,125815,125816],{"class":321}," keyboard\n",[30,125818,125819],{"class":32,"line":80},[30,125820,2582],{"emptyLinePlaceholder":245},[30,125822,125823,125826,125829,125831],{"class":32,"line":88},[30,125824,125825],{"class":321},"gs.init(",[30,125827,125828],{"class":5398},"backend",[30,125830,367],{"class":317},[30,125832,125833],{"class":321},"gs.gpu)\n",[30,125835,125836],{"class":32,"line":96},[30,125837,2582],{"emptyLinePlaceholder":245},[30,125839,125840,125843,125845,125848,125851,125853,125855],{"class":32,"line":104},[30,125841,125842],{"class":321},"scene ",[30,125844,367],{"class":317},[30,125846,125847],{"class":321}," gs.Scene(",[30,125849,125850],{"class":5398},"show_viewer",[30,125852,367],{"class":317},[30,125854,31614],{"class":40},[30,125856,328],{"class":321},[30,125858,125859,125862,125864],{"class":32,"line":112},[30,125860,125861],{"class":321},"plane ",[30,125863,367],{"class":317},[30,125865,125866],{"class":321}," scene.add_entity(gs.morphs.Plane())\n",[30,125868,125869,125872,125874],{"class":32,"line":123},[30,125870,125871],{"class":321},"franka ",[30,125873,367],{"class":317},[30,125875,125876],{"class":321}," scene.add_entity(\n",[30,125878,125879,125882,125884,125886,125889],{"class":32,"line":131},[30,125880,125881],{"class":321},"    gs.morphs.MJCF(",[30,125883,45492],{"class":5398},[30,125885,367],{"class":317},[30,125887,125888],{"class":74},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[30,125890,38185],{"class":321},[30,125892,125893],{"class":32,"line":142},[30,125894,328],{"class":321},[30,125896,125897],{"class":32,"line":1811},[30,125898,2582],{"emptyLinePlaceholder":245},[30,125900,125901],{"class":32,"line":1825},[30,125902,125903],{"class":321},"scene.build()\n",[30,125905,125906],{"class":32,"line":1830},[30,125907,2582],{"emptyLinePlaceholder":245},[30,125909,125910,125912,125915],{"class":32,"line":1836},[30,125911,32085],{"class":317},[30,125913,125914],{"class":36}," on_press",[30,125916,125917],{"class":321},"(key):\n",[30,125919,125920,125923],{"class":32,"line":1857},[30,125921,125922],{"class":317},"    try",[30,125924,3921],{"class":321},[30,125926,125927,125929,125932,125934,125937],{"class":32,"line":1862},[30,125928,2679],{"class":317},[30,125930,125931],{"class":321}," key.char ",[30,125933,3131],{"class":317},[30,125935,125936],{"class":74}," 'q'",[30,125938,3921],{"class":321},[30,125940,125941,125943],{"class":32,"line":1876},[30,125942,15914],{"class":317},[30,125944,125945],{"class":40}," False\n",[30,125947,125948,125951,125954],{"class":32,"line":1881},[30,125949,125950],{"class":317},"    except",[30,125952,125953],{"class":40}," AttributeError",[30,125955,3921],{"class":321},[30,125957,125958],{"class":32,"line":1910},[30,125959,125960],{"class":317},"        pass\n",[30,125962,125963],{"class":32,"line":1915},[30,125964,2582],{"emptyLinePlaceholder":245},[30,125966,125967,125970,125972,125975,125978,125980],{"class":32,"line":1932},[30,125968,125969],{"class":321},"listener ",[30,125971,367],{"class":317},[30,125973,125974],{"class":321}," keyboard.Listener(",[30,125976,125977],{"class":5398},"on_press",[30,125979,367],{"class":317},[30,125981,125982],{"class":321},"on_press)\n",[30,125984,125985],{"class":32,"line":1937},[30,125986,125987],{"class":321},"listener.start()\n",[30,125989,125990],{"class":32,"line":1942},[30,125991,2582],{"emptyLinePlaceholder":245},[30,125993,125994,125996],{"class":32,"line":1947},[30,125995,108801],{"class":317},[30,125997,125998],{"class":321}," listener.running:\n",[30,126000,126001],{"class":32,"line":1961},[30,126002,126003],{"class":321},"    scene.step()\n",[157,126005,126006],{},[160,126007],{"alt":25,"src":126008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[234,126010,126011],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":25,"searchDepth":44,"depth":44,"links":126013},[],{"category":23560},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125618,"description":125623},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126020,"title":126021,"body":126022,"description":242,"extension":243,"meta":126037,"navigation":245,"path":126038,"seo":126039,"stem":126040,"__hash__":126041},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126023,"toc":126034},[126024,126027,126031],[10,126025,126021],{"id":126026},"_1-基础知识",[15,126028,126030],{"id":126029},"_11-js的组成","1.1 js的组成",[157,126032,126033],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":25,"searchDepth":44,"depth":44,"links":126035},[126036],{"id":126029,"depth":44,"text":126030},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126021,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126043,"title":126044,"body":126045,"description":242,"extension":243,"meta":126184,"navigation":245,"path":126185,"seo":126186,"stem":126187,"__hash__":126188},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126046,"toc":126172},[126047,126050,126054,126057,126061,126071,126075,126078,126081,126084,126088,126095,126101,126105,126111,126122,126126,126129,126133,126136,126140,126143,126147,126150,126154,126157,126160,126163,126166,126169],[10,126048,126044],{"id":126049},"_2-vscode必备内容",[15,126051,126053],{"id":126052},"_21-标签分类","2.1 标签分类",[157,126055,126056],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[15,126058,126060],{"id":126059},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[157,126062,126063,126064,126066,126067,126070],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[27,126065,546],{}," 然后按 ",[27,126068,126069],{},"Tab","，快速自动生成基本结构。",[15,126072,126074],{"id":126073},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[157,126076,126077],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[157,126079,126080],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[157,126082,126083],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[15,126085,126087],{"id":126086},"_24-视图缩放","2.4 视图缩放",[157,126089,126090,126091,126094],{},"缩放视图 ",[27,126092,126093],{},"ctrl+"," 可实现代码增大。",[157,126096,126097,126100],{},[27,126098,126099],{},"ctrl-"," 可实现代码减小。",[15,126102,126104],{"id":126103},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[157,126106,126107,126108,28523],{},"VSCode 新建文件快捷键为 ",[27,126109,126110],{},"ctrl+N",[157,126112,126113,126114,126117,126118,126121],{},"保存快捷键为 ",[27,126115,126116],{},"ctrl+S","，将文本保存为 ",[27,126119,126120],{},".html"," 文件。",[15,126123,126125],{"id":126124},"_26-auto-rename-tag","2.6 Auto Rename Tag",[157,126127,126128],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[15,126130,126132],{"id":126131},"_27-vscode-icons","2.7 vscode-icons",[157,126134,126135],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[15,126137,126139],{"id":126138},"_28-easy-less","2.8 Easy LESS",[157,126141,126142],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[15,126144,126146],{"id":126145},"_29-会了吧插件","2.9 会了吧插件",[157,126148,126149],{},"会了吧插件可以展示代码中英语单词的意思。",[15,126151,126153],{"id":126152},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[157,126155,126156],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[157,126158,126159],{},"②选定多个相同的单词:ctrl+D",[157,126161,126162],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[157,126164,126165],{},"④全局替换某些单词:ctrl+h",[157,126167,126168],{},"⑤快速定位到某一行:ctrl+g",[157,126170,126171],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":25,"searchDepth":44,"depth":44,"links":126173},[126174,126175,126176,126177,126178,126179,126180,126181,126182,126183],{"id":126052,"depth":44,"text":126053},{"id":126059,"depth":44,"text":126060},{"id":126073,"depth":44,"text":126074},{"id":126086,"depth":44,"text":126087},{"id":126103,"depth":44,"text":126104},{"id":126124,"depth":44,"text":126125},{"id":126131,"depth":44,"text":126132},{"id":126138,"depth":44,"text":126139},{"id":126145,"depth":44,"text":126146},{"id":126152,"depth":44,"text":126153},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126044,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126190,"title":126191,"body":126192,"description":242,"extension":243,"meta":126351,"navigation":245,"path":126352,"seo":126353,"stem":126354,"__hash__":126355},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126193,"toc":126343},[126194,126197,126201,126211,126217,126223,126227,126236,126240,126245,126248,126251,126255,126258,126268,126277,126286,126295,126305,126312,126317,126322,126335],[10,126195,126191],{"id":126196},"_3-html文本与容器标签",[15,126198,126200],{"id":126199},"_31-标题标签","3.1 标题标签",[157,126202,126203,126206,126207,126210],{},[27,126204,126205],{},"\u003Ch1>","我是一级标签",[27,126208,126209],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[157,126212,126213,126206,126215],{},[27,126214,126205],{},[27,126216,126209],{},[157,126218,123473,126219,126222],{},[27,126220,126221],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[15,126224,126226],{"id":126225},"_32-段落标签","3.2 段落标签",[157,126228,126229,126232,126233],{},[27,126230,126231],{},"\u003Cp>","....",[27,126234,126235],{},"\u003C\u002Fp>",[15,126237,126239],{"id":126238},"_33-换行标签","3.3 换行标签",[157,126241,126242],{},[27,126243,126244],{},"\u003Cbr \u002F>",[157,126246,126247],{},"具有强制换行的作用",[157,126249,126250],{},"单标签",[15,126252,126254],{"id":126253},"_34-文本格式化标签","3.4 文本格式化标签",[157,126256,126257],{},"提供粗体、斜体和下划线等效果",[157,126259,126260,126261,82677,126264,126267],{},"加粗：",[27,126262,126263],{},"\u003Cstrong>...\u003C\u002Fstrong>",[27,126265,126266],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[157,126269,126270,126271,82677,126274,126267],{},"斜体：",[27,126272,126273],{},"\u003Cem>...\u003C\u002Fem>",[27,126275,126276],{},"\u003Ci>...\u003C\u002Fi>",[157,126278,126279,126280,82677,126283,126267],{},"删除线：",[27,126281,126282],{},"\u003Cdel>...\u003C\u002Fdel>",[27,126284,126285],{},"\u003Cs>...\u003C\u002Fs>",[157,126287,126288,126289,82677,126292,126267],{},"下划线：",[27,126290,126291],{},"\u003Cins>...\u003C\u002Fins>",[27,126293,126294],{},"\u003Cu>...\u003C\u002Fu>",[15,126296,126298,126299,18592,126302,102831],{"id":126297},"_35-div和span标签","3.5 ",[27,126300,126301],{},"\u003Cdiv>",[27,126303,126304],{},"\u003Cspan>",[157,126306,126307,101156,126309,126311],{},[27,126308,126301],{},[27,126310,126304],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[157,126313,126314],{},[27,126315,126316],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[157,126318,126319],{},[27,126320,126321],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[157,126323,126324,126325,126327,126328,126330,126331,126334],{},"两者特点：①",[27,126326,126301],{}," 标签用来布局，但一行通常只放一个 ",[27,126329,126301],{},"。可以理解为一个大盒子，独占一行，在 ",[27,126332,126333],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[157,126336,77387,126337,126339,126340,126342],{},[27,126338,126304],{}," 标签也可用于布局，一行可以放多个 ",[27,126341,126304],{},"，可理解为小盒子。",{"title":25,"searchDepth":44,"depth":44,"links":126344},[126345,126346,126347,126348,126349],{"id":126199,"depth":44,"text":126200},{"id":126225,"depth":44,"text":126226},{"id":126238,"depth":44,"text":126239},{"id":126253,"depth":44,"text":126254},{"id":126297,"depth":44,"text":126350},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126191,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126357,"title":126358,"body":126359,"description":242,"extension":243,"meta":126556,"navigation":245,"path":126557,"seo":126558,"stem":126559,"__hash__":126560},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126360,"toc":126548},[126361,126364,126368,126371,126377,126384,126390,126396,126399,126402,126405,126408,126411,126414,126417,126421,126424,126427,126430,126436,126442,126448,126455,126459,126465,126471,126474,126477,126483,126489,126495,126498,126501,126505,126508,126518,126524,126528,126537,126541,126544],[10,126362,126358],{"id":126363},"_4-html图像与链接",[15,126365,126367],{"id":126366},"_41-图像标签","4.1 图像标签",[157,126369,126370],{},"（1）标签",[157,126372,126373,126376],{},[27,126374,126375],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[157,126378,126379,126380,126383],{},"src是",[27,126381,126382],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[157,126385,126386,126387],{},"alt:文本，替换文本。图像不能显示的文字 ",[27,126388,126389],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[157,126391,126392,126393],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[27,126394,126395],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[157,126397,126398],{},"width:像素，设置图像的宽度",[157,126400,126401],{},"height:像素，设置图像的高度",[157,126403,126404],{},"border：像素，设置图像的边框粗细",[157,126406,126407],{},"（2）图像标签属性的注意点：",[157,126409,126410],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[157,126412,126413],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[157,126415,126416],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[15,126418,126420],{"id":126419},"_42-路径注意要点","4.2 路径注意要点：",[157,126422,126423],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[157,126425,126426],{},"（2）根目录：就是打开文件夹的第一层根目录",[157,126428,126429],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[157,126431,126432,126433],{},"①同一级路径：图像文件位于HTML文件同一级，如",[27,126434,126435],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[157,126437,126438,126439],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[27,126440,126441],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[157,126443,126444,126445],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[27,126446,126447],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[157,126449,126450,126451,571],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[558,126452,126453],{"href":126453,"rel":126454},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24045],[15,126456,126458],{"id":126457},"_43-超链接标签","4.3 超链接标签",[157,126460,126461,126464],{},[27,126462,126463],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[157,126466,126467,126468],{},"①语法格式：",[27,126469,126470],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[157,126472,126473],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[157,126475,126476],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[157,126478,126479,126480],{},"③链接分类：外部链接：",[27,126481,126482],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[157,126484,126485,126486],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[27,126487,126488],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[157,126490,126491,126492],{},"空链接：如果当时没有确定链接目标时，",[27,126493,126494],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[157,126496,126497],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[157,126499,126500],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[15,126502,126504],{"id":126503},"_44-锚点链接","4.4 锚点链接",[157,126506,126507],{},"点我们点击链接，可以快速定位到页面中的某个位置",[157,126509,126510,126511,126514,126515],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[27,126512,126513],{},"\u003Ca href=\"#two\">","第二级",[27,126516,126517],{},"\u003C\u002Fa>",[157,126519,126520,126521],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[27,126522,126523],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[15,126525,126527],{"id":126526},"_45-注释标签","4.5 注释标签",[157,126529,126530,126533,126534],{},[27,126531,126532],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[27,126535,126536],{},"ctrl+\u002F",[15,126538,126540],{"id":126539},"_46-特殊字符","4.6 特殊字符",[157,126542,126543],{},"可以实现添加多个空格",[160,126545],{"style":126546,"src":126547},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":25,"searchDepth":44,"depth":44,"links":126549},[126550,126551,126552,126553,126554,126555],{"id":126366,"depth":44,"text":126367},{"id":126419,"depth":44,"text":126420},{"id":126457,"depth":44,"text":126458},{"id":126503,"depth":44,"text":126504},{"id":126526,"depth":44,"text":126527},{"id":126539,"depth":44,"text":126540},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126358,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126562,"title":126563,"body":126564,"description":242,"extension":243,"meta":126857,"navigation":245,"path":126858,"seo":126859,"stem":126860,"__hash__":126861},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126565,"toc":126848},[126566,126569,126573,126576,126579,126582,126585,126588,126591,126594,126597,126600,126620,126626,126630,126633,126636,126639,126642,126645,126648,126652,126655,126658,126661,126664,126677,126682,126685,126688,126703,126706,126709,126712,126715,126718,126722,126725,126732,126735,126738,126741,126744,126747,126753,126756,126759,126765,126768,126771,126774,126780,126783,126786,126800,126807,126810,126813,126820,126829,126832,126835,126838,126842,126845],[10,126567,126563],{"id":126568},"_5-html表格列表与表单",[15,126570,126572],{"id":126571},"_51-表格标签","5.1 表格标签",[157,126574,126575],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[157,126577,126578],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[157,126580,126581],{},"②表格基本语法：",[160,126583],{"style":126546,"src":126584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[157,126586,126587],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[160,126589],{"style":126546,"src":126590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[157,126592,126593],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[160,126595],{"style":126546,"src":126596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[157,126598,126599],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[157,126601,126602,126605,126606,126608,126609,126612,126613,126615,126616,126619],{},[27,126603,126604],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[27,126607,126604],{},"内部必须拥有",[27,126610,126611],{},"\u003Ctr>","标签，一般位于第一行，",[27,126614,126604],{},"比",[27,126617,126618],{},"\u003Cth>","范围广",[157,126621,126622,126625],{},[27,126623,126624],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[15,126627,126629],{"id":126628},"_52-合并单元格","5.2 合并单元格",[157,126631,126632],{},"（1）合并单元格方式：",[157,126634,126635],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[157,126637,126638],{},"②跨列合并：colspan=\"合并单元格的个数\"",[157,126640,126641],{},"（2）目标单元格：",[157,126643,126644],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[157,126646,126647],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[15,126649,126651],{"id":126650},"_53-列表标签","5.3 列表标签",[157,126653,126654],{},"（1）分类：无序列表、有序列表、自定义列表",[157,126656,126657],{},"①无序列表：",[160,126659],{"style":126546,"src":126660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[157,126662,126663],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[157,126665,126666,126669,126670,126673,126674,126676],{},[27,126667,126668],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[27,126671,126672],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[27,126675,126668],{},"中输入其他标签或文字是不对的",[157,126678,126679,126681],{},[27,126680,126672],{},"之间相当于一个容器，可以容纳所有元素",[157,126683,126684],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[157,126686,126687],{},"在css中去除前边的小圆点采用如下代码:",[20,126689,126693],{"className":126690,"code":126691,"language":126692,"meta":25,"style":25},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[27,126694,126695],{"__ignoreMap":25},[30,126696,126697,126700],{"class":32,"line":33},[30,126698,126699],{"class":51438},"list-style",[30,126701,126702],{"class":321},": none;\n",[157,126704,126705],{},"②有序列表：",[160,126707],{"style":126546,"src":126708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[157,126710,126711],{},"③自定义列表：",[160,126713],{"style":126546,"src":126714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[160,126716],{"style":126546,"src":126717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[15,126719,126721],{"id":126720},"_54-表单标签","5.4 表单标签",[157,126723,126724],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[157,126726,126727,126728,126731],{},"（1）表单域：包含单元素的区域，",[27,126729,126730],{},"\u003Cform>","标签可以实现信息的收集和传递。",[160,126733],{"style":126546,"src":126734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[157,126736,126737],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[157,126739,126740],{},"表单元素提交必须有name属性",[157,126742,126743],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[157,126745,126746],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[157,126748,77364,126749,126752],{},[27,126750,126751],{},"\u003Cinput>","输入表单元素",[160,126754],{"style":126546,"src":126755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[160,126757],{"style":126546,"src":126758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[157,126760,126761,126762],{},"单选按钮：",[27,126763,126764],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[160,126766],{"style":126546,"src":126767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[157,126769,126770],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[160,126772],{"style":126546,"src":126773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[157,126775,126776,126779],{},[469,126777,126778],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[157,126781,126782],{},"②select下拉表单元素：可以节约页面控件",[160,126784],{"style":126546,"src":126785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[157,126787,126788,13977,126790,126793,126794,126796,126797,126799],{},[469,126789,351],{},[27,126791,126792],{},"\u003Cselect>","中至少包含一对",[27,126795,102852],{},"；在",[27,126798,102852],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[157,126801,126802,126803,126806],{},"③",[27,126804,126805],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[160,126808],{"style":126546,"src":126809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[157,126811,126812],{},"3行20列",[15,126814,126816,126817,102831],{"id":126815},"_55-lable标签","5.5 ",[27,126818,126819],{},"\u003Clable>",[157,126821,126822,126823,126825,126826,126828],{},"它不是表单标签，但常常与表单标签搭配使用，",[27,126824,126819],{},"标签用于绑定一个表单标签，当点击",[27,126827,126819],{},"标签内的文本",[157,126830,126831],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[160,126833],{"style":126546,"src":126834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[160,126836],{"style":126546,"src":126837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[15,126839,126841],{"id":126840},"_56-实例","5.6 实例",[160,126843],{"style":126546,"src":126844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[234,126846,126847],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":126849},[126850,126851,126852,126853,126854,126856],{"id":126571,"depth":44,"text":126572},{"id":126628,"depth":44,"text":126629},{"id":126650,"depth":44,"text":126651},{"id":126720,"depth":44,"text":126721},{"id":126815,"depth":44,"text":126855},"5.5 \u003Clable>标签",{"id":126840,"depth":44,"text":126841},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126563,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126863,"title":126864,"body":126865,"description":242,"extension":243,"meta":127414,"navigation":245,"path":127415,"seo":127416,"stem":127417,"__hash__":127418},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126866,"toc":127389},[126867,126870,126874,126877,126880,126884,126887,126890,126893,126896,126899,126902,126905,126909,126912,126916,126919,126922,126925,126929,126932,126935,126938,126944,126947,126950,126953,126956,126959,126962,126965,126998,127002,127005,127008,127011,127015,127018,127021,127024,127027,127030,127034,127037,127040,127043,127047,127050,127054,127057,127061,127064,127069,127073,127076,127080,127083,127086,127089,127092,127119,127122,127126,127129,127132,127137,127140,127143,127147,127150,127155,127158,127161,127164,127168,127171,127174,127177,127181,127184,127187,127190,127194,127198,127201,127241,127244,127248,127255,127258,127262,127265,127311,127315,127318,127321,127324,127352,127356,127359,127386],[10,126868,126864],{"id":126869},"_6-css语法与文本样式",[15,126871,126873],{"id":126872},"_61-css语法规范","6.1 css语法规范",[157,126875,126876],{},"由两部分组成，选择器及一条或多条声明",[160,126878],{"style":126546,"src":126879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[157,126881,126882],{},[469,126883,351],{},[157,126885,126886],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[157,126888,126889],{},"②属性与属性值以“键值对”的形式出现",[157,126891,126892],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[157,126894,126895],{},"④属性和属性值之间用英文“;”分开",[160,126897],{"style":126546,"src":126898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[160,126900],{"style":126546,"src":126901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[160,126903],{"style":126546,"src":126904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[15,126906,126908],{"id":126907},"_62-css选择器","6.2 css选择器",[157,126910,126911],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[287,126913,126915],{"id":126914},"_621-标签选择器","6.2.1 标签选择器",[157,126917,126918],{},"①优点：能快速为页面中同类型的标签统一设置样式",[157,126920,126921],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[160,126923],{"style":126546,"src":126924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[287,126926,126928],{"id":126927},"_622-类选择器","6.2.2 类选择器",[157,126930,126931],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[157,126933,126934],{},"②样例",[160,126936],{"style":126546,"src":126937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[157,126939,126940,126941,126943],{},"③ ",[469,126942,126778],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[157,126945,126946],{},"可以理解为给这个标签起了个名字，来表示；",[157,126948,126949],{},"长名称或词组可以使用横线来为选择器命名；",[157,126951,126952],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[157,126954,126955],{},"命名要有意义；",[160,126957],{"style":126546,"src":126958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[157,126960,126961],{},"类选择器也可以指定特殊的元素p.center{}",[157,126963,126964],{},"p.center和.center都对",[20,126966,126968],{"className":126690,"code":126967,"language":126692,"meta":25,"style":25},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[27,126969,126970,126975,126984,126994],{"__ignoreMap":25},[30,126971,126972],{"class":32,"line":33},[30,126973,126974],{"class":379},"\u002F* 类选择器指定特殊元素 *\u002F\n",[30,126976,126977,126979,126982],{"class":32,"line":44},[30,126978,157],{"class":51438},[30,126980,126981],{"class":36},".center",[30,126983,15754],{"class":321},[30,126985,126986,126988,126990,126992],{"class":32,"line":52},[30,126987,70664],{"class":40},[30,126989,51575],{"class":321},[30,126991,51730],{"class":40},[30,126993,1480],{"class":321},[30,126995,126996],{"class":32,"line":60},[30,126997,1751],{"class":321},[287,126999,127001],{"id":127000},"_623-多类名使用","6.2.3 多类名使用",[157,127003,127004],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[160,127006],{"style":126546,"src":127007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[157,127009,127010],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[287,127012,127014],{"id":127013},"_624-id选择器","6.2.4 id选择器",[157,127016,127017],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[157,127019,127020],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[160,127022],{"style":126546,"src":127023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[157,127025,127026],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[157,127028,127029],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[287,127031,127033],{"id":127032},"_625-通配符选择器","6.2.5 通配符选择器",[157,127035,127036],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[157,127038,127039],{},"* {",[157,127041,127042],{},"color=\"red\"}",[287,127044,127046],{"id":127045},"_626-总结","6.2.6 总结",[160,127048],{"style":126546,"src":127049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[15,127051,127053],{"id":127052},"_63-css字体属性","6.3 css字体属性",[157,127055,127056],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[287,127058,127060],{"id":127059},"_631-字体系列","6.3.1 字体系列",[157,127062,127063],{},"font-family: '宋体';",[157,127065,127066,127068],{},[469,127067,351],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[287,127070,127072],{"id":127071},"_632-字体大小","6.3.2 字体大小",[157,127074,127075],{},"font-size: 20px",[157,127077,127078,26611],{},[469,127079,126778],{},[157,127081,127082],{},"①px（像素）大小是网页的最常用单位",[157,127084,127085],{},"②谷歌浏览器默认为16px",[157,127087,127088],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[157,127090,127091],{},"④可以给body指定整个页面的大小：会自动引用",[20,127093,127095],{"className":126690,"code":127094,"language":126692,"meta":25,"style":25},"body {\n  font-size: 16px;\n}\n",[27,127096,127097,127103,127115],{"__ignoreMap":25},[30,127098,127099,127101],{"class":32,"line":33},[30,127100,51938],{"class":51438},[30,127102,15754],{"class":321},[30,127104,127105,127107,127109,127111,127113],{"class":32,"line":44},[30,127106,70764],{"class":40},[30,127108,51575],{"class":321},[30,127110,921],{"class":40},[30,127112,51630],{"class":317},[30,127114,1480],{"class":321},[30,127116,127117],{"class":32,"line":52},[30,127118,1751],{"class":321},[157,127120,127121],{},"⑤标题标签比较特殊，需要单独指定大小",[287,127123,127125],{"id":127124},"_633-字体粗细","6.3.3 字体粗细",[157,127127,127128],{},"font-weight: bold;",[157,127130,127131],{},"font-weight: 100；",[157,127133,127134,127136],{},[469,127135,351],{}," ①粗体文字变细：尽量别用normal，多用数字",[157,127138,127139],{},"font-weight= 400;",[157,127141,127142],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[287,127144,127146],{"id":127145},"_634-文字样式","6.3.4 文字样式",[157,127148,127149],{},"font-style: normal；",[157,127151,127152,26611],{},[469,127153,127154],{},"属性值",[157,127156,127157],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[157,127159,127160],{},"②italic：浏览器会显示斜体的字体样式",[160,127162],{"style":126546,"src":127163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[287,127165,127167],{"id":127166},"_635-字体符合属性","6.3.5 字体符合属性",[160,127169],{"style":126546,"src":127170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[160,127172],{"style":126546,"src":127173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[157,127175,127176],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[157,127178,127179,26611],{},[469,127180,126778],{},[157,127182,127183],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[157,127185,127186],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[157,127188,127189],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[15,127191,127193],{"id":127192},"_64-css-test文本属性","6.4 css test文本属性",[287,127195,127197],{"id":127196},"_641-文本颜色","6.4.1 文本颜色",[157,127199,127200],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[20,127202,127204],{"className":126690,"code":127203,"language":126692,"meta":25,"style":25},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[27,127205,127206,127211,127217,127227,127232,127237],{"__ignoreMap":25},[30,127207,127208],{"class":32,"line":33},[30,127209,127210],{"class":379},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[30,127212,127213,127215],{"class":32,"line":44},[30,127214,157],{"class":51438},[30,127216,15754],{"class":321},[30,127218,127219,127221,127223,127225],{"class":32,"line":52},[30,127220,71043],{"class":40},[30,127222,51575],{"class":321},[30,127224,57559],{"class":40},[30,127226,1480],{"class":321},[30,127228,127229],{"class":32,"line":60},[30,127230,127231],{"class":379},"  \u002F* color: #ff0000; *\u002F\n",[30,127233,127234],{"class":32,"line":68},[30,127235,127236],{"class":379},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[30,127238,127239],{"class":32,"line":80},[30,127240,1751],{"class":321},[160,127242],{"style":126546,"src":127243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[287,127245,127247],{"id":127246},"_642-对齐文本","6.4.2 对齐文本",[157,127249,127250,127251,127254],{},"text-align属于用于设置元素内文本内容的 ",[469,127252,127253],{},"水平对齐"," 方式",[157,127256,127257],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[287,127259,127261],{"id":127260},"_643-装饰文本","6.4.3 装饰文本",[157,127263,127264],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[20,127266,127268],{"className":126690,"code":127267,"language":126692,"meta":25,"style":25},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[27,127269,127270,127276,127286,127290,127296,127307],{"__ignoreMap":25},[30,127271,127272,127274],{"class":32,"line":33},[30,127273,558],{"class":51438},[30,127275,15754],{"class":321},[30,127277,127278,127280,127282,127284],{"class":32,"line":44},[30,127279,70640],{"class":40},[30,127281,51575],{"class":321},[30,127283,54875],{"class":40},[30,127285,1480],{"class":321},[30,127287,127288],{"class":32,"line":52},[30,127289,1751],{"class":321},[30,127291,127292,127294],{"class":32,"line":60},[30,127293,157],{"class":51438},[30,127295,15754],{"class":321},[30,127297,127298,127300,127302,127305],{"class":32,"line":68},[30,127299,70640],{"class":40},[30,127301,51575],{"class":321},[30,127303,127304],{"class":40},"underline",[30,127306,1480],{"class":321},[30,127308,127309],{"class":32,"line":80},[30,127310,1751],{"class":321},[287,127312,127314],{"id":127313},"_644-文本缩进","6.4.4 文本缩进",[157,127316,127317],{},"实现文本的第一行首行缩进自己指定的距离",[157,127319,127320],{},"20px往右边走；-20px往左边走",[157,127322,127323],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[20,127325,127327],{"className":126690,"code":127326,"language":126692,"meta":25,"style":25},"p {\n  text-indent: 2em;\n}\n",[27,127328,127329,127335,127348],{"__ignoreMap":25},[30,127330,127331,127333],{"class":32,"line":33},[30,127332,157],{"class":51438},[30,127334,15754],{"class":321},[30,127336,127337,127340,127342,127344,127346],{"class":32,"line":44},[30,127338,127339],{"class":40},"  text-indent",[30,127341,51575],{"class":321},[30,127343,398],{"class":40},[30,127345,23735],{"class":317},[30,127347,1480],{"class":321},[30,127349,127350],{"class":32,"line":52},[30,127351,1751],{"class":321},[287,127353,127355],{"id":127354},"_645-行间距","6.4.5 行间距",[157,127357,127358],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[20,127360,127362],{"className":126690,"code":127361,"language":126692,"meta":25,"style":25},"p {\n  line-height: 1.6;\n}\n",[27,127363,127364,127370,127382],{"__ignoreMap":25},[30,127365,127366,127368],{"class":32,"line":33},[30,127367,157],{"class":51438},[30,127369,15754],{"class":321},[30,127371,127372,127375,127377,127380],{"class":32,"line":44},[30,127373,127374],{"class":40},"  line-height",[30,127376,51575],{"class":321},[30,127378,127379],{"class":40},"1.6",[30,127381,1480],{"class":321},[30,127383,127384],{"class":32,"line":52},[30,127385,1751],{"class":321},[234,127387,127388],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":44,"depth":44,"links":127390},[127391,127392,127400,127407],{"id":126872,"depth":44,"text":126873},{"id":126907,"depth":44,"text":126908,"children":127393},[127394,127395,127396,127397,127398,127399],{"id":126914,"depth":52,"text":126915},{"id":126927,"depth":52,"text":126928},{"id":127000,"depth":52,"text":127001},{"id":127013,"depth":52,"text":127014},{"id":127032,"depth":52,"text":127033},{"id":127045,"depth":52,"text":127046},{"id":127052,"depth":44,"text":127053,"children":127401},[127402,127403,127404,127405,127406],{"id":127059,"depth":52,"text":127060},{"id":127071,"depth":52,"text":127072},{"id":127124,"depth":52,"text":127125},{"id":127145,"depth":52,"text":127146},{"id":127166,"depth":52,"text":127167},{"id":127192,"depth":44,"text":127193,"children":127408},[127409,127410,127411,127412,127413],{"id":127196,"depth":52,"text":127197},{"id":127246,"depth":52,"text":127247},{"id":127260,"depth":52,"text":127261},{"id":127313,"depth":52,"text":127314},{"id":127354,"depth":52,"text":127355},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126864,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127420,"title":127421,"body":127422,"description":242,"extension":243,"meta":128071,"navigation":245,"path":128072,"seo":128073,"stem":128074,"__hash__":128075},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127423,"toc":128052},[127424,127427,127431,127435,127495,127499,127509,127512,127515,127519,127544,127548,127551,127554,127557,127560,127563,127567,127570,127573,127615,127618,127644,127650,127653,127657,127661,127667,127670,127673,127676,127679,127682,127685,127730,127734,127737,127740,127744,127748,127777,127780,127785,127788,127791,127794,127797,127801,127805,127808,127810,127813,127817,127820,127824,127827,127830,127833,127837,127841,127847,127857,127860,127863,127866,127869,127872,127995,128003,128011,128049],[10,127425,127421],{"id":127426},"_7-css引入方式与选择器进阶",[15,127428,127430],{"id":127429},"_71-css引入方式","7.1 css引入方式",[287,127432,127434],{"id":127433},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[20,127436,127440],{"className":127437,"code":127438,"language":127439,"meta":25,"style":25},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html",[27,127441,127442,127450,127457,127469,127482,127487],{"__ignoreMap":25},[30,127443,127444,127446,127448],{"class":32,"line":33},[30,127445,1230],{"class":321},[30,127447,234],{"class":51438},[30,127449,51445],{"class":321},[30,127451,127452,127455],{"class":32,"line":44},[30,127453,127454],{"class":51438},"  h1",[30,127456,15754],{"class":321},[30,127458,127459,127462,127464,127467],{"class":32,"line":52},[30,127460,127461],{"class":40},"    color",[30,127463,51575],{"class":321},[30,127465,127466],{"class":40},"blue",[30,127468,1480],{"class":321},[30,127470,127471,127474,127476,127478,127480],{"class":32,"line":60},[30,127472,127473],{"class":40},"    font-size",[30,127475,51575],{"class":321},[30,127477,1120],{"class":40},[30,127479,51630],{"class":317},[30,127481,1480],{"class":321},[30,127483,127484],{"class":32,"line":68},[30,127485,127486],{"class":321},"  }\n",[30,127488,127489,127491,127493],{"class":32,"line":80},[30,127490,51923],{"class":321},[30,127492,234],{"class":51438},[30,127494,51445],{"class":321},[157,127496,127497,26611],{},[469,127498,126778],{},[157,127500,77364,127501,127504,127505,127508],{},[27,127502,127503],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[27,127506,127507],{},"\u003Chead>","标签中",[157,127510,127511],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[157,127513,127514],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[287,127516,127518],{"id":127517},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[20,127520,127522],{"className":127437,"code":127521,"language":127439,"meta":25,"style":25},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[27,127523,127524],{"__ignoreMap":25},[30,127525,127526,127528,127530,127532,127534,127537,127540,127542],{"class":32,"line":33},[30,127527,1230],{"class":321},[30,127529,157],{"class":51438},[30,127531,62764],{"class":36},[30,127533,367],{"class":321},[30,127535,127536],{"class":74},"\"color: red; font-size: 16px;\"",[30,127538,127539],{"class":321},">这是一个段落\u003C\u002F",[30,127541,157],{"class":51438},[30,127543,51445],{"class":321},[157,127545,127546,26611],{},[469,127547,126778],{},[157,127549,127550],{},"①style其实就是标签的属性",[157,127552,127553],{},"②在双引号中间，写法要符合css规范",[157,127555,127556],{},"③可以控制当前的标签设置样式",[157,127558,127559],{},"④书写繁琐，简单时才用",[157,127561,127562],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[287,127564,127566],{"id":127565},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[157,127568,127569],{},"使用最多，单独建一个css文件，然后html引用",[157,127571,127572],{},"①css文件部分： style.css",[20,127574,127576],{"className":126690,"code":127575,"language":126692,"meta":25,"style":25},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[27,127577,127578,127583,127589,127599,127611],{"__ignoreMap":25},[30,127579,127580],{"class":32,"line":33},[30,127581,127582],{"class":379},"\u002F* style.css *\u002F\n",[30,127584,127585,127587],{"class":32,"line":44},[30,127586,10],{"class":51438},[30,127588,15754],{"class":321},[30,127590,127591,127593,127595,127597],{"class":32,"line":52},[30,127592,71043],{"class":40},[30,127594,51575],{"class":321},[30,127596,127466],{"class":40},[30,127598,1480],{"class":321},[30,127600,127601,127603,127605,127607,127609],{"class":32,"line":60},[30,127602,70764],{"class":40},[30,127604,51575],{"class":321},[30,127606,1120],{"class":40},[30,127608,51630],{"class":317},[30,127610,1480],{"class":321},[30,127612,127613],{"class":32,"line":68},[30,127614,1751],{"class":321},[157,127616,127617],{},"②html部分",[20,127619,127621],{"className":127437,"code":127620,"language":127439,"meta":25,"style":25},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[27,127622,127623],{"__ignoreMap":25},[30,127624,127625,127627,127629,127631,127633,127635,127637,127639,127642],{"class":32,"line":33},[30,127626,1230],{"class":321},[30,127628,69143],{"class":51438},[30,127630,69146],{"class":36},[30,127632,367],{"class":321},[30,127634,69151],{"class":74},[30,127636,61195],{"class":36},[30,127638,367],{"class":321},[30,127640,127641],{"class":74},"\"style.css\"",[30,127643,51445],{"class":321},[157,127645,127646,127649],{},[27,127647,127648],{},"\u003Chr>","水平线标签（但是不常用！）",[157,127651,127652],{},"ctrl+0回到页面原来大小",[15,127654,127656],{"id":127655},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[287,127658,127660],{"id":127659},"_721-快速生成html","7.2.1 快速生成html",[157,127662,127663,127664],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[27,127665,127666],{},"\u003Cdiv>``\u003C\u002Fdiv>",[157,127668,127669],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[157,127671,127672],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[157,127674,127675],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[157,127677,127678],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[157,127680,127681],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[157,127683,127684],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[20,127686,127688],{"className":127437,"code":127687,"language":127439,"meta":25,"style":25},"\u003C!-- Emmet 语法示例 -->\n\u003C!-- div*3        → 生成3个div -->\n\u003C!-- ul>li*5      → ul下生成5个li -->\n\u003C!-- div+p        → 兄弟div和p -->\n\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[27,127689,127690,127695,127700,127705,127710,127715,127720,127725],{"__ignoreMap":25},[30,127691,127692],{"class":32,"line":33},[30,127693,127694],{"class":379},"\u003C!-- Emmet 语法示例 -->\n",[30,127696,127697],{"class":32,"line":44},[30,127698,127699],{"class":379},"\u003C!-- div*3        → 生成3个div -->\n",[30,127701,127702],{"class":32,"line":52},[30,127703,127704],{"class":379},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[30,127706,127707],{"class":32,"line":60},[30,127708,127709],{"class":379},"\u003C!-- div+p        → 兄弟div和p -->\n",[30,127711,127712],{"class":32,"line":68},[30,127713,127714],{"class":379},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[30,127716,127717],{"class":32,"line":80},[30,127718,127719],{"class":379},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[30,127721,127722],{"class":32,"line":88},[30,127723,127724],{"class":379},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[30,127726,127727],{"class":32,"line":96},[30,127728,127729],{"class":379},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[287,127731,127733],{"id":127732},"_722-快速生成css","7.2.2 快速生成css",[157,127735,127736],{},"简写开头",[157,127738,127739],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[15,127741,127743],{"id":127742},"_73-css复合选择器","7.3 css复合选择器",[287,127745,127747],{"id":127746},"_731-后代选择器","7.3.1 后代选择器",[20,127749,127751],{"className":126690,"code":127750,"language":126692,"meta":25,"style":25},".parent .child {\n  color: blue;\n}\n",[27,127752,127753,127763,127773],{"__ignoreMap":25},[30,127754,127755,127758,127761],{"class":32,"line":33},[30,127756,127757],{"class":36},".parent",[30,127759,127760],{"class":36}," .child",[30,127762,15754],{"class":321},[30,127764,127765,127767,127769,127771],{"class":32,"line":44},[30,127766,71043],{"class":40},[30,127768,51575],{"class":321},[30,127770,127466],{"class":40},[30,127772,1480],{"class":321},[30,127774,127775],{"class":32,"line":52},[30,127776,1751],{"class":321},[157,127778,127779],{},"元素1 元素2 {样式声明}",[157,127781,127782],{},[469,127783,127784],{},"注意点:",[157,127786,127787],{},"①元素1和元素2中间用空格隔开",[157,127789,127790],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[157,127792,127793],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[157,127795,127796],{},"④元素1和元素2可以是任意基础选择器",[287,127798,127800],{"id":127799},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[157,127802,127803],{},[469,127804,127784],{},[157,127806,127807],{},"①元素1和元素2中间用大于号隔开",[157,127809,127790],{},[157,127811,127812],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[287,127814,127816],{"id":127815},"_733-并集选择器","7.3.3 并集选择器",[157,127818,127819],{},"元素1，元素2 {样式声明}",[157,127821,127822],{},[469,127823,127784],{},[157,127825,127826],{},"①元素1和元素2中间用逗号隔开",[157,127828,127829],{},"②逗号可以理解为和的意思",[157,127831,127832],{},"③并集选择器通常用于集体声明",[287,127834,127836],{"id":127835},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[157,127838,127839],{},[469,127840,127784],{},[157,127842,127843,127844,127846],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69143,127845],{},"－:visited－:hover－:active。",[157,127848,127849,127850,127853,127854,25878],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127851,127852],"hover",{}," 、 ",[127855,127856],"first-child",{},[157,127858,127859],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[157,127861,127862],{},"link对没访问的进行设置",[157,127864,127865],{},"vistied对已访问的进行改变",[157,127867,127868],{},"hover鼠标经过就会变",[157,127870,127871],{},"active常按(点)就会变",[20,127873,127875],{"className":126690,"code":127874,"language":126692,"meta":25,"style":25},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\na:link {\n  color: #333;\n  text-decoration: none;\n}\na:visited {\n  color: purple;\n}\na:hover {\n  color: skyblue;\n  text-decoration: underline;\n}\na:active {\n  color: green;\n}\n",[27,127876,127877,127882,127891,127901,127911,127915,127924,127935,127939,127947,127957,127967,127971,127980,127991],{"__ignoreMap":25},[30,127878,127879],{"class":32,"line":33},[30,127880,127881],{"class":379},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[30,127883,127884,127886,127889],{"class":32,"line":44},[30,127885,558],{"class":51438},[30,127887,127888],{"class":36},":link",[30,127890,15754],{"class":321},[30,127892,127893,127895,127897,127899],{"class":32,"line":52},[30,127894,71043],{"class":40},[30,127896,51575],{"class":321},[30,127898,62507],{"class":40},[30,127900,1480],{"class":321},[30,127902,127903,127905,127907,127909],{"class":32,"line":60},[30,127904,70640],{"class":40},[30,127906,51575],{"class":321},[30,127908,54875],{"class":40},[30,127910,1480],{"class":321},[30,127912,127913],{"class":32,"line":68},[30,127914,1751],{"class":321},[30,127916,127917,127919,127922],{"class":32,"line":80},[30,127918,558],{"class":51438},[30,127920,127921],{"class":36},":visited",[30,127923,15754],{"class":321},[30,127925,127926,127928,127930,127933],{"class":32,"line":88},[30,127927,71043],{"class":40},[30,127929,51575],{"class":321},[30,127931,127932],{"class":40},"purple",[30,127934,1480],{"class":321},[30,127936,127937],{"class":32,"line":96},[30,127938,1751],{"class":321},[30,127940,127941,127943,127945],{"class":32,"line":104},[30,127942,558],{"class":51438},[30,127944,61078],{"class":36},[30,127946,15754],{"class":321},[30,127948,127949,127951,127953,127955],{"class":32,"line":112},[30,127950,71043],{"class":40},[30,127952,51575],{"class":321},[30,127954,55027],{"class":40},[30,127956,1480],{"class":321},[30,127958,127959,127961,127963,127965],{"class":32,"line":123},[30,127960,70640],{"class":40},[30,127962,51575],{"class":321},[30,127964,127304],{"class":40},[30,127966,1480],{"class":321},[30,127968,127969],{"class":32,"line":131},[30,127970,1751],{"class":321},[30,127972,127973,127975,127978],{"class":32,"line":142},[30,127974,558],{"class":51438},[30,127976,127977],{"class":36},":active",[30,127979,15754],{"class":321},[30,127981,127982,127984,127986,127989],{"class":32,"line":1811},[30,127983,71043],{"class":40},[30,127985,51575],{"class":321},[30,127987,127988],{"class":40},"green",[30,127990,1480],{"class":321},[30,127992,127993],{"class":32,"line":1825},[30,127994,1751],{"class":321},[287,127996,127998,127999,128002],{"id":127997},"_735-伪类选择器","7.3.5 ",[128000,128001],"focus",{},"伪类选择器",[157,128004,128005,128007,128008,128010],{},[128000,128006],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[27,128009,126751],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[20,128012,128014],{"className":126690,"code":128013,"language":126692,"meta":25,"style":25},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[27,128015,128016,128024,128035,128045],{"__ignoreMap":25},[30,128017,128018,128020,128022],{"class":32,"line":33},[30,128019,53959],{"class":51438},[30,128021,62038],{"class":36},[30,128023,15754],{"class":321},[30,128025,128026,128029,128031,128033],{"class":32,"line":44},[30,128027,128028],{"class":40},"  border-color",[30,128030,51575],{"class":321},[30,128032,55027],{"class":40},[30,128034,1480],{"class":321},[30,128036,128037,128039,128041,128043],{"class":32,"line":52},[30,128038,70936],{"class":40},[30,128040,51575],{"class":321},[30,128042,54875],{"class":40},[30,128044,1480],{"class":321},[30,128046,128047],{"class":32,"line":60},[30,128048,1751],{"class":321},[234,128050,128051],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":44,"depth":44,"links":128053},[128054,128059,128063],{"id":127429,"depth":44,"text":127430,"children":128055},[128056,128057,128058],{"id":127433,"depth":52,"text":127434},{"id":127517,"depth":52,"text":127518},{"id":127565,"depth":52,"text":127566},{"id":127655,"depth":44,"text":127656,"children":128060},[128061,128062],{"id":127659,"depth":52,"text":127660},{"id":127732,"depth":52,"text":127733},{"id":127742,"depth":44,"text":127743,"children":128064},[128065,128066,128067,128068,128069],{"id":127746,"depth":52,"text":127747},{"id":127799,"depth":52,"text":127800},{"id":127815,"depth":52,"text":127816},{"id":127835,"depth":52,"text":127836},{"id":127997,"depth":52,"text":128070},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127421,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128077,"title":128078,"body":128079,"description":242,"extension":243,"meta":130002,"navigation":245,"path":130003,"seo":130004,"stem":130005,"__hash__":130006},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128080,"toc":129976},[128081,128084,128088,128097,128101,128127,128132,128135,128138,128141,128144,128148,128151,128161,128169,128173,128208,128213,128216,128219,128222,128225,128229,128232,128241,128245,128258,128263,128266,128269,128272,128276,128279,128283,128286,128341,128344,128375,128378,128432,128436,128439,128605,128728,128731,128734,128737,128740,128744,128747,128751,128754,128757,128761,128764,128795,128822,128850,128853,128857,128883,128926,128930,129024,129027,129054,129057,129060,129063,129066,129069,129072,129075,129078,129081,129085,129142,129169,129173,129221,129225,129266,129268,129271,129274,129277,129280,129284,129376,129379,129382,129385,129389,129512,129713,129717,129721,129724,129727,129730,129734,129737,129740,129765,129768,129771,129774,129777,129780,129784,129792,129854,129857,129915,129918,129921,129924,129927,129930,129933,129936,129973],[10,128082,128078],{"id":128083},"_8-css显示模式与背景特性",[15,128085,128087],{"id":128086},"_81-css元素显示模式","8.1 css元素显示模式",[157,128089,128090,128091,128093,128094,128096],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[27,128092,126301],{},"自己占一行，比如一行可以放多个",[27,128095,126304],{},"，HTML 元素一般分为块元素和行内元素两种类型",[287,128098,128100],{"id":128099},"_811-块元素","8.1.1 块元素",[157,128102,128103,128104,128106,128107,532,128110,532,128112,532,128114,532,128117,532,128120,128123,128124,128126],{},"常见的块元素有",[27,128105,126205],{},"~",[27,128108,128109],{},"\u003Ch6>",[27,128111,126231],{},[27,128113,126301],{},[27,128115,128116],{},"\u003Cul>",[27,128118,128119],{},"\u003Col>",[27,128121,128122],{},"\u003Cli>","等，其中 ",[27,128125,126301],{}," 标签是最典型的块元素",[157,128128,128129],{},[469,128130,128131],{},"块级元素的特点：",[157,128133,128134],{},"① 比较霸道，自己独占一行。",[157,128136,128137],{},"② 高度，宽度、外边距以及内边距都可以控制。",[157,128139,128140],{},"③ 宽度默认是容器（父级宽度）的100%。",[157,128142,128143],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[157,128145,128146],{},[469,128147,351],{},[157,128149,128150],{},"①文字类的元素内不能使用块级元素",[157,128152,77387,128153,128155,128156,128158,128159],{},[27,128154,126231],{}," 标签主要用于存放文字，因此 ",[27,128157,126231],{}," 里面不能放块级元素，特别是不能放",[27,128160,126301],{},[157,128162,128163,128164,128106,128166,128168],{},"⑥同理， ",[27,128165,126205],{},[27,128167,128109],{},"等都是文字类块级标签，里面也不能放其他块级元素",[287,128170,128172],{"id":128171},"_812-行内元素","8.1.2 行内元素",[157,128174,128175,128176,532,128178,532,128181,532,128184,532,128187,532,128190,532,128193,532,128196,532,128199,532,128202,128204,128205,128207],{},"常见的行内元素有 ",[27,128177,126463],{},[27,128179,128180],{},"\u003Cstrong>",[27,128182,128183],{},"\u003Cb>",[27,128185,128186],{},"\u003Cem>",[27,128188,128189],{},"\u003Ci>",[27,128191,128192],{},"\u003Cdel>",[27,128194,128195],{},"\u003Cs>",[27,128197,128198],{},"\u003Cins>",[27,128200,128201],{},"\u003Cu>",[27,128203,126304],{}," 等，其中 ",[27,128206,126304],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[157,128209,128210],{},[469,128211,128212],{},"特点：",[157,128214,128215],{},"① 相邻行内元素在一行上，一行可以显示多个。",[157,128217,128218],{},"② 高、宽直接设置是无效的。",[157,128220,128221],{},"③ 默认宽度就是它本身内容的宽度。",[157,128223,128224],{},"④ 行内元素只能容纳文本或其他行内元素。",[157,128226,128227],{},[469,128228,351],{},[157,128230,128231],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[157,128233,128234,128235,128237,128238,128240],{},"②特殊情况链接 ",[27,128236,126463],{}," 里面可以放块级元素，但是给 ",[27,128239,126463],{}," 转换一下块级模式最安全",[287,128242,128244],{"id":128243},"_813-行内块元素","8.1.3 行内块元素",[157,128246,128247,128248,532,128251,532,128254,128257],{},"在行内元素中有几个特殊的标签 —— ",[27,128249,128250],{},"\u003Cimg \u002F>",[27,128252,128253],{},"\u003Cinput \u002F>",[27,128255,128256],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[157,128259,128260],{},[469,128261,128262],{},"行内块元素的特点：",[157,128264,128265],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[157,128267,128268],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[157,128270,128271],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[287,128273,128275],{"id":128274},"_814-总结","8.1.4 总结",[160,128277],{"style":126546,"src":128278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[287,128280,128282],{"id":128281},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[157,128284,128285],{},"①转换为块元素：display:block;",[20,128287,128289],{"className":126690,"code":128288,"language":126692,"meta":25,"style":25},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[27,128290,128291,128296,128302,128313,128325,128337],{"__ignoreMap":25},[30,128292,128293],{"class":32,"line":33},[30,128294,128295],{"class":379},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[30,128297,128298,128300],{"class":32,"line":44},[30,128299,558],{"class":51438},[30,128301,15754],{"class":321},[30,128303,128304,128307,128309,128311],{"class":32,"line":52},[30,128305,128306],{"class":40},"  display",[30,128308,51575],{"class":321},[30,128310,61007],{"class":40},[30,128312,1480],{"class":321},[30,128314,128315,128317,128319,128321,128323],{"class":32,"line":60},[30,128316,70706],{"class":40},[30,128318,51575],{"class":321},[30,128320,631],{"class":40},[30,128322,51630],{"class":317},[30,128324,1480],{"class":321},[30,128326,128327,128329,128331,128333,128335],{"class":32,"line":68},[30,128328,70926],{"class":40},[30,128330,51575],{"class":321},[30,128332,721],{"class":40},[30,128334,51630],{"class":317},[30,128336,1480],{"class":321},[30,128338,128339],{"class":32,"line":80},[30,128340,1751],{"class":321},[157,128342,128343],{},"②转换为行内元素：display:inline;",[20,128345,128347],{"className":126690,"code":128346,"language":126692,"meta":25,"style":25},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[27,128348,128349,128354,128360,128371],{"__ignoreMap":25},[30,128350,128351],{"class":32,"line":33},[30,128352,128353],{"class":379},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[30,128355,128356,128358],{"class":32,"line":44},[30,128357,51749],{"class":51438},[30,128359,15754],{"class":321},[30,128361,128362,128364,128366,128369],{"class":32,"line":52},[30,128363,128306],{"class":40},[30,128365,51575],{"class":321},[30,128367,128368],{"class":40},"inline",[30,128370,1480],{"class":321},[30,128372,128373],{"class":32,"line":60},[30,128374,1751],{"class":321},[157,128376,128377],{},"③转换为行内块：display:inline-block;",[20,128379,128381],{"className":126690,"code":128380,"language":126692,"meta":25,"style":25},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[27,128382,128383,128388,128394,128404,128416,128428],{"__ignoreMap":25},[30,128384,128385],{"class":32,"line":33},[30,128386,128387],{"class":379},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[30,128389,128390,128392],{"class":32,"line":44},[30,128391,30],{"class":51438},[30,128393,15754],{"class":321},[30,128395,128396,128398,128400,128402],{"class":32,"line":52},[30,128397,128306],{"class":40},[30,128399,51575],{"class":321},[30,128401,72521],{"class":40},[30,128403,1480],{"class":321},[30,128405,128406,128408,128410,128412,128414],{"class":32,"line":60},[30,128407,70706],{"class":40},[30,128409,51575],{"class":321},[30,128411,932],{"class":40},[30,128413,51630],{"class":317},[30,128415,1480],{"class":321},[30,128417,128418,128420,128422,128424,128426],{"class":32,"line":68},[30,128419,70926],{"class":40},[30,128421,51575],{"class":321},[30,128423,1271],{"class":40},[30,128425,51630],{"class":317},[30,128427,1480],{"class":321},[30,128429,128430],{"class":32,"line":80},[30,128431,1751],{"class":321},[287,128433,128435],{"id":128434},"_816-小米侧边栏","8.1.6 小米侧边栏",[160,128437],{"style":126546,"src":128438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[20,128440,128442],{"className":127437,"code":128441,"language":127439,"meta":25,"style":25},"\u003C!-- 小米侧边栏案例 -->\n\u003Cdiv class=\"sidebar\">\n  \u003Ca href=\"#\">手机 电话卡\u003C\u002Fa>\n  \u003Ca href=\"#\">电视 盒子\u003C\u002Fa>\n  \u003Ca href=\"#\">笔记本 平板\u003C\u002Fa>\n  \u003Ca href=\"#\">出行 穿戴\u003C\u002Fa>\n  \u003Ca href=\"#\">智能 路由器\u003C\u002Fa>\n  \u003Ca href=\"#\">健康 儿童\u003C\u002Fa>\n  \u003Ca href=\"#\">耳机 音响\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[27,128443,128444,128449,128464,128483,128502,128521,128540,128559,128578,128597],{"__ignoreMap":25},[30,128445,128446],{"class":32,"line":33},[30,128447,128448],{"class":379},"\u003C!-- 小米侧边栏案例 -->\n",[30,128450,128451,128453,128455,128457,128459,128462],{"class":32,"line":44},[30,128452,1230],{"class":321},[30,128454,51749],{"class":51438},[30,128456,53624],{"class":36},[30,128458,367],{"class":321},[30,128460,128461],{"class":74},"\"sidebar\"",[30,128463,51445],{"class":321},[30,128465,128466,128468,128470,128472,128474,128476,128479,128481],{"class":32,"line":52},[30,128467,52282],{"class":321},[30,128469,558],{"class":51438},[30,128471,61195],{"class":36},[30,128473,367],{"class":321},[30,128475,61200],{"class":74},[30,128477,128478],{"class":321},">手机 电话卡\u003C\u002F",[30,128480,558],{"class":51438},[30,128482,51445],{"class":321},[30,128484,128485,128487,128489,128491,128493,128495,128498,128500],{"class":32,"line":60},[30,128486,52282],{"class":321},[30,128488,558],{"class":51438},[30,128490,61195],{"class":36},[30,128492,367],{"class":321},[30,128494,61200],{"class":74},[30,128496,128497],{"class":321},">电视 盒子\u003C\u002F",[30,128499,558],{"class":51438},[30,128501,51445],{"class":321},[30,128503,128504,128506,128508,128510,128512,128514,128517,128519],{"class":32,"line":68},[30,128505,52282],{"class":321},[30,128507,558],{"class":51438},[30,128509,61195],{"class":36},[30,128511,367],{"class":321},[30,128513,61200],{"class":74},[30,128515,128516],{"class":321},">笔记本 平板\u003C\u002F",[30,128518,558],{"class":51438},[30,128520,51445],{"class":321},[30,128522,128523,128525,128527,128529,128531,128533,128536,128538],{"class":32,"line":80},[30,128524,52282],{"class":321},[30,128526,558],{"class":51438},[30,128528,61195],{"class":36},[30,128530,367],{"class":321},[30,128532,61200],{"class":74},[30,128534,128535],{"class":321},">出行 穿戴\u003C\u002F",[30,128537,558],{"class":51438},[30,128539,51445],{"class":321},[30,128541,128542,128544,128546,128548,128550,128552,128555,128557],{"class":32,"line":88},[30,128543,52282],{"class":321},[30,128545,558],{"class":51438},[30,128547,61195],{"class":36},[30,128549,367],{"class":321},[30,128551,61200],{"class":74},[30,128553,128554],{"class":321},">智能 路由器\u003C\u002F",[30,128556,558],{"class":51438},[30,128558,51445],{"class":321},[30,128560,128561,128563,128565,128567,128569,128571,128574,128576],{"class":32,"line":96},[30,128562,52282],{"class":321},[30,128564,558],{"class":51438},[30,128566,61195],{"class":36},[30,128568,367],{"class":321},[30,128570,61200],{"class":74},[30,128572,128573],{"class":321},">健康 儿童\u003C\u002F",[30,128575,558],{"class":51438},[30,128577,51445],{"class":321},[30,128579,128580,128582,128584,128586,128588,128590,128593,128595],{"class":32,"line":104},[30,128581,52282],{"class":321},[30,128583,558],{"class":51438},[30,128585,61195],{"class":36},[30,128587,367],{"class":321},[30,128589,61200],{"class":74},[30,128591,128592],{"class":321},">耳机 音响\u003C\u002F",[30,128594,558],{"class":51438},[30,128596,51445],{"class":321},[30,128598,128599,128601,128603],{"class":32,"line":112},[30,128600,51923],{"class":321},[30,128602,51749],{"class":51438},[30,128604,51445],{"class":321},[20,128606,128608],{"className":126690,"code":128607,"language":126692,"meta":25,"style":25},".sidebar a {\n  display: block;\n  width: 234px;\n  height: 42px;\n  line-height: 42px;\n  padding-left: 30px;\n  color: #fff;\n  background-color: #55585a;\n}\n.sidebar a:hover {\n  background-color: #ff6700;\n}\n",[27,128609,128610,128619,128629,128642,128654,128666,128678,128688,128699,128703,128713,128724],{"__ignoreMap":25},[30,128611,128612,128615,128617],{"class":32,"line":33},[30,128613,128614],{"class":36},".sidebar",[30,128616,1585],{"class":51438},[30,128618,15754],{"class":321},[30,128620,128621,128623,128625,128627],{"class":32,"line":44},[30,128622,128306],{"class":40},[30,128624,51575],{"class":321},[30,128626,61007],{"class":40},[30,128628,1480],{"class":321},[30,128630,128631,128633,128635,128638,128640],{"class":32,"line":52},[30,128632,70706],{"class":40},[30,128634,51575],{"class":321},[30,128636,128637],{"class":40},"234",[30,128639,51630],{"class":317},[30,128641,1480],{"class":321},[30,128643,128644,128646,128648,128650,128652],{"class":32,"line":60},[30,128645,70926],{"class":40},[30,128647,51575],{"class":321},[30,128649,772],{"class":40},[30,128651,51630],{"class":317},[30,128653,1480],{"class":321},[30,128655,128656,128658,128660,128662,128664],{"class":32,"line":68},[30,128657,127374],{"class":40},[30,128659,51575],{"class":321},[30,128661,772],{"class":40},[30,128663,51630],{"class":317},[30,128665,1480],{"class":321},[30,128667,128668,128670,128672,128674,128676],{"class":32,"line":80},[30,128669,70961],{"class":40},[30,128671,51575],{"class":321},[30,128673,1271],{"class":40},[30,128675,51630],{"class":317},[30,128677,1480],{"class":321},[30,128679,128680,128682,128684,128686],{"class":32,"line":88},[30,128681,71043],{"class":40},[30,128683,51575],{"class":321},[30,128685,60980],{"class":40},[30,128687,1480],{"class":321},[30,128689,128690,128692,128694,128697],{"class":32,"line":96},[30,128691,71016],{"class":40},[30,128693,51575],{"class":321},[30,128695,128696],{"class":40},"#55585a",[30,128698,1480],{"class":321},[30,128700,128701],{"class":32,"line":104},[30,128702,1751],{"class":321},[30,128704,128705,128707,128709,128711],{"class":32,"line":112},[30,128706,128614],{"class":36},[30,128708,1585],{"class":51438},[30,128710,61078],{"class":36},[30,128712,15754],{"class":321},[30,128714,128715,128717,128719,128722],{"class":32,"line":123},[30,128716,71016],{"class":40},[30,128718,51575],{"class":321},[30,128720,128721],{"class":40},"#ff6700",[30,128723,1480],{"class":321},[30,128725,128726],{"class":32,"line":131},[30,128727,1751],{"class":321},[160,128729],{"style":126546,"src":128730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[157,128732,128733],{},"行高=盒子高度：实现文字的垂直居中",[157,128735,128736],{},"原理讲解：",[160,128738],{"style":126546,"src":128739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[15,128741,128743],{"id":128742},"_82-css背景","8.2 css背景",[157,128745,128746],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[287,128748,128750],{"id":128749},"_821-背景颜色","8.2.1 背景颜色",[157,128752,128753],{},"background-color:颜色值;",[157,128755,128756],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[287,128758,128760],{"id":128759},"_822-背景图片","8.2.2 背景图片",[157,128762,128763],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[20,128765,128767],{"className":126690,"code":128766,"language":126692,"meta":25,"style":25},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[27,128768,128769,128775,128791],{"__ignoreMap":25},[30,128770,128771,128773],{"class":32,"line":33},[30,128772,51749],{"class":51438},[30,128774,15754],{"class":321},[30,128776,128777,128780,128782,128784,128786,128789],{"class":32,"line":44},[30,128778,128779],{"class":40},"  background-image",[30,128781,51575],{"class":321},[30,128783,61864],{"class":40},[30,128785,322],{"class":321},[30,128787,128788],{"class":5398},"images\u002Fbg.png",[30,128790,2901],{"class":321},[30,128792,128793],{"class":32,"line":52},[30,128794,1751],{"class":321},[457,128796,128797,128806],{},[460,128798,128799],{},[463,128800,128801,128804],{},[466,128802,128803],{"align":23918},"参数值",[466,128805,102834],{"align":23918},[504,128807,128808,128815],{},[463,128809,128810,128812],{},[509,128811,54875],{"align":23918},[509,128813,128814],{"align":23918},"无背景图（默认的）",[463,128816,128817,128819],{},[509,128818,61864],{"align":23918},[509,128820,128821],{"align":23918},"使用绝对或相对地址指定背景图像",[20,128823,128824],{"className":126690,"code":128766,"language":126692,"meta":25,"style":25},[27,128825,128826,128832,128846],{"__ignoreMap":25},[30,128827,128828,128830],{"class":32,"line":33},[30,128829,51749],{"class":51438},[30,128831,15754],{"class":321},[30,128833,128834,128836,128838,128840,128842,128844],{"class":32,"line":44},[30,128835,128779],{"class":40},[30,128837,51575],{"class":321},[30,128839,61864],{"class":40},[30,128841,322],{"class":321},[30,128843,128788],{"class":5398},[30,128845,2901],{"class":321},[30,128847,128848],{"class":32,"line":52},[30,128849,1751],{"class":321},[157,128851,128852],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[287,128854,128856],{"id":128855},"_823-背景平铺","8.2.3 背景平铺",[20,128858,128860],{"className":126690,"code":128859,"language":126692,"meta":25,"style":25},"div {\n  background-repeat: no-repeat;\n}\n",[27,128861,128862,128868,128879],{"__ignoreMap":25},[30,128863,128864,128866],{"class":32,"line":33},[30,128865,51749],{"class":51438},[30,128867,15754],{"class":321},[30,128869,128870,128873,128875,128877],{"class":32,"line":44},[30,128871,128872],{"class":40},"  background-repeat",[30,128874,51575],{"class":321},[30,128876,61874],{"class":40},[30,128878,1480],{"class":321},[30,128880,128881],{"class":32,"line":52},[30,128882,1751],{"class":321},[457,128884,128885,128893],{},[460,128886,128887],{},[463,128888,128889,128891],{},[466,128890,128803],{"align":23918},[466,128892,102834],{"align":23918},[504,128894,128895,128903,128910,128918],{},[463,128896,128897,128900],{},[509,128898,128899],{"align":23918},"repeat",[509,128901,128902],{"align":23918},"背景图像在纵向和横向上平铺（默认的）",[463,128904,128905,128907],{},[509,128906,61874],{"align":23918},[509,128908,128909],{"align":23918},"背景图像不平铺",[463,128911,128912,128915],{},[509,128913,128914],{"align":23918},"repeat-x",[509,128916,128917],{"align":23918},"背景图像在横向上平铺",[463,128919,128920,128923],{},[509,128921,128922],{"align":23918},"repeat-y",[509,128924,128925],{"align":23918},"背景图像在纵向平铺",[287,128927,128929],{"id":128928},"_824-背景图片位置","8.2.4 背景图片位置",[20,128931,128933],{"className":126690,"code":128932,"language":126692,"meta":25,"style":25},"\u002F* 方位名词 *\u002F\ndiv {\n  background-position: center top;\n}\n\u002F* 精确单位 *\u002F\ndiv {\n  background-position: 20px 50px;\n}\n\u002F* 混合单位 *\u002F\ndiv {\n  background-position: 20px center;\n}\n",[27,128934,128935,128940,128946,128960,128964,128969,128975,128991,128995,129000,129006,129020],{"__ignoreMap":25},[30,128936,128937],{"class":32,"line":33},[30,128938,128939],{"class":379},"\u002F* 方位名词 *\u002F\n",[30,128941,128942,128944],{"class":32,"line":44},[30,128943,51749],{"class":51438},[30,128945,15754],{"class":321},[30,128947,128948,128951,128953,128955,128958],{"class":32,"line":52},[30,128949,128950],{"class":40},"  background-position",[30,128952,51575],{"class":321},[30,128954,51730],{"class":40},[30,128956,128957],{"class":40}," top",[30,128959,1480],{"class":321},[30,128961,128962],{"class":32,"line":60},[30,128963,1751],{"class":321},[30,128965,128966],{"class":32,"line":68},[30,128967,128968],{"class":379},"\u002F* 精确单位 *\u002F\n",[30,128970,128971,128973],{"class":32,"line":80},[30,128972,51749],{"class":51438},[30,128974,15754],{"class":321},[30,128976,128977,128979,128981,128983,128985,128987,128989],{"class":32,"line":88},[30,128978,128950],{"class":40},[30,128980,51575],{"class":321},[30,128982,1020],{"class":40},[30,128984,51630],{"class":317},[30,128986,57642],{"class":40},[30,128988,51630],{"class":317},[30,128990,1480],{"class":321},[30,128992,128993],{"class":32,"line":96},[30,128994,1751],{"class":321},[30,128996,128997],{"class":32,"line":104},[30,128998,128999],{"class":379},"\u002F* 混合单位 *\u002F\n",[30,129001,129002,129004],{"class":32,"line":112},[30,129003,51749],{"class":51438},[30,129005,15754],{"class":321},[30,129007,129008,129010,129012,129014,129016,129018],{"class":32,"line":123},[30,129009,128950],{"class":40},[30,129011,51575],{"class":321},[30,129013,1020],{"class":40},[30,129015,51630],{"class":317},[30,129017,17326],{"class":40},[30,129019,1480],{"class":321},[30,129021,129022],{"class":32,"line":131},[30,129023,1751],{"class":321},[157,129025,129026],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[457,129028,129029,129037],{},[460,129030,129031],{},[463,129032,129033,129035],{},[466,129034,128803],{"align":23918},[466,129036,26007],{"align":23918},[504,129038,129039,129046],{},[463,129040,129041,129043],{},[509,129042,52106],{"align":23918},[509,129044,129045],{"align":23918},"百分数|由浮点数和单位标识符组成的长度值",[463,129047,129048,129051],{},[509,129049,129050],{"align":23918},"position",[509,129052,129053],{"align":23918},"top|center|bottom|left|center|right 方位名词",[157,129055,129056],{},"其他说明：",[157,129058,129059],{},"①参数是方位名词",[157,129061,129062],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[157,129064,129065],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[157,129067,129068],{},"②参数是精确单位",[157,129070,129071],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[157,129073,129074],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[157,129076,129077],{},"③参数是混合单位",[157,129079,129080],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[287,129082,129084],{"id":129083},"_825-背景图片固定","8.2.5 背景图片固定",[20,129086,129088],{"className":126690,"code":129087,"language":126692,"meta":25,"style":25},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[27,129089,129090,129095,129101,129113,129117,129122,129128,129138],{"__ignoreMap":25},[30,129091,129092],{"class":32,"line":33},[30,129093,129094],{"class":379},"\u002F* 背景滚动（默认） *\u002F\n",[30,129096,129097,129099],{"class":32,"line":44},[30,129098,51749],{"class":51438},[30,129100,15754],{"class":321},[30,129102,129103,129106,129108,129111],{"class":32,"line":52},[30,129104,129105],{"class":40},"  background-attachment",[30,129107,51575],{"class":321},[30,129109,129110],{"class":40},"scroll",[30,129112,1480],{"class":321},[30,129114,129115],{"class":32,"line":60},[30,129116,1751],{"class":321},[30,129118,129119],{"class":32,"line":68},[30,129120,129121],{"class":379},"\u002F* 背景固定 *\u002F\n",[30,129123,129124,129126],{"class":32,"line":80},[30,129125,51749],{"class":51438},[30,129127,15754],{"class":321},[30,129129,129130,129132,129134,129136],{"class":32,"line":88},[30,129131,129105],{"class":40},[30,129133,51575],{"class":321},[30,129135,86371],{"class":40},[30,129137,1480],{"class":321},[30,129139,129140],{"class":32,"line":96},[30,129141,1751],{"class":321},[457,129143,129144,129153],{},[460,129145,129146],{},[463,129147,129148,129151],{},[466,129149,129150],{"align":23918},"参数",[466,129152,102834],{"align":23918},[504,129154,129155,129162],{},[463,129156,129157,129159],{},[509,129158,129110],{"align":23918},[509,129160,129161],{"align":23918},"背景图像是随对象内容滚动",[463,129163,129164,129166],{},[509,129165,86371],{"align":23918},[509,129167,129168],{"align":23918},"背景图像固定",[287,129170,129172],{"id":129171},"_826-背景样式合写","8.2.6 背景样式合写",[20,129174,129176],{"className":126690,"code":129175,"language":126692,"meta":25,"style":25},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[27,129177,129178,129183,129189,129217],{"__ignoreMap":25},[30,129179,129180],{"class":32,"line":33},[30,129181,129182],{"class":379},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[30,129184,129185,129187],{"class":32,"line":44},[30,129186,51749],{"class":51438},[30,129188,15754],{"class":321},[30,129190,129191,129193,129195,129197,129200,129202,129204,129206,129208,129211,129213,129215],{"class":32,"line":52},[30,129192,70749],{"class":40},[30,129194,51575],{"class":321},[30,129196,60980],{"class":40},[30,129198,129199],{"class":40}," url",[30,129201,322],{"class":321},[30,129203,128788],{"class":5398},[30,129205,13896],{"class":321},[30,129207,61874],{"class":40},[30,129209,129210],{"class":40}," fixed",[30,129212,17326],{"class":40},[30,129214,128957],{"class":40},[30,129216,1480],{"class":321},[30,129218,129219],{"class":32,"line":60},[30,129220,1751],{"class":321},[287,129222,129224],{"id":129223},"_827-背景色半透明","8.2.7 背景色半透明",[20,129226,129228],{"className":126690,"code":129227,"language":126692,"meta":25,"style":25},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[27,129229,129230,129236,129262],{"__ignoreMap":25},[30,129231,129232,129234],{"class":32,"line":33},[30,129233,51749],{"class":51438},[30,129235,15754],{"class":321},[30,129237,129238,129240,129242,129244,129246,129248,129250,129252,129254,129256,129258,129260],{"class":32,"line":44},[30,129239,70749],{"class":40},[30,129241,51575],{"class":321},[30,129243,55248],{"class":40},[30,129245,322],{"class":321},[30,129247,511],{"class":40},[30,129249,12617],{"class":321},[30,129251,511],{"class":40},[30,129253,12617],{"class":321},[30,129255,511],{"class":40},[30,129257,12617],{"class":321},[30,129259,100659],{"class":40},[30,129261,2901],{"class":321},[30,129263,129264],{"class":32,"line":52},[30,129265,1751],{"class":321},[157,129267,99534],{},[157,129269,129270],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[157,129272,129273],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[157,129275,129276],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[157,129278,129279],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[287,129281,129283],{"id":129282},"_828-总结","8.2.8 总结",[457,129285,129286,129297],{},[460,129287,129288],{},[463,129289,129290,129293,129295],{},[466,129291,129292],{"align":23918},"属性",[466,129294,102834],{"align":23918},[466,129296,472],{"align":23918},[504,129298,129299,129310,129321,129332,129343,129354,129365],{},[463,129300,129301,129304,129307],{},[509,129302,129303],{"align":23918},"background-color",[509,129305,129306],{"align":23918},"背景颜色",[509,129308,129309],{"align":23918},"预定义的颜色值\u002F十六进制\u002FRGB代码",[463,129311,129312,129315,129318],{},[509,129313,129314],{"align":23918},"background-image",[509,129316,129317],{"align":23918},"背景图片",[509,129319,129320],{"align":23918},"url(图片路径)",[463,129322,129323,129326,129329],{},[509,129324,129325],{"align":23918},"background-repeat",[509,129327,129328],{"align":23918},"是否平铺",[509,129330,129331],{"align":23918},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[463,129333,129334,129337,129340],{},[509,129335,129336],{"align":23918},"background-position",[509,129338,129339],{"align":23918},"背景位置",[509,129341,129342],{"align":23918},"length\u002Fposition 分别是x和y坐标",[463,129344,129345,129348,129351],{},[509,129346,129347],{"align":23918},"background-attachment",[509,129349,129350],{"align":23918},"背景附着",[509,129352,129353],{"align":23918},"scroll(背景滚动) \u002Ffixed (背景固定)",[463,129355,129356,129359,129362],{},[509,129357,129358],{"align":23918},"背景简写",[509,129360,129361],{"align":23918},"书写更简单",[509,129363,129364],{"align":23918},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[463,129366,129367,129370,129373],{},[509,129368,129369],{"align":23918},"背景半透明",[509,129371,129372],{"align":23918},"背景颜色半透明",[509,129374,129375],{"align":23918},"background: rgba(0,0,0.3); 后面必须是4个值",[157,129377,129378],{},"颜色渐变：",[160,129380],{"style":126546,"src":129381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[160,129383],{"style":126546,"src":129384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[287,129386,129388],{"id":129387},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[20,129390,129392],{"className":127437,"code":129391,"language":127439,"meta":25,"style":25},"\u003Cdiv class=\"nav\">\n  \u003Ca href=\"#\">五彩导航1\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航2\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航3\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航4\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航5\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[27,129393,129394,129409,129428,129447,129466,129485,129504],{"__ignoreMap":25},[30,129395,129396,129398,129400,129402,129404,129407],{"class":32,"line":33},[30,129397,1230],{"class":321},[30,129399,51749],{"class":51438},[30,129401,53624],{"class":36},[30,129403,367],{"class":321},[30,129405,129406],{"class":74},"\"nav\"",[30,129408,51445],{"class":321},[30,129410,129411,129413,129415,129417,129419,129421,129424,129426],{"class":32,"line":44},[30,129412,52282],{"class":321},[30,129414,558],{"class":51438},[30,129416,61195],{"class":36},[30,129418,367],{"class":321},[30,129420,61200],{"class":74},[30,129422,129423],{"class":321},">五彩导航1\u003C\u002F",[30,129425,558],{"class":51438},[30,129427,51445],{"class":321},[30,129429,129430,129432,129434,129436,129438,129440,129443,129445],{"class":32,"line":52},[30,129431,52282],{"class":321},[30,129433,558],{"class":51438},[30,129435,61195],{"class":36},[30,129437,367],{"class":321},[30,129439,61200],{"class":74},[30,129441,129442],{"class":321},">五彩导航2\u003C\u002F",[30,129444,558],{"class":51438},[30,129446,51445],{"class":321},[30,129448,129449,129451,129453,129455,129457,129459,129462,129464],{"class":32,"line":60},[30,129450,52282],{"class":321},[30,129452,558],{"class":51438},[30,129454,61195],{"class":36},[30,129456,367],{"class":321},[30,129458,61200],{"class":74},[30,129460,129461],{"class":321},">五彩导航3\u003C\u002F",[30,129463,558],{"class":51438},[30,129465,51445],{"class":321},[30,129467,129468,129470,129472,129474,129476,129478,129481,129483],{"class":32,"line":68},[30,129469,52282],{"class":321},[30,129471,558],{"class":51438},[30,129473,61195],{"class":36},[30,129475,367],{"class":321},[30,129477,61200],{"class":74},[30,129479,129480],{"class":321},">五彩导航4\u003C\u002F",[30,129482,558],{"class":51438},[30,129484,51445],{"class":321},[30,129486,129487,129489,129491,129493,129495,129497,129500,129502],{"class":32,"line":80},[30,129488,52282],{"class":321},[30,129490,558],{"class":51438},[30,129492,61195],{"class":36},[30,129494,367],{"class":321},[30,129496,61200],{"class":74},[30,129498,129499],{"class":321},">五彩导航5\u003C\u002F",[30,129501,558],{"class":51438},[30,129503,51445],{"class":321},[30,129505,129506,129508,129510],{"class":32,"line":88},[30,129507,51923],{"class":321},[30,129509,51749],{"class":51438},[30,129511,51445],{"class":321},[20,129513,129515],{"className":126690,"code":129514,"language":126692,"meta":25,"style":25},".nav a {\n  display: inline-block;\n  width: 120px;\n  height: 58px;\n  text-align: center;\n  line-height: 58px;\n  color: #fff;\n}\n.nav a:nth-child(1) { background-color: #ff6700; }\n.nav a:nth-child(2) { background-color: #ff0000; }\n.nav a:nth-child(3) { background-color: #00a4ff; }\n.nav a:nth-child(4) { background-color: #ff00ff; }\n.nav a:nth-child(5) { background-color: #00ff00; }\n",[27,129516,129517,129526,129536,129548,129560,129570,129582,129592,129596,129621,129644,129667,129690],{"__ignoreMap":25},[30,129518,129519,129522,129524],{"class":32,"line":33},[30,129520,129521],{"class":36},".nav",[30,129523,1585],{"class":51438},[30,129525,15754],{"class":321},[30,129527,129528,129530,129532,129534],{"class":32,"line":44},[30,129529,128306],{"class":40},[30,129531,51575],{"class":321},[30,129533,72521],{"class":40},[30,129535,1480],{"class":321},[30,129537,129538,129540,129542,129544,129546],{"class":32,"line":52},[30,129539,70706],{"class":40},[30,129541,51575],{"class":321},[30,129543,1137],{"class":40},[30,129545,51630],{"class":317},[30,129547,1480],{"class":321},[30,129549,129550,129552,129554,129556,129558],{"class":32,"line":60},[30,129551,70926],{"class":40},[30,129553,51575],{"class":321},[30,129555,1176],{"class":40},[30,129557,51630],{"class":317},[30,129559,1480],{"class":321},[30,129561,129562,129564,129566,129568],{"class":32,"line":68},[30,129563,70664],{"class":40},[30,129565,51575],{"class":321},[30,129567,51730],{"class":40},[30,129569,1480],{"class":321},[30,129571,129572,129574,129576,129578,129580],{"class":32,"line":80},[30,129573,127374],{"class":40},[30,129575,51575],{"class":321},[30,129577,1176],{"class":40},[30,129579,51630],{"class":317},[30,129581,1480],{"class":321},[30,129583,129584,129586,129588,129590],{"class":32,"line":88},[30,129585,71043],{"class":40},[30,129587,51575],{"class":321},[30,129589,60980],{"class":40},[30,129591,1480],{"class":321},[30,129593,129594],{"class":32,"line":96},[30,129595,1751],{"class":321},[30,129597,129598,129600,129602,129605,129607,129609,129612,129614,129616,129618],{"class":32,"line":104},[30,129599,129521],{"class":36},[30,129601,1585],{"class":51438},[30,129603,129604],{"class":36},":nth-child",[30,129606,322],{"class":321},[30,129608,537],{"class":40},[30,129610,129611],{"class":321},") { ",[30,129613,129303],{"class":40},[30,129615,51575],{"class":321},[30,129617,128721],{"class":40},[30,129619,129620],{"class":321},"; }\n",[30,129622,129623,129625,129627,129629,129631,129633,129635,129637,129639,129642],{"class":32,"line":112},[30,129624,129521],{"class":36},[30,129626,1585],{"class":51438},[30,129628,129604],{"class":36},[30,129630,322],{"class":321},[30,129632,398],{"class":40},[30,129634,129611],{"class":321},[30,129636,129303],{"class":40},[30,129638,51575],{"class":321},[30,129640,129641],{"class":40},"#ff0000",[30,129643,129620],{"class":321},[30,129645,129646,129648,129650,129652,129654,129656,129658,129660,129662,129665],{"class":32,"line":123},[30,129647,129521],{"class":36},[30,129649,1585],{"class":51438},[30,129651,129604],{"class":36},[30,129653,322],{"class":321},[30,129655,392],{"class":40},[30,129657,129611],{"class":321},[30,129659,129303],{"class":40},[30,129661,51575],{"class":321},[30,129663,129664],{"class":40},"#00a4ff",[30,129666,129620],{"class":321},[30,129668,129669,129671,129673,129675,129677,129679,129681,129683,129685,129688],{"class":32,"line":131},[30,129670,129521],{"class":36},[30,129672,1585],{"class":51438},[30,129674,129604],{"class":36},[30,129676,322],{"class":321},[30,129678,613],{"class":40},[30,129680,129611],{"class":321},[30,129682,129303],{"class":40},[30,129684,51575],{"class":321},[30,129686,129687],{"class":40},"#ff00ff",[30,129689,129620],{"class":321},[30,129691,129692,129694,129696,129698,129700,129702,129704,129706,129708,129711],{"class":32,"line":142},[30,129693,129521],{"class":36},[30,129695,1585],{"class":51438},[30,129697,129604],{"class":36},[30,129699,322],{"class":321},[30,129701,639],{"class":40},[30,129703,129611],{"class":321},[30,129705,129303],{"class":40},[30,129707,51575],{"class":321},[30,129709,129710],{"class":40},"#00ff00",[30,129712,129620],{"class":321},[15,129714,129716],{"id":129715},"_83-css三大特性","8.3 css三大特性",[287,129718,129720],{"id":129719},"_831-层叠性","8.3.1 层叠性",[157,129722,129723],{},"为了解决样式冲突问题",[157,129725,129726],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[157,129728,129729],{},"   ②样式不冲突，不会层叠",[287,129731,129733],{"id":129732},"_832-继承性","8.3.2 继承性",[157,129735,129736],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[157,129738,129739],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[20,129741,129743],{"className":126690,"code":129742,"language":126692,"meta":25,"style":25},"p {\n  color: #333;\n}\n",[27,129744,129745,129751,129761],{"__ignoreMap":25},[30,129746,129747,129749],{"class":32,"line":33},[30,129748,157],{"class":51438},[30,129750,15754],{"class":321},[30,129752,129753,129755,129757,129759],{"class":32,"line":44},[30,129754,71043],{"class":40},[30,129756,51575],{"class":321},[30,129758,62507],{"class":40},[30,129760,1480],{"class":321},[30,129762,129763],{"class":32,"line":52},[30,129764,1751],{"class":321},[160,129766],{"style":126546,"src":129767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[157,129769,129770],{},"解释：①行高可以跟单位也可以不跟单位",[157,129772,129773],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[157,129775,129776],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[157,129778,129779],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[287,129781,129783],{"id":129782},"_833-优先级","8.3.3 优先级",[271,129785,129786,129789],{},[150,129787,129788],{},"选择器相同，则执行层叠性",[150,129790,129791],{},"选择器不同，则根据选择器权重执行",[457,129793,129794,129804],{},[460,129795,129796],{},[463,129797,129798,129801],{},[466,129799,129800],{"align":23918},"选择器",[466,129802,129803],{"align":23918},"选择器权重",[504,129805,129806,129814,129822,129830,129838,129846],{},[463,129807,129808,129811],{},[509,129809,129810],{"align":23918},"继承 或者*",[509,129812,129813],{"align":23918},"0，0，0，0",[463,129815,129816,129819],{},[509,129817,129818],{"align":23918},"标签选择器",[509,129820,129821],{"align":23918},"0，0，0，1",[463,129823,129824,129827],{},[509,129825,129826],{"align":23918},"类选择器，伪类选择器",[509,129828,129829],{"align":23918},"0，0，1，0",[463,129831,129832,129835],{},[509,129833,129834],{"align":23918},"ID选择器",[509,129836,129837],{"align":23918},"0，1，0，0",[463,129839,129840,129843],{},[509,129841,129842],{"align":23918},"行内样式",[509,129844,129845],{"align":23918},"1，0，0，0",[463,129847,129848,129851],{},[509,129849,129850],{"align":23918},"！important",[509,129852,129853],{"align":23918},"无穷大",[157,129855,129856],{},"! important用法：",[20,129858,129860],{"className":126690,"code":129859,"language":126692,"meta":25,"style":25},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[27,129861,129862,129867,129873,129886,129890,129895,129901,129911],{"__ignoreMap":25},[30,129863,129864],{"class":32,"line":33},[30,129865,129866],{"class":379},"\u002F* !important 拥有最高优先级 *\u002F\n",[30,129868,129869,129871],{"class":32,"line":44},[30,129870,51749],{"class":51438},[30,129872,15754],{"class":321},[30,129874,129875,129877,129879,129881,129884],{"class":32,"line":52},[30,129876,71043],{"class":40},[30,129878,51575],{"class":321},[30,129880,51783],{"class":40},[30,129882,129883],{"class":317}," !important",[30,129885,1480],{"class":321},[30,129887,129888],{"class":32,"line":60},[30,129889,1751],{"class":321},[30,129891,129892],{"class":32,"line":68},[30,129893,129894],{"class":379},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[30,129896,129897,129899],{"class":32,"line":80},[30,129898,51749],{"class":51438},[30,129900,15754],{"class":321},[30,129902,129903,129905,129907,129909],{"class":32,"line":88},[30,129904,71043],{"class":40},[30,129906,51575],{"class":321},[30,129908,57559],{"class":40},[30,129910,1480],{"class":321},[30,129912,129913],{"class":32,"line":96},[30,129914,1751],{"class":321},[157,129916,129917],{},"优先级注意点：",[157,129919,129920],{},"①权重是有4组数字组成,但是不会有进位",[157,129922,129923],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[157,129925,129926],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[157,129928,129929],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[157,129931,129932],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[157,129934,129935],{},"⑥复合选择器",[457,129937,129938,129948],{},[460,129939,129940],{},[463,129941,129942,129945],{},[466,129943,129944],{"align":23918},"div ul li",[466,129946,129947],{"align":23918},"0,0,0,3",[504,129949,129950,129958,129966],{},[463,129951,129952,129955],{},[509,129953,129954],{"align":23918},".nav ul li",[509,129956,129957],{"align":23918},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[463,129959,129960,129963],{},[509,129961,129962],{"align":23918},"a:hover",[509,129964,129965],{"align":23918},"0,0,1,1",[463,129967,129968,129971],{},[509,129969,129970],{"align":23918},".nav a",[509,129972,129965],{"align":23918},[234,129974,129975],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":129977},[129978,129986,129997],{"id":128086,"depth":44,"text":128087,"children":129979},[129980,129981,129982,129983,129984,129985],{"id":128099,"depth":52,"text":128100},{"id":128171,"depth":52,"text":128172},{"id":128243,"depth":52,"text":128244},{"id":128274,"depth":52,"text":128275},{"id":128281,"depth":52,"text":128282},{"id":128434,"depth":52,"text":128435},{"id":128742,"depth":44,"text":128743,"children":129987},[129988,129989,129990,129991,129992,129993,129994,129995,129996],{"id":128749,"depth":52,"text":128750},{"id":128759,"depth":52,"text":128760},{"id":128855,"depth":52,"text":128856},{"id":128928,"depth":52,"text":128929},{"id":129083,"depth":52,"text":129084},{"id":129171,"depth":52,"text":129172},{"id":129223,"depth":52,"text":129224},{"id":129282,"depth":52,"text":129283},{"id":129387,"depth":52,"text":129388},{"id":129715,"depth":44,"text":129716,"children":129998},[129999,130000,130001],{"id":129719,"depth":52,"text":129720},{"id":129732,"depth":52,"text":129733},{"id":129782,"depth":52,"text":129783},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128078,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130008,"title":130009,"body":130010,"description":242,"extension":243,"meta":131600,"navigation":245,"path":131601,"seo":131602,"stem":131603,"__hash__":131604},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130011,"toc":131579},[130012,130015,130019,130022,130025,130028,130031,130034,130037,130040,130044,130052,130089,130125,130128,130142,130147,130181,130184,130277,130282,130285,130315,130318,130323,130331,130335,130342,130388,130432,130437,130440,130443,130446,130449,130452,130455,130457,130460,130464,130469,130513,130518,130521,130524,130561,130566,130569,130572,130575,130578,130610,130613,130616,130619,130651,130654,130657,130660,130664,130667,130699,130702,130706,130726,130729,130737,130740,130744,130749,130752,130784,130789,130792,130830,130834,130839,130842,130845,130876,130879,130896,130901,130953,131013,131018,131072,131110,131114,131118,131121,131125,131133,131136,131138,131149,131154,131202,131236,131239,131242,131245,131248,131292,131295,131298,131301,131304,131307,131310,131354,131357,131360,131363,131366,131369,131372,131378,131381,131425,131428,131431,131434,131437,131440,131484,131487,131489,131492,131496,131500,131538,131542,131545,131548,131552,131560,131564,131567,131570,131573,131576],[10,130013,130009],{"id":130014},"_9-css盒模型浮动与切图",[15,130016,130018],{"id":130017},"_91-盒子模型","9.1 盒子模型",[157,130020,130021],{},"利用盒子来设计网页",[157,130023,130024],{},"盒子包含：边框、外边距、内边距、实际内容",[157,130026,130027],{},"网页布局设置：",[157,130029,130030],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[157,130032,130033],{},"②利用css设置好盒子样式，然后摆放到相应位置",[157,130035,130036],{},"③往盒子里装内容",[160,130038],{"style":126546,"src":130039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[287,130041,130043],{"id":130042},"_911-边框border","9.1.1 边框（border）",[271,130045,130046,130049],{},[150,130047,130048],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[150,130050,130051],{},"语法",[20,130053,130055],{"className":126690,"code":130054,"language":126692,"meta":25,"style":25},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[27,130056,130057,130062,130068,130085],{"__ignoreMap":25},[30,130058,130059],{"class":32,"line":33},[30,130060,130061],{"class":379},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[30,130063,130064,130066],{"class":32,"line":44},[30,130065,51749],{"class":51438},[30,130067,15754],{"class":321},[30,130069,130070,130072,130074,130076,130078,130080,130083],{"class":32,"line":52},[30,130071,71034],{"class":40},[30,130073,51575],{"class":321},[30,130075,537],{"class":40},[30,130077,51630],{"class":317},[30,130079,51659],{"class":40},[30,130081,130082],{"class":40}," #ccc",[30,130084,1480],{"class":321},[30,130086,130087],{"class":32,"line":60},[30,130088,1751],{"class":321},[457,130090,130091,130099],{},[460,130092,130093],{},[463,130094,130095,130097],{},[466,130096,129292],{"align":23918},[466,130098,102834],{"align":23918},[504,130100,130101,130109,130117],{},[463,130102,130103,130106],{},[509,130104,130105],{"align":23918},"border-width",[509,130107,130108],{"align":23918},"定义边框粗细，单位是px",[463,130110,130111,130114],{},[509,130112,130113],{"align":23918},"border-style",[509,130115,130116],{"align":23918},"边框的样式",[463,130118,130119,130122],{},[509,130120,130121],{"align":23918},"border-color",[509,130123,130124],{"align":23918},"边框的颜色",[157,130126,130127],{},"边框样式 border-style 可以设置如下值：",[147,130129,130130,130133,130136,130139],{},[150,130131,130132],{},"none：没有边框即忽略所有边框的宽度（默认值）",[150,130134,130135],{},"solid：边框为单实线(最为常用的)",[150,130137,130138],{},"dashed：边框为虚线",[150,130140,130141],{},"dotted：边框为点线",[271,130143,130144],{"start":52},[150,130145,130146],{},"边框的合写分写",[20,130148,130149],{"className":126690,"code":130054,"language":126692,"meta":25,"style":25},[27,130150,130151,130155,130161,130177],{"__ignoreMap":25},[30,130152,130153],{"class":32,"line":33},[30,130154,130061],{"class":379},[30,130156,130157,130159],{"class":32,"line":44},[30,130158,51749],{"class":51438},[30,130160,15754],{"class":321},[30,130162,130163,130165,130167,130169,130171,130173,130175],{"class":32,"line":52},[30,130164,71034],{"class":40},[30,130166,51575],{"class":321},[30,130168,537],{"class":40},[30,130170,51630],{"class":317},[30,130172,51659],{"class":40},[30,130174,130082],{"class":40},[30,130176,1480],{"class":321},[30,130178,130179],{"class":32,"line":60},[30,130180,1751],{"class":321},[157,130182,130183],{},"边框分开写法：",[20,130185,130187],{"className":126690,"code":130186,"language":126692,"meta":25,"style":25},"\u002F* 边框分开写法 *\u002F\ndiv {\n  border-top: 1px solid #000;\n  border-right: 2px dashed #333;\n  border-bottom: 3px dotted #666;\n  border-left: 1px solid #999;\n}\n",[27,130188,130189,130194,130200,130218,130236,130255,130273],{"__ignoreMap":25},[30,130190,130191],{"class":32,"line":33},[30,130192,130193],{"class":379},"\u002F* 边框分开写法 *\u002F\n",[30,130195,130196,130198],{"class":32,"line":44},[30,130197,51749],{"class":51438},[30,130199,15754],{"class":321},[30,130201,130202,130205,130207,130209,130211,130213,130216],{"class":32,"line":52},[30,130203,130204],{"class":40},"  border-top",[30,130206,51575],{"class":321},[30,130208,537],{"class":40},[30,130210,51630],{"class":317},[30,130212,51659],{"class":40},[30,130214,130215],{"class":40}," #000",[30,130217,1480],{"class":321},[30,130219,130220,130223,130225,130227,130229,130231,130234],{"class":32,"line":60},[30,130221,130222],{"class":40},"  border-right",[30,130224,51575],{"class":321},[30,130226,398],{"class":40},[30,130228,51630],{"class":317},[30,130230,62379],{"class":40},[30,130232,130233],{"class":40}," #333",[30,130235,1480],{"class":321},[30,130237,130238,130241,130243,130245,130247,130250,130253],{"class":32,"line":68},[30,130239,130240],{"class":40},"  border-bottom",[30,130242,51575],{"class":321},[30,130244,392],{"class":40},[30,130246,51630],{"class":317},[30,130248,130249],{"class":40}," dotted",[30,130251,130252],{"class":40}," #666",[30,130254,1480],{"class":321},[30,130256,130257,130260,130262,130264,130266,130268,130271],{"class":32,"line":80},[30,130258,130259],{"class":40},"  border-left",[30,130261,51575],{"class":321},[30,130263,537],{"class":40},[30,130265,51630],{"class":317},[30,130267,51659],{"class":40},[30,130269,130270],{"class":40}," #999",[30,130272,1480],{"class":321},[30,130274,130275],{"class":32,"line":88},[30,130276,1751],{"class":321},[271,130278,130279],{"start":60},[150,130280,130281],{},"表格的细线边框",[157,130283,130284],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[20,130286,130288],{"className":126690,"code":130287,"language":126692,"meta":25,"style":25},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[27,130289,130290,130295,130301,130311],{"__ignoreMap":25},[30,130291,130292],{"class":32,"line":33},[30,130293,130294],{"class":379},"\u002F* 表格细线边框合并 *\u002F\n",[30,130296,130297,130299],{"class":32,"line":44},[30,130298,457],{"class":51438},[30,130300,15754],{"class":321},[30,130302,130303,130305,130307,130309],{"class":32,"line":52},[30,130304,70716],{"class":40},[30,130306,51575],{"class":321},[30,130308,65173],{"class":40},[30,130310,1480],{"class":321},[30,130312,130313],{"class":32,"line":60},[30,130314,1751],{"class":321},[157,130316,130317],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[271,130319,130320],{"start":68},[150,130321,130322],{},"解决边框额外增加盒子的实际大小的方法：",[147,130324,130325,130328],{},[150,130326,130327],{},"测量盒子大小的时候,不量边框",[150,130329,130330],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[287,130332,130334],{"id":130333},"_912-内边距","9.1.2 内边距",[271,130336,130337,130340],{},[150,130338,130339],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[150,130341,130051],{},[457,130343,130344,130354],{},[460,130345,130346],{},[463,130347,130348,130351],{},[466,130349,130350],{"align":23918},"值的个数",[466,130352,130353],{"align":23918},"表达意思",[504,130355,130356,130364,130372,130380],{},[463,130357,130358,130361],{},[509,130359,130360],{"align":23918},"padding: 5px;",[509,130362,130363],{"align":23918},"1个值，代表上下左右都有5个元素",[463,130365,130366,130369],{},[509,130367,130368],{"align":23918},"padding: 5px 10px;",[509,130370,130371],{"align":23918},"2个值，代表上下内边距为5像素，左右内边距为10像素",[463,130373,130374,130377],{},[509,130375,130376],{"align":23918},"padding: 5px 10px 20px;",[509,130378,130379],{"align":23918},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[463,130381,130382,130385],{},[509,130383,130384],{"align":23918},"padding: 5px 10px 20px 30px;",[509,130386,130387],{"align":23918},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[457,130389,130390,130398],{},[460,130391,130392],{},[463,130393,130394,130396],{},[466,130395,129292],{"align":23918},[466,130397,102834],{"align":23918},[504,130399,130400,130408,130416,130424],{},[463,130401,130402,130405],{},[509,130403,130404],{"align":23918},"padding-left",[509,130406,130407],{"align":23918},"左内边距",[463,130409,130410,130413],{},[509,130411,130412],{"align":23918},"padding-right",[509,130414,130415],{"align":23918},"右内边距",[463,130417,130418,130421],{},[509,130419,130420],{"align":23918},"padding-top",[509,130422,130423],{"align":23918},"上内边距",[463,130425,130426,130429],{},[509,130427,130428],{"align":23918},"padding-bottom",[509,130430,130431],{"align":23918},"下内边距",[271,130433,130434],{"start":52},[150,130435,130436],{},"内边距会影响盒子的实际大小",[157,130438,130439],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[157,130441,130442],{},"①内容和边框有了距离，添加了内边距",[157,130444,130445],{},"②padding影响了盒子实际大小",[157,130447,130448],{},"内边距对盒子大小的影响：",[157,130450,130451],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[157,130453,130454],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[157,130456,95358],{},[157,130458,130459],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[287,130461,130463],{"id":130462},"_913-外边距","9.1.3 外边距",[271,130465,130466],{},[150,130467,130468],{},"控制盒子与盒子之间的距离",[457,130470,130471,130479],{},[460,130472,130473],{},[463,130474,130475,130477],{},[466,130476,129292],{"align":23918},[466,130478,102834],{"align":23918},[504,130480,130481,130489,130497,130505],{},[463,130482,130483,130486],{},[509,130484,130485],{"align":23918},"margin-left",[509,130487,130488],{"align":23918},"左外边距",[463,130490,130491,130494],{},[509,130492,130493],{"align":23918},"margin-right",[509,130495,130496],{"align":23918},"右外边距",[463,130498,130499,130502],{},[509,130500,130501],{"align":23918},"margin-top",[509,130503,130504],{"align":23918},"上外边距",[463,130506,130507,130510],{},[509,130508,130509],{"align":23918},"margin-bottom",[509,130511,130512],{"align":23918},"下外边距",[271,130514,130515],{"start":44},[150,130516,130517],{},"外边距可以让块级盒子水平居中的两个条件：",[157,130519,130520],{},"①盒子必须指定了宽度（width）",[157,130522,130523],{},"②盒子左右的外边距都设置为 auto",[20,130525,130527],{"className":126690,"code":130526,"language":126692,"meta":25,"style":25},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[27,130528,130529,130534,130541,130557],{"__ignoreMap":25},[30,130530,130531],{"class":32,"line":33},[30,130532,130533],{"class":379},"\u002F* margin 复合写法（同上） *\u002F\n",[30,130535,130536,130539],{"class":32,"line":44},[30,130537,130538],{"class":36},".box",[30,130540,15754],{"class":321},[30,130542,130543,130545,130547,130549,130551,130554],{"class":32,"line":52},[30,130544,70608],{"class":40},[30,130546,51575],{"class":321},[30,130548,511],{"class":40},[30,130550,51694],{"class":40},[30,130552,130553],{"class":321},";  ",[30,130555,130556],{"class":379},"\u002F* 块级盒子水平居中 *\u002F\n",[30,130558,130559],{"class":32,"line":60},[30,130560,1751],{"class":321},[271,130562,130563],{"start":52},[150,130564,130565],{},"外边距塌陷问题",[157,130567,130568],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[160,130570],{"style":126546,"src":130571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[157,130573,130574],{},"解决方案：",[157,130576,130577],{},"①可以为父亲元素定义上边距",[20,130579,130580],{"className":126690,"code":130526,"language":126692,"meta":25,"style":25},[27,130581,130582,130586,130592,130606],{"__ignoreMap":25},[30,130583,130584],{"class":32,"line":33},[30,130585,130533],{"class":379},[30,130587,130588,130590],{"class":32,"line":44},[30,130589,130538],{"class":36},[30,130591,15754],{"class":321},[30,130593,130594,130596,130598,130600,130602,130604],{"class":32,"line":52},[30,130595,70608],{"class":40},[30,130597,51575],{"class":321},[30,130599,511],{"class":40},[30,130601,51694],{"class":40},[30,130603,130553],{"class":321},[30,130605,130556],{"class":379},[30,130607,130608],{"class":32,"line":60},[30,130609,1751],{"class":321},[157,130611,130612],{},"②可以为父亲元素定义上内边距",[157,130614,130615],{},"③可以为父亲元素添加overflow:hidden",[160,130617],{"style":126546,"src":130618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[20,130620,130621],{"className":126690,"code":130526,"language":126692,"meta":25,"style":25},[27,130622,130623,130627,130633,130647],{"__ignoreMap":25},[30,130624,130625],{"class":32,"line":33},[30,130626,130533],{"class":379},[30,130628,130629,130631],{"class":32,"line":44},[30,130630,130538],{"class":36},[30,130632,15754],{"class":321},[30,130634,130635,130637,130639,130641,130643,130645],{"class":32,"line":52},[30,130636,70608],{"class":40},[30,130638,51575],{"class":321},[30,130640,511],{"class":40},[30,130642,51694],{"class":40},[30,130644,130553],{"class":321},[30,130646,130556],{"class":379},[30,130648,130649],{"class":32,"line":60},[30,130650,1751],{"class":321},[160,130652],{"style":126546,"src":130653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[157,130655,130656],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[157,130658,130659],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[287,130661,130663],{"id":130662},"_914-清除内外边距","9.1.4 清除内外边距",[157,130665,130666],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[20,130668,130669],{"className":126690,"code":130526,"language":126692,"meta":25,"style":25},[27,130670,130671,130675,130681,130695],{"__ignoreMap":25},[30,130672,130673],{"class":32,"line":33},[30,130674,130533],{"class":379},[30,130676,130677,130679],{"class":32,"line":44},[30,130678,130538],{"class":36},[30,130680,15754],{"class":321},[30,130682,130683,130685,130687,130689,130691,130693],{"class":32,"line":52},[30,130684,70608],{"class":40},[30,130686,51575],{"class":321},[30,130688,511],{"class":40},[30,130690,51694],{"class":40},[30,130692,130553],{"class":321},[30,130694,130556],{"class":379},[30,130696,130697],{"class":32,"line":60},[30,130698,1751],{"class":321},[157,130700,130701],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[287,130703,130705],{"id":130704},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[147,130707,130708,130711,130714,130717,130720,130723],{},[150,130709,130710],{},"文件→打开 ：可以打开我们要测量的图片",[150,130712,130713],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[150,130715,130716],{},"右击标尺，把里面的单位改为像素",[150,130718,130719],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[150,130721,130722],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[150,130724,130725],{},"用选区拖动 可以测量大小",[160,130727],{"style":126546,"src":130728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[147,130730,130731,130734],{},[150,130732,130733],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[150,130735,130736],{},"吸管取色工具",[160,130738],{"style":126546,"src":130739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[287,130741,130743],{"id":130742},"_916-案例","9.1.6 案例",[271,130745,130746],{},[150,130747,130748],{},"小米商品",[160,130750],{"style":126546,"src":130751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[20,130753,130754],{"className":126690,"code":130526,"language":126692,"meta":25,"style":25},[27,130755,130756,130760,130766,130780],{"__ignoreMap":25},[30,130757,130758],{"class":32,"line":33},[30,130759,130533],{"class":379},[30,130761,130762,130764],{"class":32,"line":44},[30,130763,130538],{"class":36},[30,130765,15754],{"class":321},[30,130767,130768,130770,130772,130774,130776,130778],{"class":32,"line":52},[30,130769,70608],{"class":40},[30,130771,51575],{"class":321},[30,130773,511],{"class":40},[30,130775,51694],{"class":40},[30,130777,130553],{"class":321},[30,130779,130556],{"class":379},[30,130781,130782],{"class":32,"line":60},[30,130783,1751],{"class":321},[271,130785,130786],{"start":44},[150,130787,130788],{},"快报模块",[160,130790],{"style":126546,"src":130791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[20,130793,130795],{"className":127437,"code":130794,"language":127439,"meta":25,"style":25},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[27,130796,130797,130802,130817,130822],{"__ignoreMap":25},[30,130798,130799],{"class":32,"line":33},[30,130800,130801],{"class":379},"\u003C!-- HTML 代码示例 -->\n",[30,130803,130804,130806,130808,130810,130812,130815],{"class":32,"line":44},[30,130805,1230],{"class":321},[30,130807,51749],{"class":51438},[30,130809,53624],{"class":36},[30,130811,367],{"class":321},[30,130813,130814],{"class":74},"\"example\"",[30,130816,51445],{"class":321},[30,130818,130819],{"class":32,"line":52},[30,130820,130821],{"class":321},"  示例内容\n",[30,130823,130824,130826,130828],{"class":32,"line":60},[30,130825,51923],{"class":321},[30,130827,51749],{"class":51438},[30,130829,51445],{"class":321},[287,130831,130833],{"id":130832},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[271,130835,130836],{},[150,130837,130838],{},"圆角边框",[157,130840,130841],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[160,130843],{"style":126546,"src":130844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[20,130846,130848],{"className":126690,"code":130847,"language":126692,"meta":25,"style":25},"div {\n  border: 1px solid #ccc;\n}\n",[27,130849,130850,130856,130872],{"__ignoreMap":25},[30,130851,130852,130854],{"class":32,"line":33},[30,130853,51749],{"class":51438},[30,130855,15754],{"class":321},[30,130857,130858,130860,130862,130864,130866,130868,130870],{"class":32,"line":44},[30,130859,71034],{"class":40},[30,130861,51575],{"class":321},[30,130863,537],{"class":40},[30,130865,51630],{"class":317},[30,130867,51659],{"class":40},[30,130869,130082],{"class":40},[30,130871,1480],{"class":321},[30,130873,130874],{"class":32,"line":52},[30,130875,1751],{"class":321},[157,130877,130878],{},"解释:",[147,130880,130881,130884,130887,130890,130893],{},[150,130882,130883],{},"参数值可以为数值或百分比的形式",[150,130885,130886],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[150,130888,130889],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[150,130891,130892],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[150,130894,130895],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[271,130897,130898],{"start":44},[150,130899,130900],{},"盒子阴影",[20,130902,130904],{"className":126690,"code":130903,"language":126692,"meta":25,"style":25},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[27,130905,130906,130912,130949],{"__ignoreMap":25},[30,130907,130908,130910],{"class":32,"line":33},[30,130909,51749],{"class":51438},[30,130911,15754],{"class":321},[30,130913,130914,130917,130919,130921,130923,130925,130927,130929,130931,130933,130935,130937,130939,130941,130943,130945,130947],{"class":32,"line":44},[30,130915,130916],{"class":40},"  box-shadow",[30,130918,51575],{"class":321},[30,130920,511],{"class":40},[30,130922,14937],{"class":40},[30,130924,51630],{"class":317},[30,130926,2220],{"class":40},[30,130928,51630],{"class":317},[30,130930,78905],{"class":40},[30,130932,322],{"class":321},[30,130934,511],{"class":40},[30,130936,12617],{"class":321},[30,130938,511],{"class":40},[30,130940,12617],{"class":321},[30,130942,511],{"class":40},[30,130944,12617],{"class":321},[30,130946,86348],{"class":40},[30,130948,2901],{"class":321},[30,130950,130951],{"class":32,"line":52},[30,130952,1751],{"class":321},[457,130954,130955,130963],{},[460,130956,130957],{},[463,130958,130959,130961],{},[466,130960,472],{"align":23918},[466,130962,27627],{"align":23918},[504,130964,130965,130973,130981,130989,130997,131005],{},[463,130966,130967,130970],{},[509,130968,130969],{"align":23918},"h-shadow",[509,130971,130972],{"align":23918},"必需,水平阴影的位置,允许负值",[463,130974,130975,130978],{},[509,130976,130977],{"align":23918},"v-shadow",[509,130979,130980],{"align":23918},"必需,垂直阴影的位置,允许负值",[463,130982,130983,130986],{},[509,130984,130985],{"align":23918},"blur",[509,130987,130988],{"align":23918},"可选,模糊距离,就是影子的虚实",[463,130990,130991,130994],{},[509,130992,130993],{"align":23918},"spread",[509,130995,130996],{"align":23918},"可选,阴影尺寸",[463,130998,130999,131002],{},[509,131000,131001],{"align":23918},"color",[509,131003,131004],{"align":23918},"可选,阴影的颜色",[463,131006,131007,131010],{},[509,131008,131009],{"align":23918},"inset",[509,131011,131012],{"align":23918},"可选,将外部阴影(outset)改为内部阴影",[271,131014,131015],{"start":52},[150,131016,131017],{},"文字阴影",[20,131019,131021],{"className":126690,"code":131020,"language":126692,"meta":25,"style":25},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[27,131022,131023,131029,131068],{"__ignoreMap":25},[30,131024,131025,131027],{"class":32,"line":33},[30,131026,157],{"class":51438},[30,131028,15754],{"class":321},[30,131030,131031,131034,131036,131038,131040,131042,131044,131046,131048,131050,131052,131054,131056,131058,131060,131062,131064,131066],{"class":32,"line":44},[30,131032,131033],{"class":40},"  text-shadow",[30,131035,51575],{"class":321},[30,131037,537],{"class":40},[30,131039,51630],{"class":317},[30,131041,25291],{"class":40},[30,131043,51630],{"class":317},[30,131045,14937],{"class":40},[30,131047,51630],{"class":317},[30,131049,78905],{"class":40},[30,131051,322],{"class":321},[30,131053,511],{"class":40},[30,131055,12617],{"class":321},[30,131057,511],{"class":40},[30,131059,12617],{"class":321},[30,131061,511],{"class":40},[30,131063,12617],{"class":321},[30,131065,100659],{"class":40},[30,131067,2901],{"class":321},[30,131069,131070],{"class":32,"line":52},[30,131071,1751],{"class":321},[457,131073,131074,131082],{},[460,131075,131076],{},[463,131077,131078,131080],{},[466,131079,472],{"align":23918},[466,131081,27627],{"align":23918},[504,131083,131084,131090,131097,131104],{},[463,131085,131086,131088],{},[509,131087,130969],{"align":23918},[509,131089,130972],{"align":23918},[463,131091,131092,131094],{},[509,131093,130977],{"align":23918},[509,131095,131096],{"align":23918},"必需,垂直阴影位置,允许负值",[463,131098,131099,131101],{},[509,131100,130985],{"align":23918},[509,131102,131103],{"align":23918},"可选,模糊的距离",[463,131105,131106,131108],{},[509,131107,131001],{"align":23918},[509,131109,131004],{"align":23918},[15,131111,131113],{"id":131112},"_92-浮动","9.2 浮动",[287,131115,131117],{"id":131116},"_921-浮动介绍","9.2.1 浮动介绍",[157,131119,131120],{},"在16.2中详细介绍",[287,131122,131124],{"id":131123},"_922-清除浮动","9.2.2 清除浮动",[271,131126,131127,131130],{},[150,131128,131129],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[150,131131,131132],{},"清除浮动的本质",[157,131134,131135],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[157,131137,9207],{},[147,131139,131140,131143,131146],{},[150,131141,131142],{},"如果父盒子本身有高度，则不需要清除浮动",[150,131144,131145],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[150,131147,131148],{},"父级有了高度，就不会影响下面的标准流了",[271,131150,131151],{"start":52},[150,131152,131153],{},"清除浮动样式",[20,131155,131157],{"className":126690,"code":131156,"language":126692,"meta":25,"style":25},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[27,131158,131159,131166,131177,131181,131188,131198],{"__ignoreMap":25},[30,131160,131161,131164],{"class":32,"line":33},[30,131162,131163],{"class":36},".left",[30,131165,15754],{"class":321},[30,131167,131168,131171,131173,131175],{"class":32,"line":44},[30,131169,131170],{"class":40},"  float",[30,131172,51575],{"class":321},[30,131174,23918],{"class":40},[30,131176,1480],{"class":321},[30,131178,131179],{"class":32,"line":52},[30,131180,1751],{"class":321},[30,131182,131183,131186],{"class":32,"line":60},[30,131184,131185],{"class":36},".right",[30,131187,15754],{"class":321},[30,131189,131190,131192,131194,131196],{"class":32,"line":68},[30,131191,131170],{"class":40},[30,131193,51575],{"class":321},[30,131195,72660],{"class":40},[30,131197,1480],{"class":321},[30,131199,131200],{"class":32,"line":80},[30,131201,1751],{"class":321},[457,131203,131204,131212],{},[460,131205,131206],{},[463,131207,131208,131210],{},[466,131209,127154],{"align":23918},[466,131211,27627],{"align":23918},[504,131213,131214,131221,131228],{},[463,131215,131216,131218],{},[509,131217,23918],{"align":23918},[509,131219,131220],{"align":23918},"不允许左侧有浮动元素（清除左侧浮动的影响）",[463,131222,131223,131225],{},[509,131224,72660],{"align":23918},[509,131226,131227],{"align":23918},"不允许右侧有浮动元素（清除右侧浮动的影响）",[463,131229,131230,131233],{},[509,131231,131232],{"align":23918},"both",[509,131234,131235],{"align":23918},"同时清除左右侧浮动的影响",[157,131237,131238],{},"法一",[157,131240,131241],{},"额外标签法也称为隔墙法",[157,131243,131244],{},"使用方式：",[157,131246,131247],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[20,131249,131250],{"className":126690,"code":131156,"language":126692,"meta":25,"style":25},[27,131251,131252,131258,131268,131272,131278,131288],{"__ignoreMap":25},[30,131253,131254,131256],{"class":32,"line":33},[30,131255,131163],{"class":36},[30,131257,15754],{"class":321},[30,131259,131260,131262,131264,131266],{"class":32,"line":44},[30,131261,131170],{"class":40},[30,131263,51575],{"class":321},[30,131265,23918],{"class":40},[30,131267,1480],{"class":321},[30,131269,131270],{"class":32,"line":52},[30,131271,1751],{"class":321},[30,131273,131274,131276],{"class":32,"line":60},[30,131275,131185],{"class":36},[30,131277,15754],{"class":321},[30,131279,131280,131282,131284,131286],{"class":32,"line":68},[30,131281,131170],{"class":40},[30,131283,51575],{"class":321},[30,131285,72660],{"class":40},[30,131287,1480],{"class":321},[30,131289,131290],{"class":32,"line":80},[30,131291,1751],{"class":321},[157,131293,131294],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[157,131296,131297],{},"优点： 通俗易懂，书写方便",[157,131299,131300],{},"缺点： 添加许多无意义的标签，结构化较差",[157,131302,131303],{},"注意： 要求这个新的空标签必须是块级元素。",[157,131305,131306],{},"法二",[157,131308,131309],{},"父级添加overflow属性",[20,131311,131312],{"className":126690,"code":131156,"language":126692,"meta":25,"style":25},[27,131313,131314,131320,131330,131334,131340,131350],{"__ignoreMap":25},[30,131315,131316,131318],{"class":32,"line":33},[30,131317,131163],{"class":36},[30,131319,15754],{"class":321},[30,131321,131322,131324,131326,131328],{"class":32,"line":44},[30,131323,131170],{"class":40},[30,131325,51575],{"class":321},[30,131327,23918],{"class":40},[30,131329,1480],{"class":321},[30,131331,131332],{"class":32,"line":52},[30,131333,1751],{"class":321},[30,131335,131336,131338],{"class":32,"line":60},[30,131337,131185],{"class":36},[30,131339,15754],{"class":321},[30,131341,131342,131344,131346,131348],{"class":32,"line":68},[30,131343,131170],{"class":40},[30,131345,51575],{"class":321},[30,131347,72660],{"class":40},[30,131349,1480],{"class":321},[30,131351,131352],{"class":32,"line":80},[30,131353,1751],{"class":321},[157,131355,131356],{},"overflow: hidden;",[157,131358,131359],{},"优点：代码简洁",[157,131361,131362],{},"缺点：无法显示溢出的部分",[157,131364,131365],{},"注意：是给父元素添加代码",[157,131367,131368],{},"法三",[157,131370,131371],{},"父级添加after伪元素",[157,131373,131374,131377],{},[131375,131376],"after",{}," 方式是额外标签法的升级版",[157,131379,131380],{},"使用的时候复制就可以",[20,131382,131383],{"className":126690,"code":131156,"language":126692,"meta":25,"style":25},[27,131384,131385,131391,131401,131405,131411,131421],{"__ignoreMap":25},[30,131386,131387,131389],{"class":32,"line":33},[30,131388,131163],{"class":36},[30,131390,15754],{"class":321},[30,131392,131393,131395,131397,131399],{"class":32,"line":44},[30,131394,131170],{"class":40},[30,131396,51575],{"class":321},[30,131398,23918],{"class":40},[30,131400,1480],{"class":321},[30,131402,131403],{"class":32,"line":52},[30,131404,1751],{"class":321},[30,131406,131407,131409],{"class":32,"line":60},[30,131408,131185],{"class":36},[30,131410,15754],{"class":321},[30,131412,131413,131415,131417,131419],{"class":32,"line":68},[30,131414,131170],{"class":40},[30,131416,51575],{"class":321},[30,131418,72660],{"class":40},[30,131420,1480],{"class":321},[30,131422,131423],{"class":32,"line":80},[30,131424,1751],{"class":321},[157,131426,131427],{},"优点：没有增加标签，结构更简单",[157,131429,131430],{},"缺点：照顾低版本浏览器",[157,131432,131433],{},"代表网站： 百度、淘宝网、网易等",[157,131435,131436],{},"法四",[157,131438,131439],{},"父级添加双伪元素",[20,131441,131442],{"className":126690,"code":131156,"language":126692,"meta":25,"style":25},[27,131443,131444,131450,131460,131464,131470,131480],{"__ignoreMap":25},[30,131445,131446,131448],{"class":32,"line":33},[30,131447,131163],{"class":36},[30,131449,15754],{"class":321},[30,131451,131452,131454,131456,131458],{"class":32,"line":44},[30,131453,131170],{"class":40},[30,131455,51575],{"class":321},[30,131457,23918],{"class":40},[30,131459,1480],{"class":321},[30,131461,131462],{"class":32,"line":52},[30,131463,1751],{"class":321},[30,131465,131466,131468],{"class":32,"line":60},[30,131467,131185],{"class":36},[30,131469,15754],{"class":321},[30,131471,131472,131474,131476,131478],{"class":32,"line":68},[30,131473,131170],{"class":40},[30,131475,51575],{"class":321},[30,131477,72660],{"class":40},[30,131479,1480],{"class":321},[30,131481,131482],{"class":32,"line":80},[30,131483,1751],{"class":321},[157,131485,131486],{},"优点：代码更简洁",[157,131488,131430],{},[157,131490,131491],{},"代表网站：小米、腾讯等",[15,131493,131495],{"id":131494},"_93-ps切图","9.3 PS切图",[287,131497,131499],{"id":131498},"_931-常见图片格式","9.3.1 常见图片格式",[457,131501,131502,131512],{},[460,131503,131504],{},[463,131505,131506,131509],{},[466,131507,131508],{"align":23918},"jpg图像格式",[466,131510,131511],{"align":23918},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[504,131513,131514,131522,131530],{},[463,131515,131516,131519],{},[509,131517,131518],{"align":23918},"gif图像格式",[509,131520,131521],{"align":23918},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[463,131523,131524,131527],{},[509,131525,131526],{"align":23918},"png图像格式",[509,131528,131529],{"align":23918},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[463,131531,131532,131535],{},[509,131533,131534],{"align":23918},"PSD图像格式",[509,131536,131537],{"align":23918},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[287,131539,131541],{"id":131540},"_932-图层切图","9.3.2 图层切图",[157,131543,131544],{},"最简单的切图方式：右击图层 → 导出 → 切片",[157,131546,131547],{},"按住shift选中两个图层->图层菜单->合并图层",[287,131549,131551],{"id":131550},"_933-切片切图","9.3.3 切片切图",[147,131553,131554,131557],{},[150,131555,131556],{},"利用切片工具手动划出",[150,131558,131559],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[287,131561,131563],{"id":131562},"_934-切图步骤","9.3.4 切图步骤",[157,131565,131566],{},"用切片工具选中：",[160,131568],{"style":126546,"src":131569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[157,131571,131572],{},"文件 -> 导出",[160,131574],{"style":126546,"src":131575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[234,131577,131578],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":44,"depth":44,"links":131580},[131581,131590,131594],{"id":130017,"depth":44,"text":130018,"children":131582},[131583,131584,131585,131586,131587,131588,131589],{"id":130042,"depth":52,"text":130043},{"id":130333,"depth":52,"text":130334},{"id":130462,"depth":52,"text":130463},{"id":130662,"depth":52,"text":130663},{"id":130704,"depth":52,"text":130705},{"id":130742,"depth":52,"text":130743},{"id":130832,"depth":52,"text":130833},{"id":131112,"depth":44,"text":131113,"children":131591},[131592,131593],{"id":131116,"depth":52,"text":131117},{"id":131123,"depth":52,"text":131124},{"id":131494,"depth":44,"text":131495,"children":131595},[131596,131597,131598,131599],{"id":131498,"depth":52,"text":131499},{"id":131540,"depth":52,"text":131541},{"id":131550,"depth":52,"text":131551},{"id":131562,"depth":52,"text":131563},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130009,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131606,"title":131607,"body":131608,"description":242,"extension":243,"meta":132249,"navigation":245,"path":132250,"seo":132251,"stem":132252,"__hash__":132253},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131609,"toc":132237},[131610,131613,131617,131643,131677,131681,131685,131688,131730,131737,131747,131755,131757,131760,131763,131766,131773,131787,131791,131794,131823,131827,131830,131844,131848,131851,131879,131883,131886,131912,131916,131921,131954,131959,131987,131991,132008,132054,132059,132103,132120,132227,132235],[10,131611,131607],{"id":131612},"_10-css规范与学成在线案例",[15,131614,131616],{"id":131615},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[271,131618,131619,131625,131631,131637],{},[150,131620,131621,131624],{},[469,131622,131623],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[150,131626,131627,131630],{},[469,131628,131629],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[150,131632,131633,131636],{},[469,131634,131635],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[150,131638,131639,131642],{},[469,131640,131641],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[20,131644,131645],{"className":126690,"code":130054,"language":126692,"meta":25,"style":25},[27,131646,131647,131651,131657,131673],{"__ignoreMap":25},[30,131648,131649],{"class":32,"line":33},[30,131650,130061],{"class":379},[30,131652,131653,131655],{"class":32,"line":44},[30,131654,51749],{"class":51438},[30,131656,15754],{"class":321},[30,131658,131659,131661,131663,131665,131667,131669,131671],{"class":32,"line":52},[30,131660,71034],{"class":40},[30,131662,51575],{"class":321},[30,131664,537],{"class":40},[30,131666,51630],{"class":317},[30,131668,51659],{"class":40},[30,131670,130082],{"class":40},[30,131672,1480],{"class":321},[30,131674,131675],{"class":32,"line":60},[30,131676,1751],{"class":321},[15,131678,131680],{"id":131679},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[287,131682,131684],{"id":131683},"_1021-header头部制作","10.2.1 header头部制作",[160,131686],{"style":126546,"src":131687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[147,131689,131690,131697,131704,131710,131717,131724],{},[150,131691,131692,131693,131696],{},"1号是版心盒子 ",[469,131694,131695],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[150,131698,131699,131700,131703],{},"版心盒子 里面包含 2号盒子 ",[469,131701,131702],{},"logo"," 图标",[150,131705,131706,131707,131709],{},"版心盒子 里面包含 3号盒子 ",[469,131708,53851],{}," 导航栏",[150,131711,131712,131713,131716],{},"版心盒子 里面包含 4号盒子 ",[469,131714,131715],{},"search"," 搜索框",[150,131718,131719,131720,131723],{},"版心盒子 里面包含 5号盒子 ",[469,131721,131722],{},"user"," 个人信息",[150,131725,131726,131727],{},"注意，要求里面的 ",[469,131728,131729],{},"4个子盒子 必须都浮动",[271,131731,131732],{},[150,131733,131734],{},[469,131735,131736],{},"导航栏注意点:",[157,131738,131739,131740,131743,131744],{},"实际开发中， ",[469,131741,131742],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[469,131745,131746],{},"用 li 包含链接(li+a)的做法",[147,131748,131749,131752],{},[150,131750,131751],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[150,131753,131754],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[157,131756,9207],{},[157,131758,131759],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[157,131761,131762],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[157,131764,131765],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[271,131767,131768],{"start":44},[150,131769,131770],{},[469,131771,131772],{},"4号盒子search的细节：",[147,131774,131775,131778,131781],{},[150,131776,131777],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[150,131779,131780],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[150,131782,131783,131786],{},[27,131784,131785],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[287,131788,131790],{"id":131789},"_1022-banner制作","10.2.2 banner制作",[160,131792],{"style":126546,"src":131793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[147,131795,131796,131803,131809,131816],{},[150,131797,131798,131799,131802],{},"1号盒子是通栏的大盒子 ",[469,131800,131801],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[150,131804,131805,131806,131808],{},"2号盒子是版心 ",[469,131807,1115],{}," ， 要水平居中对齐",[150,131810,131811,131812,131815],{},"3号盒子版心内，左对齐 ",[469,131813,131814],{},"subnav"," 侧导航栏",[150,131817,131818,131819,131822],{},"4号盒子版心内，右对齐 ",[469,131820,131821],{},"course"," 课程",[287,131824,131826],{"id":131825},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[160,131828],{"style":126546,"src":131829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[147,131831,131832,131835,131838,131841],{},[150,131833,131834],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[150,131836,131837],{},"1号盒子是标题 H3 左侧浮动",[150,131839,131840],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[150,131842,131843],{},"3号盒子 右浮动 mod 修改",[287,131845,131847],{"id":131846},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[160,131849],{"style":126546,"src":131850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[147,131852,131853,131859,131866,131873,131876],{},[150,131854,131855,131856,131858],{},"1号盒子为最大的盒子 ",[469,131857,53852],{}," 版心水平居中对齐",[150,131860,131861,131862,131865],{},"2号盒子为上面部分 ",[469,131863,131864],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[150,131867,131868,131869,131872],{},"3号盒子为底下部分 ",[469,131870,131871],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[150,131874,131875],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[150,131877,131878],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[287,131880,131882],{"id":131881},"_1025-底部模块制作","10.2.5 底部模块制作",[160,131884],{"style":126546,"src":131885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[147,131887,131888,131895,131898,131905],{},[150,131889,131890,131891,131894],{},"1号盒子通栏大盒子 底部 ",[469,131892,131893],{},"footer"," 给高度 底色是白色",[150,131896,131897],{},"2号盒子版心水平居中",[150,131899,131900,131901,131904],{},"3号盒子版权 ",[469,131902,131903],{},"copyright"," 左对齐",[150,131906,131907,131908,131911],{},"4号盒子 链接组 ",[469,131909,131910],{},"links"," 右对齐",[287,131913,131915],{"id":131914},"_1026-代码模块","10.2.6 代码模块",[271,131917,131918],{},[150,131919,131920],{},"html部分",[20,131922,131924],{"className":127437,"code":131923,"language":127439,"meta":25,"style":25},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[27,131925,131926],{"__ignoreMap":25},[30,131927,131928,131930,131932,131934,131936,131939,131942,131944,131947,131950,131952],{"class":32,"line":33},[30,131929,1230],{"class":321},[30,131931,558],{"class":51438},[30,131933,61195],{"class":36},[30,131935,367],{"class":321},[30,131937,131938],{"class":74},"\"https:\u002F\u002Fexample.com\"",[30,131940,131941],{"class":36}," target",[30,131943,367],{"class":321},[30,131945,131946],{"class":74},"\"_blank\"",[30,131948,131949],{"class":321},">链接文字\u003C\u002F",[30,131951,558],{"class":51438},[30,131953,51445],{"class":321},[271,131955,131956],{"start":44},[150,131957,131958],{},"css部分",[20,131960,131961],{"className":127437,"code":131923,"language":127439,"meta":25,"style":25},[27,131962,131963],{"__ignoreMap":25},[30,131964,131965,131967,131969,131971,131973,131975,131977,131979,131981,131983,131985],{"class":32,"line":33},[30,131966,1230],{"class":321},[30,131968,558],{"class":51438},[30,131970,61195],{"class":36},[30,131972,367],{"class":321},[30,131974,131938],{"class":74},[30,131976,131941],{"class":36},[30,131978,367],{"class":321},[30,131980,131946],{"class":74},[30,131982,131949],{"class":321},[30,131984,558],{"class":51438},[30,131986,51445],{"class":321},[287,131988,131990],{"id":131989},"_1027-收获","10.2.7 收获",[271,131992,131993,131996,131999,132002,132005],{},[150,131994,131995],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[150,131997,131998],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[150,132000,132001],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[150,132003,132004],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[150,132006,132007],{},"遗忘代码",[20,132009,132011],{"className":126690,"code":132010,"language":126692,"meta":25,"style":25},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[27,132012,132013,132035,132040,132050],{"__ignoreMap":25},[30,132014,132015,132017,132019,132021,132023,132025,132027,132029,132031,132033],{"class":32,"line":33},[30,132016,51749],{"class":51438},[30,132018,12617],{"class":321},[30,132020,157],{"class":51438},[30,132022,12617],{"class":321},[30,132024,10],{"class":51438},[30,132026,12617],{"class":321},[30,132028,147],{"class":51438},[30,132030,12617],{"class":321},[30,132032,150],{"class":51438},[30,132034,15754],{"class":321},[30,132036,132037],{"class":32,"line":44},[30,132038,132039],{"class":379},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[30,132041,132042,132044,132046,132048],{"class":32,"line":52},[30,132043,128306],{"class":40},[30,132045,51575],{"class":321},[30,132047,61007],{"class":40},[30,132049,1480],{"class":321},[30,132051,132052],{"class":32,"line":60},[30,132053,1751],{"class":321},[271,132055,132056],{"start":80},[150,132057,132058],{},"html引css的程序",[20,132060,132061],{"className":126690,"code":132010,"language":126692,"meta":25,"style":25},[27,132062,132063,132085,132089,132099],{"__ignoreMap":25},[30,132064,132065,132067,132069,132071,132073,132075,132077,132079,132081,132083],{"class":32,"line":33},[30,132066,51749],{"class":51438},[30,132068,12617],{"class":321},[30,132070,157],{"class":51438},[30,132072,12617],{"class":321},[30,132074,10],{"class":51438},[30,132076,12617],{"class":321},[30,132078,147],{"class":51438},[30,132080,12617],{"class":321},[30,132082,150],{"class":51438},[30,132084,15754],{"class":321},[30,132086,132087],{"class":32,"line":44},[30,132088,132039],{"class":379},[30,132090,132091,132093,132095,132097],{"class":32,"line":52},[30,132092,128306],{"class":40},[30,132094,51575],{"class":321},[30,132096,61007],{"class":40},[30,132098,1480],{"class":321},[30,132100,132101],{"class":32,"line":60},[30,132102,1751],{"class":321},[271,132104,132105,132108,132111,132114,132117],{"start":88},[150,132106,132107],{},"浮动的盒子不会有外边距合并问题",[150,132109,132110],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[150,132112,132113],{},"ctrl+g快速定位行；shift+alt多个光标",[150,132115,132116],{},"学习上方各个模块的选择器起名方法，以后就这样用",[150,132118,132119],{},"在写选择器时尽量写全一些，例如",[20,132121,132123],{"className":126690,"code":132122,"language":126692,"meta":25,"style":25},"\u002F* 静态定位（默认） *\u002F\n.static { position: static; }\n\u002F* 相对定位 *\u002F\n.relative { position: relative; }\n\u002F* 绝对定位 *\u002F\n.absolute { position: absolute; }\n\u002F* 固定定位 *\u002F\n.fixed { position: fixed; }\n\u002F* 粘性定位 *\u002F\n.sticky { position: sticky; }\n",[27,132124,132125,132130,132146,132151,132166,132171,132186,132191,132206,132211],{"__ignoreMap":25},[30,132126,132127],{"class":32,"line":33},[30,132128,132129],{"class":379},"\u002F* 静态定位（默认） *\u002F\n",[30,132131,132132,132135,132137,132139,132141,132144],{"class":32,"line":44},[30,132133,132134],{"class":36},".static",[30,132136,79945],{"class":321},[30,132138,129050],{"class":40},[30,132140,51575],{"class":321},[30,132142,132143],{"class":40},"static",[30,132145,129620],{"class":321},[30,132147,132148],{"class":32,"line":52},[30,132149,132150],{"class":379},"\u002F* 相对定位 *\u002F\n",[30,132152,132153,132156,132158,132160,132162,132164],{"class":32,"line":60},[30,132154,132155],{"class":36},".relative",[30,132157,79945],{"class":321},[30,132159,129050],{"class":40},[30,132161,51575],{"class":321},[30,132163,54902],{"class":40},[30,132165,129620],{"class":321},[30,132167,132168],{"class":32,"line":68},[30,132169,132170],{"class":379},"\u002F* 绝对定位 *\u002F\n",[30,132172,132173,132176,132178,132180,132182,132184],{"class":32,"line":80},[30,132174,132175],{"class":36},".absolute",[30,132177,79945],{"class":321},[30,132179,129050],{"class":40},[30,132181,51575],{"class":321},[30,132183,54969],{"class":40},[30,132185,129620],{"class":321},[30,132187,132188],{"class":32,"line":88},[30,132189,132190],{"class":379},"\u002F* 固定定位 *\u002F\n",[30,132192,132193,132196,132198,132200,132202,132204],{"class":32,"line":96},[30,132194,132195],{"class":36},".fixed",[30,132197,79945],{"class":321},[30,132199,129050],{"class":40},[30,132201,51575],{"class":321},[30,132203,86371],{"class":40},[30,132205,129620],{"class":321},[30,132207,132208],{"class":32,"line":104},[30,132209,132210],{"class":379},"\u002F* 粘性定位 *\u002F\n",[30,132212,132213,132216,132218,132220,132222,132225],{"class":32,"line":112},[30,132214,132215],{"class":36},".sticky",[30,132217,79945],{"class":321},[30,132219,129050],{"class":40},[30,132221,51575],{"class":321},[30,132223,132224],{"class":40},"sticky",[30,132226,129620],{"class":321},[271,132228,132229,132232],{"start":131},[150,132230,132231],{},"一定要用好注释",[150,132233,132234],{},"浮动的盒子不会有外边距合并的问题",[234,132236,131578],{},{"title":25,"searchDepth":44,"depth":44,"links":132238},[132239,132240],{"id":131615,"depth":44,"text":131616},{"id":131679,"depth":44,"text":131680,"children":132241},[132242,132243,132244,132245,132246,132247,132248],{"id":131683,"depth":52,"text":131684},{"id":131789,"depth":52,"text":131790},{"id":131825,"depth":52,"text":131826},{"id":131846,"depth":52,"text":131847},{"id":131881,"depth":52,"text":131882},{"id":131914,"depth":52,"text":131915},{"id":131989,"depth":52,"text":131990},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131607,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132255,"title":132256,"body":132257,"description":242,"extension":243,"meta":133743,"navigation":245,"path":133744,"seo":133745,"stem":133746,"__hash__":133747},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132258,"toc":133735},[132259,132262,132266,132270,132281,132285,132302,132346,132379,132382,132399,132402,132405,132449,132453,132457,132460,132463,132467,132470,132481,132544,132585,132588,132603,132657,132665,132668,132679,132733,132759,132762,132775,132829,132861,132915,132938,132992,132995,132998,133005,133059,133080,133134,133137,133140,133225,133233,133290,133313,133317,133320,133338,133342,133361,133415,133453,133457,133460,133463,133485,133489,133497,133500,133505,133516,133519,133523,133537,133581,133584,133588,133591,133596,133622,133627,133704,133707,133711,133714,133717,133720,133723,133726,133729,133732],[10,132260,132256],{"id":132261},"_11-传统布局与定位体系",[15,132263,132265],{"id":132264},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[287,132267,132269],{"id":132268},"_1111-普通流标准流","11.1.1 普通流（标准流）",[147,132271,132272,132275,132278],{},[150,132273,132274],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[150,132276,132277],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[150,132279,132280],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[287,132282,132284],{"id":132283},"_1112-浮动","11.1.2 浮动",[147,132286,132287,132290,132293,132296,132299],{},[150,132288,132289],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[150,132291,132292],{},"浮动可以改变元素标签默认的排列方式",[150,132294,132295],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[150,132297,132298],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[150,132300,132301],{},"在使用行内块转换时盒子之间是有空隙的",[20,132303,132304],{"className":126690,"code":131156,"language":126692,"meta":25,"style":25},[27,132305,132306,132312,132322,132326,132332,132342],{"__ignoreMap":25},[30,132307,132308,132310],{"class":32,"line":33},[30,132309,131163],{"class":36},[30,132311,15754],{"class":321},[30,132313,132314,132316,132318,132320],{"class":32,"line":44},[30,132315,131170],{"class":40},[30,132317,51575],{"class":321},[30,132319,23918],{"class":40},[30,132321,1480],{"class":321},[30,132323,132324],{"class":32,"line":52},[30,132325,1751],{"class":321},[30,132327,132328,132330],{"class":32,"line":60},[30,132329,131185],{"class":36},[30,132331,15754],{"class":321},[30,132333,132334,132336,132338,132340],{"class":32,"line":68},[30,132335,131170],{"class":40},[30,132337,51575],{"class":321},[30,132339,72660],{"class":40},[30,132341,1480],{"class":321},[30,132343,132344],{"class":32,"line":80},[30,132345,1751],{"class":321},[457,132347,132348,132356],{},[460,132349,132350],{},[463,132351,132352,132354],{},[466,132353,127154],{"align":23918},[466,132355,27627],{"align":23918},[504,132357,132358,132365,132372],{},[463,132359,132360,132362],{},[509,132361,54875],{"align":23918},[509,132363,132364],{"align":23918},"元素不浮动（默认值）",[463,132366,132367,132369],{},[509,132368,23918],{"align":23918},[509,132370,132371],{"align":23918},"元素向左浮动",[463,132373,132374,132376],{},[509,132375,72660],{"align":23918},[509,132377,132378],{"align":23918},"元素向右浮动",[157,132380,132381],{},"浮动重点：",[147,132383,132384,132387,132390,132393,132396],{},[150,132385,132386],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[150,132388,132389],{},"浮动的元素会一行内显示并且元素顶部对齐",[150,132391,132392],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[150,132394,132395],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[150,132397,132398],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[157,132400,132401],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[157,132403,132404],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[20,132406,132407],{"className":126690,"code":131156,"language":126692,"meta":25,"style":25},[27,132408,132409,132415,132425,132429,132435,132445],{"__ignoreMap":25},[30,132410,132411,132413],{"class":32,"line":33},[30,132412,131163],{"class":36},[30,132414,15754],{"class":321},[30,132416,132417,132419,132421,132423],{"class":32,"line":44},[30,132418,131170],{"class":40},[30,132420,51575],{"class":321},[30,132422,23918],{"class":40},[30,132424,1480],{"class":321},[30,132426,132427],{"class":32,"line":52},[30,132428,1751],{"class":321},[30,132430,132431,132433],{"class":32,"line":60},[30,132432,131185],{"class":36},[30,132434,15754],{"class":321},[30,132436,132437,132439,132441,132443],{"class":32,"line":68},[30,132438,131170],{"class":40},[30,132440,51575],{"class":321},[30,132442,72660],{"class":40},[30,132444,1480],{"class":321},[30,132446,132447],{"class":32,"line":80},[30,132448,1751],{"class":321},[287,132450,132452],{"id":132451},"_1113-定位","11.1.3 定位",[22180,132454,132456],{"id":132455},"_11131-使用场景","11.1.3.1 使用场景",[157,132458,132459],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[157,132461,132462],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22180,132464,132466],{"id":132465},"_11132-定位组成","11.1.3.2 定位组成",[157,132468,132469],{},"定位 = 定位模式 + 边偏移",[271,132471,132472],{},[150,132473,132474,132477,132478],{},[469,132475,132476],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[469,132479,132480],{},"定位模式",[20,132482,132484],{"className":126690,"code":132483,"language":126692,"meta":25,"style":25},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[27,132485,132486,132492,132506,132523,132540],{"__ignoreMap":25},[30,132487,132488,132490],{"class":32,"line":33},[30,132489,130538],{"class":36},[30,132491,15754],{"class":321},[30,132493,132494,132497,132499,132501,132503],{"class":32,"line":44},[30,132495,132496],{"class":40},"  position",[30,132498,51575],{"class":321},[30,132500,54902],{"class":40},[30,132502,130553],{"class":321},[30,132504,132505],{"class":379},"\u002F* 定位模式 *\u002F\n",[30,132507,132508,132511,132513,132515,132517,132520],{"class":32,"line":52},[30,132509,132510],{"class":40},"  top",[30,132512,51575],{"class":321},[30,132514,766],{"class":40},[30,132516,51630],{"class":317},[30,132518,132519],{"class":321},";           ",[30,132521,132522],{"class":379},"\u002F* 边偏移：上 *\u002F\n",[30,132524,132525,132528,132530,132532,132534,132537],{"class":32,"line":60},[30,132526,132527],{"class":40},"  left",[30,132529,51575],{"class":321},[30,132531,1020],{"class":40},[30,132533,51630],{"class":317},[30,132535,132536],{"class":321},";          ",[30,132538,132539],{"class":379},"\u002F* 边偏移：左 *\u002F\n",[30,132541,132542],{"class":32,"line":68},[30,132543,1751],{"class":321},[457,132545,132546,132555],{},[460,132547,132548],{},[463,132549,132550,132552],{},[466,132551,472],{"align":23918},[466,132553,132554],{"align":23918},"语义",[504,132556,132557,132564,132571,132578],{},[463,132558,132559,132561],{},[509,132560,132143],{"align":23918},[509,132562,132563],{"align":23918},"静态定位",[463,132565,132566,132568],{},[509,132567,54902],{"align":23918},[509,132569,132570],{"align":23918},"相对定位",[463,132572,132573,132575],{},[509,132574,54969],{"align":23918},[509,132576,132577],{"align":23918},"绝对定位",[463,132579,132580,132582],{},[509,132581,86371],{"align":23918},[509,132583,132584],{"align":23918},"固定定位",[157,132586,132587],{},"（1）静态定位：",[147,132589,132590,132601],{},[150,132591,132592,132593,132596,132597,132600],{},"静态定位是元素的 ",[469,132594,132595],{},"默认定位方式"," ， ",[469,132598,132599],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[150,132602,5363],{},[20,132604,132605],{"className":126690,"code":132483,"language":126692,"meta":25,"style":25},[27,132606,132607,132613,132625,132639,132653],{"__ignoreMap":25},[30,132608,132609,132611],{"class":32,"line":33},[30,132610,130538],{"class":36},[30,132612,15754],{"class":321},[30,132614,132615,132617,132619,132621,132623],{"class":32,"line":44},[30,132616,132496],{"class":40},[30,132618,51575],{"class":321},[30,132620,54902],{"class":40},[30,132622,130553],{"class":321},[30,132624,132505],{"class":379},[30,132626,132627,132629,132631,132633,132635,132637],{"class":32,"line":52},[30,132628,132510],{"class":40},[30,132630,51575],{"class":321},[30,132632,766],{"class":40},[30,132634,51630],{"class":317},[30,132636,132519],{"class":321},[30,132638,132522],{"class":379},[30,132640,132641,132643,132645,132647,132649,132651],{"class":32,"line":60},[30,132642,132527],{"class":40},[30,132644,51575],{"class":321},[30,132646,1020],{"class":40},[30,132648,51630],{"class":317},[30,132650,132536],{"class":321},[30,132652,132539],{"class":379},[30,132654,132655],{"class":32,"line":68},[30,132656,1751],{"class":321},[147,132658,132659,132662],{},[150,132660,132661],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[150,132663,132664],{},"静态定位在布局时我们几乎不用的",[157,132666,132667],{},"（2）相对定位",[147,132669,132670,132677],{},[150,132671,132672,132673,132676],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[469,132674,132675],{},"原来的位置"," 来说的（自恋型）",[150,132678,5363],{},[20,132680,132681],{"className":126690,"code":132483,"language":126692,"meta":25,"style":25},[27,132682,132683,132689,132701,132715,132729],{"__ignoreMap":25},[30,132684,132685,132687],{"class":32,"line":33},[30,132686,130538],{"class":36},[30,132688,15754],{"class":321},[30,132690,132691,132693,132695,132697,132699],{"class":32,"line":44},[30,132692,132496],{"class":40},[30,132694,51575],{"class":321},[30,132696,54902],{"class":40},[30,132698,130553],{"class":321},[30,132700,132505],{"class":379},[30,132702,132703,132705,132707,132709,132711,132713],{"class":32,"line":52},[30,132704,132510],{"class":40},[30,132706,51575],{"class":321},[30,132708,766],{"class":40},[30,132710,51630],{"class":317},[30,132712,132519],{"class":321},[30,132714,132522],{"class":379},[30,132716,132717,132719,132721,132723,132725,132727],{"class":32,"line":60},[30,132718,132527],{"class":40},[30,132720,51575],{"class":321},[30,132722,1020],{"class":40},[30,132724,51630],{"class":317},[30,132726,132536],{"class":321},[30,132728,132539],{"class":379},[30,132730,132731],{"class":32,"line":68},[30,132732,1751],{"class":321},[147,132734,132735],{},[150,132736,132737,132738,132740,132741,132743,132744,132747,132748,132751,132752,132754,132755,132758],{},"相对定位的特点：",[53854,132739],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53854,132742],{},"  ② ",[469,132745,132746],{},"原来"," 在标准流的 ",[469,132749,132750],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53854,132753],{},"  ③因此， ",[469,132756,132757],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[157,132760,132761],{},"（3）绝对定位",[147,132763,132764,132773],{},[150,132765,132766,132768,132769,132772],{},[469,132767,132577],{}," 是元素在移动位置的时候，是相对于它 ",[469,132770,132771],{},"祖先元素"," 来说的（拼爹型）",[150,132774,5363],{},[20,132776,132777],{"className":126690,"code":132483,"language":126692,"meta":25,"style":25},[27,132778,132779,132785,132797,132811,132825],{"__ignoreMap":25},[30,132780,132781,132783],{"class":32,"line":33},[30,132782,130538],{"class":36},[30,132784,15754],{"class":321},[30,132786,132787,132789,132791,132793,132795],{"class":32,"line":44},[30,132788,132496],{"class":40},[30,132790,51575],{"class":321},[30,132792,54902],{"class":40},[30,132794,130553],{"class":321},[30,132796,132505],{"class":379},[30,132798,132799,132801,132803,132805,132807,132809],{"class":32,"line":52},[30,132800,132510],{"class":40},[30,132802,51575],{"class":321},[30,132804,766],{"class":40},[30,132806,51630],{"class":317},[30,132808,132519],{"class":321},[30,132810,132522],{"class":379},[30,132812,132813,132815,132817,132819,132821,132823],{"class":32,"line":60},[30,132814,132527],{"class":40},[30,132816,51575],{"class":321},[30,132818,1020],{"class":40},[30,132820,51630],{"class":317},[30,132822,132536],{"class":321},[30,132824,132539],{"class":379},[30,132826,132827],{"class":32,"line":68},[30,132828,1751],{"class":321},[147,132830,132831,132846,132855,132858],{},[150,132832,132833,132834,132836,132837,132839,132840,132842,132843,132845],{},"绝对定位的特点：",[53854,132835],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53854,132838],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53854,132841],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53854,132844],{},"  (4)固定定位",[150,132847,132848,132850,132851,132854],{},[469,132849,132584],{}," 是元素 ",[469,132852,132853],{},"固定于浏览器可视区的位置"," 。（认死理型）",[150,132856,132857],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[150,132859,132860],{},"语法:",[20,132862,132863],{"className":126690,"code":132483,"language":126692,"meta":25,"style":25},[27,132864,132865,132871,132883,132897,132911],{"__ignoreMap":25},[30,132866,132867,132869],{"class":32,"line":33},[30,132868,130538],{"class":36},[30,132870,15754],{"class":321},[30,132872,132873,132875,132877,132879,132881],{"class":32,"line":44},[30,132874,132496],{"class":40},[30,132876,51575],{"class":321},[30,132878,54902],{"class":40},[30,132880,130553],{"class":321},[30,132882,132505],{"class":379},[30,132884,132885,132887,132889,132891,132893,132895],{"class":32,"line":52},[30,132886,132510],{"class":40},[30,132888,51575],{"class":321},[30,132890,766],{"class":40},[30,132892,51630],{"class":317},[30,132894,132519],{"class":321},[30,132896,132522],{"class":379},[30,132898,132899,132901,132903,132905,132907,132909],{"class":32,"line":60},[30,132900,132527],{"class":40},[30,132902,51575],{"class":321},[30,132904,1020],{"class":40},[30,132906,51630],{"class":317},[30,132908,132536],{"class":321},[30,132910,132539],{"class":379},[30,132912,132913],{"class":32,"line":68},[30,132914,1751],{"class":321},[147,132916,132917,132926],{},[150,132918,132919,132920,132922,132923,132925],{},"特点:",[53854,132921],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53854,132924],{},"  ②固定定位不再占有原先的位置,完全脱标",[150,132927,132928,132929,132931,132932,132934,132935,132937],{},"固定在版心位置的方法:",[53854,132930],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53854,132933],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53854,132936],{},"  实例：",[20,132939,132940],{"className":126690,"code":132483,"language":126692,"meta":25,"style":25},[27,132941,132942,132948,132960,132974,132988],{"__ignoreMap":25},[30,132943,132944,132946],{"class":32,"line":33},[30,132945,130538],{"class":36},[30,132947,15754],{"class":321},[30,132949,132950,132952,132954,132956,132958],{"class":32,"line":44},[30,132951,132496],{"class":40},[30,132953,51575],{"class":321},[30,132955,54902],{"class":40},[30,132957,130553],{"class":321},[30,132959,132505],{"class":379},[30,132961,132962,132964,132966,132968,132970,132972],{"class":32,"line":52},[30,132963,132510],{"class":40},[30,132965,51575],{"class":321},[30,132967,766],{"class":40},[30,132969,51630],{"class":317},[30,132971,132519],{"class":321},[30,132973,132522],{"class":379},[30,132975,132976,132978,132980,132982,132984,132986],{"class":32,"line":60},[30,132977,132527],{"class":40},[30,132979,51575],{"class":321},[30,132981,1020],{"class":40},[30,132983,51630],{"class":317},[30,132985,132536],{"class":321},[30,132987,132539],{"class":379},[30,132989,132990],{"class":32,"line":68},[30,132991,1751],{"class":321},[160,132993],{"style":126546,"src":132994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[157,132996,132997],{},"(5)粘性定位",[147,132999,133000,133003],{},[150,133001,133002],{},"粘性定位可以被认为是相对定位和固定定位的混合",[150,133004,5363],{},[20,133006,133007],{"className":126690,"code":132483,"language":126692,"meta":25,"style":25},[27,133008,133009,133015,133027,133041,133055],{"__ignoreMap":25},[30,133010,133011,133013],{"class":32,"line":33},[30,133012,130538],{"class":36},[30,133014,15754],{"class":321},[30,133016,133017,133019,133021,133023,133025],{"class":32,"line":44},[30,133018,132496],{"class":40},[30,133020,51575],{"class":321},[30,133022,54902],{"class":40},[30,133024,130553],{"class":321},[30,133026,132505],{"class":379},[30,133028,133029,133031,133033,133035,133037,133039],{"class":32,"line":52},[30,133030,132510],{"class":40},[30,133032,51575],{"class":321},[30,133034,766],{"class":40},[30,133036,51630],{"class":317},[30,133038,132519],{"class":321},[30,133040,132522],{"class":379},[30,133042,133043,133045,133047,133049,133051,133053],{"class":32,"line":60},[30,133044,132527],{"class":40},[30,133046,51575],{"class":321},[30,133048,1020],{"class":40},[30,133050,51630],{"class":317},[30,133052,132536],{"class":321},[30,133054,132539],{"class":379},[30,133056,133057],{"class":32,"line":68},[30,133058,1751],{"class":321},[147,133060,133061],{},[150,133062,133063,133064,133066,133067,133069,133070,133072,133073,133076,133077,133079],{},"粘性定位的特点：",[53854,133065],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53854,133068],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53854,133071],{},"  ③必须添加 top 、left、right、bottom ",[469,133074,133075],{},"其中一个"," 才有效",[53854,133078],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[20,133081,133082],{"className":126690,"code":132483,"language":126692,"meta":25,"style":25},[27,133083,133084,133090,133102,133116,133130],{"__ignoreMap":25},[30,133085,133086,133088],{"class":32,"line":33},[30,133087,130538],{"class":36},[30,133089,15754],{"class":321},[30,133091,133092,133094,133096,133098,133100],{"class":32,"line":44},[30,133093,132496],{"class":40},[30,133095,51575],{"class":321},[30,133097,54902],{"class":40},[30,133099,130553],{"class":321},[30,133101,132505],{"class":379},[30,133103,133104,133106,133108,133110,133112,133114],{"class":32,"line":52},[30,133105,132510],{"class":40},[30,133107,51575],{"class":321},[30,133109,766],{"class":40},[30,133111,51630],{"class":317},[30,133113,132519],{"class":321},[30,133115,132522],{"class":379},[30,133117,133118,133120,133122,133124,133126,133128],{"class":32,"line":60},[30,133119,132527],{"class":40},[30,133121,51575],{"class":321},[30,133123,1020],{"class":40},[30,133125,51630],{"class":317},[30,133127,132536],{"class":321},[30,133129,132539],{"class":379},[30,133131,133132],{"class":32,"line":68},[30,133133,1751],{"class":321},[160,133135],{"style":126546,"src":133136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[157,133138,133139],{},"(6)总结",[457,133141,133142,133157],{},[460,133143,133144],{},[463,133145,133146,133148,133151,133154],{},[466,133147,132480],{"align":23918},[466,133149,133150],{"align":23918},"是否脱标",[466,133152,133153],{"align":23918},"移动位置",[466,133155,133156],{"align":23918},"是否常用",[504,133158,133159,133172,133186,133200,133213],{},[463,133160,133161,133164,133166,133169],{},[509,133162,133163],{"align":23918},"Static 静态定位",[509,133165,104816],{"align":23918},[509,133167,133168],{"align":23918},"不能使用边偏移",[509,133170,133171],{"align":23918},"很少",[463,133173,133174,133177,133180,133183],{},[509,133175,133176],{"align":23918},"Relative 相对定位",[509,133178,133179],{"align":23918},"否(占有位置)",[509,133181,133182],{"align":23918},"相对于自身位置移动",[509,133184,133185],{"align":23918},"基本单独使用",[463,133187,133188,133191,133194,133197],{},[509,133189,133190],{"align":23918},"Absolute 绝对定位",[509,133192,133193],{"align":23918},"是(不占有位置)",[509,133195,133196],{"align":23918},"带有定位的父级",[509,133198,133199],{"align":23918},"要和定位父级元素搭配使用",[463,133201,133202,133205,133207,133210],{},[509,133203,133204],{"align":23918},"Fixed 固定定位",[509,133206,133193],{"align":23918},[509,133208,133209],{"align":23918},"浏览器可视区",[509,133211,133212],{"align":23918},"单独使用,不需要父级",[463,133214,133215,133218,133220,133222],{},[509,133216,133217],{"align":23918},"Sticky 粘性定位",[509,133219,133179],{"align":23918},[509,133221,133209],{"align":23918},[509,133223,133224],{"align":23918},"当前阶段少",[271,133226,133227],{"start":44},[150,133228,133229,133232],{},[469,133230,133231],{},"边偏移"," 则决定了该元素的最终位置",[457,133234,133235,133246],{},[460,133236,133237],{},[463,133238,133239,133242,133244],{},[466,133240,133241],{"align":23918},"边偏移属性",[466,133243,27630],{"align":23918},[466,133245,27627],{"align":23918},[504,133247,133248,133259,133270,133280],{},[463,133249,133250,133253,133256],{},[509,133251,133252],{"align":23918},"top",[509,133254,133255],{"align":23918},"top: 80px;",[509,133257,133258],{"align":23918},"顶端偏移量，定义元素相对于父元素上边线的距离",[463,133260,133261,133264,133267],{},[509,133262,133263],{"align":23918},"bottom",[509,133265,133266],{"align":23918},"bottom: 80px ;",[509,133268,133269],{"align":23918},"底部偏移量，定义元素相对于其父元素下边线的距离",[463,133271,133272,133274,133277],{},[509,133273,23918],{"align":23918},[509,133275,133276],{"align":23918},"left: 80px ;",[509,133278,133279],{"align":23918},"左侧偏移量，定义元素相对于其父元素左边线的距离",[463,133281,133282,133284,133287],{},[509,133283,72660],{"align":23918},[509,133285,133286],{"align":23918},"right: 80px ;",[509,133288,133289],{"align":23918},"右侧偏移量，定义元素相对于其父元素右边线的距离",[147,133291,133292],{},[150,133293,9207,133294,133296,133297,133299,133300,133302,133303,133306,133307,133309,133310,133312],{},[53854,133295],{},"  ① ",[469,133298,133231],{}," 需要和 ",[469,133301,132480],{}," 联合使用， ",[469,133304,133305],{},"单独使用无效"," ；",[53854,133308],{},"  ②top和bottom不要同时使用",[53854,133311],{},"  ③left和right不要同时使用",[22180,133314,133316],{"id":133315},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[157,133318,133319],{},"子级是绝对定位的话，父级要用相对定位",[147,133321,133322,133325,133328,133331],{},[150,133323,133324],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[150,133326,133327],{},"父盒子需要加定位限制子盒子在父盒子内显示",[150,133329,133330],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[150,133332,133333,133334,133337],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[469,133335,133336],{},"子绝父绝"," 也会遇到",[22180,133339,133341],{"id":133340},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[147,133343,133344,133359],{},[150,133345,133346,133347,133350,133351,133354,133355,133358],{},"在使用 ",[469,133348,133349],{},"定位"," 布局时，可能会 ",[469,133352,133353],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[469,133356,133357],{},"z-index"," 来控制盒子的前后次序 (z轴)",[150,133360,5363],{},[20,133362,133363],{"className":126690,"code":132483,"language":126692,"meta":25,"style":25},[27,133364,133365,133371,133383,133397,133411],{"__ignoreMap":25},[30,133366,133367,133369],{"class":32,"line":33},[30,133368,130538],{"class":36},[30,133370,15754],{"class":321},[30,133372,133373,133375,133377,133379,133381],{"class":32,"line":44},[30,133374,132496],{"class":40},[30,133376,51575],{"class":321},[30,133378,54902],{"class":40},[30,133380,130553],{"class":321},[30,133382,132505],{"class":379},[30,133384,133385,133387,133389,133391,133393,133395],{"class":32,"line":52},[30,133386,132510],{"class":40},[30,133388,51575],{"class":321},[30,133390,766],{"class":40},[30,133392,51630],{"class":317},[30,133394,132519],{"class":321},[30,133396,132522],{"class":379},[30,133398,133399,133401,133403,133405,133407,133409],{"class":32,"line":60},[30,133400,132527],{"class":40},[30,133402,51575],{"class":321},[30,133404,1020],{"class":40},[30,133406,51630],{"class":317},[30,133408,132536],{"class":321},[30,133410,132539],{"class":379},[30,133412,133413],{"class":32,"line":68},[30,133414,1751],{"class":321},[147,133416,133417],{},[150,133418,133419,133420,133296,133422,133424,133425,127853,133428,82677,133431,133433,133434,133436,133437,133440,133441,133306,133444,133446,133447,133450,133452],{},"z-index的特性",[53854,133421],{},[469,133423,127154],{}," ： ",[469,133426,133427],{},"正整数",[469,133429,133430],{},"负整数",[469,133432,511],{}," ，默认值是 0，数值越大，盒子越靠上；",[53854,133435],{},"  ②如果 ",[469,133438,133439],{},"属性值相同"," ，则按照书写顺序， ",[469,133442,133443],{},"后来居上",[53854,133445],{},"  ③数字后面 ",[469,133448,133449],{},"不能加单位",[53854,133451],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22180,133454,133456],{"id":133455},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[157,133458,133459],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[157,133461,133462],{},"方法:",[147,133464,133465,133475],{},[150,133466,133467,133468,133471,133472],{},"left: 50%; 让 ",[469,133469,133470],{},"盒子的左侧"," 移动到 ",[469,133473,133474],{},"父级元素的水平中心位置",[150,133476,133477,133478,133481,133482],{},"margin-left: -100px; 让盒子 ",[469,133479,133480],{},"向左"," 移动 ",[469,133483,133484],{},"自身宽度的一半",[22180,133486,133488],{"id":133487},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[271,133490,133491,133494],{},[150,133492,133493],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[150,133495,133496],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[157,133498,133499],{},"也就是说绝对定位和固定定位和浮动类似",[271,133501,133502],{"start":52},[150,133503,133504],{},"display 是显示模式， 可以改变显示模式有以下方式:",[147,133506,133507,133510,133513],{},[150,133508,133509],{},"可以用inline-block 转换为行内块",[150,133511,133512],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[150,133514,133515],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[157,133517,133518],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22180,133520,133522],{"id":133521},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[271,133524,133525,133528,133531,133534],{},[150,133526,133527],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[150,133529,133530],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[150,133532,133533],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[150,133535,133536],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[20,133538,133539],{"className":126690,"code":131156,"language":126692,"meta":25,"style":25},[27,133540,133541,133547,133557,133561,133567,133577],{"__ignoreMap":25},[30,133542,133543,133545],{"class":32,"line":33},[30,133544,131163],{"class":36},[30,133546,15754],{"class":321},[30,133548,133549,133551,133553,133555],{"class":32,"line":44},[30,133550,131170],{"class":40},[30,133552,51575],{"class":321},[30,133554,23918],{"class":40},[30,133556,1480],{"class":321},[30,133558,133559],{"class":32,"line":52},[30,133560,1751],{"class":321},[30,133562,133563,133565],{"class":32,"line":60},[30,133564,131185],{"class":36},[30,133566,15754],{"class":321},[30,133568,133569,133571,133573,133575],{"class":32,"line":68},[30,133570,131170],{"class":40},[30,133572,51575],{"class":321},[30,133574,72660],{"class":40},[30,133576,1480],{"class":321},[30,133578,133579],{"class":32,"line":80},[30,133580,1751],{"class":321},[160,133582],{"style":126546,"src":133583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22180,133585,133587],{"id":133586},"_11138-轮播图","11.1.3.8 轮播图",[160,133589],{"style":126546,"src":133590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[271,133592,133593],{},[150,133594,133595],{},"制作顺序:",[147,133597,133598,133601,133604,133613],{},[150,133599,133600],{},"大盒子我们类名为： tb-promo 淘宝广告",[150,133602,133603],{},"里面先放一张图片",[150,133605,133606,133607,133609,133610,133612],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53854,133608],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53854,133611],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[150,133614,133615,133616,133618,133619,133621],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53854,133617],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53854,133620],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[271,133623,133624],{"start":44},[150,133625,133626],{},"代码模块",[20,133628,133630],{"className":126690,"code":133629,"language":126692,"meta":25,"style":25},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n.son {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\u002F* 父元素需要加 relative（子绝父相） *\u002F\n.father {\n  position: relative;\n}\n",[27,133631,133632,133637,133644,133654,133664,133674,133678,133683,133690,133700],{"__ignoreMap":25},[30,133633,133634],{"class":32,"line":33},[30,133635,133636],{"class":379},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[30,133638,133639,133642],{"class":32,"line":44},[30,133640,133641],{"class":36},".son",[30,133643,15754],{"class":321},[30,133645,133646,133648,133650,133652],{"class":32,"line":52},[30,133647,132496],{"class":40},[30,133649,51575],{"class":321},[30,133651,54969],{"class":40},[30,133653,1480],{"class":321},[30,133655,133656,133658,133660,133662],{"class":32,"line":60},[30,133657,132510],{"class":40},[30,133659,51575],{"class":321},[30,133661,511],{"class":40},[30,133663,1480],{"class":321},[30,133665,133666,133668,133670,133672],{"class":32,"line":68},[30,133667,132527],{"class":40},[30,133669,51575],{"class":321},[30,133671,511],{"class":40},[30,133673,1480],{"class":321},[30,133675,133676],{"class":32,"line":80},[30,133677,1751],{"class":321},[30,133679,133680],{"class":32,"line":88},[30,133681,133682],{"class":379},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[30,133684,133685,133688],{"class":32,"line":96},[30,133686,133687],{"class":36},".father",[30,133689,15754],{"class":321},[30,133691,133692,133694,133696,133698],{"class":32,"line":104},[30,133693,132496],{"class":40},[30,133695,51575],{"class":321},[30,133697,54902],{"class":40},[30,133699,1480],{"class":321},[30,133701,133702],{"class":32,"line":112},[30,133703,1751],{"class":321},[157,133705,133706],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[287,133708,133710],{"id":133709},"_1114-定位数值的移动","11.1.4 定位数值的移动",[160,133712],{"style":126546,"src":133713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[157,133715,133716],{},"✨ 黄金口诀：",[157,133718,133719],{},"\"TOP正下负上，LEFT正右负左\"",[157,133721,133722],{},"\"RIGHT正左负右，BOTTOM正上负下",[157,133724,133725],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[157,133727,133728],{},"✨ 简单记：",[157,133730,133731],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[234,133733,133734],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":44,"depth":44,"links":133736},[133737],{"id":132264,"depth":44,"text":132265,"children":133738},[133739,133740,133741,133742],{"id":132268,"depth":52,"text":132269},{"id":132283,"depth":52,"text":132284},{"id":132451,"depth":52,"text":132452},{"id":133709,"depth":52,"text":133710},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132256,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133749,"title":133750,"body":133751,"description":242,"extension":243,"meta":135174,"navigation":245,"path":135175,"seo":135176,"stem":135177,"__hash__":135178},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133752,"toc":135153},[133753,133756,133760,133768,133772,133777,133785,133797,133801,133806,133814,133825,133829,133834,133875,133883,133887,133890,133893,133896,133990,133993,134087,134090,134184,134187,134190,134225,134228,134231,134261,134264,134267,134270,134273,134276,134279,134282,134352,134355,134359,134363,134404,134408,134414,134417,134420,134424,134427,134430,134433,134514,134517,134520,134524,134528,134531,134534,134537,134540,134543,134549,134558,134562,134581,134585,134595,134598,134601,134604,134607,134610,134613,134616,134619,134628,134632,134641,134644,134649,134702,134707,134873,134876,134879,134884,134887,134890,134893,134896,134901,135049,135052,135055,135060,135063,135068,135102,135105,135108,135112,135115,135122,135125,135128,135131,135134,135137,135140,135143,135147,135150],[10,133754,133750],{"id":133755},"_12-显示隐藏与图形资源",[15,133757,133759],{"id":133758},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[147,133761,133762,133765],{},[150,133763,133764],{},"目的:让一个元素在页面中消失或者显示出来",[150,133766,133767],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[287,133769,133771],{"id":133770},"_1211-display-显示","12.1.1 display 显示",[271,133773,133774],{},[150,133775,133776],{},"display 设置或检索对象是否及如何显示",[147,133778,133779,133782],{},[150,133780,133781],{},"display: none;隐藏对象",[150,133783,133784],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[271,133786,133787,133794],{"start":44},[150,133788,133789,133790,133793],{},"特点： display 隐藏元素后， ",[469,133791,133792],{},"不再占"," 有原来的位置",[150,133795,133796],{},"在js中使用非常的广泛",[287,133798,133800],{"id":133799},"_1212-visibility可见性","12.1.2 visibility可见性",[271,133802,133803],{},[150,133804,133805],{},"visibility 属性用于指定一个元素应可见还是隐藏",[147,133807,133808,133811],{},[150,133809,133810],{},"visibility： visible；元素可见",[150,133812,133813],{},"visibility：hidden；元素隐藏",[271,133815,133816,133819,133822],{"start":44},[150,133817,133818],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[150,133820,133821],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[150,133823,133824],{},"隐藏后继续占有原有位置",[287,133826,133828],{"id":133827},"_1213-overflow溢出","12.1.3 overflow溢出",[147,133830,133831],{},[150,133832,133833],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[457,133835,133836,133844],{},[460,133837,133838],{},[463,133839,133840,133842],{},[466,133841,127154],{"align":23918},[466,133843,27627],{"align":23918},[504,133845,133846,133854,133861,133868],{},[463,133847,133848,133851],{},[509,133849,133850],{"align":23918},"visible",[509,133852,133853],{"align":23918},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[463,133855,133856,133858],{},[509,133857,61852],{"align":23918},[509,133859,133860],{"align":23918},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[463,133862,133863,133865],{},[509,133864,129110],{"align":23918},[509,133866,133867],{"align":23918},"不管超出内容否，总是显示滚动条",[463,133869,133870,133872],{},[509,133871,72801],{"align":23918},[509,133873,133874],{"align":23918},"超出自动显示滚动条，不超出不显示滚动条",[147,133876,133877,133880],{},[150,133878,133879],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[150,133881,133882],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[287,133884,133886],{"id":133885},"_1214-案例收获","12.1.4 案例收获",[160,133888],{"style":126546,"src":133889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[157,133891,133892],{},"问题：没做出来动态效果，使用hover没实现",[157,133894,133895],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[20,133897,133898],{"className":126690,"code":132122,"language":126692,"meta":25,"style":25},[27,133899,133900,133904,133918,133922,133936,133940,133954,133958,133972,133976],{"__ignoreMap":25},[30,133901,133902],{"class":32,"line":33},[30,133903,132129],{"class":379},[30,133905,133906,133908,133910,133912,133914,133916],{"class":32,"line":44},[30,133907,132134],{"class":36},[30,133909,79945],{"class":321},[30,133911,129050],{"class":40},[30,133913,51575],{"class":321},[30,133915,132143],{"class":40},[30,133917,129620],{"class":321},[30,133919,133920],{"class":32,"line":52},[30,133921,132150],{"class":379},[30,133923,133924,133926,133928,133930,133932,133934],{"class":32,"line":60},[30,133925,132155],{"class":36},[30,133927,79945],{"class":321},[30,133929,129050],{"class":40},[30,133931,51575],{"class":321},[30,133933,54902],{"class":40},[30,133935,129620],{"class":321},[30,133937,133938],{"class":32,"line":68},[30,133939,132170],{"class":379},[30,133941,133942,133944,133946,133948,133950,133952],{"class":32,"line":80},[30,133943,132175],{"class":36},[30,133945,79945],{"class":321},[30,133947,129050],{"class":40},[30,133949,51575],{"class":321},[30,133951,54969],{"class":40},[30,133953,129620],{"class":321},[30,133955,133956],{"class":32,"line":88},[30,133957,132190],{"class":379},[30,133959,133960,133962,133964,133966,133968,133970],{"class":32,"line":96},[30,133961,132195],{"class":36},[30,133963,79945],{"class":321},[30,133965,129050],{"class":40},[30,133967,51575],{"class":321},[30,133969,86371],{"class":40},[30,133971,129620],{"class":321},[30,133973,133974],{"class":32,"line":104},[30,133975,132210],{"class":379},[30,133977,133978,133980,133982,133984,133986,133988],{"class":32,"line":112},[30,133979,132215],{"class":36},[30,133981,79945],{"class":321},[30,133983,129050],{"class":40},[30,133985,51575],{"class":321},[30,133987,132224],{"class":40},[30,133989,129620],{"class":321},[157,133991,133992],{},"完整代码：",[20,133994,133995],{"className":126690,"code":132122,"language":126692,"meta":25,"style":25},[27,133996,133997,134001,134015,134019,134033,134037,134051,134055,134069,134073],{"__ignoreMap":25},[30,133998,133999],{"class":32,"line":33},[30,134000,132129],{"class":379},[30,134002,134003,134005,134007,134009,134011,134013],{"class":32,"line":44},[30,134004,132134],{"class":36},[30,134006,79945],{"class":321},[30,134008,129050],{"class":40},[30,134010,51575],{"class":321},[30,134012,132143],{"class":40},[30,134014,129620],{"class":321},[30,134016,134017],{"class":32,"line":52},[30,134018,132150],{"class":379},[30,134020,134021,134023,134025,134027,134029,134031],{"class":32,"line":60},[30,134022,132155],{"class":36},[30,134024,79945],{"class":321},[30,134026,129050],{"class":40},[30,134028,51575],{"class":321},[30,134030,54902],{"class":40},[30,134032,129620],{"class":321},[30,134034,134035],{"class":32,"line":68},[30,134036,132170],{"class":379},[30,134038,134039,134041,134043,134045,134047,134049],{"class":32,"line":80},[30,134040,132175],{"class":36},[30,134042,79945],{"class":321},[30,134044,129050],{"class":40},[30,134046,51575],{"class":321},[30,134048,54969],{"class":40},[30,134050,129620],{"class":321},[30,134052,134053],{"class":32,"line":88},[30,134054,132190],{"class":379},[30,134056,134057,134059,134061,134063,134065,134067],{"class":32,"line":96},[30,134058,132195],{"class":36},[30,134060,79945],{"class":321},[30,134062,129050],{"class":40},[30,134064,51575],{"class":321},[30,134066,86371],{"class":40},[30,134068,129620],{"class":321},[30,134070,134071],{"class":32,"line":104},[30,134072,132210],{"class":379},[30,134074,134075,134077,134079,134081,134083,134085],{"class":32,"line":112},[30,134076,132215],{"class":36},[30,134078,79945],{"class":321},[30,134080,129050],{"class":40},[30,134082,51575],{"class":321},[30,134084,132224],{"class":40},[30,134086,129620],{"class":321},[157,134088,134089],{},"分布思路重点详解：",[20,134091,134092],{"className":126690,"code":132122,"language":126692,"meta":25,"style":25},[27,134093,134094,134098,134112,134116,134130,134134,134148,134152,134166,134170],{"__ignoreMap":25},[30,134095,134096],{"class":32,"line":33},[30,134097,132129],{"class":379},[30,134099,134100,134102,134104,134106,134108,134110],{"class":32,"line":44},[30,134101,132134],{"class":36},[30,134103,79945],{"class":321},[30,134105,129050],{"class":40},[30,134107,51575],{"class":321},[30,134109,132143],{"class":40},[30,134111,129620],{"class":321},[30,134113,134114],{"class":32,"line":52},[30,134115,132150],{"class":379},[30,134117,134118,134120,134122,134124,134126,134128],{"class":32,"line":60},[30,134119,132155],{"class":36},[30,134121,79945],{"class":321},[30,134123,129050],{"class":40},[30,134125,51575],{"class":321},[30,134127,54902],{"class":40},[30,134129,129620],{"class":321},[30,134131,134132],{"class":32,"line":68},[30,134133,132170],{"class":379},[30,134135,134136,134138,134140,134142,134144,134146],{"class":32,"line":80},[30,134137,132175],{"class":36},[30,134139,79945],{"class":321},[30,134141,129050],{"class":40},[30,134143,51575],{"class":321},[30,134145,54969],{"class":40},[30,134147,129620],{"class":321},[30,134149,134150],{"class":32,"line":88},[30,134151,132190],{"class":379},[30,134153,134154,134156,134158,134160,134162,134164],{"class":32,"line":96},[30,134155,132195],{"class":36},[30,134157,79945],{"class":321},[30,134159,129050],{"class":40},[30,134161,51575],{"class":321},[30,134163,86371],{"class":40},[30,134165,129620],{"class":321},[30,134167,134168],{"class":32,"line":104},[30,134169,132210],{"class":379},[30,134171,134172,134174,134176,134178,134180,134182],{"class":32,"line":112},[30,134173,132215],{"class":36},[30,134175,79945],{"class":321},[30,134177,129050],{"class":40},[30,134179,51575],{"class":321},[30,134181,132224],{"class":40},[30,134183,129620],{"class":321},[160,134185],{"style":126546,"src":134186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[157,134188,134189],{},"图片太大，盒子太小，此时需要修改图片的大小",[20,134191,134193],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[27,134194,134195],{"__ignoreMap":25},[30,134196,134197,134199,134201,134203,134205,134208,134210,134212,134215,134218,134220,134223],{"class":32,"line":33},[30,134198,1230],{"class":321},[30,134200,160],{"class":51438},[30,134202,55377],{"class":36},[30,134204,367],{"class":321},[30,134206,134207],{"class":74},"\"images\u002Fpic.jpg\"",[30,134209,55385],{"class":36},[30,134211,367],{"class":321},[30,134213,134214],{"class":74},"\"描述文字\"",[30,134216,134217],{"class":36}," title",[30,134219,367],{"class":321},[30,134221,134222],{"class":74},"\"悬停提示\"",[30,134224,51445],{"class":321},[160,134226],{"style":126546,"src":134227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[157,134229,134230],{},"制造遮罩层",[20,134232,134233],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,134234,134235],{"__ignoreMap":25},[30,134236,134237,134239,134241,134243,134245,134247,134249,134251,134253,134255,134257,134259],{"class":32,"line":33},[30,134238,1230],{"class":321},[30,134240,160],{"class":51438},[30,134242,55377],{"class":36},[30,134244,367],{"class":321},[30,134246,134207],{"class":74},[30,134248,55385],{"class":36},[30,134250,367],{"class":321},[30,134252,134214],{"class":74},[30,134254,134217],{"class":36},[30,134256,367],{"class":321},[30,134258,134222],{"class":74},[30,134260,51445],{"class":321},[157,134262,134263],{},"此时是这样的为标准流",[160,134265],{"style":126546,"src":134266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[157,134268,134269],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[157,134271,134272],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[157,134274,134275],{},"让他在中间，用center(background-position)",[157,134277,134278],{},"将需要变的尽可能放到一个盒子中",[157,134280,134281],{},"放大盒子上内部盒子发生变化",[20,134283,134285],{"className":126690,"code":134284,"language":126692,"meta":25,"style":25},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[27,134286,134287,134293,134303,134307,134314,134324,134336,134348],{"__ignoreMap":25},[30,134288,134289,134291],{"class":32,"line":33},[30,134290,127757],{"class":36},[30,134292,15754],{"class":321},[30,134294,134295,134297,134299,134301],{"class":32,"line":44},[30,134296,132496],{"class":40},[30,134298,51575],{"class":321},[30,134300,54902],{"class":40},[30,134302,1480],{"class":321},[30,134304,134305],{"class":32,"line":52},[30,134306,1751],{"class":321},[30,134308,134309,134312],{"class":32,"line":60},[30,134310,134311],{"class":36},".child",[30,134313,15754],{"class":321},[30,134315,134316,134318,134320,134322],{"class":32,"line":68},[30,134317,132496],{"class":40},[30,134319,51575],{"class":321},[30,134321,54969],{"class":40},[30,134323,1480],{"class":321},[30,134325,134326,134328,134330,134332,134334],{"class":32,"line":80},[30,134327,132510],{"class":40},[30,134329,51575],{"class":321},[30,134331,976],{"class":40},[30,134333,648],{"class":317},[30,134335,1480],{"class":321},[30,134337,134338,134340,134342,134344,134346],{"class":32,"line":88},[30,134339,132527],{"class":40},[30,134341,51575],{"class":321},[30,134343,976],{"class":40},[30,134345,648],{"class":317},[30,134347,1480],{"class":321},[30,134349,134350],{"class":32,"line":96},[30,134351,1751],{"class":321},[157,134353,134354],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[15,134356,134358],{"id":134357},"_122-精灵图","12.2 精灵图",[287,134360,134362],{"id":134361},"_1221-理解","12.2.1 理解",[271,134364,134365,134383],{},[150,134366,134367,134368,132596,134371,134374,134375,134378,134379,134382],{},"目的： ",[469,134369,134370],{},"为了有效地减少服务器接收和发送请求的次数",[469,134372,134373],{},"提高"," 页面的 ",[469,134376,134377],{},"加载速度"," ，出现了 ",[469,134380,134381],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[150,134384,134385,134386,134388,134389,134391,134392,134394,134395,134397,134398,134400,134401,134403],{},"使用精灵图核心：",[53854,134387],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53854,134390],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53854,134393],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53854,134396],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53854,134399],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53854,134402],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[287,134405,134407],{"id":134406},"_1222-扒图","12.2.2 扒图",[20,134409,134412],{"className":134410,"code":134411,"language":5369},[5367],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[27,134413,134411],{"__ignoreMap":25},[160,134415],{"style":126546,"src":134416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[160,134418],{"style":126546,"src":134419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[287,134421,134423],{"id":134422},"_1223-精灵图的实现","12.2.3 精灵图的实现",[160,134425],{"style":126546,"src":134426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[157,134428,134429],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[160,134431],{"style":126546,"src":134432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[20,134434,134436],{"className":126690,"code":134435,"language":126692,"meta":25,"style":25},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n.icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat;\n  background-position: -10px -20px;\n}\n",[27,134437,134438,134443,134450,134462,134474,134493,134510],{"__ignoreMap":25},[30,134439,134440],{"class":32,"line":33},[30,134441,134442],{"class":379},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[30,134444,134445,134448],{"class":32,"line":44},[30,134446,134447],{"class":36},".icon",[30,134449,15754],{"class":321},[30,134451,134452,134454,134456,134458,134460],{"class":32,"line":52},[30,134453,70706],{"class":40},[30,134455,51575],{"class":321},[30,134457,1020],{"class":40},[30,134459,51630],{"class":317},[30,134461,1480],{"class":321},[30,134463,134464,134466,134468,134470,134472],{"class":32,"line":60},[30,134465,70926],{"class":40},[30,134467,51575],{"class":321},[30,134469,1020],{"class":40},[30,134471,51630],{"class":317},[30,134473,1480],{"class":321},[30,134475,134476,134478,134480,134482,134484,134487,134489,134491],{"class":32,"line":68},[30,134477,70749],{"class":40},[30,134479,51575],{"class":321},[30,134481,61864],{"class":40},[30,134483,322],{"class":321},[30,134485,134486],{"class":5398},"sprites.png",[30,134488,13896],{"class":321},[30,134490,61874],{"class":40},[30,134492,1480],{"class":321},[30,134494,134495,134497,134499,134501,134503,134506,134508],{"class":32,"line":80},[30,134496,128950],{"class":40},[30,134498,51575],{"class":321},[30,134500,51901],{"class":40},[30,134502,51630],{"class":317},[30,134504,134505],{"class":40}," -20",[30,134507,51630],{"class":317},[30,134509,1480],{"class":321},[30,134511,134512],{"class":32,"line":88},[30,134513,1751],{"class":321},[160,134515],{"style":126546,"src":134516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[157,134518,134519],{},"在前端中坐标轴的正方向是右和下",[15,134521,134523],{"id":134522},"_123-字体图标","12.3 字体图标",[287,134525,134527],{"id":134526},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[157,134529,134530],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[157,134532,134533],{},"精灵图是有诸多优点的，但是缺点很明显。",[157,134535,134536],{},"1.图片文件还是比较大的。",[157,134538,134539],{},"2.图片本身放大和缩小会失真。",[157,134541,134542],{},"3.一旦图片制作完毕想要更换非常复杂。",[157,134544,134545,134546,25878],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[469,134547,134548],{},"字体图标 iconfont",[157,134550,134551,134554,134555,28523],{},[469,134552,134553],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[469,134556,134557],{},"展示的是图标，本质属于字体",[287,134559,134561],{"id":134560},"_1232-字体图标的优点","12.3.2 字体图标的优点",[147,134563,134564,134569,134572,134575,134578],{},[150,134565,134566,134568],{},[469,134567,26014],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[150,134570,134571],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[150,134573,134574],{},"兼容性：几乎支持所有的浏览器，请放心使用",[150,134576,134577],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[150,134579,134580],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[287,134582,134584],{"id":134583},"_1233-字体库下载网站","12.3.3 字体库下载网站",[147,134586,134587],{},[150,134588,134589,134590],{},"icomoon字体库：",[558,134591,134594],{"href":134592,"rel":134593},"http:\u002F\u002Ficomoon.io\u002F",[24045],"http:\u002F\u002Ficomoon.io",[157,134596,134597],{},"进去之后点icomoon app",[160,134599],{"style":126546,"src":134600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[157,134602,134603],{},"可以对其编辑：",[160,134605],{"style":126546,"src":134606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[157,134608,134609],{},"生成字体：",[160,134611],{"style":126546,"src":134612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[157,134614,134615],{},"下载：",[160,134617],{"style":126546,"src":134618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[147,134620,134621],{},[150,134622,134623,134624],{},"阿里iconfont字体库： ",[558,134625,134626],{"href":134626,"rel":134627},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24045],[287,134629,134631],{"id":134630},"_1234-字体图标的引入","12.3.4 字体图标的引入",[271,134633,134634],{},[150,134635,134636,134637,134640],{},"把下载包里面的 ",[469,134638,134639],{},"fonts"," 文件夹放入页面根目录下",[160,134642],{"style":126546,"src":134643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[271,134645,134646],{"start":44},[150,134647,134648],{},"字体文件格式",[457,134650,134651,134660],{},[460,134652,134653],{},[463,134654,134655,134658],{},[466,134656,134657],{"align":23918},"格式",[466,134659,23922],{"align":23918},[504,134661,134662,134672,134682,134692],{},[463,134663,134664,134669],{},[509,134665,134666],{"align":23918},[469,134667,134668],{},".ttf",[509,134670,134671],{"align":23918},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[463,134673,134674,134679],{},[509,134675,134676],{"align":23918},[469,134677,134678],{},".woff",[509,134680,134681],{"align":23918},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[463,134683,134684,134689],{},[509,134685,134686],{"align":23918},[469,134687,134688],{},".eot",[509,134690,134691],{"align":23918},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[463,134693,134694,134699],{},[509,134695,134696],{"align":23918},[469,134697,134698],{},"svg",[509,134700,134701],{"align":23918},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[271,134703,134704],{"start":52},[150,134705,134706],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[20,134708,134710],{"className":126690,"code":134709,"language":126692,"meta":25,"style":25},"\u002F* 引入字体图标 *\u002F\n@font-face {\n  font-family: 'icomoon';\n  src: url('fonts\u002Ficomoon.eot');\n  src: url('fonts\u002Ficomoon.eot?#iefix') format('embedded-opentype'),\n       url('fonts\u002Ficomoon.woff') format('woff'),\n       url('fonts\u002Ficomoon.ttf') format('truetype'),\n       url('fonts\u002Ficomoon.svg#icomoon') format('svg');\n}\n.icon {\n  font-family: 'icomoon';\n  font-style: normal;\n}\n",[27,134711,134712,134717,134724,134736,134752,134777,134798,134818,134838,134842,134848,134858,134869],{"__ignoreMap":25},[30,134713,134714],{"class":32,"line":33},[30,134715,134716],{"class":379},"\u002F* 引入字体图标 *\u002F\n",[30,134718,134719,134722],{"class":32,"line":44},[30,134720,134721],{"class":317},"@font-face",[30,134723,15754],{"class":321},[30,134725,134726,134729,134731,134734],{"class":32,"line":52},[30,134727,134728],{"class":40},"  font-family",[30,134730,51575],{"class":321},[30,134732,134733],{"class":74},"'icomoon'",[30,134735,1480],{"class":321},[30,134737,134738,134741,134743,134745,134747,134750],{"class":32,"line":60},[30,134739,134740],{"class":40},"  src",[30,134742,51575],{"class":321},[30,134744,61864],{"class":40},[30,134746,322],{"class":321},[30,134748,134749],{"class":74},"'fonts\u002Ficomoon.eot'",[30,134751,2901],{"class":321},[30,134753,134754,134756,134758,134760,134762,134765,134767,134770,134772,134775],{"class":32,"line":68},[30,134755,134740],{"class":40},[30,134757,51575],{"class":321},[30,134759,61864],{"class":40},[30,134761,322],{"class":321},[30,134763,134764],{"class":74},"'fonts\u002Ficomoon.eot?#iefix'",[30,134766,13896],{"class":321},[30,134768,134769],{"class":40},"format",[30,134771,322],{"class":321},[30,134773,134774],{"class":74},"'embedded-opentype'",[30,134776,38185],{"class":321},[30,134778,134779,134782,134784,134787,134789,134791,134793,134796],{"class":32,"line":80},[30,134780,134781],{"class":40},"       url",[30,134783,322],{"class":321},[30,134785,134786],{"class":74},"'fonts\u002Ficomoon.woff'",[30,134788,13896],{"class":321},[30,134790,134769],{"class":40},[30,134792,322],{"class":321},[30,134794,134795],{"class":74},"'woff'",[30,134797,38185],{"class":321},[30,134799,134800,134802,134804,134807,134809,134811,134813,134816],{"class":32,"line":88},[30,134801,134781],{"class":40},[30,134803,322],{"class":321},[30,134805,134806],{"class":74},"'fonts\u002Ficomoon.ttf'",[30,134808,13896],{"class":321},[30,134810,134769],{"class":40},[30,134812,322],{"class":321},[30,134814,134815],{"class":74},"'truetype'",[30,134817,38185],{"class":321},[30,134819,134820,134822,134824,134827,134829,134831,134833,134836],{"class":32,"line":96},[30,134821,134781],{"class":40},[30,134823,322],{"class":321},[30,134825,134826],{"class":74},"'fonts\u002Ficomoon.svg#icomoon'",[30,134828,13896],{"class":321},[30,134830,134769],{"class":40},[30,134832,322],{"class":321},[30,134834,134835],{"class":74},"'svg'",[30,134837,2901],{"class":321},[30,134839,134840],{"class":32,"line":104},[30,134841,1751],{"class":321},[30,134843,134844,134846],{"class":32,"line":112},[30,134845,134447],{"class":36},[30,134847,15754],{"class":321},[30,134849,134850,134852,134854,134856],{"class":32,"line":123},[30,134851,134728],{"class":40},[30,134853,51575],{"class":321},[30,134855,134733],{"class":74},[30,134857,1480],{"class":321},[30,134859,134860,134863,134865,134867],{"class":32,"line":131},[30,134861,134862],{"class":40},"  font-style",[30,134864,51575],{"class":321},[30,134866,63979],{"class":40},[30,134868,1480],{"class":321},[30,134870,134871],{"class":32,"line":142},[30,134872,1751],{"class":321},[157,134874,134875],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[160,134877],{"style":126546,"src":134878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[271,134880,134881],{"start":60},[150,134882,134883],{},"添加字体",[160,134885],{"style":126546,"src":134886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[157,134888,134889],{},"复制：",[160,134891],{"style":126546,"src":134892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[157,134894,134895],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[271,134897,134898],{"start":68},[150,134899,134900],{},"代码展示：",[20,134902,134903],{"className":126690,"code":134709,"language":126692,"meta":25,"style":25},[27,134904,134905,134909,134915,134925,134939,134961,134979,134997,135015,135019,135025,135035,135045],{"__ignoreMap":25},[30,134906,134907],{"class":32,"line":33},[30,134908,134716],{"class":379},[30,134910,134911,134913],{"class":32,"line":44},[30,134912,134721],{"class":317},[30,134914,15754],{"class":321},[30,134916,134917,134919,134921,134923],{"class":32,"line":52},[30,134918,134728],{"class":40},[30,134920,51575],{"class":321},[30,134922,134733],{"class":74},[30,134924,1480],{"class":321},[30,134926,134927,134929,134931,134933,134935,134937],{"class":32,"line":60},[30,134928,134740],{"class":40},[30,134930,51575],{"class":321},[30,134932,61864],{"class":40},[30,134934,322],{"class":321},[30,134936,134749],{"class":74},[30,134938,2901],{"class":321},[30,134940,134941,134943,134945,134947,134949,134951,134953,134955,134957,134959],{"class":32,"line":68},[30,134942,134740],{"class":40},[30,134944,51575],{"class":321},[30,134946,61864],{"class":40},[30,134948,322],{"class":321},[30,134950,134764],{"class":74},[30,134952,13896],{"class":321},[30,134954,134769],{"class":40},[30,134956,322],{"class":321},[30,134958,134774],{"class":74},[30,134960,38185],{"class":321},[30,134962,134963,134965,134967,134969,134971,134973,134975,134977],{"class":32,"line":80},[30,134964,134781],{"class":40},[30,134966,322],{"class":321},[30,134968,134786],{"class":74},[30,134970,13896],{"class":321},[30,134972,134769],{"class":40},[30,134974,322],{"class":321},[30,134976,134795],{"class":74},[30,134978,38185],{"class":321},[30,134980,134981,134983,134985,134987,134989,134991,134993,134995],{"class":32,"line":88},[30,134982,134781],{"class":40},[30,134984,322],{"class":321},[30,134986,134806],{"class":74},[30,134988,13896],{"class":321},[30,134990,134769],{"class":40},[30,134992,322],{"class":321},[30,134994,134815],{"class":74},[30,134996,38185],{"class":321},[30,134998,134999,135001,135003,135005,135007,135009,135011,135013],{"class":32,"line":96},[30,135000,134781],{"class":40},[30,135002,322],{"class":321},[30,135004,134826],{"class":74},[30,135006,13896],{"class":321},[30,135008,134769],{"class":40},[30,135010,322],{"class":321},[30,135012,134835],{"class":74},[30,135014,2901],{"class":321},[30,135016,135017],{"class":32,"line":104},[30,135018,1751],{"class":321},[30,135020,135021,135023],{"class":32,"line":112},[30,135022,134447],{"class":36},[30,135024,15754],{"class":321},[30,135026,135027,135029,135031,135033],{"class":32,"line":123},[30,135028,134728],{"class":40},[30,135030,51575],{"class":321},[30,135032,134733],{"class":74},[30,135034,1480],{"class":321},[30,135036,135037,135039,135041,135043],{"class":32,"line":131},[30,135038,134862],{"class":40},[30,135040,51575],{"class":321},[30,135042,63979],{"class":40},[30,135044,1480],{"class":321},[30,135046,135047],{"class":32,"line":142},[30,135048,1751],{"class":321},[160,135050],{"style":126546,"src":135051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[157,135053,135054],{},"更加细节展示：",[271,135056,135057],{},[150,135058,135059],{},"html 标签内添加小图标",[160,135061],{"style":126546,"src":135062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[271,135064,135065],{"start":44},[150,135066,135067],{},"给标签定义字体",[20,135069,135070],{"className":127437,"code":130794,"language":127439,"meta":25,"style":25},[27,135071,135072,135076,135090,135094],{"__ignoreMap":25},[30,135073,135074],{"class":32,"line":33},[30,135075,130801],{"class":379},[30,135077,135078,135080,135082,135084,135086,135088],{"class":32,"line":44},[30,135079,1230],{"class":321},[30,135081,51749],{"class":51438},[30,135083,53624],{"class":36},[30,135085,367],{"class":321},[30,135087,130814],{"class":74},[30,135089,51445],{"class":321},[30,135091,135092],{"class":32,"line":52},[30,135093,130821],{"class":321},[30,135095,135096,135098,135100],{"class":32,"line":60},[30,135097,51923],{"class":321},[30,135099,51749],{"class":51438},[30,135101,51445],{"class":321},[157,135103,135104],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[160,135106],{"style":126546,"src":135107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[287,135109,135111],{"id":135110},"_1235-字体图标的追加","12.3.5 字体图标的追加",[157,135113,135114],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[157,135116,135117,135118,135121],{},"把压缩包里面的 ",[469,135119,135120],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[157,135123,135124],{},"打开网站，点下方：",[160,135126],{"style":126546,"src":135127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[160,135129],{"style":126546,"src":135130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[160,135132],{"style":126546,"src":135133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[157,135135,135136],{},"点yes重新加载",[157,135138,135139],{},"然后重复之前的操作就可以实现了",[157,135141,135142],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[287,135144,135146],{"id":135145},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[160,135148],{"style":126546,"src":135149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[234,135151,135152],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":135154},[135155,135161,135166],{"id":133758,"depth":44,"text":133759,"children":135156},[135157,135158,135159,135160],{"id":133770,"depth":52,"text":133771},{"id":133799,"depth":52,"text":133800},{"id":133827,"depth":52,"text":133828},{"id":133885,"depth":52,"text":133886},{"id":134357,"depth":44,"text":134358,"children":135162},[135163,135164,135165],{"id":134361,"depth":52,"text":134362},{"id":134406,"depth":52,"text":134407},{"id":134422,"depth":52,"text":134423},{"id":134522,"depth":44,"text":134523,"children":135167},[135168,135169,135170,135171,135172,135173],{"id":134526,"depth":52,"text":134527},{"id":134560,"depth":52,"text":134561},{"id":134583,"depth":52,"text":134584},{"id":134630,"depth":52,"text":134631},{"id":135110,"depth":52,"text":135111},{"id":135145,"depth":52,"text":135146},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133750,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135180,"title":135181,"body":135182,"description":242,"extension":243,"meta":136409,"navigation":245,"path":136410,"seo":136411,"stem":136412,"__hash__":136413},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135183,"toc":136390},[135184,135187,135191,135194,135208,135276,135306,135309,135313,135317,135419,135466,135470,135473,135476,135510,135513,135516,135519,135522,135525,135528,135531,135533,135536,135539,135542,135545,135548,135551,135554,135582,135585,135589,135592,135599,135602,135605,135631,135634,135638,135641,135644,135651,135655,135658,135660,135692,135695,135698,135710,135716,135719,135722,135725,135727,135731,135734,135737,135740,135785,135789,135791,135794,135801,135843,135846,135850,135855,135869,135873,135876,135879,135882,135885,135888,135922,135925,135928,135982,135985,135988,135991,135994,136046,136049,136052,136101,136105,136107,136110,136113,136116,136119,136122,136180,136183,136189,136192,136195,136227,136230,136234,136238,136241,136273,136277,136280,136324,136328,136331,136334,136337,136340,136343,136346,136349,136351,136354,136356,136359,136362,136365,136368,136373,136376,136378,136381,136384,136387],[10,135185,135181],{"id":135186},"_13-界面样式与布局技巧",[15,135188,135190],{"id":135189},"_131-css三角","13.1 css三角",[157,135192,135193],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[147,135195,135196,135199,135202,135205],{},[150,135197,135198],{},"用css 边框可以模拟三角效果",[150,135200,135201],{},"宽度高度为0",[150,135203,135204],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[150,135206,135207],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[20,135209,135211],{"className":126690,"code":135210,"language":126692,"meta":25,"style":25},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[27,135212,135213,135218,135225,135235,135245,135261,135272],{"__ignoreMap":25},[30,135214,135215],{"class":32,"line":33},[30,135216,135217],{"class":379},"\u002F* CSS 实现三角形 *\u002F\n",[30,135219,135220,135223],{"class":32,"line":44},[30,135221,135222],{"class":36},".triangle",[30,135224,15754],{"class":321},[30,135226,135227,135229,135231,135233],{"class":32,"line":52},[30,135228,70706],{"class":40},[30,135230,51575],{"class":321},[30,135232,511],{"class":40},[30,135234,1480],{"class":321},[30,135236,135237,135239,135241,135243],{"class":32,"line":60},[30,135238,70926],{"class":40},[30,135240,51575],{"class":321},[30,135242,511],{"class":40},[30,135244,1480],{"class":321},[30,135246,135247,135249,135251,135253,135255,135257,135259],{"class":32,"line":68},[30,135248,71034],{"class":40},[30,135250,51575],{"class":321},[30,135252,766],{"class":40},[30,135254,51630],{"class":317},[30,135256,51659],{"class":40},[30,135258,64129],{"class":40},[30,135260,1480],{"class":321},[30,135262,135263,135266,135268,135270],{"class":32,"line":80},[30,135264,135265],{"class":40},"  border-bottom-color",[30,135267,51575],{"class":321},[30,135269,62507],{"class":40},[30,135271,1480],{"class":321},[30,135273,135274],{"class":32,"line":88},[30,135275,1751],{"class":321},[20,135277,135278],{"className":126690,"code":130847,"language":126692,"meta":25,"style":25},[27,135279,135280,135286,135302],{"__ignoreMap":25},[30,135281,135282,135284],{"class":32,"line":33},[30,135283,51749],{"class":51438},[30,135285,15754],{"class":321},[30,135287,135288,135290,135292,135294,135296,135298,135300],{"class":32,"line":44},[30,135289,71034],{"class":40},[30,135291,51575],{"class":321},[30,135293,537],{"class":40},[30,135295,51630],{"class":317},[30,135297,51659],{"class":40},[30,135299,130082],{"class":40},[30,135301,1480],{"class":321},[30,135303,135304],{"class":32,"line":52},[30,135305,1751],{"class":321},[160,135307],{"style":126546,"src":135308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[15,135310,135312],{"id":135311},"_132-css用户界面样式","13.2 css用户界面样式",[287,135314,135316],{"id":135315},"_1321-鼠标样式","13.2.1 鼠标样式",[20,135318,135320],{"className":126690,"code":135319,"language":126692,"meta":25,"style":25},"\u002F* 鼠标样式 *\u002F\ndiv { cursor: pointer; }   \u002F* 手型 *\u002F\ndiv { cursor: default; }   \u002F* 默认 *\u002F\ndiv { cursor: move; }      \u002F* 移动 *\u002F\ndiv { cursor: text; }      \u002F* 文本 *\u002F\ndiv { cursor: not-allowed; } \u002F* 禁止 *\u002F\n",[27,135321,135322,135327,135346,135364,135383,135400],{"__ignoreMap":25},[30,135323,135324],{"class":32,"line":33},[30,135325,135326],{"class":379},"\u002F* 鼠标样式 *\u002F\n",[30,135328,135329,135331,135333,135336,135338,135340,135343],{"class":32,"line":44},[30,135330,51749],{"class":51438},[30,135332,79945],{"class":321},[30,135334,135335],{"class":40},"cursor",[30,135337,51575],{"class":321},[30,135339,62168],{"class":40},[30,135341,135342],{"class":321},"; }   ",[30,135344,135345],{"class":379},"\u002F* 手型 *\u002F\n",[30,135347,135348,135350,135352,135354,135356,135359,135361],{"class":32,"line":52},[30,135349,51749],{"class":51438},[30,135351,79945],{"class":321},[30,135353,135335],{"class":40},[30,135355,51575],{"class":321},[30,135357,135358],{"class":40},"default",[30,135360,135342],{"class":321},[30,135362,135363],{"class":379},"\u002F* 默认 *\u002F\n",[30,135365,135366,135368,135370,135372,135374,135377,135380],{"class":32,"line":60},[30,135367,51749],{"class":51438},[30,135369,79945],{"class":321},[30,135371,135335],{"class":40},[30,135373,51575],{"class":321},[30,135375,135376],{"class":40},"move",[30,135378,135379],{"class":321},"; }      ",[30,135381,135382],{"class":379},"\u002F* 移动 *\u002F\n",[30,135384,135385,135387,135389,135391,135393,135395,135397],{"class":32,"line":68},[30,135386,51749],{"class":51438},[30,135388,79945],{"class":321},[30,135390,135335],{"class":40},[30,135392,51575],{"class":321},[30,135394,5369],{"class":40},[30,135396,135379],{"class":321},[30,135398,135399],{"class":379},"\u002F* 文本 *\u002F\n",[30,135401,135402,135404,135406,135408,135410,135413,135416],{"class":32,"line":80},[30,135403,51749],{"class":51438},[30,135405,79945],{"class":321},[30,135407,135335],{"class":40},[30,135409,51575],{"class":321},[30,135411,135412],{"class":40},"not-allowed",[30,135414,135415],{"class":321},"; } ",[30,135417,135418],{"class":379},"\u002F* 禁止 *\u002F\n",[457,135420,135421,135429],{},[460,135422,135423],{},[463,135424,135425,135427],{},[466,135426,127154],{"align":23918},[466,135428,27627],{"align":23918},[504,135430,135431,135438,135445,135452,135459],{},[463,135432,135433,135435],{},[509,135434,135358],{"align":23918},[509,135436,135437],{"align":23918},"小白 默认",[463,135439,135440,135442],{},[509,135441,62168],{"align":23918},[509,135443,135444],{"align":23918},"小手",[463,135446,135447,135449],{},[509,135448,135376],{"align":23918},[509,135450,135451],{"align":23918},"移动",[463,135453,135454,135456],{},[509,135455,5369],{"align":23918},[509,135457,135458],{"align":23918},"文本",[463,135460,135461,135463],{},[509,135462,135412],{"align":23918},[509,135464,135465],{"align":23918},"禁止",[287,135467,135469],{"id":135468},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[157,135471,135472],{},"去除表单轮廓线",[157,135474,135475],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[20,135477,135478],{"className":126690,"code":130054,"language":126692,"meta":25,"style":25},[27,135479,135480,135484,135490,135506],{"__ignoreMap":25},[30,135481,135482],{"class":32,"line":33},[30,135483,130061],{"class":379},[30,135485,135486,135488],{"class":32,"line":44},[30,135487,51749],{"class":51438},[30,135489,15754],{"class":321},[30,135491,135492,135494,135496,135498,135500,135502,135504],{"class":32,"line":52},[30,135493,71034],{"class":40},[30,135495,51575],{"class":321},[30,135497,537],{"class":40},[30,135499,51630],{"class":317},[30,135501,51659],{"class":40},[30,135503,130082],{"class":40},[30,135505,1480],{"class":321},[30,135507,135508],{"class":32,"line":60},[30,135509,1751],{"class":321},[157,135511,135512],{},"文本域：",[160,135514],{"style":126546,"src":135515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[157,135517,135518],{},"此时会有一个空白区域",[160,135520],{"style":126546,"src":135521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[157,135523,135524],{},"写在同一行就不会出现这个问题",[160,135526],{"style":126546,"src":135527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[157,135529,135530],{},"文本域是行内块元素，一定记住！！！",[157,135532,98371],{},[160,135534],{"style":126546,"src":135535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[157,135537,135538],{},"文本域尽量放在一行",[157,135540,135541],{},"知识回顾：cols是列，rols是行",[160,135543],{"style":126546,"src":135544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[157,135546,135547],{},"它可以进行拖动，显然这是我们不愿意看到的",[160,135549],{"style":126546,"src":135550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[157,135552,135553],{},"使用resize进行解决",[20,135555,135557],{"className":126690,"code":135556,"language":126692,"meta":25,"style":25},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[27,135558,135559,135565,135578],{"__ignoreMap":25},[30,135560,135561,135563],{"class":32,"line":33},[30,135562,53959],{"class":51438},[30,135564,15754],{"class":321},[30,135566,135567,135569,135571,135573,135575],{"class":32,"line":44},[30,135568,70936],{"class":40},[30,135570,51575],{"class":321},[30,135572,54875],{"class":40},[30,135574,130553],{"class":321},[30,135576,135577],{"class":379},"\u002F* 取消表单轮廓线 *\u002F\n",[30,135579,135580],{"class":32,"line":52},[30,135581,1751],{"class":321},[157,135583,135584],{},"此时就无法通过右下方实现拖动了",[287,135586,135588],{"id":135587},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[157,135590,135591],{},"实现一个盒子中的文字和图片对齐",[157,135593,135594,135595,135598],{},"用于设置一个元素的 ",[469,135596,135597],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[157,135600,135601],{},"图片和文字默认是基线对齐",[160,135603],{"style":126546,"src":135604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[20,135606,135607],{"className":126690,"code":135556,"language":126692,"meta":25,"style":25},[27,135608,135609,135615,135627],{"__ignoreMap":25},[30,135610,135611,135613],{"class":32,"line":33},[30,135612,53959],{"class":51438},[30,135614,15754],{"class":321},[30,135616,135617,135619,135621,135623,135625],{"class":32,"line":44},[30,135618,70936],{"class":40},[30,135620,51575],{"class":321},[30,135622,54875],{"class":40},[30,135624,130553],{"class":321},[30,135626,135577],{"class":379},[30,135628,135629],{"class":32,"line":52},[30,135630,1751],{"class":321},[160,135632],{"style":126546,"src":135633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22180,135635,135637],{"id":135636},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[157,135639,135640],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[160,135642],{"style":126546,"src":135643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[157,135645,135646,135647,135650],{},"此时可以给图片、表单这些行内块元素的 ",[469,135648,135649],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22180,135652,135654],{"id":135653},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[157,135656,135657],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[157,135659,14815],{},[20,135661,135663],{"className":126690,"code":135662,"language":126692,"meta":25,"style":25},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[27,135664,135665,135670,135676,135688],{"__ignoreMap":25},[30,135666,135667],{"class":32,"line":33},[30,135668,135669],{"class":379},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[30,135671,135672,135674],{"class":32,"line":44},[30,135673,160],{"class":51438},[30,135675,15754],{"class":321},[30,135677,135678,135681,135683,135686],{"class":32,"line":52},[30,135679,135680],{"class":40},"  vertical-align",[30,135682,51575],{"class":321},[30,135684,135685],{"class":40},"middle",[30,135687,1480],{"class":321},[30,135689,135690],{"class":32,"line":60},[30,135691,1751],{"class":321},[160,135693],{"style":126546,"src":135694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[157,135696,135697],{},"主要解决方法有两种：",[271,135699,135700],{},[150,135701,135702,135705,135706,135709],{},[469,135703,135704],{},"给图片"," 添加 ",[469,135707,135708],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[157,135711,135712,135713],{},"2.把图片转换为块级元素 ",[469,135714,135715],{},"display: block",[157,135717,135718],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[157,135720,135721],{},"img {",[157,135723,135724],{},"vertical-align:middle;",[157,135726,1266],{},[287,135728,135730],{"id":135729},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[157,135732,135733],{},"效果：",[160,135735],{"style":126546,"src":135736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[157,135738,135739],{},"单行文本溢出显示省略号--必须满足三个条件：",[20,135741,135743],{"className":126690,"code":135742,"language":126692,"meta":25,"style":25},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[27,135744,135745,135750,135756,135766,135771,135781],{"__ignoreMap":25},[30,135746,135747],{"class":32,"line":33},[30,135748,135749],{"class":379},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[30,135751,135752,135754],{"class":32,"line":44},[30,135753,160],{"class":51438},[30,135755,15754],{"class":321},[30,135757,135758,135760,135762,135764],{"class":32,"line":52},[30,135759,135680],{"class":40},[30,135761,51575],{"class":321},[30,135763,135685],{"class":40},[30,135765,1480],{"class":321},[30,135767,135768],{"class":32,"line":60},[30,135769,135770],{"class":379},"  \u002F* 或 *\u002F\n",[30,135772,135773,135775,135777,135779],{"class":32,"line":68},[30,135774,128306],{"class":40},[30,135776,51575],{"class":321},[30,135778,61007],{"class":40},[30,135780,1480],{"class":321},[30,135782,135783],{"class":32,"line":80},[30,135784,1751],{"class":321},[287,135786,135788],{"id":135787},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[157,135790,135733],{},[160,135792],{"style":126546,"src":135793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[157,135795,135796,135797,135800],{},"多行文本溢出显示省略号， ",[469,135798,135799],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[20,135802,135803],{"className":126690,"code":135742,"language":126692,"meta":25,"style":25},[27,135804,135805,135809,135815,135825,135829,135839],{"__ignoreMap":25},[30,135806,135807],{"class":32,"line":33},[30,135808,135749],{"class":379},[30,135810,135811,135813],{"class":32,"line":44},[30,135812,160],{"class":51438},[30,135814,15754],{"class":321},[30,135816,135817,135819,135821,135823],{"class":32,"line":52},[30,135818,135680],{"class":40},[30,135820,51575],{"class":321},[30,135822,135685],{"class":40},[30,135824,1480],{"class":321},[30,135826,135827],{"class":32,"line":60},[30,135828,135770],{"class":379},[30,135830,135831,135833,135835,135837],{"class":32,"line":68},[30,135832,128306],{"class":40},[30,135834,51575],{"class":321},[30,135836,61007],{"class":40},[30,135838,1480],{"class":321},[30,135840,135841],{"class":32,"line":80},[30,135842,1751],{"class":321},[157,135844,135845],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[15,135847,135849],{"id":135848},"_133-常见布局技巧","13.3 常见布局技巧",[157,135851,135852],{},[469,135853,135854],{},"巧妙利用一个技术更快更好的布局：",[271,135856,135857,135860,135863,135866],{},[150,135858,135859],{},"margin负值的运用",[150,135861,135862],{},"文字围绕浮动元素",[150,135864,135865],{},"行内块的巧妙运用",[150,135867,135868],{},"CSS三角强化",[287,135870,135872],{"id":135871},"_1331-margin负值的运用","13.3.1 margin负值的运用",[157,135874,135875],{},"应用场景：",[160,135877],{"style":126546,"src":135878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[160,135880],{"style":126546,"src":135881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[157,135883,135884],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[157,135886,135887],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[20,135889,135890],{"className":126690,"code":130054,"language":126692,"meta":25,"style":25},[27,135891,135892,135896,135902,135918],{"__ignoreMap":25},[30,135893,135894],{"class":32,"line":33},[30,135895,130061],{"class":379},[30,135897,135898,135900],{"class":32,"line":44},[30,135899,51749],{"class":51438},[30,135901,15754],{"class":321},[30,135903,135904,135906,135908,135910,135912,135914,135916],{"class":32,"line":52},[30,135905,71034],{"class":40},[30,135907,51575],{"class":321},[30,135909,537],{"class":40},[30,135911,51630],{"class":317},[30,135913,51659],{"class":40},[30,135915,130082],{"class":40},[30,135917,1480],{"class":321},[30,135919,135920],{"class":32,"line":60},[30,135921,1751],{"class":321},[160,135923],{"style":126546,"src":135924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[157,135926,135927],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[20,135929,135931],{"className":126690,"code":135930,"language":126692,"meta":25,"style":25},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[27,135932,135933,135938,135944,135954,135966,135978],{"__ignoreMap":25},[30,135934,135935],{"class":32,"line":33},[30,135936,135937],{"class":379},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[30,135939,135940,135942],{"class":32,"line":44},[30,135941,130538],{"class":36},[30,135943,15754],{"class":321},[30,135945,135946,135948,135950,135952],{"class":32,"line":52},[30,135947,132496],{"class":40},[30,135949,51575],{"class":321},[30,135951,54902],{"class":40},[30,135953,1480],{"class":321},[30,135955,135956,135958,135960,135962,135964],{"class":32,"line":60},[30,135957,132510],{"class":40},[30,135959,51575],{"class":321},[30,135961,766],{"class":40},[30,135963,51630],{"class":317},[30,135965,1480],{"class":321},[30,135967,135968,135970,135972,135974,135976],{"class":32,"line":68},[30,135969,132527],{"class":40},[30,135971,51575],{"class":321},[30,135973,1020],{"class":40},[30,135975,51630],{"class":317},[30,135977,1480],{"class":321},[30,135979,135980],{"class":32,"line":80},[30,135981,1751],{"class":321},[157,135983,135984],{},"加上上述代码会发现：",[160,135986],{"style":126546,"src":135987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[157,135989,135990],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[157,135992,135993],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[20,135995,135996],{"className":126690,"code":135930,"language":126692,"meta":25,"style":25},[27,135997,135998,136002,136008,136018,136030,136042],{"__ignoreMap":25},[30,135999,136000],{"class":32,"line":33},[30,136001,135937],{"class":379},[30,136003,136004,136006],{"class":32,"line":44},[30,136005,130538],{"class":36},[30,136007,15754],{"class":321},[30,136009,136010,136012,136014,136016],{"class":32,"line":52},[30,136011,132496],{"class":40},[30,136013,51575],{"class":321},[30,136015,54902],{"class":40},[30,136017,1480],{"class":321},[30,136019,136020,136022,136024,136026,136028],{"class":32,"line":60},[30,136021,132510],{"class":40},[30,136023,51575],{"class":321},[30,136025,766],{"class":40},[30,136027,51630],{"class":317},[30,136029,1480],{"class":321},[30,136031,136032,136034,136036,136038,136040],{"class":32,"line":68},[30,136033,132527],{"class":40},[30,136035,51575],{"class":321},[30,136037,1020],{"class":40},[30,136039,51630],{"class":317},[30,136041,1480],{"class":321},[30,136043,136044],{"class":32,"line":80},[30,136045,1751],{"class":321},[157,136047,136048],{},"解决方式2：",[157,136050,136051],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[20,136053,136055],{"className":126690,"code":136054,"language":126692,"meta":25,"style":25},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[27,136056,136057,136063,136073,136085,136097],{"__ignoreMap":25},[30,136058,136059,136061],{"class":32,"line":33},[30,136060,51749],{"class":51438},[30,136062,15754],{"class":321},[30,136064,136065,136067,136069,136071],{"class":32,"line":44},[30,136066,132496],{"class":40},[30,136068,51575],{"class":321},[30,136070,54902],{"class":40},[30,136072,1480],{"class":321},[30,136074,136075,136077,136079,136081,136083],{"class":32,"line":52},[30,136076,132510],{"class":40},[30,136078,51575],{"class":321},[30,136080,766],{"class":40},[30,136082,51630],{"class":317},[30,136084,1480],{"class":321},[30,136086,136087,136089,136091,136093,136095],{"class":32,"line":60},[30,136088,132527],{"class":40},[30,136090,51575],{"class":321},[30,136092,1020],{"class":40},[30,136094,51630],{"class":317},[30,136096,1480],{"class":321},[30,136098,136099],{"class":32,"line":68},[30,136100,1751],{"class":321},[287,136102,136104],{"id":136103},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[157,136106,135875],{},[160,136108],{"style":126546,"src":136109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[157,136111,136112],{},"实现结构图：",[160,136114],{"style":126546,"src":136115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[157,136117,136118],{},"巧妙运用浮动元素不会压住文字的特性",[157,136120,136121],{},"代码显示：",[20,136123,136125],{"className":126690,"code":136124,"language":126692,"meta":25,"style":25},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[27,136126,136127,136133,136143,136147,136152,136156,136162,136176],{"__ignoreMap":25},[30,136128,136129,136131],{"class":32,"line":33},[30,136130,130538],{"class":36},[30,136132,15754],{"class":321},[30,136134,136135,136137,136139,136141],{"class":32,"line":44},[30,136136,131170],{"class":40},[30,136138,51575],{"class":321},[30,136140,23918],{"class":40},[30,136142,1480],{"class":321},[30,136144,136145],{"class":32,"line":52},[30,136146,1751],{"class":321},[30,136148,136149],{"class":32,"line":60},[30,136150,136151],{"class":321},"```Css\n",[30,136153,136154],{"class":32,"line":68},[30,136155,130533],{"class":379},[30,136157,136158,136160],{"class":32,"line":80},[30,136159,130538],{"class":36},[30,136161,15754],{"class":321},[30,136163,136164,136166,136168,136170,136172,136174],{"class":32,"line":88},[30,136165,70608],{"class":40},[30,136167,51575],{"class":321},[30,136169,511],{"class":40},[30,136171,51694],{"class":40},[30,136173,130553],{"class":321},[30,136175,130556],{"class":379},[30,136177,136178],{"class":32,"line":96},[30,136179,1751],{"class":321},[157,136181,136182],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[20,136184,136187],{"className":136185,"code":136186,"language":5369},[5367],"\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",[27,136188,136186],{"__ignoreMap":25},[160,136190],{"style":126546,"src":136191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[157,136193,136194],{},"最终展示结果：",[20,136196,136197],{"className":126690,"code":130526,"language":126692,"meta":25,"style":25},[27,136198,136199,136203,136209,136223],{"__ignoreMap":25},[30,136200,136201],{"class":32,"line":33},[30,136202,130533],{"class":379},[30,136204,136205,136207],{"class":32,"line":44},[30,136206,130538],{"class":36},[30,136208,15754],{"class":321},[30,136210,136211,136213,136215,136217,136219,136221],{"class":32,"line":52},[30,136212,70608],{"class":40},[30,136214,51575],{"class":321},[30,136216,511],{"class":40},[30,136218,51694],{"class":40},[30,136220,130553],{"class":321},[30,136222,130556],{"class":379},[30,136224,136225],{"class":32,"line":60},[30,136226,1751],{"class":321},[160,136228],{"style":126546,"src":136229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[15,136231,136233],{"id":136232},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[287,136235,136237],{"id":136236},"_1341-原理","13.4.1 原理",[160,136239],{"style":126546,"src":136240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[20,136242,136243],{"className":126690,"code":130526,"language":126692,"meta":25,"style":25},[27,136244,136245,136249,136255,136269],{"__ignoreMap":25},[30,136246,136247],{"class":32,"line":33},[30,136248,130533],{"class":379},[30,136250,136251,136253],{"class":32,"line":44},[30,136252,130538],{"class":36},[30,136254,15754],{"class":321},[30,136256,136257,136259,136261,136263,136265,136267],{"class":32,"line":52},[30,136258,70608],{"class":40},[30,136260,51575],{"class":321},[30,136262,511],{"class":40},[30,136264,51694],{"class":40},[30,136266,130553],{"class":321},[30,136268,130556],{"class":379},[30,136270,136271],{"class":32,"line":60},[30,136272,1751],{"class":321},[287,136274,136276],{"id":136275},"_1342-实例","13.4.2 实例",[160,136278],{"style":126546,"src":136279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[20,136281,136282],{"className":126690,"code":131156,"language":126692,"meta":25,"style":25},[27,136283,136284,136290,136300,136304,136310,136320],{"__ignoreMap":25},[30,136285,136286,136288],{"class":32,"line":33},[30,136287,131163],{"class":36},[30,136289,15754],{"class":321},[30,136291,136292,136294,136296,136298],{"class":32,"line":44},[30,136293,131170],{"class":40},[30,136295,51575],{"class":321},[30,136297,23918],{"class":40},[30,136299,1480],{"class":321},[30,136301,136302],{"class":32,"line":52},[30,136303,1751],{"class":321},[30,136305,136306,136308],{"class":32,"line":60},[30,136307,131185],{"class":36},[30,136309,15754],{"class":321},[30,136311,136312,136314,136316,136318],{"class":32,"line":68},[30,136313,131170],{"class":40},[30,136315,51575],{"class":321},[30,136317,72660],{"class":40},[30,136319,1480],{"class":321},[30,136321,136322],{"class":32,"line":80},[30,136323,1751],{"class":321},[15,136325,136327],{"id":136326},"_135-css的初始化","13.5 css的初始化",[157,136329,136330],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[157,136332,136333],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[157,136335,136336],{},"每个网页都必须首先进行 CSS初始化。",[157,136338,136339],{},"这里我们以 京东CSS初始化代码为例。",[157,136341,136342],{},"在网页右键查看网页源代码",[157,136344,136345],{},"找到css的link引入语句",[157,136347,136348],{},"然后ctrl+f 输入body",[157,136350,77364],{},[160,136352],{"style":126546,"src":136353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[157,136355,77387],{},[160,136357],{"style":126546,"src":136358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[157,136360,136361],{},"③打开了网页上传压缩的代码",[160,136363],{"style":126546,"src":136364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[157,136366,136367],{},"④从body前可以查看这个网页的初始化代码",[157,136369,136370],{},[469,136371,136372],{},"Unicode编码字体：",[157,136374,136375],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[157,136377,83345],{},[157,136379,136380],{},"黑体 \\9ED1\\4F53",[157,136382,136383],{},"宋体 \\5B8B\\4F53",[157,136385,136386],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[234,136388,136389],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":25,"searchDepth":44,"depth":44,"links":136391},[136392,136393,136400,136404,136408],{"id":135189,"depth":44,"text":135190},{"id":135311,"depth":44,"text":135312,"children":136394},[136395,136396,136397,136398,136399],{"id":135315,"depth":52,"text":135316},{"id":135468,"depth":52,"text":135469},{"id":135587,"depth":52,"text":135588},{"id":135729,"depth":52,"text":135730},{"id":135787,"depth":52,"text":135788},{"id":135848,"depth":44,"text":135849,"children":136401},[136402,136403],{"id":135871,"depth":52,"text":135872},{"id":136103,"depth":52,"text":136104},{"id":136232,"depth":44,"text":136233,"children":136405},[136406,136407],{"id":136236,"depth":52,"text":136237},{"id":136275,"depth":52,"text":136276},{"id":136326,"depth":44,"text":136327},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135181,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136415,"title":136416,"body":136417,"description":242,"extension":243,"meta":138103,"navigation":245,"path":138104,"seo":138105,"stem":138106,"__hash__":138107},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136418,"toc":138092},[136419,136422,136426,136430,136433,136440,136443,136446,136484,136487,136489,136503,136507,136516,136520,136525,136528,136531,136534,136569,136574,136577,136607,136610,136615,136618,136621,136651,136654,136708,136711,136715,136720,136732,136735,136739,136769,136772,136777,136780,136810,136813,136817,136834,136838,136842,136845,136878,136881,136885,136888,136891,136894,136897,136900,137011,137014,137017,137020,137122,137125,137129,137133,137137,137140,137180,137183,137185,137201,137205,137208,137213,137294,137297,137300,137426,137431,137434,137442,137445,137450,137535,137538,137542,137545,137548,137552,137572,137577,137661,137664,137669,137672,137675,137753,137756,137759,137762,137765,137768,137773,137776,137779,137851,137854,137859,137862,137959,137962,137968,137971,137974,137977,137980,137983,137986,137989,137992,137996,138001,138004,138037,138042,138045,138086,138089],[10,136420,136416],{"id":136421},"_14-html5与css3新特性",[15,136423,136425],{"id":136424},"_141-html5的新特性","14.1 HTML5的新特性",[287,136427,136429],{"id":136428},"_1411-基本标签","14.1.1 基本标签",[157,136431,136432],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[157,136434,136435,136436,136439],{},"这些新特性都有兼容性问题，基本是 ",[469,136437,136438],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[157,136441,136442],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[157,136444,136445],{},"现在使用的是新特性：",[147,136447,136448,136454,136460,136466,136472,136478],{},[150,136449,136450,136453],{},[27,136451,136452],{},"\u003Cheader>"," 头部标签",[150,136455,136456,136459],{},[27,136457,136458],{},"\u003Cnav>"," 导航标签",[150,136461,136462,136465],{},[27,136463,136464],{},"\u003Carticle>"," 内容标签",[150,136467,136468,136471],{},[27,136469,136470],{},"\u003Csection>"," 定义文档某个区域",[150,136473,136474,136477],{},[27,136475,136476],{},"\u003Caside>"," 侧边栏标签",[150,136479,136480,136483],{},[27,136481,136482],{},"\u003Cfooter>"," 尾部标签",[160,136485],{"style":126546,"src":136486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[157,136488,351],{},[147,136490,136491,136494,136497,136500],{},[150,136492,136493],{},"这种语义化标准主要是针对搜索引擎的",[150,136495,136496],{},"这些标签页面中可以经常使用",[150,136498,136499],{},"在IE9中，需要把这些元素转换为块级元素",[150,136501,136502],{},"移动端更喜欢使用这些标签",[287,136504,136506],{"id":136505},"_1412-多媒体标签","14.1.2 多媒体标签",[157,136508,136509,136510,136512,136513,136515],{},"音频 ",[469,136511,28312],{}," 和视频 ",[469,136514,28321],{}," 两个标签",[22180,136517,136519],{"id":136518},"_14121-视频标签-video","14.1.2.1 视频标签- video",[271,136521,136522],{},[150,136523,136524],{},"支持格式：",[160,136526],{"style":126546,"src":136527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[157,136529,136530],{},"尽量使用MP4，兼容性好",[157,136532,136533],{},"用MP4就可以",[20,136535,136537],{"className":127437,"code":136536,"language":127439,"meta":25,"style":25},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[27,136538,136539],{"__ignoreMap":25},[30,136540,136541,136543,136545,136547,136549,136552,136554,136557,136560,136563,136565,136567],{"class":32,"line":33},[30,136542,1230],{"class":321},[30,136544,28321],{"class":51438},[30,136546,55377],{"class":36},[30,136548,367],{"class":321},[30,136550,136551],{"class":74},"\"movie.mp4\"",[30,136553,92561],{"class":36},[30,136555,136556],{"class":36}," autoplay",[30,136558,136559],{"class":36}," muted",[30,136561,136562],{"class":36}," loop",[30,136564,55452],{"class":321},[30,136566,28321],{"class":51438},[30,136568,51445],{"class":321},[271,136570,136571],{"start":44},[150,136572,136573],{},"兼容写法",[157,136575,136576],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[20,136578,136579],{"className":127437,"code":136536,"language":127439,"meta":25,"style":25},[27,136580,136581],{"__ignoreMap":25},[30,136582,136583,136585,136587,136589,136591,136593,136595,136597,136599,136601,136603,136605],{"class":32,"line":33},[30,136584,1230],{"class":321},[30,136586,28321],{"class":51438},[30,136588,55377],{"class":36},[30,136590,367],{"class":321},[30,136592,136551],{"class":74},[30,136594,92561],{"class":36},[30,136596,136556],{"class":36},[30,136598,136559],{"class":36},[30,136600,136562],{"class":36},[30,136602,55452],{"class":321},[30,136604,28321],{"class":51438},[30,136606,51445],{"class":321},[157,136608,136609],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[271,136611,136612],{"start":52},[150,136613,136614],{},"video常用属性",[160,136616],{"style":126546,"src":136617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[157,136619,136620],{},"poster属性后面是跟的等待加载图片的地址",[20,136622,136623],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,136624,136625],{"__ignoreMap":25},[30,136626,136627,136629,136631,136633,136635,136637,136639,136641,136643,136645,136647,136649],{"class":32,"line":33},[30,136628,1230],{"class":321},[30,136630,160],{"class":51438},[30,136632,55377],{"class":36},[30,136634,367],{"class":321},[30,136636,134207],{"class":74},[30,136638,55385],{"class":36},[30,136640,367],{"class":321},[30,136642,134214],{"class":74},[30,136644,134217],{"class":36},[30,136646,367],{"class":321},[30,136648,134222],{"class":74},[30,136650,51445],{"class":321},[157,136652,136653],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[20,136655,136657],{"className":126690,"code":136656,"language":126692,"meta":25,"style":25},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[27,136658,136659,136664,136670,136694,136699,136704],{"__ignoreMap":25},[30,136660,136661],{"class":32,"line":33},[30,136662,136663],{"class":379},"\u002F* 2D 位移 *\u002F\n",[30,136665,136666,136668],{"class":32,"line":44},[30,136667,51749],{"class":51438},[30,136669,15754],{"class":321},[30,136671,136672,136675,136677,136680,136682,136684,136686,136688,136690,136692],{"class":32,"line":52},[30,136673,136674],{"class":40},"  transform",[30,136676,51575],{"class":321},[30,136678,136679],{"class":40},"translate",[30,136681,322],{"class":321},[30,136683,631],{"class":40},[30,136685,51630],{"class":317},[30,136687,12617],{"class":321},[30,136689,976],{"class":40},[30,136691,51630],{"class":317},[30,136693,2901],{"class":321},[30,136695,136696],{"class":32,"line":60},[30,136697,136698],{"class":379},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[30,136700,136701],{"class":32,"line":68},[30,136702,136703],{"class":379},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[30,136705,136706],{"class":32,"line":80},[30,136707,1751],{"class":321},[157,136709,136710],{},"muted:自动静音属性",[22180,136712,136714],{"id":136713},"_14122-音频标签audio","14.1.2.2 音频标签audio",[271,136716,136717],{},[150,136718,136719],{},"基本使用",[157,136721,136722,136723,136728,136729],{},"当前 ",[469,136724,136725],{},[27,136726,136727],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[469,136730,136731],{},"mp3格式",[160,136733],{"style":126546,"src":136734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[271,136736,136737],{"start":44},[150,136738,136573],{},[20,136740,136741],{"className":127437,"code":136536,"language":127439,"meta":25,"style":25},[27,136742,136743],{"__ignoreMap":25},[30,136744,136745,136747,136749,136751,136753,136755,136757,136759,136761,136763,136765,136767],{"class":32,"line":33},[30,136746,1230],{"class":321},[30,136748,28321],{"class":51438},[30,136750,55377],{"class":36},[30,136752,367],{"class":321},[30,136754,136551],{"class":74},[30,136756,92561],{"class":36},[30,136758,136556],{"class":36},[30,136760,136559],{"class":36},[30,136762,136562],{"class":36},[30,136764,55452],{"class":321},[30,136766,28321],{"class":51438},[30,136768,51445],{"class":321},[157,136770,136771],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[271,136773,136774],{"start":52},[150,136775,136776],{},"常用属性",[160,136778],{"style":126546,"src":136779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[20,136781,136782],{"className":127437,"code":136536,"language":127439,"meta":25,"style":25},[27,136783,136784],{"__ignoreMap":25},[30,136785,136786,136788,136790,136792,136794,136796,136798,136800,136802,136804,136806,136808],{"class":32,"line":33},[30,136787,1230],{"class":321},[30,136789,28321],{"class":51438},[30,136791,55377],{"class":36},[30,136793,367],{"class":321},[30,136795,136551],{"class":74},[30,136797,92561],{"class":36},[30,136799,136556],{"class":36},[30,136801,136559],{"class":36},[30,136803,136562],{"class":36},[30,136805,55452],{"class":321},[30,136807,28321],{"class":51438},[30,136809,51445],{"class":321},[157,136811,136812],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22180,136814,136816],{"id":136815},"_14123-总结","14.1.2.3 总结",[147,136818,136819,136822,136825,136828,136831],{},[150,136820,136821],{},"音频标签和视频标签使用方式基本一致",[150,136823,136824],{},"浏览器支持情况不同",[150,136826,136827],{},"谷歌浏览器把音频和视频自动播放禁止了",[150,136829,136830],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[150,136832,136833],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[287,136835,136837],{"id":136836},"_1413-表单元素","14.1.3 表单元素",[22180,136839,136841],{"id":136840},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[160,136843],{"style":126546,"src":136844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[20,136846,136848],{"className":127437,"code":136847,"language":127439,"meta":25,"style":25},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[27,136849,136850],{"__ignoreMap":25},[30,136851,136852,136854,136856,136858,136860,136862,136864,136866,136869,136871,136873,136876],{"class":32,"line":33},[30,136853,1230],{"class":321},[30,136855,53959],{"class":51438},[30,136857,53962],{"class":36},[30,136859,367],{"class":321},[30,136861,62837],{"class":74},[30,136863,15102],{"class":36},[30,136865,367],{"class":321},[30,136867,136868],{"class":74},"\"username\"",[30,136870,61158],{"class":36},[30,136872,367],{"class":321},[30,136874,136875],{"class":74},"\"请输入用户名\"",[30,136877,51445],{"class":321},[160,136879],{"style":126546,"src":136880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22180,136882,136884],{"id":136883},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[160,136886],{"style":126546,"src":136887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[157,136889,136890],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[157,136892,136893],{},"快捷操作：",[160,136895],{"style":126546,"src":136896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[157,136898,136899],{},"例子1：",[20,136901,136903],{"className":127437,"code":136902,"language":127439,"meta":25,"style":25},"\u003Cform action=\"\u002Fsubmit\" method=\"post\">\n  \u003Cinput type=\"text\" name=\"username\" placeholder=\"用户名\">\n  \u003Cinput type=\"password\" name=\"pwd\" placeholder=\"密码\">\n  \u003Cbutton type=\"submit\">提交\u003C\u002Fbutton>\n\u003C\u002Fform>\n",[27,136904,136905,136928,136955,136984,137003],{"__ignoreMap":25},[30,136906,136907,136909,136911,136913,136915,136918,136921,136923,136926],{"class":32,"line":33},[30,136908,1230],{"class":321},[30,136910,66763],{"class":51438},[30,136912,66766],{"class":36},[30,136914,367],{"class":321},[30,136916,136917],{"class":74},"\"\u002Fsubmit\"",[30,136919,136920],{"class":36}," method",[30,136922,367],{"class":321},[30,136924,136925],{"class":74},"\"post\"",[30,136927,51445],{"class":321},[30,136929,136930,136932,136934,136936,136938,136940,136942,136944,136946,136948,136950,136953],{"class":32,"line":44},[30,136931,52282],{"class":321},[30,136933,53959],{"class":51438},[30,136935,53962],{"class":36},[30,136937,367],{"class":321},[30,136939,62837],{"class":74},[30,136941,15102],{"class":36},[30,136943,367],{"class":321},[30,136945,136868],{"class":74},[30,136947,61158],{"class":36},[30,136949,367],{"class":321},[30,136951,136952],{"class":74},"\"用户名\"",[30,136954,51445],{"class":321},[30,136956,136957,136959,136961,136963,136965,136968,136970,136972,136975,136977,136979,136982],{"class":32,"line":52},[30,136958,52282],{"class":321},[30,136960,53959],{"class":51438},[30,136962,53962],{"class":36},[30,136964,367],{"class":321},[30,136966,136967],{"class":74},"\"password\"",[30,136969,15102],{"class":36},[30,136971,367],{"class":321},[30,136973,136974],{"class":74},"\"pwd\"",[30,136976,61158],{"class":36},[30,136978,367],{"class":321},[30,136980,136981],{"class":74},"\"密码\"",[30,136983,51445],{"class":321},[30,136985,136986,136988,136990,136992,136994,136996,136999,137001],{"class":32,"line":60},[30,136987,52282],{"class":321},[30,136989,54025],{"class":51438},[30,136991,53962],{"class":36},[30,136993,367],{"class":321},[30,136995,66786],{"class":74},[30,136997,136998],{"class":321},">提交\u003C\u002F",[30,137000,54025],{"class":51438},[30,137002,51445],{"class":321},[30,137004,137005,137007,137009],{"class":32,"line":68},[30,137006,51923],{"class":321},[30,137008,66763],{"class":51438},[30,137010,51445],{"class":321},[160,137012],{"style":126546,"src":137013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[157,137015,137016],{},"value是表单域的内容",[157,137018,137019],{},"例子2：",[20,137021,137022],{"className":127437,"code":136902,"language":127439,"meta":25,"style":25},[27,137023,137024,137044,137070,137096,137114],{"__ignoreMap":25},[30,137025,137026,137028,137030,137032,137034,137036,137038,137040,137042],{"class":32,"line":33},[30,137027,1230],{"class":321},[30,137029,66763],{"class":51438},[30,137031,66766],{"class":36},[30,137033,367],{"class":321},[30,137035,136917],{"class":74},[30,137037,136920],{"class":36},[30,137039,367],{"class":321},[30,137041,136925],{"class":74},[30,137043,51445],{"class":321},[30,137045,137046,137048,137050,137052,137054,137056,137058,137060,137062,137064,137066,137068],{"class":32,"line":44},[30,137047,52282],{"class":321},[30,137049,53959],{"class":51438},[30,137051,53962],{"class":36},[30,137053,367],{"class":321},[30,137055,62837],{"class":74},[30,137057,15102],{"class":36},[30,137059,367],{"class":321},[30,137061,136868],{"class":74},[30,137063,61158],{"class":36},[30,137065,367],{"class":321},[30,137067,136952],{"class":74},[30,137069,51445],{"class":321},[30,137071,137072,137074,137076,137078,137080,137082,137084,137086,137088,137090,137092,137094],{"class":32,"line":52},[30,137073,52282],{"class":321},[30,137075,53959],{"class":51438},[30,137077,53962],{"class":36},[30,137079,367],{"class":321},[30,137081,136967],{"class":74},[30,137083,15102],{"class":36},[30,137085,367],{"class":321},[30,137087,136974],{"class":74},[30,137089,61158],{"class":36},[30,137091,367],{"class":321},[30,137093,136981],{"class":74},[30,137095,51445],{"class":321},[30,137097,137098,137100,137102,137104,137106,137108,137110,137112],{"class":32,"line":60},[30,137099,52282],{"class":321},[30,137101,54025],{"class":51438},[30,137103,53962],{"class":36},[30,137105,367],{"class":321},[30,137107,66786],{"class":74},[30,137109,136998],{"class":321},[30,137111,54025],{"class":51438},[30,137113,51445],{"class":321},[30,137115,137116,137118,137120],{"class":32,"line":68},[30,137117,51923],{"class":321},[30,137119,66763],{"class":51438},[30,137121,51445],{"class":321},[160,137123],{"style":126546,"src":137124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[15,137126,137128],{"id":137127},"_142-css新特性","14.2 CSS新特性",[287,137130,137132],{"id":137131},"_1421-新增选择器","14.2.1 新增选择器",[22180,137134,137136],{"id":137135},"_14211-属性选择器","14.2.1.1 属性选择器",[160,137138],{"style":126546,"src":137139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[20,137141,137143],{"className":126690,"code":137142,"language":126692,"meta":25,"style":25},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[27,137144,137145,137160,137176],{"__ignoreMap":25},[30,137146,137147,137149,137151,137153,137155,137157],{"class":32,"line":33},[30,137148,53959],{"class":51438},[30,137150,1210],{"class":321},[30,137152,103245],{"class":36},[30,137154,367],{"class":317},[30,137156,62837],{"class":74},[30,137158,137159],{"class":321},"] {\n",[30,137161,137162,137164,137166,137168,137170,137172,137174],{"class":32,"line":44},[30,137163,71034],{"class":40},[30,137165,51575],{"class":321},[30,137167,537],{"class":40},[30,137169,51630],{"class":317},[30,137171,51659],{"class":40},[30,137173,130270],{"class":40},[30,137175,1480],{"class":321},[30,137177,137178],{"class":32,"line":52},[30,137179,1751],{"class":321},[160,137181],{"style":126546,"src":137182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[157,137184,351],{},[147,137186,137187,137190,137193,137196],{},[150,137188,137189],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[150,137191,137192],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[150,137194,137195],{},"属性选择器也可以选择出来自定义的属性",[150,137197,137198,137200],{},[469,137199,9207],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22180,137202,137204],{"id":137203},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[160,137206],{"style":126546,"src":137207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[271,137209,137210],{},[150,137211,137212],{},"fist-child",[20,137214,137216],{"className":126690,"code":137215,"language":126692,"meta":25,"style":25},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[27,137217,137218,137223,137238,137258,137276],{"__ignoreMap":25},[30,137219,137220],{"class":32,"line":33},[30,137221,137222],{"class":379},"\u002F* 属性选择器 *\u002F\n",[30,137224,137225,137227,137229,137231,137233,137235],{"class":32,"line":44},[30,137226,53959],{"class":51438},[30,137228,1210],{"class":321},[30,137230,103245],{"class":36},[30,137232,367],{"class":317},[30,137234,62837],{"class":74},[30,137236,137237],{"class":321},"] { }\n",[30,137239,137240,137242,137244,137246,137249,137252,137255],{"class":32,"line":52},[30,137241,53959],{"class":51438},[30,137243,1210],{"class":321},[30,137245,14876],{"class":36},[30,137247,137248],{"class":317},"^=",[30,137250,137251],{"class":74},"\"icon\"",[30,137253,137254],{"class":321},"] { }  ",[30,137256,137257],{"class":379},"\u002F* 以 icon 开头 *\u002F\n",[30,137259,137260,137262,137264,137266,137269,137271,137273],{"class":32,"line":60},[30,137261,53959],{"class":51438},[30,137263,1210],{"class":321},[30,137265,14876],{"class":36},[30,137267,137268],{"class":317},"$=",[30,137270,137251],{"class":74},[30,137272,137254],{"class":321},[30,137274,137275],{"class":379},"\u002F* 以 icon 结尾 *\u002F\n",[30,137277,137278,137280,137282,137284,137287,137289,137291],{"class":32,"line":68},[30,137279,53959],{"class":51438},[30,137281,1210],{"class":321},[30,137283,14876],{"class":36},[30,137285,137286],{"class":317},"*=",[30,137288,137251],{"class":74},[30,137290,137254],{"class":321},[30,137292,137293],{"class":379},"\u002F* 包含 icon *\u002F\n",[157,137295,137296],{},"ul的第一个儿子文本为红色",[157,137298,137299],{},"一定要在冒号前加空格，不然就是选中所有的了",[20,137301,137303],{"className":126690,"code":137302,"language":126692,"meta":25,"style":25},".center {\n  color: red;\n}\n```Css\n\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[27,137304,137305,137311,137321,137325,137329,137334,137347,137360,137376,137393,137410],{"__ignoreMap":25},[30,137306,137307,137309],{"class":32,"line":33},[30,137308,126981],{"class":36},[30,137310,15754],{"class":321},[30,137312,137313,137315,137317,137319],{"class":32,"line":44},[30,137314,71043],{"class":40},[30,137316,51575],{"class":321},[30,137318,57559],{"class":40},[30,137320,1480],{"class":321},[30,137322,137323],{"class":32,"line":52},[30,137324,1751],{"class":321},[30,137326,137327],{"class":32,"line":60},[30,137328,136151],{"class":321},[30,137330,137331],{"class":32,"line":68},[30,137332,137333],{"class":379},"\u002F* 结构伪类选择器 *\u002F\n",[30,137335,137336,137338,137341,137344],{"class":32,"line":80},[30,137337,150],{"class":51438},[30,137339,137340],{"class":36},":first-child",[30,137342,137343],{"class":321}," { }           ",[30,137345,137346],{"class":379},"\u002F* 第一个 *\u002F\n",[30,137348,137349,137351,137354,137357],{"class":32,"line":88},[30,137350,150],{"class":51438},[30,137352,137353],{"class":36},":last-child",[30,137355,137356],{"class":321}," { }            ",[30,137358,137359],{"class":379},"\u002F* 最后一个 *\u002F\n",[30,137361,137362,137364,137366,137368,137370,137373],{"class":32,"line":96},[30,137363,150],{"class":51438},[30,137365,129604],{"class":36},[30,137367,322],{"class":321},[30,137369,398],{"class":40},[30,137371,137372],{"class":321},") { }          ",[30,137374,137375],{"class":379},"\u002F* 第2个 *\u002F\n",[30,137377,137378,137380,137382,137384,137387,137390],{"class":32,"line":104},[30,137379,150],{"class":51438},[30,137381,129604],{"class":36},[30,137383,322],{"class":321},[30,137385,137386],{"class":40},"2n",[30,137388,137389],{"class":321},") { }         ",[30,137391,137392],{"class":379},"\u002F* 偶数 *\u002F\n",[30,137394,137395,137397,137399,137401,137404,137407],{"class":32,"line":112},[30,137396,150],{"class":51438},[30,137398,129604],{"class":36},[30,137400,322],{"class":321},[30,137402,137403],{"class":40},"2n+1",[30,137405,137406],{"class":321},") { }       ",[30,137408,137409],{"class":379},"\u002F* 奇数 *\u002F\n",[30,137411,137412,137414,137416,137418,137421,137423],{"class":32,"line":123},[30,137413,150],{"class":51438},[30,137415,129604],{"class":36},[30,137417,322],{"class":321},[30,137419,137420],{"class":40},"-n+3",[30,137422,137406],{"class":321},[30,137424,137425],{"class":379},"\u002F* 前3个 *\u002F\n",[51749,137427,137430],{"className":137428},[137429],"example","\n  示例内容\n",[157,137432,137433],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[147,137435,137436],{},[150,137437,137438,137441],{},[27,137439,137440],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[157,137443,137444],{},"也就是说它选择的是熊大",[271,137446,137447],{"start":80},[150,137448,137449],{},"权重",[20,137451,137453],{"className":126690,"code":137452,"language":126692,"meta":25,"style":25},"\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[27,137454,137455,137459,137469,137479,137493,137507,137521],{"__ignoreMap":25},[30,137456,137457],{"class":32,"line":33},[30,137458,137333],{"class":379},[30,137460,137461,137463,137465,137467],{"class":32,"line":44},[30,137462,150],{"class":51438},[30,137464,137340],{"class":36},[30,137466,137343],{"class":321},[30,137468,137346],{"class":379},[30,137470,137471,137473,137475,137477],{"class":32,"line":52},[30,137472,150],{"class":51438},[30,137474,137353],{"class":36},[30,137476,137356],{"class":321},[30,137478,137359],{"class":379},[30,137480,137481,137483,137485,137487,137489,137491],{"class":32,"line":60},[30,137482,150],{"class":51438},[30,137484,129604],{"class":36},[30,137486,322],{"class":321},[30,137488,398],{"class":40},[30,137490,137372],{"class":321},[30,137492,137375],{"class":379},[30,137494,137495,137497,137499,137501,137503,137505],{"class":32,"line":68},[30,137496,150],{"class":51438},[30,137498,129604],{"class":36},[30,137500,322],{"class":321},[30,137502,137386],{"class":40},[30,137504,137389],{"class":321},[30,137506,137392],{"class":379},[30,137508,137509,137511,137513,137515,137517,137519],{"class":32,"line":80},[30,137510,150],{"class":51438},[30,137512,129604],{"class":36},[30,137514,322],{"class":321},[30,137516,137403],{"class":40},[30,137518,137406],{"class":321},[30,137520,137409],{"class":379},[30,137522,137523,137525,137527,137529,137531,137533],{"class":32,"line":88},[30,137524,150],{"class":51438},[30,137526,129604],{"class":36},[30,137528,322],{"class":321},[30,137530,137420],{"class":40},[30,137532,137406],{"class":321},[30,137534,137425],{"class":379},[157,137536,137537],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22180,137539,137541],{"id":137540},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[157,137543,137544],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[160,137546],{"style":126546,"src":137547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[271,137549,137550],{},[150,137551,351],{},[147,137553,137554,137557,137560,137563,137566,137569],{},[150,137555,137556],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[150,137558,137559],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[150,137561,137562],{},"语法： element::before {}",[150,137564,137565],{},"before 和 after 必须有 content 属性",[150,137567,137568],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[150,137570,137571],{},"伪元素选择器和标签选择器一样，权重为 1",[271,137573,137574],{"start":44},[150,137575,137576],{},"实例",[20,137578,137579],{"className":126690,"code":137452,"language":126692,"meta":25,"style":25},[27,137580,137581,137585,137595,137605,137619,137633,137647],{"__ignoreMap":25},[30,137582,137583],{"class":32,"line":33},[30,137584,137333],{"class":379},[30,137586,137587,137589,137591,137593],{"class":32,"line":44},[30,137588,150],{"class":51438},[30,137590,137340],{"class":36},[30,137592,137343],{"class":321},[30,137594,137346],{"class":379},[30,137596,137597,137599,137601,137603],{"class":32,"line":52},[30,137598,150],{"class":51438},[30,137600,137353],{"class":36},[30,137602,137356],{"class":321},[30,137604,137359],{"class":379},[30,137606,137607,137609,137611,137613,137615,137617],{"class":32,"line":60},[30,137608,150],{"class":51438},[30,137610,129604],{"class":36},[30,137612,322],{"class":321},[30,137614,398],{"class":40},[30,137616,137372],{"class":321},[30,137618,137375],{"class":379},[30,137620,137621,137623,137625,137627,137629,137631],{"class":32,"line":68},[30,137622,150],{"class":51438},[30,137624,129604],{"class":36},[30,137626,322],{"class":321},[30,137628,137386],{"class":40},[30,137630,137389],{"class":321},[30,137632,137392],{"class":379},[30,137634,137635,137637,137639,137641,137643,137645],{"class":32,"line":80},[30,137636,150],{"class":51438},[30,137638,129604],{"class":36},[30,137640,322],{"class":321},[30,137642,137403],{"class":40},[30,137644,137406],{"class":321},[30,137646,137409],{"class":379},[30,137648,137649,137651,137653,137655,137657,137659],{"class":32,"line":88},[30,137650,150],{"class":51438},[30,137652,129604],{"class":36},[30,137654,322],{"class":321},[30,137656,137420],{"class":40},[30,137658,137406],{"class":321},[30,137660,137425],{"class":379},[160,137662],{"style":126546,"src":137663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[271,137665,137666],{"start":52},[150,137667,137668],{},"使用场景1",[160,137670],{"style":126546,"src":137671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[157,137673,137674],{},"不需要再加盒子来整红色那部分了",[20,137676,137678],{"className":126690,"code":137677,"language":126692,"meta":25,"style":25},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[27,137679,137680,137685,137694,137705,137715,137719,137728,137739,137749],{"__ignoreMap":25},[30,137681,137682],{"class":32,"line":33},[30,137683,137684],{"class":379},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[30,137686,137687,137689,137692],{"class":32,"line":44},[30,137688,51749],{"class":51438},[30,137690,137691],{"class":36},"::before",[30,137693,15754],{"class":321},[30,137695,137696,137699,137701,137703],{"class":32,"line":52},[30,137697,137698],{"class":40},"  content",[30,137700,51575],{"class":321},[30,137702,7834],{"class":74},[30,137704,1480],{"class":321},[30,137706,137707,137709,137711,137713],{"class":32,"line":60},[30,137708,128306],{"class":40},[30,137710,51575],{"class":321},[30,137712,61007],{"class":40},[30,137714,1480],{"class":321},[30,137716,137717],{"class":32,"line":68},[30,137718,1751],{"class":321},[30,137720,137721,137723,137726],{"class":32,"line":80},[30,137722,51749],{"class":51438},[30,137724,137725],{"class":36},"::after",[30,137727,15754],{"class":321},[30,137729,137730,137732,137734,137737],{"class":32,"line":88},[30,137731,137698],{"class":40},[30,137733,51575],{"class":321},[30,137735,137736],{"class":74},"\"→\"",[30,137738,1480],{"class":321},[30,137740,137741,137743,137745,137747],{"class":32,"line":96},[30,137742,71043],{"class":40},[30,137744,51575],{"class":321},[30,137746,62208],{"class":40},[30,137748,1480],{"class":321},[30,137750,137751],{"class":32,"line":104},[30,137752,1751],{"class":321},[160,137754],{"style":126546,"src":137755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[157,137757,137758],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[160,137760],{"style":126546,"src":137761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[157,137763,137764],{},"但是在引用时需要先转义一下",[157,137766,137767],{},"content='\\e930'",[271,137769,137770],{"start":60},[150,137771,137772],{},"使用场景2",[157,137774,137775],{},"仿土豆效果",[157,137777,137778],{},"通过使用伪元素选择器可以减少body中盒子的数量",[20,137780,137781],{"className":126690,"code":137677,"language":126692,"meta":25,"style":25},[27,137782,137783,137787,137795,137805,137815,137819,137827,137837,137847],{"__ignoreMap":25},[30,137784,137785],{"class":32,"line":33},[30,137786,137684],{"class":379},[30,137788,137789,137791,137793],{"class":32,"line":44},[30,137790,51749],{"class":51438},[30,137792,137691],{"class":36},[30,137794,15754],{"class":321},[30,137796,137797,137799,137801,137803],{"class":32,"line":52},[30,137798,137698],{"class":40},[30,137800,51575],{"class":321},[30,137802,7834],{"class":74},[30,137804,1480],{"class":321},[30,137806,137807,137809,137811,137813],{"class":32,"line":60},[30,137808,128306],{"class":40},[30,137810,51575],{"class":321},[30,137812,61007],{"class":40},[30,137814,1480],{"class":321},[30,137816,137817],{"class":32,"line":68},[30,137818,1751],{"class":321},[30,137820,137821,137823,137825],{"class":32,"line":80},[30,137822,51749],{"class":51438},[30,137824,137725],{"class":36},[30,137826,15754],{"class":321},[30,137828,137829,137831,137833,137835],{"class":32,"line":88},[30,137830,137698],{"class":40},[30,137832,51575],{"class":321},[30,137834,137736],{"class":74},[30,137836,1480],{"class":321},[30,137838,137839,137841,137843,137845],{"class":32,"line":96},[30,137840,71043],{"class":40},[30,137842,51575],{"class":321},[30,137844,62208],{"class":40},[30,137846,1480],{"class":321},[30,137848,137849],{"class":32,"line":104},[30,137850,1751],{"class":321},[160,137852],{"style":126546,"src":137853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[271,137855,137856],{"start":68},[150,137857,137858],{},"使用场景3",[157,137860,137861],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[20,137863,137865],{"className":126690,"code":137864,"language":126692,"meta":25,"style":25},".box {\n  float: left;\n}\n```Css\n\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[27,137866,137867,137873,137883,137887,137891,137895,137903,137913,137923,137927,137935,137945,137955],{"__ignoreMap":25},[30,137868,137869,137871],{"class":32,"line":33},[30,137870,130538],{"class":36},[30,137872,15754],{"class":321},[30,137874,137875,137877,137879,137881],{"class":32,"line":44},[30,137876,131170],{"class":40},[30,137878,51575],{"class":321},[30,137880,23918],{"class":40},[30,137882,1480],{"class":321},[30,137884,137885],{"class":32,"line":52},[30,137886,1751],{"class":321},[30,137888,137889],{"class":32,"line":60},[30,137890,136151],{"class":321},[30,137892,137893],{"class":32,"line":68},[30,137894,137684],{"class":379},[30,137896,137897,137899,137901],{"class":32,"line":80},[30,137898,51749],{"class":51438},[30,137900,137691],{"class":36},[30,137902,15754],{"class":321},[30,137904,137905,137907,137909,137911],{"class":32,"line":88},[30,137906,137698],{"class":40},[30,137908,51575],{"class":321},[30,137910,7834],{"class":74},[30,137912,1480],{"class":321},[30,137914,137915,137917,137919,137921],{"class":32,"line":96},[30,137916,128306],{"class":40},[30,137918,51575],{"class":321},[30,137920,61007],{"class":40},[30,137922,1480],{"class":321},[30,137924,137925],{"class":32,"line":104},[30,137926,1751],{"class":321},[30,137928,137929,137931,137933],{"class":32,"line":112},[30,137930,51749],{"class":51438},[30,137932,137725],{"class":36},[30,137934,15754],{"class":321},[30,137936,137937,137939,137941,137943],{"class":32,"line":123},[30,137938,137698],{"class":40},[30,137940,51575],{"class":321},[30,137942,137736],{"class":74},[30,137944,1480],{"class":321},[30,137946,137947,137949,137951,137953],{"class":32,"line":131},[30,137948,71043],{"class":40},[30,137950,51575],{"class":321},[30,137952,62208],{"class":40},[30,137954,1480],{"class":321},[30,137956,137957],{"class":32,"line":142},[30,137958,1751],{"class":321},[157,137960,137961],{},"div {\nmargin: 0 auto;\n}",[20,137963,137966],{"className":137964,"code":137965,"language":5369},[5367],"\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",[27,137967,137965],{"__ignoreMap":25},[157,137969,137970],{},"如果想让多个元素都发生变化",[157,137972,137973],{},"不能如下操作：",[157,137975,137976],{},"transition: width 2s ease 0.5s;",[157,137978,137979],{},"transition: height 2s ease 0.5s;不对！！！",[157,137981,137982],{},"上方会样式冲突，导致不显示任何过渡效果",[157,137984,137985],{},"使用如下：加逗号隔开",[157,137987,137988],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[157,137990,137991],{},"transition all 2s ease;",[287,137993,137995],{"id":137994},"_1426-过渡练习","14.2.6 过渡练习",[271,137997,137998],{},[150,137999,138000],{},"进度条",[160,138002],{"style":126546,"src":138003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[20,138005,138007],{"className":126690,"code":138006,"language":126692,"meta":25,"style":25},"div {\n  transition: all 0.3s ease;\n}\n",[27,138008,138009,138015,138033],{"__ignoreMap":25},[30,138010,138011,138013],{"class":32,"line":33},[30,138012,51749],{"class":51438},[30,138014,15754],{"class":321},[30,138016,138017,138020,138022,138024,138027,138029,138031],{"class":32,"line":44},[30,138018,138019],{"class":40},"  transition",[30,138021,51575],{"class":321},[30,138023,28259],{"class":40},[30,138025,138026],{"class":40}," 0.3",[30,138028,1015],{"class":317},[30,138030,78818],{"class":40},[30,138032,1480],{"class":321},[30,138034,138035],{"class":32,"line":52},[30,138036,1751],{"class":321},[271,138038,138039],{"start":44},[150,138040,138041],{},"小米logo",[157,138043,138044],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[20,138046,138048],{"className":126690,"code":138047,"language":126692,"meta":25,"style":25},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[27,138049,138050,138055,138061,138077,138082],{"__ignoreMap":25},[30,138051,138052],{"class":32,"line":33},[30,138053,138054],{"class":379},"\u002F* CSS3 过渡 *\u002F\n",[30,138056,138057,138059],{"class":32,"line":44},[30,138058,51749],{"class":51438},[30,138060,15754],{"class":321},[30,138062,138063,138065,138067,138069,138071,138073,138075],{"class":32,"line":52},[30,138064,138019],{"class":40},[30,138066,51575],{"class":321},[30,138068,28259],{"class":40},[30,138070,138026],{"class":40},[30,138072,1015],{"class":317},[30,138074,78818],{"class":40},[30,138076,1480],{"class":321},[30,138078,138079],{"class":32,"line":60},[30,138080,138081],{"class":379},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[30,138083,138084],{"class":32,"line":68},[30,138085,1751],{"class":321},[157,138087,138088],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[234,138090,138091],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":44,"depth":44,"links":138093},[138094,138099],{"id":136424,"depth":44,"text":136425,"children":138095},[138096,138097,138098],{"id":136428,"depth":52,"text":136429},{"id":136505,"depth":52,"text":136506},{"id":136836,"depth":52,"text":136837},{"id":137127,"depth":44,"text":137128,"children":138100},[138101,138102],{"id":137131,"depth":52,"text":137132},{"id":137994,"depth":52,"text":137995},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136416,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138109,"title":138110,"body":138111,"description":242,"extension":243,"meta":139855,"navigation":245,"path":139856,"seo":139857,"stem":139858,"__hash__":139859},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138112,"toc":139836},[138113,138116,138120,138123,138129,138135,138139,138141,138144,138147,138150,138153,138156,138159,138162,138166,138170,138173,138176,138179,138183,138186,138189,138194,138197,138200,138203,138207,138210,138219,138222,138225,138229,138232,138235,138240,138247,138261,138269,138276,138281,138284,138287,138290,138297,138301,138307,138313,138316,138319,138324,138330,138332,138340,138345,138348,138354,138356,138361,138366,138369,138371,138376,138379,138384,138389,138423,138427,138431,138434,138438,138441,138527,138530,138567,138570,138606,138610,138615,138628,138682,138684,138712,138714,138742,138748,138762,138764,138808,138810,138854,138857,138864,138875,138877,138904,138906,138932,138939,138955,138957,139051,139053,139147,139154,139157,139162,139168,139242,139245,139247,139283,139285,139321,139324,139331,139350,139353,139356,139358,139383,139385,139409,139412,139415,139445,139449,139452,139515,139517,139583,139585,139649,139652,139684,139686,139712,139714,139740,139743,139774,139776,139802,139804,139830,139833],[10,138114,138110],{"id":138115},"_15-品优购项目上篇-搭建与公共模块",[15,138117,138119],{"id":138118},"_151-项目规划","15.1 项目规划",[160,138121],{"style":126546,"src":138122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[157,138124,138125,138128],{},[469,138126,138127],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[157,138130,138131,138134],{},[469,138132,138133],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[15,138136,138138],{"id":138137},"_152-项目介绍","15.2 项目介绍",[157,138140,138127],{},[160,138142],{"style":126546,"src":138143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[157,138145,138146],{},"主页：",[160,138148],{"style":126546,"src":138149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[157,138151,138152],{},"列表页：",[160,138154],{"style":126546,"src":138155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[157,138157,138158],{},"注册页：",[160,138160],{"style":126546,"src":138161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[15,138163,138165],{"id":138164},"_153-项目搭建工作","15.3 项目搭建工作",[287,138167,138169],{"id":138168},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[160,138171],{"style":126546,"src":138172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[157,138174,138175],{},"经常更换的图片要放到upload文件夹中",[157,138177,138178],{},"不经常换的放到images文件夹中",[287,138180,138182],{"id":138181},"_1532-创建文件如下","15.3.2 创建文件如下",[160,138184],{"style":126546,"src":138185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[160,138187],{"style":126546,"src":138188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[157,138190,138191],{},[469,138192,138193],{},"初始化样式：",[157,138195,138196],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[157,138198,138199],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[157,138201,138202],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[287,138204,138206],{"id":138205},"_1533-项目模块化开发","15.3.3 项目模块化开发",[157,138208,138209],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[157,138211,138212,138213,138218],{},"这里最典型的应用就是 ",[469,138214,138215],{},[27,138216,138217],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[160,138220],{"style":126546,"src":138221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[157,138223,138224],{},"通过link方法来引入",[287,138226,138228],{"id":138227},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[160,138230],{"style":126546,"src":138231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[157,138233,138234],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[271,138236,138237],{},[150,138238,138239],{},"制作favicon图标",[157,138241,138242,138243,138246],{},"①把品优购图标切成 ",[27,138244,138245],{},"png"," 图片",[157,138248,138249,138250,138252,138253,138256,138257],{},"②把 ",[27,138251,138245],{}," 图片转换为 ",[27,138254,138255],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[558,138258,138259],{"href":138259,"rel":138260},"http:\u002F\u002Fwww.bitbug.net\u002F",[24045],[271,138262,138263,138266],{"start":44},[150,138264,138265],{},"favicon图标放到网站根目录下",[150,138267,138268],{},"HTML页面引入favicon",[157,138270,138271,138272,138275],{},"在html 页面里面的 ",[27,138273,138274],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[157,138277,138278],{},[27,138279,138280],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[157,138282,138283],{},"复制这行代码或者在生成这个的网站进行复制",[160,138285],{"style":126546,"src":138286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[157,138288,138289],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[157,138291,138292,138293],{},"例如:",[558,138294,138295],{"href":138295,"rel":138296},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24045],[287,138298,138300],{"id":138299},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[157,138302,138303,138306],{},[469,138304,138305],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[157,138308,138309,138312],{},[469,138310,138311],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[157,138314,138315],{},"页面必须有三个标签用来符合 SEO 优化",[160,138317],{"style":126546,"src":138318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[271,138320,138321],{},[150,138322,138323],{},"title网站标题",[157,138325,138326,138329],{},[469,138327,138328],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[157,138331,68928],{},[147,138333,138334,138337],{},[150,138335,138336],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[150,138338,138339],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[271,138341,138342],{"start":44},[150,138343,138344],{},"description网站描述",[157,138346,138347],{},"简要说明我们网站主要是做什么的",[157,138349,138350,138353],{},[469,138351,138352],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[157,138355,68928],{},[157,138357,138358],{},[27,138359,138360],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[271,138362,138363],{"start":52},[150,138364,138365],{},"keywords关键词",[157,138367,138368],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[157,138370,68928],{},[157,138372,138373],{},[27,138374,138375],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[157,138377,138378],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[157,138380,138381],{},[469,138382,138383],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[271,138385,138386],{"start":60},[150,138387,138388],{},"代码总结",[20,138390,138391],{"className":127437,"code":130794,"language":127439,"meta":25,"style":25},[27,138392,138393,138397,138411,138415],{"__ignoreMap":25},[30,138394,138395],{"class":32,"line":33},[30,138396,130801],{"class":379},[30,138398,138399,138401,138403,138405,138407,138409],{"class":32,"line":44},[30,138400,1230],{"class":321},[30,138402,51749],{"class":51438},[30,138404,53624],{"class":36},[30,138406,367],{"class":321},[30,138408,130814],{"class":74},[30,138410,51445],{"class":321},[30,138412,138413],{"class":32,"line":52},[30,138414,130821],{"class":321},[30,138416,138417,138419,138421],{"class":32,"line":60},[30,138418,51923],{"class":321},[30,138420,51749],{"class":51438},[30,138422,51445],{"class":321},[15,138424,138426],{"id":138425},"_154-项目公共部分制作","15.4 项目公共部分制作",[287,138428,138430],{"id":138429},"_1541-常用模块类命名","15.4.1 常用模块类命名",[160,138432],{"style":126546,"src":138433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[287,138435,138437],{"id":138436},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[157,138439,138440],{},"布局思路：",[147,138442,138443,138446,138449,138471,138504],{},[150,138444,138445],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[150,138447,138448],{},"里面包含版心的盒子",[150,138450,138451,138452],{},"版心盒子里面包含 1 号左侧盒子左浮动",[147,138453,138454,138462,138468],{},[150,138455,138456,138457,21682,138459,138461],{},"1 号盒子 里面包含一个",[27,138458,147],{},[27,138460,147],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[150,138463,138464,138465,138467],{},"里面的内容是水平排列，所以需要给",[27,138466,150],{},"设置浮动",[150,138469,138470],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[150,138472,138473,138474],{},"版心盒子里面包含 2 号右侧盒子右浮动",[147,138475,138476,138490,138495],{},[150,138477,138478,138479,21682,138481,138483,138484,138486,138487,138489],{},"2 号盒子 里面包含一个",[27,138480,147],{},[27,138482,147],{},"包裹",[27,138485,150],{},"，中间的",[27,138488,1241],{},"可以用样式去设置，也可以用字符 |",[150,138491,138492,138493,138467],{},"里面内容水平排列，给",[27,138494,150],{},[150,138496,138497,138498,138500,138501,138503],{},"找到里面所有偶数的 ",[27,138499,150],{}," 设置样式（偶数的 ",[27,138502,150],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[150,138505,138506,138507],{},"需要用到字体图标",[147,138508,138509,138515,138518,138521,138524],{},[150,138510,138511,138512],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[27,138513,138514],{},"arrow-icon",[150,138516,138517],{},"先要引入字体图片的资源",[150,138519,138520],{},"在样式里面利用 font-face 来进行声明",[150,138522,138523],{},"在伪元素的 content属性设置 图标的编码",[150,138525,138526],{},"给伪元素设置font-family属性",[157,138528,138529],{},"结构实例代码：",[20,138531,138533],{"className":126690,"code":138532,"language":126692,"meta":25,"style":25},"div::before {\n  content: \"\";\n  display: block;\n}\n",[27,138534,138535,138543,138553,138563],{"__ignoreMap":25},[30,138536,138537,138539,138541],{"class":32,"line":33},[30,138538,51749],{"class":51438},[30,138540,137691],{"class":36},[30,138542,15754],{"class":321},[30,138544,138545,138547,138549,138551],{"class":32,"line":44},[30,138546,137698],{"class":40},[30,138548,51575],{"class":321},[30,138550,7834],{"class":74},[30,138552,1480],{"class":321},[30,138554,138555,138557,138559,138561],{"class":32,"line":52},[30,138556,128306],{"class":40},[30,138558,51575],{"class":321},[30,138560,61007],{"class":40},[30,138562,1480],{"class":321},[30,138564,138565],{"class":32,"line":60},[30,138566,1751],{"class":321},[157,138568,138569],{},"样式实例代码：",[20,138571,138572],{"className":126690,"code":138532,"language":126692,"meta":25,"style":25},[27,138573,138574,138582,138592,138602],{"__ignoreMap":25},[30,138575,138576,138578,138580],{"class":32,"line":33},[30,138577,51749],{"class":51438},[30,138579,137691],{"class":36},[30,138581,15754],{"class":321},[30,138583,138584,138586,138588,138590],{"class":32,"line":44},[30,138585,137698],{"class":40},[30,138587,51575],{"class":321},[30,138589,7834],{"class":74},[30,138591,1480],{"class":321},[30,138593,138594,138596,138598,138600],{"class":32,"line":52},[30,138595,128306],{"class":40},[30,138597,51575],{"class":321},[30,138599,61007],{"class":40},[30,138601,1480],{"class":321},[30,138603,138604],{"class":32,"line":60},[30,138605,1751],{"class":321},[287,138607,138609],{"id":138608},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[147,138611,138612],{},[150,138613,138614],{},"header 盒子必须要有高度",[157,138616,138617,138618,138620,138621],{},"1 号盒子是 ",[27,138619,131702],{}," 标志定位，在正常开发过程中， ",[469,138622,138623,138624,138627],{},"logo的布局其实是有讲究的，需要进行 ",[27,138625,138626],{},"logoSEO","的优化 （★★★）",[147,138629,138630,138638,138646,138673],{},[150,138631,138632,138634,138635,138637],{},[27,138633,131702],{}," 里面首先放一个 ",[27,138636,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[150,138639,138640,138642,138643,138645],{},[27,138641,10],{}," 里面再放一个链接，可以返回首页的，把 ",[27,138644,131702],{}," 的背景图片给链接即可",[150,138647,138648,138649],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[147,138650,138651,138666],{},[150,138652,138653,138654,138657,138658,138661,138662,138665],{},"方法1：",[27,138655,138656],{},"text-indent"," 移到盒子外面（",[27,138659,138660],{},"text-indent: -9999px",") ，然后 ",[27,138663,138664],{},"overflow:hidden"," ，淘宝的做法",[150,138667,138668,138669,138672],{},"方法2：直接给 ",[27,138670,138671],{},"font-size: 0;"," 就看不到文字了，京东的做法",[150,138674,138675,138676,138678,138679,138681],{},"最后给链接一个 ",[27,138677,51545],{}," 属性，这样鼠标放到 ",[27,138680,131702],{}," 上就可以看到提示文字了",[157,138683,138529],{},[20,138685,138686],{"className":127437,"code":131923,"language":127439,"meta":25,"style":25},[27,138687,138688],{"__ignoreMap":25},[30,138689,138690,138692,138694,138696,138698,138700,138702,138704,138706,138708,138710],{"class":32,"line":33},[30,138691,1230],{"class":321},[30,138693,558],{"class":51438},[30,138695,61195],{"class":36},[30,138697,367],{"class":321},[30,138699,131938],{"class":74},[30,138701,131941],{"class":36},[30,138703,367],{"class":321},[30,138705,131946],{"class":74},[30,138707,131949],{"class":321},[30,138709,558],{"class":51438},[30,138711,51445],{"class":321},[157,138713,138569],{},[20,138715,138716],{"className":127437,"code":131923,"language":127439,"meta":25,"style":25},[27,138717,138718],{"__ignoreMap":25},[30,138719,138720,138722,138724,138726,138728,138730,138732,138734,138736,138738,138740],{"class":32,"line":33},[30,138721,1230],{"class":321},[30,138723,558],{"class":51438},[30,138725,61195],{"class":36},[30,138727,367],{"class":321},[30,138729,131938],{"class":74},[30,138731,131941],{"class":36},[30,138733,367],{"class":321},[30,138735,131946],{"class":74},[30,138737,131949],{"class":321},[30,138739,558],{"class":51438},[30,138741,51445],{"class":321},[157,138743,138744,138745,138747],{},"2 号盒子是 ",[27,138746,131715],{}," 搜索模块定位",[147,138749,138750,138753,138756,138759],{},[150,138751,138752],{},"search盒子利用定位的方式放在对应的位置",[150,138754,138755],{},"search盒子设置绝对定位，header盒子设置相对定位",[150,138757,138758],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[150,138760,138761],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[157,138763,138529],{},[20,138765,138766],{"className":126690,"code":132010,"language":126692,"meta":25,"style":25},[27,138767,138768,138790,138794,138804],{"__ignoreMap":25},[30,138769,138770,138772,138774,138776,138778,138780,138782,138784,138786,138788],{"class":32,"line":33},[30,138771,51749],{"class":51438},[30,138773,12617],{"class":321},[30,138775,157],{"class":51438},[30,138777,12617],{"class":321},[30,138779,10],{"class":51438},[30,138781,12617],{"class":321},[30,138783,147],{"class":51438},[30,138785,12617],{"class":321},[30,138787,150],{"class":51438},[30,138789,15754],{"class":321},[30,138791,138792],{"class":32,"line":44},[30,138793,132039],{"class":379},[30,138795,138796,138798,138800,138802],{"class":32,"line":52},[30,138797,128306],{"class":40},[30,138799,51575],{"class":321},[30,138801,61007],{"class":40},[30,138803,1480],{"class":321},[30,138805,138806],{"class":32,"line":60},[30,138807,1751],{"class":321},[157,138809,138569],{},[20,138811,138812],{"className":126690,"code":132010,"language":126692,"meta":25,"style":25},[27,138813,138814,138836,138840,138850],{"__ignoreMap":25},[30,138815,138816,138818,138820,138822,138824,138826,138828,138830,138832,138834],{"class":32,"line":33},[30,138817,51749],{"class":51438},[30,138819,12617],{"class":321},[30,138821,157],{"class":51438},[30,138823,12617],{"class":321},[30,138825,10],{"class":51438},[30,138827,12617],{"class":321},[30,138829,147],{"class":51438},[30,138831,12617],{"class":321},[30,138833,150],{"class":51438},[30,138835,15754],{"class":321},[30,138837,138838],{"class":32,"line":44},[30,138839,132039],{"class":379},[30,138841,138842,138844,138846,138848],{"class":32,"line":52},[30,138843,128306],{"class":40},[30,138845,51575],{"class":321},[30,138847,61007],{"class":40},[30,138849,1480],{"class":321},[30,138851,138852],{"class":32,"line":60},[30,138853,1751],{"class":321},[157,138855,138856],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[157,138858,138859,138860,138863],{},"3 号盒子是 ",[27,138861,138862],{},"hotwords"," 热词模块定位",[147,138865,138866,138869,138872],{},[150,138867,138868],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[150,138870,138871],{},"给里面所有的a标签设置 左右10px的外边距",[150,138873,138874],{},"给第一个a标签设置文字变红色（#c81623）",[157,138876,138529],{},[20,138878,138880],{"className":126690,"code":138879,"language":126692,"meta":25,"style":25},"div {\n  margin: 0 auto;\n}\n",[27,138881,138882,138888,138900],{"__ignoreMap":25},[30,138883,138884,138886],{"class":32,"line":33},[30,138885,51749],{"class":51438},[30,138887,15754],{"class":321},[30,138889,138890,138892,138894,138896,138898],{"class":32,"line":44},[30,138891,70608],{"class":40},[30,138893,51575],{"class":321},[30,138895,511],{"class":40},[30,138897,51694],{"class":40},[30,138899,1480],{"class":321},[30,138901,138902],{"class":32,"line":52},[30,138903,1751],{"class":321},[157,138905,138569],{},[20,138907,138908],{"className":126690,"code":138879,"language":126692,"meta":25,"style":25},[27,138909,138910,138916,138928],{"__ignoreMap":25},[30,138911,138912,138914],{"class":32,"line":33},[30,138913,51749],{"class":51438},[30,138915,15754],{"class":321},[30,138917,138918,138920,138922,138924,138926],{"class":32,"line":44},[30,138919,70608],{"class":40},[30,138921,51575],{"class":321},[30,138923,511],{"class":40},[30,138925,51694],{"class":40},[30,138927,1480],{"class":321},[30,138929,138930],{"class":32,"line":52},[30,138931,1751],{"class":321},[157,138933,138934,138935,138938],{},"4 号盒子是 ",[27,138936,138937],{},"shopcar"," 购物车模块",[147,138940,138941,138946,138949,138952],{},[150,138942,123473,138943,138945],{},[27,138944,138937],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[150,138947,138948],{},"count 统计部分用绝对定位做",[150,138950,138951],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[150,138953,138954],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[157,138956,138529],{},[20,138958,138959],{"className":126690,"code":132122,"language":126692,"meta":25,"style":25},[27,138960,138961,138965,138979,138983,138997,139001,139015,139019,139033,139037],{"__ignoreMap":25},[30,138962,138963],{"class":32,"line":33},[30,138964,132129],{"class":379},[30,138966,138967,138969,138971,138973,138975,138977],{"class":32,"line":44},[30,138968,132134],{"class":36},[30,138970,79945],{"class":321},[30,138972,129050],{"class":40},[30,138974,51575],{"class":321},[30,138976,132143],{"class":40},[30,138978,129620],{"class":321},[30,138980,138981],{"class":32,"line":52},[30,138982,132150],{"class":379},[30,138984,138985,138987,138989,138991,138993,138995],{"class":32,"line":60},[30,138986,132155],{"class":36},[30,138988,79945],{"class":321},[30,138990,129050],{"class":40},[30,138992,51575],{"class":321},[30,138994,54902],{"class":40},[30,138996,129620],{"class":321},[30,138998,138999],{"class":32,"line":68},[30,139000,132170],{"class":379},[30,139002,139003,139005,139007,139009,139011,139013],{"class":32,"line":80},[30,139004,132175],{"class":36},[30,139006,79945],{"class":321},[30,139008,129050],{"class":40},[30,139010,51575],{"class":321},[30,139012,54969],{"class":40},[30,139014,129620],{"class":321},[30,139016,139017],{"class":32,"line":88},[30,139018,132190],{"class":379},[30,139020,139021,139023,139025,139027,139029,139031],{"class":32,"line":96},[30,139022,132195],{"class":36},[30,139024,79945],{"class":321},[30,139026,129050],{"class":40},[30,139028,51575],{"class":321},[30,139030,86371],{"class":40},[30,139032,129620],{"class":321},[30,139034,139035],{"class":32,"line":104},[30,139036,132210],{"class":379},[30,139038,139039,139041,139043,139045,139047,139049],{"class":32,"line":112},[30,139040,132215],{"class":36},[30,139042,79945],{"class":321},[30,139044,129050],{"class":40},[30,139046,51575],{"class":321},[30,139048,132224],{"class":40},[30,139050,129620],{"class":321},[157,139052,138569],{},[20,139054,139055],{"className":126690,"code":132122,"language":126692,"meta":25,"style":25},[27,139056,139057,139061,139075,139079,139093,139097,139111,139115,139129,139133],{"__ignoreMap":25},[30,139058,139059],{"class":32,"line":33},[30,139060,132129],{"class":379},[30,139062,139063,139065,139067,139069,139071,139073],{"class":32,"line":44},[30,139064,132134],{"class":36},[30,139066,79945],{"class":321},[30,139068,129050],{"class":40},[30,139070,51575],{"class":321},[30,139072,132143],{"class":40},[30,139074,129620],{"class":321},[30,139076,139077],{"class":32,"line":52},[30,139078,132150],{"class":379},[30,139080,139081,139083,139085,139087,139089,139091],{"class":32,"line":60},[30,139082,132155],{"class":36},[30,139084,79945],{"class":321},[30,139086,129050],{"class":40},[30,139088,51575],{"class":321},[30,139090,54902],{"class":40},[30,139092,129620],{"class":321},[30,139094,139095],{"class":32,"line":68},[30,139096,132170],{"class":379},[30,139098,139099,139101,139103,139105,139107,139109],{"class":32,"line":80},[30,139100,132175],{"class":36},[30,139102,79945],{"class":321},[30,139104,129050],{"class":40},[30,139106,51575],{"class":321},[30,139108,54969],{"class":40},[30,139110,129620],{"class":321},[30,139112,139113],{"class":32,"line":88},[30,139114,132190],{"class":379},[30,139116,139117,139119,139121,139123,139125,139127],{"class":32,"line":96},[30,139118,132195],{"class":36},[30,139120,79945],{"class":321},[30,139122,129050],{"class":40},[30,139124,51575],{"class":321},[30,139126,86371],{"class":40},[30,139128,129620],{"class":321},[30,139130,139131],{"class":32,"line":104},[30,139132,132210],{"class":379},[30,139134,139135,139137,139139,139141,139143,139145],{"class":32,"line":112},[30,139136,132215],{"class":36},[30,139138,79945],{"class":321},[30,139140,129050],{"class":40},[30,139142,51575],{"class":321},[30,139144,132224],{"class":40},[30,139146,129620],{"class":321},[287,139148,139150,139151,139153],{"id":139149},"_1544-nav导航模块制作","15.4.4 ",[27,139152,53851],{},"导航模块制作",[160,139155],{"style":126546,"src":139156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[157,139158,139159,139161],{},[27,139160,53851],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[157,139163,139164,139165],{},"1 号盒子左侧浮动，",[27,139166,139167],{},"dropdown",[147,139169,139170,139180,139188,139194,139202,139212,139220,139231],{},[150,139171,139172,139173,101156,139176,139179],{},"1号盒子有讲究，根据相关性 里面包含 ",[27,139174,139175],{},".dt",[27,139177,139178],{},".dd"," 两个盒子",[150,139181,139182,139184,139185,139187],{},[27,139183,139175],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[27,139186,139178],{}," 挤到下面去了",[150,139189,139190,139191,139193],{},"给 ",[27,139192,139178],{}," 盒子设置宽度 和 高度，以及背景颜色",[150,139195,139190,139196,139198,139199,120375],{},[27,139197,139178],{}," 盒子里面定义 无序列表 （",[27,139200,139201],{},"ul > li > a",[150,139203,139204,139205,139207,139208,139211],{},"每个 ",[27,139206,150],{}," 都有一个高度（",[27,139209,139210],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[150,139213,139190,139214,139216,139217,120375],{},[27,139215,150],{}," 里面的a设置文字大小（",[27,139218,139219],{},"14px",[150,139221,139190,139222,139224,139225,139227,139228,139230],{},[27,139223,150],{}," 设置 ",[27,139226,127851],{},"，当鼠标移入的时候，让",[27,139229,150],{},"的背景变成白色，让里面的文字变成红色",[150,139232,139233,139235,139236,139238,139239,139241],{},[27,139234,150],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[27,139237,150],{},"的右侧，那么给",[27,139240,150],{},"设置相对定位",[157,139243,139244],{},"一定要注意相关性",[157,139246,138529],{},[20,139248,139249],{"className":126690,"code":138532,"language":126692,"meta":25,"style":25},[27,139250,139251,139259,139269,139279],{"__ignoreMap":25},[30,139252,139253,139255,139257],{"class":32,"line":33},[30,139254,51749],{"class":51438},[30,139256,137691],{"class":36},[30,139258,15754],{"class":321},[30,139260,139261,139263,139265,139267],{"class":32,"line":44},[30,139262,137698],{"class":40},[30,139264,51575],{"class":321},[30,139266,7834],{"class":74},[30,139268,1480],{"class":321},[30,139270,139271,139273,139275,139277],{"class":32,"line":52},[30,139272,128306],{"class":40},[30,139274,51575],{"class":321},[30,139276,61007],{"class":40},[30,139278,1480],{"class":321},[30,139280,139281],{"class":32,"line":60},[30,139282,1751],{"class":321},[157,139284,138569],{},[20,139286,139287],{"className":126690,"code":138532,"language":126692,"meta":25,"style":25},[27,139288,139289,139297,139307,139317],{"__ignoreMap":25},[30,139290,139291,139293,139295],{"class":32,"line":33},[30,139292,51749],{"class":51438},[30,139294,137691],{"class":36},[30,139296,15754],{"class":321},[30,139298,139299,139301,139303,139305],{"class":32,"line":44},[30,139300,137698],{"class":40},[30,139302,51575],{"class":321},[30,139304,7834],{"class":74},[30,139306,1480],{"class":321},[30,139308,139309,139311,139313,139315],{"class":32,"line":52},[30,139310,128306],{"class":40},[30,139312,51575],{"class":321},[30,139314,61007],{"class":40},[30,139316,1480],{"class":321},[30,139318,139319],{"class":32,"line":60},[30,139320,1751],{"class":321},[157,139322,139323],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[157,139325,139326,139327,139330],{},"2 号盒子左侧浮动，",[27,139328,139329],{},"navitems"," 导航栏组",[147,139332,139333,139338,139347],{},[150,139334,139335,139336],{},"里面结构是 ",[27,139337,139201],{},[150,139339,139340,139341,139343,139344,139346],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[27,139342,558],{},"左右的",[27,139345,31021],{},"把两侧撑开",[150,139348,139349],{},"让文字垂直居中（行高等于高度）",[160,139351],{"style":126546,"src":139352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[157,139354,139355],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[157,139357,138529],{},[20,139359,139361],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},".box {\n  float: left;\n}\n",[27,139362,139363,139369,139379],{"__ignoreMap":25},[30,139364,139365,139367],{"class":32,"line":33},[30,139366,130538],{"class":36},[30,139368,15754],{"class":321},[30,139370,139371,139373,139375,139377],{"class":32,"line":44},[30,139372,131170],{"class":40},[30,139374,51575],{"class":321},[30,139376,23918],{"class":40},[30,139378,1480],{"class":321},[30,139380,139381],{"class":32,"line":52},[30,139382,1751],{"class":321},[157,139384,138569],{},[20,139386,139387],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,139388,139389,139395,139405],{"__ignoreMap":25},[30,139390,139391,139393],{"class":32,"line":33},[30,139392,130538],{"class":36},[30,139394,15754],{"class":321},[30,139396,139397,139399,139401,139403],{"class":32,"line":44},[30,139398,131170],{"class":40},[30,139400,51575],{"class":321},[30,139402,23918],{"class":40},[30,139404,1480],{"class":321},[30,139406,139407],{"class":32,"line":52},[30,139408,1751],{"class":321},[157,139410,139411],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[160,139413],{"style":126546,"src":139414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[20,139416,139417],{"className":126690,"code":130847,"language":126692,"meta":25,"style":25},[27,139418,139419,139425,139441],{"__ignoreMap":25},[30,139420,139421,139423],{"class":32,"line":33},[30,139422,51749],{"class":51438},[30,139424,15754],{"class":321},[30,139426,139427,139429,139431,139433,139435,139437,139439],{"class":32,"line":44},[30,139428,71034],{"class":40},[30,139430,51575],{"class":321},[30,139432,537],{"class":40},[30,139434,51630],{"class":317},[30,139436,51659],{"class":40},[30,139438,130082],{"class":40},[30,139440,1480],{"class":321},[30,139442,139443],{"class":32,"line":52},[30,139444,1751],{"class":321},[287,139446,139448],{"id":139447},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[160,139450],{"style":126546,"src":139451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[147,139453,139454,139459,139464],{},[150,139455,139456,139458],{},[27,139457,131893],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[150,139460,139461,139463],{},[27,139462,131893],{}," 里面有一个大的版心",[150,139465,139466,139467,139470,139471],{},"版心里面包含 1 号盒子，",[27,139468,139469],{},"mod_service"," 是服务模块，mod 是模块的意思",[147,139472,139473,139478,139491,139507,139512],{},[150,139474,139190,139475,139477],{},[27,139476,139469],{}," 设置高度（80px）和下边框",[150,139479,139480,139481,139484,139485,139487,139488,139490],{},"在里面定义 ",[27,139482,139483],{},"ul > li"," ,每个",[27,139486,150],{}," 宽度是300px 高度是 50px，给每个",[27,139489,150],{},"设置35px的左内边距",[150,139492,139493,139494,139496,139497,139499,139500,139502,139503,18592,139505,120375],{},"在每个",[27,139495,150],{},"里面，放一个 ",[27,139498,23092],{},"（里面放图标），一个",[27,139501,51749],{},"（里面放",[27,139504,51749],{},[27,139506,157],{},[150,139508,139190,139509,139511],{},[27,139510,23092],{},"设置浮动，让h5与这个div左右排列",[150,139513,139514],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[157,139516,138529],{},[20,139518,139520],{"className":126690,"code":139519,"language":126692,"meta":25,"style":25},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[27,139521,139522,139528,139540,139552,139579],{"__ignoreMap":25},[30,139523,139524,139526],{"class":32,"line":33},[30,139525,134447],{"class":36},[30,139527,15754],{"class":321},[30,139529,139530,139532,139534,139536,139538],{"class":32,"line":44},[30,139531,70706],{"class":40},[30,139533,51575],{"class":321},[30,139535,1020],{"class":40},[30,139537,51630],{"class":317},[30,139539,1480],{"class":321},[30,139541,139542,139544,139546,139548,139550],{"class":32,"line":52},[30,139543,70926],{"class":40},[30,139545,51575],{"class":321},[30,139547,1020],{"class":40},[30,139549,51630],{"class":317},[30,139551,1480],{"class":321},[30,139553,139554,139556,139558,139560,139562,139564,139566,139568,139571,139573,139575,139577],{"class":32,"line":60},[30,139555,70749],{"class":40},[30,139557,51575],{"class":321},[30,139559,61864],{"class":40},[30,139561,322],{"class":321},[30,139563,134486],{"class":5398},[30,139565,13896],{"class":321},[30,139567,61874],{"class":40},[30,139569,139570],{"class":40}," -10",[30,139572,51630],{"class":317},[30,139574,134505],{"class":40},[30,139576,51630],{"class":317},[30,139578,1480],{"class":321},[30,139580,139581],{"class":32,"line":68},[30,139582,1751],{"class":321},[157,139584,138569],{},[20,139586,139587],{"className":126690,"code":139519,"language":126692,"meta":25,"style":25},[27,139588,139589,139595,139607,139619,139645],{"__ignoreMap":25},[30,139590,139591,139593],{"class":32,"line":33},[30,139592,134447],{"class":36},[30,139594,15754],{"class":321},[30,139596,139597,139599,139601,139603,139605],{"class":32,"line":44},[30,139598,70706],{"class":40},[30,139600,51575],{"class":321},[30,139602,1020],{"class":40},[30,139604,51630],{"class":317},[30,139606,1480],{"class":321},[30,139608,139609,139611,139613,139615,139617],{"class":32,"line":52},[30,139610,70926],{"class":40},[30,139612,51575],{"class":321},[30,139614,1020],{"class":40},[30,139616,51630],{"class":317},[30,139618,1480],{"class":321},[30,139620,139621,139623,139625,139627,139629,139631,139633,139635,139637,139639,139641,139643],{"class":32,"line":60},[30,139622,70749],{"class":40},[30,139624,51575],{"class":321},[30,139626,61864],{"class":40},[30,139628,322],{"class":321},[30,139630,134486],{"class":5398},[30,139632,13896],{"class":321},[30,139634,61874],{"class":40},[30,139636,139570],{"class":40},[30,139638,51630],{"class":317},[30,139640,134505],{"class":40},[30,139642,51630],{"class":317},[30,139644,1480],{"class":321},[30,139646,139647],{"class":32,"line":68},[30,139648,1751],{"class":321},[157,139650,139651],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[147,139653,139654,139657,139663,139669,139681],{},[150,139655,139656],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[150,139658,139659,139660,120375],{},"里面的布局利用 自定义列表来实现（",[27,139661,139662],{},"dl > dt + dd",[150,139664,139190,139665,139668],{},[27,139666,139667],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[150,139670,139190,139671,139674,139675,18592,139677,139680],{},[27,139672,139673],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[27,139676,139673],{},[27,139678,139679],{},"dd","之间有些距离",[150,139682,139683],{},"最后一个 dl 结构和样式不一样，需要单独设置",[157,139685,138529],{},[20,139687,139688],{"className":126690,"code":138879,"language":126692,"meta":25,"style":25},[27,139689,139690,139696,139708],{"__ignoreMap":25},[30,139691,139692,139694],{"class":32,"line":33},[30,139693,51749],{"class":51438},[30,139695,15754],{"class":321},[30,139697,139698,139700,139702,139704,139706],{"class":32,"line":44},[30,139699,70608],{"class":40},[30,139701,51575],{"class":321},[30,139703,511],{"class":40},[30,139705,51694],{"class":40},[30,139707,1480],{"class":321},[30,139709,139710],{"class":32,"line":52},[30,139711,1751],{"class":321},[157,139713,138569],{},[20,139715,139716],{"className":126690,"code":138879,"language":126692,"meta":25,"style":25},[27,139717,139718,139724,139736],{"__ignoreMap":25},[30,139719,139720,139722],{"class":32,"line":33},[30,139721,51749],{"class":51438},[30,139723,15754],{"class":321},[30,139725,139726,139728,139730,139732,139734],{"class":32,"line":44},[30,139727,70608],{"class":40},[30,139729,51575],{"class":321},[30,139731,511],{"class":40},[30,139733,51694],{"class":40},[30,139735,1480],{"class":321},[30,139737,139738],{"class":32,"line":52},[30,139739,1751],{"class":321},[157,139741,139742],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[147,139744,139745,139754,139757,139768],{},[150,139746,139747,139748,139750,139751,139753],{},"分为上下两块，上面是 ",[27,139749,131910],{}," 友情链接，下面是 ",[27,139752,131903],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[150,139755,139756],{},"把内容分别复制到相应模块中",[150,139758,139190,139759,139761,139762,139764,139765,139767],{},[27,139760,131910],{}," 设置 15px 的下外边距，给",[27,139763,131910],{}," 里面 的 ",[27,139766,558],{}," 标签设置 左右 3px 的外边距",[150,139769,139770,139771,139773],{},"给",[27,139772,131903],{}," 设置 20px 的行高",[157,139775,138529],{},[20,139777,139778],{"className":126690,"code":138879,"language":126692,"meta":25,"style":25},[27,139779,139780,139786,139798],{"__ignoreMap":25},[30,139781,139782,139784],{"class":32,"line":33},[30,139783,51749],{"class":51438},[30,139785,15754],{"class":321},[30,139787,139788,139790,139792,139794,139796],{"class":32,"line":44},[30,139789,70608],{"class":40},[30,139791,51575],{"class":321},[30,139793,511],{"class":40},[30,139795,51694],{"class":40},[30,139797,1480],{"class":321},[30,139799,139800],{"class":32,"line":52},[30,139801,1751],{"class":321},[157,139803,138569],{},[20,139805,139806],{"className":126690,"code":138879,"language":126692,"meta":25,"style":25},[27,139807,139808,139814,139826],{"__ignoreMap":25},[30,139809,139810,139812],{"class":32,"line":33},[30,139811,51749],{"class":51438},[30,139813,15754],{"class":321},[30,139815,139816,139818,139820,139822,139824],{"class":32,"line":44},[30,139817,70608],{"class":40},[30,139819,51575],{"class":321},[30,139821,511],{"class":40},[30,139823,51694],{"class":40},[30,139825,1480],{"class":321},[30,139827,139828],{"class":32,"line":52},[30,139829,1751],{"class":321},[157,139831,139832],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[234,139834,139835],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":139837},[139838,139839,139840,139847],{"id":138118,"depth":44,"text":138119},{"id":138137,"depth":44,"text":138138},{"id":138164,"depth":44,"text":138165,"children":139841},[139842,139843,139844,139845,139846],{"id":138168,"depth":52,"text":138169},{"id":138181,"depth":52,"text":138182},{"id":138205,"depth":52,"text":138206},{"id":138227,"depth":52,"text":138228},{"id":138299,"depth":52,"text":138300},{"id":138425,"depth":44,"text":138426,"children":139848},[139849,139850,139851,139852,139854],{"id":138429,"depth":52,"text":138430},{"id":138436,"depth":52,"text":138437},{"id":138608,"depth":52,"text":138609},{"id":139149,"depth":52,"text":139853},"15.4.4 nav导航模块制作",{"id":139447,"depth":52,"text":139448},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138110,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139861,"title":139862,"body":139863,"description":242,"extension":243,"meta":142265,"navigation":245,"path":142266,"seo":142267,"stem":142268,"__hash__":142269},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139864,"toc":142242},[139865,139868,139872,139876,139888,139891,139894,139897,139908,139910,139934,139936,139960,139965,139968,139970,140006,140008,140044,140047,140052,140055,140058,140061,140091,140098,140101,140111,140113,140147,140150,140184,140190,140207,140209,140245,140247,140283,140288,140313,140315,140341,140343,140367,140374,140377,140441,140443,140485,140487,140527,140534,140539,140541,140571,140573,140603,140607,140610,140617,140629,140631,140657,140659,140683,140686,140688,140712,140718,140728,140730,140760,140762,140792,140799,140840,140842,140878,140880,140916,140920,140923,140926,140929,140935,140940,140943,140966,140969,140993,140996,141020,141025,141028,141031,141034,141037,141040,141114,141116,141146,141148,141178,141181,141184,141216,141220,141224,141238,141247,141250,141255,141257,141351,141353,141447,141470,141472,141496,141498,141522,141529,141532,141542,141544,141568,141573,141581,141583,141613,141618,141658,141660,141686,141688,141714,141718,141721,141726,141729,141733,141741,141748,141756,141758,141788,141790,141820,141828,141831,141834,141836,141866,141868,141898,141901,141906,141908,141932,141934,141958,141961,142046,142048,142072,142074,142098,142102,142104,142128,142130,142164,142168,142182,142185,142190,142193,142198,142201,142231,142239],[10,139866,139862],{"id":139867},"_16-品优购项目下篇-主体与页面开发",[15,139869,139871],{"id":139870},"_161-项目主体模块制作","16.1 项目主体模块制作",[287,139873,139875],{"id":139874},"_1611-首页制作","16.1.1 首页制作",[157,139877,139878,139880,139881,139883,139884,139887],{},[469,139879,102196],{}," 主体模块是 ",[469,139882,74196],{}," 里面专有的，注意需要新的样式文件 ",[469,139885,139886],{},"index.css，"," 就不要写在common.css中了",[160,139889],{"style":126546,"src":139890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[160,139892],{"style":126546,"src":139893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[157,139895,139896],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[147,139898,139899,139902,139905],{},[150,139900,139901],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[150,139903,139904],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[150,139906,139907],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[157,139909,138529],{},[20,139911,139912],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,139913,139914,139920,139930],{"__ignoreMap":25},[30,139915,139916,139918],{"class":32,"line":33},[30,139917,130538],{"class":36},[30,139919,15754],{"class":321},[30,139921,139922,139924,139926,139928],{"class":32,"line":44},[30,139923,131170],{"class":40},[30,139925,51575],{"class":321},[30,139927,23918],{"class":40},[30,139929,1480],{"class":321},[30,139931,139932],{"class":32,"line":52},[30,139933,1751],{"class":321},[157,139935,138569],{},[20,139937,139938],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,139939,139940,139946,139956],{"__ignoreMap":25},[30,139941,139942,139944],{"class":32,"line":33},[30,139943,130538],{"class":36},[30,139945,15754],{"class":321},[30,139947,139948,139950,139952,139954],{"class":32,"line":44},[30,139949,131170],{"class":40},[30,139951,51575],{"class":321},[30,139953,23918],{"class":40},[30,139955,1480],{"class":321},[30,139957,139958],{"class":32,"line":52},[30,139959,1751],{"class":321},[271,139961,139962],{},[150,139963,139964],{},"左侧focus模块制作",[160,139966],{"style":126546,"src":139967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[157,139969,138529],{},[20,139971,139972],{"className":126690,"code":128013,"language":126692,"meta":25,"style":25},[27,139973,139974,139982,139992,140002],{"__ignoreMap":25},[30,139975,139976,139978,139980],{"class":32,"line":33},[30,139977,53959],{"class":51438},[30,139979,62038],{"class":36},[30,139981,15754],{"class":321},[30,139983,139984,139986,139988,139990],{"class":32,"line":44},[30,139985,128028],{"class":40},[30,139987,51575],{"class":321},[30,139989,55027],{"class":40},[30,139991,1480],{"class":321},[30,139993,139994,139996,139998,140000],{"class":32,"line":52},[30,139995,70936],{"class":40},[30,139997,51575],{"class":321},[30,139999,54875],{"class":40},[30,140001,1480],{"class":321},[30,140003,140004],{"class":32,"line":60},[30,140005,1751],{"class":321},[157,140007,138569],{},[20,140009,140010],{"className":126690,"code":128013,"language":126692,"meta":25,"style":25},[27,140011,140012,140020,140030,140040],{"__ignoreMap":25},[30,140013,140014,140016,140018],{"class":32,"line":33},[30,140015,53959],{"class":51438},[30,140017,62038],{"class":36},[30,140019,15754],{"class":321},[30,140021,140022,140024,140026,140028],{"class":32,"line":44},[30,140023,128028],{"class":40},[30,140025,51575],{"class":321},[30,140027,55027],{"class":40},[30,140029,1480],{"class":321},[30,140031,140032,140034,140036,140038],{"class":32,"line":52},[30,140033,70936],{"class":40},[30,140035,51575],{"class":321},[30,140037,54875],{"class":40},[30,140039,1480],{"class":321},[30,140041,140042],{"class":32,"line":60},[30,140043,1751],{"class":321},[157,140045,140046],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[271,140048,140049],{"start":44},[150,140050,140051],{},"右侧newsflash模块制作",[160,140053],{"style":126546,"src":140054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[157,140056,140057],{},"右侧的模块 分为上中下三个盒子",[157,140059,140060],{},"结构代码：",[20,140062,140063],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,140064,140065],{"__ignoreMap":25},[30,140066,140067,140069,140071,140073,140075,140077,140079,140081,140083,140085,140087,140089],{"class":32,"line":33},[30,140068,1230],{"class":321},[30,140070,160],{"class":51438},[30,140072,55377],{"class":36},[30,140074,367],{"class":321},[30,140076,134207],{"class":74},[30,140078,55385],{"class":36},[30,140080,367],{"class":321},[30,140082,134214],{"class":74},[30,140084,134217],{"class":36},[30,140086,367],{"class":321},[30,140088,134222],{"class":74},[30,140090,51445],{"class":321},[157,140092,140093,140094,140097],{},"1 号盒子为 ",[27,140095,140096],{},"news"," 新闻模块 高度为 165px",[160,140099],{"style":126546,"src":140100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[157,140102,140103,140104,140107,140108],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[27,140105,140106],{},"news-hd","，下面是 ",[27,140109,140110],{},"news-bd",[157,140112,140060],{},[20,140114,140115],{"className":127437,"code":130794,"language":127439,"meta":25,"style":25},[27,140116,140117,140121,140135,140139],{"__ignoreMap":25},[30,140118,140119],{"class":32,"line":33},[30,140120,130801],{"class":379},[30,140122,140123,140125,140127,140129,140131,140133],{"class":32,"line":44},[30,140124,1230],{"class":321},[30,140126,51749],{"class":51438},[30,140128,53624],{"class":36},[30,140130,367],{"class":321},[30,140132,130814],{"class":74},[30,140134,51445],{"class":321},[30,140136,140137],{"class":32,"line":52},[30,140138,130821],{"class":321},[30,140140,140141,140143,140145],{"class":32,"line":60},[30,140142,51923],{"class":321},[30,140144,51749],{"class":51438},[30,140146,51445],{"class":321},[157,140148,140149],{},"样式代码：",[20,140151,140152],{"className":127437,"code":130794,"language":127439,"meta":25,"style":25},[27,140153,140154,140158,140172,140176],{"__ignoreMap":25},[30,140155,140156],{"class":32,"line":33},[30,140157,130801],{"class":379},[30,140159,140160,140162,140164,140166,140168,140170],{"class":32,"line":44},[30,140161,1230],{"class":321},[30,140163,51749],{"class":51438},[30,140165,53624],{"class":36},[30,140167,367],{"class":321},[30,140169,130814],{"class":74},[30,140171,51445],{"class":321},[30,140173,140174],{"class":32,"line":52},[30,140175,130821],{"class":321},[30,140177,140178,140180,140182],{"class":32,"line":60},[30,140179,51923],{"class":321},[30,140181,51749],{"class":51438},[30,140183,51445],{"class":321},[157,140185,140186,140187,140189],{},"上面是",[27,140188,140106],{},"，设置高度是 33px，设置下边框",[147,140191,140192,140198],{},[150,140193,140194,140195,140197],{},"里面放一个",[27,140196,23092],{}," 标题",[150,140199,140200,140201,140203,140204,140206],{},"放一个a",[27,140202,102831],{},"，内容是 更多，然后让 ",[27,140205,558],{}," 进行右浮动，三角用伪元素设置字体图标就好",[157,140208,140060],{},[20,140210,140211],{"className":126690,"code":138532,"language":126692,"meta":25,"style":25},[27,140212,140213,140221,140231,140241],{"__ignoreMap":25},[30,140214,140215,140217,140219],{"class":32,"line":33},[30,140216,51749],{"class":51438},[30,140218,137691],{"class":36},[30,140220,15754],{"class":321},[30,140222,140223,140225,140227,140229],{"class":32,"line":44},[30,140224,137698],{"class":40},[30,140226,51575],{"class":321},[30,140228,7834],{"class":74},[30,140230,1480],{"class":321},[30,140232,140233,140235,140237,140239],{"class":32,"line":52},[30,140234,128306],{"class":40},[30,140236,51575],{"class":321},[30,140238,61007],{"class":40},[30,140240,1480],{"class":321},[30,140242,140243],{"class":32,"line":60},[30,140244,1751],{"class":321},[157,140246,140149],{},[20,140248,140249],{"className":126690,"code":138532,"language":126692,"meta":25,"style":25},[27,140250,140251,140259,140269,140279],{"__ignoreMap":25},[30,140252,140253,140255,140257],{"class":32,"line":33},[30,140254,51749],{"class":51438},[30,140256,137691],{"class":36},[30,140258,15754],{"class":321},[30,140260,140261,140263,140265,140267],{"class":32,"line":44},[30,140262,137698],{"class":40},[30,140264,51575],{"class":321},[30,140266,7834],{"class":74},[30,140268,1480],{"class":321},[30,140270,140271,140273,140275,140277],{"class":32,"line":52},[30,140272,128306],{"class":40},[30,140274,51575],{"class":321},[30,140276,61007],{"class":40},[30,140278,1480],{"class":321},[30,140280,140281],{"class":32,"line":60},[30,140282,1751],{"class":321},[157,140284,140285,140286],{},"下面是",[27,140287,140110],{},[147,140289,140290,140298],{},[150,140291,140292,140293,101156,140295,140297],{},"里面包含 ",[27,140294,147],{},[27,140296,150],{}," 还有链接",[150,140299,139770,140300,140302,140303,140305,140306,140309,140310],{},[27,140301,150],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[27,140304,131356],{}," 2.设置 ",[27,140307,140308],{},"white-space: nowrap;"," 3. 设置 ",[27,140311,140312],{},"text-overflow: ellipsis;",[157,140314,140060],{},[20,140316,140318],{"className":126690,"code":140317,"language":126692,"meta":25,"style":25},"div {\n  overflow: hidden;\n}\n",[27,140319,140320,140326,140337],{"__ignoreMap":25},[30,140321,140322,140324],{"class":32,"line":33},[30,140323,51749],{"class":51438},[30,140325,15754],{"class":321},[30,140327,140328,140331,140333,140335],{"class":32,"line":44},[30,140329,140330],{"class":40},"  overflow",[30,140332,51575],{"class":321},[30,140334,61852],{"class":40},[30,140336,1480],{"class":321},[30,140338,140339],{"class":32,"line":52},[30,140340,1751],{"class":321},[157,140342,140149],{},[20,140344,140345],{"className":126690,"code":140317,"language":126692,"meta":25,"style":25},[27,140346,140347,140353,140363],{"__ignoreMap":25},[30,140348,140349,140351],{"class":32,"line":33},[30,140350,51749],{"class":51438},[30,140352,15754],{"class":321},[30,140354,140355,140357,140359,140361],{"class":32,"line":44},[30,140356,140330],{"class":40},[30,140358,51575],{"class":321},[30,140360,61852],{"class":40},[30,140362,1480],{"class":321},[30,140364,140365],{"class":32,"line":52},[30,140366,1751],{"class":321},[157,140368,140369,140370,140373],{},"2 号盒子为 ",[27,140371,140372],{},"lifeservice"," 生活服务模块 高度为 209px",[160,140375],{"style":126546,"src":140376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[147,140378,140379,140382,140392,140416,140427],{},[150,140380,140381],{},"设置边框（左右下边框）",[150,140383,140384,140385,140388,140389,140391],{},"里面的内容 是 ",[27,140386,140387],{},"ul > 12*li","，给",[27,140390,150],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[150,140393,140394,140395],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[147,140396,140397,140402,140411],{},[150,140398,140399,140401],{},[27,140400,140372],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[150,140403,140404,140405,140407,140408,140410],{},"可以让 ",[27,140406,140372],{}," 里面的 ",[27,140409,147],{}," 宽度为 252，就可以装的下 4 个 小 li",[150,140412,140413,140415],{},[27,140414,140372],{}," 盒子 overflow 隐藏多余的部分就可以了",[150,140417,116605,140418,140420,140421,140423,140424,140426],{},[27,140419,150],{}," 里面放一个 ",[27,140422,761],{},"（里面放图标），下面的文本用 ",[27,140425,157],{}," 标签包裹",[150,140428,139190,140429,140431,140432,140434,140435,139224,140437,140440],{},[27,140430,761],{}," 设置 24px宽和28px的高（注意 ",[27,140433,761],{}," 是行内元素， 转成行内块），给 ",[27,140436,150],{},[27,140438,140439],{},"text-align:center"," 让里面内容居中显示",[157,140442,140060],{},[20,140444,140446],{"className":126690,"code":140445,"language":126692,"meta":25,"style":25},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[27,140447,140448,140466,140471,140481],{"__ignoreMap":25},[30,140449,140450,140452,140454,140456,140458,140460,140462,140464],{"class":32,"line":33},[30,140451,30],{"class":51438},[30,140453,12617],{"class":321},[30,140455,558],{"class":51438},[30,140457,12617],{"class":321},[30,140459,23735],{"class":51438},[30,140461,12617],{"class":321},[30,140463,469],{"class":51438},[30,140465,15754],{"class":321},[30,140467,140468],{"class":32,"line":44},[30,140469,140470],{"class":379},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[30,140472,140473,140475,140477,140479],{"class":32,"line":52},[30,140474,128306],{"class":40},[30,140476,51575],{"class":321},[30,140478,128368],{"class":40},[30,140480,1480],{"class":321},[30,140482,140483],{"class":32,"line":60},[30,140484,1751],{"class":321},[157,140486,140149],{},[20,140488,140489],{"className":126690,"code":140445,"language":126692,"meta":25,"style":25},[27,140490,140491,140509,140513,140523],{"__ignoreMap":25},[30,140492,140493,140495,140497,140499,140501,140503,140505,140507],{"class":32,"line":33},[30,140494,30],{"class":51438},[30,140496,12617],{"class":321},[30,140498,558],{"class":51438},[30,140500,12617],{"class":321},[30,140502,23735],{"class":51438},[30,140504,12617],{"class":321},[30,140506,469],{"class":51438},[30,140508,15754],{"class":321},[30,140510,140511],{"class":32,"line":44},[30,140512,140470],{"class":379},[30,140514,140515,140517,140519,140521],{"class":32,"line":52},[30,140516,128306],{"class":40},[30,140518,51575],{"class":321},[30,140520,128368],{"class":40},[30,140522,1480],{"class":321},[30,140524,140525],{"class":32,"line":60},[30,140526,1751],{"class":321},[157,140528,140529,140530,140533],{},"3 号盒子为 ",[27,140531,140532],{},"bargain"," 特价商品",[147,140535,140536],{},[150,140537,140538],{},"这个比较简单，直接插入一张图片即可",[157,140540,140060],{},[20,140542,140543],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,140544,140545],{"__ignoreMap":25},[30,140546,140547,140549,140551,140553,140555,140557,140559,140561,140563,140565,140567,140569],{"class":32,"line":33},[30,140548,1230],{"class":321},[30,140550,160],{"class":51438},[30,140552,55377],{"class":36},[30,140554,367],{"class":321},[30,140556,134207],{"class":74},[30,140558,55385],{"class":36},[30,140560,367],{"class":321},[30,140562,134214],{"class":74},[30,140564,134217],{"class":36},[30,140566,367],{"class":321},[30,140568,134222],{"class":74},[30,140570,51445],{"class":321},[157,140572,140149],{},[20,140574,140575],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,140576,140577],{"__ignoreMap":25},[30,140578,140579,140581,140583,140585,140587,140589,140591,140593,140595,140597,140599,140601],{"class":32,"line":33},[30,140580,1230],{"class":321},[30,140582,160],{"class":51438},[30,140584,55377],{"class":36},[30,140586,367],{"class":321},[30,140588,134207],{"class":74},[30,140590,55385],{"class":36},[30,140592,367],{"class":321},[30,140594,134214],{"class":74},[30,140596,134217],{"class":36},[30,140598,367],{"class":321},[30,140600,134222],{"class":74},[30,140602,51445],{"class":321},[287,140604,140606],{"id":140605},"_1612-推荐模块制作","16.1.2 推荐模块制作",[160,140608],{"style":126546,"src":140609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[157,140611,140612,140613,140616],{},"大盒子 ",[27,140614,140615],{},"recom"," 推荐模块 recommend",[147,140618,140619],{},[150,140620,140621,140622,140624,140625,140628],{},"给这个 ",[27,140623,140615],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[27,140626,140627],{},"#ebebeb","），设置距离上边 12px",[157,140630,140060],{},[20,140632,140634],{"className":126690,"code":140633,"language":126692,"meta":25,"style":25},"div {\n  background-color: #f0f0f0;\n}\n",[27,140635,140636,140642,140653],{"__ignoreMap":25},[30,140637,140638,140640],{"class":32,"line":33},[30,140639,51749],{"class":51438},[30,140641,15754],{"class":321},[30,140643,140644,140646,140648,140651],{"class":32,"line":44},[30,140645,71016],{"class":40},[30,140647,51575],{"class":321},[30,140649,140650],{"class":40},"#f0f0f0",[30,140652,1480],{"class":321},[30,140654,140655],{"class":32,"line":52},[30,140656,1751],{"class":321},[157,140658,140149],{},[20,140660,140661],{"className":126690,"code":140633,"language":126692,"meta":25,"style":25},[27,140662,140663,140669,140679],{"__ignoreMap":25},[30,140664,140665,140667],{"class":32,"line":33},[30,140666,51749],{"class":51438},[30,140668,15754],{"class":321},[30,140670,140671,140673,140675,140677],{"class":32,"line":44},[30,140672,71016],{"class":40},[30,140674,51575],{"class":321},[30,140676,140650],{"class":40},[30,140678,1480],{"class":321},[30,140680,140681],{"class":32,"line":52},[30,140682,1751],{"class":321},[157,140684,140685],{},"里面包含 2 个盒子， 浮动即可",[157,140687,140060],{},[20,140689,140690],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,140691,140692,140698,140708],{"__ignoreMap":25},[30,140693,140694,140696],{"class":32,"line":33},[30,140695,130538],{"class":36},[30,140697,15754],{"class":321},[30,140699,140700,140702,140704,140706],{"class":32,"line":44},[30,140701,131170],{"class":40},[30,140703,51575],{"class":321},[30,140705,23918],{"class":40},[30,140707,1480],{"class":321},[30,140709,140710],{"class":32,"line":52},[30,140711,1751],{"class":321},[157,140713,140714,140715],{},"1 号盒子 ",[27,140716,140717],{},"recom_hd",[147,140719,140720,140723],{},[150,140721,140722],{},"设置宽度205px，高度163px",[150,140724,140194,140725,140727],{},[27,140726,160],{},"标签，插入图片即可",[157,140729,140060],{},[20,140731,140732],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,140733,140734],{"__ignoreMap":25},[30,140735,140736,140738,140740,140742,140744,140746,140748,140750,140752,140754,140756,140758],{"class":32,"line":33},[30,140737,1230],{"class":321},[30,140739,160],{"class":51438},[30,140741,55377],{"class":36},[30,140743,367],{"class":321},[30,140745,134207],{"class":74},[30,140747,55385],{"class":36},[30,140749,367],{"class":321},[30,140751,134214],{"class":74},[30,140753,134217],{"class":36},[30,140755,367],{"class":321},[30,140757,134222],{"class":74},[30,140759,51445],{"class":321},[157,140761,140149],{},[20,140763,140764],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,140765,140766],{"__ignoreMap":25},[30,140767,140768,140770,140772,140774,140776,140778,140780,140782,140784,140786,140788,140790],{"class":32,"line":33},[30,140769,1230],{"class":321},[30,140771,160],{"class":51438},[30,140773,55377],{"class":36},[30,140775,367],{"class":321},[30,140777,134207],{"class":74},[30,140779,55385],{"class":36},[30,140781,367],{"class":321},[30,140783,134214],{"class":74},[30,140785,134217],{"class":36},[30,140787,367],{"class":321},[30,140789,134222],{"class":74},[30,140791,51445],{"class":321},[157,140793,140794,140795,140798],{},"2 号盒子 ",[27,140796,140797],{},"recom_bd"," ，注意里面的小竖线",[147,140800,140801,140812,140815,140820,140825],{},[150,140802,140803,140804,140806,140807,140809,140810],{},"右侧结构里面放 ",[27,140805,147],{}," 包含 4个 ",[27,140808,150],{},"，每个li里面包含一个",[27,140811,160],{},[150,140813,140814],{},"直接利用切片工具把里面的内容当成一张图片",[150,140816,139190,140817,140819],{},[27,140818,150],{}," 设置浮动",[150,140821,139190,140822,140824],{},[27,140823,160],{}," 设置宽高，宽度 248px，高度 163px",[150,140826,140827,140828,140388,140831,140833,140834,140836,140837],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[27,140829,140830],{},"top 10px",[27,140832,150],{},"设置相对定位（注意，最后一个",[27,140835,150],{},"不用设置伪元素），可以利用 ",[27,140838,140839],{},"nth-child(-n+3){...}",[157,140841,140060],{},[20,140843,140844],{"className":126690,"code":138532,"language":126692,"meta":25,"style":25},[27,140845,140846,140854,140864,140874],{"__ignoreMap":25},[30,140847,140848,140850,140852],{"class":32,"line":33},[30,140849,51749],{"class":51438},[30,140851,137691],{"class":36},[30,140853,15754],{"class":321},[30,140855,140856,140858,140860,140862],{"class":32,"line":44},[30,140857,137698],{"class":40},[30,140859,51575],{"class":321},[30,140861,7834],{"class":74},[30,140863,1480],{"class":321},[30,140865,140866,140868,140870,140872],{"class":32,"line":52},[30,140867,128306],{"class":40},[30,140869,51575],{"class":321},[30,140871,61007],{"class":40},[30,140873,1480],{"class":321},[30,140875,140876],{"class":32,"line":60},[30,140877,1751],{"class":321},[157,140879,140149],{},[20,140881,140882],{"className":126690,"code":138532,"language":126692,"meta":25,"style":25},[27,140883,140884,140892,140902,140912],{"__ignoreMap":25},[30,140885,140886,140888,140890],{"class":32,"line":33},[30,140887,51749],{"class":51438},[30,140889,137691],{"class":36},[30,140891,15754],{"class":321},[30,140893,140894,140896,140898,140900],{"class":32,"line":44},[30,140895,137698],{"class":40},[30,140897,51575],{"class":321},[30,140899,7834],{"class":74},[30,140901,1480],{"class":321},[30,140903,140904,140906,140908,140910],{"class":32,"line":52},[30,140905,128306],{"class":40},[30,140907,51575],{"class":321},[30,140909,61007],{"class":40},[30,140911,1480],{"class":321},[30,140913,140914],{"class":32,"line":60},[30,140915,1751],{"class":321},[287,140917,140919],{"id":140918},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[160,140921],{"style":126546,"src":140922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[157,140924,140925],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[157,140927,140928],{},"第一楼是家用电器模块： 里面包含两个盒子",[157,140930,140931,140934],{},[27,140932,140933],{},"box_hd"," 制作",[157,140936,140714,140937,140939],{},[27,140938,140933],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[160,140941],{"style":126546,"src":140942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[147,140944,140945,140950,140955,140958],{},[150,140946,140947,140949],{},[27,140948,140933],{}," 给 30px 的高度，2个像素的下边框",[150,140951,140952,140953],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[27,140954,139201],{},[150,140956,140957],{},"左侧盒左浮动，右侧盒子右浮动",[150,140959,140960,140962,140963,140965],{},[27,140961,558],{},"标签之间的距离用左右的",[27,140964,31021],{},"撑开即可",[157,140967,140968],{},"结构代码",[20,140970,140971],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,140972,140973,140979,140989],{"__ignoreMap":25},[30,140974,140975,140977],{"class":32,"line":33},[30,140976,130538],{"class":36},[30,140978,15754],{"class":321},[30,140980,140981,140983,140985,140987],{"class":32,"line":44},[30,140982,131170],{"class":40},[30,140984,51575],{"class":321},[30,140986,23918],{"class":40},[30,140988,1480],{"class":321},[30,140990,140991],{"class":32,"line":52},[30,140992,1751],{"class":321},[157,140994,140995],{},"样式代码",[20,140997,140998],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,140999,141000,141006,141016],{"__ignoreMap":25},[30,141001,141002,141004],{"class":32,"line":33},[30,141003,130538],{"class":36},[30,141005,15754],{"class":321},[30,141007,141008,141010,141012,141014],{"class":32,"line":44},[30,141009,131170],{"class":40},[30,141011,51575],{"class":321},[30,141013,23918],{"class":40},[30,141015,1480],{"class":321},[30,141017,141018],{"class":32,"line":52},[30,141019,1751],{"class":321},[157,141021,141022,140934],{},[27,141023,141024],{},"box_bd",[157,141026,141027],{},"2 号盒子 box_bd，不要给高度",[160,141029],{"style":126546,"src":141030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[157,141032,141033],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[157,141035,141036],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[157,141038,141039],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[147,141041,141042,141054,141070],{},[150,141043,141044,141046,141047,141050,141051,141053],{},[27,141045,141024],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[27,141048,141049],{},"tab_content","，在",[27,141052,141049],{}," 里面包裹tab选项卡对应的内容",[150,141055,141056,141057,141060,141061,141063,141064,141066,141067,141069],{},"内容被一个大盒子包裹（",[27,141058,141059],{},"tab_list_item","），里面是 ",[27,141062,147],{}," 包裹 5个 ",[27,141065,150],{},"，每个",[27,141068,150],{},"设置对应的宽度，然后设置浮动",[150,141071,141072,141073,141075,141076,141078,141079],{},"而这5个",[27,141074,150],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[27,141077,150],{},"设置",[147,141080,141081,141099,141102],{},[150,141082,141083,141084,141086,141087,141089,141090,141092,141093,141095,141096,141098],{},"第一个小 ",[27,141085,150],{}," 分为上下结构，上面是 ",[27,141088,147],{}," 包裹 ",[27,141091,150],{}," ，",[27,141094,150],{},"里面包裹 ",[27,141097,558],{},"，下面插入一张图片",[150,141100,141101],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[150,141103,141104,141105,141107,141108,141110,141111,141113],{},"后面的小 ",[27,141106,150],{}," 里面先放一个",[27,141109,558],{},"标签，然后在",[27,141112,558],{},"标签里面插入图片即可",[157,141115,140968],{},[20,141117,141118],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,141119,141120],{"__ignoreMap":25},[30,141121,141122,141124,141126,141128,141130,141132,141134,141136,141138,141140,141142,141144],{"class":32,"line":33},[30,141123,1230],{"class":321},[30,141125,160],{"class":51438},[30,141127,55377],{"class":36},[30,141129,367],{"class":321},[30,141131,134207],{"class":74},[30,141133,55385],{"class":36},[30,141135,367],{"class":321},[30,141137,134214],{"class":74},[30,141139,134217],{"class":36},[30,141141,367],{"class":321},[30,141143,134222],{"class":74},[30,141145,51445],{"class":321},[157,141147,140995],{},[20,141149,141150],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,141151,141152],{"__ignoreMap":25},[30,141153,141154,141156,141158,141160,141162,141164,141166,141168,141170,141172,141174,141176],{"class":32,"line":33},[30,141155,1230],{"class":321},[30,141157,160],{"class":51438},[30,141159,55377],{"class":36},[30,141161,367],{"class":321},[30,141163,134207],{"class":74},[30,141165,55385],{"class":36},[30,141167,367],{"class":321},[30,141169,134214],{"class":74},[30,141171,134217],{"class":36},[30,141173,367],{"class":321},[30,141175,134222],{"class":74},[30,141177,51445],{"class":321},[157,141179,141180],{},"tab栏切换需求！！！！！！介绍：",[160,141182],{"style":126546,"src":141183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[147,141185,141186,141194,141200,141203],{},[150,141187,141188,141191,141192],{},[27,141189,141190],{},"tab","栏的布局是 ",[27,141193,139201],{},[150,141195,141196,141197,141199],{},"有多少个",[27,141198,141190],{},"选项卡，那么对应就有多少个内容",[150,141201,141202],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[150,141204,141205,141206,141209,141210,141212,141213,141215],{},"等后面我们学习了",[27,141207,141208],{},"js","之后，我们就会配合",[27,141211,141208],{},"来实现，",[27,141214,141190],{},"栏的切换",[15,141217,141219],{"id":141218},"_162-列表制作","16.2 列表制作",[287,141221,141223],{"id":141222},"_1621-准备工作","16.2.1 准备工作",[147,141225,141226,141229,141232,141235],{},[150,141227,141228],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[150,141230,141231],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[150,141233,141234],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[150,141236,141237],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[287,141239,141241,141242,101156,141244,141246],{"id":141240},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[27,141243,131695],{},[27,141245,53851],{}," 修改",[160,141248],{"style":126546,"src":141249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[147,141251,141252],{},[150,141253,141254],{},"秒杀盒子 sk（ second kill ） 定位即可",[157,141256,140060],{},[20,141258,141259],{"className":126690,"code":132122,"language":126692,"meta":25,"style":25},[27,141260,141261,141265,141279,141283,141297,141301,141315,141319,141333,141337],{"__ignoreMap":25},[30,141262,141263],{"class":32,"line":33},[30,141264,132129],{"class":379},[30,141266,141267,141269,141271,141273,141275,141277],{"class":32,"line":44},[30,141268,132134],{"class":36},[30,141270,79945],{"class":321},[30,141272,129050],{"class":40},[30,141274,51575],{"class":321},[30,141276,132143],{"class":40},[30,141278,129620],{"class":321},[30,141280,141281],{"class":32,"line":52},[30,141282,132150],{"class":379},[30,141284,141285,141287,141289,141291,141293,141295],{"class":32,"line":60},[30,141286,132155],{"class":36},[30,141288,79945],{"class":321},[30,141290,129050],{"class":40},[30,141292,51575],{"class":321},[30,141294,54902],{"class":40},[30,141296,129620],{"class":321},[30,141298,141299],{"class":32,"line":68},[30,141300,132170],{"class":379},[30,141302,141303,141305,141307,141309,141311,141313],{"class":32,"line":80},[30,141304,132175],{"class":36},[30,141306,79945],{"class":321},[30,141308,129050],{"class":40},[30,141310,51575],{"class":321},[30,141312,54969],{"class":40},[30,141314,129620],{"class":321},[30,141316,141317],{"class":32,"line":88},[30,141318,132190],{"class":379},[30,141320,141321,141323,141325,141327,141329,141331],{"class":32,"line":96},[30,141322,132195],{"class":36},[30,141324,79945],{"class":321},[30,141326,129050],{"class":40},[30,141328,51575],{"class":321},[30,141330,86371],{"class":40},[30,141332,129620],{"class":321},[30,141334,141335],{"class":32,"line":104},[30,141336,132210],{"class":379},[30,141338,141339,141341,141343,141345,141347,141349],{"class":32,"line":112},[30,141340,132215],{"class":36},[30,141342,79945],{"class":321},[30,141344,129050],{"class":40},[30,141346,51575],{"class":321},[30,141348,132224],{"class":40},[30,141350,129620],{"class":321},[157,141352,140149],{},[20,141354,141355],{"className":126690,"code":132122,"language":126692,"meta":25,"style":25},[27,141356,141357,141361,141375,141379,141393,141397,141411,141415,141429,141433],{"__ignoreMap":25},[30,141358,141359],{"class":32,"line":33},[30,141360,132129],{"class":379},[30,141362,141363,141365,141367,141369,141371,141373],{"class":32,"line":44},[30,141364,132134],{"class":36},[30,141366,79945],{"class":321},[30,141368,129050],{"class":40},[30,141370,51575],{"class":321},[30,141372,132143],{"class":40},[30,141374,129620],{"class":321},[30,141376,141377],{"class":32,"line":52},[30,141378,132150],{"class":379},[30,141380,141381,141383,141385,141387,141389,141391],{"class":32,"line":60},[30,141382,132155],{"class":36},[30,141384,79945],{"class":321},[30,141386,129050],{"class":40},[30,141388,51575],{"class":321},[30,141390,54902],{"class":40},[30,141392,129620],{"class":321},[30,141394,141395],{"class":32,"line":68},[30,141396,132170],{"class":379},[30,141398,141399,141401,141403,141405,141407,141409],{"class":32,"line":80},[30,141400,132175],{"class":36},[30,141402,79945],{"class":321},[30,141404,129050],{"class":40},[30,141406,51575],{"class":321},[30,141408,54969],{"class":40},[30,141410,129620],{"class":321},[30,141412,141413],{"class":32,"line":88},[30,141414,132190],{"class":379},[30,141416,141417,141419,141421,141423,141425,141427],{"class":32,"line":96},[30,141418,132195],{"class":36},[30,141420,79945],{"class":321},[30,141422,129050],{"class":40},[30,141424,51575],{"class":321},[30,141426,86371],{"class":40},[30,141428,129620],{"class":321},[30,141430,141431],{"class":32,"line":104},[30,141432,132210],{"class":379},[30,141434,141435,141437,141439,141441,141443,141445],{"class":32,"line":112},[30,141436,132215],{"class":36},[30,141438,79945],{"class":321},[30,141440,129050],{"class":40},[30,141442,51575],{"class":321},[30,141444,132224],{"class":40},[30,141446,129620],{"class":321},[147,141448,141449,141460],{},[150,141450,141451,141452,141455,141456,101156,141458],{},"1 号盒子左侧浮动 ",[27,141453,141454],{},"sk_list"," 里面包含 ",[27,141457,147],{},[27,141459,150],{},[150,141461,141462,141463,141455,141466,101156,141468],{},"2 号盒子左侧浮动 ",[27,141464,141465],{},"sk_con",[27,141467,147],{},[27,141469,150],{},[157,141471,140060],{},[20,141473,141474],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,141475,141476,141482,141492],{"__ignoreMap":25},[30,141477,141478,141480],{"class":32,"line":33},[30,141479,130538],{"class":36},[30,141481,15754],{"class":321},[30,141483,141484,141486,141488,141490],{"class":32,"line":44},[30,141485,131170],{"class":40},[30,141487,51575],{"class":321},[30,141489,23918],{"class":40},[30,141491,1480],{"class":321},[30,141493,141494],{"class":32,"line":52},[30,141495,1751],{"class":321},[157,141497,140149],{},[20,141499,141500],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,141501,141502,141508,141518],{"__ignoreMap":25},[30,141503,141504,141506],{"class":32,"line":33},[30,141505,130538],{"class":36},[30,141507,15754],{"class":321},[30,141509,141510,141512,141514,141516],{"class":32,"line":44},[30,141511,131170],{"class":40},[30,141513,51575],{"class":321},[30,141515,23918],{"class":40},[30,141517,1480],{"class":321},[30,141519,141520],{"class":32,"line":52},[30,141521,1751],{"class":321},[287,141523,141525,141526],{"id":141524},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[27,141527,141528],{},"sk_container",[160,141530],{"style":126546,"src":141531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[147,141533,141534,141539],{},[150,141535,140714,141536,141538],{},[27,141537,141528],{}," 给宽度 1200，不要给高度",[150,141540,141541],{},"一定不要忘记清除浮动",[157,141543,140060],{},[20,141545,141546],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,141547,141548,141554,141564],{"__ignoreMap":25},[30,141549,141550,141552],{"class":32,"line":33},[30,141551,130538],{"class":36},[30,141553,15754],{"class":321},[30,141555,141556,141558,141560,141562],{"class":32,"line":44},[30,141557,131170],{"class":40},[30,141559,51575],{"class":321},[30,141561,23918],{"class":40},[30,141563,1480],{"class":321},[30,141565,141566],{"class":32,"line":52},[30,141567,1751],{"class":321},[271,141569,141570],{},[150,141571,141572],{},"sk_hd制作",[147,141574,141575],{},[150,141576,140794,141577,141580],{},[27,141578,141579],{},"sk_hd"," ，插入图片即可",[157,141582,140060],{},[20,141584,141585],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,141586,141587],{"__ignoreMap":25},[30,141588,141589,141591,141593,141595,141597,141599,141601,141603,141605,141607,141609,141611],{"class":32,"line":33},[30,141590,1230],{"class":321},[30,141592,160],{"class":51438},[30,141594,55377],{"class":36},[30,141596,367],{"class":321},[30,141598,134207],{"class":74},[30,141600,55385],{"class":36},[30,141602,367],{"class":321},[30,141604,134214],{"class":74},[30,141606,134217],{"class":36},[30,141608,367],{"class":321},[30,141610,134222],{"class":74},[30,141612,51445],{"class":321},[271,141614,141615],{"start":44},[150,141616,141617],{},"sk_bd制作",[147,141619,141620],{},[150,141621,141622,141623,141626,141627,101156,141629,141631],{},"3 号盒子 ",[27,141624,141625],{},"sk_bd"," ，里面包含很多的 ",[27,141628,147],{},[27,141630,150],{},[147,141632,141633,141642],{},[150,141634,141635,141636,141638,141639,141641],{},"当鼠标移入到 ",[27,141637,150],{}," 上面的时候显示红色的边框，在这里先给 ",[27,141640,150],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[150,141643,141644,141645,141647,141648,141650,141651,141654,141655,141657],{},"由于给每个 ",[27,141646,150],{}," 都设置了外边距，导致一行的最后一个 ",[27,141649,150],{}," 掉了下来，在这里我们利用 ",[27,141652,141653],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[27,141656,150],{},"，去掉外边距就好了",[157,141659,140060],{},[20,141661,141662],{"className":126690,"code":138879,"language":126692,"meta":25,"style":25},[27,141663,141664,141670,141682],{"__ignoreMap":25},[30,141665,141666,141668],{"class":32,"line":33},[30,141667,51749],{"class":51438},[30,141669,15754],{"class":321},[30,141671,141672,141674,141676,141678,141680],{"class":32,"line":44},[30,141673,70608],{"class":40},[30,141675,51575],{"class":321},[30,141677,511],{"class":40},[30,141679,51694],{"class":40},[30,141681,1480],{"class":321},[30,141683,141684],{"class":32,"line":52},[30,141685,1751],{"class":321},[157,141687,140149],{},[20,141689,141690],{"className":126690,"code":138879,"language":126692,"meta":25,"style":25},[27,141691,141692,141698,141710],{"__ignoreMap":25},[30,141693,141694,141696],{"class":32,"line":33},[30,141695,51749],{"class":51438},[30,141697,15754],{"class":321},[30,141699,141700,141702,141704,141706,141708],{"class":32,"line":44},[30,141701,70608],{"class":40},[30,141703,51575],{"class":321},[30,141705,511],{"class":40},[30,141707,51694],{"class":40},[30,141709,1480],{"class":321},[30,141711,141712],{"class":32,"line":52},[30,141713,1751],{"class":321},[15,141715,141717],{"id":141716},"_163-注册页面制作","16.3 注册页面制作",[160,141719],{"style":126546,"src":141720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[157,141722,141723,141725],{},[469,141724,9207],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[160,141727],{"style":126546,"src":141728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[287,141730,141732],{"id":141731},"_1631-准备工作","16.3.1 准备工作",[147,141734,141735,141738],{},[150,141736,141737],{},"创建register.html，引入 base.css，引入favicon图标",[150,141739,141740],{},"创建register.css ，在html页面进行引入",[287,141742,141744,141745,141747],{"id":141743},"_1632-header-头部实现","16.3.2 ",[27,141746,131695],{}," 头部实现",[147,141749,141750,141753],{},[150,141751,141752],{},"整个内容用 版心 进行包裹",[150,141754,141755],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[157,141757,140060],{},[20,141759,141760],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,141761,141762],{"__ignoreMap":25},[30,141763,141764,141766,141768,141770,141772,141774,141776,141778,141780,141782,141784,141786],{"class":32,"line":33},[30,141765,1230],{"class":321},[30,141767,160],{"class":51438},[30,141769,55377],{"class":36},[30,141771,367],{"class":321},[30,141773,134207],{"class":74},[30,141775,55385],{"class":36},[30,141777,367],{"class":321},[30,141779,134214],{"class":74},[30,141781,134217],{"class":36},[30,141783,367],{"class":321},[30,141785,134222],{"class":74},[30,141787,51445],{"class":321},[157,141789,140149],{},[20,141791,141792],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,141793,141794],{"__ignoreMap":25},[30,141795,141796,141798,141800,141802,141804,141806,141808,141810,141812,141814,141816,141818],{"class":32,"line":33},[30,141797,1230],{"class":321},[30,141799,160],{"class":51438},[30,141801,55377],{"class":36},[30,141803,367],{"class":321},[30,141805,134207],{"class":74},[30,141807,55385],{"class":36},[30,141809,367],{"class":321},[30,141811,134214],{"class":74},[30,141813,134217],{"class":36},[30,141815,367],{"class":321},[30,141817,134222],{"class":74},[30,141819,51445],{"class":321},[287,141821,141823,141824,141827],{"id":141822},"_1633-registerarea-主体模块实现","16.3.3 ",[27,141825,141826],{},"registerarea"," 主体模块实现",[160,141829],{"style":126546,"src":141830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[157,141832,141833],{},"整个大盒子 高度为 522px，设置4个边框",[157,141835,140060],{},[20,141837,141838],{"className":126690,"code":130847,"language":126692,"meta":25,"style":25},[27,141839,141840,141846,141862],{"__ignoreMap":25},[30,141841,141842,141844],{"class":32,"line":33},[30,141843,51749],{"class":51438},[30,141845,15754],{"class":321},[30,141847,141848,141850,141852,141854,141856,141858,141860],{"class":32,"line":44},[30,141849,71034],{"class":40},[30,141851,51575],{"class":321},[30,141853,537],{"class":40},[30,141855,51630],{"class":317},[30,141857,51659],{"class":40},[30,141859,130082],{"class":40},[30,141861,1480],{"class":321},[30,141863,141864],{"class":32,"line":52},[30,141865,1751],{"class":321},[157,141867,140149],{},[20,141869,141870],{"className":126690,"code":130847,"language":126692,"meta":25,"style":25},[27,141871,141872,141878,141894],{"__ignoreMap":25},[30,141873,141874,141876],{"class":32,"line":33},[30,141875,51749],{"class":51438},[30,141877,15754],{"class":321},[30,141879,141880,141882,141884,141886,141888,141890,141892],{"class":32,"line":44},[30,141881,71034],{"class":40},[30,141883,51575],{"class":321},[30,141885,537],{"class":40},[30,141887,51630],{"class":317},[30,141889,51659],{"class":40},[30,141891,130082],{"class":40},[30,141893,1480],{"class":321},[30,141895,141896],{"class":32,"line":52},[30,141897,1751],{"class":321},[157,141899,141900],{},"1号盒子 是一个 h3 标签，放标题",[147,141902,141903],{},[150,141904,141905],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[157,141907,140060],{},[20,141909,141910],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,141911,141912,141918,141928],{"__ignoreMap":25},[30,141913,141914,141916],{"class":32,"line":33},[30,141915,130538],{"class":36},[30,141917,15754],{"class":321},[30,141919,141920,141922,141924,141926],{"class":32,"line":44},[30,141921,131170],{"class":40},[30,141923,51575],{"class":321},[30,141925,23918],{"class":40},[30,141927,1480],{"class":321},[30,141929,141930],{"class":32,"line":52},[30,141931,1751],{"class":321},[157,141933,140149],{},[20,141935,141936],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,141937,141938,141944,141954],{"__ignoreMap":25},[30,141939,141940,141942],{"class":32,"line":33},[30,141941,130538],{"class":36},[30,141943,15754],{"class":321},[30,141945,141946,141948,141950,141952],{"class":32,"line":44},[30,141947,131170],{"class":40},[30,141949,51575],{"class":321},[30,141951,23918],{"class":40},[30,141953,1480],{"class":321},[30,141955,141956],{"class":32,"line":52},[30,141957,1751],{"class":321},[157,141959,141960],{},"2号盒子 里面放注册的内容",[147,141962,141963,141966,141975,141989,142002,142005,142008,142026,142040],{},[150,141964,141965],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[150,141967,141968,141969,141971,141972,141974],{},"里面的内容利用 ",[27,141970,147],{}," 包含 ",[27,141973,150],{}," 来实现的（不需要用表格）",[150,141976,139204,141977,141979,141980,141982,141983,141985,141986,141988],{},[27,141978,150],{}," 里面，左侧放 ",[27,141981,33746],{}," 标签， 中间放",[27,141984,53959],{}," 标签， 右侧放 ",[27,141987,30],{}," 提示信息",[150,141990,141991,141992,141994,141995,141997,141998,142001],{},"左侧 ",[27,141993,33746],{},"里面的文字都是右对齐，我们可以给",[27,141996,33746],{},"设置一个宽度（88px），然后利用",[27,141999,142000],{},"text-align"," 来设置右对齐",[150,142003,142004],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[150,142006,142007],{},"右侧 span修饰一下文字颜色",[150,142009,142010,142011],{},"提示信息的样式优化",[147,142012,142013,142016,142019],{},[150,142014,142015],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[150,142017,142018],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[150,142020,142021,142022,142025],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[27,142023,142024],{},"vertical-algin"," 来设置 图片与文字对齐方式",[150,142027,142028,142029],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[147,142030,142031,142037],{},[150,142032,142033,142034,142036],{},"设置 ",[27,142035,23735],{}," 的 左右 12px 的内边距，设置一下文字颜色",[150,142038,142039],{},"分别设置 背景颜色",[150,142041,142042,142043,142045],{},"同意协议 和 完成注册 都是用 ",[27,142044,150],{}," 进行包裹",[157,142047,140060],{},[20,142049,142050],{"className":126690,"code":140633,"language":126692,"meta":25,"style":25},[27,142051,142052,142058,142068],{"__ignoreMap":25},[30,142053,142054,142056],{"class":32,"line":33},[30,142055,51749],{"class":51438},[30,142057,15754],{"class":321},[30,142059,142060,142062,142064,142066],{"class":32,"line":44},[30,142061,71016],{"class":40},[30,142063,51575],{"class":321},[30,142065,140650],{"class":40},[30,142067,1480],{"class":321},[30,142069,142070],{"class":32,"line":52},[30,142071,1751],{"class":321},[157,142073,140149],{},[20,142075,142076],{"className":126690,"code":140633,"language":126692,"meta":25,"style":25},[27,142077,142078,142084,142094],{"__ignoreMap":25},[30,142079,142080,142082],{"class":32,"line":33},[30,142081,51749],{"class":51438},[30,142083,15754],{"class":321},[30,142085,142086,142088,142090,142092],{"class":32,"line":44},[30,142087,71016],{"class":40},[30,142089,51575],{"class":321},[30,142091,140650],{"class":40},[30,142093,1480],{"class":321},[30,142095,142096],{"class":32,"line":52},[30,142097,1751],{"class":321},[287,142099,142101],{"id":142100},"_1634-底部实现","16.3.4 底部实现",[157,142103,140060],{},[20,142105,142106],{"className":126690,"code":140633,"language":126692,"meta":25,"style":25},[27,142107,142108,142114,142124],{"__ignoreMap":25},[30,142109,142110,142112],{"class":32,"line":33},[30,142111,51749],{"class":51438},[30,142113,15754],{"class":321},[30,142115,142116,142118,142120,142122],{"class":32,"line":44},[30,142117,71016],{"class":40},[30,142119,51575],{"class":321},[30,142121,140650],{"class":40},[30,142123,1480],{"class":321},[30,142125,142126],{"class":32,"line":52},[30,142127,1751],{"class":321},[157,142129,140149],{},[20,142131,142132],{"className":127437,"code":130794,"language":127439,"meta":25,"style":25},[27,142133,142134,142138,142152,142156],{"__ignoreMap":25},[30,142135,142136],{"class":32,"line":33},[30,142137,130801],{"class":379},[30,142139,142140,142142,142144,142146,142148,142150],{"class":32,"line":44},[30,142141,1230],{"class":321},[30,142143,51749],{"class":51438},[30,142145,53624],{"class":36},[30,142147,367],{"class":321},[30,142149,130814],{"class":74},[30,142151,51445],{"class":321},[30,142153,142154],{"class":32,"line":52},[30,142155,130821],{"class":321},[30,142157,142158,142160,142162],{"class":32,"line":60},[30,142159,51923],{"class":321},[30,142161,51749],{"class":51438},[30,142163,51445],{"class":321},[15,142165,142167],{"id":142166},"_164-项目总结","16.4 项目总结",[271,142169,142170,142173,142176,142179],{},[150,142171,142172],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[150,142174,142175],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[150,142177,142178],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[150,142180,142181],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[160,142183],{"style":126546,"src":142184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[271,142186,142187],{"start":68},[150,142188,142189],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[160,142191],{"style":126546,"src":142192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[271,142194,142195],{"start":80},[150,142196,142197],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[160,142199],{"style":126546,"src":142200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[20,142202,142203],{"className":127437,"code":136847,"language":127439,"meta":25,"style":25},[27,142204,142205],{"__ignoreMap":25},[30,142206,142207,142209,142211,142213,142215,142217,142219,142221,142223,142225,142227,142229],{"class":32,"line":33},[30,142208,1230],{"class":321},[30,142210,53959],{"class":51438},[30,142212,53962],{"class":36},[30,142214,367],{"class":321},[30,142216,62837],{"class":74},[30,142218,15102],{"class":36},[30,142220,367],{"class":321},[30,142222,136868],{"class":74},[30,142224,61158],{"class":36},[30,142226,367],{"class":321},[30,142228,136875],{"class":74},[30,142230,51445],{"class":321},[271,142232,142233,142236],{"start":88},[150,142234,142235],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[150,142237,142238],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[234,142240,142241],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":44,"depth":44,"links":142243},[142244,142249,142256,142264],{"id":139870,"depth":44,"text":139871,"children":142245},[142246,142247,142248],{"id":139874,"depth":52,"text":139875},{"id":140605,"depth":52,"text":140606},{"id":140918,"depth":52,"text":140919},{"id":141218,"depth":44,"text":141219,"children":142250},[142251,142252,142254],{"id":141222,"depth":52,"text":141223},{"id":141240,"depth":52,"text":142253},"16.2.2 列表页 header 和 nav 修改",{"id":141524,"depth":52,"text":142255},"16.2.3 列表页主体 sk_container",{"id":141716,"depth":44,"text":141717,"children":142257},[142258,142259,142261,142263],{"id":141731,"depth":52,"text":141732},{"id":141743,"depth":52,"text":142260},"16.3.2 header 头部实现",{"id":141822,"depth":52,"text":142262},"16.3.3 registerarea 主体模块实现",{"id":142100,"depth":52,"text":142101},{"id":142166,"depth":44,"text":142167},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139862,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142271,"title":142272,"body":142273,"description":242,"extension":243,"meta":142381,"navigation":245,"path":142382,"seo":142383,"stem":142384,"__hash__":142385},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142274,"toc":142376},[142275,142278,142282,142285,142288,142297,142306,142310,142315,142322,142340,142343,142346,142349,142352,142355,142358,142361,142364,142367,142370,142373],[10,142276,142272],{"id":142277},"_17-web服务器与网站发布",[15,142279,142281],{"id":142280},"_171-web服务器","17.1 Web服务器",[157,142283,142284],{},"把自己网站上传到服务器上，可以让其他人访问",[160,142286],{"style":126546,"src":142287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[157,142289,142290,142293,142294],{},[469,142291,142292],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[469,142295,142296],{},"Web 服务器等",[157,142298,142299,142300,101156,142303,25878],{},"根据服务器在网络中所在的位置不同，又可分为 ",[469,142301,142302],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[469,142304,142305],{},"远程服务器",[287,142307,142309],{"id":142308},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[157,142311,142312],{},[469,142313,142314],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[157,142316,142317,142318],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[558,142319,142320],{"href":142320,"rel":142321},"http:\u002F\u002Ffree.3v.do\u002F",[24045],[147,142323,142324,142327,142330,142337],{},[150,142325,142326],{},"去免费空间网站注册账号。",[150,142328,142329],{},"记录下主机名、用户名、密码、域名。",[150,142331,142332,142333,142336],{},"利用 ",[27,142334,142335],{},"utftp"," 软件 上传网站到远程服务器",[150,142338,142339],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[157,142341,142342],{},"使用软件上传，对上传软件文件进行解压",[160,142344],{"style":126546,"src":142345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[160,142347],{"style":126546,"src":142348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[157,142350,142351],{},"输入刚刚申请的服务器账号信息：",[160,142353],{"style":126546,"src":142354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[160,142356],{"style":126546,"src":142357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[160,142359],{"style":126546,"src":142360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[160,142362],{"style":126546,"src":142363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[157,142365,142366],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[160,142368],{"style":126546,"src":142369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[157,142371,142372],{},"浏览器输入域名即可访问",[157,142374,142375],{},"首页一定必须是index",{"title":25,"searchDepth":44,"depth":44,"links":142377},[142378],{"id":142280,"depth":44,"text":142281,"children":142379},[142380],{"id":142308,"depth":52,"text":142309},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142272,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142387,"title":142388,"body":142389,"description":242,"extension":243,"meta":143316,"navigation":245,"path":143317,"seo":143318,"stem":143319,"__hash__":143320},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142390,"toc":143299},[142391,142394,142398,142401,142404,142415,142418,142422,142426,142431,142434,142437,142440,142443,142447,142473,142477,142481,142484,142487,142491,142524,142528,142531,142534,142598,142602,142606,142609,142612,142615,142619,142664,142668,142671,142701,142705,142709,142712,142715,142719,142722,142791,142794,142902,142904,142910,142914,142917,142920,143016,143019,143023,143047,143051,143054,143058,143061,143065,143068,143071,143074,143077,143081,143084,143087,143091,143095,143098,143101,143104,143107,143111,143114,143118,143121,143124,143169,143173,143177,143180,143183,143186,143218,143222,143225,143259,143263,143266,143296],[10,142392,142388],{"id":142393},"_18-2d动画与3d转换",[15,142395,142397],{"id":142396},"_181-css3-2d转换","18.1 CSS3 2D转换",[157,142399,142400],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[157,142402,142403],{},"转换（transform）你可以简单理解为变形",[147,142405,142406,142409,142412],{},[150,142407,142408],{},"移动：translate",[150,142410,142411],{},"旋转：rotate",[150,142413,142414],{},"缩放：scale",[160,142416],{"style":126546,"src":142417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[287,142419,142421],{"id":142420},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22180,142423,142425],{"id":142424},"_18111-translate介绍","18.1.1.1 translate介绍",[157,142427,142428,142429],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[469,142430,133349],{},[160,142432],{"style":126546,"src":142433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[157,142435,142436],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[157,142438,142439],{},"对于行内元素无效",[157,142441,142442],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22180,142444,142446],{"id":142445},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[20,142448,142449],{"className":126690,"code":138879,"language":126692,"meta":25,"style":25},[27,142450,142451,142457,142469],{"__ignoreMap":25},[30,142452,142453,142455],{"class":32,"line":33},[30,142454,51749],{"class":51438},[30,142456,15754],{"class":321},[30,142458,142459,142461,142463,142465,142467],{"class":32,"line":44},[30,142460,70608],{"class":40},[30,142462,51575],{"class":321},[30,142464,511],{"class":40},[30,142466,51694],{"class":40},[30,142468,1480],{"class":321},[30,142470,142471],{"class":32,"line":52},[30,142472,1751],{"class":321},[287,142474,142476],{"id":142475},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22180,142478,142480],{"id":142479},"_18121-rotate介绍","18.1.2.1 rotate介绍",[157,142482,142483],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[160,142485],{"style":126546,"src":142486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22180,142488,142490],{"id":142489},"_18122-旋转效果","18.1.2.2 旋转效果",[20,142492,142494],{"className":126690,"code":142493,"language":126692,"meta":25,"style":25},"div {\n  transform: rotate(45deg);\n}\n",[27,142495,142496,142502,142520],{"__ignoreMap":25},[30,142497,142498,142500],{"class":32,"line":33},[30,142499,51749],{"class":51438},[30,142501,15754],{"class":321},[30,142503,142504,142506,142508,142511,142513,142515,142518],{"class":32,"line":44},[30,142505,136674],{"class":40},[30,142507,51575],{"class":321},[30,142509,142510],{"class":40},"rotate",[30,142512,322],{"class":321},[30,142514,849],{"class":40},[30,142516,142517],{"class":317},"deg",[30,142519,2901],{"class":321},[30,142521,142522],{"class":32,"line":52},[30,142523,1751],{"class":321},[22180,142525,142527],{"id":142526},"_18123-三角做法","18.1.2.3 三角做法",[157,142529,142530],{},"该下标当经过最外层大盒子时会实现向上反转",[160,142532],{"style":126546,"src":142533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[20,142535,142536],{"className":126690,"code":135210,"language":126692,"meta":25,"style":25},[27,142537,142538,142542,142548,142558,142568,142584,142594],{"__ignoreMap":25},[30,142539,142540],{"class":32,"line":33},[30,142541,135217],{"class":379},[30,142543,142544,142546],{"class":32,"line":44},[30,142545,135222],{"class":36},[30,142547,15754],{"class":321},[30,142549,142550,142552,142554,142556],{"class":32,"line":52},[30,142551,70706],{"class":40},[30,142553,51575],{"class":321},[30,142555,511],{"class":40},[30,142557,1480],{"class":321},[30,142559,142560,142562,142564,142566],{"class":32,"line":60},[30,142561,70926],{"class":40},[30,142563,51575],{"class":321},[30,142565,511],{"class":40},[30,142567,1480],{"class":321},[30,142569,142570,142572,142574,142576,142578,142580,142582],{"class":32,"line":68},[30,142571,71034],{"class":40},[30,142573,51575],{"class":321},[30,142575,766],{"class":40},[30,142577,51630],{"class":317},[30,142579,51659],{"class":40},[30,142581,64129],{"class":40},[30,142583,1480],{"class":321},[30,142585,142586,142588,142590,142592],{"class":32,"line":80},[30,142587,135265],{"class":40},[30,142589,51575],{"class":321},[30,142591,62507],{"class":40},[30,142593,1480],{"class":321},[30,142595,142596],{"class":32,"line":88},[30,142597,1751],{"class":321},[287,142599,142601],{"id":142600},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22180,142603,142605],{"id":142604},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[157,142607,142608],{},"设置中心点",[160,142610],{"style":126546,"src":142611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[157,142613,142614],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22180,142616,142618],{"id":142617},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[20,142620,142622],{"className":126690,"code":142621,"language":126692,"meta":25,"style":25},"\u002F* 转换中心点 *\u002F\ndiv {\n  transform-origin: center center;  \u002F* 默认 *\u002F\n  \u002F* transform-origin: 50% 50%; *\u002F\n  \u002F* transform-origin: left top; *\u002F\n}\n",[27,142623,142624,142629,142635,142650,142655,142660],{"__ignoreMap":25},[30,142625,142626],{"class":32,"line":33},[30,142627,142628],{"class":379},"\u002F* 转换中心点 *\u002F\n",[30,142630,142631,142633],{"class":32,"line":44},[30,142632,51749],{"class":51438},[30,142634,15754],{"class":321},[30,142636,142637,142640,142642,142644,142646,142648],{"class":32,"line":52},[30,142638,142639],{"class":40},"  transform-origin",[30,142641,51575],{"class":321},[30,142643,51730],{"class":40},[30,142645,17326],{"class":40},[30,142647,130553],{"class":321},[30,142649,135363],{"class":379},[30,142651,142652],{"class":32,"line":60},[30,142653,142654],{"class":379},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[30,142656,142657],{"class":32,"line":68},[30,142658,142659],{"class":379},"  \u002F* transform-origin: left top; *\u002F\n",[30,142661,142662],{"class":32,"line":80},[30,142663,1751],{"class":321},[22180,142665,142667],{"id":142666},"_18133-旋转案例","18.1.3.3 旋转案例",[160,142669],{"style":126546,"src":142670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[20,142672,142673],{"className":126690,"code":142493,"language":126692,"meta":25,"style":25},[27,142674,142675,142681,142697],{"__ignoreMap":25},[30,142676,142677,142679],{"class":32,"line":33},[30,142678,51749],{"class":51438},[30,142680,15754],{"class":321},[30,142682,142683,142685,142687,142689,142691,142693,142695],{"class":32,"line":44},[30,142684,136674],{"class":40},[30,142686,51575],{"class":321},[30,142688,142510],{"class":40},[30,142690,322],{"class":321},[30,142692,849],{"class":40},[30,142694,142517],{"class":317},[30,142696,2901],{"class":321},[30,142698,142699],{"class":32,"line":52},[30,142700,1751],{"class":321},[287,142702,142704],{"id":142703},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22180,142706,142708],{"id":142707},"_18141-scale介绍","18.1.4.1 scale介绍",[157,142710,142711],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[160,142713],{"style":126546,"src":142714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22180,142716,142718],{"id":142717},"_18142-分页按钮","18.1.4.2 分页按钮",[160,142720],{"style":126546,"src":142721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[20,142723,142725],{"className":126690,"code":142724,"language":126692,"meta":25,"style":25},"div {\n  transform: scale(1.2);\n}\n```Css\n\u002F* 2D 缩放 *\u002F\ndiv {\n  transform: scale(1.2);\n  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n}\n",[27,142726,142727,142733,142749,142753,142757,142762,142768,142782,142787],{"__ignoreMap":25},[30,142728,142729,142731],{"class":32,"line":33},[30,142730,51749],{"class":51438},[30,142732,15754],{"class":321},[30,142734,142735,142737,142739,142742,142744,142747],{"class":32,"line":44},[30,142736,136674],{"class":40},[30,142738,51575],{"class":321},[30,142740,142741],{"class":40},"scale",[30,142743,322],{"class":321},[30,142745,142746],{"class":40},"1.2",[30,142748,2901],{"class":321},[30,142750,142751],{"class":32,"line":52},[30,142752,1751],{"class":321},[30,142754,142755],{"class":32,"line":60},[30,142756,136151],{"class":321},[30,142758,142759],{"class":32,"line":68},[30,142760,142761],{"class":379},"\u002F* 2D 缩放 *\u002F\n",[30,142763,142764,142766],{"class":32,"line":80},[30,142765,51749],{"class":51438},[30,142767,15754],{"class":321},[30,142769,142770,142772,142774,142776,142778,142780],{"class":32,"line":88},[30,142771,136674],{"class":40},[30,142773,51575],{"class":321},[30,142775,142741],{"class":40},[30,142777,322],{"class":321},[30,142779,142746],{"class":40},[30,142781,2901],{"class":321},[30,142783,142784],{"class":32,"line":96},[30,142785,142786],{"class":379},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[30,142788,142789],{"class":32,"line":104},[30,142790,1751],{"class":321},[157,142792,142793],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[20,142795,142797],{"className":126690,"code":142796,"language":126692,"meta":25,"style":25},"\u002F* 定义动画 *\u002F\n@keyframes move {\n  0% { transform: translateX(0); }\n  100% { transform: translateX(100px); }\n}\n\u002F* 调用动画 *\u002F\ndiv {\n  animation: move 1s ease 0s infinite alternate;\n}\n",[27,142798,142799,142804,142814,142835,142856,142860,142865,142871,142898],{"__ignoreMap":25},[30,142800,142801],{"class":32,"line":33},[30,142802,142803],{"class":379},"\u002F* 定义动画 *\u002F\n",[30,142805,142806,142809,142812],{"class":32,"line":44},[30,142807,142808],{"class":317},"@keyframes",[30,142810,142811],{"class":5398}," move",[30,142813,15754],{"class":321},[30,142815,142816,142819,142821,142823,142825,142828,142830,142832],{"class":32,"line":52},[30,142817,142818],{"class":36},"  0%",[30,142820,79945],{"class":321},[30,142822,48272],{"class":40},[30,142824,51575],{"class":321},[30,142826,142827],{"class":40},"translateX",[30,142829,322],{"class":321},[30,142831,511],{"class":40},[30,142833,142834],{"class":321},"); }\n",[30,142836,142837,142840,142842,142844,142846,142848,142850,142852,142854],{"class":32,"line":60},[30,142838,142839],{"class":36},"  100%",[30,142841,79945],{"class":321},[30,142843,48272],{"class":40},[30,142845,51575],{"class":321},[30,142847,142827],{"class":40},[30,142849,322],{"class":321},[30,142851,631],{"class":40},[30,142853,51630],{"class":317},[30,142855,142834],{"class":321},[30,142857,142858],{"class":32,"line":68},[30,142859,1751],{"class":321},[30,142861,142862],{"class":32,"line":80},[30,142863,142864],{"class":379},"\u002F* 调用动画 *\u002F\n",[30,142866,142867,142869],{"class":32,"line":88},[30,142868,51749],{"class":51438},[30,142870,15754],{"class":321},[30,142872,142873,142876,142878,142880,142882,142884,142886,142888,142890,142893,142896],{"class":32,"line":96},[30,142874,142875],{"class":40},"  animation",[30,142877,51575],{"class":321},[30,142879,135376],{"class":40},[30,142881,25291],{"class":40},[30,142883,1015],{"class":317},[30,142885,78818],{"class":40},[30,142887,4275],{"class":40},[30,142889,1015],{"class":317},[30,142891,142892],{"class":40}," infinite",[30,142894,142895],{"class":40}," alternate",[30,142897,1480],{"class":321},[30,142899,142900],{"class":32,"line":104},[30,142901,1751],{"class":321},[157,142903,142793],{},[20,142905,142908],{"className":142906,"code":142907,"language":5369},[5367],"\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",[27,142909,142907],{"__ignoreMap":25},[22180,142911,142913],{"id":142912},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[157,142915,142916],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[160,142918],{"style":126546,"src":142919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[20,142921,142922],{"className":126690,"code":142796,"language":126692,"meta":25,"style":25},[27,142923,142924,142928,142936,142954,142974,142978,142982,142988,143012],{"__ignoreMap":25},[30,142925,142926],{"class":32,"line":33},[30,142927,142803],{"class":379},[30,142929,142930,142932,142934],{"class":32,"line":44},[30,142931,142808],{"class":317},[30,142933,142811],{"class":5398},[30,142935,15754],{"class":321},[30,142937,142938,142940,142942,142944,142946,142948,142950,142952],{"class":32,"line":52},[30,142939,142818],{"class":36},[30,142941,79945],{"class":321},[30,142943,48272],{"class":40},[30,142945,51575],{"class":321},[30,142947,142827],{"class":40},[30,142949,322],{"class":321},[30,142951,511],{"class":40},[30,142953,142834],{"class":321},[30,142955,142956,142958,142960,142962,142964,142966,142968,142970,142972],{"class":32,"line":60},[30,142957,142839],{"class":36},[30,142959,79945],{"class":321},[30,142961,48272],{"class":40},[30,142963,51575],{"class":321},[30,142965,142827],{"class":40},[30,142967,322],{"class":321},[30,142969,631],{"class":40},[30,142971,51630],{"class":317},[30,142973,142834],{"class":321},[30,142975,142976],{"class":32,"line":68},[30,142977,1751],{"class":321},[30,142979,142980],{"class":32,"line":80},[30,142981,142864],{"class":379},[30,142983,142984,142986],{"class":32,"line":88},[30,142985,51749],{"class":51438},[30,142987,15754],{"class":321},[30,142989,142990,142992,142994,142996,142998,143000,143002,143004,143006,143008,143010],{"class":32,"line":96},[30,142991,142875],{"class":40},[30,142993,51575],{"class":321},[30,142995,135376],{"class":40},[30,142997,25291],{"class":40},[30,142999,1015],{"class":317},[30,143001,78818],{"class":40},[30,143003,4275],{"class":40},[30,143005,1015],{"class":317},[30,143007,142892],{"class":40},[30,143009,142895],{"class":40},[30,143011,1480],{"class":321},[30,143013,143014],{"class":32,"line":104},[30,143015,1751],{"class":321},[157,143017,143018],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[287,143020,143022],{"id":143021},"_1823-知识点回顾","18.2.3 知识点回顾",[20,143024,143025],{"className":126690,"code":128859,"language":126692,"meta":25,"style":25},[27,143026,143027,143033,143043],{"__ignoreMap":25},[30,143028,143029,143031],{"class":32,"line":33},[30,143030,51749],{"class":51438},[30,143032,15754],{"class":321},[30,143034,143035,143037,143039,143041],{"class":32,"line":44},[30,143036,128872],{"class":40},[30,143038,51575],{"class":321},[30,143040,61874],{"class":40},[30,143042,1480],{"class":321},[30,143044,143045],{"class":32,"line":52},[30,143046,1751],{"class":321},[15,143048,143050],{"id":143049},"_183-3d-转换","18.3 3D 转换",[157,143052,143053],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[287,143055,143057],{"id":143056},"_1831-坐标轴认识","18.3.1 坐标轴认识",[160,143059],{"style":126546,"src":143060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[287,143062,143064],{"id":143063},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[160,143066],{"style":126546,"src":143067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[157,143069,143070],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[157,143072,143073],{},"translate3d的效果需要搭配透视perspective来使用",[160,143075],{"style":126546,"src":143076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[287,143078,143080],{"id":143079},"_1833-透视-perspective","18.3.3 透视 perspective",[160,143082],{"style":126546,"src":143083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[157,143085,143086],{},"透视写在父盒子上，单位为像素",[287,143088,143090],{"id":143089},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22180,143092,143094],{"id":143093},"_18341-分开解释","18.3.4.1 分开解释",[160,143096],{"style":126546,"src":143097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[160,143099],{"style":126546,"src":143100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[160,143102],{"style":126546,"src":143103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[157,143105,143106],{},"总结来说就是左手原则",[22180,143108,143110],{"id":143109},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[160,143112],{"style":126546,"src":143113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[287,143115,143117],{"id":143116},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[160,143119],{"style":126546,"src":143120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[160,143122],{"style":126546,"src":143123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[20,143125,143127],{"className":126690,"code":143126,"language":126692,"meta":25,"style":25},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[27,143128,143129,143135,143148,143165],{"__ignoreMap":25},[30,143130,143131,143133],{"class":32,"line":33},[30,143132,51749],{"class":51438},[30,143134,15754],{"class":321},[30,143136,143137,143140,143142,143144,143146],{"class":32,"line":44},[30,143138,143139],{"class":40},"  perspective",[30,143141,51575],{"class":321},[30,143143,65212],{"class":40},[30,143145,51630],{"class":317},[30,143147,1480],{"class":321},[30,143149,143150,143152,143154,143157,143159,143161,143163],{"class":32,"line":52},[30,143151,136674],{"class":40},[30,143153,51575],{"class":321},[30,143155,143156],{"class":40},"rotateX",[30,143158,322],{"class":321},[30,143160,849],{"class":40},[30,143162,142517],{"class":317},[30,143164,2901],{"class":321},[30,143166,143167],{"class":32,"line":60},[30,143168,1751],{"class":321},[287,143170,143172],{"id":143171},"_1836-案例","18.3.6 案例",[22180,143174,143176],{"id":143175},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[160,143178],{"style":126546,"src":143179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[160,143181],{"style":126546,"src":143182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[160,143184],{"style":126546,"src":143185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[20,143187,143189],{"className":126690,"code":143188,"language":126692,"meta":25,"style":25},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[27,143190,143191,143196,143202,143214],{"__ignoreMap":25},[30,143192,143193],{"class":32,"line":33},[30,143194,143195],{"class":379},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[30,143197,143198,143200],{"class":32,"line":44},[30,143199,133687],{"class":36},[30,143201,15754],{"class":321},[30,143203,143204,143206,143208,143210,143212],{"class":32,"line":52},[30,143205,143139],{"class":40},[30,143207,51575],{"class":321},[30,143209,65212],{"class":40},[30,143211,51630],{"class":317},[30,143213,1480],{"class":321},[30,143215,143216],{"class":32,"line":60},[30,143217,1751],{"class":321},[22180,143219,143221],{"id":143220},"_18362-3d导航栏","18.3.6.2 3D导航栏",[160,143223],{"style":126546,"src":143224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[20,143226,143227],{"className":127437,"code":130794,"language":127439,"meta":25,"style":25},[27,143228,143229,143233,143247,143251],{"__ignoreMap":25},[30,143230,143231],{"class":32,"line":33},[30,143232,130801],{"class":379},[30,143234,143235,143237,143239,143241,143243,143245],{"class":32,"line":44},[30,143236,1230],{"class":321},[30,143238,51749],{"class":51438},[30,143240,53624],{"class":36},[30,143242,367],{"class":321},[30,143244,130814],{"class":74},[30,143246,51445],{"class":321},[30,143248,143249],{"class":32,"line":52},[30,143250,130821],{"class":321},[30,143252,143253,143255,143257],{"class":32,"line":60},[30,143254,51923],{"class":321},[30,143256,51749],{"class":51438},[30,143258,51445],{"class":321},[22180,143260,143262],{"id":143261},"_18363-旋转木马","18.3.6.3 旋转木马",[160,143264],{"style":126546,"src":143265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[20,143267,143268],{"className":126690,"code":142493,"language":126692,"meta":25,"style":25},[27,143269,143270,143276,143292],{"__ignoreMap":25},[30,143271,143272,143274],{"class":32,"line":33},[30,143273,51749],{"class":51438},[30,143275,15754],{"class":321},[30,143277,143278,143280,143282,143284,143286,143288,143290],{"class":32,"line":44},[30,143279,136674],{"class":40},[30,143281,51575],{"class":321},[30,143283,142510],{"class":40},[30,143285,322],{"class":321},[30,143287,849],{"class":40},[30,143289,142517],{"class":317},[30,143291,2901],{"class":321},[30,143293,143294],{"class":32,"line":52},[30,143295,1751],{"class":321},[234,143297,143298],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":44,"depth":44,"links":143300},[143301,143308],{"id":142396,"depth":44,"text":142397,"children":143302},[143303,143304,143305,143306,143307],{"id":142420,"depth":52,"text":142421},{"id":142475,"depth":52,"text":142476},{"id":142600,"depth":52,"text":142601},{"id":142703,"depth":52,"text":142704},{"id":143021,"depth":52,"text":143022},{"id":143049,"depth":44,"text":143050,"children":143309},[143310,143311,143312,143313,143314,143315],{"id":143056,"depth":52,"text":143057},{"id":143063,"depth":52,"text":143064},{"id":143079,"depth":52,"text":143080},{"id":143089,"depth":52,"text":143090},{"id":143116,"depth":52,"text":143117},{"id":143171,"depth":52,"text":143172},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142388,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143322,"title":143323,"body":143324,"description":242,"extension":243,"meta":143527,"navigation":245,"path":143528,"seo":143529,"stem":143530,"__hash__":143531},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143325,"toc":143516},[143326,143329,143333,143336,143339,143343,143346,143349,143352,143356,143359,143363,143366,143370,143373,143377,143391,143395,143420,143423,143426,143443,143447,143451,143454,143457,143461,143464,143467,143485,143489,143492,143506,143510,143513],[10,143327,143323],{"id":143328},"_19-移动端基础-前缀现状与视口",[15,143330,143332],{"id":143331},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[160,143334],{"style":126546,"src":143335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[157,143337,143338],{},"意思就是加个前缀，增加兼容性",[15,143340,143342],{"id":143341},"_192-移动端现状认识","19.2 移动端现状认识",[160,143344],{"style":126546,"src":143345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[157,143347,143348],{},"调试方法：",[160,143350],{"style":126546,"src":143351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[15,143353,143355],{"id":143354},"_193-视口","19.3 视口",[157,143357,143358],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[287,143360,143362],{"id":143361},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[160,143364],{"style":126546,"src":143365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[287,143367,143369],{"id":143368},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[160,143371],{"style":126546,"src":143372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[287,143374,143376],{"id":143375},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[147,143378,143379,143382,143385,143388],{},[150,143380,143381],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[150,143383,143384],{},"理想视口，对设备来讲，是最理想的视口尺寸",[150,143386,143387],{},"需要手动添写meta视口标签通知浏览器操作",[150,143389,143390],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[287,143392,143394],{"id":143393},"_1934-meta视口标签","19.3.4 meta视口标签",[20,143396,143398],{"className":127437,"code":143397,"language":127439,"meta":25,"style":25},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[27,143399,143400],{"__ignoreMap":25},[30,143401,143402,143404,143406,143408,143410,143412,143414,143416,143418],{"class":32,"line":33},[30,143403,1230],{"class":321},[30,143405,51482],{"class":51438},[30,143407,15102],{"class":36},[30,143409,367],{"class":321},[30,143411,51529],{"class":74},[30,143413,51509],{"class":36},[30,143415,367],{"class":321},[30,143417,51536],{"class":74},[30,143419,51445],{"class":321},[160,143421],{"style":126546,"src":143422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[157,143424,143425],{},"标准视口设置：",[271,143427,143428,143431,143434,143437,143440],{},[150,143429,143430],{},"视口宽度和设备保持一致",[150,143432,143433],{},"视口的默认缩放比例1.0",[150,143435,143436],{},"不允许用户自行缩放",[150,143438,143439],{},"最大允许的缩放比例1.0",[150,143441,143442],{},"最小允许的缩放比例1.0",[287,143444,143446],{"id":143445},"_1935-二倍图","19.3.5 二倍图",[22180,143448,143450],{"id":143449},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[160,143452],{"style":126546,"src":143453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[160,143455],{"style":126546,"src":143456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22180,143458,143460],{"id":143459},"_19352-多倍图","19.3.5.2 多倍图",[160,143462],{"style":126546,"src":143463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[157,143465,143466],{},"二倍图法，代码如下：",[20,143468,143470],{"className":126690,"code":143469,"language":126692,"meta":25,"style":25},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[27,143471,143472,143477],{"__ignoreMap":25},[30,143473,143474],{"class":32,"line":33},[30,143475,143476],{"class":379},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[30,143478,143479,143482],{"class":32,"line":44},[30,143480,143481],{"class":51438},"background-size",[30,143483,143484],{"class":321},": 50% 50%;\n",[22180,143486,143488],{"id":143487},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[160,143490],{"style":126546,"src":143491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[271,143493,143494,143497,143500,143503],{},[150,143495,143496],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[150,143498,143499],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[150,143501,143502],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[150,143504,143505],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22180,143507,143509],{"id":143508},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[160,143511],{"style":126546,"src":143512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[234,143514,143515],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":44,"depth":44,"links":143517},[143518,143519,143520],{"id":143331,"depth":44,"text":143332},{"id":143341,"depth":44,"text":143342},{"id":143354,"depth":44,"text":143355,"children":143521},[143522,143523,143524,143525,143526],{"id":143361,"depth":52,"text":143362},{"id":143368,"depth":52,"text":143369},{"id":143375,"depth":52,"text":143376},{"id":143393,"depth":52,"text":143394},{"id":143445,"depth":52,"text":143446},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143323,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143533,"title":143534,"body":143535,"description":242,"extension":243,"meta":144412,"navigation":245,"path":144413,"seo":144414,"stem":144415,"__hash__":144416},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143536,"toc":144396},[143537,143540,143544,143551,143554,143561,143564,143569,143572,143576,143580,143587,143590,143593,143597,143600,143603,143606,143609,143612,143616,143619,143623,143625,143628,143631,143634,143637,143639,143642,143644,143674,143676,143706,143710,143713,143717,143720,143737,143740,143743,143819,143821,143824,143827,143830,143833,143835,143838,143841,143845,143867,143870,143873,143877,143880,143886,143889,143893,143896,143899,143903,143906,143909,143912,143916,143919,143922,143925,143928,143932,143935,143939,143946,143949,143952,143955,143958,143968,143971,143974,143981,143984,143988,143991,143994,143998,144001,144004,144007,144052,144055,144058,144061,144063,144192,144194,144232,144235,144238,144240,144358,144360,144394],[10,143538,143534],{"id":143539},"_20-移动端布局实战上篇",[15,143541,143543],{"id":143542},"_201-移动端主流方案","20.1 移动端主流方案",[271,143545,143546],{},[150,143547,143548],{},[469,143549,143550],{},"单独移动端页面（主流）",[160,143552],{"style":126546,"src":143553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[271,143555,143556],{"start":44},[150,143557,143558],{},[469,143559,143560],{},"响应式兼容PC移动端",[160,143562],{"style":126546,"src":143563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[271,143565,143566],{"start":52},[150,143567,143568],{},"两种页面选型布局方式",[160,143570],{"style":126546,"src":143571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[15,143573,143575],{"id":143574},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[287,143577,143579],{"id":143578},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[157,143581,143582,143583],{},"官网地址： ",[558,143584,143585],{"href":143585,"rel":143586},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24045],[160,143588],{"style":126546,"src":143589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[160,143591],{"style":126546,"src":143592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[287,143594,143596],{"id":143595},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[160,143598],{"style":126546,"src":143599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[160,143601],{"style":126546,"src":143602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[157,143604,143605],{},"去除高亮：",[157,143607,143608],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[157,143610,143611],{},"-webkit- tap-highlight-color: transparent;",[15,143613,143615],{"id":143614},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[160,143617],{"style":126546,"src":143618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[15,143620,143622],{"id":143621},"_204-流式布局案例","20.4 流式布局案例",[157,143624,351],{},[157,143626,143627],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[157,143629,143630],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[157,143632,143633],{},"图片格式：",[160,143635],{"style":126546,"src":143636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[157,143638,135733],{},[160,143640],{"style":126546,"src":143641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[157,143643,140060],{},[20,143645,143646],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,143647,143648],{"__ignoreMap":25},[30,143649,143650,143652,143654,143656,143658,143660,143662,143664,143666,143668,143670,143672],{"class":32,"line":33},[30,143651,1230],{"class":321},[30,143653,160],{"class":51438},[30,143655,55377],{"class":36},[30,143657,367],{"class":321},[30,143659,134207],{"class":74},[30,143661,55385],{"class":36},[30,143663,367],{"class":321},[30,143665,134214],{"class":74},[30,143667,134217],{"class":36},[30,143669,367],{"class":321},[30,143671,134222],{"class":74},[30,143673,51445],{"class":321},[157,143675,140149],{},[20,143677,143678],{"className":127437,"code":134192,"language":127439,"meta":25,"style":25},[27,143679,143680],{"__ignoreMap":25},[30,143681,143682,143684,143686,143688,143690,143692,143694,143696,143698,143700,143702,143704],{"class":32,"line":33},[30,143683,1230],{"class":321},[30,143685,160],{"class":51438},[30,143687,55377],{"class":36},[30,143689,367],{"class":321},[30,143691,134207],{"class":74},[30,143693,55385],{"class":36},[30,143695,367],{"class":321},[30,143697,134214],{"class":74},[30,143699,134217],{"class":36},[30,143701,367],{"class":321},[30,143703,134222],{"class":74},[30,143705,51445],{"class":321},[15,143707,143709],{"id":143708},"_205-flex布局","20.5 flex布局",[160,143711],{"style":126546,"src":143712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[287,143714,143716],{"id":143715},"_2051-布局原理","20.5.1 布局原理",[157,143718,143719],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[147,143721,143722,143725,143728,143731,143734],{},[150,143723,143724],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[150,143726,143727],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[150,143729,143730],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[150,143732,143733],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[150,143735,143736],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[157,143738,143739],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[157,143741,143742],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[20,143744,143746],{"className":126690,"code":143745,"language":126692,"meta":25,"style":25},"\u002F* Flex 弹性布局 *\u002F\n.container {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  flex-wrap: wrap;\n}\n",[27,143747,143748,143753,143760,143770,143782,143793,143804,143815],{"__ignoreMap":25},[30,143749,143750],{"class":32,"line":33},[30,143751,143752],{"class":379},"\u002F* Flex 弹性布局 *\u002F\n",[30,143754,143755,143758],{"class":32,"line":44},[30,143756,143757],{"class":36},".container",[30,143759,15754],{"class":321},[30,143761,143762,143764,143766,143768],{"class":32,"line":52},[30,143763,128306],{"class":40},[30,143765,51575],{"class":321},[30,143767,51615],{"class":40},[30,143769,1480],{"class":321},[30,143771,143772,143775,143777,143780],{"class":32,"line":60},[30,143773,143774],{"class":40},"  flex-direction",[30,143776,51575],{"class":321},[30,143778,143779],{"class":40},"row",[30,143781,1480],{"class":321},[30,143783,143784,143787,143789,143791],{"class":32,"line":68},[30,143785,143786],{"class":40},"  justify-content",[30,143788,51575],{"class":321},[30,143790,51806],{"class":40},[30,143792,1480],{"class":321},[30,143794,143795,143798,143800,143802],{"class":32,"line":80},[30,143796,143797],{"class":40},"  align-items",[30,143799,51575],{"class":321},[30,143801,51730],{"class":40},[30,143803,1480],{"class":321},[30,143805,143806,143809,143811,143813],{"class":32,"line":88},[30,143807,143808],{"class":40},"  flex-wrap",[30,143810,51575],{"class":321},[30,143812,78748],{"class":40},[30,143814,1480],{"class":321},[30,143816,143817],{"class":32,"line":96},[30,143818,1751],{"class":321},[157,143820,70591],{},[157,143822,143823],{},".form-item .male-label {",[157,143825,143826],{},"   margin-right: 20px;",[157,143828,143829],{},"   display: inline-flex;",[157,143831,143832],{},"   align-items: center;",[157,143834,1266],{},[160,143836],{"style":126546,"src":143837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[160,143839],{"style":126546,"src":143840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[287,143842,143844],{"id":143843},"_2052-常见父项属性","20.5.2 常见父项属性",[271,143846,143847,143850,143853,143856,143859,143862,143865],{},[150,143848,143849],{},"flex-direction：设置主轴的方向",[150,143851,143852],{},"justify-content：设置主轴上的子元素排列方式",[150,143854,143855],{},"flex-wrap：设置子元素是否换行",[150,143857,143858],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[150,143860,143861],{},"align-items：设置侧轴上的子元素排列方式（单行）",[150,143863,143864],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[150,143866,143849],{},[160,143868],{"style":126546,"src":143869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[160,143871],{"style":126546,"src":143872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[271,143874,143875],{"start":44},[150,143876,143852],{},[160,143878],{"style":126546,"src":143879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[157,143881,143882,143885],{},[27,143883,143884],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[157,143887,143888],{},"跟着主轴走",[271,143890,143891],{"start":52},[150,143892,143855],{},[160,143894],{"style":126546,"src":143895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[157,143897,143898],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[271,143900,143901],{"start":60},[150,143902,143858],{},[160,143904],{"style":126546,"src":143905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[157,143907,143908],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[157,143910,143911],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[271,143913,143914],{"start":68},[150,143915,143861],{},[160,143917],{"style":126546,"src":143918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[157,143920,143921],{},"align-items与align-content之间的区别：",[157,143923,143924],{},"单找items，多找content",[160,143926],{"style":126546,"src":143927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[271,143929,143930],{"start":80},[150,143931,143864],{},[160,143933],{"style":126546,"src":143934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[287,143936,143938],{"id":143937},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[271,143940,143941],{},[150,143942,143943],{},[469,143944,143945],{},"flex 属性",[157,143947,143948],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[160,143950],{"style":126546,"src":143951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[157,143953,143954],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[157,143956,143957],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[271,143959,143960],{"start":44},[150,143961,143962,13977,143965],{},[469,143963,143964],{},"align-self",[469,143966,143967],{},"控制子项自己在侧轴上的排列方式",[160,143969],{"style":126546,"src":143970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[157,143972,143973],{},"单个子盒子在父盒子侧轴上的排列方式",[271,143975,143976],{"start":52},[150,143977,143978,143980],{},[469,143979,95435],{}," 属性定义项目的排列顺序",[160,143982],{"style":126546,"src":143983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[287,143985,143987],{"id":143986},"_2054-背景线性渐变","20.5.4 背景线性渐变",[160,143989],{"style":126546,"src":143990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[157,143992,143993],{},"必须要添加浏览器的私有前缀",[287,143995,143997],{"id":143996},"_2055-携程网首页案例","20.5.5 携程网首页案例",[157,143999,144000],{},"学到最重要的知识：",[157,144002,144003],{},"flex处理这样的布局思路",[160,144005],{"style":126546,"src":144006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[20,144008,144010],{"className":126690,"code":144009,"language":126692,"meta":25,"style":25},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[27,144011,144012,144018,144028,144038,144048],{"__ignoreMap":25},[30,144013,144014,144016],{"class":32,"line":33},[30,144015,143757],{"class":36},[30,144017,15754],{"class":321},[30,144019,144020,144022,144024,144026],{"class":32,"line":44},[30,144021,128306],{"class":40},[30,144023,51575],{"class":321},[30,144025,51615],{"class":40},[30,144027,1480],{"class":321},[30,144029,144030,144032,144034,144036],{"class":32,"line":52},[30,144031,143786],{"class":40},[30,144033,51575],{"class":321},[30,144035,51730],{"class":40},[30,144037,1480],{"class":321},[30,144039,144040,144042,144044,144046],{"class":32,"line":60},[30,144041,143797],{"class":40},[30,144043,51575],{"class":321},[30,144045,51730],{"class":40},[30,144047,1480],{"class":321},[30,144049,144050],{"class":32,"line":68},[30,144051,1751],{"class":321},[157,144053,144054],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[157,144056,144057],{},"使用属性选择器",[160,144059],{"style":126546,"src":144060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[157,144062,69027],{},[20,144064,144066],{"className":127437,"code":144065,"language":127439,"meta":25,"style":25},"\u003C!-- 携程网移动端案例结构 -->\n\u003Cdiv class=\"container\">\n  \u003C!-- 搜索栏 -->\n  \u003Cdiv class=\"search-index\">...\u003C\u002Fdiv>\n  \u003C!-- 焦点图 -->\n  \u003Cdiv class=\"focus\">...\u003C\u002Fdiv>\n  \u003C!-- 主导航 -->\n  \u003Cdiv class=\"local-nav\">...\u003C\u002Fdiv>\n  \u003C!-- 子导航 -->\n  \u003Cdiv class=\"nav-common\">...\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n",[27,144067,144068,144073,144087,144092,144112,144117,144136,144141,144160,144165,144184],{"__ignoreMap":25},[30,144069,144070],{"class":32,"line":33},[30,144071,144072],{"class":379},"\u003C!-- 携程网移动端案例结构 -->\n",[30,144074,144075,144077,144079,144081,144083,144085],{"class":32,"line":44},[30,144076,1230],{"class":321},[30,144078,51749],{"class":51438},[30,144080,53624],{"class":36},[30,144082,367],{"class":321},[30,144084,92461],{"class":74},[30,144086,51445],{"class":321},[30,144088,144089],{"class":32,"line":52},[30,144090,144091],{"class":379},"  \u003C!-- 搜索栏 -->\n",[30,144093,144094,144096,144098,144100,144102,144105,144108,144110],{"class":32,"line":60},[30,144095,52282],{"class":321},[30,144097,51749],{"class":51438},[30,144099,53624],{"class":36},[30,144101,367],{"class":321},[30,144103,144104],{"class":74},"\"search-index\"",[30,144106,144107],{"class":321},">...\u003C\u002F",[30,144109,51749],{"class":51438},[30,144111,51445],{"class":321},[30,144113,144114],{"class":32,"line":68},[30,144115,144116],{"class":379},"  \u003C!-- 焦点图 -->\n",[30,144118,144119,144121,144123,144125,144127,144130,144132,144134],{"class":32,"line":80},[30,144120,52282],{"class":321},[30,144122,51749],{"class":51438},[30,144124,53624],{"class":36},[30,144126,367],{"class":321},[30,144128,144129],{"class":74},"\"focus\"",[30,144131,144107],{"class":321},[30,144133,51749],{"class":51438},[30,144135,51445],{"class":321},[30,144137,144138],{"class":32,"line":88},[30,144139,144140],{"class":379},"  \u003C!-- 主导航 -->\n",[30,144142,144143,144145,144147,144149,144151,144154,144156,144158],{"class":32,"line":96},[30,144144,52282],{"class":321},[30,144146,51749],{"class":51438},[30,144148,53624],{"class":36},[30,144150,367],{"class":321},[30,144152,144153],{"class":74},"\"local-nav\"",[30,144155,144107],{"class":321},[30,144157,51749],{"class":51438},[30,144159,51445],{"class":321},[30,144161,144162],{"class":32,"line":104},[30,144163,144164],{"class":379},"  \u003C!-- 子导航 -->\n",[30,144166,144167,144169,144171,144173,144175,144178,144180,144182],{"class":32,"line":112},[30,144168,52282],{"class":321},[30,144170,51749],{"class":51438},[30,144172,53624],{"class":36},[30,144174,367],{"class":321},[30,144176,144177],{"class":74},"\"nav-common\"",[30,144179,144107],{"class":321},[30,144181,51749],{"class":51438},[30,144183,51445],{"class":321},[30,144185,144186,144188,144190],{"class":32,"line":123},[30,144187,51923],{"class":321},[30,144189,51749],{"class":51438},[30,144191,51445],{"class":321},[157,144193,70591],{},[20,144195,144196],{"className":126690,"code":137142,"language":126692,"meta":25,"style":25},[27,144197,144198,144212,144228],{"__ignoreMap":25},[30,144199,144200,144202,144204,144206,144208,144210],{"class":32,"line":33},[30,144201,53959],{"class":51438},[30,144203,1210],{"class":321},[30,144205,103245],{"class":36},[30,144207,367],{"class":317},[30,144209,62837],{"class":74},[30,144211,137159],{"class":321},[30,144213,144214,144216,144218,144220,144222,144224,144226],{"class":32,"line":44},[30,144215,71034],{"class":40},[30,144217,51575],{"class":321},[30,144219,537],{"class":40},[30,144221,51630],{"class":317},[30,144223,51659],{"class":40},[30,144225,130270],{"class":40},[30,144227,1480],{"class":321},[30,144229,144230],{"class":32,"line":52},[30,144231,1751],{"class":321},[157,144233,144234],{},"总代码和效果展示：",[160,144236],{"style":126546,"src":144237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[157,144239,69027],{},[20,144241,144242],{"className":127437,"code":144065,"language":127439,"meta":25,"style":25},[27,144243,144244,144248,144262,144266,144284,144288,144306,144310,144328,144332,144350],{"__ignoreMap":25},[30,144245,144246],{"class":32,"line":33},[30,144247,144072],{"class":379},[30,144249,144250,144252,144254,144256,144258,144260],{"class":32,"line":44},[30,144251,1230],{"class":321},[30,144253,51749],{"class":51438},[30,144255,53624],{"class":36},[30,144257,367],{"class":321},[30,144259,92461],{"class":74},[30,144261,51445],{"class":321},[30,144263,144264],{"class":32,"line":52},[30,144265,144091],{"class":379},[30,144267,144268,144270,144272,144274,144276,144278,144280,144282],{"class":32,"line":60},[30,144269,52282],{"class":321},[30,144271,51749],{"class":51438},[30,144273,53624],{"class":36},[30,144275,367],{"class":321},[30,144277,144104],{"class":74},[30,144279,144107],{"class":321},[30,144281,51749],{"class":51438},[30,144283,51445],{"class":321},[30,144285,144286],{"class":32,"line":68},[30,144287,144116],{"class":379},[30,144289,144290,144292,144294,144296,144298,144300,144302,144304],{"class":32,"line":80},[30,144291,52282],{"class":321},[30,144293,51749],{"class":51438},[30,144295,53624],{"class":36},[30,144297,367],{"class":321},[30,144299,144129],{"class":74},[30,144301,144107],{"class":321},[30,144303,51749],{"class":51438},[30,144305,51445],{"class":321},[30,144307,144308],{"class":32,"line":88},[30,144309,144140],{"class":379},[30,144311,144312,144314,144316,144318,144320,144322,144324,144326],{"class":32,"line":96},[30,144313,52282],{"class":321},[30,144315,51749],{"class":51438},[30,144317,53624],{"class":36},[30,144319,367],{"class":321},[30,144321,144153],{"class":74},[30,144323,144107],{"class":321},[30,144325,51749],{"class":51438},[30,144327,51445],{"class":321},[30,144329,144330],{"class":32,"line":104},[30,144331,144164],{"class":379},[30,144333,144334,144336,144338,144340,144342,144344,144346,144348],{"class":32,"line":112},[30,144335,52282],{"class":321},[30,144337,51749],{"class":51438},[30,144339,53624],{"class":36},[30,144341,367],{"class":321},[30,144343,144177],{"class":74},[30,144345,144107],{"class":321},[30,144347,51749],{"class":51438},[30,144349,51445],{"class":321},[30,144351,144352,144354,144356],{"class":32,"line":123},[30,144353,51923],{"class":321},[30,144355,51749],{"class":51438},[30,144357,51445],{"class":321},[157,144359,70591],{},[20,144361,144362],{"className":127437,"code":130794,"language":127439,"meta":25,"style":25},[27,144363,144364,144368,144382,144386],{"__ignoreMap":25},[30,144365,144366],{"class":32,"line":33},[30,144367,130801],{"class":379},[30,144369,144370,144372,144374,144376,144378,144380],{"class":32,"line":44},[30,144371,1230],{"class":321},[30,144373,51749],{"class":51438},[30,144375,53624],{"class":36},[30,144377,367],{"class":321},[30,144379,130814],{"class":74},[30,144381,51445],{"class":321},[30,144383,144384],{"class":32,"line":52},[30,144385,130821],{"class":321},[30,144387,144388,144390,144392],{"class":32,"line":60},[30,144389,51923],{"class":321},[30,144391,51749],{"class":51438},[30,144393,51445],{"class":321},[234,144395,138091],{},{"title":25,"searchDepth":44,"depth":44,"links":144397},[144398,144399,144403,144404,144405],{"id":143542,"depth":44,"text":143543},{"id":143574,"depth":44,"text":143575,"children":144400},[144401,144402],{"id":143578,"depth":52,"text":143579},{"id":143595,"depth":52,"text":143596},{"id":143614,"depth":44,"text":143615},{"id":143621,"depth":44,"text":143622},{"id":143708,"depth":44,"text":143709,"children":144406},[144407,144408,144409,144410,144411],{"id":143715,"depth":52,"text":143716},{"id":143843,"depth":52,"text":143844},{"id":143937,"depth":52,"text":143938},{"id":143986,"depth":52,"text":143987},{"id":143996,"depth":52,"text":143997},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143534,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144418,"title":144419,"body":144420,"description":242,"extension":243,"meta":145647,"navigation":245,"path":145648,"seo":145649,"stem":145650,"__hash__":145651},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144421,"toc":145625},[144422,144425,144429,144433,144436,144439,144443,144448,144451,144454,144457,144460,144463,144520,144523,144528,144531,144534,144538,144549,144553,144556,144559,144566,144571,144575,144578,144584,144587,144591,144594,144601,144604,144607,144614,144617,144624,144627,144630,144637,144640,144643,144645,144662,144666,144669,144672,144675,144679,144682,144685,144688,144691,144694,144697,144699,144702,144705,144767,144770,144880,144887,144893,144896,144899,144903,144906,144910,144915,144918,144925,144928,144934,144939,144942,144945,144948,144951,144954,144957,144960,144963,145019,145021,145047,145051,145054,145057,145060,145068,145071,145074,145078,145134,145137,145141,145147,145158,145161,145166,145169,145172,145178,145181,145184,145187,145190,145193,145196,145199,145202,145227,145233,145236,145239,145242,145245,145248,145251,145256,145259,145262,145265,145273,145276,145283,145286,145289,145291,145315,145317,145320,145323,145326,145329,145332,145335,145338,145372,145375,145378,145412,145419,145422,145425,145428,145431,145434,145437,145444,145447,145450,145453,145456,145463,145466,145469,145476,145479,145482,145486,145489,145492,145495,145498,145501,145504,145507,145510,145512,145536,145538,145562,145566,145577,145580,145583,145586,145589,145592,145595,145598,145601,145604,145607,145610,145613,145616,145619,145622],[10,144423,144419],{"id":144424},"_21-移动端布局实战下篇",[15,144426,144428],{"id":144427},"_211-rem适配布局","21.1 rem适配布局",[287,144430,144432],{"id":144431},"_2111-rem单位","21.1.1 rem单位",[160,144434],{"style":126546,"src":144435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[157,144437,144438],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[287,144440,144442],{"id":144441},"_2112-媒体查询","21.1.2 媒体查询",[271,144444,144445],{},[150,144446,144447],{},"参数介绍",[160,144449],{"style":126546,"src":144450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[160,144452],{"style":126546,"src":144453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[160,144455],{"style":126546,"src":144456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[160,144458],{"style":126546,"src":144459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[160,144461],{"style":126546,"src":144462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[20,144464,144466],{"className":126690,"code":144465,"language":126692,"meta":25,"style":25},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[27,144467,144468,144473,144492,144499,144512,144516],{"__ignoreMap":25},[30,144469,144470],{"class":32,"line":33},[30,144471,144472],{"class":379},"\u002F* 媒体查询 *\u002F\n",[30,144474,144475,144478,144480,144483,144485,144488,144490],{"class":32,"line":44},[30,144476,144477],{"class":317},"@media",[30,144479,1841],{"class":321},[30,144481,144482],{"class":40},"max-width",[30,144484,51575],{"class":321},[30,144486,144487],{"class":40},"768",[30,144489,51630],{"class":317},[30,144491,12624],{"class":321},[30,144493,144494,144497],{"class":32,"line":52},[30,144495,144496],{"class":36},"  .container",[30,144498,15754],{"class":321},[30,144500,144501,144504,144506,144508,144510],{"class":32,"line":60},[30,144502,144503],{"class":40},"    width",[30,144505,51575],{"class":321},[30,144507,631],{"class":40},[30,144509,648],{"class":317},[30,144511,1480],{"class":321},[30,144513,144514],{"class":32,"line":68},[30,144515,127486],{"class":321},[30,144517,144518],{"class":32,"line":80},[30,144519,1751],{"class":321},[157,144521,144522],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[271,144524,144525],{"start":44},[150,144526,144527],{},"引入资源",[160,144529],{"style":126546,"src":144530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[157,144532,144533],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[287,144535,144537],{"id":144536},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[147,144539,144540,144543,144546],{},[150,144541,144542],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[150,144544,144545],{},"媒体查询可以根据不同设备宽度来修改样式",[150,144547,144548],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[15,144550,144552],{"id":144551},"_212-less基础","21.2 Less基础",[157,144554,144555],{},"css冗余度较高，不利于复用，没有很好的计算能力",[157,144557,144558],{},"Less可以解决该问题，它是css的扩展语言",[157,144560,144561,144562],{},"Less中文网址： ",[558,144563,144564],{"href":144564,"rel":144565},"http:\u002F\u002Flesscss.cn\u002F",[24045],[157,144567,144568],{},[469,144569,144570],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[287,144572,144574],{"id":144573},"_2121-less安装","21.2.1 less安装",[157,144576,144577],{},"如果使用vscode，则无需进行下方安装步骤",[157,144579,144580],{},[558,144581,144582],{"href":144582,"rel":144583},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24045],[160,144585],{"style":126546,"src":144586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[287,144588,144590],{"id":144589},"_2122-less使用","21.2.2 less使用",[157,144592,144593],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[271,144595,144596],{},[150,144597,144598],{},[469,144599,144600],{},"Less 变量",[160,144602],{"style":126546,"src":144603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[160,144605],{"style":126546,"src":144606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[271,144608,144609],{"start":44},[150,144610,144611],{},[469,144612,144613],{},"Less 编译",[160,144615],{"style":126546,"src":144616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[271,144618,144619],{"start":52},[150,144620,144621],{},[469,144622,144623],{},"Less 嵌套",[160,144625],{"style":126546,"src":144626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[160,144628],{"style":126546,"src":144629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[271,144631,144632],{"start":60},[150,144633,144634],{},[469,144635,144636],{},"Less 运算",[160,144638],{"style":126546,"src":144639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[157,144641,144642],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[157,144644,351],{},[147,144646,144647,144650,144653,144656,144659],{},[150,144648,144649],{},"乘号（*）和除号（\u002F）的写法",[150,144651,144652],{},"运算符中间左右有个空格隔开 1px + 5",[150,144654,144655],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[150,144657,144658],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[150,144660,144661],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[15,144663,144665],{"id":144664},"_213-rem-适配方案","21.3 rem 适配方案",[157,144667,144668],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[157,144670,144671],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[160,144673],{"style":126546,"src":144674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[287,144676,144678],{"id":144677},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[157,144680,144681],{},"rem + 媒体查询 + less 技术",[160,144683],{"style":126546,"src":144684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[157,144686,144687],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[157,144689,144690],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[160,144692],{"style":126546,"src":144693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[157,144695,144696],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[157,144698,14815],{},[160,144700],{"style":126546,"src":144701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[157,144703,144704],{},"index.html:",[20,144706,144708],{"className":126690,"code":144707,"language":126692,"meta":25,"style":25},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[27,144709,144710,144715,144721,144737,144741,144747,144763],{"__ignoreMap":25},[30,144711,144712],{"class":32,"line":33},[30,144713,144714],{"class":379},"\u002F* rem 适配方案 *\u002F\n",[30,144716,144717,144719],{"class":32,"line":44},[30,144718,50773],{"class":51438},[30,144720,15754],{"class":321},[30,144722,144723,144725,144727,144730,144732,144734],{"class":32,"line":52},[30,144724,70764],{"class":40},[30,144726,51575],{"class":321},[30,144728,144729],{"class":40},"62.5",[30,144731,648],{"class":317},[30,144733,130553],{"class":321},[30,144735,144736],{"class":379},"\u002F* 1rem = 10px *\u002F\n",[30,144738,144739],{"class":32,"line":60},[30,144740,1751],{"class":321},[30,144742,144743,144745],{"class":32,"line":68},[30,144744,130538],{"class":36},[30,144746,15754],{"class":321},[30,144748,144749,144751,144753,144755,144758,144760],{"class":32,"line":80},[30,144750,70706],{"class":40},[30,144752,51575],{"class":321},[30,144754,766],{"class":40},[30,144756,144757],{"class":317},"rem",[30,144759,130553],{"class":321},[30,144761,144762],{"class":379},"\u002F* 100px *\u002F\n",[30,144764,144765],{"class":32,"line":88},[30,144766,1751],{"class":321},[157,144768,144769],{},"common.less",[20,144771,144773],{"className":126690,"code":144772,"language":126692,"meta":25,"style":25},"html {\n  font-size: 62.5%; \u002F* 10px *\u002F\n}\ndiv {\n  width: 10rem; \u002F* 100px *\u002F\n}\n```Css\n\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[27,144774,144775,144781,144796,144800,144806,144820,144824,144828,144832,144838,144852,144856,144862,144876],{"__ignoreMap":25},[30,144776,144777,144779],{"class":32,"line":33},[30,144778,50773],{"class":51438},[30,144780,15754],{"class":321},[30,144782,144783,144785,144787,144789,144791,144793],{"class":32,"line":44},[30,144784,70764],{"class":40},[30,144786,51575],{"class":321},[30,144788,144729],{"class":40},[30,144790,648],{"class":317},[30,144792,26205],{"class":321},[30,144794,144795],{"class":379},"\u002F* 10px *\u002F\n",[30,144797,144798],{"class":32,"line":52},[30,144799,1751],{"class":321},[30,144801,144802,144804],{"class":32,"line":60},[30,144803,51749],{"class":51438},[30,144805,15754],{"class":321},[30,144807,144808,144810,144812,144814,144816,144818],{"class":32,"line":68},[30,144809,70706],{"class":40},[30,144811,51575],{"class":321},[30,144813,766],{"class":40},[30,144815,144757],{"class":317},[30,144817,26205],{"class":321},[30,144819,144762],{"class":379},[30,144821,144822],{"class":32,"line":80},[30,144823,1751],{"class":321},[30,144825,144826],{"class":32,"line":88},[30,144827,136151],{"class":321},[30,144829,144830],{"class":32,"line":96},[30,144831,144714],{"class":379},[30,144833,144834,144836],{"class":32,"line":104},[30,144835,50773],{"class":51438},[30,144837,15754],{"class":321},[30,144839,144840,144842,144844,144846,144848,144850],{"class":32,"line":112},[30,144841,70764],{"class":40},[30,144843,51575],{"class":321},[30,144845,144729],{"class":40},[30,144847,648],{"class":317},[30,144849,130553],{"class":321},[30,144851,144736],{"class":379},[30,144853,144854],{"class":32,"line":123},[30,144855,1751],{"class":321},[30,144857,144858,144860],{"class":32,"line":131},[30,144859,130538],{"class":36},[30,144861,15754],{"class":321},[30,144863,144864,144866,144868,144870,144872,144874],{"class":32,"line":142},[30,144865,70706],{"class":40},[30,144867,51575],{"class":321},[30,144869,766],{"class":40},[30,144871,144757],{"class":317},[30,144873,130553],{"class":321},[30,144875,144762],{"class":379},[30,144877,144878],{"class":32,"line":1811},[30,144879,1751],{"class":321},[157,144881,144882,144883,144886],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23735,144884,144885],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[20,144888,144891],{"className":144889,"code":144890,"language":5369},[5367],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[27,144892,144890],{"__ignoreMap":25},[157,144894,144895],{},"less保存时会自动变成.css文件",[157,144897,144898],{},"好好搞懂上述代码写法",[287,144900,144902],{"id":144901},"_2132-样式导入样式","21.3.2 样式导入样式",[160,144904],{"style":126546,"src":144905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[287,144907,144909],{"id":144908},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[271,144911,144912],{},[150,144913,144914],{},"准备工作",[160,144916],{"style":126546,"src":144917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[157,144919,144920,144921],{},"github地址：",[558,144922,144923],{"href":144923,"rel":144924},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24045],[157,144926,144927],{},"下载之后，将index.js文件拖到项目中就可以了",[157,144929,144930,144931],{},"js文件引入到index.html中使用的是",[27,144932,144933],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[271,144935,144936],{"start":44},[150,144937,144938],{},"vscode插件",[160,144940],{"style":126546,"src":144941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[157,144943,144944],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[157,144946,144947],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[160,144949],{"style":126546,"src":144950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[157,144952,144953],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[160,144955],{"style":126546,"src":144956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[157,144958,144959],{},"修改成75就可以，alt+z为快捷键",[157,144961,144962],{},"index.css：",[20,144964,144965],{"className":126690,"code":144707,"language":126692,"meta":25,"style":25},[27,144966,144967,144971,144977,144991,144995,145001,145015],{"__ignoreMap":25},[30,144968,144969],{"class":32,"line":33},[30,144970,144714],{"class":379},[30,144972,144973,144975],{"class":32,"line":44},[30,144974,50773],{"class":51438},[30,144976,15754],{"class":321},[30,144978,144979,144981,144983,144985,144987,144989],{"class":32,"line":52},[30,144980,70764],{"class":40},[30,144982,51575],{"class":321},[30,144984,144729],{"class":40},[30,144986,648],{"class":317},[30,144988,130553],{"class":321},[30,144990,144736],{"class":379},[30,144992,144993],{"class":32,"line":60},[30,144994,1751],{"class":321},[30,144996,144997,144999],{"class":32,"line":68},[30,144998,130538],{"class":36},[30,145000,15754],{"class":321},[30,145002,145003,145005,145007,145009,145011,145013],{"class":32,"line":80},[30,145004,70706],{"class":40},[30,145006,51575],{"class":321},[30,145008,766],{"class":40},[30,145010,144757],{"class":317},[30,145012,130553],{"class":321},[30,145014,144762],{"class":379},[30,145016,145017],{"class":32,"line":88},[30,145018,1751],{"class":321},[157,145020,144704],{},[20,145022,145023],{"className":126690,"code":127094,"language":126692,"meta":25,"style":25},[27,145024,145025,145031,145043],{"__ignoreMap":25},[30,145026,145027,145029],{"class":32,"line":33},[30,145028,51938],{"class":51438},[30,145030,15754],{"class":321},[30,145032,145033,145035,145037,145039,145041],{"class":32,"line":44},[30,145034,70764],{"class":40},[30,145036,51575],{"class":321},[30,145038,921],{"class":40},[30,145040,51630],{"class":317},[30,145042,1480],{"class":321},[30,145044,145045],{"class":32,"line":52},[30,145046,1751],{"class":321},[15,145048,145050],{"id":145049},"_214-响应式开发","21.4 响应式开发",[157,145052,145053],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[160,145055],{"style":126546,"src":145056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[157,145058,145059],{},"做法：",[147,145061,145062,145065],{},[150,145063,145064],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[150,145066,145067],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[160,145069],{"style":126546,"src":145070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[157,145072,145073],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[287,145075,145077],{"id":145076},"_2141-简单代码示范","21.4.1 简单代码示范",[20,145079,145080],{"className":126690,"code":144707,"language":126692,"meta":25,"style":25},[27,145081,145082,145086,145092,145106,145110,145116,145130],{"__ignoreMap":25},[30,145083,145084],{"class":32,"line":33},[30,145085,144714],{"class":379},[30,145087,145088,145090],{"class":32,"line":44},[30,145089,50773],{"class":51438},[30,145091,15754],{"class":321},[30,145093,145094,145096,145098,145100,145102,145104],{"class":32,"line":52},[30,145095,70764],{"class":40},[30,145097,51575],{"class":321},[30,145099,144729],{"class":40},[30,145101,648],{"class":317},[30,145103,130553],{"class":321},[30,145105,144736],{"class":379},[30,145107,145108],{"class":32,"line":60},[30,145109,1751],{"class":321},[30,145111,145112,145114],{"class":32,"line":68},[30,145113,130538],{"class":36},[30,145115,15754],{"class":321},[30,145117,145118,145120,145122,145124,145126,145128],{"class":32,"line":80},[30,145119,70706],{"class":40},[30,145121,51575],{"class":321},[30,145123,766],{"class":40},[30,145125,144757],{"class":317},[30,145127,130553],{"class":321},[30,145129,144762],{"class":379},[30,145131,145132],{"class":32,"line":88},[30,145133,1751],{"class":321},[157,145135,145136],{},"父盒子一般命名为container",[287,145138,145140],{"id":145139},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[157,145142,145143,145144],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[469,145145,145146],{},"使得 Web 开发更加快捷",[147,145148,145149],{},[150,145150,145151,145152],{},"官网：",[469,145153,145154],{},[558,145155,145156],{"href":145156,"rel":145157},"http:\u002F\u002Fgetbootstrap.com\u002F",[24045],[157,145159,145160],{},"可以直接去官网拿现成的东西",[271,145162,145163],{},[150,145164,145165],{},"Bootstrap的使用",[157,145167,145168],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[157,145170,145171],{},"Bootstrap 使用四步曲：",[157,145173,145174,145177],{},[469,145175,145176],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[160,145179],{"style":126546,"src":145180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[157,145182,145183],{},"打开Bootstrap官网，然后下载",[160,145185],{"style":126546,"src":145186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[160,145188],{"style":126546,"src":145189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[157,145191,145192],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[157,145194,145195],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[157,145197,145198],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[160,145200],{"style":126546,"src":145201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[20,145203,145205],{"className":126690,"code":145204,"language":126692,"meta":25,"style":25},".center {\n  color: red;\n}\n",[27,145206,145207,145213,145223],{"__ignoreMap":25},[30,145208,145209,145211],{"class":32,"line":33},[30,145210,126981],{"class":36},[30,145212,15754],{"class":321},[30,145214,145215,145217,145219,145221],{"class":32,"line":44},[30,145216,71043],{"class":40},[30,145218,51575],{"class":321},[30,145220,57559],{"class":40},[30,145222,1480],{"class":321},[30,145224,145225],{"class":32,"line":52},[30,145226,1751],{"class":321},[157,145228,145229,145232],{},[27,145230,145231],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[160,145234],{"style":126546,"src":145235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[160,145237],{"style":126546,"src":145238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[160,145240],{"style":126546,"src":145241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[157,145243,145244],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[160,145246],{"style":126546,"src":145247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[157,145249,145250],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[271,145252,145253],{"start":44},[150,145254,145255],{},"布局容器",[160,145257],{"style":126546,"src":145258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[157,145260,145261],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[157,145263,145264],{},"container-fluid用于移动式布局比较方便",[271,145266,145267],{"start":52},[150,145268,145269,145270],{},"bootstrap ",[469,145271,145272],{},"栅格系统原理",[160,145274],{"style":126546,"src":145275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[271,145277,145278],{"start":60},[150,145279,145280],{},[469,145281,145282],{},"栅格选项参数",[160,145284],{"style":126546,"src":145285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[157,145287,145288],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[157,145290,14815],{},[20,145292,145293],{"className":126690,"code":145204,"language":126692,"meta":25,"style":25},[27,145294,145295,145301,145311],{"__ignoreMap":25},[30,145296,145297,145299],{"class":32,"line":33},[30,145298,126981],{"class":36},[30,145300,15754],{"class":321},[30,145302,145303,145305,145307,145309],{"class":32,"line":44},[30,145304,71043],{"class":40},[30,145306,51575],{"class":321},[30,145308,57559],{"class":40},[30,145310,1480],{"class":321},[30,145312,145313],{"class":32,"line":52},[30,145314,1751],{"class":321},[157,145316,135733],{},[160,145318],{"style":126546,"src":145319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[157,145321,145322],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[157,145324,145325],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[157,145327,145328],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[157,145330,145331],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[157,145333,145334],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[157,145336,145337],{},"汇总展示说明：",[20,145339,145340],{"className":127437,"code":130794,"language":127439,"meta":25,"style":25},[27,145341,145342,145346,145360,145364],{"__ignoreMap":25},[30,145343,145344],{"class":32,"line":33},[30,145345,130801],{"class":379},[30,145347,145348,145350,145352,145354,145356,145358],{"class":32,"line":44},[30,145349,1230],{"class":321},[30,145351,51749],{"class":51438},[30,145353,53624],{"class":36},[30,145355,367],{"class":321},[30,145357,130814],{"class":74},[30,145359,51445],{"class":321},[30,145361,145362],{"class":32,"line":52},[30,145363,130821],{"class":321},[30,145365,145366,145368,145370],{"class":32,"line":60},[30,145367,51923],{"class":321},[30,145369,51749],{"class":51438},[30,145371,51445],{"class":321},[160,145373],{"style":126546,"src":145374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[157,145376,145377],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[20,145379,145380],{"className":127437,"code":130794,"language":127439,"meta":25,"style":25},[27,145381,145382,145386,145400,145404],{"__ignoreMap":25},[30,145383,145384],{"class":32,"line":33},[30,145385,130801],{"class":379},[30,145387,145388,145390,145392,145394,145396,145398],{"class":32,"line":44},[30,145389,1230],{"class":321},[30,145391,51749],{"class":51438},[30,145393,53624],{"class":36},[30,145395,367],{"class":321},[30,145397,130814],{"class":74},[30,145399,51445],{"class":321},[30,145401,145402],{"class":32,"line":52},[30,145403,130821],{"class":321},[30,145405,145406,145408,145410],{"class":32,"line":60},[30,145407,51923],{"class":321},[30,145409,51749],{"class":51438},[30,145411,51445],{"class":321},[271,145413,145414],{"start":68},[150,145415,145416],{},[469,145417,145418],{},"列嵌套",[160,145420],{"style":126546,"src":145421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[157,145423,145424],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[157,145426,145427],{},"没加row内部这样：",[160,145429],{"style":126546,"src":145430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[157,145432,145433],{},"加上row之后内部为：",[160,145435],{"style":126546,"src":145436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[271,145438,145439],{"start":80},[150,145440,145441],{},[469,145442,145443],{},"列偏移",[160,145445],{"style":126546,"src":145446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[157,145448,145449],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[157,145451,145452],{},"要加偏移量，即偏移份数",[157,145454,145455],{},"偏移的份数=12-两个盒子的份数",[271,145457,145458],{"start":88},[150,145459,145460],{},[469,145461,145462],{},"列排序",[160,145464],{"style":126546,"src":145465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[157,145467,145468],{},"pull拉左；push推右",[271,145470,145471],{"start":96},[150,145472,145473],{},[469,145474,145475],{},"响应式工具",[160,145477],{"style":126546,"src":145478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[157,145480,145481],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[287,145483,145485],{"id":145484},"_2143-响应式小项目","21.4.3 响应式小项目",[157,145487,145488],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[157,145490,145491],{},"ul {",[157,145493,145494],{},"list-style: none;",[157,145496,145497],{},"margin:0;",[157,145499,145500],{},"padding:0; }",[160,145502],{"style":126546,"src":145503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[160,145505],{"style":126546,"src":145506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[157,145508,145509],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[157,145511,69027],{},[20,145513,145514],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,145515,145516,145522,145532],{"__ignoreMap":25},[30,145517,145518,145520],{"class":32,"line":33},[30,145519,130538],{"class":36},[30,145521,15754],{"class":321},[30,145523,145524,145526,145528,145530],{"class":32,"line":44},[30,145525,131170],{"class":40},[30,145527,51575],{"class":321},[30,145529,23918],{"class":40},[30,145531,1480],{"class":321},[30,145533,145534],{"class":32,"line":52},[30,145535,1751],{"class":321},[157,145537,70591],{},[20,145539,145540],{"className":126690,"code":139360,"language":126692,"meta":25,"style":25},[27,145541,145542,145548,145558],{"__ignoreMap":25},[30,145543,145544,145546],{"class":32,"line":33},[30,145545,130538],{"class":36},[30,145547,15754],{"class":321},[30,145549,145550,145552,145554,145556],{"class":32,"line":44},[30,145551,131170],{"class":40},[30,145553,51575],{"class":321},[30,145555,23918],{"class":40},[30,145557,1480],{"class":321},[30,145559,145560],{"class":32,"line":52},[30,145561,1751],{"class":321},[15,145563,145565],{"id":145564},"_215-swiper-插件使用","21.5 swiper 插件使用",[147,145567,145568,145571,145574],{},[150,145569,145570],{},"下载需要的css和js文件html页面中 引入相关文件",[150,145572,145573],{},"官网找到类似案例，复制html结构，css样式 js 语法",[150,145575,145576],{},"根据需求定制修改模块",[160,145578],{"style":126546,"src":145579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[157,145581,145582],{},"解压后将这两部分放到项目中",[160,145584],{"style":126546,"src":145585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[157,145587,145588],{},"这个插件可以帮助我们实现轮播图效果",[157,145590,145591],{},"用法：",[160,145593],{"style":126546,"src":145594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[157,145596,145597],{},"找到自己喜欢的",[160,145599],{"style":126546,"src":145600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[157,145602,145603],{},"右键，查看网页源代码",[160,145605],{"style":126546,"src":145606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[157,145608,145609],{},"复制人家的结构内容",[157,145611,145612],{},"然后去看API文档：",[160,145614],{"style":126546,"src":145615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[157,145617,145618],{},"可以看看如何修改样式",[157,145620,145621],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[234,145623,145624],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":44,"depth":44,"links":145626},[145627,145632,145636,145641,145646],{"id":144427,"depth":44,"text":144428,"children":145628},[145629,145630,145631],{"id":144431,"depth":52,"text":144432},{"id":144441,"depth":52,"text":144442},{"id":144536,"depth":52,"text":144537},{"id":144551,"depth":44,"text":144552,"children":145633},[145634,145635],{"id":144573,"depth":52,"text":144574},{"id":144589,"depth":52,"text":144590},{"id":144664,"depth":44,"text":144665,"children":145637},[145638,145639,145640],{"id":144677,"depth":52,"text":144678},{"id":144901,"depth":52,"text":144902},{"id":144908,"depth":52,"text":144909},{"id":145049,"depth":44,"text":145050,"children":145642},[145643,145644,145645],{"id":145076,"depth":52,"text":145077},{"id":145139,"depth":52,"text":145140},{"id":145484,"depth":52,"text":145485},{"id":145564,"depth":44,"text":145565},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144419,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145653,"title":145654,"body":145655,"description":242,"extension":243,"meta":145875,"navigation":245,"path":145876,"seo":145877,"stem":145878,"__hash__":145879},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145656,"toc":145871},[145657,145660,145664,145667,145682,145687,145690,145695,145730,145735,145747,145752,145765,145770,145787,145792,145812,145817,145835,145838,145841,145844,145847,145851,145854,145857,145860,145863,145866,145869],[10,145658,145654],{"id":145659},"_22-代码提交与新型相对单位",[15,145661,145663],{"id":145662},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[157,145665,145666],{},"法1：",[271,145668,145669,145676,145679],{},[150,145670,145671,145672],{},"登录网站注册：",[558,145673,145674],{"href":145674,"rel":145675},"https:\u002F\u002Fgitee.com\u002F",[24045],[150,145677,145678],{},"码云创建新的仓库",[150,145680,145681],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[147,145683,145684],{},[150,145685,145686],{},"在网站根目录右键-- Git Bash Here",[160,145688],{"style":126546,"src":145689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[147,145691,145692],{},[150,145693,145694],{},"如果是第一次利用git提交，请配置好全局选项",[20,145696,145698],{"className":117434,"code":145697,"language":117436,"meta":25,"style":25},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[27,145699,145700,145716],{"__ignoreMap":25},[30,145701,145702,145705,145707,145710,145713],{"class":32,"line":33},[30,145703,145704],{"class":36},"git",[30,145706,119857],{"class":74},[30,145708,145709],{"class":40}," --global",[30,145711,145712],{"class":74}," user.name",[30,145714,145715],{"class":74}," \"你的名字\"\n",[30,145717,145718,145720,145722,145724,145727],{"class":32,"line":44},[30,145719,145704],{"class":36},[30,145721,119857],{"class":74},[30,145723,145709],{"class":40},[30,145725,145726],{"class":74}," user.email",[30,145728,145729],{"class":74}," \"你的邮箱\"\n",[147,145731,145732],{},[150,145733,145734],{},"初始化仓库",[20,145736,145738],{"className":117434,"code":145737,"language":117436,"meta":25,"style":25},"git init\n",[27,145739,145740],{"__ignoreMap":25},[30,145741,145742,145744],{"class":32,"line":33},[30,145743,145704],{"class":36},[30,145745,145746],{"class":74}," init\n",[147,145748,145749],{},[150,145750,145751],{},"把本地文件放到暂存区",[20,145753,145755],{"className":117434,"code":145754,"language":117436,"meta":25,"style":25},"git add .\n",[27,145756,145757],{"__ignoreMap":25},[30,145758,145759,145761,145763],{"class":32,"line":33},[30,145760,145704],{"class":36},[30,145762,5391],{"class":74},[30,145764,28879],{"class":74},[147,145766,145767],{},[150,145768,145769],{},"把本地文件放到本地仓库里面",[20,145771,145773],{"className":117434,"code":145772,"language":117436,"meta":25,"style":25},"git commit -m \"first commit\"\n",[27,145774,145775],{"__ignoreMap":25},[30,145776,145777,145779,145782,145784],{"class":32,"line":33},[30,145778,145704],{"class":36},[30,145780,145781],{"class":74}," commit",[30,145783,101020],{"class":40},[30,145785,145786],{"class":74}," \"first commit\"\n",[147,145788,145789],{},[150,145790,145791],{},"链接远程仓库",[20,145793,145795],{"className":117434,"code":145794,"language":117436,"meta":25,"style":25},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[27,145796,145797],{"__ignoreMap":25},[30,145798,145799,145801,145804,145806,145809],{"class":32,"line":33},[30,145800,145704],{"class":36},[30,145802,145803],{"class":74}," remote",[30,145805,5391],{"class":74},[30,145807,145808],{"class":74}," origin",[30,145810,145811],{"class":74}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[147,145813,145814],{},[150,145815,145816],{},"把本地仓库的文件推送到远程仓库 push",[20,145818,145820],{"className":117434,"code":145819,"language":117436,"meta":25,"style":25},"git push -u origin master\n",[27,145821,145822],{"__ignoreMap":25},[30,145823,145824,145826,145828,145830,145832],{"class":32,"line":33},[30,145825,145704],{"class":36},[30,145827,29154],{"class":74},[30,145829,28428],{"class":40},[30,145831,145808],{"class":74},[30,145833,145834],{"class":74}," master\n",[160,145836],{"style":126546,"src":145837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[157,145839,145840],{},"上方方法暂未实现，后边学完git后在整",[157,145842,145843],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[160,145845],{"style":126546,"src":145846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[15,145848,145850],{"id":145849},"_222-新型相对单位","22.2 新型相对单位",[160,145852],{"style":126546,"src":145853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[160,145855],{"style":126546,"src":145856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[157,145858,145859],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[157,145861,145862],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[160,145864],{"style":126546,"src":145865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[157,145867,145868],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[234,145870,24138],{},{"title":25,"searchDepth":44,"depth":44,"links":145872},[145873,145874],{"id":145662,"depth":44,"text":145663},{"id":145849,"depth":44,"text":145850},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145654,"description":242},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145881,"title":145882,"body":145883,"description":145887,"extension":243,"meta":145888,"navigation":245,"path":145889,"seo":145890,"stem":145891,"__hash__":145892},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145884,"toc":145885},[],{"title":25,"searchDepth":44,"depth":44,"links":145886},[],"自己正经开始学编程的第一门语言！",{"category":92977},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145882,"description":145887},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145894,"title":145895,"body":145896,"description":242,"extension":243,"meta":147043,"navigation":245,"path":147044,"seo":147045,"stem":147046,"__hash__":147047},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145897,"toc":147019},[145898,145901,145905,145908,145911,145936,145939,145945,145949,145952,145979,145982,146022,146025,146037,146040,146046,146050,146054,146081,146098,146105,146109,146112,146138,146141,146145,146148,146188,146191,146208,146214,146218,146223,146267,146270,146288,146291,146359,146363,146370,146373,146388,146391,146400,146403,146414,146417,146426,146429,146446,146449,146464,146468,146472,146475,146477,146497,146501,146504,146507,146518,146521,146527,146531,146537,146564,146567,146579,146582,146593,146596,146602,146606,146612,146662,146665,146707,146710,146743,146746,146780,146784,146787,146807,146810,146846,146849,146862,146866,146870,146876,146879,146892,146896,146899,146905,146908,146912,146915,146918,146967,146971,146987,146993,147000,147006,147016],[10,145899,145895],{"id":145900},"_1-python环境与第一个程序",[15,145902,145904],{"id":145903},"_11-什么是python","1.1 什么是Python",[157,145906,145907],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[157,145909,145910],{},"理解 Python 时抓住三个关键词：",[271,145912,145913,145916,145919],{},[150,145914,145915],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[150,145917,145918],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[150,145920,145921,145922,532,145925,532,145928,532,145931,532,145933,28523],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[27,145923,145924],{},"os",[27,145926,145927],{},"sys",[27,145929,145930],{},"json",[27,145932,57998],{},[27,145934,145935],{},"datetime",[157,145937,145938],{},"Python 程序的运行链路：",[20,145940,145943],{"className":145941,"code":145942,"language":5369,"meta":25},[5367],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[27,145944,145942],{"__ignoreMap":25},[15,145946,145948],{"id":145947},"_12-python解释器","1.2 Python解释器",[157,145950,145951],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[20,145953,145955],{"className":22,"code":145954,"language":24,"meta":25,"style":25},"python --version\npython3 --version\npython\npython3\n",[27,145956,145957,145963,145969,145974],{"__ignoreMap":25},[30,145958,145959,145961],{"class":32,"line":33},[30,145960,30518],{"class":36},[30,145962,26431],{"class":40},[30,145964,145965,145967],{"class":32,"line":44},[30,145966,101017],{"class":36},[30,145968,26431],{"class":40},[30,145970,145971],{"class":32,"line":52},[30,145972,145973],{"class":36},"python\n",[30,145975,145976],{"class":32,"line":60},[30,145977,145978],{"class":36},"python3\n",[157,145980,145981],{},"进入交互模式后，可以直接输入表达式：",[20,145983,145985],{"className":30516,"code":145984,"language":30518,"meta":25,"style":25},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[27,145986,145987,145998,146003,146017],{"__ignoreMap":25},[30,145988,145989,145992,145994,145996],{"class":32,"line":33},[30,145990,145991],{"class":317},">>>",[30,145993,25291],{"class":40},[30,145995,45704],{"class":317},[30,145997,47861],{"class":40},[30,145999,146000],{"class":32,"line":44},[30,146001,146002],{"class":40},"3\n",[30,146004,146005,146007,146010,146012,146015],{"class":32,"line":52},[30,146006,145991],{"class":317},[30,146008,146009],{"class":40}," print",[30,146011,322],{"class":321},[30,146013,146014],{"class":74},"\"hello python\"",[30,146016,328],{"class":321},[30,146018,146019],{"class":32,"line":60},[30,146020,146021],{"class":321},"hello python\n",[157,146023,146024],{},"退出交互模式：",[20,146026,146028],{"className":30516,"code":146027,"language":30518,"meta":25,"style":25},"exit()\n",[27,146029,146030],{"__ignoreMap":25},[30,146031,146032,146035],{"class":32,"line":33},[30,146033,146034],{"class":40},"exit",[30,146036,2158],{"class":321},[157,146038,146039],{},"或使用快捷键：",[20,146041,146044],{"className":146042,"code":146043,"language":5369,"meta":25},[5367],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[27,146045,146043],{"__ignoreMap":25},[15,146047,146049],{"id":146048},"_13-安装python","1.3 安装Python",[287,146051,146053],{"id":146052},"_131-windows安装","1.3.1 Windows安装",[271,146055,146056,146063,146066,146072,146078],{},[150,146057,146058,146059],{},"打开 Python 官网：",[558,146060,146061],{"href":146061,"rel":146062},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24045],[150,146064,146065],{},"下载 Windows Installer。",[150,146067,146068,146069,28523],{},"安装时勾选 ",[27,146070,146071],{},"Add Python to PATH",[150,146073,146074,146075,28523],{},"点击 ",[27,146076,146077],{},"Install Now",[150,146079,146080],{},"安装完成后打开命令提示符验证：",[20,146082,146084],{"className":22,"code":146083,"language":24,"meta":25,"style":25},"python --version\npip --version\n",[27,146085,146086,146092],{"__ignoreMap":25},[30,146087,146088,146090],{"class":32,"line":33},[30,146089,30518],{"class":36},[30,146091,26431],{"class":40},[30,146093,146094,146096],{"class":32,"line":44},[30,146095,24011],{"class":36},[30,146097,26431],{"class":40},[157,146099,146100,146101,146104],{},"如果提示 ",[27,146102,146103],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[287,146106,146108],{"id":146107},"_132-macos安装","1.3.2 macOS安装",[157,146110,146111],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[20,146113,146115],{"className":22,"code":146114,"language":24,"meta":25,"style":25},"brew install python\npython3 --version\npip3 --version\n",[27,146116,146117,146126,146132],{"__ignoreMap":25},[30,146118,146119,146122,146124],{"class":32,"line":33},[30,146120,146121],{"class":36},"brew",[30,146123,24014],{"class":74},[30,146125,124456],{"class":74},[30,146127,146128,146130],{"class":32,"line":44},[30,146129,101017],{"class":36},[30,146131,26431],{"class":40},[30,146133,146134,146136],{"class":32,"line":52},[30,146135,119838],{"class":36},[30,146137,26431],{"class":40},[157,146139,146140],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[287,146142,146144],{"id":146143},"_133-linux安装","1.3.3 Linux安装",[157,146146,146147],{},"Ubuntu\u002FDebian：",[20,146149,146151],{"className":22,"code":146150,"language":24,"meta":25,"style":25},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[27,146152,146153,146161,146176,146182],{"__ignoreMap":25},[30,146154,146155,146157,146159],{"class":32,"line":33},[30,146156,24757],{"class":36},[30,146158,117455],{"class":74},[30,146160,26380],{"class":74},[30,146162,146163,146165,146167,146169,146171,146173],{"class":32,"line":44},[30,146164,24757],{"class":36},[30,146166,117455],{"class":74},[30,146168,24014],{"class":74},[30,146170,104541],{"class":74},[30,146172,100936],{"class":74},[30,146174,146175],{"class":74}," python3-venv\n",[30,146177,146178,146180],{"class":32,"line":52},[30,146179,101017],{"class":36},[30,146181,26431],{"class":40},[30,146183,146184,146186],{"class":32,"line":60},[30,146185,119838],{"class":36},[30,146187,26431],{"class":40},[157,146189,146190],{},"Fedora：",[20,146192,146194],{"className":22,"code":146193,"language":24,"meta":25,"style":25},"sudo dnf install python3 python3-pip\n",[27,146195,146196],{"__ignoreMap":25},[30,146197,146198,146200,146202,146204,146206],{"class":32,"line":33},[30,146199,24757],{"class":36},[30,146201,26453],{"class":74},[30,146203,24014],{"class":74},[30,146205,104541],{"class":74},[30,146207,119903],{"class":74},[157,146209,146210,146211,146213],{},"Linux 上通常使用 ",[27,146212,101017],{}," 命令，避免和系统旧版本 Python 冲突。",[15,146215,146217],{"id":146216},"_14-pip包管理器","1.4 pip包管理器",[157,146219,146220,146222],{},[27,146221,24011],{}," 用来安装第三方库。",[20,146224,146226],{"className":22,"code":146225,"language":24,"meta":25,"style":25},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[27,146227,146228,146237,146246,146254,146260],{"__ignoreMap":25},[30,146229,146230,146232,146234],{"class":32,"line":33},[30,146231,24011],{"class":36},[30,146233,24014],{"class":74},[30,146235,146236],{"class":74}," requests\n",[30,146238,146239,146241,146244],{"class":32,"line":44},[30,146240,24011],{"class":36},[30,146242,146243],{"class":74}," uninstall",[30,146245,146236],{"class":74},[30,146247,146248,146250,146252],{"class":32,"line":52},[30,146249,24011],{"class":36},[30,146251,117712],{"class":74},[30,146253,146236],{"class":74},[30,146255,146256,146258],{"class":32,"line":60},[30,146257,24011],{"class":36},[30,146259,119093],{"class":74},[30,146261,146262,146264],{"class":32,"line":68},[30,146263,24011],{"class":36},[30,146265,146266],{"class":74}," freeze\n",[157,146268,146269],{},"国内网络较慢时可以临时使用镜像：",[20,146271,146273],{"className":22,"code":146272,"language":24,"meta":25,"style":25},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[27,146274,146275],{"__ignoreMap":25},[30,146276,146277,146279,146281,146284,146286],{"class":32,"line":33},[30,146278,24011],{"class":36},[30,146280,24014],{"class":74},[30,146282,146283],{"class":74}," requests",[30,146285,26568],{"class":40},[30,146287,119866],{"class":74},[157,146289,146290],{},"常见第三方库：",[457,146292,146293,146302],{},[460,146294,146295],{},[463,146296,146297,146300],{},[466,146298,146299],{},"库",[466,146301,102834],{},[504,146303,146304,146312,146319,146327,146335,146343,146351],{},[463,146305,146306,146309],{},[509,146307,146308],{},"requests",[509,146310,146311],{},"网络请求",[463,146313,146314,146316],{},[509,146315,100764],{},[509,146317,146318],{},"数值计算",[463,146320,146321,146324],{},[509,146322,146323],{},"pandas",[509,146325,146326],{},"表格数据处理",[463,146328,146329,146332],{},[509,146330,146331],{},"matplotlib",[509,146333,146334],{},"绘图",[463,146336,146337,146340],{},[509,146338,146339],{},"pyecharts",[509,146341,146342],{},"ECharts 图表",[463,146344,146345,146348],{},[509,146346,146347],{},"flask",[509,146349,146350],{},"Web 后端",[463,146352,146353,146356],{},[509,146354,146355],{},"pytest",[509,146357,146358],{},"自动化测试",[15,146360,146362],{"id":146361},"_15-虚拟环境","1.5 虚拟环境",[157,146364,146365,146366,146369],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[27,146367,146368],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[157,146371,146372],{},"创建虚拟环境：",[20,146374,146376],{"className":22,"code":146375,"language":24,"meta":25,"style":25},"python -m venv .venv\n",[27,146377,146378],{"__ignoreMap":25},[30,146379,146380,146382,146384,146386],{"class":32,"line":33},[30,146381,30518],{"class":36},[30,146383,101020],{"class":40},[30,146385,101023],{"class":74},[30,146387,101026],{"class":74},[157,146389,146390],{},"Windows 激活：",[20,146392,146394],{"className":22,"code":146393,"language":24,"meta":25,"style":25},".venv\\Scripts\\activate\n",[27,146395,146396],{"__ignoreMap":25},[30,146397,146398],{"class":32,"line":33},[30,146399,146393],{"class":36},[157,146401,146402],{},"macOS\u002FLinux 激活：",[20,146404,146406],{"className":22,"code":146405,"language":24,"meta":25,"style":25},"source .venv\u002Fbin\u002Factivate\n",[27,146407,146408],{"__ignoreMap":25},[30,146409,146410,146412],{"class":32,"line":33},[30,146411,101031],{"class":40},[30,146413,101034],{"class":74},[157,146415,146416],{},"退出虚拟环境：",[20,146418,146420],{"className":22,"code":146419,"language":24,"meta":25,"style":25},"deactivate\n",[27,146421,146422],{"__ignoreMap":25},[30,146423,146424],{"class":32,"line":33},[30,146425,146419],{"class":36},[157,146427,146428],{},"保存依赖：",[20,146430,146432],{"className":22,"code":146431,"language":24,"meta":25,"style":25},"pip freeze > requirements.txt\n",[27,146433,146434],{"__ignoreMap":25},[30,146435,146436,146438,146441,146443],{"class":32,"line":33},[30,146437,24011],{"class":36},[30,146439,146440],{"class":74}," freeze",[30,146442,26360],{"class":317},[30,146444,146445],{"class":74}," requirements.txt\n",[157,146447,146448],{},"安装依赖：",[20,146450,146452],{"className":22,"code":146451,"language":24,"meta":25,"style":25},"pip install -r requirements.txt\n",[27,146453,146454],{"__ignoreMap":25},[30,146455,146456,146458,146460,146462],{"class":32,"line":33},[30,146457,24011],{"class":36},[30,146459,24014],{"class":74},[30,146461,119777],{"class":40},[30,146463,146445],{"class":74},[15,146465,146467],{"id":146466},"_16-开发工具","1.6 开发工具",[287,146469,146471],{"id":146470},"_161-pycharm","1.6.1 PyCharm",[157,146473,146474],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[157,146476,122200],{},[271,146478,146479,146482,146485,146491,146494],{},[150,146480,146481],{},"New Project：创建项目。",[150,146483,146484],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[150,146486,146487,146488,126121],{},"New Python File：创建 ",[27,146489,146490],{},".py",[150,146492,146493],{},"Run：运行当前文件。",[150,146495,146496],{},"Debug：断点调试。",[287,146498,146500],{"id":146499},"_162-vs-code","1.6.2 VS Code",[157,146502,146503],{},"VS Code 轻量，适合后续多语言开发。",[157,146505,146506],{},"建议安装插件：",[271,146508,146509,146512,146515],{},[150,146510,146511],{},"Python。",[150,146513,146514],{},"Pylance。",[150,146516,146517],{},"Jupyter。",[157,146519,146520],{},"选择解释器：",[20,146522,146525],{"className":146523,"code":146524,"language":5369,"meta":25},[5367],"Ctrl + Shift + P -> Python: Select Interpreter\n",[27,146526,146524],{"__ignoreMap":25},[15,146528,146530],{"id":146529},"_17-第一个python程序","1.7 第一个Python程序",[157,146532,146533,146534,24799],{},"创建文件 ",[27,146535,146536],{},"hello.py",[20,146538,146540],{"className":30516,"code":146539,"language":30518,"meta":25,"style":25},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[27,146541,146542,146553],{"__ignoreMap":25},[30,146543,146544,146546,146548,146551],{"class":32,"line":33},[30,146545,30553],{"class":40},[30,146547,322],{"class":321},[30,146549,146550],{"class":74},"\"Hello World\"",[30,146552,328],{"class":321},[30,146554,146555,146557,146559,146562],{"class":32,"line":44},[30,146556,30553],{"class":40},[30,146558,322],{"class":321},[30,146560,146561],{"class":74},"\"你好，Python\"",[30,146563,328],{"class":321},[157,146565,146566],{},"在终端运行：",[20,146568,146570],{"className":22,"code":146569,"language":24,"meta":25,"style":25},"python hello.py\n",[27,146571,146572],{"__ignoreMap":25},[30,146573,146574,146576],{"class":32,"line":33},[30,146575,30518],{"class":36},[30,146577,146578],{"class":74}," hello.py\n",[157,146580,146581],{},"或：",[20,146583,146585],{"className":22,"code":146584,"language":24,"meta":25,"style":25},"python3 hello.py\n",[27,146586,146587],{"__ignoreMap":25},[30,146588,146589,146591],{"class":32,"line":33},[30,146590,101017],{"class":36},[30,146592,146578],{"class":74},[157,146594,146595],{},"输出：",[20,146597,146600],{"className":146598,"code":146599,"language":5369,"meta":25},[5367],"Hello World\n你好，Python\n",[27,146601,146599],{"__ignoreMap":25},[15,146603,146605],{"id":146604},"_18-print函数","1.8 print函数",[157,146607,146608,146611],{},[27,146609,146610],{},"print()"," 用来输出内容。",[20,146613,146615],{"className":30516,"code":146614,"language":30518,"meta":25,"style":25},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[27,146616,146617,146627,146637,146647],{"__ignoreMap":25},[30,146618,146619,146621,146623,146625],{"class":32,"line":33},[30,146620,30553],{"class":40},[30,146622,322],{"class":321},[30,146624,6026],{"class":74},[30,146626,328],{"class":321},[30,146628,146629,146631,146633,146635],{"class":32,"line":44},[30,146630,30553],{"class":40},[30,146632,322],{"class":321},[30,146634,631],{"class":40},[30,146636,328],{"class":321},[30,146638,146639,146641,146643,146645],{"class":32,"line":52},[30,146640,30553],{"class":40},[30,146642,322],{"class":321},[30,146644,370],{"class":40},[30,146646,328],{"class":321},[30,146648,146649,146651,146653,146656,146658,146660],{"class":32,"line":60},[30,146650,30553],{"class":40},[30,146652,322],{"class":321},[30,146654,146655],{"class":74},"\"年龄:\"",[30,146657,12617],{"class":321},[30,146659,970],{"class":40},[30,146661,328],{"class":321},[157,146663,146664],{},"多个内容用逗号隔开，默认中间加空格：",[20,146666,146668],{"className":30516,"code":146667,"language":30518,"meta":25,"style":25},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[27,146669,146670,146680,146690],{"__ignoreMap":25},[30,146671,146672,146675,146677],{"class":32,"line":33},[30,146673,146674],{"class":321},"name ",[30,146676,367],{"class":317},[30,146678,146679],{"class":74}," \"张三\"\n",[30,146681,146682,146685,146687],{"class":32,"line":44},[30,146683,146684],{"class":321},"age ",[30,146686,367],{"class":317},[30,146688,146689],{"class":40}," 18\n",[30,146691,146692,146694,146696,146699,146702,146704],{"class":32,"line":52},[30,146693,30553],{"class":40},[30,146695,322],{"class":321},[30,146697,146698],{"class":74},"\"姓名:\"",[30,146700,146701],{"class":321},", name, ",[30,146703,146655],{"class":74},[30,146705,146706],{"class":321},", age)\n",[157,146708,146709],{},"修改分隔符：",[20,146711,146713],{"className":30516,"code":146712,"language":30518,"meta":25,"style":25},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[27,146714,146715],{"__ignoreMap":25},[30,146716,146717,146719,146721,146724,146726,146728,146730,146732,146734,146737,146739,146741],{"class":32,"line":33},[30,146718,30553],{"class":40},[30,146720,322],{"class":321},[30,146722,146723],{"class":74},"\"2024\"",[30,146725,12617],{"class":321},[30,146727,54454],{"class":74},[30,146729,12617],{"class":321},[30,146731,54454],{"class":74},[30,146733,12617],{"class":321},[30,146735,146736],{"class":5398},"sep",[30,146738,367],{"class":317},[30,146740,32621],{"class":74},[30,146742,328],{"class":321},[157,146744,146745],{},"修改结尾符：",[20,146747,146749],{"className":30516,"code":146748,"language":30518,"meta":25,"style":25},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[27,146750,146751,146769],{"__ignoreMap":25},[30,146752,146753,146755,146757,146759,146761,146763,146765,146767],{"class":32,"line":33},[30,146754,30553],{"class":40},[30,146756,322],{"class":321},[30,146758,6026],{"class":74},[30,146760,12617],{"class":321},[30,146762,45939],{"class":5398},[30,146764,367],{"class":317},[30,146766,4541],{"class":74},[30,146768,328],{"class":321},[30,146770,146771,146773,146775,146778],{"class":32,"line":44},[30,146772,30553],{"class":40},[30,146774,322],{"class":321},[30,146776,146777],{"class":74},"\"python\"",[30,146779,328],{"class":321},[15,146781,146783],{"id":146782},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[157,146785,146786],{},"交互运行适合临时验证：",[20,146788,146790],{"className":30516,"code":146789,"language":30518,"meta":25,"style":25},">>> 10 * 3\n30\n",[27,146791,146792,146802],{"__ignoreMap":25},[30,146793,146794,146796,146798,146800],{"class":32,"line":33},[30,146795,145991],{"class":317},[30,146797,2220],{"class":40},[30,146799,6700],{"class":317},[30,146801,120174],{"class":40},[30,146803,146804],{"class":32,"line":44},[30,146805,146806],{"class":40},"30\n",[157,146808,146809],{},"脚本运行适合保存程序：",[20,146811,146813],{"className":30516,"code":146812,"language":30518,"meta":25,"style":25},"price = 8\ncount = 5\nprint(price * count)\n",[27,146814,146815,146825,146834],{"__ignoreMap":25},[30,146816,146817,146820,146822],{"class":32,"line":33},[30,146818,146819],{"class":321},"price ",[30,146821,367],{"class":317},[30,146823,146824],{"class":40}," 8\n",[30,146826,146827,146830,146832],{"class":32,"line":44},[30,146828,146829],{"class":321},"count ",[30,146831,367],{"class":317},[30,146833,54565],{"class":40},[30,146835,146836,146838,146841,146843],{"class":32,"line":52},[30,146837,30553],{"class":40},[30,146839,146840],{"class":321},"(price ",[30,146842,775],{"class":317},[30,146844,146845],{"class":321}," count)\n",[157,146847,146848],{},"实际学习中推荐：",[271,146850,146851,146854,146859],{},[150,146852,146853],{},"临时试一个语法，用交互模式。",[150,146855,146856,146857,126121],{},"写完整练习，用 ",[27,146858,146490],{},[150,146860,146861],{},"写项目，用独立目录和虚拟环境。",[15,146863,146865],{"id":146864},"_110-常见错误","1.10 常见错误",[287,146867,146869],{"id":146868},"_1101-命令找不到","1.10.1 命令找不到",[20,146871,146874],{"className":146872,"code":146873,"language":5369,"meta":25},[5367],"python: command not found\n",[27,146875,146873],{"__ignoreMap":25},[157,146877,146878],{},"原因：",[271,146880,146881,146884,146887],{},[150,146882,146883],{},"没安装 Python。",[150,146885,146886],{},"PATH 没配置。",[150,146888,146889,146890,28523],{},"Linux\u002FmacOS 应该使用 ",[27,146891,101017],{},[287,146893,146895],{"id":146894},"_1102-文件名冲突","1.10.2 文件名冲突",[157,146897,146898],{},"不要把文件命名为：",[20,146900,146903],{"className":146901,"code":146902,"language":5369,"meta":25},[5367],"random.py\njson.py\ntime.py\nrequests.py\n",[27,146904,146902],{"__ignoreMap":25},[157,146906,146907],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[287,146909,146911],{"id":146910},"_1103-中文乱码","1.10.3 中文乱码",[157,146913,146914],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[157,146916,146917],{},"如果读写文件出现乱码，要明确指定编码：",[20,146919,146921],{"className":30516,"code":146920,"language":30518,"meta":25,"style":25},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[27,146922,146923,146957],{"__ignoreMap":25},[30,146924,146925,146927,146930,146932,146935,146937,146940,146942,146945,146947,146950,146952,146954],{"class":32,"line":33},[30,146926,107971],{"class":317},[30,146928,146929],{"class":40}," open",[30,146931,322],{"class":321},[30,146933,146934],{"class":74},"\"data.txt\"",[30,146936,12617],{"class":321},[30,146938,146939],{"class":74},"\"r\"",[30,146941,12617],{"class":321},[30,146943,146944],{"class":5398},"encoding",[30,146946,367],{"class":317},[30,146948,146949],{"class":74},"\"utf-8\"",[30,146951,13896],{"class":321},[30,146953,31521],{"class":317},[30,146955,146956],{"class":321}," f:\n",[30,146958,146959,146962,146964],{"class":32,"line":44},[30,146960,146961],{"class":321},"    content ",[30,146963,367],{"class":317},[30,146965,146966],{"class":321}," f.read()\n",[15,146968,146970],{"id":146969},"_111-本章练习","1.11 本章练习",[271,146972,146973,146976,146982],{},[150,146974,146975],{},"安装 Python，并在终端输出版本号。",[150,146977,146978,146979,146981],{},"新建 ",[27,146980,146536],{},"，输出自己的姓名、年龄、学习目标。",[150,146983,104504,146984,146986],{},[27,146985,146610],{}," 输出下面格式：",[20,146988,146991],{"className":146989,"code":146990,"language":5369,"meta":25},[5367],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[27,146992,146990],{"__ignoreMap":25},[271,146994,146995],{"start":60},[150,146996,104504,146997,146999],{},[27,146998,146736],{}," 输出日期：",[20,147001,147004],{"className":147002,"code":147003,"language":5369,"meta":25},[5367],"2024-10-10\n",[27,147005,147003],{"__ignoreMap":25},[271,147007,147008],{"start":68},[150,147009,104504,147010,147012,147013,147015],{},[27,147011,45939],{}," 让两次 ",[27,147014,146610],{}," 输出在同一行。",[234,147017,147018],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":147020},[147021,147022,147023,147028,147029,147030,147034,147035,147036,147037,147042],{"id":145903,"depth":44,"text":145904},{"id":145947,"depth":44,"text":145948},{"id":146048,"depth":44,"text":146049,"children":147024},[147025,147026,147027],{"id":146052,"depth":52,"text":146053},{"id":146107,"depth":52,"text":146108},{"id":146143,"depth":52,"text":146144},{"id":146216,"depth":44,"text":146217},{"id":146361,"depth":44,"text":146362},{"id":146466,"depth":44,"text":146467,"children":147031},[147032,147033],{"id":146470,"depth":52,"text":146471},{"id":146499,"depth":52,"text":146500},{"id":146529,"depth":44,"text":146530},{"id":146604,"depth":44,"text":146605},{"id":146782,"depth":44,"text":146783},{"id":146864,"depth":44,"text":146865,"children":147038},[147039,147040,147041],{"id":146868,"depth":52,"text":146869},{"id":146894,"depth":52,"text":146895},{"id":146910,"depth":52,"text":146911},{"id":146969,"depth":44,"text":146970},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145895,"description":242},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147049,"title":147050,"body":147051,"description":242,"extension":243,"meta":149455,"navigation":245,"path":149456,"seo":149457,"stem":149458,"__hash__":149459},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147052,"toc":149440},[147053,147056,147060,147063,147066,147083,147086,147128,147131,147135,147138,147141,147178,147181,147215,147218,147310,147314,147328,147331,147358,147361,147365,147468,147475,147478,147495,147499,147506,147695,147698,147771,147775,147778,147862,147865,147897,147901,148105,148108,148112,148118,148220,148223,148479,148483,148486,148489,148503,148505,148691,148695,149057,149063,149067,149070,149194,149197,149376,149379,149383,149416,149420,149437],[10,147054,147050],{"id":147055},"_10-json与pyecharts折线图",[15,147057,147059],{"id":147058},"_101-数据可视化","10.1 数据可视化",[157,147061,147062],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[157,147064,147065],{},"常见图表：",[271,147067,147068,147071,147074,147077,147080],{},[150,147069,147070],{},"折线图：看趋势。",[150,147072,147073],{},"柱状图：看分类对比。",[150,147075,147076],{},"饼图：看占比。",[150,147078,147079],{},"地图：看地域分布。",[150,147081,147082],{},"散点图：看两个变量之间的关系。",[157,147084,147085],{},"Python 可视化常用库：",[457,147087,147088,147096],{},[460,147089,147090],{},[463,147091,147092,147094],{},[466,147093,146299],{},[466,147095,23922],{},[504,147097,147098,147105,147113,147120],{},[463,147099,147100,147102],{},[509,147101,146331],{},[509,147103,147104],{},"基础、经典、可定制",[463,147106,147107,147110],{},[509,147108,147109],{},"seaborn",[509,147111,147112],{},"统计图表更美观",[463,147114,147115,147117],{},[509,147116,146339],{},[509,147118,147119],{},"生成交互式网页图表",[463,147121,147122,147125],{},[509,147123,147124],{},"plotly",[509,147126,147127],{},"交互图表能力强",[157,147129,147130],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[15,147132,147134],{"id":147133},"_102-json回顾","10.2 JSON回顾",[157,147136,147137],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[157,147139,147140],{},"Python 字典：",[20,147142,147144],{"className":30516,"code":147143,"language":30518,"meta":25,"style":25},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[27,147145,147146,147154,147165,147174],{"__ignoreMap":25},[30,147147,147148,147150,147152],{"class":32,"line":33},[30,147149,101796],{"class":321},[30,147151,367],{"class":317},[30,147153,15754],{"class":321},[30,147155,147156,147159,147161,147163],{"class":32,"line":44},[30,147157,147158],{"class":74},"    \"name\"",[30,147160,51575],{"class":321},[30,147162,69407],{"class":74},[30,147164,31604],{"class":321},[30,147166,147167,147170,147172],{"class":32,"line":52},[30,147168,147169],{"class":74},"    \"value\"",[30,147171,51575],{"class":321},[30,147173,97596],{"class":40},[30,147175,147176],{"class":32,"line":60},[30,147177,1751],{"class":321},[157,147179,147180],{},"JSON 字符串：",[20,147182,147185],{"className":147183,"code":147184,"language":145930,"meta":25,"style":25},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[27,147186,147187,147191,147202,147211],{"__ignoreMap":25},[30,147188,147189],{"class":32,"line":33},[30,147190,1732],{"class":321},[30,147192,147193,147196,147198,147200],{"class":32,"line":44},[30,147194,147195],{"class":40},"  \"name\"",[30,147197,51575],{"class":321},[30,147199,69407],{"class":74},[30,147201,31604],{"class":321},[30,147203,147204,147207,147209],{"class":32,"line":52},[30,147205,147206],{"class":40},"  \"value\"",[30,147208,51575],{"class":321},[30,147210,97596],{"class":40},[30,147212,147213],{"class":32,"line":60},[30,147214,1751],{"class":321},[157,147216,147217],{},"Python 与 JSON 的转换：",[20,147219,147221],{"className":30516,"code":147220,"language":30518,"meta":25,"style":25},"import json\n\ndata = {\"name\": \"北京\", \"value\": 100}\n\njson_text = json.dumps(data, ensure_ascii=False)\nprint(json_text)\n\nnew_data = json.loads(json_text)\nprint(new_data)\n",[27,147222,147223,147230,147234,147259,147263,147282,147289,147293,147303],{"__ignoreMap":25},[30,147224,147225,147227],{"class":32,"line":33},[30,147226,30530],{"class":317},[30,147228,147229],{"class":321}," json\n",[30,147231,147232],{"class":32,"line":44},[30,147233,2582],{"emptyLinePlaceholder":245},[30,147235,147236,147238,147240,147242,147244,147246,147248,147250,147253,147255,147257],{"class":32,"line":52},[30,147237,101796],{"class":321},[30,147239,367],{"class":317},[30,147241,4630],{"class":321},[30,147243,62817],{"class":74},[30,147245,51575],{"class":321},[30,147247,69407],{"class":74},[30,147249,12617],{"class":321},[30,147251,147252],{"class":74},"\"value\"",[30,147254,51575],{"class":321},[30,147256,631],{"class":40},[30,147258,1751],{"class":321},[30,147260,147261],{"class":32,"line":60},[30,147262,2582],{"emptyLinePlaceholder":245},[30,147264,147265,147268,147270,147273,147276,147278,147280],{"class":32,"line":68},[30,147266,147267],{"class":321},"json_text ",[30,147269,367],{"class":317},[30,147271,147272],{"class":321}," json.dumps(data, ",[30,147274,147275],{"class":5398},"ensure_ascii",[30,147277,367],{"class":317},[30,147279,34125],{"class":40},[30,147281,328],{"class":321},[30,147283,147284,147286],{"class":32,"line":80},[30,147285,30553],{"class":40},[30,147287,147288],{"class":321},"(json_text)\n",[30,147290,147291],{"class":32,"line":88},[30,147292,2582],{"emptyLinePlaceholder":245},[30,147294,147295,147298,147300],{"class":32,"line":96},[30,147296,147297],{"class":321},"new_data ",[30,147299,367],{"class":317},[30,147301,147302],{"class":321}," json.loads(json_text)\n",[30,147304,147305,147307],{"class":32,"line":104},[30,147306,30553],{"class":40},[30,147308,147309],{"class":321},"(new_data)\n",[15,147311,147313],{"id":147312},"_103-安装pyecharts","10.3 安装pyecharts",[20,147315,147317],{"className":22,"code":147316,"language":24,"meta":25,"style":25},"pip install pyecharts\n",[27,147318,147319],{"__ignoreMap":25},[30,147320,147321,147323,147325],{"class":32,"line":33},[30,147322,24011],{"class":36},[30,147324,24014],{"class":74},[30,147326,147327],{"class":74}," pyecharts\n",[157,147329,147330],{},"验证：",[20,147332,147334],{"className":30516,"code":147333,"language":30518,"meta":25,"style":25},"import pyecharts\n\nprint(pyecharts.__version__)\n",[27,147335,147336,147342,147346],{"__ignoreMap":25},[30,147337,147338,147340],{"class":32,"line":33},[30,147339,30530],{"class":317},[30,147341,147327],{"class":321},[30,147343,147344],{"class":32,"line":44},[30,147345,2582],{"emptyLinePlaceholder":245},[30,147347,147348,147350,147353,147356],{"class":32,"line":52},[30,147349,30553],{"class":40},[30,147351,147352],{"class":321},"(pyecharts.",[30,147354,147355],{"class":40},"__version__",[30,147357,328],{"class":321},[157,147359,147360],{},"如果使用虚拟环境，要先激活环境再安装。",[15,147362,147364],{"id":147363},"_104-第一个折线图","10.4 第一个折线图",[20,147366,147368],{"className":30516,"code":147367,"language":30518,"meta":25,"style":25},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[27,147369,147370,147382,147386,147396,147426,147458],{"__ignoreMap":25},[30,147371,147372,147374,147377,147379],{"class":32,"line":33},[30,147373,30875],{"class":317},[30,147375,147376],{"class":321}," pyecharts.charts ",[30,147378,30530],{"class":317},[30,147380,147381],{"class":321}," Line\n",[30,147383,147384],{"class":32,"line":44},[30,147385,2582],{"emptyLinePlaceholder":245},[30,147387,147388,147391,147393],{"class":32,"line":52},[30,147389,147390],{"class":321},"line ",[30,147392,367],{"class":317},[30,147394,147395],{"class":321}," Line()\n",[30,147397,147398,147401,147404,147406,147409,147411,147414,147416,147419,147421,147424],{"class":32,"line":60},[30,147399,147400],{"class":321},"line.add_xaxis([",[30,147402,147403],{"class":74},"\"周一\"",[30,147405,12617],{"class":321},[30,147407,147408],{"class":74},"\"周二\"",[30,147410,12617],{"class":321},[30,147412,147413],{"class":74},"\"周三\"",[30,147415,12617],{"class":321},[30,147417,147418],{"class":74},"\"周四\"",[30,147420,12617],{"class":321},[30,147422,147423],{"class":74},"\"周五\"",[30,147425,4839],{"class":321},[30,147427,147428,147431,147434,147436,147438,147440,147442,147444,147446,147448,147451,147453,147456],{"class":32,"line":68},[30,147429,147430],{"class":321},"line.add_yaxis(",[30,147432,147433],{"class":74},"\"销售额\"",[30,147435,77656],{"class":321},[30,147437,631],{"class":40},[30,147439,12617],{"class":321},[30,147441,1137],{"class":40},[30,147443,12617],{"class":321},[30,147445,1182],{"class":40},[30,147447,12617],{"class":321},[30,147449,147450],{"class":40},"150",[30,147452,12617],{"class":321},[30,147454,147455],{"class":40},"180",[30,147457,4839],{"class":321},[30,147459,147460,147463,147466],{"class":32,"line":80},[30,147461,147462],{"class":321},"line.render(",[30,147464,147465],{"class":74},"\"line.html\"",[30,147467,328],{"class":321},[157,147469,147470,147471,147474],{},"运行后会生成 ",[27,147472,147473],{},"line.html","，用浏览器打开即可看到图表。",[157,147476,147477],{},"核心步骤：",[271,147479,147480,147483,147486,147489,147492],{},[150,147481,147482],{},"导入图表类。",[150,147484,147485],{},"创建图表对象。",[150,147487,147488],{},"添加 x 轴数据。",[150,147490,147491],{},"添加 y 轴数据。",[150,147493,147494],{},"渲染为 HTML。",[15,147496,147498],{"id":147497},"_105-全局配置","10.5 全局配置",[157,147500,147501,147502,147505],{},"常用配置在 ",[27,147503,147504],{},"pyecharts.options"," 中。",[20,147507,147509],{"className":30516,"code":147508,"language":30518,"meta":25,"style":25},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"一周销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"line.html\")\n",[27,147510,147511,147528,147538,147542,147550,147574,147602,147607,147626,147645,147663,147683,147687],{"__ignoreMap":25},[30,147512,147513,147515,147518,147520,147523,147525],{"class":32,"line":33},[30,147514,30875],{"class":317},[30,147516,147517],{"class":321}," pyecharts ",[30,147519,30530],{"class":317},[30,147521,147522],{"class":321}," options ",[30,147524,31521],{"class":317},[30,147526,147527],{"class":321}," opts\n",[30,147529,147530,147532,147534,147536],{"class":32,"line":44},[30,147531,30875],{"class":317},[30,147533,147376],{"class":321},[30,147535,30530],{"class":317},[30,147537,147381],{"class":321},[30,147539,147540],{"class":32,"line":52},[30,147541,2582],{"emptyLinePlaceholder":245},[30,147543,147544,147546,147548],{"class":32,"line":60},[30,147545,147390],{"class":321},[30,147547,367],{"class":317},[30,147549,147395],{"class":321},[30,147551,147552,147554,147556,147558,147560,147562,147564,147566,147568,147570,147572],{"class":32,"line":68},[30,147553,147400],{"class":321},[30,147555,147403],{"class":74},[30,147557,12617],{"class":321},[30,147559,147408],{"class":74},[30,147561,12617],{"class":321},[30,147563,147413],{"class":74},[30,147565,12617],{"class":321},[30,147567,147418],{"class":74},[30,147569,12617],{"class":321},[30,147571,147423],{"class":74},[30,147573,4839],{"class":321},[30,147575,147576,147578,147580,147582,147584,147586,147588,147590,147592,147594,147596,147598,147600],{"class":32,"line":80},[30,147577,147430],{"class":321},[30,147579,147433],{"class":74},[30,147581,77656],{"class":321},[30,147583,631],{"class":40},[30,147585,12617],{"class":321},[30,147587,1137],{"class":40},[30,147589,12617],{"class":321},[30,147591,1182],{"class":40},[30,147593,12617],{"class":321},[30,147595,147450],{"class":40},[30,147597,12617],{"class":321},[30,147599,147455],{"class":40},[30,147601,4839],{"class":321},[30,147603,147604],{"class":32,"line":88},[30,147605,147606],{"class":321},"line.set_global_opts(\n",[30,147608,147609,147612,147614,147617,147619,147621,147624],{"class":32,"line":96},[30,147610,147611],{"class":5398},"    title_opts",[30,147613,367],{"class":317},[30,147615,147616],{"class":321},"opts.TitleOpts(",[30,147618,51545],{"class":5398},[30,147620,367],{"class":317},[30,147622,147623],{"class":74},"\"一周销售额\"",[30,147625,38185],{"class":321},[30,147627,147628,147631,147633,147636,147638,147640,147643],{"class":32,"line":104},[30,147629,147630],{"class":5398},"    xaxis_opts",[30,147632,367],{"class":317},[30,147634,147635],{"class":321},"opts.AxisOpts(",[30,147637,79948],{"class":5398},[30,147639,367],{"class":317},[30,147641,147642],{"class":74},"\"日期\"",[30,147644,38185],{"class":321},[30,147646,147647,147650,147652,147654,147656,147658,147661],{"class":32,"line":112},[30,147648,147649],{"class":5398},"    yaxis_opts",[30,147651,367],{"class":317},[30,147653,147635],{"class":321},[30,147655,79948],{"class":5398},[30,147657,367],{"class":317},[30,147659,147660],{"class":74},"\"金额\"",[30,147662,38185],{"class":321},[30,147664,147665,147668,147670,147673,147676,147678,147681],{"class":32,"line":123},[30,147666,147667],{"class":5398},"    tooltip_opts",[30,147669,367],{"class":317},[30,147671,147672],{"class":321},"opts.TooltipOpts(",[30,147674,147675],{"class":5398},"trigger",[30,147677,367],{"class":317},[30,147679,147680],{"class":74},"\"axis\"",[30,147682,38185],{"class":321},[30,147684,147685],{"class":32,"line":131},[30,147686,328],{"class":321},[30,147688,147689,147691,147693],{"class":32,"line":142},[30,147690,147462],{"class":321},[30,147692,147465],{"class":74},[30,147694,328],{"class":321},[157,147696,147697],{},"常见全局配置：",[457,147699,147700,147709],{},[460,147701,147702],{},[463,147703,147704,147707],{},[466,147705,147706],{},"配置",[466,147708,102834],{},[504,147710,147711,147721,147731,147741,147751,147761],{},[463,147712,147713,147718],{},[509,147714,147715],{},[27,147716,147717],{},"TitleOpts",[509,147719,147720],{},"标题",[463,147722,147723,147728],{},[509,147724,147725],{},[27,147726,147727],{},"LegendOpts",[509,147729,147730],{},"图例",[463,147732,147733,147738],{},[509,147734,147735],{},[27,147736,147737],{},"TooltipOpts",[509,147739,147740],{},"提示框",[463,147742,147743,147748],{},[509,147744,147745],{},[27,147746,147747],{},"AxisOpts",[509,147749,147750],{},"坐标轴",[463,147752,147753,147758],{},[509,147754,147755],{},[27,147756,147757],{},"VisualMapOpts",[509,147759,147760],{},"视觉映射",[463,147762,147763,147768],{},[509,147764,147765],{},[27,147766,147767],{},"DataZoomOpts",[509,147769,147770],{},"区域缩放",[15,147772,147774],{"id":147773},"_106-系列配置","10.6 系列配置",[157,147776,147777],{},"系列配置作用于某一组数据。",[20,147779,147781],{"className":30516,"code":147780,"language":30518,"meta":25,"style":25},"line.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=[100, 120, 90, 150, 180],\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\n",[27,147782,147783,147788,147799,147828,147839,147858],{"__ignoreMap":25},[30,147784,147785],{"class":32,"line":33},[30,147786,147787],{"class":321},"line.add_yaxis(\n",[30,147789,147790,147793,147795,147797],{"class":32,"line":44},[30,147791,147792],{"class":5398},"    series_name",[30,147794,367],{"class":317},[30,147796,147433],{"class":74},[30,147798,31604],{"class":321},[30,147800,147801,147804,147806,147808,147810,147812,147814,147816,147818,147820,147822,147824,147826],{"class":32,"line":52},[30,147802,147803],{"class":5398},"    y_axis",[30,147805,367],{"class":317},[30,147807,1210],{"class":321},[30,147809,631],{"class":40},[30,147811,12617],{"class":321},[30,147813,1137],{"class":40},[30,147815,12617],{"class":321},[30,147817,1182],{"class":40},[30,147819,12617],{"class":321},[30,147821,147450],{"class":40},[30,147823,12617],{"class":321},[30,147825,147455],{"class":40},[30,147827,87974],{"class":321},[30,147829,147830,147833,147835,147837],{"class":32,"line":60},[30,147831,147832],{"class":5398},"    is_smooth",[30,147834,367],{"class":317},[30,147836,31614],{"class":40},[30,147838,31604],{"class":321},[30,147840,147841,147844,147846,147849,147852,147854,147856],{"class":32,"line":68},[30,147842,147843],{"class":5398},"    label_opts",[30,147845,367],{"class":317},[30,147847,147848],{"class":321},"opts.LabelOpts(",[30,147850,147851],{"class":5398},"is_show",[30,147853,367],{"class":317},[30,147855,31614],{"class":40},[30,147857,38185],{"class":321},[30,147859,147860],{"class":32,"line":80},[30,147861,328],{"class":321},[157,147863,147864],{},"常用参数：",[271,147866,147867,147873,147879,147885,147891],{},[150,147868,147869,147872],{},[27,147870,147871],{},"series_name","：系列名称。",[150,147874,147875,147878],{},[27,147876,147877],{},"y_axis","：y 轴数据。",[150,147880,147881,147884],{},[27,147882,147883],{},"is_smooth","：是否平滑曲线。",[150,147886,147887,147890],{},[27,147888,147889],{},"label_opts","：标签配置。",[150,147892,147893,147896],{},[27,147894,147895],{},"symbol_size","：标记点大小。",[15,147898,147900],{"id":147899},"_107-多条折线","10.7 多条折线",[20,147902,147904],{"className":30516,"code":147903,"language":30518,"meta":25,"style":25},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", [100, 130, 120, 160, 200], is_smooth=True)\nline.add_yaxis(\"线下销售\", [80, 90, 100, 120, 150], is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"线上线下销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[27,147905,147906,147920,147930,147934,147963,147967,147975,147980,148018,148055,148059,148076,148092,148096],{"__ignoreMap":25},[30,147907,147908,147910,147912,147914,147916,147918],{"class":32,"line":33},[30,147909,30875],{"class":317},[30,147911,147517],{"class":321},[30,147913,30530],{"class":317},[30,147915,147522],{"class":321},[30,147917,31521],{"class":317},[30,147919,147527],{"class":321},[30,147921,147922,147924,147926,147928],{"class":32,"line":44},[30,147923,30875],{"class":317},[30,147925,147376],{"class":321},[30,147927,30530],{"class":317},[30,147929,147381],{"class":321},[30,147931,147932],{"class":32,"line":52},[30,147933,2582],{"emptyLinePlaceholder":245},[30,147935,147936,147939,147941,147943,147945,147947,147949,147951,147953,147955,147957,147959,147961],{"class":32,"line":60},[30,147937,147938],{"class":321},"dates ",[30,147940,367],{"class":317},[30,147942,52364],{"class":321},[30,147944,147403],{"class":74},[30,147946,12617],{"class":321},[30,147948,147408],{"class":74},[30,147950,12617],{"class":321},[30,147952,147413],{"class":74},[30,147954,12617],{"class":321},[30,147956,147418],{"class":74},[30,147958,12617],{"class":321},[30,147960,147423],{"class":74},[30,147962,33384],{"class":321},[30,147964,147965],{"class":32,"line":68},[30,147966,2582],{"emptyLinePlaceholder":245},[30,147968,147969,147971,147973],{"class":32,"line":80},[30,147970,147390],{"class":321},[30,147972,367],{"class":317},[30,147974,147395],{"class":321},[30,147976,147977],{"class":32,"line":88},[30,147978,147979],{"class":321},"line.add_xaxis(dates)\n",[30,147981,147982,147984,147987,147989,147991,147993,147996,147998,148000,148002,148004,148006,148008,148010,148012,148014,148016],{"class":32,"line":96},[30,147983,147430],{"class":321},[30,147985,147986],{"class":74},"\"线上销售\"",[30,147988,77656],{"class":321},[30,147990,631],{"class":40},[30,147992,12617],{"class":321},[30,147994,147995],{"class":40},"130",[30,147997,12617],{"class":321},[30,147999,1137],{"class":40},[30,148001,12617],{"class":321},[30,148003,21230],{"class":40},[30,148005,12617],{"class":321},[30,148007,1905],{"class":40},[30,148009,112340],{"class":321},[30,148011,147883],{"class":5398},[30,148013,367],{"class":317},[30,148015,31614],{"class":40},[30,148017,328],{"class":321},[30,148019,148020,148022,148025,148027,148029,148031,148033,148035,148037,148039,148041,148043,148045,148047,148049,148051,148053],{"class":32,"line":104},[30,148021,147430],{"class":321},[30,148023,148024],{"class":74},"\"线下销售\"",[30,148026,77656],{"class":321},[30,148028,932],{"class":40},[30,148030,12617],{"class":321},[30,148032,1182],{"class":40},[30,148034,12617],{"class":321},[30,148036,631],{"class":40},[30,148038,12617],{"class":321},[30,148040,1137],{"class":40},[30,148042,12617],{"class":321},[30,148044,147450],{"class":40},[30,148046,112340],{"class":321},[30,148048,147883],{"class":5398},[30,148050,367],{"class":317},[30,148052,31614],{"class":40},[30,148054,328],{"class":321},[30,148056,148057],{"class":32,"line":112},[30,148058,147606],{"class":321},[30,148060,148061,148063,148065,148067,148069,148071,148074],{"class":32,"line":123},[30,148062,147611],{"class":5398},[30,148064,367],{"class":317},[30,148066,147616],{"class":321},[30,148068,51545],{"class":5398},[30,148070,367],{"class":317},[30,148072,148073],{"class":74},"\"线上线下销售趋势\"",[30,148075,38185],{"class":321},[30,148077,148078,148080,148082,148084,148086,148088,148090],{"class":32,"line":131},[30,148079,147667],{"class":5398},[30,148081,367],{"class":317},[30,148083,147672],{"class":321},[30,148085,147675],{"class":5398},[30,148087,367],{"class":317},[30,148089,147680],{"class":74},[30,148091,38185],{"class":321},[30,148093,148094],{"class":32,"line":142},[30,148095,328],{"class":321},[30,148097,148098,148100,148103],{"class":32,"line":1811},[30,148099,147462],{"class":321},[30,148101,148102],{"class":74},"\"sales.html\"",[30,148104,328],{"class":321},[157,148106,148107],{},"多条折线适合比较不同指标或不同地区。",[15,148109,148111],{"id":148110},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[157,148113,148114,148115,24799],{},"假设 ",[27,148116,148117],{},"sales.json",[20,148119,148121],{"className":147183,"code":148120,"language":145930,"meta":25,"style":25},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[27,148122,148123,148128,148160,148188,148216],{"__ignoreMap":25},[30,148124,148125],{"class":32,"line":33},[30,148126,148127],{"class":321},"[\n",[30,148129,148130,148133,148136,148138,148140,148142,148145,148147,148149,148151,148154,148156,148158],{"class":32,"line":44},[30,148131,148132],{"class":321},"  {",[30,148134,148135],{"class":40},"\"date\"",[30,148137,51575],{"class":321},[30,148139,147403],{"class":74},[30,148141,12617],{"class":321},[30,148143,148144],{"class":40},"\"online\"",[30,148146,51575],{"class":321},[30,148148,631],{"class":40},[30,148150,12617],{"class":321},[30,148152,148153],{"class":40},"\"offline\"",[30,148155,51575],{"class":321},[30,148157,932],{"class":40},[30,148159,5112],{"class":321},[30,148161,148162,148164,148166,148168,148170,148172,148174,148176,148178,148180,148182,148184,148186],{"class":32,"line":52},[30,148163,148132],{"class":321},[30,148165,148135],{"class":40},[30,148167,51575],{"class":321},[30,148169,147408],{"class":74},[30,148171,12617],{"class":321},[30,148173,148144],{"class":40},[30,148175,51575],{"class":321},[30,148177,147995],{"class":40},[30,148179,12617],{"class":321},[30,148181,148153],{"class":40},[30,148183,51575],{"class":321},[30,148185,1182],{"class":40},[30,148187,5112],{"class":321},[30,148189,148190,148192,148194,148196,148198,148200,148202,148204,148206,148208,148210,148212,148214],{"class":32,"line":60},[30,148191,148132],{"class":321},[30,148193,148135],{"class":40},[30,148195,51575],{"class":321},[30,148197,147413],{"class":74},[30,148199,12617],{"class":321},[30,148201,148144],{"class":40},[30,148203,51575],{"class":321},[30,148205,1137],{"class":40},[30,148207,12617],{"class":321},[30,148209,148153],{"class":40},[30,148211,51575],{"class":321},[30,148213,631],{"class":40},[30,148215,1751],{"class":321},[30,148217,148218],{"class":32,"line":68},[30,148219,33384],{"class":321},[157,148221,148222],{},"读取并绘图：",[20,148224,148226],{"className":30516,"code":148225,"language":30518,"meta":25,"style":25},"import json\nfrom pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nwith open(\"sales.json\", \"r\", encoding=\"utf-8\") as file:\n    data = json.load(file)\n\ndates = []\nonline_sales = []\noffline_sales = []\n\nfor item in data:\n    dates.append(item[\"date\"])\n    online_sales.append(item[\"online\"])\n    offline_sales.append(item[\"offline\"])\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", online_sales, is_smooth=True)\nline.add_yaxis(\"线下销售\", offline_sales, is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[27,148227,148228,148234,148248,148258,148262,148294,148307,148311,148319,148328,148337,148341,148353,148362,148371,148380,148384,148392,148396,148413,148430,148434,148451,148467,148471],{"__ignoreMap":25},[30,148229,148230,148232],{"class":32,"line":33},[30,148231,30530],{"class":317},[30,148233,147229],{"class":321},[30,148235,148236,148238,148240,148242,148244,148246],{"class":32,"line":44},[30,148237,30875],{"class":317},[30,148239,147517],{"class":321},[30,148241,30530],{"class":317},[30,148243,147522],{"class":321},[30,148245,31521],{"class":317},[30,148247,147527],{"class":321},[30,148249,148250,148252,148254,148256],{"class":32,"line":52},[30,148251,30875],{"class":317},[30,148253,147376],{"class":321},[30,148255,30530],{"class":317},[30,148257,147381],{"class":321},[30,148259,148260],{"class":32,"line":60},[30,148261,2582],{"emptyLinePlaceholder":245},[30,148263,148264,148266,148268,148270,148273,148275,148277,148279,148281,148283,148285,148287,148289,148292],{"class":32,"line":68},[30,148265,107971],{"class":317},[30,148267,146929],{"class":40},[30,148269,322],{"class":321},[30,148271,148272],{"class":74},"\"sales.json\"",[30,148274,12617],{"class":321},[30,148276,146939],{"class":74},[30,148278,12617],{"class":321},[30,148280,146944],{"class":5398},[30,148282,367],{"class":317},[30,148284,146949],{"class":74},[30,148286,13896],{"class":321},[30,148288,31521],{"class":317},[30,148290,148291],{"class":5398}," file",[30,148293,3921],{"class":321},[30,148295,148296,148298,148300,148303,148305],{"class":32,"line":80},[30,148297,101559],{"class":321},[30,148299,367],{"class":317},[30,148301,148302],{"class":321}," json.load(",[30,148304,45492],{"class":5398},[30,148306,328],{"class":321},[30,148308,148309],{"class":32,"line":88},[30,148310,2582],{"emptyLinePlaceholder":245},[30,148312,148313,148315,148317],{"class":32,"line":96},[30,148314,147938],{"class":321},[30,148316,367],{"class":317},[30,148318,51976],{"class":321},[30,148320,148321,148324,148326],{"class":32,"line":104},[30,148322,148323],{"class":321},"online_sales ",[30,148325,367],{"class":317},[30,148327,51976],{"class":321},[30,148329,148330,148333,148335],{"class":32,"line":112},[30,148331,148332],{"class":321},"offline_sales ",[30,148334,367],{"class":317},[30,148336,51976],{"class":321},[30,148338,148339],{"class":32,"line":123},[30,148340,2582],{"emptyLinePlaceholder":245},[30,148342,148343,148345,148348,148350],{"class":32,"line":131},[30,148344,3207],{"class":317},[30,148346,148347],{"class":321}," item ",[30,148349,26181],{"class":317},[30,148351,148352],{"class":321}," data:\n",[30,148354,148355,148358,148360],{"class":32,"line":142},[30,148356,148357],{"class":321},"    dates.append(item[",[30,148359,148135],{"class":74},[30,148361,4839],{"class":321},[30,148363,148364,148367,148369],{"class":32,"line":1811},[30,148365,148366],{"class":321},"    online_sales.append(item[",[30,148368,148144],{"class":74},[30,148370,4839],{"class":321},[30,148372,148373,148376,148378],{"class":32,"line":1825},[30,148374,148375],{"class":321},"    offline_sales.append(item[",[30,148377,148153],{"class":74},[30,148379,4839],{"class":321},[30,148381,148382],{"class":32,"line":1830},[30,148383,2582],{"emptyLinePlaceholder":245},[30,148385,148386,148388,148390],{"class":32,"line":1836},[30,148387,147390],{"class":321},[30,148389,367],{"class":317},[30,148391,147395],{"class":321},[30,148393,148394],{"class":32,"line":1857},[30,148395,147979],{"class":321},[30,148397,148398,148400,148402,148405,148407,148409,148411],{"class":32,"line":1862},[30,148399,147430],{"class":321},[30,148401,147986],{"class":74},[30,148403,148404],{"class":321},", online_sales, ",[30,148406,147883],{"class":5398},[30,148408,367],{"class":317},[30,148410,31614],{"class":40},[30,148412,328],{"class":321},[30,148414,148415,148417,148419,148422,148424,148426,148428],{"class":32,"line":1876},[30,148416,147430],{"class":321},[30,148418,148024],{"class":74},[30,148420,148421],{"class":321},", offline_sales, ",[30,148423,147883],{"class":5398},[30,148425,367],{"class":317},[30,148427,31614],{"class":40},[30,148429,328],{"class":321},[30,148431,148432],{"class":32,"line":1881},[30,148433,147606],{"class":321},[30,148435,148436,148438,148440,148442,148444,148446,148449],{"class":32,"line":1910},[30,148437,147611],{"class":5398},[30,148439,367],{"class":317},[30,148441,147616],{"class":321},[30,148443,51545],{"class":5398},[30,148445,367],{"class":317},[30,148447,148448],{"class":74},"\"销售趋势\"",[30,148450,38185],{"class":321},[30,148452,148453,148455,148457,148459,148461,148463,148465],{"class":32,"line":1915},[30,148454,147667],{"class":5398},[30,148456,367],{"class":317},[30,148458,147672],{"class":321},[30,148460,147675],{"class":5398},[30,148462,367],{"class":317},[30,148464,147680],{"class":74},[30,148466,38185],{"class":321},[30,148468,148469],{"class":32,"line":1932},[30,148470,328],{"class":321},[30,148472,148473,148475,148477],{"class":32,"line":1937},[30,148474,147462],{"class":321},[30,148476,148102],{"class":74},[30,148478,328],{"class":321},[15,148480,148482],{"id":148481},"_109-数据清洗","10.9 数据清洗",[157,148484,148485],{},"真实数据经常不整齐，需要清洗。",[157,148487,148488],{},"常见问题：",[271,148490,148491,148494,148497,148500],{},[150,148492,148493],{},"数字是字符串。",[150,148495,148496],{},"字段缺失。",[150,148498,148499],{},"空值。",[150,148501,148502],{},"日期格式不统一。",[157,148504,15317],{},[20,148506,148508],{"className":30516,"code":148507,"language":30518,"meta":25,"style":25},"raw_data = [\n    {\"date\": \"周一\", \"sales\": \"100\"},\n    {\"date\": \"周二\", \"sales\": \"\"},\n    {\"date\": \"周三\", \"sales\": \"120\"},\n]\n\ndates = []\nsales = []\n\nfor item in raw_data:\n    value = item.get(\"sales\")\n    if not value:\n        continue\n\n    dates.append(item[\"date\"])\n    sales.append(int(value))\n\nprint(dates)\nprint(sales)\n",[27,148509,148510,148519,148542,148562,148583,148587,148591,148599,148608,148612,148623,148637,148646,148651,148655,148663,148673,148677,148684],{"__ignoreMap":25},[30,148511,148512,148515,148517],{"class":32,"line":33},[30,148513,148514],{"class":321},"raw_data ",[30,148516,367],{"class":317},[30,148518,55585],{"class":321},[30,148520,148521,148524,148526,148528,148530,148532,148535,148537,148540],{"class":32,"line":44},[30,148522,148523],{"class":321},"    {",[30,148525,148135],{"class":74},[30,148527,51575],{"class":321},[30,148529,147403],{"class":74},[30,148531,12617],{"class":321},[30,148533,148534],{"class":74},"\"sales\"",[30,148536,51575],{"class":321},[30,148538,148539],{"class":74},"\"100\"",[30,148541,5112],{"class":321},[30,148543,148544,148546,148548,148550,148552,148554,148556,148558,148560],{"class":32,"line":52},[30,148545,148523],{"class":321},[30,148547,148135],{"class":74},[30,148549,51575],{"class":321},[30,148551,147408],{"class":74},[30,148553,12617],{"class":321},[30,148555,148534],{"class":74},[30,148557,51575],{"class":321},[30,148559,7834],{"class":74},[30,148561,5112],{"class":321},[30,148563,148564,148566,148568,148570,148572,148574,148576,148578,148581],{"class":32,"line":60},[30,148565,148523],{"class":321},[30,148567,148135],{"class":74},[30,148569,51575],{"class":321},[30,148571,147413],{"class":74},[30,148573,12617],{"class":321},[30,148575,148534],{"class":74},[30,148577,51575],{"class":321},[30,148579,148580],{"class":74},"\"120\"",[30,148582,5112],{"class":321},[30,148584,148585],{"class":32,"line":68},[30,148586,33384],{"class":321},[30,148588,148589],{"class":32,"line":80},[30,148590,2582],{"emptyLinePlaceholder":245},[30,148592,148593,148595,148597],{"class":32,"line":88},[30,148594,147938],{"class":321},[30,148596,367],{"class":317},[30,148598,51976],{"class":321},[30,148600,148601,148604,148606],{"class":32,"line":96},[30,148602,148603],{"class":321},"sales ",[30,148605,367],{"class":317},[30,148607,51976],{"class":321},[30,148609,148610],{"class":32,"line":104},[30,148611,2582],{"emptyLinePlaceholder":245},[30,148613,148614,148616,148618,148620],{"class":32,"line":112},[30,148615,3207],{"class":317},[30,148617,148347],{"class":321},[30,148619,26181],{"class":317},[30,148621,148622],{"class":321}," raw_data:\n",[30,148624,148625,148628,148630,148633,148635],{"class":32,"line":123},[30,148626,148627],{"class":321},"    value ",[30,148629,367],{"class":317},[30,148631,148632],{"class":321}," item.get(",[30,148634,148534],{"class":74},[30,148636,328],{"class":321},[30,148638,148639,148641,148643],{"class":32,"line":131},[30,148640,3283],{"class":317},[30,148642,39068],{"class":317},[30,148644,148645],{"class":321}," value:\n",[30,148647,148648],{"class":32,"line":142},[30,148649,148650],{"class":317},"        continue\n",[30,148652,148653],{"class":32,"line":1811},[30,148654,2582],{"emptyLinePlaceholder":245},[30,148656,148657,148659,148661],{"class":32,"line":1825},[30,148658,148357],{"class":321},[30,148660,148135],{"class":74},[30,148662,4839],{"class":321},[30,148664,148665,148668,148670],{"class":32,"line":1830},[30,148666,148667],{"class":321},"    sales.append(",[30,148669,325],{"class":40},[30,148671,148672],{"class":321},"(value))\n",[30,148674,148675],{"class":32,"line":1836},[30,148676,2582],{"emptyLinePlaceholder":245},[30,148678,148679,148681],{"class":32,"line":1857},[30,148680,30553],{"class":40},[30,148682,148683],{"class":321},"(dates)\n",[30,148685,148686,148688],{"class":32,"line":1862},[30,148687,30553],{"class":40},[30,148689,148690],{"class":321},"(sales)\n",[15,148692,148694],{"id":148693},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[20,148696,148698],{"className":30516,"code":148697,"language":30518,"meta":25,"style":25},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nsales = [\n    {\"date\": \"2024-10-01\", \"amount\": 1200},\n    {\"date\": \"2024-10-02\", \"amount\": 1800},\n    {\"date\": \"2024-10-03\", \"amount\": 1500},\n    {\"date\": \"2024-10-04\", \"amount\": 2100},\n    {\"date\": \"2024-10-05\", \"amount\": 2600},\n]\n\ndates = [item[\"date\"] for item in sales]\namounts = [item[\"amount\"] for item in sales]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=amounts,\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"每日销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n    datazoom_opts=[opts.DataZoomOpts()],\n)\nline.render(\"daily_sales.html\")\n",[27,148699,148700,148714,148724,148728,148736,148757,148779,148801,148823,148845,148849,148853,148875,148896,148900,148908,148912,148916,148926,148935,148945,148961,148965,148969,148986,149002,149018,149034,149044,149048],{"__ignoreMap":25},[30,148701,148702,148704,148706,148708,148710,148712],{"class":32,"line":33},[30,148703,30875],{"class":317},[30,148705,147517],{"class":321},[30,148707,30530],{"class":317},[30,148709,147522],{"class":321},[30,148711,31521],{"class":317},[30,148713,147527],{"class":321},[30,148715,148716,148718,148720,148722],{"class":32,"line":44},[30,148717,30875],{"class":317},[30,148719,147376],{"class":321},[30,148721,30530],{"class":317},[30,148723,147381],{"class":321},[30,148725,148726],{"class":32,"line":52},[30,148727,2582],{"emptyLinePlaceholder":245},[30,148729,148730,148732,148734],{"class":32,"line":60},[30,148731,148603],{"class":321},[30,148733,367],{"class":317},[30,148735,55585],{"class":321},[30,148737,148738,148740,148742,148744,148747,148749,148751,148753,148755],{"class":32,"line":68},[30,148739,148523],{"class":321},[30,148741,148135],{"class":74},[30,148743,51575],{"class":321},[30,148745,148746],{"class":74},"\"2024-10-01\"",[30,148748,12617],{"class":321},[30,148750,84222],{"class":74},[30,148752,51575],{"class":321},[30,148754,92161],{"class":40},[30,148756,5112],{"class":321},[30,148758,148759,148761,148763,148765,148768,148770,148772,148774,148777],{"class":32,"line":80},[30,148760,148523],{"class":321},[30,148762,148135],{"class":74},[30,148764,51575],{"class":321},[30,148766,148767],{"class":74},"\"2024-10-02\"",[30,148769,12617],{"class":321},[30,148771,84222],{"class":74},[30,148773,51575],{"class":321},[30,148775,148776],{"class":40},"1800",[30,148778,5112],{"class":321},[30,148780,148781,148783,148785,148787,148790,148792,148794,148796,148799],{"class":32,"line":88},[30,148782,148523],{"class":321},[30,148784,148135],{"class":74},[30,148786,51575],{"class":321},[30,148788,148789],{"class":74},"\"2024-10-03\"",[30,148791,12617],{"class":321},[30,148793,84222],{"class":74},[30,148795,51575],{"class":321},[30,148797,148798],{"class":40},"1500",[30,148800,5112],{"class":321},[30,148802,148803,148805,148807,148809,148812,148814,148816,148818,148821],{"class":32,"line":96},[30,148804,148523],{"class":321},[30,148806,148135],{"class":74},[30,148808,51575],{"class":321},[30,148810,148811],{"class":74},"\"2024-10-04\"",[30,148813,12617],{"class":321},[30,148815,84222],{"class":74},[30,148817,51575],{"class":321},[30,148819,148820],{"class":40},"2100",[30,148822,5112],{"class":321},[30,148824,148825,148827,148829,148831,148834,148836,148838,148840,148843],{"class":32,"line":104},[30,148826,148523],{"class":321},[30,148828,148135],{"class":74},[30,148830,51575],{"class":321},[30,148832,148833],{"class":74},"\"2024-10-05\"",[30,148835,12617],{"class":321},[30,148837,84222],{"class":74},[30,148839,51575],{"class":321},[30,148841,148842],{"class":40},"2600",[30,148844,5112],{"class":321},[30,148846,148847],{"class":32,"line":112},[30,148848,33384],{"class":321},[30,148850,148851],{"class":32,"line":123},[30,148852,2582],{"emptyLinePlaceholder":245},[30,148854,148855,148857,148859,148862,148864,148866,148868,148870,148872],{"class":32,"line":131},[30,148856,147938],{"class":321},[30,148858,367],{"class":317},[30,148860,148861],{"class":321}," [item[",[30,148863,148135],{"class":74},[30,148865,4625],{"class":321},[30,148867,3207],{"class":317},[30,148869,148347],{"class":321},[30,148871,26181],{"class":317},[30,148873,148874],{"class":321}," sales]\n",[30,148876,148877,148880,148882,148884,148886,148888,148890,148892,148894],{"class":32,"line":142},[30,148878,148879],{"class":321},"amounts ",[30,148881,367],{"class":317},[30,148883,148861],{"class":321},[30,148885,84222],{"class":74},[30,148887,4625],{"class":321},[30,148889,3207],{"class":317},[30,148891,148347],{"class":321},[30,148893,26181],{"class":317},[30,148895,148874],{"class":321},[30,148897,148898],{"class":32,"line":1811},[30,148899,2582],{"emptyLinePlaceholder":245},[30,148901,148902,148904,148906],{"class":32,"line":1825},[30,148903,147390],{"class":321},[30,148905,367],{"class":317},[30,148907,147395],{"class":321},[30,148909,148910],{"class":32,"line":1830},[30,148911,147979],{"class":321},[30,148913,148914],{"class":32,"line":1836},[30,148915,147787],{"class":321},[30,148917,148918,148920,148922,148924],{"class":32,"line":1857},[30,148919,147792],{"class":5398},[30,148921,367],{"class":317},[30,148923,147433],{"class":74},[30,148925,31604],{"class":321},[30,148927,148928,148930,148932],{"class":32,"line":1862},[30,148929,147803],{"class":5398},[30,148931,367],{"class":317},[30,148933,148934],{"class":321},"amounts,\n",[30,148936,148937,148939,148941,148943],{"class":32,"line":1876},[30,148938,147832],{"class":5398},[30,148940,367],{"class":317},[30,148942,31614],{"class":40},[30,148944,31604],{"class":321},[30,148946,148947,148949,148951,148953,148955,148957,148959],{"class":32,"line":1881},[30,148948,147843],{"class":5398},[30,148950,367],{"class":317},[30,148952,147848],{"class":321},[30,148954,147851],{"class":5398},[30,148956,367],{"class":317},[30,148958,31614],{"class":40},[30,148960,38185],{"class":321},[30,148962,148963],{"class":32,"line":1910},[30,148964,328],{"class":321},[30,148966,148967],{"class":32,"line":1915},[30,148968,147606],{"class":321},[30,148970,148971,148973,148975,148977,148979,148981,148984],{"class":32,"line":1932},[30,148972,147611],{"class":5398},[30,148974,367],{"class":317},[30,148976,147616],{"class":321},[30,148978,51545],{"class":5398},[30,148980,367],{"class":317},[30,148982,148983],{"class":74},"\"每日销售额\"",[30,148985,38185],{"class":321},[30,148987,148988,148990,148992,148994,148996,148998,149000],{"class":32,"line":1937},[30,148989,147630],{"class":5398},[30,148991,367],{"class":317},[30,148993,147635],{"class":321},[30,148995,79948],{"class":5398},[30,148997,367],{"class":317},[30,148999,147642],{"class":74},[30,149001,38185],{"class":321},[30,149003,149004,149006,149008,149010,149012,149014,149016],{"class":32,"line":1942},[30,149005,147649],{"class":5398},[30,149007,367],{"class":317},[30,149009,147635],{"class":321},[30,149011,79948],{"class":5398},[30,149013,367],{"class":317},[30,149015,147660],{"class":74},[30,149017,38185],{"class":321},[30,149019,149020,149022,149024,149026,149028,149030,149032],{"class":32,"line":1947},[30,149021,147667],{"class":5398},[30,149023,367],{"class":317},[30,149025,147672],{"class":321},[30,149027,147675],{"class":5398},[30,149029,367],{"class":317},[30,149031,147680],{"class":74},[30,149033,38185],{"class":321},[30,149035,149036,149039,149041],{"class":32,"line":1961},[30,149037,149038],{"class":5398},"    datazoom_opts",[30,149040,367],{"class":317},[30,149042,149043],{"class":321},"[opts.DataZoomOpts()],\n",[30,149045,149046],{"class":32,"line":1966},[30,149047,328],{"class":321},[30,149049,149050,149052,149055],{"class":32,"line":2759},[30,149051,147462],{"class":321},[30,149053,149054],{"class":74},"\"daily_sales.html\"",[30,149056,328],{"class":321},[157,149058,149059,149062],{},[27,149060,149061],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[15,149064,149066],{"id":149065},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[157,149068,149069],{},"如果数据结构如下：",[20,149071,149073],{"className":30516,"code":149072,"language":30518,"meta":25,"style":25},"data = {\n    \"北京\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 10},\n        {\"date\": \"2024-01-02\", \"confirm\": 12},\n    ],\n    \"上海\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 8},\n        {\"date\": \"2024-01-02\", \"confirm\": 13},\n    ],\n}\n",[27,149074,149075,149083,149091,149113,149134,149139,149146,149166,149186,149190],{"__ignoreMap":25},[30,149076,149077,149079,149081],{"class":32,"line":33},[30,149078,101796],{"class":321},[30,149080,367],{"class":317},[30,149082,15754],{"class":321},[30,149084,149085,149088],{"class":32,"line":44},[30,149086,149087],{"class":74},"    \"北京\"",[30,149089,149090],{"class":321},": [\n",[30,149092,149093,149095,149097,149099,149102,149104,149107,149109,149111],{"class":32,"line":52},[30,149094,5099],{"class":321},[30,149096,148135],{"class":74},[30,149098,51575],{"class":321},[30,149100,149101],{"class":74},"\"2024-01-01\"",[30,149103,12617],{"class":321},[30,149105,149106],{"class":74},"\"confirm\"",[30,149108,51575],{"class":321},[30,149110,766],{"class":40},[30,149112,5112],{"class":321},[30,149114,149115,149117,149119,149121,149124,149126,149128,149130,149132],{"class":32,"line":60},[30,149116,5099],{"class":321},[30,149118,148135],{"class":74},[30,149120,51575],{"class":321},[30,149122,149123],{"class":74},"\"2024-01-02\"",[30,149125,12617],{"class":321},[30,149127,149106],{"class":74},[30,149129,51575],{"class":321},[30,149131,818],{"class":40},[30,149133,5112],{"class":321},[30,149135,149136],{"class":32,"line":68},[30,149137,149138],{"class":321},"    ],\n",[30,149140,149141,149144],{"class":32,"line":80},[30,149142,149143],{"class":74},"    \"上海\"",[30,149145,149090],{"class":321},[30,149147,149148,149150,149152,149154,149156,149158,149160,149162,149164],{"class":32,"line":88},[30,149149,5099],{"class":321},[30,149151,148135],{"class":74},[30,149153,51575],{"class":321},[30,149155,149101],{"class":74},[30,149157,12617],{"class":321},[30,149159,149106],{"class":74},[30,149161,51575],{"class":321},[30,149163,715],{"class":40},[30,149165,5112],{"class":321},[30,149167,149168,149170,149172,149174,149176,149178,149180,149182,149184],{"class":32,"line":96},[30,149169,5099],{"class":321},[30,149171,148135],{"class":74},[30,149173,51575],{"class":321},[30,149175,149123],{"class":74},[30,149177,12617],{"class":321},[30,149179,149106],{"class":74},[30,149181,51575],{"class":321},[30,149183,843],{"class":40},[30,149185,5112],{"class":321},[30,149187,149188],{"class":32,"line":104},[30,149189,149138],{"class":321},[30,149191,149192],{"class":32,"line":112},[30,149193,1751],{"class":321},[157,149195,149196],{},"绘制多地区趋势：",[20,149198,149200],{"className":30516,"code":149199,"language":30518,"meta":25,"style":25},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [item[\"date\"] for item in data[\"北京\"]]\n\nline = Line()\nline.add_xaxis(dates)\n\nfor city, records in data.items():\n    values = [item[\"confirm\"] for item in records]\n    line.add_yaxis(city, values, is_smooth=True)\n\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"多地区趋势图\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"trend.html\")\n",[27,149201,149202,149216,149226,149230,149255,149259,149267,149271,149275,149287,149309,149322,149326,149330,149347,149363,149367],{"__ignoreMap":25},[30,149203,149204,149206,149208,149210,149212,149214],{"class":32,"line":33},[30,149205,30875],{"class":317},[30,149207,147517],{"class":321},[30,149209,30530],{"class":317},[30,149211,147522],{"class":321},[30,149213,31521],{"class":317},[30,149215,147527],{"class":321},[30,149217,149218,149220,149222,149224],{"class":32,"line":44},[30,149219,30875],{"class":317},[30,149221,147376],{"class":321},[30,149223,30530],{"class":317},[30,149225,147381],{"class":321},[30,149227,149228],{"class":32,"line":52},[30,149229,2582],{"emptyLinePlaceholder":245},[30,149231,149232,149234,149236,149238,149240,149242,149244,149246,149248,149251,149253],{"class":32,"line":60},[30,149233,147938],{"class":321},[30,149235,367],{"class":317},[30,149237,148861],{"class":321},[30,149239,148135],{"class":74},[30,149241,4625],{"class":321},[30,149243,3207],{"class":317},[30,149245,148347],{"class":321},[30,149247,26181],{"class":317},[30,149249,149250],{"class":321}," data[",[30,149252,69407],{"class":74},[30,149254,77665],{"class":321},[30,149256,149257],{"class":32,"line":68},[30,149258,2582],{"emptyLinePlaceholder":245},[30,149260,149261,149263,149265],{"class":32,"line":80},[30,149262,147390],{"class":321},[30,149264,367],{"class":317},[30,149266,147395],{"class":321},[30,149268,149269],{"class":32,"line":88},[30,149270,147979],{"class":321},[30,149272,149273],{"class":32,"line":96},[30,149274,2582],{"emptyLinePlaceholder":245},[30,149276,149277,149279,149282,149284],{"class":32,"line":104},[30,149278,3207],{"class":317},[30,149280,149281],{"class":321}," city, records ",[30,149283,26181],{"class":317},[30,149285,149286],{"class":321}," data.items():\n",[30,149288,149289,149292,149294,149296,149298,149300,149302,149304,149306],{"class":32,"line":112},[30,149290,149291],{"class":321},"    values ",[30,149293,367],{"class":317},[30,149295,148861],{"class":321},[30,149297,149106],{"class":74},[30,149299,4625],{"class":321},[30,149301,3207],{"class":317},[30,149303,148347],{"class":321},[30,149305,26181],{"class":317},[30,149307,149308],{"class":321}," records]\n",[30,149310,149311,149314,149316,149318,149320],{"class":32,"line":123},[30,149312,149313],{"class":321},"    line.add_yaxis(city, values, ",[30,149315,147883],{"class":5398},[30,149317,367],{"class":317},[30,149319,31614],{"class":40},[30,149321,328],{"class":321},[30,149323,149324],{"class":32,"line":131},[30,149325,2582],{"emptyLinePlaceholder":245},[30,149327,149328],{"class":32,"line":142},[30,149329,147606],{"class":321},[30,149331,149332,149334,149336,149338,149340,149342,149345],{"class":32,"line":1811},[30,149333,147611],{"class":5398},[30,149335,367],{"class":317},[30,149337,147616],{"class":321},[30,149339,51545],{"class":5398},[30,149341,367],{"class":317},[30,149343,149344],{"class":74},"\"多地区趋势图\"",[30,149346,38185],{"class":321},[30,149348,149349,149351,149353,149355,149357,149359,149361],{"class":32,"line":1825},[30,149350,147667],{"class":5398},[30,149352,367],{"class":317},[30,149354,147672],{"class":321},[30,149356,147675],{"class":5398},[30,149358,367],{"class":317},[30,149360,147680],{"class":74},[30,149362,38185],{"class":321},[30,149364,149365],{"class":32,"line":1830},[30,149366,328],{"class":321},[30,149368,149369,149371,149374],{"class":32,"line":1836},[30,149370,147462],{"class":321},[30,149372,149373],{"class":74},"\"trend.html\"",[30,149375,328],{"class":321},[157,149377,149378],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[15,149380,149382],{"id":149381},"_1012-易错点","10.12 易错点",[271,149384,149385,149391,149397,149407,149413],{},[150,149386,149387,149390],{},[27,149388,149389],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[150,149392,149393,149396],{},[27,149394,149395],{},"render()"," 生成的是 HTML，不是图片。",[150,149398,149399,149400,149403,149404,28523],{},"JSON 字符串用 ",[27,149401,149402],{},"json.loads()","，JSON 文件用 ",[27,149405,149406],{},"json.load()",[150,149408,149409,149410,28523],{},"中文 JSON 保存时加 ",[27,149411,149412],{},"ensure_ascii=False",[150,149414,149415],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[15,149417,149419],{"id":149418},"_1013-本章练习","10.13 本章练习",[271,149421,149422,149425,149428,149431,149434],{},[150,149423,149424],{},"安装 pyecharts 并生成第一个折线图。",[150,149426,149427],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[150,149429,149430],{},"绘制两条折线，对比线上和线下销售额。",[150,149432,149433],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[150,149435,149436],{},"对含有空值的销售数据进行清洗后再绘图。",[234,149438,149439],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":25,"searchDepth":44,"depth":44,"links":149441},[149442,149443,149444,149445,149446,149447,149448,149449,149450,149451,149452,149453,149454],{"id":147058,"depth":44,"text":147059},{"id":147133,"depth":44,"text":147134},{"id":147312,"depth":44,"text":147313},{"id":147363,"depth":44,"text":147364},{"id":147497,"depth":44,"text":147498},{"id":147773,"depth":44,"text":147774},{"id":147899,"depth":44,"text":147900},{"id":148110,"depth":44,"text":148111},{"id":148481,"depth":44,"text":148482},{"id":148693,"depth":44,"text":148694},{"id":149065,"depth":44,"text":149066},{"id":149381,"depth":44,"text":149382},{"id":149418,"depth":44,"text":149419},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147050,"description":242},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149461,"title":149462,"body":149463,"description":242,"extension":243,"meta":151823,"navigation":245,"path":151824,"seo":151825,"stem":151826,"__hash__":151827},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149464,"toc":151800},[149465,149468,149472,149475,149478,149554,149557,149648,149651,149655,149658,149702,149715,149719,149722,149789,149792,149796,149799,149883,149891,149895,149900,150041,150044,150055,150061,150067,150181,150185,150188,150191,150444,150447,150451,150454,150558,150561,150565,150716,150720,150727,150840,150844,150847,150953,150956,150960,150963,150994,150997,151102,151105,151109,151113,151123,151191,151195,151202,151266,151269,151273,151279,151375,151384,151388,151712,151721,151725,151753,151757,151797],[10,149466,149462],{"id":149467},"_11-面向对象基础",[15,149469,149471],{"id":149470},"_111-什么是面向对象","11.1 什么是面向对象",[157,149473,149474],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[157,149476,149477],{},"面向过程：",[20,149479,149481],{"className":30516,"code":149480,"language":30518,"meta":25,"style":25},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[27,149482,149483,149492,149500,149504,149514,149545,149549],{"__ignoreMap":25},[30,149484,149485,149487,149489],{"class":32,"line":33},[30,149486,146674],{"class":321},[30,149488,367],{"class":317},[30,149490,149491],{"class":74}," \"小明\"\n",[30,149493,149494,149496,149498],{"class":32,"line":44},[30,149495,146684],{"class":321},[30,149497,367],{"class":317},[30,149499,146689],{"class":40},[30,149501,149502],{"class":32,"line":52},[30,149503,2582],{"emptyLinePlaceholder":245},[30,149505,149506,149508,149511],{"class":32,"line":60},[30,149507,32085],{"class":317},[30,149509,149510],{"class":36}," introduce",[30,149512,149513],{"class":321},"(name, age):\n",[30,149515,149516,149518,149520,149522,149525,149527,149529,149531,149534,149536,149538,149540,149543],{"class":32,"line":68},[30,149517,31437],{"class":40},[30,149519,322],{"class":321},[30,149521,373],{"class":317},[30,149523,149524],{"class":74},"\"我叫",[30,149526,1216],{"class":40},[30,149528,79948],{"class":321},[30,149530,1266],{"class":40},[30,149532,149533],{"class":74},"，今年",[30,149535,1216],{"class":40},[30,149537,70359],{"class":321},[30,149539,1266],{"class":40},[30,149541,149542],{"class":74},"岁\"",[30,149544,328],{"class":321},[30,149546,149547],{"class":32,"line":80},[30,149548,2582],{"emptyLinePlaceholder":245},[30,149550,149551],{"class":32,"line":88},[30,149552,149553],{"class":321},"introduce(name, age)\n",[157,149555,149556],{},"面向对象：",[20,149558,149560],{"className":30516,"code":149559,"language":30518,"meta":25,"style":25},"class Student:\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁\")\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\nstudent.introduce()\n",[27,149561,149562,149570,149578,149607,149611,149615,149625,149634,149643],{"__ignoreMap":25},[30,149563,149564,149566,149568],{"class":32,"line":33},[30,149565,14876],{"class":317},[30,149567,8080],{"class":36},[30,149569,3921],{"class":321},[30,149571,149572,149574,149576],{"class":32,"line":44},[30,149573,30939],{"class":317},[30,149575,149510],{"class":36},[30,149577,30945],{"class":321},[30,149579,149580,149582,149584,149586,149588,149591,149593,149595,149597,149599,149601,149603,149605],{"class":32,"line":52},[30,149581,32589],{"class":40},[30,149583,322],{"class":321},[30,149585,373],{"class":317},[30,149587,149524],{"class":74},[30,149589,149590],{"class":40},"{self",[30,149592,80439],{"class":321},[30,149594,1266],{"class":40},[30,149596,149533],{"class":74},[30,149598,149590],{"class":40},[30,149600,80451],{"class":321},[30,149602,1266],{"class":40},[30,149604,149542],{"class":74},[30,149606,328],{"class":321},[30,149608,149609],{"class":32,"line":60},[30,149610,2582],{"emptyLinePlaceholder":245},[30,149612,149613],{"class":32,"line":68},[30,149614,2582],{"emptyLinePlaceholder":245},[30,149616,149617,149620,149622],{"class":32,"line":80},[30,149618,149619],{"class":321},"student ",[30,149621,367],{"class":317},[30,149623,149624],{"class":321}," Student()\n",[30,149626,149627,149630,149632],{"class":32,"line":88},[30,149628,149629],{"class":321},"student.name ",[30,149631,367],{"class":317},[30,149633,149491],{"class":74},[30,149635,149636,149639,149641],{"class":32,"line":96},[30,149637,149638],{"class":321},"student.age ",[30,149640,367],{"class":317},[30,149642,146689],{"class":40},[30,149644,149645],{"class":32,"line":104},[30,149646,149647],{"class":321},"student.introduce()\n",[157,149649,149650],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[15,149652,149654],{"id":149653},"_112-类和对象","11.2 类和对象",[157,149656,149657],{},"类是模板，对象是根据模板创建出来的具体实例。",[20,149659,149661],{"className":30516,"code":149660,"language":30518,"meta":25,"style":25},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[27,149662,149663,149671,149676,149680,149684,149693],{"__ignoreMap":25},[30,149664,149665,149667,149669],{"class":32,"line":33},[30,149666,14876],{"class":317},[30,149668,8080],{"class":36},[30,149670,3921],{"class":321},[30,149672,149673],{"class":32,"line":44},[30,149674,149675],{"class":317},"    pass\n",[30,149677,149678],{"class":32,"line":52},[30,149679,2582],{"emptyLinePlaceholder":245},[30,149681,149682],{"class":32,"line":60},[30,149683,2582],{"emptyLinePlaceholder":245},[30,149685,149686,149689,149691],{"class":32,"line":68},[30,149687,149688],{"class":321},"student1 ",[30,149690,367],{"class":317},[30,149692,149624],{"class":321},[30,149694,149695,149698,149700],{"class":32,"line":80},[30,149696,149697],{"class":321},"student2 ",[30,149699,367],{"class":317},[30,149701,149624],{"class":321},[157,149703,149704,149707,149708,101156,149711,149714],{},[27,149705,149706],{},"Student"," 是类，",[27,149709,149710],{},"student1",[27,149712,149713],{},"student2"," 是对象。",[15,149716,149718],{"id":149717},"_113-属性","11.3 属性",[157,149720,149721],{},"属性是对象保存的数据。",[20,149723,149725],{"className":30516,"code":149724,"language":30518,"meta":25,"style":25},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[27,149726,149727,149735,149739,149743,149747,149755,149763,149771,149775,149782],{"__ignoreMap":25},[30,149728,149729,149731,149733],{"class":32,"line":33},[30,149730,14876],{"class":317},[30,149732,8080],{"class":36},[30,149734,3921],{"class":321},[30,149736,149737],{"class":32,"line":44},[30,149738,149675],{"class":317},[30,149740,149741],{"class":32,"line":52},[30,149742,2582],{"emptyLinePlaceholder":245},[30,149744,149745],{"class":32,"line":60},[30,149746,2582],{"emptyLinePlaceholder":245},[30,149748,149749,149751,149753],{"class":32,"line":68},[30,149750,149619],{"class":321},[30,149752,367],{"class":317},[30,149754,149624],{"class":321},[30,149756,149757,149759,149761],{"class":32,"line":80},[30,149758,149629],{"class":321},[30,149760,367],{"class":317},[30,149762,149491],{"class":74},[30,149764,149765,149767,149769],{"class":32,"line":88},[30,149766,149638],{"class":321},[30,149768,367],{"class":317},[30,149770,146689],{"class":40},[30,149772,149773],{"class":32,"line":96},[30,149774,2582],{"emptyLinePlaceholder":245},[30,149776,149777,149779],{"class":32,"line":104},[30,149778,30553],{"class":40},[30,149780,149781],{"class":321},"(student.name)\n",[30,149783,149784,149786],{"class":32,"line":112},[30,149785,30553],{"class":40},[30,149787,149788],{"class":321},"(student.age)\n",[157,149790,149791],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[15,149793,149795],{"id":149794},"_114-方法","11.4 方法",[157,149797,149798],{},"类中的函数叫方法。",[20,149800,149801],{"className":30516,"code":149559,"language":30518,"meta":25,"style":25},[27,149802,149803,149811,149819,149847,149851,149855,149863,149871,149879],{"__ignoreMap":25},[30,149804,149805,149807,149809],{"class":32,"line":33},[30,149806,14876],{"class":317},[30,149808,8080],{"class":36},[30,149810,3921],{"class":321},[30,149812,149813,149815,149817],{"class":32,"line":44},[30,149814,30939],{"class":317},[30,149816,149510],{"class":36},[30,149818,30945],{"class":321},[30,149820,149821,149823,149825,149827,149829,149831,149833,149835,149837,149839,149841,149843,149845],{"class":32,"line":52},[30,149822,32589],{"class":40},[30,149824,322],{"class":321},[30,149826,373],{"class":317},[30,149828,149524],{"class":74},[30,149830,149590],{"class":40},[30,149832,80439],{"class":321},[30,149834,1266],{"class":40},[30,149836,149533],{"class":74},[30,149838,149590],{"class":40},[30,149840,80451],{"class":321},[30,149842,1266],{"class":40},[30,149844,149542],{"class":74},[30,149846,328],{"class":321},[30,149848,149849],{"class":32,"line":60},[30,149850,2582],{"emptyLinePlaceholder":245},[30,149852,149853],{"class":32,"line":68},[30,149854,2582],{"emptyLinePlaceholder":245},[30,149856,149857,149859,149861],{"class":32,"line":80},[30,149858,149619],{"class":321},[30,149860,367],{"class":317},[30,149862,149624],{"class":321},[30,149864,149865,149867,149869],{"class":32,"line":88},[30,149866,149629],{"class":321},[30,149868,367],{"class":317},[30,149870,149491],{"class":74},[30,149872,149873,149875,149877],{"class":32,"line":96},[30,149874,149638],{"class":321},[30,149876,367],{"class":317},[30,149878,146689],{"class":40},[30,149880,149881],{"class":32,"line":104},[30,149882,149647],{"class":321},[157,149884,149885,149887,149888,149890],{},[27,149886,30961],{}," 表示当前对象。调用方法时不需要手动传入 ",[27,149889,30961],{},"，Python 会自动传。",[15,149892,149894],{"id":149893},"_115-构造方法__init__","11.5 构造方法__init__",[157,149896,149897,149899],{},[27,149898,30967],{}," 在对象创建时自动执行，用于初始化属性。",[20,149901,149903],{"className":30516,"code":149902,"language":30518,"meta":25,"style":25},"class Student:\n    def __init__(self, name, age, score):\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁，成绩{self.score}\")\n\n\nstudent = Student(\"小明\", 18, 95)\nstudent.introduce()\n",[27,149904,149905,149913,149922,149934,149946,149957,149961,149969,150007,150011,150015,150037],{"__ignoreMap":25},[30,149906,149907,149909,149911],{"class":32,"line":33},[30,149908,14876],{"class":317},[30,149910,8080],{"class":36},[30,149912,3921],{"class":321},[30,149914,149915,149917,149919],{"class":32,"line":44},[30,149916,30939],{"class":317},[30,149918,30942],{"class":40},[30,149920,149921],{"class":321},"(self, name, age, score):\n",[30,149923,149924,149926,149929,149931],{"class":32,"line":52},[30,149925,30983],{"class":40},[30,149927,149928],{"class":321},".name ",[30,149930,367],{"class":317},[30,149932,149933],{"class":321}," name\n",[30,149935,149936,149938,149941,149943],{"class":32,"line":60},[30,149937,30983],{"class":40},[30,149939,149940],{"class":321},".age ",[30,149942,367],{"class":317},[30,149944,149945],{"class":321}," age\n",[30,149947,149948,149950,149953,149955],{"class":32,"line":68},[30,149949,30983],{"class":40},[30,149951,149952],{"class":321},".score ",[30,149954,367],{"class":317},[30,149956,1765],{"class":321},[30,149958,149959],{"class":32,"line":80},[30,149960,2582],{"emptyLinePlaceholder":245},[30,149962,149963,149965,149967],{"class":32,"line":88},[30,149964,30939],{"class":317},[30,149966,149510],{"class":36},[30,149968,30945],{"class":321},[30,149970,149971,149973,149975,149977,149979,149981,149983,149985,149987,149989,149991,149993,149996,149998,150001,150003,150005],{"class":32,"line":96},[30,149972,32589],{"class":40},[30,149974,322],{"class":321},[30,149976,373],{"class":317},[30,149978,149524],{"class":74},[30,149980,149590],{"class":40},[30,149982,80439],{"class":321},[30,149984,1266],{"class":40},[30,149986,149533],{"class":74},[30,149988,149590],{"class":40},[30,149990,80451],{"class":321},[30,149992,1266],{"class":40},[30,149994,149995],{"class":74},"岁，成绩",[30,149997,149590],{"class":40},[30,149999,150000],{"class":321},".score",[30,150002,1266],{"class":40},[30,150004,571],{"class":74},[30,150006,328],{"class":321},[30,150008,150009],{"class":32,"line":104},[30,150010,2582],{"emptyLinePlaceholder":245},[30,150012,150013],{"class":32,"line":112},[30,150014,2582],{"emptyLinePlaceholder":245},[30,150016,150017,150019,150021,150024,150027,150029,150031,150033,150035],{"class":32,"line":123},[30,150018,149619],{"class":321},[30,150020,367],{"class":317},[30,150022,150023],{"class":321}," Student(",[30,150025,150026],{"class":74},"\"小明\"",[30,150028,12617],{"class":321},[30,150030,970],{"class":40},[30,150032,12617],{"class":321},[30,150034,1309],{"class":40},[30,150036,328],{"class":321},[30,150038,150039],{"class":32,"line":131},[30,150040,149647],{"class":321},[157,150042,150043],{},"构造方法的好处：",[271,150045,150046,150049,150052],{},[150,150047,150048],{},"创建对象时必须提供必要数据。",[150,150050,150051],{},"属性初始化集中，不容易漏。",[150,150053,150054],{},"对象状态更完整。",[15,150056,150058,150059],{"id":150057},"_116-str","11.6 ",[469,150060,1489],{},[157,150062,150063,150064,28523],{},"直接打印对象时，默认输出不直观。可以定义 ",[27,150065,150066],{},"__str__",[20,150068,150070],{"className":30516,"code":150069,"language":30518,"meta":25,"style":25},"class Student:\n    def __init__(self, name, age):\n        self.name = name\n        self.age = age\n\n    def __str__(self):\n        return f\"Student(name={self.name}, age={self.age})\"\n\n\nstudent = Student(\"小明\", 18)\nprint(student)\n",[27,150071,150072,150080,150089,150099,150109,150113,150122,150150,150154,150158,150174],{"__ignoreMap":25},[30,150073,150074,150076,150078],{"class":32,"line":33},[30,150075,14876],{"class":317},[30,150077,8080],{"class":36},[30,150079,3921],{"class":321},[30,150081,150082,150084,150086],{"class":32,"line":44},[30,150083,30939],{"class":317},[30,150085,30942],{"class":40},[30,150087,150088],{"class":321},"(self, name, age):\n",[30,150090,150091,150093,150095,150097],{"class":32,"line":52},[30,150092,30983],{"class":40},[30,150094,149928],{"class":321},[30,150096,367],{"class":317},[30,150098,149933],{"class":321},[30,150100,150101,150103,150105,150107],{"class":32,"line":60},[30,150102,30983],{"class":40},[30,150104,149940],{"class":321},[30,150106,367],{"class":317},[30,150108,149945],{"class":321},[30,150110,150111],{"class":32,"line":68},[30,150112,2582],{"emptyLinePlaceholder":245},[30,150114,150115,150117,150120],{"class":32,"line":80},[30,150116,30939],{"class":317},[30,150118,150119],{"class":40}," __str__",[30,150121,30945],{"class":321},[30,150123,150124,150126,150129,150132,150134,150136,150138,150141,150143,150145,150147],{"class":32,"line":88},[30,150125,14934],{"class":317},[30,150127,150128],{"class":317}," f",[30,150130,150131],{"class":74},"\"Student(name=",[30,150133,149590],{"class":40},[30,150135,80439],{"class":321},[30,150137,1266],{"class":40},[30,150139,150140],{"class":74},", age=",[30,150142,149590],{"class":40},[30,150144,80451],{"class":321},[30,150146,1266],{"class":40},[30,150148,150149],{"class":74},")\"\n",[30,150151,150152],{"class":32,"line":96},[30,150153,2582],{"emptyLinePlaceholder":245},[30,150155,150156],{"class":32,"line":104},[30,150157,2582],{"emptyLinePlaceholder":245},[30,150159,150160,150162,150164,150166,150168,150170,150172],{"class":32,"line":112},[30,150161,149619],{"class":321},[30,150163,367],{"class":317},[30,150165,150023],{"class":321},[30,150167,150026],{"class":74},[30,150169,12617],{"class":321},[30,150171,970],{"class":40},[30,150173,328],{"class":321},[30,150175,150176,150178],{"class":32,"line":123},[30,150177,30553],{"class":40},[30,150179,150180],{"class":321},"(student)\n",[15,150182,150184],{"id":150183},"_117-封装","11.7 封装",[157,150186,150187],{},"封装就是把数据和方法放到类中，并控制访问方式。",[157,150189,150190],{},"Python 中以双下划线开头的属性通常视为私有属性。",[20,150192,150194],{"className":30516,"code":150193,"language":30518,"meta":25,"style":25},"class Account:\n    def __init__(self, owner, balance):\n        self.owner = owner\n        self.__balance = balance\n\n    def get_balance(self):\n        return self.__balance\n\n    def deposit(self, money):\n        if money \u003C= 0:\n            print(\"存款金额必须大于0\")\n            return\n        self.__balance += money\n\n    def withdraw(self, money):\n        if money \u003C= 0:\n            print(\"取款金额必须大于0\")\n            return\n        if money > self.__balance:\n            print(\"余额不足\")\n            return\n        self.__balance -= money\n\n\naccount = Account(\"小明\", 1000)\naccount.deposit(200)\naccount.withdraw(100)\nprint(account.get_balance())\n",[27,150195,150196,150205,150214,150226,150238,150242,150251,150260,150264,150274,150287,150298,150303,150314,150318,150327,150339,150350,150354,150367,150378,150382,150393,150397,150401,150419,150428,150437],{"__ignoreMap":25},[30,150197,150198,150200,150203],{"class":32,"line":33},[30,150199,14876],{"class":317},[30,150201,150202],{"class":36}," Account",[30,150204,3921],{"class":321},[30,150206,150207,150209,150211],{"class":32,"line":44},[30,150208,30939],{"class":317},[30,150210,30942],{"class":40},[30,150212,150213],{"class":321},"(self, owner, balance):\n",[30,150215,150216,150218,150221,150223],{"class":32,"line":52},[30,150217,30983],{"class":40},[30,150219,150220],{"class":321},".owner ",[30,150222,367],{"class":317},[30,150224,150225],{"class":321}," owner\n",[30,150227,150228,150230,150233,150235],{"class":32,"line":60},[30,150229,30983],{"class":40},[30,150231,150232],{"class":321},".__balance ",[30,150234,367],{"class":317},[30,150236,150237],{"class":321}," balance\n",[30,150239,150240],{"class":32,"line":68},[30,150241,2582],{"emptyLinePlaceholder":245},[30,150243,150244,150246,150249],{"class":32,"line":80},[30,150245,30939],{"class":317},[30,150247,150248],{"class":36}," get_balance",[30,150250,30945],{"class":321},[30,150252,150253,150255,150257],{"class":32,"line":88},[30,150254,14934],{"class":317},[30,150256,39011],{"class":40},[30,150258,150259],{"class":321},".__balance\n",[30,150261,150262],{"class":32,"line":96},[30,150263,2582],{"emptyLinePlaceholder":245},[30,150265,150266,150268,150271],{"class":32,"line":104},[30,150267,30939],{"class":317},[30,150269,150270],{"class":36}," deposit",[30,150272,150273],{"class":321},"(self, money):\n",[30,150275,150276,150278,150281,150283,150285],{"class":32,"line":112},[30,150277,2679],{"class":317},[30,150279,150280],{"class":321}," money ",[30,150282,1774],{"class":317},[30,150284,4275],{"class":40},[30,150286,3921],{"class":321},[30,150288,150289,150291,150293,150296],{"class":32,"line":123},[30,150290,34788],{"class":40},[30,150292,322],{"class":321},[30,150294,150295],{"class":74},"\"存款金额必须大于0\"",[30,150297,328],{"class":321},[30,150299,150300],{"class":32,"line":131},[30,150301,150302],{"class":317},"            return\n",[30,150304,150305,150307,150309,150311],{"class":32,"line":142},[30,150306,30983],{"class":40},[30,150308,150232],{"class":321},[30,150310,9659],{"class":317},[30,150312,150313],{"class":321}," money\n",[30,150315,150316],{"class":32,"line":1811},[30,150317,2582],{"emptyLinePlaceholder":245},[30,150319,150320,150322,150325],{"class":32,"line":1825},[30,150321,30939],{"class":317},[30,150323,150324],{"class":36}," withdraw",[30,150326,150273],{"class":321},[30,150328,150329,150331,150333,150335,150337],{"class":32,"line":1830},[30,150330,2679],{"class":317},[30,150332,150280],{"class":321},[30,150334,1774],{"class":317},[30,150336,4275],{"class":40},[30,150338,3921],{"class":321},[30,150340,150341,150343,150345,150348],{"class":32,"line":1836},[30,150342,34788],{"class":40},[30,150344,322],{"class":321},[30,150346,150347],{"class":74},"\"取款金额必须大于0\"",[30,150349,328],{"class":321},[30,150351,150352],{"class":32,"line":1857},[30,150353,150302],{"class":317},[30,150355,150356,150358,150360,150362,150364],{"class":32,"line":1862},[30,150357,2679],{"class":317},[30,150359,150280],{"class":321},[30,150361,1280],{"class":317},[30,150363,39011],{"class":40},[30,150365,150366],{"class":321},".__balance:\n",[30,150368,150369,150371,150373,150376],{"class":32,"line":1876},[30,150370,34788],{"class":40},[30,150372,322],{"class":321},[30,150374,150375],{"class":74},"\"余额不足\"",[30,150377,328],{"class":321},[30,150379,150380],{"class":32,"line":1881},[30,150381,150302],{"class":317},[30,150383,150384,150386,150388,150391],{"class":32,"line":1910},[30,150385,30983],{"class":40},[30,150387,150232],{"class":321},[30,150389,150390],{"class":317},"-=",[30,150392,150313],{"class":321},[30,150394,150395],{"class":32,"line":1915},[30,150396,2582],{"emptyLinePlaceholder":245},[30,150398,150399],{"class":32,"line":1932},[30,150400,2582],{"emptyLinePlaceholder":245},[30,150402,150403,150406,150408,150411,150413,150415,150417],{"class":32,"line":1937},[30,150404,150405],{"class":321},"account ",[30,150407,367],{"class":317},[30,150409,150410],{"class":321}," Account(",[30,150412,150026],{"class":74},[30,150414,12617],{"class":321},[30,150416,6592],{"class":40},[30,150418,328],{"class":321},[30,150420,150421,150424,150426],{"class":32,"line":1942},[30,150422,150423],{"class":321},"account.deposit(",[30,150425,1905],{"class":40},[30,150427,328],{"class":321},[30,150429,150430,150433,150435],{"class":32,"line":1947},[30,150431,150432],{"class":321},"account.withdraw(",[30,150434,631],{"class":40},[30,150436,328],{"class":321},[30,150438,150439,150441],{"class":32,"line":1961},[30,150440,30553],{"class":40},[30,150442,150443],{"class":321},"(account.get_balance())\n",[157,150445,150446],{},"封装的意义是避免外部随意修改内部状态。",[15,150448,150450],{"id":150449},"_118-继承","11.8 继承",[157,150452,150453],{},"继承可以让子类复用父类的属性和方法。",[20,150455,150457],{"className":30516,"code":150456,"language":30518,"meta":25,"style":25},"class Animal:\n    def eat(self):\n        print(\"吃东西\")\n\n\nclass Dog(Animal):\n    def bark(self):\n        print(\"汪汪\")\n\n\ndog = Dog()\ndog.eat()\ndog.bark()\n",[27,150458,150459,150468,150477,150488,150492,150496,150510,150519,150530,150534,150538,150548,150553],{"__ignoreMap":25},[30,150460,150461,150463,150466],{"class":32,"line":33},[30,150462,14876],{"class":317},[30,150464,150465],{"class":36}," Animal",[30,150467,3921],{"class":321},[30,150469,150470,150472,150475],{"class":32,"line":44},[30,150471,30939],{"class":317},[30,150473,150474],{"class":36}," eat",[30,150476,30945],{"class":321},[30,150478,150479,150481,150483,150486],{"class":32,"line":52},[30,150480,32589],{"class":40},[30,150482,322],{"class":321},[30,150484,150485],{"class":74},"\"吃东西\"",[30,150487,328],{"class":321},[30,150489,150490],{"class":32,"line":60},[30,150491,2582],{"emptyLinePlaceholder":245},[30,150493,150494],{"class":32,"line":68},[30,150495,2582],{"emptyLinePlaceholder":245},[30,150497,150498,150500,150503,150505,150508],{"class":32,"line":80},[30,150499,14876],{"class":317},[30,150501,150502],{"class":36}," Dog",[30,150504,322],{"class":321},[30,150506,150507],{"class":36},"Animal",[30,150509,30924],{"class":321},[30,150511,150512,150514,150517],{"class":32,"line":88},[30,150513,30939],{"class":317},[30,150515,150516],{"class":36}," bark",[30,150518,30945],{"class":321},[30,150520,150521,150523,150525,150528],{"class":32,"line":96},[30,150522,32589],{"class":40},[30,150524,322],{"class":321},[30,150526,150527],{"class":74},"\"汪汪\"",[30,150529,328],{"class":321},[30,150531,150532],{"class":32,"line":104},[30,150533,2582],{"emptyLinePlaceholder":245},[30,150535,150536],{"class":32,"line":112},[30,150537,2582],{"emptyLinePlaceholder":245},[30,150539,150540,150543,150545],{"class":32,"line":123},[30,150541,150542],{"class":321},"dog ",[30,150544,367],{"class":317},[30,150546,150547],{"class":321}," Dog()\n",[30,150549,150550],{"class":32,"line":131},[30,150551,150552],{"class":321},"dog.eat()\n",[30,150554,150555],{"class":32,"line":142},[30,150556,150557],{"class":321},"dog.bark()\n",[157,150559,150560],{},"子类可以扩展新方法，也可以重写父类方法。",[15,150562,150564],{"id":150563},"_119-方法重写","11.9 方法重写",[20,150566,150568],{"className":30516,"code":150567,"language":30518,"meta":25,"style":25},"class Animal:\n    def speak(self):\n        print(\"动物叫\")\n\n\nclass Dog(Animal):\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat(Animal):\n    def speak(self):\n        print(\"喵喵\")\n\n\ndog = Dog()\ncat = Cat()\n\ndog.speak()\ncat.speak()\n",[27,150569,150570,150578,150587,150598,150602,150606,150618,150626,150636,150640,150644,150657,150665,150676,150680,150684,150692,150702,150706,150711],{"__ignoreMap":25},[30,150571,150572,150574,150576],{"class":32,"line":33},[30,150573,14876],{"class":317},[30,150575,150465],{"class":36},[30,150577,3921],{"class":321},[30,150579,150580,150582,150585],{"class":32,"line":44},[30,150581,30939],{"class":317},[30,150583,150584],{"class":36}," speak",[30,150586,30945],{"class":321},[30,150588,150589,150591,150593,150596],{"class":32,"line":52},[30,150590,32589],{"class":40},[30,150592,322],{"class":321},[30,150594,150595],{"class":74},"\"动物叫\"",[30,150597,328],{"class":321},[30,150599,150600],{"class":32,"line":60},[30,150601,2582],{"emptyLinePlaceholder":245},[30,150603,150604],{"class":32,"line":68},[30,150605,2582],{"emptyLinePlaceholder":245},[30,150607,150608,150610,150612,150614,150616],{"class":32,"line":80},[30,150609,14876],{"class":317},[30,150611,150502],{"class":36},[30,150613,322],{"class":321},[30,150615,150507],{"class":36},[30,150617,30924],{"class":321},[30,150619,150620,150622,150624],{"class":32,"line":88},[30,150621,30939],{"class":317},[30,150623,150584],{"class":36},[30,150625,30945],{"class":321},[30,150627,150628,150630,150632,150634],{"class":32,"line":96},[30,150629,32589],{"class":40},[30,150631,322],{"class":321},[30,150633,150527],{"class":74},[30,150635,328],{"class":321},[30,150637,150638],{"class":32,"line":104},[30,150639,2582],{"emptyLinePlaceholder":245},[30,150641,150642],{"class":32,"line":112},[30,150643,2582],{"emptyLinePlaceholder":245},[30,150645,150646,150648,150651,150653,150655],{"class":32,"line":123},[30,150647,14876],{"class":317},[30,150649,150650],{"class":36}," Cat",[30,150652,322],{"class":321},[30,150654,150507],{"class":36},[30,150656,30924],{"class":321},[30,150658,150659,150661,150663],{"class":32,"line":131},[30,150660,30939],{"class":317},[30,150662,150584],{"class":36},[30,150664,30945],{"class":321},[30,150666,150667,150669,150671,150674],{"class":32,"line":142},[30,150668,32589],{"class":40},[30,150670,322],{"class":321},[30,150672,150673],{"class":74},"\"喵喵\"",[30,150675,328],{"class":321},[30,150677,150678],{"class":32,"line":1811},[30,150679,2582],{"emptyLinePlaceholder":245},[30,150681,150682],{"class":32,"line":1825},[30,150683,2582],{"emptyLinePlaceholder":245},[30,150685,150686,150688,150690],{"class":32,"line":1830},[30,150687,150542],{"class":321},[30,150689,367],{"class":317},[30,150691,150547],{"class":321},[30,150693,150694,150697,150699],{"class":32,"line":1836},[30,150695,150696],{"class":321},"cat ",[30,150698,367],{"class":317},[30,150700,150701],{"class":321}," Cat()\n",[30,150703,150704],{"class":32,"line":1857},[30,150705,2582],{"emptyLinePlaceholder":245},[30,150707,150708],{"class":32,"line":1862},[30,150709,150710],{"class":321},"dog.speak()\n",[30,150712,150713],{"class":32,"line":1876},[30,150714,150715],{"class":321},"cat.speak()\n",[15,150717,150719],{"id":150718},"_1110-super","11.10 super",[157,150721,150722,150723,150726],{},"子类可以通过 ",[27,150724,150725],{},"super()"," 调用父类方法。",[20,150728,150730],{"className":30516,"code":150729,"language":30518,"meta":25,"style":25},"class Person:\n    def __init__(self, name):\n        self.name = name\n\n\nclass Student(Person):\n    def __init__(self, name, score):\n        super().__init__(name)\n        self.score = score\n\n\nstudent = Student(\"小明\", 95)\nprint(student.name, student.score)\n",[27,150731,150732,150740,150749,150759,150763,150767,150779,150788,150799,150809,150813,150817,150833],{"__ignoreMap":25},[30,150733,150734,150736,150738],{"class":32,"line":33},[30,150735,14876],{"class":317},[30,150737,15751],{"class":36},[30,150739,3921],{"class":321},[30,150741,150742,150744,150746],{"class":32,"line":44},[30,150743,30939],{"class":317},[30,150745,30942],{"class":40},[30,150747,150748],{"class":321},"(self, name):\n",[30,150750,150751,150753,150755,150757],{"class":32,"line":52},[30,150752,30983],{"class":40},[30,150754,149928],{"class":321},[30,150756,367],{"class":317},[30,150758,149933],{"class":321},[30,150760,150761],{"class":32,"line":60},[30,150762,2582],{"emptyLinePlaceholder":245},[30,150764,150765],{"class":32,"line":68},[30,150766,2582],{"emptyLinePlaceholder":245},[30,150768,150769,150771,150773,150775,150777],{"class":32,"line":80},[30,150770,14876],{"class":317},[30,150772,8080],{"class":36},[30,150774,322],{"class":321},[30,150776,19228],{"class":36},[30,150778,30924],{"class":321},[30,150780,150781,150783,150785],{"class":32,"line":88},[30,150782,30939],{"class":317},[30,150784,30942],{"class":40},[30,150786,150787],{"class":321},"(self, name, score):\n",[30,150789,150790,150792,150794,150796],{"class":32,"line":96},[30,150791,30955],{"class":40},[30,150793,17443],{"class":321},[30,150795,30967],{"class":40},[30,150797,150798],{"class":321},"(name)\n",[30,150800,150801,150803,150805,150807],{"class":32,"line":104},[30,150802,30983],{"class":40},[30,150804,149952],{"class":321},[30,150806,367],{"class":317},[30,150808,1765],{"class":321},[30,150810,150811],{"class":32,"line":112},[30,150812,2582],{"emptyLinePlaceholder":245},[30,150814,150815],{"class":32,"line":123},[30,150816,2582],{"emptyLinePlaceholder":245},[30,150818,150819,150821,150823,150825,150827,150829,150831],{"class":32,"line":131},[30,150820,149619],{"class":321},[30,150822,367],{"class":317},[30,150824,150023],{"class":321},[30,150826,150026],{"class":74},[30,150828,12617],{"class":321},[30,150830,1309],{"class":40},[30,150832,328],{"class":321},[30,150834,150835,150837],{"class":32,"line":142},[30,150836,30553],{"class":40},[30,150838,150839],{"class":321},"(student.name, student.score)\n",[15,150841,150843],{"id":150842},"_1111-多态","11.11 多态",[157,150845,150846],{},"多态指不同对象响应同一个方法，表现出不同结果。",[20,150848,150850],{"className":30516,"code":150849,"language":30518,"meta":25,"style":25},"class Dog:\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat:\n    def speak(self):\n        print(\"喵喵\")\n\n\ndef make_sound(animal):\n    animal.speak()\n\n\nmake_sound(Dog())\nmake_sound(Cat())\n",[27,150851,150852,150860,150868,150878,150882,150886,150894,150902,150912,150916,150920,150930,150935,150939,150943,150948],{"__ignoreMap":25},[30,150853,150854,150856,150858],{"class":32,"line":33},[30,150855,14876],{"class":317},[30,150857,150502],{"class":36},[30,150859,3921],{"class":321},[30,150861,150862,150864,150866],{"class":32,"line":44},[30,150863,30939],{"class":317},[30,150865,150584],{"class":36},[30,150867,30945],{"class":321},[30,150869,150870,150872,150874,150876],{"class":32,"line":52},[30,150871,32589],{"class":40},[30,150873,322],{"class":321},[30,150875,150527],{"class":74},[30,150877,328],{"class":321},[30,150879,150880],{"class":32,"line":60},[30,150881,2582],{"emptyLinePlaceholder":245},[30,150883,150884],{"class":32,"line":68},[30,150885,2582],{"emptyLinePlaceholder":245},[30,150887,150888,150890,150892],{"class":32,"line":80},[30,150889,14876],{"class":317},[30,150891,150650],{"class":36},[30,150893,3921],{"class":321},[30,150895,150896,150898,150900],{"class":32,"line":88},[30,150897,30939],{"class":317},[30,150899,150584],{"class":36},[30,150901,30945],{"class":321},[30,150903,150904,150906,150908,150910],{"class":32,"line":96},[30,150905,32589],{"class":40},[30,150907,322],{"class":321},[30,150909,150673],{"class":74},[30,150911,328],{"class":321},[30,150913,150914],{"class":32,"line":104},[30,150915,2582],{"emptyLinePlaceholder":245},[30,150917,150918],{"class":32,"line":112},[30,150919,2582],{"emptyLinePlaceholder":245},[30,150921,150922,150924,150927],{"class":32,"line":123},[30,150923,32085],{"class":317},[30,150925,150926],{"class":36}," make_sound",[30,150928,150929],{"class":321},"(animal):\n",[30,150931,150932],{"class":32,"line":131},[30,150933,150934],{"class":321},"    animal.speak()\n",[30,150936,150937],{"class":32,"line":142},[30,150938,2582],{"emptyLinePlaceholder":245},[30,150940,150941],{"class":32,"line":1811},[30,150942,2582],{"emptyLinePlaceholder":245},[30,150944,150945],{"class":32,"line":1825},[30,150946,150947],{"class":321},"make_sound(Dog())\n",[30,150949,150950],{"class":32,"line":1830},[30,150951,150952],{"class":321},"make_sound(Cat())\n",[157,150954,150955],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[15,150957,150959],{"id":150958},"_1112-类属性和实例属性","11.12 类属性和实例属性",[157,150961,150962],{},"实例属性属于对象：",[20,150964,150966],{"className":30516,"code":150965,"language":30518,"meta":25,"style":25},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[27,150967,150968,150976,150984],{"__ignoreMap":25},[30,150969,150970,150972,150974],{"class":32,"line":33},[30,150971,14876],{"class":317},[30,150973,8080],{"class":36},[30,150975,3921],{"class":321},[30,150977,150978,150980,150982],{"class":32,"line":44},[30,150979,30939],{"class":317},[30,150981,30942],{"class":40},[30,150983,150748],{"class":321},[30,150985,150986,150988,150990,150992],{"class":32,"line":52},[30,150987,30983],{"class":40},[30,150989,149928],{"class":321},[30,150991,367],{"class":317},[30,150993,149933],{"class":321},[157,150995,150996],{},"类属性属于类，所有对象共享：",[20,150998,151000],{"className":30516,"code":150999,"language":30518,"meta":25,"style":25},"class Student:\n    school = \"黑马学校\"\n\n    def __init__(self, name):\n        self.name = name\n\n\ns1 = Student(\"小明\")\ns2 = Student(\"小红\")\n\nprint(s1.school)\nprint(s2.school)\nprint(Student.school)\n",[27,151001,151002,151010,151020,151024,151032,151042,151046,151050,151063,151077,151081,151088,151095],{"__ignoreMap":25},[30,151003,151004,151006,151008],{"class":32,"line":33},[30,151005,14876],{"class":317},[30,151007,8080],{"class":36},[30,151009,3921],{"class":321},[30,151011,151012,151015,151017],{"class":32,"line":44},[30,151013,151014],{"class":321},"    school ",[30,151016,367],{"class":317},[30,151018,151019],{"class":74}," \"黑马学校\"\n",[30,151021,151022],{"class":32,"line":52},[30,151023,2582],{"emptyLinePlaceholder":245},[30,151025,151026,151028,151030],{"class":32,"line":60},[30,151027,30939],{"class":317},[30,151029,30942],{"class":40},[30,151031,150748],{"class":321},[30,151033,151034,151036,151038,151040],{"class":32,"line":68},[30,151035,30983],{"class":40},[30,151037,149928],{"class":321},[30,151039,367],{"class":317},[30,151041,149933],{"class":321},[30,151043,151044],{"class":32,"line":80},[30,151045,2582],{"emptyLinePlaceholder":245},[30,151047,151048],{"class":32,"line":88},[30,151049,2582],{"emptyLinePlaceholder":245},[30,151051,151052,151055,151057,151059,151061],{"class":32,"line":96},[30,151053,151054],{"class":321},"s1 ",[30,151056,367],{"class":317},[30,151058,150023],{"class":321},[30,151060,150026],{"class":74},[30,151062,328],{"class":321},[30,151064,151065,151068,151070,151072,151075],{"class":32,"line":104},[30,151066,151067],{"class":321},"s2 ",[30,151069,367],{"class":317},[30,151071,150023],{"class":321},[30,151073,151074],{"class":74},"\"小红\"",[30,151076,328],{"class":321},[30,151078,151079],{"class":32,"line":112},[30,151080,2582],{"emptyLinePlaceholder":245},[30,151082,151083,151085],{"class":32,"line":123},[30,151084,30553],{"class":40},[30,151086,151087],{"class":321},"(s1.school)\n",[30,151089,151090,151092],{"class":32,"line":131},[30,151091,30553],{"class":40},[30,151093,151094],{"class":321},"(s2.school)\n",[30,151096,151097,151099],{"class":32,"line":142},[30,151098,30553],{"class":40},[30,151100,151101],{"class":321},"(Student.school)\n",[157,151103,151104],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[15,151106,151108],{"id":151107},"_1113-类方法和静态方法","11.13 类方法和静态方法",[287,151110,151112],{"id":151111},"_11131-类方法","11.13.1 类方法",[157,151114,151115,151116,151119,151120,28523],{},"类方法使用 ",[27,151117,151118],{},"@classmethod","，第一个参数通常是 ",[27,151121,151122],{},"cls",[20,151124,151126],{"className":30516,"code":151125,"language":30518,"meta":25,"style":25},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[27,151127,151128,151136,151144,151148,151156,151166,151176,151180,151184],{"__ignoreMap":25},[30,151129,151130,151132,151134],{"class":32,"line":33},[30,151131,14876],{"class":317},[30,151133,8080],{"class":36},[30,151135,3921],{"class":321},[30,151137,151138,151140,151142],{"class":32,"line":44},[30,151139,151014],{"class":321},[30,151141,367],{"class":317},[30,151143,151019],{"class":74},[30,151145,151146],{"class":32,"line":52},[30,151147,2582],{"emptyLinePlaceholder":245},[30,151149,151150,151153],{"class":32,"line":60},[30,151151,151152],{"class":36},"    @",[30,151154,151155],{"class":40},"classmethod\n",[30,151157,151158,151160,151163],{"class":32,"line":68},[30,151159,30939],{"class":317},[30,151161,151162],{"class":36}," get_school",[30,151164,151165],{"class":321},"(cls):\n",[30,151167,151168,151170,151173],{"class":32,"line":80},[30,151169,14934],{"class":317},[30,151171,151172],{"class":40}," cls",[30,151174,151175],{"class":321},".school\n",[30,151177,151178],{"class":32,"line":88},[30,151179,2582],{"emptyLinePlaceholder":245},[30,151181,151182],{"class":32,"line":96},[30,151183,2582],{"emptyLinePlaceholder":245},[30,151185,151186,151188],{"class":32,"line":104},[30,151187,30553],{"class":40},[30,151189,151190],{"class":321},"(Student.get_school())\n",[287,151192,151194],{"id":151193},"_11132-静态方法","11.13.2 静态方法",[157,151196,151197,151198,151201],{},"静态方法使用 ",[27,151199,151200],{},"@staticmethod","，不需要访问实例和类。",[20,151203,151205],{"className":30516,"code":151204,"language":30518,"meta":25,"style":25},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[27,151206,151207,151216,151223,151232,151243,151247,151251],{"__ignoreMap":25},[30,151208,151209,151211,151214],{"class":32,"line":33},[30,151210,14876],{"class":317},[30,151212,151213],{"class":36}," MathUtils",[30,151215,3921],{"class":321},[30,151217,151218,151220],{"class":32,"line":44},[30,151219,151152],{"class":36},[30,151221,151222],{"class":40},"staticmethod\n",[30,151224,151225,151227,151229],{"class":32,"line":52},[30,151226,30939],{"class":317},[30,151228,5391],{"class":36},[30,151230,151231],{"class":321},"(a, b):\n",[30,151233,151234,151236,151238,151240],{"class":32,"line":60},[30,151235,14934],{"class":317},[30,151237,11051],{"class":321},[30,151239,801],{"class":317},[30,151241,151242],{"class":321}," b\n",[30,151244,151245],{"class":32,"line":68},[30,151246,2582],{"emptyLinePlaceholder":245},[30,151248,151249],{"class":32,"line":80},[30,151250,2582],{"emptyLinePlaceholder":245},[30,151252,151253,151255,151258,151260,151262,151264],{"class":32,"line":88},[30,151254,30553],{"class":40},[30,151256,151257],{"class":321},"(MathUtils.add(",[30,151259,537],{"class":40},[30,151261,12617],{"class":321},[30,151263,398],{"class":40},[30,151265,30635],{"class":321},[157,151267,151268],{},"静态方法本质上是放在类命名空间里的普通函数。",[15,151270,151272],{"id":151271},"_1114-dataclass","11.14 dataclass",[157,151274,151275,151278],{},[27,151276,151277],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[20,151280,151282],{"className":30516,"code":151281,"language":30518,"meta":25,"style":25},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    name: str\n    age: int\n    score: float\n\n\nstudent = Student(\"小明\", 18, 95)\nprint(student)\n",[27,151283,151284,151296,151300,151304,151309,151317,151325,151333,151341,151345,151349,151369],{"__ignoreMap":25},[30,151285,151286,151288,151291,151293],{"class":32,"line":33},[30,151287,30875],{"class":317},[30,151289,151290],{"class":321}," dataclasses ",[30,151292,30530],{"class":317},[30,151294,151295],{"class":321}," dataclass\n",[30,151297,151298],{"class":32,"line":44},[30,151299,2582],{"emptyLinePlaceholder":245},[30,151301,151302],{"class":32,"line":52},[30,151303,2582],{"emptyLinePlaceholder":245},[30,151305,151306],{"class":32,"line":60},[30,151307,151308],{"class":36},"@dataclass\n",[30,151310,151311,151313,151315],{"class":32,"line":68},[30,151312,14876],{"class":317},[30,151314,8080],{"class":36},[30,151316,3921],{"class":321},[30,151318,151319,151322],{"class":32,"line":80},[30,151320,151321],{"class":321},"    name: ",[30,151323,151324],{"class":40},"str\n",[30,151326,151327,151330],{"class":32,"line":88},[30,151328,151329],{"class":321},"    age: ",[30,151331,151332],{"class":40},"int\n",[30,151334,151335,151338],{"class":32,"line":96},[30,151336,151337],{"class":321},"    score: ",[30,151339,151340],{"class":40},"float\n",[30,151342,151343],{"class":32,"line":104},[30,151344,2582],{"emptyLinePlaceholder":245},[30,151346,151347],{"class":32,"line":112},[30,151348,2582],{"emptyLinePlaceholder":245},[30,151350,151351,151353,151355,151357,151359,151361,151363,151365,151367],{"class":32,"line":123},[30,151352,149619],{"class":321},[30,151354,367],{"class":317},[30,151356,150023],{"class":321},[30,151358,150026],{"class":74},[30,151360,12617],{"class":321},[30,151362,970],{"class":40},[30,151364,12617],{"class":321},[30,151366,1309],{"class":40},[30,151368,328],{"class":321},[30,151370,151371,151373],{"class":32,"line":131},[30,151372,30553],{"class":40},[30,151374,150180],{"class":321},[157,151376,151377,151378,532,151380,151383],{},"它会自动生成 ",[27,151379,30967],{},[27,151381,151382],{},"__repr__"," 等方法。适合数据模型类。",[15,151385,151387],{"id":151386},"_1115-小案例学生类","11.15 小案例：学生类",[20,151389,151391],{"className":30516,"code":151390,"language":30518,"meta":25,"style":25},"class Student:\n    def __init__(self, student_id, name, age, score):\n        self.student_id = student_id\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def is_passed(self):\n        return self.score >= 60\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n\n    def __str__(self):\n        return f\"{self.student_id} {self.name} {self.age} {self.score}\"\n\n\nstudent = Student(\"001\", \"小明\", 18, 95)\nprint(student.is_passed())\nprint(student.to_dict())\n",[27,151392,151393,151401,151410,151422,151432,151442,151452,151456,151465,151478,151482,151491,151497,151509,151521,151533,151545,151549,151553,151559,151569,151578,151588,151596,151604,151613,151617,151621,151629,151665,151669,151673,151698,151705],{"__ignoreMap":25},[30,151394,151395,151397,151399],{"class":32,"line":33},[30,151396,14876],{"class":317},[30,151398,8080],{"class":36},[30,151400,3921],{"class":321},[30,151402,151403,151405,151407],{"class":32,"line":44},[30,151404,30939],{"class":317},[30,151406,30942],{"class":40},[30,151408,151409],{"class":321},"(self, student_id, name, age, score):\n",[30,151411,151412,151414,151417,151419],{"class":32,"line":52},[30,151413,30983],{"class":40},[30,151415,151416],{"class":321},".student_id ",[30,151418,367],{"class":317},[30,151420,151421],{"class":321}," student_id\n",[30,151423,151424,151426,151428,151430],{"class":32,"line":60},[30,151425,30983],{"class":40},[30,151427,149928],{"class":321},[30,151429,367],{"class":317},[30,151431,149933],{"class":321},[30,151433,151434,151436,151438,151440],{"class":32,"line":68},[30,151435,30983],{"class":40},[30,151437,149940],{"class":321},[30,151439,367],{"class":317},[30,151441,149945],{"class":321},[30,151443,151444,151446,151448,151450],{"class":32,"line":80},[30,151445,30983],{"class":40},[30,151447,149952],{"class":321},[30,151449,367],{"class":317},[30,151451,1765],{"class":321},[30,151453,151454],{"class":32,"line":88},[30,151455,2582],{"emptyLinePlaceholder":245},[30,151457,151458,151460,151463],{"class":32,"line":96},[30,151459,30939],{"class":317},[30,151461,151462],{"class":36}," is_passed",[30,151464,30945],{"class":321},[30,151466,151467,151469,151471,151473,151475],{"class":32,"line":104},[30,151468,14934],{"class":317},[30,151470,39011],{"class":40},[30,151472,149952],{"class":321},[30,151474,1893],{"class":317},[30,151476,151477],{"class":40}," 60\n",[30,151479,151480],{"class":32,"line":112},[30,151481,2582],{"emptyLinePlaceholder":245},[30,151483,151484,151486,151489],{"class":32,"line":123},[30,151485,30939],{"class":317},[30,151487,151488],{"class":36}," to_dict",[30,151490,30945],{"class":321},[30,151492,151493,151495],{"class":32,"line":131},[30,151494,14934],{"class":317},[30,151496,15754],{"class":321},[30,151498,151499,151502,151504,151506],{"class":32,"line":142},[30,151500,151501],{"class":74},"            \"student_id\"",[30,151503,51575],{"class":321},[30,151505,30961],{"class":40},[30,151507,151508],{"class":321},".student_id,\n",[30,151510,151511,151514,151516,151518],{"class":32,"line":1811},[30,151512,151513],{"class":74},"            \"name\"",[30,151515,51575],{"class":321},[30,151517,30961],{"class":40},[30,151519,151520],{"class":321},".name,\n",[30,151522,151523,151526,151528,151530],{"class":32,"line":1825},[30,151524,151525],{"class":74},"            \"age\"",[30,151527,51575],{"class":321},[30,151529,30961],{"class":40},[30,151531,151532],{"class":321},".age,\n",[30,151534,151535,151538,151540,151542],{"class":32,"line":1830},[30,151536,151537],{"class":74},"            \"score\"",[30,151539,51575],{"class":321},[30,151541,30961],{"class":40},[30,151543,151544],{"class":321},".score,\n",[30,151546,151547],{"class":32,"line":1836},[30,151548,2711],{"class":321},[30,151550,151551],{"class":32,"line":1857},[30,151552,2582],{"emptyLinePlaceholder":245},[30,151554,151555,151557],{"class":32,"line":1862},[30,151556,151152],{"class":36},[30,151558,151155],{"class":40},[30,151560,151561,151563,151566],{"class":32,"line":1876},[30,151562,30939],{"class":317},[30,151564,151565],{"class":36}," from_dict",[30,151567,151568],{"class":321},"(cls, data):\n",[30,151570,151571,151573,151575],{"class":32,"line":1881},[30,151572,14934],{"class":317},[30,151574,151172],{"class":40},[30,151576,151577],{"class":321},"(\n",[30,151579,151580,151583,151586],{"class":32,"line":1910},[30,151581,151582],{"class":321},"            data[",[30,151584,151585],{"class":74},"\"student_id\"",[30,151587,87974],{"class":321},[30,151589,151590,151592,151594],{"class":32,"line":1915},[30,151591,151582],{"class":321},[30,151593,62817],{"class":74},[30,151595,87974],{"class":321},[30,151597,151598,151600,151602],{"class":32,"line":1932},[30,151599,151582],{"class":321},[30,151601,69262],{"class":74},[30,151603,87974],{"class":321},[30,151605,151606,151608,151611],{"class":32,"line":1937},[30,151607,151582],{"class":321},[30,151609,151610],{"class":74},"\"score\"",[30,151612,87974],{"class":321},[30,151614,151615],{"class":32,"line":1942},[30,151616,38264],{"class":321},[30,151618,151619],{"class":32,"line":1947},[30,151620,2582],{"emptyLinePlaceholder":245},[30,151622,151623,151625,151627],{"class":32,"line":1961},[30,151624,30939],{"class":317},[30,151626,150119],{"class":40},[30,151628,30945],{"class":321},[30,151630,151631,151633,151635,151637,151639,151642,151644,151647,151649,151651,151653,151655,151657,151659,151661,151663],{"class":32,"line":1966},[30,151632,14934],{"class":317},[30,151634,150128],{"class":317},[30,151636,571],{"class":74},[30,151638,149590],{"class":40},[30,151640,151641],{"class":321},".student_id",[30,151643,1266],{"class":40},[30,151645,151646],{"class":40}," {self",[30,151648,80439],{"class":321},[30,151650,1266],{"class":40},[30,151652,151646],{"class":40},[30,151654,80451],{"class":321},[30,151656,1266],{"class":40},[30,151658,151646],{"class":40},[30,151660,150000],{"class":321},[30,151662,1266],{"class":40},[30,151664,25306],{"class":74},[30,151666,151667],{"class":32,"line":2759},[30,151668,2582],{"emptyLinePlaceholder":245},[30,151670,151671],{"class":32,"line":2773},[30,151672,2582],{"emptyLinePlaceholder":245},[30,151674,151675,151677,151679,151681,151684,151686,151688,151690,151692,151694,151696],{"class":32,"line":2781},[30,151676,149619],{"class":321},[30,151678,367],{"class":317},[30,151680,150023],{"class":321},[30,151682,151683],{"class":74},"\"001\"",[30,151685,12617],{"class":321},[30,151687,150026],{"class":74},[30,151689,12617],{"class":321},[30,151691,970],{"class":40},[30,151693,12617],{"class":321},[30,151695,1309],{"class":40},[30,151697,328],{"class":321},[30,151699,151700,151702],{"class":32,"line":2786},[30,151701,30553],{"class":40},[30,151703,151704],{"class":321},"(student.is_passed())\n",[30,151706,151707,151709],{"class":32,"line":2792},[30,151708,30553],{"class":40},[30,151710,151711],{"class":321},"(student.to_dict())\n",[157,151713,151714,101156,151717,151720],{},[27,151715,151716],{},"to_dict()",[27,151718,151719],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[15,151722,151724],{"id":151723},"_1116-易错点","11.16 易错点",[271,151726,151727,151733,151739,151744,151747,151750],{},[150,151728,151729,151730,28523],{},"类名推荐使用大驼峰，如 ",[27,151731,151732],{},"StudentManager",[150,151734,151735,151736,151738],{},"方法第一个参数必须写 ",[27,151737,30961],{},"，调用时不用传。",[150,151740,151741,151743],{},[27,151742,30967],{}," 不是普通方法，它在创建对象时自动执行。",[150,151745,151746],{},"私有属性不是绝对安全，只是约定和名称改写。",[150,151748,151749],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[150,151751,151752],{},"类中方法太多时，说明职责可能过重。",[15,151754,151756],{"id":151755},"_1117-本章练习","11.17 本章练习",[271,151758,151759,151765,151771,151776,151789],{},[150,151760,151761,151762,151764],{},"定义 ",[27,151763,149706],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[150,151766,151761,151767,151770],{},[27,151768,151769],{},"Account"," 类，实现存款、取款、查询余额。",[150,151772,151761,151773,151775],{},[27,151774,17408],{}," 类，计算圆的周长和面积。",[150,151777,151761,151778,532,151781,151784,151785,151788],{},[27,151779,151780],{},"Dog",[27,151782,151783],{},"Cat"," 类，并用同一个函数调用它们的 ",[27,151786,151787],{},"speak()"," 方法。",[150,151790,104504,151791,151793,151794,28523],{},[27,151792,151277],{}," 定义一个商品类 ",[27,151795,151796],{},"Product",[234,151798,151799],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":151801},[151802,151803,151804,151805,151806,151807,151809,151810,151811,151812,151813,151814,151815,151819,151820,151821,151822],{"id":149470,"depth":44,"text":149471},{"id":149653,"depth":44,"text":149654},{"id":149717,"depth":44,"text":149718},{"id":149794,"depth":44,"text":149795},{"id":149893,"depth":44,"text":149894},{"id":150057,"depth":44,"text":151808},"11.6 str",{"id":150183,"depth":44,"text":150184},{"id":150449,"depth":44,"text":150450},{"id":150563,"depth":44,"text":150564},{"id":150718,"depth":44,"text":150719},{"id":150842,"depth":44,"text":150843},{"id":150958,"depth":44,"text":150959},{"id":151107,"depth":44,"text":151108,"children":151816},[151817,151818],{"id":151111,"depth":52,"text":151112},{"id":151193,"depth":52,"text":151194},{"id":151271,"depth":44,"text":151272},{"id":151386,"depth":44,"text":151387},{"id":151723,"depth":44,"text":151724},{"id":151755,"depth":44,"text":151756},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149462,"description":242},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151829,"title":151830,"body":151831,"description":242,"extension":243,"meta":155144,"navigation":245,"path":155145,"seo":155146,"stem":155147,"__hash__":155148},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151832,"toc":155120},[151833,151836,151840,151843,151846,151875,151878,151886,151890,151894,151897,151920,151923,151929,151933,153379,153382,153403,153407,153410,153422,153425,153609,153612,153738,153741,153745,153749,153885,153889,153975,153979,154061,154065,154102,154106,154295,154299,154302,154532,154536,154539,154720,154723,154727,154730,154736,154739,154765,154769,154772,154786,154789,154814,154817,154831,154834,154851,154854,154871,154874,154891,154895,154921,154925,154948,154952,154955,154957,154963,154965,154986,154989,154995,155001,155005,155008,155084,155087,155091,155117],[10,151834,151830],{"id":151835},"_12-综合案例与复习路线",[15,151837,151839],{"id":151838},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[157,151841,151842],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[157,151844,151845],{},"一个合格的入门综合项目最好覆盖：",[271,151847,151848,151851,151854,151857,151860,151863,151866,151869,151872],{},[150,151849,151850],{},"输入输出。",[150,151852,151853],{},"判断和循环。",[150,151855,151856],{},"函数拆分。",[150,151858,151859],{},"列表、字典等容器。",[150,151861,151862],{},"文件持久化。",[150,151864,151865],{},"异常处理。",[150,151867,151868],{},"模块拆分。",[150,151870,151871],{},"可选：面向对象。",[150,151873,151874],{},"可选：数据可视化。",[157,151876,151877],{},"本章整理两个方向：",[271,151879,151880,151883],{},[150,151881,151882],{},"学生管理系统。",[150,151884,151885],{},"销售数据统计和可视化。",[15,151887,151889],{"id":151888},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[287,151891,151893],{"id":151892},"_1221-需求","12.2.1 需求",[157,151895,151896],{},"实现一个命令行学生管理系统：",[271,151898,151899,151902,151905,151908,151911,151914,151917],{},[150,151900,151901],{},"添加学生。",[150,151903,151904],{},"删除学生。",[150,151906,151907],{},"修改学生。",[150,151909,151910],{},"查询学生。",[150,151912,151913],{},"显示所有学生。",[150,151915,151916],{},"保存到 JSON 文件。",[150,151918,151919],{},"程序启动时自动读取 JSON 文件。",[157,151921,151922],{},"学生字段：",[20,151924,151927],{"className":151925,"code":151926,"language":5369,"meta":25},[5367],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[27,151928,151926],{"__ignoreMap":25},[15,151930,151932],{"id":151931},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[20,151934,151936],{"className":30516,"code":151935,"language":30518,"meta":25,"style":25},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    try:\n        with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n            return json.load(file)\n    except json.JSONDecodeError:\n        print(\"数据文件格式错误，已使用空数据启动\")\n        return []\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\ndef show_menu():\n    print(\"====== 学生管理系统 ======\")\n    print(\"1. 添加学生\")\n    print(\"2. 删除学生\")\n    print(\"3. 修改学生\")\n    print(\"4. 查询学生\")\n    print(\"5. 显示所有学生\")\n    print(\"0. 退出系统\")\n\n\ndef find_student(students, student_id):\n    for student in students:\n        if student[\"student_id\"] == student_id:\n            return student\n    return None\n\n\ndef input_int(prompt):\n    while True:\n        try:\n            return int(input(prompt))\n        except ValueError:\n            print(\"请输入整数\")\n\n\ndef input_float(prompt):\n    while True:\n        try:\n            return float(input(prompt))\n        except ValueError:\n            print(\"请输入数字\")\n\n\ndef add_student(students):\n    student_id = input(\"请输入学号:\")\n\n    if find_student(students, student_id):\n        print(\"学号已存在\")\n        return\n\n    name = input(\"请输入姓名:\")\n    age = input_int(\"请输入年龄:\")\n    score = input_float(\"请输入成绩:\")\n\n    students.append({\n        \"student_id\": student_id,\n        \"name\": name,\n        \"age\": age,\n        \"score\": score,\n    })\n    save_students(students)\n    print(\"添加成功\")\n\n\ndef delete_student(students):\n    student_id = input(\"请输入要删除的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    students.remove(student)\n    save_students(students)\n    print(\"删除成功\")\n\n\ndef update_student(students):\n    student_id = input(\"请输入要修改的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    name = input(\"请输入新姓名:\")\n    age = input_int(\"请输入新年龄:\")\n    score = input_float(\"请输入新成绩:\")\n\n    student[\"name\"] = name\n    student[\"age\"] = age\n    student[\"score\"] = score\n\n    save_students(students)\n    print(\"修改成功\")\n\n\ndef query_student(students):\n    student_id = input(\"请输入要查询的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    print_student(student)\n\n\ndef print_student(student):\n    print(\n        f\"{student['student_id']}\\t\"\n        f\"{student['name']}\\t\"\n        f\"{student['age']}\\t\"\n        f\"{student['score']}\"\n    )\n\n\ndef show_all_students(students):\n    if not students:\n        print(\"暂无学生\")\n        return\n\n    print(\"学号\\t姓名\\t年龄\\t成绩\")\n    for student in students:\n        print_student(student)\n\n\ndef main():\n    students = load_students()\n\n    while True:\n        show_menu()\n        choice = input(\"请输入操作:\")\n\n        if choice == \"1\":\n            add_student(students)\n        elif choice == \"2\":\n            delete_student(students)\n        elif choice == \"3\":\n            update_student(students)\n        elif choice == \"4\":\n            query_student(students)\n        elif choice == \"5\":\n            show_all_students(students)\n        elif choice == \"0\":\n            print(\"退出系统\")\n            break\n        else:\n            print(\"输入错误\")\n\n\nif __name__ == \"__main__\":\n    main()\n",[27,151937,151938,151944,151954,151958,151972,151976,151980,151989,152001,152007,152011,152017,152048,152058,152065,152076,152082,152086,152090,152100,152131,152157,152161,152165,152174,152185,152196,152207,152218,152229,152240,152251,152255,152259,152269,152281,152297,152304,152311,152315,152319,152329,152337,152344,152357,152367,152378,152382,152386,152395,152403,152409,152421,152429,152440,152444,152448,152457,152473,152477,152484,152495,152500,152504,152520,152535,152550,152554,152559,152567,152575,152583,152591,152595,152600,152611,152615,152619,152628,152643,152653,152657,152669,152680,152684,152688,152693,152697,152708,152712,152716,152725,152740,152748,152752,152764,152774,152778,152782,152797,152810,152823,152827,152840,152852,152864,152868,152872,152883,152887,152891,152900,152915,152923,152927,152939,152949,152953,152957,152962,152966,152970,152980,152986,153008,153027,153046,153065,153070,153074,153078,153087,153095,153106,153110,153114,153140,153150,153155,153159,153163,153171,153181,153185,153193,153198,153214,153218,153232,153237,153251,153256,153269,153274,153287,153292,153305,153310,153323,153334,153338,153344,153355,153359,153363,153375],{"__ignoreMap":25},[30,151939,151940,151942],{"class":32,"line":33},[30,151941,30530],{"class":317},[30,151943,147229],{"class":321},[30,151945,151946,151948,151950,151952],{"class":32,"line":44},[30,151947,30875],{"class":317},[30,151949,108449],{"class":321},[30,151951,30530],{"class":317},[30,151953,108454],{"class":321},[30,151955,151956],{"class":32,"line":52},[30,151957,2582],{"emptyLinePlaceholder":245},[30,151959,151960,151963,151965,151967,151970],{"class":32,"line":60},[30,151961,151962],{"class":40},"DATA_FILE",[30,151964,13746],{"class":317},[30,151966,108683],{"class":321},[30,151968,151969],{"class":74},"\"students.json\"",[30,151971,328],{"class":321},[30,151973,151974],{"class":32,"line":68},[30,151975,2582],{"emptyLinePlaceholder":245},[30,151977,151978],{"class":32,"line":80},[30,151979,2582],{"emptyLinePlaceholder":245},[30,151981,151982,151984,151987],{"class":32,"line":88},[30,151983,32085],{"class":317},[30,151985,151986],{"class":36}," load_students",[30,151988,32091],{"class":321},[30,151990,151991,151993,151995,151998],{"class":32,"line":96},[30,151992,3283],{"class":317},[30,151994,39068],{"class":317},[30,151996,151997],{"class":40}," DATA_FILE",[30,151999,152000],{"class":321},".exists():\n",[30,152002,152003,152005],{"class":32,"line":104},[30,152004,14934],{"class":317},[30,152006,51976],{"class":321},[30,152008,152009],{"class":32,"line":112},[30,152010,2582],{"emptyLinePlaceholder":245},[30,152012,152013,152015],{"class":32,"line":123},[30,152014,125922],{"class":317},[30,152016,3921],{"class":321},[30,152018,152019,152022,152024,152026,152028,152030,152032,152034,152036,152038,152040,152042,152044,152046],{"class":32,"line":131},[30,152020,152021],{"class":317},"        with",[30,152023,146929],{"class":40},[30,152025,322],{"class":321},[30,152027,151962],{"class":40},[30,152029,12617],{"class":321},[30,152031,146939],{"class":74},[30,152033,12617],{"class":321},[30,152035,146944],{"class":5398},[30,152037,367],{"class":317},[30,152039,146949],{"class":74},[30,152041,13896],{"class":321},[30,152043,31521],{"class":317},[30,152045,148291],{"class":5398},[30,152047,3921],{"class":321},[30,152049,152050,152052,152054,152056],{"class":32,"line":142},[30,152051,15914],{"class":317},[30,152053,148302],{"class":321},[30,152055,45492],{"class":5398},[30,152057,328],{"class":321},[30,152059,152060,152062],{"class":32,"line":1811},[30,152061,125950],{"class":317},[30,152063,152064],{"class":321}," json.JSONDecodeError:\n",[30,152066,152067,152069,152071,152074],{"class":32,"line":1825},[30,152068,32589],{"class":40},[30,152070,322],{"class":321},[30,152072,152073],{"class":74},"\"数据文件格式错误，已使用空数据启动\"",[30,152075,328],{"class":321},[30,152077,152078,152080],{"class":32,"line":1830},[30,152079,14934],{"class":317},[30,152081,51976],{"class":321},[30,152083,152084],{"class":32,"line":1836},[30,152085,2582],{"emptyLinePlaceholder":245},[30,152087,152088],{"class":32,"line":1857},[30,152089,2582],{"emptyLinePlaceholder":245},[30,152091,152092,152094,152097],{"class":32,"line":1862},[30,152093,32085],{"class":317},[30,152095,152096],{"class":36}," save_students",[30,152098,152099],{"class":321},"(students):\n",[30,152101,152102,152104,152106,152108,152110,152112,152115,152117,152119,152121,152123,152125,152127,152129],{"class":32,"line":1876},[30,152103,34316],{"class":317},[30,152105,146929],{"class":40},[30,152107,322],{"class":321},[30,152109,151962],{"class":40},[30,152111,12617],{"class":321},[30,152113,152114],{"class":74},"\"w\"",[30,152116,12617],{"class":321},[30,152118,146944],{"class":5398},[30,152120,367],{"class":317},[30,152122,146949],{"class":74},[30,152124,13896],{"class":321},[30,152126,31521],{"class":317},[30,152128,148291],{"class":5398},[30,152130,3921],{"class":321},[30,152132,152133,152136,152138,152140,152142,152144,152146,152148,152151,152153,152155],{"class":32,"line":1881},[30,152134,152135],{"class":321},"        json.dump(students, ",[30,152137,45492],{"class":5398},[30,152139,12617],{"class":321},[30,152141,147275],{"class":5398},[30,152143,367],{"class":317},[30,152145,34125],{"class":40},[30,152147,12617],{"class":321},[30,152149,152150],{"class":5398},"indent",[30,152152,367],{"class":317},[30,152154,398],{"class":40},[30,152156,328],{"class":321},[30,152158,152159],{"class":32,"line":1910},[30,152160,2582],{"emptyLinePlaceholder":245},[30,152162,152163],{"class":32,"line":1915},[30,152164,2582],{"emptyLinePlaceholder":245},[30,152166,152167,152169,152172],{"class":32,"line":1932},[30,152168,32085],{"class":317},[30,152170,152171],{"class":36}," show_menu",[30,152173,32091],{"class":321},[30,152175,152176,152178,152180,152183],{"class":32,"line":1937},[30,152177,31437],{"class":40},[30,152179,322],{"class":321},[30,152181,152182],{"class":74},"\"====== 学生管理系统 ======\"",[30,152184,328],{"class":321},[30,152186,152187,152189,152191,152194],{"class":32,"line":1942},[30,152188,31437],{"class":40},[30,152190,322],{"class":321},[30,152192,152193],{"class":74},"\"1. 添加学生\"",[30,152195,328],{"class":321},[30,152197,152198,152200,152202,152205],{"class":32,"line":1947},[30,152199,31437],{"class":40},[30,152201,322],{"class":321},[30,152203,152204],{"class":74},"\"2. 删除学生\"",[30,152206,328],{"class":321},[30,152208,152209,152211,152213,152216],{"class":32,"line":1961},[30,152210,31437],{"class":40},[30,152212,322],{"class":321},[30,152214,152215],{"class":74},"\"3. 修改学生\"",[30,152217,328],{"class":321},[30,152219,152220,152222,152224,152227],{"class":32,"line":1966},[30,152221,31437],{"class":40},[30,152223,322],{"class":321},[30,152225,152226],{"class":74},"\"4. 查询学生\"",[30,152228,328],{"class":321},[30,152230,152231,152233,152235,152238],{"class":32,"line":2759},[30,152232,31437],{"class":40},[30,152234,322],{"class":321},[30,152236,152237],{"class":74},"\"5. 显示所有学生\"",[30,152239,328],{"class":321},[30,152241,152242,152244,152246,152249],{"class":32,"line":2773},[30,152243,31437],{"class":40},[30,152245,322],{"class":321},[30,152247,152248],{"class":74},"\"0. 退出系统\"",[30,152250,328],{"class":321},[30,152252,152253],{"class":32,"line":2781},[30,152254,2582],{"emptyLinePlaceholder":245},[30,152256,152257],{"class":32,"line":2786},[30,152258,2582],{"emptyLinePlaceholder":245},[30,152260,152261,152263,152266],{"class":32,"line":2792},[30,152262,32085],{"class":317},[30,152264,152265],{"class":36}," find_student",[30,152267,152268],{"class":321},"(students, student_id):\n",[30,152270,152271,152273,152276,152278],{"class":32,"line":2798},[30,152272,3383],{"class":317},[30,152274,152275],{"class":321}," student ",[30,152277,26181],{"class":317},[30,152279,152280],{"class":321}," students:\n",[30,152282,152283,152285,152288,152290,152292,152294],{"class":32,"line":2803},[30,152284,2679],{"class":317},[30,152286,152287],{"class":321}," student[",[30,152289,151585],{"class":74},[30,152291,4625],{"class":321},[30,152293,3131],{"class":317},[30,152295,152296],{"class":321}," student_id:\n",[30,152298,152299,152301],{"class":32,"line":8130},[30,152300,15914],{"class":317},[30,152302,152303],{"class":321}," student\n",[30,152305,152306,152308],{"class":32,"line":8154},[30,152307,4272],{"class":317},[30,152309,152310],{"class":40}," None\n",[30,152312,152313],{"class":32,"line":8159},[30,152314,2582],{"emptyLinePlaceholder":245},[30,152316,152317],{"class":32,"line":8165},[30,152318,2582],{"emptyLinePlaceholder":245},[30,152320,152321,152323,152326],{"class":32,"line":8192},[30,152322,32085],{"class":317},[30,152324,152325],{"class":36}," input_int",[30,152327,152328],{"class":321},"(prompt):\n",[30,152330,152331,152333,152335],{"class":32,"line":8197},[30,152332,2433],{"class":317},[30,152334,95430],{"class":40},[30,152336,3921],{"class":321},[30,152338,152339,152342],{"class":32,"line":8203},[30,152340,152341],{"class":317},"        try",[30,152343,3921],{"class":321},[30,152345,152346,152348,152350,152352,152354],{"class":32,"line":8215},[30,152347,15914],{"class":317},[30,152349,2564],{"class":40},[30,152351,322],{"class":321},[30,152353,53959],{"class":40},[30,152355,152356],{"class":321},"(prompt))\n",[30,152358,152359,152362,152365],{"class":32,"line":8227},[30,152360,152361],{"class":317},"        except",[30,152363,152364],{"class":40}," ValueError",[30,152366,3921],{"class":321},[30,152368,152369,152371,152373,152376],{"class":32,"line":8239},[30,152370,34788],{"class":40},[30,152372,322],{"class":321},[30,152374,152375],{"class":74},"\"请输入整数\"",[30,152377,328],{"class":321},[30,152379,152380],{"class":32,"line":9898},[30,152381,2582],{"emptyLinePlaceholder":245},[30,152383,152384],{"class":32,"line":9923},[30,152385,2582],{"emptyLinePlaceholder":245},[30,152387,152388,152390,152393],{"class":32,"line":9946},[30,152389,32085],{"class":317},[30,152391,152392],{"class":36}," input_float",[30,152394,152328],{"class":321},[30,152396,152397,152399,152401],{"class":32,"line":9970},[30,152398,2433],{"class":317},[30,152400,95430],{"class":40},[30,152402,3921],{"class":321},[30,152404,152405,152407],{"class":32,"line":9975},[30,152406,152341],{"class":317},[30,152408,3921],{"class":321},[30,152410,152411,152413,152415,152417,152419],{"class":32,"line":9980},[30,152412,15914],{"class":317},[30,152414,109935],{"class":40},[30,152416,322],{"class":321},[30,152418,53959],{"class":40},[30,152420,152356],{"class":321},[30,152422,152423,152425,152427],{"class":32,"line":9985},[30,152424,152361],{"class":317},[30,152426,152364],{"class":40},[30,152428,3921],{"class":321},[30,152430,152431,152433,152435,152438],{"class":32,"line":9994},[30,152432,34788],{"class":40},[30,152434,322],{"class":321},[30,152436,152437],{"class":74},"\"请输入数字\"",[30,152439,328],{"class":321},[30,152441,152442],{"class":32,"line":9999},[30,152443,2582],{"emptyLinePlaceholder":245},[30,152445,152446],{"class":32,"line":10005},[30,152447,2582],{"emptyLinePlaceholder":245},[30,152449,152450,152452,152455],{"class":32,"line":10026},[30,152451,32085],{"class":317},[30,152453,152454],{"class":36}," add_student",[30,152456,152099],{"class":321},[30,152458,152459,152462,152464,152466,152468,152471],{"class":32,"line":10032},[30,152460,152461],{"class":321},"    student_id ",[30,152463,367],{"class":317},[30,152465,60743],{"class":40},[30,152467,322],{"class":321},[30,152469,152470],{"class":74},"\"请输入学号:\"",[30,152472,328],{"class":321},[30,152474,152475],{"class":32,"line":10046},[30,152476,2582],{"emptyLinePlaceholder":245},[30,152478,152479,152481],{"class":32,"line":10052},[30,152480,3283],{"class":317},[30,152482,152483],{"class":321}," find_student(students, student_id):\n",[30,152485,152486,152488,152490,152493],{"class":32,"line":10079},[30,152487,32589],{"class":40},[30,152489,322],{"class":321},[30,152491,152492],{"class":74},"\"学号已存在\"",[30,152494,328],{"class":321},[30,152496,152497],{"class":32,"line":10088},[30,152498,152499],{"class":317},"        return\n",[30,152501,152502],{"class":32,"line":10094},[30,152503,2582],{"emptyLinePlaceholder":245},[30,152505,152506,152509,152511,152513,152515,152518],{"class":32,"line":10102},[30,152507,152508],{"class":321},"    name ",[30,152510,367],{"class":317},[30,152512,60743],{"class":40},[30,152514,322],{"class":321},[30,152516,152517],{"class":74},"\"请输入姓名:\"",[30,152519,328],{"class":321},[30,152521,152522,152525,152527,152530,152533],{"class":32,"line":10107},[30,152523,152524],{"class":321},"    age ",[30,152526,367],{"class":317},[30,152528,152529],{"class":321}," input_int(",[30,152531,152532],{"class":74},"\"请输入年龄:\"",[30,152534,328],{"class":321},[30,152536,152537,152540,152542,152545,152548],{"class":32,"line":16786},[30,152538,152539],{"class":321},"    score ",[30,152541,367],{"class":317},[30,152543,152544],{"class":321}," input_float(",[30,152546,152547],{"class":74},"\"请输入成绩:\"",[30,152549,328],{"class":321},[30,152551,152552],{"class":32,"line":16792},[30,152553,2582],{"emptyLinePlaceholder":245},[30,152555,152556],{"class":32,"line":16815},[30,152557,152558],{"class":321},"    students.append({\n",[30,152560,152561,152564],{"class":32,"line":16821},[30,152562,152563],{"class":74},"        \"student_id\"",[30,152565,152566],{"class":321},": student_id,\n",[30,152568,152569,152572],{"class":32,"line":16844},[30,152570,152571],{"class":74},"        \"name\"",[30,152573,152574],{"class":321},": name,\n",[30,152576,152577,152580],{"class":32,"line":16858},[30,152578,152579],{"class":74},"        \"age\"",[30,152581,152582],{"class":321},": age,\n",[30,152584,152585,152588],{"class":32,"line":16878},[30,152586,152587],{"class":74},"        \"score\"",[30,152589,152590],{"class":321},": score,\n",[30,152592,152593],{"class":32,"line":16884},[30,152594,33599],{"class":321},[30,152596,152597],{"class":32,"line":16895},[30,152598,152599],{"class":321},"    save_students(students)\n",[30,152601,152602,152604,152606,152609],{"class":32,"line":16918},[30,152603,31437],{"class":40},[30,152605,322],{"class":321},[30,152607,152608],{"class":74},"\"添加成功\"",[30,152610,328],{"class":321},[30,152612,152613],{"class":32,"line":16940},[30,152614,2582],{"emptyLinePlaceholder":245},[30,152616,152617],{"class":32,"line":16945},[30,152618,2582],{"emptyLinePlaceholder":245},[30,152620,152621,152623,152626],{"class":32,"line":16951},[30,152622,32085],{"class":317},[30,152624,152625],{"class":36}," delete_student",[30,152627,152099],{"class":321},[30,152629,152630,152632,152634,152636,152638,152641],{"class":32,"line":16965},[30,152631,152461],{"class":321},[30,152633,367],{"class":317},[30,152635,60743],{"class":40},[30,152637,322],{"class":321},[30,152639,152640],{"class":74},"\"请输入要删除的学号:\"",[30,152642,328],{"class":321},[30,152644,152645,152648,152650],{"class":32,"line":16978},[30,152646,152647],{"class":321},"    student ",[30,152649,367],{"class":317},[30,152651,152652],{"class":321}," find_student(students, student_id)\n",[30,152654,152655],{"class":32,"line":16983},[30,152656,2582],{"emptyLinePlaceholder":245},[30,152658,152659,152661,152663,152665,152667],{"class":32,"line":16997},[30,152660,3283],{"class":317},[30,152662,152275],{"class":321},[30,152664,39065],{"class":317},[30,152666,39071],{"class":40},[30,152668,3921],{"class":321},[30,152670,152671,152673,152675,152678],{"class":32,"line":17002},[30,152672,32589],{"class":40},[30,152674,322],{"class":321},[30,152676,152677],{"class":74},"\"学生不存在\"",[30,152679,328],{"class":321},[30,152681,152682],{"class":32,"line":17008},[30,152683,152499],{"class":317},[30,152685,152686],{"class":32,"line":17013},[30,152687,2582],{"emptyLinePlaceholder":245},[30,152689,152690],{"class":32,"line":17027},[30,152691,152692],{"class":321},"    students.remove(student)\n",[30,152694,152695],{"class":32,"line":17032},[30,152696,152599],{"class":321},[30,152698,152699,152701,152703,152706],{"class":32,"line":17037},[30,152700,31437],{"class":40},[30,152702,322],{"class":321},[30,152704,152705],{"class":74},"\"删除成功\"",[30,152707,328],{"class":321},[30,152709,152710],{"class":32,"line":17051},[30,152711,2582],{"emptyLinePlaceholder":245},[30,152713,152714],{"class":32,"line":17063},[30,152715,2582],{"emptyLinePlaceholder":245},[30,152717,152718,152720,152723],{"class":32,"line":17068},[30,152719,32085],{"class":317},[30,152721,152722],{"class":36}," update_student",[30,152724,152099],{"class":321},[30,152726,152727,152729,152731,152733,152735,152738],{"class":32,"line":17081},[30,152728,152461],{"class":321},[30,152730,367],{"class":317},[30,152732,60743],{"class":40},[30,152734,322],{"class":321},[30,152736,152737],{"class":74},"\"请输入要修改的学号:\"",[30,152739,328],{"class":321},[30,152741,152742,152744,152746],{"class":32,"line":17086},[30,152743,152647],{"class":321},[30,152745,367],{"class":317},[30,152747,152652],{"class":321},[30,152749,152750],{"class":32,"line":17091},[30,152751,2582],{"emptyLinePlaceholder":245},[30,152753,152754,152756,152758,152760,152762],{"class":32,"line":17096},[30,152755,3283],{"class":317},[30,152757,152275],{"class":321},[30,152759,39065],{"class":317},[30,152761,39071],{"class":40},[30,152763,3921],{"class":321},[30,152765,152766,152768,152770,152772],{"class":32,"line":17109},[30,152767,32589],{"class":40},[30,152769,322],{"class":321},[30,152771,152677],{"class":74},[30,152773,328],{"class":321},[30,152775,152776],{"class":32,"line":17114},[30,152777,152499],{"class":317},[30,152779,152780],{"class":32,"line":32771},[30,152781,2582],{"emptyLinePlaceholder":245},[30,152783,152784,152786,152788,152790,152792,152795],{"class":32,"line":32777},[30,152785,152508],{"class":321},[30,152787,367],{"class":317},[30,152789,60743],{"class":40},[30,152791,322],{"class":321},[30,152793,152794],{"class":74},"\"请输入新姓名:\"",[30,152796,328],{"class":321},[30,152798,152799,152801,152803,152805,152808],{"class":32,"line":32783},[30,152800,152524],{"class":321},[30,152802,367],{"class":317},[30,152804,152529],{"class":321},[30,152806,152807],{"class":74},"\"请输入新年龄:\"",[30,152809,328],{"class":321},[30,152811,152812,152814,152816,152818,152821],{"class":32,"line":32789},[30,152813,152539],{"class":321},[30,152815,367],{"class":317},[30,152817,152544],{"class":321},[30,152819,152820],{"class":74},"\"请输入新成绩:\"",[30,152822,328],{"class":321},[30,152824,152825],{"class":32,"line":32795},[30,152826,2582],{"emptyLinePlaceholder":245},[30,152828,152829,152832,152834,152836,152838],{"class":32,"line":32806},[30,152830,152831],{"class":321},"    student[",[30,152833,62817],{"class":74},[30,152835,4625],{"class":321},[30,152837,367],{"class":317},[30,152839,149933],{"class":321},[30,152841,152842,152844,152846,152848,152850],{"class":32,"line":32812},[30,152843,152831],{"class":321},[30,152845,69262],{"class":74},[30,152847,4625],{"class":321},[30,152849,367],{"class":317},[30,152851,149945],{"class":321},[30,152853,152854,152856,152858,152860,152862],{"class":32,"line":32832},[30,152855,152831],{"class":321},[30,152857,151610],{"class":74},[30,152859,4625],{"class":321},[30,152861,367],{"class":317},[30,152863,1765],{"class":321},[30,152865,152866],{"class":32,"line":32838},[30,152867,2582],{"emptyLinePlaceholder":245},[30,152869,152870],{"class":32,"line":32849},[30,152871,152599],{"class":321},[30,152873,152874,152876,152878,152881],{"class":32,"line":32855},[30,152875,31437],{"class":40},[30,152877,322],{"class":321},[30,152879,152880],{"class":74},"\"修改成功\"",[30,152882,328],{"class":321},[30,152884,152885],{"class":32,"line":32861},[30,152886,2582],{"emptyLinePlaceholder":245},[30,152888,152889],{"class":32,"line":32867},[30,152890,2582],{"emptyLinePlaceholder":245},[30,152892,152893,152895,152898],{"class":32,"line":32873},[30,152894,32085],{"class":317},[30,152896,152897],{"class":36}," query_student",[30,152899,152099],{"class":321},[30,152901,152902,152904,152906,152908,152910,152913],{"class":32,"line":32879},[30,152903,152461],{"class":321},[30,152905,367],{"class":317},[30,152907,60743],{"class":40},[30,152909,322],{"class":321},[30,152911,152912],{"class":74},"\"请输入要查询的学号:\"",[30,152914,328],{"class":321},[30,152916,152917,152919,152921],{"class":32,"line":32885},[30,152918,152647],{"class":321},[30,152920,367],{"class":317},[30,152922,152652],{"class":321},[30,152924,152925],{"class":32,"line":32891},[30,152926,2582],{"emptyLinePlaceholder":245},[30,152928,152929,152931,152933,152935,152937],{"class":32,"line":32911},[30,152930,3283],{"class":317},[30,152932,152275],{"class":321},[30,152934,39065],{"class":317},[30,152936,39071],{"class":40},[30,152938,3921],{"class":321},[30,152940,152941,152943,152945,152947],{"class":32,"line":32917},[30,152942,32589],{"class":40},[30,152944,322],{"class":321},[30,152946,152677],{"class":74},[30,152948,328],{"class":321},[30,152950,152951],{"class":32,"line":32933},[30,152952,152499],{"class":317},[30,152954,152955],{"class":32,"line":32939},[30,152956,2582],{"emptyLinePlaceholder":245},[30,152958,152959],{"class":32,"line":32953},[30,152960,152961],{"class":321},"    print_student(student)\n",[30,152963,152964],{"class":32,"line":32959},[30,152965,2582],{"emptyLinePlaceholder":245},[30,152967,152968],{"class":32,"line":32974},[30,152969,2582],{"emptyLinePlaceholder":245},[30,152971,152972,152974,152977],{"class":32,"line":32980},[30,152973,32085],{"class":317},[30,152975,152976],{"class":36}," print_student",[30,152978,152979],{"class":321},"(student):\n",[30,152981,152982,152984],{"class":32,"line":32989},[30,152983,31437],{"class":40},[30,152985,151577],{"class":321},[30,152987,152988,152991,152993,152995,152998,153001,153003,153006],{"class":32,"line":32995},[30,152989,152990],{"class":317},"        f",[30,152992,571],{"class":74},[30,152994,1216],{"class":40},[30,152996,152997],{"class":321},"student[",[30,152999,153000],{"class":74},"'student_id'",[30,153002,1260],{"class":321},[30,153004,153005],{"class":40},"}\\t",[30,153007,25306],{"class":74},[30,153009,153010,153012,153014,153016,153018,153021,153023,153025],{"class":32,"line":33004},[30,153011,152990],{"class":317},[30,153013,571],{"class":74},[30,153015,1216],{"class":40},[30,153017,152997],{"class":321},[30,153019,153020],{"class":74},"'name'",[30,153022,1260],{"class":321},[30,153024,153005],{"class":40},[30,153026,25306],{"class":74},[30,153028,153029,153031,153033,153035,153037,153040,153042,153044],{"class":32,"line":33010},[30,153030,152990],{"class":317},[30,153032,571],{"class":74},[30,153034,1216],{"class":40},[30,153036,152997],{"class":321},[30,153038,153039],{"class":74},"'age'",[30,153041,1260],{"class":321},[30,153043,153005],{"class":40},[30,153045,25306],{"class":74},[30,153047,153048,153050,153052,153054,153056,153059,153061,153063],{"class":32,"line":33016},[30,153049,152990],{"class":317},[30,153051,571],{"class":74},[30,153053,1216],{"class":40},[30,153055,152997],{"class":321},[30,153057,153058],{"class":74},"'score'",[30,153060,1260],{"class":321},[30,153062,1266],{"class":40},[30,153064,25306],{"class":74},[30,153066,153067],{"class":32,"line":33025},[30,153068,153069],{"class":321},"    )\n",[30,153071,153072],{"class":32,"line":33031},[30,153073,2582],{"emptyLinePlaceholder":245},[30,153075,153076],{"class":32,"line":33042},[30,153077,2582],{"emptyLinePlaceholder":245},[30,153079,153080,153082,153085],{"class":32,"line":33048},[30,153081,32085],{"class":317},[30,153083,153084],{"class":36}," show_all_students",[30,153086,152099],{"class":321},[30,153088,153089,153091,153093],{"class":32,"line":33067},[30,153090,3283],{"class":317},[30,153092,39068],{"class":317},[30,153094,152280],{"class":321},[30,153096,153097,153099,153101,153104],{"class":32,"line":33073},[30,153098,32589],{"class":40},[30,153100,322],{"class":321},[30,153102,153103],{"class":74},"\"暂无学生\"",[30,153105,328],{"class":321},[30,153107,153108],{"class":32,"line":33084},[30,153109,152499],{"class":317},[30,153111,153112],{"class":32,"line":33090},[30,153113,2582],{"emptyLinePlaceholder":245},[30,153115,153116,153118,153120,153123,153125,153128,153130,153133,153135,153138],{"class":32,"line":33110},[30,153117,31437],{"class":40},[30,153119,322],{"class":321},[30,153121,153122],{"class":74},"\"学号",[30,153124,1420],{"class":40},[30,153126,153127],{"class":74},"姓名",[30,153129,1420],{"class":40},[30,153131,153132],{"class":74},"年龄",[30,153134,1420],{"class":40},[30,153136,153137],{"class":74},"成绩\"",[30,153139,328],{"class":321},[30,153141,153142,153144,153146,153148],{"class":32,"line":33126},[30,153143,3383],{"class":317},[30,153145,152275],{"class":321},[30,153147,26181],{"class":317},[30,153149,152280],{"class":321},[30,153151,153152],{"class":32,"line":33132},[30,153153,153154],{"class":321},"        print_student(student)\n",[30,153156,153157],{"class":32,"line":33146},[30,153158,2582],{"emptyLinePlaceholder":245},[30,153160,153161],{"class":32,"line":33152},[30,153162,2582],{"emptyLinePlaceholder":245},[30,153164,153165,153167,153169],{"class":32,"line":33158},[30,153166,32085],{"class":317},[30,153168,2155],{"class":36},[30,153170,32091],{"class":321},[30,153172,153173,153176,153178],{"class":32,"line":33169},[30,153174,153175],{"class":321},"    students ",[30,153177,367],{"class":317},[30,153179,153180],{"class":321}," load_students()\n",[30,153182,153183],{"class":32,"line":33175},[30,153184,2582],{"emptyLinePlaceholder":245},[30,153186,153187,153189,153191],{"class":32,"line":33181},[30,153188,2433],{"class":317},[30,153190,95430],{"class":40},[30,153192,3921],{"class":321},[30,153194,153195],{"class":32,"line":33191},[30,153196,153197],{"class":321},"        show_menu()\n",[30,153199,153200,153203,153205,153207,153209,153212],{"class":32,"line":33197},[30,153201,153202],{"class":321},"        choice ",[30,153204,367],{"class":317},[30,153206,60743],{"class":40},[30,153208,322],{"class":321},[30,153210,153211],{"class":74},"\"请输入操作:\"",[30,153213,328],{"class":321},[30,153215,153216],{"class":32,"line":33208},[30,153217,2582],{"emptyLinePlaceholder":245},[30,153219,153220,153222,153225,153227,153230],{"class":32,"line":33214},[30,153221,2679],{"class":317},[30,153223,153224],{"class":321}," choice ",[30,153226,3131],{"class":317},[30,153228,153229],{"class":74}," \"1\"",[30,153231,3921],{"class":321},[30,153233,153234],{"class":32,"line":33224},[30,153235,153236],{"class":321},"            add_student(students)\n",[30,153238,153239,153242,153244,153246,153249],{"class":32,"line":33229},[30,153240,153241],{"class":317},"        elif",[30,153243,153224],{"class":321},[30,153245,3131],{"class":317},[30,153247,153248],{"class":74}," \"2\"",[30,153250,3921],{"class":321},[30,153252,153253],{"class":32,"line":33235},[30,153254,153255],{"class":321},"            delete_student(students)\n",[30,153257,153258,153260,153262,153264,153267],{"class":32,"line":33284},[30,153259,153241],{"class":317},[30,153261,153224],{"class":321},[30,153263,3131],{"class":317},[30,153265,153266],{"class":74}," \"3\"",[30,153268,3921],{"class":321},[30,153270,153271],{"class":32,"line":33331},[30,153272,153273],{"class":321},"            update_student(students)\n",[30,153275,153276,153278,153280,153282,153285],{"class":32,"line":33336},[30,153277,153241],{"class":317},[30,153279,153224],{"class":321},[30,153281,3131],{"class":317},[30,153283,153284],{"class":74}," \"4\"",[30,153286,3921],{"class":321},[30,153288,153289],{"class":32,"line":33342},[30,153290,153291],{"class":321},"            query_student(students)\n",[30,153293,153294,153296,153298,153300,153303],{"class":32,"line":33361},[30,153295,153241],{"class":317},[30,153297,153224],{"class":321},[30,153299,3131],{"class":317},[30,153301,153302],{"class":74}," \"5\"",[30,153304,3921],{"class":321},[30,153306,153307],{"class":32,"line":33367},[30,153308,153309],{"class":321},"            show_all_students(students)\n",[30,153311,153312,153314,153316,153318,153321],{"class":32,"line":33387},[30,153313,153241],{"class":317},[30,153315,153224],{"class":321},[30,153317,3131],{"class":317},[30,153319,153320],{"class":74}," \"0\"",[30,153322,3921],{"class":321},[30,153324,153325,153327,153329,153332],{"class":32,"line":33393},[30,153326,34788],{"class":40},[30,153328,322],{"class":321},[30,153330,153331],{"class":74},"\"退出系统\"",[30,153333,328],{"class":321},[30,153335,153336],{"class":32,"line":33399},[30,153337,115236],{"class":317},[30,153339,153340,153342],{"class":32,"line":33409},[30,153341,2716],{"class":317},[30,153343,3921],{"class":321},[30,153345,153346,153348,153350,153353],{"class":32,"line":33414},[30,153347,34788],{"class":40},[30,153349,322],{"class":321},[30,153351,153352],{"class":74},"\"输入错误\"",[30,153354,328],{"class":321},[30,153356,153357],{"class":32,"line":33420},[30,153358,2582],{"emptyLinePlaceholder":245},[30,153360,153361],{"class":32,"line":33436},[30,153362,2582],{"emptyLinePlaceholder":245},[30,153364,153365,153367,153369,153371,153373],{"class":32,"line":33481},[30,153366,1717],{"class":317},[30,153368,31358],{"class":40},[30,153370,101697],{"class":317},[30,153372,101700],{"class":74},[30,153374,3921],{"class":321},[30,153376,153377],{"class":32,"line":33487},[30,153378,101707],{"class":321},[157,153380,153381],{},"这个项目串联了：",[271,153383,153384,153387,153390,153393,153396,153398],{},[150,153385,153386],{},"菜单循环。",[150,153388,153389],{},"函数封装。",[150,153391,153392],{},"列表字典。",[150,153394,153395],{},"JSON 读写。",[150,153397,151865],{},[150,153399,153400,28523],{},[27,153401,153402],{},"if __name__ == \"__main__\"",[15,153404,153406],{"id":153405},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[157,153408,153409],{},"可以进一步拆成两个类：",[271,153411,153412,153417],{},[150,153413,153414,153416],{},[27,153415,149706],{},"：表示单个学生。",[150,153418,153419,153421],{},[27,153420,151732],{},"：负责学生增删改查和文件保存。",[157,153423,153424],{},"示意代码：",[20,153426,153428],{"className":30516,"code":153427,"language":30518,"meta":25,"style":25},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    student_id: str\n    name: str\n    age: int\n    score: float\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n",[27,153429,153430,153440,153444,153448,153452,153460,153467,153473,153479,153485,153489,153497,153503,153513,153523,153533,153543,153547,153551,153557,153565,153573,153581,153589,153597,153605],{"__ignoreMap":25},[30,153431,153432,153434,153436,153438],{"class":32,"line":33},[30,153433,30875],{"class":317},[30,153435,151290],{"class":321},[30,153437,30530],{"class":317},[30,153439,151295],{"class":321},[30,153441,153442],{"class":32,"line":44},[30,153443,2582],{"emptyLinePlaceholder":245},[30,153445,153446],{"class":32,"line":52},[30,153447,2582],{"emptyLinePlaceholder":245},[30,153449,153450],{"class":32,"line":60},[30,153451,151308],{"class":36},[30,153453,153454,153456,153458],{"class":32,"line":68},[30,153455,14876],{"class":317},[30,153457,8080],{"class":36},[30,153459,3921],{"class":321},[30,153461,153462,153465],{"class":32,"line":80},[30,153463,153464],{"class":321},"    student_id: ",[30,153466,151324],{"class":40},[30,153468,153469,153471],{"class":32,"line":88},[30,153470,151321],{"class":321},[30,153472,151324],{"class":40},[30,153474,153475,153477],{"class":32,"line":96},[30,153476,151329],{"class":321},[30,153478,151332],{"class":40},[30,153480,153481,153483],{"class":32,"line":104},[30,153482,151337],{"class":321},[30,153484,151340],{"class":40},[30,153486,153487],{"class":32,"line":112},[30,153488,2582],{"emptyLinePlaceholder":245},[30,153490,153491,153493,153495],{"class":32,"line":123},[30,153492,30939],{"class":317},[30,153494,151488],{"class":36},[30,153496,30945],{"class":321},[30,153498,153499,153501],{"class":32,"line":131},[30,153500,14934],{"class":317},[30,153502,15754],{"class":321},[30,153504,153505,153507,153509,153511],{"class":32,"line":142},[30,153506,151501],{"class":74},[30,153508,51575],{"class":321},[30,153510,30961],{"class":40},[30,153512,151508],{"class":321},[30,153514,153515,153517,153519,153521],{"class":32,"line":1811},[30,153516,151513],{"class":74},[30,153518,51575],{"class":321},[30,153520,30961],{"class":40},[30,153522,151520],{"class":321},[30,153524,153525,153527,153529,153531],{"class":32,"line":1825},[30,153526,151525],{"class":74},[30,153528,51575],{"class":321},[30,153530,30961],{"class":40},[30,153532,151532],{"class":321},[30,153534,153535,153537,153539,153541],{"class":32,"line":1830},[30,153536,151537],{"class":74},[30,153538,51575],{"class":321},[30,153540,30961],{"class":40},[30,153542,151544],{"class":321},[30,153544,153545],{"class":32,"line":1836},[30,153546,2711],{"class":321},[30,153548,153549],{"class":32,"line":1857},[30,153550,2582],{"emptyLinePlaceholder":245},[30,153552,153553,153555],{"class":32,"line":1862},[30,153554,151152],{"class":36},[30,153556,151155],{"class":40},[30,153558,153559,153561,153563],{"class":32,"line":1876},[30,153560,30939],{"class":317},[30,153562,151565],{"class":36},[30,153564,151568],{"class":321},[30,153566,153567,153569,153571],{"class":32,"line":1881},[30,153568,14934],{"class":317},[30,153570,151172],{"class":40},[30,153572,151577],{"class":321},[30,153574,153575,153577,153579],{"class":32,"line":1910},[30,153576,151582],{"class":321},[30,153578,151585],{"class":74},[30,153580,87974],{"class":321},[30,153582,153583,153585,153587],{"class":32,"line":1915},[30,153584,151582],{"class":321},[30,153586,62817],{"class":74},[30,153588,87974],{"class":321},[30,153590,153591,153593,153595],{"class":32,"line":1932},[30,153592,151582],{"class":321},[30,153594,69262],{"class":74},[30,153596,87974],{"class":321},[30,153598,153599,153601,153603],{"class":32,"line":1937},[30,153600,151582],{"class":321},[30,153602,151610],{"class":74},[30,153604,87974],{"class":321},[30,153606,153607],{"class":32,"line":1942},[30,153608,38264],{"class":321},[157,153610,153611],{},"管理器示意：",[20,153613,153615],{"className":30516,"code":153614,"language":30518,"meta":25,"style":25},"class StudentManager:\n    def __init__(self):\n        self.students = []\n\n    def find_by_id(self, student_id):\n        for student in self.students:\n            if student.student_id == student_id:\n                return student\n        return None\n\n    def add(self, student):\n        if self.find_by_id(student.student_id):\n            return False\n        self.students.append(student)\n        return True\n",[27,153616,153617,153626,153634,153645,153649,153659,153672,153683,153690,153696,153700,153709,153718,153724,153731],{"__ignoreMap":25},[30,153618,153619,153621,153624],{"class":32,"line":33},[30,153620,14876],{"class":317},[30,153622,153623],{"class":36}," StudentManager",[30,153625,3921],{"class":321},[30,153627,153628,153630,153632],{"class":32,"line":44},[30,153629,30939],{"class":317},[30,153631,30942],{"class":40},[30,153633,30945],{"class":321},[30,153635,153636,153638,153641,153643],{"class":32,"line":52},[30,153637,30983],{"class":40},[30,153639,153640],{"class":321},".students ",[30,153642,367],{"class":317},[30,153644,51976],{"class":321},[30,153646,153647],{"class":32,"line":60},[30,153648,2582],{"emptyLinePlaceholder":245},[30,153650,153651,153653,153656],{"class":32,"line":68},[30,153652,30939],{"class":317},[30,153654,153655],{"class":36}," find_by_id",[30,153657,153658],{"class":321},"(self, student_id):\n",[30,153660,153661,153663,153665,153667,153669],{"class":32,"line":80},[30,153662,3585],{"class":317},[30,153664,152275],{"class":321},[30,153666,26181],{"class":317},[30,153668,39011],{"class":40},[30,153670,153671],{"class":321},".students:\n",[30,153673,153674,153676,153679,153681],{"class":32,"line":88},[30,153675,4824],{"class":317},[30,153677,153678],{"class":321}," student.student_id ",[30,153680,3131],{"class":317},[30,153682,152296],{"class":321},[30,153684,153685,153688],{"class":32,"line":96},[30,153686,153687],{"class":317},"                return",[30,153689,152303],{"class":321},[30,153691,153692,153694],{"class":32,"line":104},[30,153693,14934],{"class":317},[30,153695,152310],{"class":40},[30,153697,153698],{"class":32,"line":112},[30,153699,2582],{"emptyLinePlaceholder":245},[30,153701,153702,153704,153706],{"class":32,"line":123},[30,153703,30939],{"class":317},[30,153705,5391],{"class":36},[30,153707,153708],{"class":321},"(self, student):\n",[30,153710,153711,153713,153715],{"class":32,"line":131},[30,153712,2679],{"class":317},[30,153714,39011],{"class":40},[30,153716,153717],{"class":321},".find_by_id(student.student_id):\n",[30,153719,153720,153722],{"class":32,"line":142},[30,153721,15914],{"class":317},[30,153723,125945],{"class":40},[30,153725,153726,153728],{"class":32,"line":1811},[30,153727,30983],{"class":40},[30,153729,153730],{"class":321},".students.append(student)\n",[30,153732,153733,153735],{"class":32,"line":1825},[30,153734,14934],{"class":317},[30,153736,153737],{"class":40}," True\n",[157,153739,153740],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[15,153742,153744],{"id":153743},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[287,153746,153748],{"id":153747},"_1251-数据结构","12.5.1 数据结构",[20,153750,153752],{"className":30516,"code":153751,"language":30518,"meta":25,"style":25},"sales = [\n    {\"date\": \"2024-10-01\", \"category\": \"手机\", \"amount\": 12000},\n    {\"date\": \"2024-10-01\", \"category\": \"电脑\", \"amount\": 18000},\n    {\"date\": \"2024-10-02\", \"category\": \"手机\", \"amount\": 15000},\n    {\"date\": \"2024-10-02\", \"category\": \"电脑\", \"amount\": 16000},\n]\n",[27,153753,153754,153762,153793,153823,153852,153881],{"__ignoreMap":25},[30,153755,153756,153758,153760],{"class":32,"line":33},[30,153757,148603],{"class":321},[30,153759,367],{"class":317},[30,153761,55585],{"class":321},[30,153763,153764,153766,153768,153770,153772,153774,153777,153779,153782,153784,153786,153788,153791],{"class":32,"line":44},[30,153765,148523],{"class":321},[30,153767,148135],{"class":74},[30,153769,51575],{"class":321},[30,153771,148746],{"class":74},[30,153773,12617],{"class":321},[30,153775,153776],{"class":74},"\"category\"",[30,153778,51575],{"class":321},[30,153780,153781],{"class":74},"\"手机\"",[30,153783,12617],{"class":321},[30,153785,84222],{"class":74},[30,153787,51575],{"class":321},[30,153789,153790],{"class":40},"12000",[30,153792,5112],{"class":321},[30,153794,153795,153797,153799,153801,153803,153805,153807,153809,153812,153814,153816,153818,153821],{"class":32,"line":52},[30,153796,148523],{"class":321},[30,153798,148135],{"class":74},[30,153800,51575],{"class":321},[30,153802,148746],{"class":74},[30,153804,12617],{"class":321},[30,153806,153776],{"class":74},[30,153808,51575],{"class":321},[30,153810,153811],{"class":74},"\"电脑\"",[30,153813,12617],{"class":321},[30,153815,84222],{"class":74},[30,153817,51575],{"class":321},[30,153819,153820],{"class":40},"18000",[30,153822,5112],{"class":321},[30,153824,153825,153827,153829,153831,153833,153835,153837,153839,153841,153843,153845,153847,153850],{"class":32,"line":60},[30,153826,148523],{"class":321},[30,153828,148135],{"class":74},[30,153830,51575],{"class":321},[30,153832,148767],{"class":74},[30,153834,12617],{"class":321},[30,153836,153776],{"class":74},[30,153838,51575],{"class":321},[30,153840,153781],{"class":74},[30,153842,12617],{"class":321},[30,153844,84222],{"class":74},[30,153846,51575],{"class":321},[30,153848,153849],{"class":40},"15000",[30,153851,5112],{"class":321},[30,153853,153854,153856,153858,153860,153862,153864,153866,153868,153870,153872,153874,153876,153879],{"class":32,"line":68},[30,153855,148523],{"class":321},[30,153857,148135],{"class":74},[30,153859,51575],{"class":321},[30,153861,148767],{"class":74},[30,153863,12617],{"class":321},[30,153865,153776],{"class":74},[30,153867,51575],{"class":321},[30,153869,153811],{"class":74},[30,153871,12617],{"class":321},[30,153873,84222],{"class":74},[30,153875,51575],{"class":321},[30,153877,153878],{"class":40},"16000",[30,153880,5112],{"class":321},[30,153882,153883],{"class":32,"line":80},[30,153884,33384],{"class":321},[287,153886,153888],{"id":153887},"_1252-按日期统计","12.5.2 按日期统计",[20,153890,153892],{"className":30516,"code":153891,"language":30518,"meta":25,"style":25},"daily_total = {}\n\nfor item in sales:\n    date = item[\"date\"]\n    amount = item[\"amount\"]\n    daily_total[date] = daily_total.get(date, 0) + amount\n\nprint(daily_total)\n",[27,153893,153894,153903,153907,153918,153932,153945,153964,153968],{"__ignoreMap":25},[30,153895,153896,153899,153901],{"class":32,"line":33},[30,153897,153898],{"class":321},"daily_total ",[30,153900,367],{"class":317},[30,153902,88006],{"class":321},[30,153904,153905],{"class":32,"line":44},[30,153906,2582],{"emptyLinePlaceholder":245},[30,153908,153909,153911,153913,153915],{"class":32,"line":52},[30,153910,3207],{"class":317},[30,153912,148347],{"class":321},[30,153914,26181],{"class":317},[30,153916,153917],{"class":321}," sales:\n",[30,153919,153920,153923,153925,153928,153930],{"class":32,"line":60},[30,153921,153922],{"class":321},"    date ",[30,153924,367],{"class":317},[30,153926,153927],{"class":321}," item[",[30,153929,148135],{"class":74},[30,153931,33384],{"class":321},[30,153933,153934,153937,153939,153941,153943],{"class":32,"line":68},[30,153935,153936],{"class":321},"    amount ",[30,153938,367],{"class":317},[30,153940,153927],{"class":321},[30,153942,84222],{"class":74},[30,153944,33384],{"class":321},[30,153946,153947,153950,153952,153955,153957,153959,153961],{"class":32,"line":80},[30,153948,153949],{"class":321},"    daily_total[date] ",[30,153951,367],{"class":317},[30,153953,153954],{"class":321}," daily_total.get(date, ",[30,153956,511],{"class":40},[30,153958,13896],{"class":321},[30,153960,801],{"class":317},[30,153962,153963],{"class":321}," amount\n",[30,153965,153966],{"class":32,"line":88},[30,153967,2582],{"emptyLinePlaceholder":245},[30,153969,153970,153972],{"class":32,"line":96},[30,153971,30553],{"class":40},[30,153973,153974],{"class":321},"(daily_total)\n",[287,153976,153978],{"id":153977},"_1253-按类别统计","12.5.3 按类别统计",[20,153980,153982],{"className":30516,"code":153981,"language":30518,"meta":25,"style":25},"category_total = {}\n\nfor item in sales:\n    category = item[\"category\"]\n    amount = item[\"amount\"]\n    category_total[category] = category_total.get(category, 0) + amount\n\nprint(category_total)\n",[27,153983,153984,153993,153997,154007,154020,154032,154050,154054],{"__ignoreMap":25},[30,153985,153986,153989,153991],{"class":32,"line":33},[30,153987,153988],{"class":321},"category_total ",[30,153990,367],{"class":317},[30,153992,88006],{"class":321},[30,153994,153995],{"class":32,"line":44},[30,153996,2582],{"emptyLinePlaceholder":245},[30,153998,153999,154001,154003,154005],{"class":32,"line":52},[30,154000,3207],{"class":317},[30,154002,148347],{"class":321},[30,154004,26181],{"class":317},[30,154006,153917],{"class":321},[30,154008,154009,154012,154014,154016,154018],{"class":32,"line":60},[30,154010,154011],{"class":321},"    category ",[30,154013,367],{"class":317},[30,154015,153927],{"class":321},[30,154017,153776],{"class":74},[30,154019,33384],{"class":321},[30,154021,154022,154024,154026,154028,154030],{"class":32,"line":68},[30,154023,153936],{"class":321},[30,154025,367],{"class":317},[30,154027,153927],{"class":321},[30,154029,84222],{"class":74},[30,154031,33384],{"class":321},[30,154033,154034,154037,154039,154042,154044,154046,154048],{"class":32,"line":80},[30,154035,154036],{"class":321},"    category_total[category] ",[30,154038,367],{"class":317},[30,154040,154041],{"class":321}," category_total.get(category, ",[30,154043,511],{"class":40},[30,154045,13896],{"class":321},[30,154047,801],{"class":317},[30,154049,153963],{"class":321},[30,154051,154052],{"class":32,"line":88},[30,154053,2582],{"emptyLinePlaceholder":245},[30,154055,154056,154058],{"class":32,"line":96},[30,154057,30553],{"class":40},[30,154059,154060],{"class":321},"(category_total)\n",[287,154062,154064],{"id":154063},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[20,154066,154068],{"className":30516,"code":154067,"language":30518,"meta":25,"style":25},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[27,154069,154070,154095],{"__ignoreMap":25},[30,154071,154072,154075,154077,154079,154082,154085,154088,154091,154093],{"class":32,"line":33},[30,154073,154074],{"class":321},"top_date, top_amount ",[30,154076,367],{"class":317},[30,154078,6133],{"class":40},[30,154080,154081],{"class":321},"(daily_total.items(), ",[30,154083,154084],{"class":5398},"key",[30,154086,154087],{"class":317},"=lambda",[30,154089,154090],{"class":321}," item: item[",[30,154092,537],{"class":40},[30,154094,4839],{"class":321},[30,154096,154097,154099],{"class":32,"line":44},[30,154098,30553],{"class":40},[30,154100,154101],{"class":321},"(top_date, top_amount)\n",[15,154103,154105],{"id":154104},"_126-绘制柱状图","12.6 绘制柱状图",[20,154107,154109],{"className":30516,"code":154108,"language":30518,"meta":25,"style":25},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar\n\ncategory_total = {\n    \"手机\": 27000,\n    \"电脑\": 34000,\n    \"耳机\": 8000,\n}\n\nbar = Bar()\nbar.add_xaxis(list(category_total.keys()))\nbar.add_yaxis(\"销售额\", list(category_total.values()))\nbar.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"品类销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"品类\"),\n    yaxis_opts=opts.AxisOpts(name=\"销售额\"),\n)\nbar.render(\"category_sales.html\")\n",[27,154110,154111,154125,154136,154140,154148,154160,154172,154183,154187,154191,154201,154212,154226,154231,154248,154265,154281,154285],{"__ignoreMap":25},[30,154112,154113,154115,154117,154119,154121,154123],{"class":32,"line":33},[30,154114,30875],{"class":317},[30,154116,147517],{"class":321},[30,154118,30530],{"class":317},[30,154120,147522],{"class":321},[30,154122,31521],{"class":317},[30,154124,147527],{"class":321},[30,154126,154127,154129,154131,154133],{"class":32,"line":44},[30,154128,30875],{"class":317},[30,154130,147376],{"class":321},[30,154132,30530],{"class":317},[30,154134,154135],{"class":321}," Bar\n",[30,154137,154138],{"class":32,"line":52},[30,154139,2582],{"emptyLinePlaceholder":245},[30,154141,154142,154144,154146],{"class":32,"line":60},[30,154143,153988],{"class":321},[30,154145,367],{"class":317},[30,154147,15754],{"class":321},[30,154149,154150,154153,154155,154158],{"class":32,"line":68},[30,154151,154152],{"class":74},"    \"手机\"",[30,154154,51575],{"class":321},[30,154156,154157],{"class":40},"27000",[30,154159,31604],{"class":321},[30,154161,154162,154165,154167,154170],{"class":32,"line":80},[30,154163,154164],{"class":74},"    \"电脑\"",[30,154166,51575],{"class":321},[30,154168,154169],{"class":40},"34000",[30,154171,31604],{"class":321},[30,154173,154174,154177,154179,154181],{"class":32,"line":88},[30,154175,154176],{"class":74},"    \"耳机\"",[30,154178,51575],{"class":321},[30,154180,124537],{"class":40},[30,154182,31604],{"class":321},[30,154184,154185],{"class":32,"line":96},[30,154186,1751],{"class":321},[30,154188,154189],{"class":32,"line":104},[30,154190,2582],{"emptyLinePlaceholder":245},[30,154192,154193,154196,154198],{"class":32,"line":112},[30,154194,154195],{"class":321},"bar ",[30,154197,367],{"class":317},[30,154199,154200],{"class":321}," Bar()\n",[30,154202,154203,154206,154209],{"class":32,"line":123},[30,154204,154205],{"class":321},"bar.add_xaxis(",[30,154207,154208],{"class":40},"list",[30,154210,154211],{"class":321},"(category_total.keys()))\n",[30,154213,154214,154217,154219,154221,154223],{"class":32,"line":131},[30,154215,154216],{"class":321},"bar.add_yaxis(",[30,154218,147433],{"class":74},[30,154220,12617],{"class":321},[30,154222,154208],{"class":40},[30,154224,154225],{"class":321},"(category_total.values()))\n",[30,154227,154228],{"class":32,"line":142},[30,154229,154230],{"class":321},"bar.set_global_opts(\n",[30,154232,154233,154235,154237,154239,154241,154243,154246],{"class":32,"line":1811},[30,154234,147611],{"class":5398},[30,154236,367],{"class":317},[30,154238,147616],{"class":321},[30,154240,51545],{"class":5398},[30,154242,367],{"class":317},[30,154244,154245],{"class":74},"\"品类销售额\"",[30,154247,38185],{"class":321},[30,154249,154250,154252,154254,154256,154258,154260,154263],{"class":32,"line":1825},[30,154251,147630],{"class":5398},[30,154253,367],{"class":317},[30,154255,147635],{"class":321},[30,154257,79948],{"class":5398},[30,154259,367],{"class":317},[30,154261,154262],{"class":74},"\"品类\"",[30,154264,38185],{"class":321},[30,154266,154267,154269,154271,154273,154275,154277,154279],{"class":32,"line":1830},[30,154268,147649],{"class":5398},[30,154270,367],{"class":317},[30,154272,147635],{"class":321},[30,154274,79948],{"class":5398},[30,154276,367],{"class":317},[30,154278,147433],{"class":74},[30,154280,38185],{"class":321},[30,154282,154283],{"class":32,"line":1836},[30,154284,328],{"class":321},[30,154286,154287,154290,154293],{"class":32,"line":1857},[30,154288,154289],{"class":321},"bar.render(",[30,154291,154292],{"class":74},"\"category_sales.html\"",[30,154294,328],{"class":321},[15,154296,154298],{"id":154297},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[157,154300,154301],{},"时间线适合展示不同日期、月份、年份的数据变化。",[20,154303,154305],{"className":30516,"code":154304,"language":30518,"meta":25,"style":25},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar, Timeline\n\ndata = {\n    \"2024-10-01\": {\"手机\": 12000, \"电脑\": 18000},\n    \"2024-10-02\": {\"手机\": 15000, \"电脑\": 16000},\n    \"2024-10-03\": {\"手机\": 17000, \"电脑\": 19000},\n}\n\ntimeline = Timeline()\n\nfor date, category_data in data.items():\n    bar = Bar()\n    bar.add_xaxis(list(category_data.keys()))\n    bar.add_yaxis(\"销售额\", list(category_data.values()))\n    bar.set_global_opts(title_opts=opts.TitleOpts(title=f\"{date}销售额\"))\n    timeline.add(bar, date)\n\ntimeline.render(\"timeline_sales.html\")\n",[27,154306,154307,154321,154332,154336,154344,154368,154391,154416,154420,154424,154434,154438,154449,154458,154468,154482,154513,154518,154522],{"__ignoreMap":25},[30,154308,154309,154311,154313,154315,154317,154319],{"class":32,"line":33},[30,154310,30875],{"class":317},[30,154312,147517],{"class":321},[30,154314,30530],{"class":317},[30,154316,147522],{"class":321},[30,154318,31521],{"class":317},[30,154320,147527],{"class":321},[30,154322,154323,154325,154327,154329],{"class":32,"line":44},[30,154324,30875],{"class":317},[30,154326,147376],{"class":321},[30,154328,30530],{"class":317},[30,154330,154331],{"class":321}," Bar, Timeline\n",[30,154333,154334],{"class":32,"line":52},[30,154335,2582],{"emptyLinePlaceholder":245},[30,154337,154338,154340,154342],{"class":32,"line":60},[30,154339,101796],{"class":321},[30,154341,367],{"class":317},[30,154343,15754],{"class":321},[30,154345,154346,154349,154352,154354,154356,154358,154360,154362,154364,154366],{"class":32,"line":68},[30,154347,154348],{"class":74},"    \"2024-10-01\"",[30,154350,154351],{"class":321},": {",[30,154353,153781],{"class":74},[30,154355,51575],{"class":321},[30,154357,153790],{"class":40},[30,154359,12617],{"class":321},[30,154361,153811],{"class":74},[30,154363,51575],{"class":321},[30,154365,153820],{"class":40},[30,154367,5112],{"class":321},[30,154369,154370,154373,154375,154377,154379,154381,154383,154385,154387,154389],{"class":32,"line":80},[30,154371,154372],{"class":74},"    \"2024-10-02\"",[30,154374,154351],{"class":321},[30,154376,153781],{"class":74},[30,154378,51575],{"class":321},[30,154380,153849],{"class":40},[30,154382,12617],{"class":321},[30,154384,153811],{"class":74},[30,154386,51575],{"class":321},[30,154388,153878],{"class":40},[30,154390,5112],{"class":321},[30,154392,154393,154396,154398,154400,154402,154405,154407,154409,154411,154414],{"class":32,"line":88},[30,154394,154395],{"class":74},"    \"2024-10-03\"",[30,154397,154351],{"class":321},[30,154399,153781],{"class":74},[30,154401,51575],{"class":321},[30,154403,154404],{"class":40},"17000",[30,154406,12617],{"class":321},[30,154408,153811],{"class":74},[30,154410,51575],{"class":321},[30,154412,154413],{"class":40},"19000",[30,154415,5112],{"class":321},[30,154417,154418],{"class":32,"line":96},[30,154419,1751],{"class":321},[30,154421,154422],{"class":32,"line":104},[30,154423,2582],{"emptyLinePlaceholder":245},[30,154425,154426,154429,154431],{"class":32,"line":112},[30,154427,154428],{"class":321},"timeline ",[30,154430,367],{"class":317},[30,154432,154433],{"class":321}," Timeline()\n",[30,154435,154436],{"class":32,"line":123},[30,154437,2582],{"emptyLinePlaceholder":245},[30,154439,154440,154442,154445,154447],{"class":32,"line":131},[30,154441,3207],{"class":317},[30,154443,154444],{"class":321}," date, category_data ",[30,154446,26181],{"class":317},[30,154448,149286],{"class":321},[30,154450,154451,154454,154456],{"class":32,"line":142},[30,154452,154453],{"class":321},"    bar ",[30,154455,367],{"class":317},[30,154457,154200],{"class":321},[30,154459,154460,154463,154465],{"class":32,"line":1811},[30,154461,154462],{"class":321},"    bar.add_xaxis(",[30,154464,154208],{"class":40},[30,154466,154467],{"class":321},"(category_data.keys()))\n",[30,154469,154470,154473,154475,154477,154479],{"class":32,"line":1825},[30,154471,154472],{"class":321},"    bar.add_yaxis(",[30,154474,147433],{"class":74},[30,154476,12617],{"class":321},[30,154478,154208],{"class":40},[30,154480,154481],{"class":321},"(category_data.values()))\n",[30,154483,154484,154487,154490,154492,154494,154496,154498,154500,154502,154504,154506,154508,154511],{"class":32,"line":1830},[30,154485,154486],{"class":321},"    bar.set_global_opts(",[30,154488,154489],{"class":5398},"title_opts",[30,154491,367],{"class":317},[30,154493,147616],{"class":321},[30,154495,51545],{"class":5398},[30,154497,367],{"class":317},[30,154499,373],{"class":317},[30,154501,571],{"class":74},[30,154503,1216],{"class":40},[30,154505,74064],{"class":321},[30,154507,1266],{"class":40},[30,154509,154510],{"class":74},"销售额\"",[30,154512,30635],{"class":321},[30,154514,154515],{"class":32,"line":1836},[30,154516,154517],{"class":321},"    timeline.add(bar, date)\n",[30,154519,154520],{"class":32,"line":1857},[30,154521,2582],{"emptyLinePlaceholder":245},[30,154523,154524,154527,154530],{"class":32,"line":1862},[30,154525,154526],{"class":321},"timeline.render(",[30,154528,154529],{"class":74},"\"timeline_sales.html\"",[30,154531,328],{"class":321},[15,154533,154535],{"id":154534},"_128-绘制地图","12.8 绘制地图",[157,154537,154538],{},"地图适合展示地区数据。",[20,154540,154542],{"className":30516,"code":154541,"language":30518,"meta":25,"style":25},"from pyecharts import options as opts\nfrom pyecharts.charts import Map\n\ndata = [\n    (\"北京\", 120),\n    (\"上海\", 150),\n    (\"广东\", 200),\n    (\"浙江\", 180),\n]\n\nmap_chart = Map()\nmap_chart.add(\"销售额\", data, \"china\")\nmap_chart.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"地区销售额\"),\n    visualmap_opts=opts.VisualMapOpts(max_=200),\n)\nmap_chart.render(\"map_sales.html\")\n",[27,154543,154544,154558,154569,154573,154581,154594,154606,154619,154632,154636,154640,154650,154665,154670,154687,154706,154710],{"__ignoreMap":25},[30,154545,154546,154548,154550,154552,154554,154556],{"class":32,"line":33},[30,154547,30875],{"class":317},[30,154549,147517],{"class":321},[30,154551,30530],{"class":317},[30,154553,147522],{"class":321},[30,154555,31521],{"class":317},[30,154557,147527],{"class":321},[30,154559,154560,154562,154564,154566],{"class":32,"line":44},[30,154561,30875],{"class":317},[30,154563,147376],{"class":321},[30,154565,30530],{"class":317},[30,154567,154568],{"class":321}," Map\n",[30,154570,154571],{"class":32,"line":52},[30,154572,2582],{"emptyLinePlaceholder":245},[30,154574,154575,154577,154579],{"class":32,"line":60},[30,154576,101796],{"class":321},[30,154578,367],{"class":317},[30,154580,55585],{"class":321},[30,154582,154583,154586,154588,154590,154592],{"class":32,"line":68},[30,154584,154585],{"class":321},"    (",[30,154587,69407],{"class":74},[30,154589,12617],{"class":321},[30,154591,1137],{"class":40},[30,154593,38185],{"class":321},[30,154595,154596,154598,154600,154602,154604],{"class":32,"line":80},[30,154597,154585],{"class":321},[30,154599,69427],{"class":74},[30,154601,12617],{"class":321},[30,154603,147450],{"class":40},[30,154605,38185],{"class":321},[30,154607,154608,154610,154613,154615,154617],{"class":32,"line":88},[30,154609,154585],{"class":321},[30,154611,154612],{"class":74},"\"广东\"",[30,154614,12617],{"class":321},[30,154616,1905],{"class":40},[30,154618,38185],{"class":321},[30,154620,154621,154623,154626,154628,154630],{"class":32,"line":96},[30,154622,154585],{"class":321},[30,154624,154625],{"class":74},"\"浙江\"",[30,154627,12617],{"class":321},[30,154629,147455],{"class":40},[30,154631,38185],{"class":321},[30,154633,154634],{"class":32,"line":104},[30,154635,33384],{"class":321},[30,154637,154638],{"class":32,"line":112},[30,154639,2582],{"emptyLinePlaceholder":245},[30,154641,154642,154645,154647],{"class":32,"line":123},[30,154643,154644],{"class":321},"map_chart ",[30,154646,367],{"class":317},[30,154648,154649],{"class":321}," Map()\n",[30,154651,154652,154655,154657,154660,154663],{"class":32,"line":131},[30,154653,154654],{"class":321},"map_chart.add(",[30,154656,147433],{"class":74},[30,154658,154659],{"class":321},", data, ",[30,154661,154662],{"class":74},"\"china\"",[30,154664,328],{"class":321},[30,154666,154667],{"class":32,"line":142},[30,154668,154669],{"class":321},"map_chart.set_global_opts(\n",[30,154671,154672,154674,154676,154678,154680,154682,154685],{"class":32,"line":1811},[30,154673,147611],{"class":5398},[30,154675,367],{"class":317},[30,154677,147616],{"class":321},[30,154679,51545],{"class":5398},[30,154681,367],{"class":317},[30,154683,154684],{"class":74},"\"地区销售额\"",[30,154686,38185],{"class":321},[30,154688,154689,154692,154694,154697,154700,154702,154704],{"class":32,"line":1825},[30,154690,154691],{"class":5398},"    visualmap_opts",[30,154693,367],{"class":317},[30,154695,154696],{"class":321},"opts.VisualMapOpts(",[30,154698,154699],{"class":5398},"max_",[30,154701,367],{"class":317},[30,154703,1905],{"class":40},[30,154705,38185],{"class":321},[30,154707,154708],{"class":32,"line":1830},[30,154709,328],{"class":321},[30,154711,154712,154715,154718],{"class":32,"line":1836},[30,154713,154714],{"class":321},"map_chart.render(",[30,154716,154717],{"class":74},"\"map_sales.html\"",[30,154719,328],{"class":321},[157,154721,154722],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[15,154724,154726],{"id":154725},"_129-项目拆分建议","12.9 项目拆分建议",[157,154728,154729],{},"当代码超过一个文件时，可以这样组织：",[20,154731,154734],{"className":154732,"code":154733,"language":5369,"meta":25},[5367],"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",[27,154735,154733],{"__ignoreMap":25},[157,154737,154738],{},"职责：",[271,154740,154741,154747,154753,154759],{},[150,154742,154743,154746],{},[27,154744,154745],{},"main.py","：程序入口。",[150,154748,154749,154752],{},[27,154750,154751],{},"file_utils.py","：读写 JSON。",[150,154754,154755,154758],{},[27,154756,154757],{},"sales_service.py","：统计销售数据。",[150,154760,154761,154764],{},[27,154762,154763],{},"chart_builder.py","：生成图表。",[15,154766,154768],{"id":154767},"_1210-python基础复习清单","12.10 Python基础复习清单",[157,154770,154771],{},"语法基础：",[271,154773,154774,154777,154780,154783],{},[150,154775,154776],{},"会写变量、注释、输入输出。",[150,154778,154779],{},"会使用 int、float、str、bool。",[150,154781,154782],{},"会做类型转换。",[150,154784,154785],{},"会使用 f-string 格式化输出。",[157,154787,154788],{},"流程控制：",[271,154790,154791,154797,154803,154811],{},[150,154792,154793,154794,28523],{},"会写 ",[27,154795,154796],{},"if elif else",[150,154798,154793,154799,101156,154801,28523],{},[27,154800,108801],{},[27,154802,3207],{},[150,154804,154805,154806,101156,154808,28523],{},"理解 ",[27,154807,2235],{},[27,154809,154810],{},"continue",[150,154812,154813],{},"能写嵌套循环。",[157,154815,154816],{},"函数：",[271,154818,154819,154822,154825,154828],{},[150,154820,154821],{},"会定义和调用函数。",[150,154823,154824],{},"理解参数和返回值。",[150,154826,154827],{},"知道局部变量和全局变量。",[150,154829,154830],{},"会使用默认参数、关键字参数、不定长参数。",[157,154832,154833],{},"容器：",[271,154835,154836,154839,154842,154845,154848],{},[150,154837,154838],{},"会使用列表增删改查。",[150,154840,154841],{},"会遍历列表、字典。",[150,154843,154844],{},"会使用切片。",[150,154846,154847],{},"会用集合去重。",[150,154849,154850],{},"会处理列表嵌套字典。",[157,154852,154853],{},"文件和模块：",[271,154855,154856,154859,154862,154865,154868],{},[150,154857,154858],{},"会读写文本文件。",[150,154860,154861],{},"会读写 JSON。",[150,154863,154864],{},"会捕获常见异常。",[150,154866,154867],{},"会导入模块和第三方包。",[150,154869,154870],{},"会创建简单包结构。",[157,154872,154873],{},"项目能力：",[271,154875,154876,154879,154882,154885,154888],{},[150,154877,154878],{},"能把代码拆成函数。",[150,154880,154881],{},"能把数据保存到文件。",[150,154883,154884],{},"能处理用户输入错误。",[150,154886,154887],{},"能写一个完整菜单程序。",[150,154889,154890],{},"能用 pyecharts 生成图表。",[15,154892,154894],{"id":154893},"_1211-推荐练习顺序","12.11 推荐练习顺序",[271,154896,154897,154900,154903,154906,154909,154912,154915,154918],{},[150,154898,154899],{},"猜数字游戏。",[150,154901,154902],{},"ATM 菜单程序。",[150,154904,154905],{},"学生成绩统计。",[150,154907,154908],{},"学生管理系统函数版。",[150,154910,154911],{},"学生管理系统文件持久化版。",[150,154913,154914],{},"学生管理系统面向对象版。",[150,154916,154917],{},"销售数据统计。",[150,154919,154920],{},"销售数据可视化。",[15,154922,154924],{"id":154923},"_1212-常见学习误区","12.12 常见学习误区",[271,154926,154927,154930,154933,154936,154939,154942,154945],{},[150,154928,154929],{},"只看视频不敲代码。",[150,154931,154932],{},"一报错就复制错误去搜，不先读报错位置。",[150,154934,154935],{},"变量名随便写，后续自己看不懂。",[150,154937,154938],{},"所有代码都写在一个文件一个函数里。",[150,154940,154941],{},"不保存练习代码，复习时没有材料。",[150,154943,154944],{},"还没掌握列表字典就急着学框架。",[150,154946,154947],{},"不会读官方文档，只依赖教程。",[15,154949,154951],{"id":154950},"_1213-如何读报错","12.13 如何读报错",[157,154953,154954],{},"报错通常从下往上看最后几行。",[157,154956,15317],{},[20,154958,154961],{"className":154959,"code":154960,"language":5369,"meta":25},[5367],"ValueError: invalid literal for int() with base 10: 'abc'\n",[27,154962,154960],{"__ignoreMap":25},[157,154964,24780],{},[271,154966,154967,154973,154983],{},[150,154968,154969,154970,28523],{},"异常类型是 ",[27,154971,154972],{},"ValueError",[150,154974,107483,154975,154978,154979,154982],{},[27,154976,154977],{},"int()"," 无法把 ",[27,154980,154981],{},"'abc'"," 转成整数。",[150,154984,154985],{},"应该检查输入内容或增加异常处理。",[157,154987,154988],{},"再看文件名和行号：",[20,154990,154993],{"className":154991,"code":154992,"language":5369,"meta":25},[5367],"File \"main.py\", line 10, in \u003Cmodule>\n",[27,154994,154992],{"__ignoreMap":25},[157,154996,154997,154998,155000],{},"表示错误发生在 ",[27,154999,154745],{}," 第 10 行。",[15,155002,155004],{"id":155003},"_1214-后续学习方向","12.14 后续学习方向",[157,155006,155007],{},"Python 基础完成后，可以按兴趣选择方向：",[271,155009,155010,155022,155031,155043,155054,155063,155073],{},[150,155011,155012,155013,532,155016,532,155019,28523],{},"自动化办公：",[27,155014,155015],{},"openpyxl",[27,155017,155018],{},"python-docx",[27,155020,155021],{},"pdfplumber",[150,155023,155024,155025,532,155027,532,155029,28523],{},"数据分析：",[27,155026,100764],{},[27,155028,146323],{},[27,155030,146331],{},[150,155032,155033,155034,532,155037,532,155040,28523],{},"Web 后端：",[27,155035,155036],{},"Flask",[27,155038,155039],{},"FastAPI",[27,155041,155042],{},"Django",[150,155044,155045,155046,532,155048,532,155051,28523],{},"爬虫：",[27,155047,146308],{},[27,155049,155050],{},"BeautifulSoup",[27,155052,155053],{},"Scrapy",[150,155055,155056,155057,532,155059,155062],{},"测试开发：",[27,155058,146355],{},[27,155060,155061],{},"selenium","、接口测试。",[150,155064,155065,155066,532,155068,532,155070,28523],{},"人工智能：",[27,155067,100764],{},[27,155069,146323],{},[27,155071,155072],{},"pytorch",[150,155074,155075,155076,532,155078,532,155081,28523],{},"运维脚本：",[27,155077,145924],{},[27,155079,155080],{},"subprocess",[27,155082,155083],{},"paramiko",[157,155085,155086],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[15,155088,155090],{"id":155089},"_1215-结课练习","12.15 结课练习",[271,155092,155093,155096,155099,155102,155105,155108,155111,155114],{},[150,155094,155095],{},"完成函数版学生管理系统。",[150,155097,155098],{},"给学生管理系统增加 JSON 持久化。",[150,155100,155101],{},"给学生管理系统增加异常处理。",[150,155103,155104],{},"把学生管理系统改成面向对象版。",[150,155106,155107],{},"使用 pyecharts 绘制学生成绩柱状图。",[150,155109,155110],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[150,155112,155113],{},"按品类统计销售额并绘制柱状图。",[150,155115,155116],{},"写一份自己的 Python 学习路线图。",[234,155118,155119],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":44,"depth":44,"links":155121},[155122,155123,155126,155127,155128,155134,155135,155136,155137,155138,155139,155140,155141,155142,155143],{"id":151838,"depth":44,"text":151839},{"id":151888,"depth":44,"text":151889,"children":155124},[155125],{"id":151892,"depth":52,"text":151893},{"id":151931,"depth":44,"text":151932},{"id":153405,"depth":44,"text":153406},{"id":153743,"depth":44,"text":153744,"children":155129},[155130,155131,155132,155133],{"id":153747,"depth":52,"text":153748},{"id":153887,"depth":52,"text":153888},{"id":153977,"depth":52,"text":153978},{"id":154063,"depth":52,"text":154064},{"id":154104,"depth":44,"text":154105},{"id":154297,"depth":44,"text":154298},{"id":154534,"depth":44,"text":154535},{"id":154725,"depth":44,"text":154726},{"id":154767,"depth":44,"text":154768},{"id":154893,"depth":44,"text":154894},{"id":154923,"depth":44,"text":154924},{"id":154950,"depth":44,"text":154951},{"id":155003,"depth":44,"text":155004},{"id":155089,"depth":44,"text":155090},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151830,"description":242},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155150,"title":155151,"body":155152,"description":242,"extension":243,"meta":157621,"navigation":245,"path":157622,"seo":157623,"stem":157624,"__hash__":157625},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155153,"toc":157596},[155154,155157,155161,155164,155167,155187,155190,155213,155216,155219,155241,155244,155266,155270,155273,155313,155316,155437,155441,155444,155484,155487,155511,155514,155518,155521,155535,155568,155571,155606,155609,155632,155635,155668,155671,155673,155679,155754,155757,155763,155780,155820,155824,155827,155873,155875,155913,155916,155951,155954,155989,155992,156024,156027,156046,156050,156054,156167,156169,156244,156248,156294,156297,156323,156332,156336,156339,156402,156410,156438,156442,156482,156547,156551,156554,156593,156596,156641,156644,156705,156709,156736,156739,156767,156770,156774,156778,156843,156846,156884,156887,156919,156923,157022,157026,157029,157102,157105,157153,157157,157163,157203,157206,157253,157256,157305,157309,157311,157325,157327,157508,157512,157539,157559,157566,157570,157587,157593],[10,155155,155151],{"id":155156},"_2-基础语法变量与字符串",[15,155158,155160],{"id":155159},"_21-注释","2.1 注释",[157,155162,155163],{},"注释是给人看的说明文字，不会被 Python 执行。",[157,155165,155166],{},"单行注释：",[20,155168,155170],{"className":30516,"code":155169,"language":30518,"meta":25,"style":25},"# 这是单行注释\nprint(\"hello\")\n",[27,155171,155172,155177],{"__ignoreMap":25},[30,155173,155174],{"class":32,"line":33},[30,155175,155176],{"class":379},"# 这是单行注释\n",[30,155178,155179,155181,155183,155185],{"class":32,"line":44},[30,155180,30553],{"class":40},[30,155182,322],{"class":321},[30,155184,6026],{"class":74},[30,155186,328],{"class":321},[157,155188,155189],{},"多行说明常用三引号：",[20,155191,155193],{"className":30516,"code":155192,"language":30518,"meta":25,"style":25},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[27,155194,155195,155199,155204,155209],{"__ignoreMap":25},[30,155196,155197],{"class":32,"line":33},[30,155198,95836],{"class":74},[30,155200,155201],{"class":32,"line":44},[30,155202,155203],{"class":74},"这是多行说明。\n",[30,155205,155206],{"class":32,"line":52},[30,155207,155208],{"class":74},"常用于文件顶部说明、函数说明等。\n",[30,155210,155211],{"class":32,"line":60},[30,155212,95836],{"class":74},[157,155214,155215],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[157,155217,155218],{},"不好：",[20,155220,155222],{"className":30516,"code":155221,"language":30518,"meta":25,"style":25},"# age 加 1\nage = age + 1\n",[27,155223,155224,155229],{"__ignoreMap":25},[30,155225,155226],{"class":32,"line":33},[30,155227,155228],{"class":379},"# age 加 1\n",[30,155230,155231,155233,155235,155237,155239],{"class":32,"line":44},[30,155232,146684],{"class":321},[30,155234,367],{"class":317},[30,155236,15889],{"class":321},[30,155238,801],{"class":317},[30,155240,55837],{"class":40},[157,155242,155243],{},"较好：",[20,155245,155247],{"className":30516,"code":155246,"language":30518,"meta":25,"style":25},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[27,155248,155249,155254],{"__ignoreMap":25},[30,155250,155251],{"class":32,"line":33},[30,155252,155253],{"class":379},"# 用户过完生日后，年龄增加一岁\n",[30,155255,155256,155258,155260,155262,155264],{"class":32,"line":44},[30,155257,146684],{"class":321},[30,155259,367],{"class":317},[30,155261,15889],{"class":321},[30,155263,801],{"class":317},[30,155265,55837],{"class":40},[15,155267,155269],{"id":155268},"_22-字面量","2.2 字面量",[157,155271,155272],{},"字面量就是代码中直接写出来的数据。",[20,155274,155276],{"className":30516,"code":155275,"language":30518,"meta":25,"style":25},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[27,155277,155278,155285,155292,155299,155306],{"__ignoreMap":25},[30,155279,155280,155282],{"class":32,"line":33},[30,155281,631],{"class":40},[30,155283,155284],{"class":379},"          # 整数\n",[30,155286,155287,155289],{"class":32,"line":44},[30,155288,370],{"class":40},[30,155290,155291],{"class":379},"         # 小数\n",[30,155293,155294,155296],{"class":32,"line":52},[30,155295,6026],{"class":74},[30,155297,155298],{"class":379},"      # 字符串\n",[30,155300,155301,155303],{"class":32,"line":60},[30,155302,31614],{"class":40},[30,155304,155305],{"class":379},"         # 布尔值\n",[30,155307,155308,155310],{"class":32,"line":68},[30,155309,95824],{"class":40},[30,155311,155312],{"class":379},"         # 空值\n",[157,155314,155315],{},"常见字面量类型：",[457,155317,155318,155328],{},[460,155319,155320],{},[463,155321,155322,155324,155326],{},[466,155323,23919],{},[466,155325,27630],{},[466,155327,26007],{},[504,155329,155330,155341,155352,155363,155375,155387,155399,155412,155424],{},[463,155331,155332,155334,155338],{},[509,155333,325],{},[509,155335,155336],{},[27,155337,631],{},[509,155339,155340],{},"整数",[463,155342,155343,155345,155349],{},[509,155344,361],{},[509,155346,155347],{},[27,155348,370],{},[509,155350,155351],{},"浮点数",[463,155353,155354,155356,155360],{},[509,155355,1489],{},[509,155357,155358],{},[27,155359,6026],{},[509,155361,155362],{},"字符串",[463,155364,155365,155367,155373],{},[509,155366,1541],{},[509,155368,155369,532,155371],{},[27,155370,31614],{},[27,155372,34125],{},[509,155374,66153],{},[463,155376,155377,155380,155384],{},[509,155378,155379],{},"NoneType",[509,155381,155382],{},[27,155383,95824],{},[509,155385,155386],{},"空值",[463,155388,155389,155391,155396],{},[509,155390,154208],{},[509,155392,155393],{},[27,155394,155395],{},"[1, 2, 3]",[509,155397,155398],{},"列表",[463,155400,155401,155404,155409],{},[509,155402,155403],{},"tuple",[509,155405,155406],{},[27,155407,155408],{},"(1, 2, 3)",[509,155410,155411],{},"元组",[463,155413,155414,155416,155421],{},[509,155415,114684],{},[509,155417,155418],{},[27,155419,155420],{},"{\"name\": \"张三\"}",[509,155422,155423],{},"字典",[463,155425,155426,155429,155434],{},[509,155427,155428],{},"set",[509,155430,155431],{},[27,155432,155433],{},"{1, 2, 3}",[509,155435,155436],{},"集合",[15,155438,155440],{"id":155439},"_23-变量","2.3 变量",[157,155442,155443],{},"变量是保存数据的名字。",[20,155445,155447],{"className":30516,"code":155446,"language":30518,"meta":25,"style":25},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[27,155448,155449,155457,155465,155475],{"__ignoreMap":25},[30,155450,155451,155453,155455],{"class":32,"line":33},[30,155452,146674],{"class":321},[30,155454,367],{"class":317},[30,155456,149491],{"class":74},[30,155458,155459,155461,155463],{"class":32,"line":44},[30,155460,146684],{"class":321},[30,155462,367],{"class":317},[30,155464,146689],{"class":40},[30,155466,155467,155470,155472],{"class":32,"line":52},[30,155468,155469],{"class":321},"height ",[30,155471,367],{"class":317},[30,155473,155474],{"class":40}," 1.75\n",[30,155476,155477,155480,155482],{"class":32,"line":60},[30,155478,155479],{"class":321},"is_student ",[30,155481,367],{"class":317},[30,155483,153737],{"class":40},[157,155485,155486],{},"Python 的变量不需要提前声明类型：",[20,155488,155490],{"className":30516,"code":155489,"language":30518,"meta":25,"style":25},"score = 100\nscore = \"满分\"\n",[27,155491,155492,155502],{"__ignoreMap":25},[30,155493,155494,155497,155499],{"class":32,"line":33},[30,155495,155496],{"class":321},"score ",[30,155498,367],{"class":317},[30,155500,155501],{"class":40}," 100\n",[30,155503,155504,155506,155508],{"class":32,"line":44},[30,155505,155496],{"class":321},[30,155507,367],{"class":317},[30,155509,155510],{"class":74}," \"满分\"\n",[157,155512,155513],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[15,155515,155517],{"id":155516},"_24-变量命名规则","2.4 变量命名规则",[157,155519,155520],{},"硬性规则：",[271,155522,155523,155526,155529,155532],{},[150,155524,155525],{},"只能由字母、数字、下划线组成。",[150,155527,155528],{},"不能以数字开头。",[150,155530,155531],{},"不能使用 Python 关键字。",[150,155533,155534],{},"区分大小写。",[20,155536,155538],{"className":30516,"code":155537,"language":30518,"meta":25,"style":25},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[27,155539,155540,155549,155558],{"__ignoreMap":25},[30,155541,155542,155545,155547],{"class":32,"line":33},[30,155543,155544],{"class":321},"user_name ",[30,155546,367],{"class":317},[30,155548,146679],{"class":74},[30,155550,155551,155554,155556],{"class":32,"line":44},[30,155552,155553],{"class":321},"age2 ",[30,155555,367],{"class":317},[30,155557,146689],{"class":40},[30,155559,155560,155563,155565],{"class":32,"line":52},[30,155561,155562],{"class":321},"_token ",[30,155564,367],{"class":317},[30,155566,155567],{"class":74}," \"abc\"\n",[157,155569,155570],{},"错误写法：",[20,155572,155574],{"className":30516,"code":155573,"language":30518,"meta":25,"style":25},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[27,155575,155576,155585,155597],{"__ignoreMap":25},[30,155577,155578,155581,155583],{"class":32,"line":33},[30,155579,155580],{"class":77541},"2age",[30,155582,13746],{"class":317},[30,155584,146689],{"class":40},[30,155586,155587,155589,155591,155593,155595],{"class":32,"line":44},[30,155588,131722],{"class":321},[30,155590,852],{"class":317},[30,155592,146674],{"class":321},[30,155594,367],{"class":317},[30,155596,146679],{"class":74},[30,155598,155599,155601,155603],{"class":32,"line":52},[30,155600,14876],{"class":317},[30,155602,13746],{"class":317},[30,155604,155605],{"class":74}," \"一班\"\n",[157,155607,155608],{},"查看关键字：",[20,155610,155612],{"className":30516,"code":155611,"language":30518,"meta":25,"style":25},"import keyword\n\nprint(keyword.kwlist)\n",[27,155613,155614,155621,155625],{"__ignoreMap":25},[30,155615,155616,155618],{"class":32,"line":33},[30,155617,30530],{"class":317},[30,155619,155620],{"class":321}," keyword\n",[30,155622,155623],{"class":32,"line":44},[30,155624,2582],{"emptyLinePlaceholder":245},[30,155626,155627,155629],{"class":32,"line":52},[30,155628,30553],{"class":40},[30,155630,155631],{"class":321},"(keyword.kwlist)\n",[157,155633,155634],{},"推荐命名风格：",[20,155636,155638],{"className":30516,"code":155637,"language":30518,"meta":25,"style":25},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[27,155639,155640,155649,155659],{"__ignoreMap":25},[30,155641,155642,155645,155647],{"class":32,"line":33},[30,155643,155644],{"class":321},"student_name ",[30,155646,367],{"class":317},[30,155648,149491],{"class":74},[30,155650,155651,155654,155656],{"class":32,"line":44},[30,155652,155653],{"class":321},"total_price ",[30,155655,367],{"class":317},[30,155657,155658],{"class":40}," 99.8\n",[30,155660,155661,155664,155666],{"class":32,"line":52},[30,155662,155663],{"class":321},"is_finished ",[30,155665,367],{"class":317},[30,155667,125945],{"class":40},[157,155669,155670],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[15,155672,50870],{"id":50869},[157,155674,104504,155675,155678],{},[27,155676,155677],{},"type()"," 查看数据类型：",[20,155680,155682],{"className":30516,"code":155681,"language":30518,"meta":25,"style":25},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[27,155683,155684,155698,155712,155726,155740],{"__ignoreMap":25},[30,155685,155686,155688,155690,155692,155694,155696],{"class":32,"line":33},[30,155687,30553],{"class":40},[30,155689,322],{"class":321},[30,155691,103245],{"class":40},[30,155693,322],{"class":321},[30,155695,631],{"class":40},[30,155697,30635],{"class":321},[30,155699,155700,155702,155704,155706,155708,155710],{"class":32,"line":44},[30,155701,30553],{"class":40},[30,155703,322],{"class":321},[30,155705,103245],{"class":40},[30,155707,322],{"class":321},[30,155709,370],{"class":40},[30,155711,30635],{"class":321},[30,155713,155714,155716,155718,155720,155722,155724],{"class":32,"line":52},[30,155715,30553],{"class":40},[30,155717,322],{"class":321},[30,155719,103245],{"class":40},[30,155721,322],{"class":321},[30,155723,6026],{"class":74},[30,155725,30635],{"class":321},[30,155727,155728,155730,155732,155734,155736,155738],{"class":32,"line":60},[30,155729,30553],{"class":40},[30,155731,322],{"class":321},[30,155733,103245],{"class":40},[30,155735,322],{"class":321},[30,155737,31614],{"class":40},[30,155739,30635],{"class":321},[30,155741,155742,155744,155746,155748,155750,155752],{"class":32,"line":68},[30,155743,30553],{"class":40},[30,155745,322],{"class":321},[30,155747,103245],{"class":40},[30,155749,322],{"class":321},[30,155751,95824],{"class":40},[30,155753,30635],{"class":321},[157,155755,155756],{},"输出类似：",[20,155758,155761],{"className":155759,"code":155760,"language":5369,"meta":25},[5367],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[27,155762,155760],{"__ignoreMap":25},[157,155764,9207,155765,107421,155767,155769,155770,155772,155773,21682,155775,155772,155777,155779],{},[27,155766,1541],{},[27,155768,325],{}," 的子类，",[27,155771,31614],{}," 可以当作 ",[27,155774,537],{},[27,155776,34125],{},[27,155778,511],{},"，但业务代码中不要滥用。",[20,155781,155783],{"className":30516,"code":155782,"language":30518,"meta":25,"style":25},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[27,155784,155785,155803],{"__ignoreMap":25},[30,155786,155787,155789,155791,155793,155795,155797,155800],{"class":32,"line":33},[30,155788,30553],{"class":40},[30,155790,322],{"class":321},[30,155792,31614],{"class":40},[30,155794,45704],{"class":317},[30,155796,25291],{"class":40},[30,155798,155799],{"class":321},")   ",[30,155801,155802],{"class":379},"# 2\n",[30,155804,155805,155807,155809,155811,155813,155815,155817],{"class":32,"line":44},[30,155806,30553],{"class":40},[30,155808,322],{"class":321},[30,155810,34125],{"class":40},[30,155812,45704],{"class":317},[30,155814,25291],{"class":40},[30,155816,45946],{"class":321},[30,155818,155819],{"class":379},"# 1\n",[15,155821,155823],{"id":155822},"_26-类型转换","2.6 类型转换",[157,155825,155826],{},"常用转换函数：",[20,155828,155830],{"className":30516,"code":155829,"language":30518,"meta":25,"style":25},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[27,155831,155832,155842,155853,155863],{"__ignoreMap":25},[30,155833,155834,155836,155838,155840],{"class":32,"line":33},[30,155835,325],{"class":40},[30,155837,322],{"class":321},[30,155839,54454],{"class":74},[30,155841,328],{"class":321},[30,155843,155844,155846,155848,155851],{"class":32,"line":44},[30,155845,361],{"class":40},[30,155847,322],{"class":321},[30,155849,155850],{"class":74},"\"3.14\"",[30,155852,328],{"class":321},[30,155854,155855,155857,155859,155861],{"class":32,"line":52},[30,155856,1489],{"class":40},[30,155858,322],{"class":321},[30,155860,631],{"class":40},[30,155862,328],{"class":321},[30,155864,155865,155867,155869,155871],{"class":32,"line":60},[30,155866,1541],{"class":40},[30,155868,322],{"class":321},[30,155870,537],{"class":40},[30,155872,328],{"class":321},[157,155874,15317],{},[20,155876,155878],{"className":30516,"code":155877,"language":30518,"meta":25,"style":25},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[27,155879,155880,155889,155900],{"__ignoreMap":25},[30,155881,155882,155884,155886],{"class":32,"line":33},[30,155883,146684],{"class":321},[30,155885,367],{"class":317},[30,155887,155888],{"class":74}," \"18\"\n",[30,155890,155891,155893,155895,155897],{"class":32,"line":44},[30,155892,146684],{"class":321},[30,155894,367],{"class":317},[30,155896,2564],{"class":40},[30,155898,155899],{"class":321},"(age)\n",[30,155901,155902,155904,155907,155909,155911],{"class":32,"line":52},[30,155903,30553],{"class":40},[30,155905,155906],{"class":321},"(age ",[30,155908,801],{"class":317},[30,155910,25291],{"class":40},[30,155912,328],{"class":321},[157,155914,155915],{},"输入得到的内容永远是字符串：",[20,155917,155919],{"className":30516,"code":155918,"language":30518,"meta":25,"style":25},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[27,155920,155921,155937],{"__ignoreMap":25},[30,155922,155923,155926,155928,155930,155932,155935],{"class":32,"line":33},[30,155924,155925],{"class":321},"num ",[30,155927,367],{"class":317},[30,155929,60743],{"class":40},[30,155931,322],{"class":321},[30,155933,155934],{"class":74},"\"请输入数字:\"",[30,155936,328],{"class":321},[30,155938,155939,155941,155943,155945,155948],{"class":32,"line":44},[30,155940,30553],{"class":40},[30,155942,322],{"class":321},[30,155944,103245],{"class":40},[30,155946,155947],{"class":321},"(num))  ",[30,155949,155950],{"class":379},"# str\n",[157,155952,155953],{},"如果要做数学运算，必须转换：",[20,155955,155957],{"className":30516,"code":155956,"language":30518,"meta":25,"style":25},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[27,155958,155959,155977],{"__ignoreMap":25},[30,155960,155961,155963,155965,155967,155969,155971,155973,155975],{"class":32,"line":33},[30,155962,155925],{"class":321},[30,155964,367],{"class":317},[30,155966,2564],{"class":40},[30,155968,322],{"class":321},[30,155970,53959],{"class":40},[30,155972,322],{"class":321},[30,155974,155934],{"class":74},[30,155976,30635],{"class":321},[30,155978,155979,155981,155983,155985,155987],{"class":32,"line":44},[30,155980,30553],{"class":40},[30,155982,45757],{"class":321},[30,155984,801],{"class":317},[30,155986,2220],{"class":40},[30,155988,328],{"class":321},[157,155990,155991],{},"常见错误：",[20,155993,155995],{"className":30516,"code":155994,"language":30518,"meta":25,"style":25},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[27,155996,155997,156010],{"__ignoreMap":25},[30,155998,155999,156001,156003,156005,156007],{"class":32,"line":33},[30,156000,325],{"class":40},[30,156002,322],{"class":321},[30,156004,155850],{"class":74},[30,156006,155799],{"class":321},[30,156008,156009],{"class":379},"# 错误\n",[30,156011,156012,156014,156016,156019,156022],{"class":32,"line":44},[30,156013,325],{"class":40},[30,156015,322],{"class":321},[30,156017,156018],{"class":74},"\"abc\"",[30,156020,156021],{"class":321},")    ",[30,156023,156009],{"class":379},[157,156025,156026],{},"正确写法：",[20,156028,156030],{"className":30516,"code":156029,"language":30518,"meta":25,"style":25},"num = float(\"3.14\")\n",[27,156031,156032],{"__ignoreMap":25},[30,156033,156034,156036,156038,156040,156042,156044],{"class":32,"line":33},[30,156035,155925],{"class":321},[30,156037,367],{"class":317},[30,156039,109935],{"class":40},[30,156041,322],{"class":321},[30,156043,155850],{"class":74},[30,156045,328],{"class":321},[15,156047,156049],{"id":156048},"_27-运算符","2.7 运算符",[287,156051,156053],{"id":156052},"_271-算术运算符","2.7.1 算术运算符",[457,156055,156056,156067],{},[460,156057,156058],{},[463,156059,156060,156063,156065],{},[466,156061,156062],{},"运算符",[466,156064,26007],{},[466,156066,27630],{},[504,156068,156069,156083,156097,156111,156125,156139,156153],{},[463,156070,156071,156075,156078],{},[509,156072,156073],{},[27,156074,801],{},[509,156076,156077],{},"加法",[509,156079,156080],{},[27,156081,156082],{},"1 + 2",[463,156084,156085,156089,156092],{},[509,156086,156087],{},[27,156088,852],{},[509,156090,156091],{},"减法",[509,156093,156094],{},[27,156095,156096],{},"5 - 3",[463,156098,156099,156103,156106],{},[509,156100,156101],{},[27,156102,775],{},[509,156104,156105],{},"乘法",[509,156107,156108],{},[27,156109,156110],{},"2 * 3",[463,156112,156113,156117,156120],{},[509,156114,156115],{},[27,156116,904],{},[509,156118,156119],{},"除法，结果是浮点数",[509,156121,156122],{},[27,156123,156124],{},"5 \u002F 2",[463,156126,156127,156131,156134],{},[509,156128,156129],{},[27,156130,33467],{},[509,156132,156133],{},"整除",[509,156135,156136],{},[27,156137,156138],{},"5 \u002F\u002F 2",[463,156140,156141,156145,156148],{},[509,156142,156143],{},[27,156144,648],{},[509,156146,156147],{},"取余",[509,156149,156150],{},[27,156151,156152],{},"5 % 2",[463,156154,156155,156159,156162],{},[509,156156,156157],{},[27,156158,10843],{},[509,156160,156161],{},"幂运算",[509,156163,156164],{},[27,156165,156166],{},"2 ** 3",[157,156168,15317],{},[20,156170,156172],{"className":30516,"code":156171,"language":30518,"meta":25,"style":25},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[27,156173,156174,156192,156209,156226],{"__ignoreMap":25},[30,156175,156176,156178,156180,156182,156185,156187,156189],{"class":32,"line":33},[30,156177,30553],{"class":40},[30,156179,322],{"class":321},[30,156181,639],{"class":40},[30,156183,156184],{"class":317}," \u002F",[30,156186,14937],{"class":40},[30,156188,155799],{"class":321},[30,156190,156191],{"class":379},"# 2.5\n",[30,156193,156194,156196,156198,156200,156203,156205,156207],{"class":32,"line":44},[30,156195,30553],{"class":40},[30,156197,322],{"class":321},[30,156199,639],{"class":40},[30,156201,156202],{"class":317}," \u002F\u002F",[30,156204,14937],{"class":40},[30,156206,45946],{"class":321},[30,156208,155802],{"class":379},[30,156210,156211,156213,156215,156217,156220,156222,156224],{"class":32,"line":52},[30,156212,30553],{"class":40},[30,156214,322],{"class":321},[30,156216,639],{"class":40},[30,156218,156219],{"class":317}," %",[30,156221,14937],{"class":40},[30,156223,155799],{"class":321},[30,156225,155819],{"class":379},[30,156227,156228,156230,156232,156234,156237,156239,156241],{"class":32,"line":60},[30,156229,30553],{"class":40},[30,156231,322],{"class":321},[30,156233,398],{"class":40},[30,156235,156236],{"class":317}," **",[30,156238,78208],{"class":40},[30,156240,45946],{"class":321},[30,156242,156243],{"class":379},"# 8\n",[287,156245,156247],{"id":156246},"_272-赋值运算符","2.7.2 赋值运算符",[20,156249,156251],{"className":30516,"code":156250,"language":30518,"meta":25,"style":25},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[27,156252,156253,156261,156269,156277,156285],{"__ignoreMap":25},[30,156254,156255,156257,156259],{"class":32,"line":33},[30,156256,155925],{"class":321},[30,156258,367],{"class":317},[30,156260,58566],{"class":40},[30,156262,156263,156265,156267],{"class":32,"line":44},[30,156264,155925],{"class":321},[30,156266,9659],{"class":317},[30,156268,54565],{"class":40},[30,156270,156271,156273,156275],{"class":32,"line":52},[30,156272,155925],{"class":321},[30,156274,150390],{"class":317},[30,156276,47861],{"class":40},[30,156278,156279,156281,156283],{"class":32,"line":60},[30,156280,155925],{"class":321},[30,156282,137286],{"class":317},[30,156284,120174],{"class":40},[30,156286,156287,156289,156292],{"class":32,"line":68},[30,156288,155925],{"class":321},[30,156290,156291],{"class":317},"\u002F=",[30,156293,47861],{"class":40},[157,156295,156296],{},"等价关系：",[20,156298,156300],{"className":30516,"code":156299,"language":30518,"meta":25,"style":25},"num += 1\nnum = num + 1\n",[27,156301,156302,156310],{"__ignoreMap":25},[30,156303,156304,156306,156308],{"class":32,"line":33},[30,156305,155925],{"class":321},[30,156307,9659],{"class":317},[30,156309,55837],{"class":40},[30,156311,156312,156314,156316,156319,156321],{"class":32,"line":44},[30,156313,155925],{"class":321},[30,156315,367],{"class":317},[30,156317,156318],{"class":321}," num ",[30,156320,801],{"class":317},[30,156322,55837],{"class":40},[157,156324,156325,156326,101156,156329,28523],{},"Python 没有 ",[27,156327,156328],{},"num++",[27,156330,156331],{},"num--",[287,156333,156335],{"id":156334},"_273-比较运算符","2.7.3 比较运算符",[157,156337,156338],{},"比较运算结果是布尔值。",[20,156340,156342],{"className":30516,"code":156341,"language":30518,"meta":25,"style":25},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[27,156343,156344,156358,156373,156387],{"__ignoreMap":25},[30,156345,156346,156348,156350,156352,156354,156356],{"class":32,"line":33},[30,156347,30553],{"class":40},[30,156349,322],{"class":321},[30,156351,766],{"class":40},[30,156353,26360],{"class":317},[30,156355,2330],{"class":40},[30,156357,328],{"class":321},[30,156359,156360,156362,156364,156366,156369,156371],{"class":32,"line":44},[30,156361,30553],{"class":40},[30,156363,322],{"class":321},[30,156365,766],{"class":40},[30,156367,156368],{"class":317}," >=",[30,156370,2220],{"class":40},[30,156372,328],{"class":321},[30,156374,156375,156377,156379,156381,156383,156385],{"class":32,"line":52},[30,156376,30553],{"class":40},[30,156378,322],{"class":321},[30,156380,766],{"class":40},[30,156382,101697],{"class":317},[30,156384,2265],{"class":40},[30,156386,328],{"class":321},[30,156388,156389,156391,156393,156395,156398,156400],{"class":32,"line":60},[30,156390,30553],{"class":40},[30,156392,322],{"class":321},[30,156394,766],{"class":40},[30,156396,156397],{"class":317}," !=",[30,156399,2265],{"class":40},[30,156401,328],{"class":321},[157,156403,156404,156405,156407,156408,28523],{},"注意：判断相等用 ",[27,156406,3131],{},"，赋值用 ",[27,156409,367],{},[20,156411,156413],{"className":30516,"code":156412,"language":30518,"meta":25,"style":25},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[27,156414,156415,156427],{"__ignoreMap":25},[30,156416,156417,156419,156421,156424],{"class":32,"line":33},[30,156418,146684],{"class":321},[30,156420,367],{"class":317},[30,156422,156423],{"class":40}," 18",[30,156425,156426],{"class":379},"       # 赋值\n",[30,156428,156429,156431,156433,156435],{"class":32,"line":44},[30,156430,146684],{"class":321},[30,156432,3131],{"class":317},[30,156434,156423],{"class":40},[30,156436,156437],{"class":379},"      # 判断是否相等\n",[287,156439,156441],{"id":156440},"_274-逻辑运算符","2.7.4 逻辑运算符",[457,156443,156444,156452],{},[460,156445,156446],{},[463,156447,156448,156450],{},[466,156449,156062],{},[466,156451,26007],{},[504,156453,156454,156463,156472],{},[463,156455,156456,156460],{},[509,156457,156458],{},[27,156459,30600],{},[509,156461,156462],{},"并且",[463,156464,156465,156469],{},[509,156466,156467],{},[27,156468,115228],{},[509,156470,156471],{},"或者",[463,156473,156474,156479],{},[509,156475,156476],{},[27,156477,156478],{},"not",[509,156480,156481],{},"取反",[20,156483,156485],{"className":30516,"code":156484,"language":30518,"meta":25,"style":25},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[27,156486,156487,156495,156504,156508,156523,156537],{"__ignoreMap":25},[30,156488,156489,156491,156493],{"class":32,"line":33},[30,156490,146684],{"class":321},[30,156492,367],{"class":317},[30,156494,88203],{"class":40},[30,156496,156497,156500,156502],{"class":32,"line":44},[30,156498,156499],{"class":321},"has_ticket ",[30,156501,367],{"class":317},[30,156503,153737],{"class":40},[30,156505,156506],{"class":32,"line":52},[30,156507,2582],{"emptyLinePlaceholder":245},[30,156509,156510,156512,156514,156516,156518,156520],{"class":32,"line":60},[30,156511,30553],{"class":40},[30,156513,155906],{"class":321},[30,156515,1893],{"class":317},[30,156517,156423],{"class":40},[30,156519,120567],{"class":317},[30,156521,156522],{"class":321}," has_ticket)\n",[30,156524,156525,156527,156529,156531,156533,156535],{"class":32,"line":68},[30,156526,30553],{"class":40},[30,156528,155906],{"class":321},[30,156530,1230],{"class":317},[30,156532,156423],{"class":40},[30,156534,114339],{"class":317},[30,156536,156522],{"class":321},[30,156538,156539,156541,156543,156545],{"class":32,"line":80},[30,156540,30553],{"class":40},[30,156542,322],{"class":321},[30,156544,156478],{"class":317},[30,156546,156522],{"class":321},[15,156548,156550],{"id":156549},"_28-字符串定义","2.8 字符串定义",[157,156552,156553],{},"三种常见写法：",[20,156555,156557],{"className":30516,"code":156556,"language":30518,"meta":25,"style":25},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[27,156558,156559,156569,156578,156588],{"__ignoreMap":25},[30,156560,156561,156564,156566],{"class":32,"line":33},[30,156562,156563],{"class":321},"name1 ",[30,156565,367],{"class":317},[30,156567,156568],{"class":74}," '小明'\n",[30,156570,156571,156574,156576],{"class":32,"line":44},[30,156572,156573],{"class":321},"name2 ",[30,156575,367],{"class":317},[30,156577,149491],{"class":74},[30,156579,156580,156583,156585],{"class":32,"line":52},[30,156581,156582],{"class":321},"text ",[30,156584,367],{"class":317},[30,156586,156587],{"class":74}," \"\"\"这是多行字符串\n",[30,156589,156590],{"class":32,"line":60},[30,156591,156592],{"class":74},"可以换行\"\"\"\n",[157,156594,156595],{},"字符串中包含引号：",[20,156597,156599],{"className":30516,"code":156598,"language":30518,"meta":25,"style":25},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[27,156600,156601,156611,156621],{"__ignoreMap":25},[30,156602,156603,156606,156608],{"class":32,"line":33},[30,156604,156605],{"class":321},"msg ",[30,156607,367],{"class":317},[30,156609,156610],{"class":74}," \"他说:'你好'\"\n",[30,156612,156613,156616,156618],{"class":32,"line":44},[30,156614,156615],{"class":321},"msg2 ",[30,156617,367],{"class":317},[30,156619,156620],{"class":74}," '他说:\"你好\"'\n",[30,156622,156623,156626,156628,156631,156634,156637,156639],{"class":32,"line":52},[30,156624,156625],{"class":321},"msg3 ",[30,156627,367],{"class":317},[30,156629,156630],{"class":74}," \"他说:",[30,156632,156633],{"class":40},"\\\"",[30,156635,156636],{"class":74},"你好",[30,156638,156633],{"class":40},[30,156640,25306],{"class":74},[157,156642,156643],{},"常见转义字符：",[457,156645,156646,156655],{},[460,156647,156648],{},[463,156649,156650,156653],{},[466,156651,156652],{},"写法",[466,156654,100838],{},[504,156656,156657,156667,156676,156686,156695],{},[463,156658,156659,156664],{},[509,156660,156661],{},[27,156662,156663],{},"\\n",[509,156665,156666],{},"换行",[463,156668,156669,156673],{},[509,156670,156671],{},[27,156672,1420],{},[509,156674,156675],{},"制表符",[463,156677,156678,156683],{},[509,156679,156680],{},[27,156681,156682],{},"\\\\",[509,156684,156685],{},"反斜杠",[463,156687,156688,156692],{},[509,156689,156690],{},[27,156691,156633],{},[509,156693,156694],{},"双引号",[463,156696,156697,156702],{},[509,156698,156699],{},[27,156700,156701],{},"\\'",[509,156703,156704],{},"单引号",[15,156706,156708],{"id":156707},"_29-字符串拼接","2.9 字符串拼接",[20,156710,156712],{"className":30516,"code":156711,"language":30518,"meta":25,"style":25},"name = \"小明\"\nprint(\"你好，\" + name)\n",[27,156713,156714,156722],{"__ignoreMap":25},[30,156715,156716,156718,156720],{"class":32,"line":33},[30,156717,146674],{"class":321},[30,156719,367],{"class":317},[30,156721,149491],{"class":74},[30,156723,156724,156726,156728,156731,156733],{"class":32,"line":44},[30,156725,30553],{"class":40},[30,156727,322],{"class":321},[30,156729,156730],{"class":74},"\"你好，\"",[30,156732,45704],{"class":317},[30,156734,156735],{"class":321}," name)\n",[157,156737,156738],{},"字符串只能和字符串拼接：",[20,156740,156742],{"className":30516,"code":156741,"language":30518,"meta":25,"style":25},"age = 18\nprint(\"年龄:\" + str(age))\n",[27,156743,156744,156752],{"__ignoreMap":25},[30,156745,156746,156748,156750],{"class":32,"line":33},[30,156747,146684],{"class":321},[30,156749,367],{"class":317},[30,156751,146689],{"class":40},[30,156753,156754,156756,156758,156760,156762,156764],{"class":32,"line":44},[30,156755,30553],{"class":40},[30,156757,322],{"class":321},[30,156759,146655],{"class":74},[30,156761,45704],{"class":317},[30,156763,74057],{"class":40},[30,156765,156766],{"class":321},"(age))\n",[157,156768,156769],{},"更推荐使用格式化字符串。",[15,156771,156773],{"id":156772},"_210-字符串格式化","2.10 字符串格式化",[287,156775,156777],{"id":156776},"_2101-百分号格式化","2.10.1 百分号格式化",[20,156779,156781],{"className":30516,"code":156780,"language":30518,"meta":25,"style":25},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[27,156782,156783,156791,156799,156808,156812],{"__ignoreMap":25},[30,156784,156785,156787,156789],{"class":32,"line":33},[30,156786,146674],{"class":321},[30,156788,367],{"class":317},[30,156790,149491],{"class":74},[30,156792,156793,156795,156797],{"class":32,"line":44},[30,156794,146684],{"class":321},[30,156796,367],{"class":317},[30,156798,146689],{"class":40},[30,156800,156801,156803,156805],{"class":32,"line":52},[30,156802,155496],{"class":321},[30,156804,367],{"class":317},[30,156806,156807],{"class":40}," 95.5\n",[30,156809,156810],{"class":32,"line":60},[30,156811,2582],{"emptyLinePlaceholder":245},[30,156813,156814,156816,156818,156821,156824,156827,156830,156833,156836,156838,156840],{"class":32,"line":68},[30,156815,30553],{"class":40},[30,156817,322],{"class":321},[30,156819,156820],{"class":74},"\"姓名:",[30,156822,156823],{"class":40},"%s",[30,156825,156826],{"class":74}," 年龄:",[30,156828,156829],{"class":40},"%d",[30,156831,156832],{"class":74}," 分数:",[30,156834,156835],{"class":40},"%.1f",[30,156837,571],{"class":74},[30,156839,156219],{"class":317},[30,156841,156842],{"class":321}," (name, age, score))\n",[157,156844,156845],{},"常用占位符：",[457,156847,156848,156857],{},[460,156849,156850],{},[463,156851,156852,156855],{},[466,156853,156854],{},"占位符",[466,156856,26007],{},[504,156858,156859,156867,156875],{},[463,156860,156861,156865],{},[509,156862,156863],{},[27,156864,156823],{},[509,156866,155362],{},[463,156868,156869,156873],{},[509,156870,156871],{},[27,156872,156829],{},[509,156874,155340],{},[463,156876,156877,156882],{},[509,156878,156879],{},[27,156880,156881],{},"%f",[509,156883,155351],{},[157,156885,156886],{},"精度控制：",[20,156888,156890],{"className":30516,"code":156889,"language":30518,"meta":25,"style":25},"price = 12.3456\nprint(\"%.2f\" % price)\n",[27,156891,156892,156901],{"__ignoreMap":25},[30,156893,156894,156896,156898],{"class":32,"line":33},[30,156895,146819],{"class":321},[30,156897,367],{"class":317},[30,156899,156900],{"class":40}," 12.3456\n",[30,156902,156903,156905,156907,156909,156912,156914,156916],{"class":32,"line":44},[30,156904,30553],{"class":40},[30,156906,322],{"class":321},[30,156908,571],{"class":74},[30,156910,156911],{"class":40},"%.2f",[30,156913,571],{"class":74},[30,156915,156219],{"class":317},[30,156917,156918],{"class":321}," price)\n",[287,156920,156922],{"id":156921},"_2102-format方法","2.10.2 format方法",[20,156924,156926],{"className":30516,"code":156925,"language":30518,"meta":25,"style":25},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[27,156927,156928,156936,156944,156948,156967,156987],{"__ignoreMap":25},[30,156929,156930,156932,156934],{"class":32,"line":33},[30,156931,146674],{"class":321},[30,156933,367],{"class":317},[30,156935,149491],{"class":74},[30,156937,156938,156940,156942],{"class":32,"line":44},[30,156939,146684],{"class":321},[30,156941,367],{"class":317},[30,156943,146689],{"class":40},[30,156945,156946],{"class":32,"line":52},[30,156947,2582],{"emptyLinePlaceholder":245},[30,156949,156950,156952,156954,156956,156958,156960,156962,156964],{"class":32,"line":60},[30,156951,30553],{"class":40},[30,156953,322],{"class":321},[30,156955,156820],{"class":74},[30,156957,32597],{"class":40},[30,156959,156826],{"class":74},[30,156961,32597],{"class":40},[30,156963,571],{"class":74},[30,156965,156966],{"class":321},".format(name, age))\n",[30,156968,156969,156971,156973,156975,156978,156980,156983,156985],{"class":32,"line":68},[30,156970,30553],{"class":40},[30,156972,322],{"class":321},[30,156974,156820],{"class":74},[30,156976,156977],{"class":40},"{0}",[30,156979,156826],{"class":74},[30,156981,156982],{"class":40},"{1}",[30,156984,571],{"class":74},[30,156986,156966],{"class":321},[30,156988,156989,156991,156993,156995,156998,157000,157003,157005,157008,157010,157012,157015,157017,157019],{"class":32,"line":80},[30,156990,30553],{"class":40},[30,156992,322],{"class":321},[30,156994,156820],{"class":74},[30,156996,156997],{"class":40},"{name}",[30,156999,156826],{"class":74},[30,157001,157002],{"class":40},"{age}",[30,157004,571],{"class":74},[30,157006,157007],{"class":321},".format(",[30,157009,79948],{"class":5398},[30,157011,367],{"class":317},[30,157013,157014],{"class":321},"name, ",[30,157016,70359],{"class":5398},[30,157018,367],{"class":317},[30,157020,157021],{"class":321},"age))\n",[287,157023,157025],{"id":157024},"_2103-f-string","2.10.3 f-string",[157,157027,157028],{},"推荐写法：",[20,157030,157032],{"className":30516,"code":157031,"language":30518,"meta":25,"style":25},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[27,157033,157034,157042,157050,157058,157062],{"__ignoreMap":25},[30,157035,157036,157038,157040],{"class":32,"line":33},[30,157037,146674],{"class":321},[30,157039,367],{"class":317},[30,157041,149491],{"class":74},[30,157043,157044,157046,157048],{"class":32,"line":44},[30,157045,146684],{"class":321},[30,157047,367],{"class":317},[30,157049,146689],{"class":40},[30,157051,157052,157054,157056],{"class":32,"line":52},[30,157053,155496],{"class":321},[30,157055,367],{"class":317},[30,157057,156807],{"class":40},[30,157059,157060],{"class":32,"line":60},[30,157061,2582],{"emptyLinePlaceholder":245},[30,157063,157064,157066,157068,157070,157072,157074,157076,157078,157080,157082,157084,157086,157088,157090,157093,157096,157098,157100],{"class":32,"line":68},[30,157065,30553],{"class":40},[30,157067,322],{"class":321},[30,157069,373],{"class":317},[30,157071,156820],{"class":74},[30,157073,1216],{"class":40},[30,157075,79948],{"class":321},[30,157077,1266],{"class":40},[30,157079,156826],{"class":74},[30,157081,1216],{"class":40},[30,157083,70359],{"class":321},[30,157085,1266],{"class":40},[30,157087,156832],{"class":74},[30,157089,1216],{"class":40},[30,157091,157092],{"class":321},"score",[30,157094,157095],{"class":317},":.1f",[30,157097,1266],{"class":40},[30,157099,571],{"class":74},[30,157101,328],{"class":321},[157,157103,157104],{},"表达式也可以放进去：",[20,157106,157108],{"className":30516,"code":157107,"language":30518,"meta":25,"style":25},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[27,157109,157110,157118,157126],{"__ignoreMap":25},[30,157111,157112,157114,157116],{"class":32,"line":33},[30,157113,146819],{"class":321},[30,157115,367],{"class":317},[30,157117,146824],{"class":40},[30,157119,157120,157122,157124],{"class":32,"line":44},[30,157121,146829],{"class":321},[30,157123,367],{"class":317},[30,157125,54565],{"class":40},[30,157127,157128,157130,157132,157134,157137,157139,157141,157143,157146,157148,157151],{"class":32,"line":52},[30,157129,30553],{"class":40},[30,157131,322],{"class":321},[30,157133,373],{"class":317},[30,157135,157136],{"class":74},"\"总价:",[30,157138,1216],{"class":40},[30,157140,146819],{"class":321},[30,157142,775],{"class":317},[30,157144,157145],{"class":321}," count",[30,157147,1266],{"class":40},[30,157149,157150],{"class":74},"元\"",[30,157152,328],{"class":321},[15,157154,157156],{"id":157155},"_211-input输入","2.11 input输入",[157,157158,157159,157162],{},[27,157160,157161],{},"input()"," 会暂停程序，等待用户输入。",[20,157164,157166],{"className":30516,"code":157165,"language":30518,"meta":25,"style":25},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[27,157167,157168,157182],{"__ignoreMap":25},[30,157169,157170,157172,157174,157176,157178,157180],{"class":32,"line":33},[30,157171,146674],{"class":321},[30,157173,367],{"class":317},[30,157175,60743],{"class":40},[30,157177,322],{"class":321},[30,157179,152517],{"class":74},[30,157181,328],{"class":321},[30,157183,157184,157186,157188,157190,157193,157195,157197,157199,157201],{"class":32,"line":44},[30,157185,30553],{"class":40},[30,157187,322],{"class":321},[30,157189,373],{"class":317},[30,157191,157192],{"class":74},"\"你好，",[30,157194,1216],{"class":40},[30,157196,79948],{"class":321},[30,157198,1266],{"class":40},[30,157200,571],{"class":74},[30,157202,328],{"class":321},[157,157204,157205],{},"输入整数：",[20,157207,157209],{"className":30516,"code":157208,"language":30518,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[27,157210,157211,157229],{"__ignoreMap":25},[30,157212,157213,157215,157217,157219,157221,157223,157225,157227],{"class":32,"line":33},[30,157214,146684],{"class":321},[30,157216,367],{"class":317},[30,157218,2564],{"class":40},[30,157220,322],{"class":321},[30,157222,53959],{"class":40},[30,157224,322],{"class":321},[30,157226,152532],{"class":74},[30,157228,30635],{"class":321},[30,157230,157231,157233,157235,157237,157240,157242,157244,157246,157249,157251],{"class":32,"line":44},[30,157232,30553],{"class":40},[30,157234,322],{"class":321},[30,157236,373],{"class":317},[30,157238,157239],{"class":74},"\"明年你",[30,157241,1216],{"class":40},[30,157243,146684],{"class":321},[30,157245,801],{"class":317},[30,157247,157248],{"class":40}," 1}",[30,157250,149542],{"class":74},[30,157252,328],{"class":321},[157,157254,157255],{},"输入小数：",[20,157257,157259],{"className":30516,"code":157258,"language":30518,"meta":25,"style":25},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[27,157260,157261,157280],{"__ignoreMap":25},[30,157262,157263,157265,157267,157269,157271,157273,157275,157278],{"class":32,"line":33},[30,157264,155469],{"class":321},[30,157266,367],{"class":317},[30,157268,109935],{"class":40},[30,157270,322],{"class":321},[30,157272,53959],{"class":40},[30,157274,322],{"class":321},[30,157276,157277],{"class":74},"\"请输入身高:\"",[30,157279,30635],{"class":321},[30,157281,157282,157284,157286,157288,157291,157293,157295,157298,157300,157303],{"class":32,"line":44},[30,157283,30553],{"class":40},[30,157285,322],{"class":321},[30,157287,373],{"class":317},[30,157289,157290],{"class":74},"\"身高:",[30,157292,1216],{"class":40},[30,157294,25154],{"class":321},[30,157296,157297],{"class":317},":.2f",[30,157299,1266],{"class":40},[30,157301,157302],{"class":74},"米\"",[30,157304,328],{"class":321},[15,157306,157308],{"id":157307},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[157,157310,123430],{},[271,157312,157313,157316,157319,157322],{},[150,157314,157315],{},"输入商品单价。",[150,157317,157318],{},"输入购买数量。",[150,157320,157321],{},"输入折扣，例如 0.8 表示八折。",[150,157323,157324],{},"输出最终金额，保留两位小数。",[157,157326,10217],{},[20,157328,157330],{"className":30516,"code":157329,"language":30518,"meta":25,"style":25},"price = float(input(\"请输入商品单价:\"))\ncount = int(input(\"请输入购买数量:\"))\ndiscount = float(input(\"请输入折扣:\"))\n\ntotal = price * count * discount\n\nprint(f\"商品单价:{price:.2f}\")\nprint(f\"购买数量:{count}\")\nprint(f\"折扣:{discount}\")\nprint(f\"应付金额:{total:.2f}元\")\n",[27,157331,157332,157351,157370,157390,157394,157414,157418,157441,157462,157484],{"__ignoreMap":25},[30,157333,157334,157336,157338,157340,157342,157344,157346,157349],{"class":32,"line":33},[30,157335,146819],{"class":321},[30,157337,367],{"class":317},[30,157339,109935],{"class":40},[30,157341,322],{"class":321},[30,157343,53959],{"class":40},[30,157345,322],{"class":321},[30,157347,157348],{"class":74},"\"请输入商品单价:\"",[30,157350,30635],{"class":321},[30,157352,157353,157355,157357,157359,157361,157363,157365,157368],{"class":32,"line":44},[30,157354,146829],{"class":321},[30,157356,367],{"class":317},[30,157358,2564],{"class":40},[30,157360,322],{"class":321},[30,157362,53959],{"class":40},[30,157364,322],{"class":321},[30,157366,157367],{"class":74},"\"请输入购买数量:\"",[30,157369,30635],{"class":321},[30,157371,157372,157375,157377,157379,157381,157383,157385,157388],{"class":32,"line":52},[30,157373,157374],{"class":321},"discount ",[30,157376,367],{"class":317},[30,157378,109935],{"class":40},[30,157380,322],{"class":321},[30,157382,53959],{"class":40},[30,157384,322],{"class":321},[30,157386,157387],{"class":74},"\"请输入折扣:\"",[30,157389,30635],{"class":321},[30,157391,157392],{"class":32,"line":60},[30,157393,2582],{"emptyLinePlaceholder":245},[30,157395,157396,157399,157401,157404,157406,157409,157411],{"class":32,"line":68},[30,157397,157398],{"class":321},"total ",[30,157400,367],{"class":317},[30,157402,157403],{"class":321}," price ",[30,157405,775],{"class":317},[30,157407,157408],{"class":321}," count ",[30,157410,775],{"class":317},[30,157412,157413],{"class":321}," discount\n",[30,157415,157416],{"class":32,"line":80},[30,157417,2582],{"emptyLinePlaceholder":245},[30,157419,157420,157422,157424,157426,157429,157431,157433,157435,157437,157439],{"class":32,"line":88},[30,157421,30553],{"class":40},[30,157423,322],{"class":321},[30,157425,373],{"class":317},[30,157427,157428],{"class":74},"\"商品单价:",[30,157430,1216],{"class":40},[30,157432,79953],{"class":321},[30,157434,157297],{"class":317},[30,157436,1266],{"class":40},[30,157438,571],{"class":74},[30,157440,328],{"class":321},[30,157442,157443,157445,157447,157449,157452,157454,157456,157458,157460],{"class":32,"line":96},[30,157444,30553],{"class":40},[30,157446,322],{"class":321},[30,157448,373],{"class":317},[30,157450,157451],{"class":74},"\"购买数量:",[30,157453,1216],{"class":40},[30,157455,84572],{"class":321},[30,157457,1266],{"class":40},[30,157459,571],{"class":74},[30,157461,328],{"class":321},[30,157463,157464,157466,157468,157470,157473,157475,157478,157480,157482],{"class":32,"line":104},[30,157465,30553],{"class":40},[30,157467,322],{"class":321},[30,157469,373],{"class":317},[30,157471,157472],{"class":74},"\"折扣:",[30,157474,1216],{"class":40},[30,157476,157477],{"class":321},"discount",[30,157479,1266],{"class":40},[30,157481,571],{"class":74},[30,157483,328],{"class":321},[30,157485,157486,157488,157490,157492,157495,157497,157500,157502,157504,157506],{"class":32,"line":112},[30,157487,30553],{"class":40},[30,157489,322],{"class":321},[30,157491,373],{"class":317},[30,157493,157494],{"class":74},"\"应付金额:",[30,157496,1216],{"class":40},[30,157498,157499],{"class":321},"total",[30,157501,157297],{"class":317},[30,157503,1266],{"class":40},[30,157505,157150],{"class":74},[30,157507,328],{"class":321},[15,157509,157511],{"id":157510},"_213-易错点","2.13 易错点",[271,157513,157514,157519,157525,157533,157536],{},[150,157515,157516,157518],{},[27,157517,157161],{}," 的结果是字符串，做运算前要转换。",[150,157520,157521,157522,28523],{},"字符串拼接时，数字要先 ",[27,157523,157524],{},"str()",[150,157526,157527,157529,157530,157532],{},[27,157528,367],{}," 是赋值，",[27,157531,3131],{}," 是比较。",[150,157534,157535],{},"Python 没有自增自减运算符。",[150,157537,157538],{},"浮点数计算可能有精度误差：",[20,157540,157542],{"className":30516,"code":157541,"language":30518,"meta":25,"style":25},"print(0.1 + 0.2)\n",[27,157543,157544],{"__ignoreMap":25},[30,157545,157546,157548,157550,157552,157554,157557],{"class":32,"line":33},[30,157547,30553],{"class":40},[30,157549,322],{"class":321},[30,157551,86348],{"class":40},[30,157553,45704],{"class":317},[30,157555,157556],{"class":40}," 0.2",[30,157558,328],{"class":321},[157,157560,157561,157562,157565],{},"金额计算如果要求严格，可以后续学习 ",[27,157563,157564],{},"decimal"," 模块。",[15,157567,157569],{"id":157568},"_214-本章练习","2.14 本章练习",[271,157571,157572,157575,157578,157581,157584],{},[150,157573,157574],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[150,157576,157577],{},"输入圆的半径，计算面积，保留两位小数。",[150,157579,157580],{},"输入工资和奖金，计算总收入。",[150,157582,157583],{},"输入摄氏温度，转换为华氏温度。",[150,157585,157586],{},"写一个 BMI 计算程序：",[20,157588,157591],{"className":157589,"code":157590,"language":5369,"meta":25},[5367],"BMI = 体重kg \u002F 身高m ** 2\n",[27,157592,157590],{"__ignoreMap":25},[234,157594,157595],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":157597},[157598,157599,157600,157601,157602,157603,157604,157610,157611,157612,157617,157618,157619,157620],{"id":155159,"depth":44,"text":155160},{"id":155268,"depth":44,"text":155269},{"id":155439,"depth":44,"text":155440},{"id":155516,"depth":44,"text":155517},{"id":50869,"depth":44,"text":50870},{"id":155822,"depth":44,"text":155823},{"id":156048,"depth":44,"text":156049,"children":157605},[157606,157607,157608,157609],{"id":156052,"depth":52,"text":156053},{"id":156246,"depth":52,"text":156247},{"id":156334,"depth":52,"text":156335},{"id":156440,"depth":52,"text":156441},{"id":156549,"depth":44,"text":156550},{"id":156707,"depth":44,"text":156708},{"id":156772,"depth":44,"text":156773,"children":157613},[157614,157615,157616],{"id":156776,"depth":52,"text":156777},{"id":156921,"depth":52,"text":156922},{"id":157024,"depth":52,"text":157025},{"id":157155,"depth":44,"text":157156},{"id":157307,"depth":44,"text":157308},{"id":157510,"depth":44,"text":157511},{"id":157568,"depth":44,"text":157569},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155151,"description":242},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157627,"title":157628,"body":157629,"description":242,"extension":243,"meta":159265,"navigation":245,"path":159266,"seo":159267,"stem":159268,"__hash__":159269},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157630,"toc":159246},[157631,157634,157638,157641,157656,157659,157687,157691,157741,157743,157759,157762,157788,157791,157795,157862,157865,157881,157885,157888,158006,158009,158016,158065,158071,158075,158078,158191,158194,158198,158202,158205,158255,158259,158262,158312,158316,158319,158357,158361,158364,158410,158413,158448,158452,158457,158460,158506,158508,158575,158579,158585,158696,158705,158709,158711,158722,158724,158890,158894,158896,158910,158912,159126,159130,159149,159166,159169,159215,159219,159243],[10,157632,157628],{"id":157633},"_3-判断语句",[15,157635,157637],{"id":157636},"_31-布尔值","3.1 布尔值",[157,157639,157640],{},"判断语句依赖布尔值：",[20,157642,157644],{"className":30516,"code":157643,"language":30518,"meta":25,"style":25},"True\nFalse\n",[27,157645,157646,157651],{"__ignoreMap":25},[30,157647,157648],{"class":32,"line":33},[30,157649,157650],{"class":40},"True\n",[30,157652,157653],{"class":32,"line":44},[30,157654,157655],{"class":40},"False\n",[157,157657,157658],{},"比较表达式会产生布尔值：",[20,157660,157662],{"className":30516,"code":157661,"language":30518,"meta":25,"style":25},"age = 18\nprint(age >= 18)  # True\n",[27,157663,157664,157672],{"__ignoreMap":25},[30,157665,157666,157668,157670],{"class":32,"line":33},[30,157667,146684],{"class":321},[30,157669,367],{"class":317},[30,157671,146689],{"class":40},[30,157673,157674,157676,157678,157680,157682,157684],{"class":32,"line":44},[30,157675,30553],{"class":40},[30,157677,155906],{"class":321},[30,157679,1893],{"class":317},[30,157681,156423],{"class":40},[30,157683,45946],{"class":321},[30,157685,157686],{"class":379},"# True\n",[15,157688,157690],{"id":157689},"_32-if基础语法","3.2 if基础语法",[20,157692,157694],{"className":30516,"code":157693,"language":30518,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[27,157695,157696,157714,157718,157730],{"__ignoreMap":25},[30,157697,157698,157700,157702,157704,157706,157708,157710,157712],{"class":32,"line":33},[30,157699,146684],{"class":321},[30,157701,367],{"class":317},[30,157703,2564],{"class":40},[30,157705,322],{"class":321},[30,157707,53959],{"class":40},[30,157709,322],{"class":321},[30,157711,152532],{"class":74},[30,157713,30635],{"class":321},[30,157715,157716],{"class":32,"line":44},[30,157717,2582],{"emptyLinePlaceholder":245},[30,157719,157720,157722,157724,157726,157728],{"class":32,"line":52},[30,157721,1717],{"class":317},[30,157723,15889],{"class":321},[30,157725,1893],{"class":317},[30,157727,156423],{"class":40},[30,157729,3921],{"class":321},[30,157731,157732,157734,157736,157739],{"class":32,"line":60},[30,157733,31437],{"class":40},[30,157735,322],{"class":321},[30,157737,157738],{"class":74},"\"可以进入网吧\"",[30,157740,328],{"class":321},[157,157742,9207],{},[271,157744,157745,157750,157753,157756],{},[150,157746,157747,157749],{},[27,157748,1717],{}," 后面是条件表达式。",[150,157751,157752],{},"条件后面必须写冒号。",[150,157754,157755],{},"条件成立时执行缩进代码块。",[150,157757,157758],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[157,157760,157761],{},"错误示例：",[20,157763,157765],{"className":30516,"code":157764,"language":30518,"meta":25,"style":25},"if age >= 18\n    print(\"可以进入\")\n",[27,157766,157767,157777],{"__ignoreMap":25},[30,157768,157769,157771,157773,157775],{"class":32,"line":33},[30,157770,1717],{"class":317},[30,157772,15889],{"class":321},[30,157774,1893],{"class":317},[30,157776,146689],{"class":40},[30,157778,157779,157781,157783,157786],{"class":32,"line":44},[30,157780,31437],{"class":40},[30,157782,322],{"class":321},[30,157784,157785],{"class":74},"\"可以进入\"",[30,157787,328],{"class":321},[157,157789,157790],{},"缺少冒号。",[15,157792,157794],{"id":157793},"_33-if-else","3.3 if else",[20,157796,157798],{"className":30516,"code":157797,"language":30518,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[27,157799,157800,157818,157822,157834,157845,157851],{"__ignoreMap":25},[30,157801,157802,157804,157806,157808,157810,157812,157814,157816],{"class":32,"line":33},[30,157803,146684],{"class":321},[30,157805,367],{"class":317},[30,157807,2564],{"class":40},[30,157809,322],{"class":321},[30,157811,53959],{"class":40},[30,157813,322],{"class":321},[30,157815,152532],{"class":74},[30,157817,30635],{"class":321},[30,157819,157820],{"class":32,"line":44},[30,157821,2582],{"emptyLinePlaceholder":245},[30,157823,157824,157826,157828,157830,157832],{"class":32,"line":52},[30,157825,1717],{"class":317},[30,157827,15889],{"class":321},[30,157829,1893],{"class":317},[30,157831,156423],{"class":40},[30,157833,3921],{"class":321},[30,157835,157836,157838,157840,157843],{"class":32,"line":60},[30,157837,31437],{"class":40},[30,157839,322],{"class":321},[30,157841,157842],{"class":74},"\"成年人\"",[30,157844,328],{"class":321},[30,157846,157847,157849],{"class":32,"line":68},[30,157848,1884],{"class":317},[30,157850,3921],{"class":321},[30,157852,157853,157855,157857,157860],{"class":32,"line":80},[30,157854,31437],{"class":40},[30,157856,322],{"class":321},[30,157858,157859],{"class":74},"\"未成年人\"",[30,157861,328],{"class":321},[157,157863,157864],{},"执行逻辑：",[271,157866,157867,157873,157878],{},[150,157868,157869,157870,157872],{},"条件成立，执行 ",[27,157871,1717],{}," 代码块。",[150,157874,157875,157876,157872],{},"条件不成立，执行 ",[27,157877,1884],{},[150,157879,157880],{},"两个代码块只会执行其中一个。",[15,157882,157884],{"id":157883},"_34-if-elif-else","3.4 if elif else",[157,157886,157887],{},"多条件判断：",[20,157889,157891],{"className":30516,"code":157890,"language":30518,"meta":25,"style":25},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[27,157892,157893,157911,157915,157929,157940,157954,157965,157978,157989,157995],{"__ignoreMap":25},[30,157894,157895,157897,157899,157901,157903,157905,157907,157909],{"class":32,"line":33},[30,157896,155496],{"class":321},[30,157898,367],{"class":317},[30,157900,2564],{"class":40},[30,157902,322],{"class":321},[30,157904,53959],{"class":40},[30,157906,322],{"class":321},[30,157908,152547],{"class":74},[30,157910,30635],{"class":321},[30,157912,157913],{"class":32,"line":44},[30,157914,2582],{"emptyLinePlaceholder":245},[30,157916,157917,157919,157922,157924,157927],{"class":32,"line":52},[30,157918,1717],{"class":317},[30,157920,157921],{"class":321}," score ",[30,157923,1893],{"class":317},[30,157925,157926],{"class":40}," 90",[30,157928,3921],{"class":321},[30,157930,157931,157933,157935,157938],{"class":32,"line":60},[30,157932,31437],{"class":40},[30,157934,322],{"class":321},[30,157936,157937],{"class":74},"\"优秀\"",[30,157939,328],{"class":321},[30,157941,157942,157945,157947,157949,157952],{"class":32,"line":68},[30,157943,157944],{"class":317},"elif",[30,157946,157921],{"class":321},[30,157948,1893],{"class":317},[30,157950,157951],{"class":40}," 80",[30,157953,3921],{"class":321},[30,157955,157956,157958,157960,157963],{"class":32,"line":80},[30,157957,31437],{"class":40},[30,157959,322],{"class":321},[30,157961,157962],{"class":74},"\"良好\"",[30,157964,328],{"class":321},[30,157966,157967,157969,157971,157973,157976],{"class":32,"line":88},[30,157968,157944],{"class":317},[30,157970,157921],{"class":321},[30,157972,1893],{"class":317},[30,157974,157975],{"class":40}," 60",[30,157977,3921],{"class":321},[30,157979,157980,157982,157984,157987],{"class":32,"line":96},[30,157981,31437],{"class":40},[30,157983,322],{"class":321},[30,157985,157986],{"class":74},"\"及格\"",[30,157988,328],{"class":321},[30,157990,157991,157993],{"class":32,"line":104},[30,157992,1884],{"class":317},[30,157994,3921],{"class":321},[30,157996,157997,157999,158001,158004],{"class":32,"line":112},[30,157998,31437],{"class":40},[30,158000,322],{"class":321},[30,158002,158003],{"class":74},"\"不及格\"",[30,158005,328],{"class":321},[157,158007,158008],{},"注意判断顺序很重要。",[157,158010,158011,158012,158015],{},"如果把 ",[27,158013,158014],{},"score >= 60"," 放在最前面：",[20,158017,158019],{"className":30516,"code":158018,"language":30518,"meta":25,"style":25},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[27,158020,158021,158033,158043,158055],{"__ignoreMap":25},[30,158022,158023,158025,158027,158029,158031],{"class":32,"line":33},[30,158024,1717],{"class":317},[30,158026,157921],{"class":321},[30,158028,1893],{"class":317},[30,158030,157975],{"class":40},[30,158032,3921],{"class":321},[30,158034,158035,158037,158039,158041],{"class":32,"line":44},[30,158036,31437],{"class":40},[30,158038,322],{"class":321},[30,158040,157986],{"class":74},[30,158042,328],{"class":321},[30,158044,158045,158047,158049,158051,158053],{"class":32,"line":52},[30,158046,157944],{"class":317},[30,158048,157921],{"class":321},[30,158050,1893],{"class":317},[30,158052,157926],{"class":40},[30,158054,3921],{"class":321},[30,158056,158057,158059,158061,158063],{"class":32,"line":60},[30,158058,31437],{"class":40},[30,158060,322],{"class":321},[30,158062,157937],{"class":74},[30,158064,328],{"class":321},[157,158066,158067,158068,158070],{},"成绩 95 会先满足 ",[27,158069,158014],{},"，后面的优秀分支就不会执行。",[15,158072,158074],{"id":158073},"_35-判断语句嵌套","3.5 判断语句嵌套",[157,158076,158077],{},"嵌套判断就是在一个判断内部再写判断。",[20,158079,158081],{"className":30516,"code":158080,"language":30518,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\nhas_ticket = input(\"是否有票(y\u002Fn):\")\n\nif age >= 18:\n    if has_ticket == \"y\":\n        print(\"可以进入\")\n    else:\n        print(\"请先买票\")\nelse:\n    print(\"未成年人禁止进入\")\n",[27,158082,158083,158101,158116,158120,158132,158146,158156,158163,158174,158180],{"__ignoreMap":25},[30,158084,158085,158087,158089,158091,158093,158095,158097,158099],{"class":32,"line":33},[30,158086,146684],{"class":321},[30,158088,367],{"class":317},[30,158090,2564],{"class":40},[30,158092,322],{"class":321},[30,158094,53959],{"class":40},[30,158096,322],{"class":321},[30,158098,152532],{"class":74},[30,158100,30635],{"class":321},[30,158102,158103,158105,158107,158109,158111,158114],{"class":32,"line":44},[30,158104,156499],{"class":321},[30,158106,367],{"class":317},[30,158108,60743],{"class":40},[30,158110,322],{"class":321},[30,158112,158113],{"class":74},"\"是否有票(y\u002Fn):\"",[30,158115,328],{"class":321},[30,158117,158118],{"class":32,"line":52},[30,158119,2582],{"emptyLinePlaceholder":245},[30,158121,158122,158124,158126,158128,158130],{"class":32,"line":60},[30,158123,1717],{"class":317},[30,158125,15889],{"class":321},[30,158127,1893],{"class":317},[30,158129,156423],{"class":40},[30,158131,3921],{"class":321},[30,158133,158134,158136,158139,158141,158144],{"class":32,"line":68},[30,158135,3283],{"class":317},[30,158137,158138],{"class":321}," has_ticket ",[30,158140,3131],{"class":317},[30,158142,158143],{"class":74}," \"y\"",[30,158145,3921],{"class":321},[30,158147,158148,158150,158152,158154],{"class":32,"line":80},[30,158149,32589],{"class":40},[30,158151,322],{"class":321},[30,158153,157785],{"class":74},[30,158155,328],{"class":321},[30,158157,158158,158161],{"class":32,"line":88},[30,158159,158160],{"class":317},"    else",[30,158162,3921],{"class":321},[30,158164,158165,158167,158169,158172],{"class":32,"line":96},[30,158166,32589],{"class":40},[30,158168,322],{"class":321},[30,158170,158171],{"class":74},"\"请先买票\"",[30,158173,328],{"class":321},[30,158175,158176,158178],{"class":32,"line":104},[30,158177,1884],{"class":317},[30,158179,3921],{"class":321},[30,158181,158182,158184,158186,158189],{"class":32,"line":112},[30,158183,31437],{"class":40},[30,158185,322],{"class":321},[30,158187,158188],{"class":74},"\"未成年人禁止进入\"",[30,158190,328],{"class":321},[157,158192,158193],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[15,158195,158197],{"id":158196},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[287,158199,158201],{"id":158200},"_361-and","3.6.1 and",[157,158203,158204],{},"两个条件都成立才成立。",[20,158206,158208],{"className":30516,"code":158207,"language":30518,"meta":25,"style":25},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[27,158209,158210,158218,158226,158230,158245],{"__ignoreMap":25},[30,158211,158212,158214,158216],{"class":32,"line":33},[30,158213,146684],{"class":321},[30,158215,367],{"class":317},[30,158217,88203],{"class":40},[30,158219,158220,158222,158224],{"class":32,"line":44},[30,158221,156499],{"class":321},[30,158223,367],{"class":317},[30,158225,153737],{"class":40},[30,158227,158228],{"class":32,"line":52},[30,158229,2582],{"emptyLinePlaceholder":245},[30,158231,158232,158234,158236,158238,158240,158242],{"class":32,"line":60},[30,158233,1717],{"class":317},[30,158235,15889],{"class":321},[30,158237,1893],{"class":317},[30,158239,156423],{"class":40},[30,158241,120567],{"class":317},[30,158243,158244],{"class":321}," has_ticket:\n",[30,158246,158247,158249,158251,158253],{"class":32,"line":68},[30,158248,31437],{"class":40},[30,158250,322],{"class":321},[30,158252,157785],{"class":74},[30,158254,328],{"class":321},[287,158256,158258],{"id":158257},"_362-or","3.6.2 or",[157,158260,158261],{},"只要一个条件成立就成立。",[20,158263,158265],{"className":30516,"code":158264,"language":30518,"meta":25,"style":25},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[27,158266,158267,158276,158285,158289,158301],{"__ignoreMap":25},[30,158268,158269,158272,158274],{"class":32,"line":33},[30,158270,158271],{"class":321},"is_vip ",[30,158273,367],{"class":317},[30,158275,125945],{"class":40},[30,158277,158278,158281,158283],{"class":32,"line":44},[30,158279,158280],{"class":321},"coupon ",[30,158282,367],{"class":317},[30,158284,153737],{"class":40},[30,158286,158287],{"class":32,"line":52},[30,158288,2582],{"emptyLinePlaceholder":245},[30,158290,158291,158293,158296,158298],{"class":32,"line":60},[30,158292,1717],{"class":317},[30,158294,158295],{"class":321}," is_vip ",[30,158297,115228],{"class":317},[30,158299,158300],{"class":321}," coupon:\n",[30,158302,158303,158305,158307,158310],{"class":32,"line":68},[30,158304,31437],{"class":40},[30,158306,322],{"class":321},[30,158308,158309],{"class":74},"\"可以享受优惠\"",[30,158311,328],{"class":321},[287,158313,158315],{"id":158314},"_363-not","3.6.3 not",[157,158317,158318],{},"取反。",[20,158320,158322],{"className":30516,"code":158321,"language":30518,"meta":25,"style":25},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[27,158323,158324,158333,158337,158346],{"__ignoreMap":25},[30,158325,158326,158329,158331],{"class":32,"line":33},[30,158327,158328],{"class":321},"is_closed ",[30,158330,367],{"class":317},[30,158332,125945],{"class":40},[30,158334,158335],{"class":32,"line":44},[30,158336,2582],{"emptyLinePlaceholder":245},[30,158338,158339,158341,158343],{"class":32,"line":52},[30,158340,1717],{"class":317},[30,158342,39068],{"class":317},[30,158344,158345],{"class":321}," is_closed:\n",[30,158347,158348,158350,158352,158355],{"class":32,"line":60},[30,158349,31437],{"class":40},[30,158351,322],{"class":321},[30,158353,158354],{"class":74},"\"店铺营业中\"",[30,158356,328],{"class":321},[15,158358,158360],{"id":158359},"_37-链式比较","3.7 链式比较",[157,158362,158363],{},"Python 支持链式比较：",[20,158365,158367],{"className":30516,"code":158366,"language":30518,"meta":25,"style":25},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[27,158368,158369,158378,158382,158399],{"__ignoreMap":25},[30,158370,158371,158373,158375],{"class":32,"line":33},[30,158372,155496],{"class":321},[30,158374,367],{"class":317},[30,158376,158377],{"class":40}," 85\n",[30,158379,158380],{"class":32,"line":44},[30,158381,2582],{"emptyLinePlaceholder":245},[30,158383,158384,158386,158388,158391,158393,158395,158397],{"class":32,"line":52},[30,158385,1717],{"class":317},[30,158387,4275],{"class":40},[30,158389,158390],{"class":317}," \u003C=",[30,158392,157921],{"class":321},[30,158394,1774],{"class":317},[30,158396,5936],{"class":40},[30,158398,3921],{"class":321},[30,158400,158401,158403,158405,158408],{"class":32,"line":60},[30,158402,31437],{"class":40},[30,158404,322],{"class":321},[30,158406,158407],{"class":74},"\"成绩合法\"",[30,158409,328],{"class":321},[157,158411,158412],{},"等价于：",[20,158414,158416],{"className":30516,"code":158415,"language":30518,"meta":25,"style":25},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[27,158417,158418,158438],{"__ignoreMap":25},[30,158419,158420,158422,158424,158426,158428,158430,158432,158434,158436],{"class":32,"line":33},[30,158421,1717],{"class":317},[30,158423,157921],{"class":321},[30,158425,1893],{"class":317},[30,158427,4275],{"class":40},[30,158429,120567],{"class":317},[30,158431,157921],{"class":321},[30,158433,1774],{"class":317},[30,158435,5936],{"class":40},[30,158437,3921],{"class":321},[30,158439,158440,158442,158444,158446],{"class":32,"line":44},[30,158441,31437],{"class":40},[30,158443,322],{"class":321},[30,158445,158407],{"class":74},[30,158447,328],{"class":321},[15,158449,158451],{"id":158450},"_38-真值和假值","3.8 真值和假值",[157,158453,116605,158454,158456],{},[27,158455,1717],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[157,158458,158459],{},"假值：",[20,158461,158463],{"className":30516,"code":158462,"language":30518,"meta":25,"style":25},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[27,158464,158465,158469,158474,158478,158482,158487,158491,158495,158500],{"__ignoreMap":25},[30,158466,158467],{"class":32,"line":33},[30,158468,157655],{"class":40},[30,158470,158471],{"class":32,"line":44},[30,158472,158473],{"class":40},"None\n",[30,158475,158476],{"class":32,"line":52},[30,158477,3267],{"class":40},[30,158479,158480],{"class":32,"line":60},[30,158481,32480],{"class":40},[30,158483,158484],{"class":32,"line":68},[30,158485,158486],{"class":74},"\"\"\n",[30,158488,158489],{"class":32,"line":80},[30,158490,32495],{"class":321},[30,158492,158493],{"class":32,"line":88},[30,158494,2158],{"class":321},[30,158496,158497],{"class":32,"line":96},[30,158498,158499],{"class":321},"{}\n",[30,158501,158502,158504],{"class":32,"line":104},[30,158503,155428],{"class":40},[30,158505,2158],{"class":321},[157,158507,15317],{},[20,158509,158511],{"className":30516,"code":158510,"language":30518,"meta":25,"style":25},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[27,158512,158513,158527,158531,158538,158558,158564],{"__ignoreMap":25},[30,158514,158515,158517,158519,158521,158523,158525],{"class":32,"line":33},[30,158516,146674],{"class":321},[30,158518,367],{"class":317},[30,158520,60743],{"class":40},[30,158522,322],{"class":321},[30,158524,152517],{"class":74},[30,158526,328],{"class":321},[30,158528,158529],{"class":32,"line":44},[30,158530,2582],{"emptyLinePlaceholder":245},[30,158532,158533,158535],{"class":32,"line":52},[30,158534,1717],{"class":317},[30,158536,158537],{"class":321}," name:\n",[30,158539,158540,158542,158544,158546,158548,158550,158552,158554,158556],{"class":32,"line":60},[30,158541,31437],{"class":40},[30,158543,322],{"class":321},[30,158545,373],{"class":317},[30,158547,157192],{"class":74},[30,158549,1216],{"class":40},[30,158551,79948],{"class":321},[30,158553,1266],{"class":40},[30,158555,571],{"class":74},[30,158557,328],{"class":321},[30,158559,158560,158562],{"class":32,"line":68},[30,158561,1884],{"class":317},[30,158563,3921],{"class":321},[30,158565,158566,158568,158570,158573],{"class":32,"line":80},[30,158567,31437],{"class":40},[30,158569,322],{"class":321},[30,158571,158572],{"class":74},"\"姓名不能为空\"",[30,158574,328],{"class":321},[15,158576,158578],{"id":158577},"_39-match语句","3.9 match语句",[157,158580,158581,158582,158584],{},"Python 3.10 开始支持 ",[27,158583,71403],{},"。它适合处理固定选项。",[20,158586,158588],{"className":30516,"code":158587,"language":30518,"meta":25,"style":25},"command = input(\"请输入命令:\")\n\nmatch command:\n    case \"start\":\n        print(\"启动\")\n    case \"stop\":\n        print(\"停止\")\n    case \"restart\":\n        print(\"重启\")\n    case _:\n        print(\"未知命令\")\n",[27,158589,158590,158606,158610,158617,158627,158638,158647,158658,158667,158678,158685],{"__ignoreMap":25},[30,158591,158592,158595,158597,158599,158601,158604],{"class":32,"line":33},[30,158593,158594],{"class":321},"command ",[30,158596,367],{"class":317},[30,158598,60743],{"class":40},[30,158600,322],{"class":321},[30,158602,158603],{"class":74},"\"请输入命令:\"",[30,158605,328],{"class":321},[30,158607,158608],{"class":32,"line":44},[30,158609,2582],{"emptyLinePlaceholder":245},[30,158611,158612,158614],{"class":32,"line":52},[30,158613,71403],{"class":317},[30,158615,158616],{"class":321}," command:\n",[30,158618,158619,158622,158625],{"class":32,"line":60},[30,158620,158621],{"class":317},"    case",[30,158623,158624],{"class":74}," \"start\"",[30,158626,3921],{"class":321},[30,158628,158629,158631,158633,158636],{"class":32,"line":68},[30,158630,32589],{"class":40},[30,158632,322],{"class":321},[30,158634,158635],{"class":74},"\"启动\"",[30,158637,328],{"class":321},[30,158639,158640,158642,158645],{"class":32,"line":80},[30,158641,158621],{"class":317},[30,158643,158644],{"class":74}," \"stop\"",[30,158646,3921],{"class":321},[30,158648,158649,158651,158653,158656],{"class":32,"line":88},[30,158650,32589],{"class":40},[30,158652,322],{"class":321},[30,158654,158655],{"class":74},"\"停止\"",[30,158657,328],{"class":321},[30,158659,158660,158662,158665],{"class":32,"line":96},[30,158661,158621],{"class":317},[30,158663,158664],{"class":74}," \"restart\"",[30,158666,3921],{"class":321},[30,158668,158669,158671,158673,158676],{"class":32,"line":104},[30,158670,32589],{"class":40},[30,158672,322],{"class":321},[30,158674,158675],{"class":74},"\"重启\"",[30,158677,328],{"class":321},[30,158679,158680,158682],{"class":32,"line":112},[30,158681,158621],{"class":317},[30,158683,158684],{"class":321}," _:\n",[30,158686,158687,158689,158691,158694],{"class":32,"line":123},[30,158688,32589],{"class":40},[30,158690,322],{"class":321},[30,158692,158693],{"class":74},"\"未知命令\"",[30,158695,328],{"class":321},[157,158697,158698,158699,158701,158702,158704],{},"入门阶段掌握 ",[27,158700,154796],{}," 更重要，",[27,158703,71403],{}," 可以作为补充。",[15,158706,158708],{"id":158707},"_310-小案例成绩等级","3.10 小案例：成绩等级",[157,158710,123430],{},[271,158712,158713,158716,158719],{},[150,158714,158715],{},"输入成绩。",[150,158717,158718],{},"判断成绩是否合法。",[150,158720,158721],{},"输出等级。",[157,158723,10217],{},[20,158725,158727],{"className":30516,"code":158726,"language":30518,"meta":25,"style":25},"score = float(input(\"请输入成绩:\"))\n\nif not 0 \u003C= score \u003C= 100:\n    print(\"成绩不合法\")\nelif score >= 90:\n    print(\"等级:A\")\nelif score >= 80:\n    print(\"等级:B\")\nelif score >= 70:\n    print(\"等级:C\")\nelif score >= 60:\n    print(\"等级:D\")\nelse:\n    print(\"等级:E\")\n",[27,158728,158729,158747,158751,158769,158780,158792,158803,158815,158826,158839,158850,158862,158873,158879],{"__ignoreMap":25},[30,158730,158731,158733,158735,158737,158739,158741,158743,158745],{"class":32,"line":33},[30,158732,155496],{"class":321},[30,158734,367],{"class":317},[30,158736,109935],{"class":40},[30,158738,322],{"class":321},[30,158740,53959],{"class":40},[30,158742,322],{"class":321},[30,158744,152547],{"class":74},[30,158746,30635],{"class":321},[30,158748,158749],{"class":32,"line":44},[30,158750,2582],{"emptyLinePlaceholder":245},[30,158752,158753,158755,158757,158759,158761,158763,158765,158767],{"class":32,"line":52},[30,158754,1717],{"class":317},[30,158756,39068],{"class":317},[30,158758,4275],{"class":40},[30,158760,158390],{"class":317},[30,158762,157921],{"class":321},[30,158764,1774],{"class":317},[30,158766,5936],{"class":40},[30,158768,3921],{"class":321},[30,158770,158771,158773,158775,158778],{"class":32,"line":60},[30,158772,31437],{"class":40},[30,158774,322],{"class":321},[30,158776,158777],{"class":74},"\"成绩不合法\"",[30,158779,328],{"class":321},[30,158781,158782,158784,158786,158788,158790],{"class":32,"line":68},[30,158783,157944],{"class":317},[30,158785,157921],{"class":321},[30,158787,1893],{"class":317},[30,158789,157926],{"class":40},[30,158791,3921],{"class":321},[30,158793,158794,158796,158798,158801],{"class":32,"line":80},[30,158795,31437],{"class":40},[30,158797,322],{"class":321},[30,158799,158800],{"class":74},"\"等级:A\"",[30,158802,328],{"class":321},[30,158804,158805,158807,158809,158811,158813],{"class":32,"line":88},[30,158806,157944],{"class":317},[30,158808,157921],{"class":321},[30,158810,1893],{"class":317},[30,158812,157951],{"class":40},[30,158814,3921],{"class":321},[30,158816,158817,158819,158821,158824],{"class":32,"line":96},[30,158818,31437],{"class":40},[30,158820,322],{"class":321},[30,158822,158823],{"class":74},"\"等级:B\"",[30,158825,328],{"class":321},[30,158827,158828,158830,158832,158834,158837],{"class":32,"line":104},[30,158829,157944],{"class":317},[30,158831,157921],{"class":321},[30,158833,1893],{"class":317},[30,158835,158836],{"class":40}," 70",[30,158838,3921],{"class":321},[30,158840,158841,158843,158845,158848],{"class":32,"line":112},[30,158842,31437],{"class":40},[30,158844,322],{"class":321},[30,158846,158847],{"class":74},"\"等级:C\"",[30,158849,328],{"class":321},[30,158851,158852,158854,158856,158858,158860],{"class":32,"line":123},[30,158853,157944],{"class":317},[30,158855,157921],{"class":321},[30,158857,1893],{"class":317},[30,158859,157975],{"class":40},[30,158861,3921],{"class":321},[30,158863,158864,158866,158868,158871],{"class":32,"line":131},[30,158865,31437],{"class":40},[30,158867,322],{"class":321},[30,158869,158870],{"class":74},"\"等级:D\"",[30,158872,328],{"class":321},[30,158874,158875,158877],{"class":32,"line":142},[30,158876,1884],{"class":317},[30,158878,3921],{"class":321},[30,158880,158881,158883,158885,158888],{"class":32,"line":1811},[30,158882,31437],{"class":40},[30,158884,322],{"class":321},[30,158886,158887],{"class":74},"\"等级:E\"",[30,158889,328],{"class":321},[15,158891,158893],{"id":158892},"_311-小案例会员折扣","3.11 小案例：会员折扣",[157,158895,123430],{},[271,158897,158898,158901,158904,158907],{},[150,158899,158900],{},"输入消费金额。",[150,158902,158903],{},"输入会员等级，普通、银卡、金卡。",[150,158905,158906],{},"普通不打折，银卡 9 折，金卡 8 折。",[150,158908,158909],{},"满 500 再减 50。",[157,158911,10217],{},[20,158913,158915],{"className":30516,"code":158914,"language":30518,"meta":25,"style":25},"amount = float(input(\"请输入消费金额:\"))\nlevel = input(\"请输入会员等级(普通\u002F银卡\u002F金卡):\")\n\ndiscount = 1\n\nif level == \"银卡\":\n    discount = 0.9\nelif level == \"金卡\":\n    discount = 0.8\nelif level == \"普通\":\n    discount = 1\nelse:\n    print(\"会员等级输入错误，按普通会员计算\")\n\npay = amount * discount\n\nif pay >= 500:\n    pay -= 50\n\nprint(f\"应付金额:{pay:.2f}元\")\n",[27,158916,158917,158937,158953,158957,158965,158969,158983,158993,159006,159015,159028,159036,159042,159053,159057,159071,159075,159089,159099,159103],{"__ignoreMap":25},[30,158918,158919,158922,158924,158926,158928,158930,158932,158935],{"class":32,"line":33},[30,158920,158921],{"class":321},"amount ",[30,158923,367],{"class":317},[30,158925,109935],{"class":40},[30,158927,322],{"class":321},[30,158929,53959],{"class":40},[30,158931,322],{"class":321},[30,158933,158934],{"class":74},"\"请输入消费金额:\"",[30,158936,30635],{"class":321},[30,158938,158939,158942,158944,158946,158948,158951],{"class":32,"line":44},[30,158940,158941],{"class":321},"level ",[30,158943,367],{"class":317},[30,158945,60743],{"class":40},[30,158947,322],{"class":321},[30,158949,158950],{"class":74},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[30,158952,328],{"class":321},[30,158954,158955],{"class":32,"line":52},[30,158956,2582],{"emptyLinePlaceholder":245},[30,158958,158959,158961,158963],{"class":32,"line":60},[30,158960,157374],{"class":321},[30,158962,367],{"class":317},[30,158964,55837],{"class":40},[30,158966,158967],{"class":32,"line":68},[30,158968,2582],{"emptyLinePlaceholder":245},[30,158970,158971,158973,158976,158978,158981],{"class":32,"line":80},[30,158972,1717],{"class":317},[30,158974,158975],{"class":321}," level ",[30,158977,3131],{"class":317},[30,158979,158980],{"class":74}," \"银卡\"",[30,158982,3921],{"class":321},[30,158984,158985,158988,158990],{"class":32,"line":88},[30,158986,158987],{"class":321},"    discount ",[30,158989,367],{"class":317},[30,158991,158992],{"class":40}," 0.9\n",[30,158994,158995,158997,158999,159001,159004],{"class":32,"line":96},[30,158996,157944],{"class":317},[30,158998,158975],{"class":321},[30,159000,3131],{"class":317},[30,159002,159003],{"class":74}," \"金卡\"",[30,159005,3921],{"class":321},[30,159007,159008,159010,159012],{"class":32,"line":104},[30,159009,158987],{"class":321},[30,159011,367],{"class":317},[30,159013,159014],{"class":40}," 0.8\n",[30,159016,159017,159019,159021,159023,159026],{"class":32,"line":112},[30,159018,157944],{"class":317},[30,159020,158975],{"class":321},[30,159022,3131],{"class":317},[30,159024,159025],{"class":74}," \"普通\"",[30,159027,3921],{"class":321},[30,159029,159030,159032,159034],{"class":32,"line":123},[30,159031,158987],{"class":321},[30,159033,367],{"class":317},[30,159035,55837],{"class":40},[30,159037,159038,159040],{"class":32,"line":131},[30,159039,1884],{"class":317},[30,159041,3921],{"class":321},[30,159043,159044,159046,159048,159051],{"class":32,"line":142},[30,159045,31437],{"class":40},[30,159047,322],{"class":321},[30,159049,159050],{"class":74},"\"会员等级输入错误，按普通会员计算\"",[30,159052,328],{"class":321},[30,159054,159055],{"class":32,"line":1811},[30,159056,2582],{"emptyLinePlaceholder":245},[30,159058,159059,159062,159064,159067,159069],{"class":32,"line":1825},[30,159060,159061],{"class":321},"pay ",[30,159063,367],{"class":317},[30,159065,159066],{"class":321}," amount ",[30,159068,775],{"class":317},[30,159070,157413],{"class":321},[30,159072,159073],{"class":32,"line":1830},[30,159074,2582],{"emptyLinePlaceholder":245},[30,159076,159077,159079,159082,159084,159087],{"class":32,"line":1836},[30,159078,1717],{"class":317},[30,159080,159081],{"class":321}," pay ",[30,159083,1893],{"class":317},[30,159085,159086],{"class":40}," 500",[30,159088,3921],{"class":321},[30,159090,159091,159094,159096],{"class":32,"line":1857},[30,159092,159093],{"class":321},"    pay ",[30,159095,150390],{"class":317},[30,159097,159098],{"class":40}," 50\n",[30,159100,159101],{"class":32,"line":1862},[30,159102,2582],{"emptyLinePlaceholder":245},[30,159104,159105,159107,159109,159111,159113,159115,159118,159120,159122,159124],{"class":32,"line":1876},[30,159106,30553],{"class":40},[30,159108,322],{"class":321},[30,159110,373],{"class":317},[30,159112,157494],{"class":74},[30,159114,1216],{"class":40},[30,159116,159117],{"class":321},"pay",[30,159119,157297],{"class":317},[30,159121,1266],{"class":40},[30,159123,157150],{"class":74},[30,159125,328],{"class":321},[15,159127,159129],{"id":159128},"_312-易错点","3.12 易错点",[271,159131,159132,159135,159138,159141,159146],{},[150,159133,159134],{},"冒号不能漏。",[150,159136,159137],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[150,159139,159140],{},"多分支判断要注意顺序。",[150,159142,159143,159144,28523],{},"判断相等用 ",[27,159145,3131],{},[150,159147,159148],{},"字符串比较区分大小写：",[20,159150,159152],{"className":30516,"code":159151,"language":30518,"meta":25,"style":25},"\"Y\" == \"y\"  # False\n",[27,159153,159154],{"__ignoreMap":25},[30,159155,159156,159159,159161,159163],{"class":32,"line":33},[30,159157,159158],{"class":74},"\"Y\"",[30,159160,101697],{"class":317},[30,159162,158143],{"class":74},[30,159164,159165],{"class":379},"  # False\n",[157,159167,159168],{},"可转换后再判断：",[20,159170,159172],{"className":30516,"code":159171,"language":30518,"meta":25,"style":25},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[27,159173,159174,159191,159204],{"__ignoreMap":25},[30,159175,159176,159179,159181,159183,159185,159188],{"class":32,"line":33},[30,159177,159178],{"class":321},"answer ",[30,159180,367],{"class":317},[30,159182,60743],{"class":40},[30,159184,322],{"class":321},[30,159186,159187],{"class":74},"\"是否继续(y\u002Fn):\"",[30,159189,159190],{"class":321},").lower()\n",[30,159192,159193,159195,159198,159200,159202],{"class":32,"line":44},[30,159194,1717],{"class":317},[30,159196,159197],{"class":321}," answer ",[30,159199,3131],{"class":317},[30,159201,158143],{"class":74},[30,159203,3921],{"class":321},[30,159205,159206,159208,159210,159213],{"class":32,"line":52},[30,159207,31437],{"class":40},[30,159209,322],{"class":321},[30,159211,159212],{"class":74},"\"继续\"",[30,159214,328],{"class":321},[15,159216,159218],{"id":159217},"_313-本章练习","3.13 本章练习",[271,159220,159221,159224,159227,159230,159240],{},[150,159222,159223],{},"输入年龄，判断是否成年。",[150,159225,159226],{},"输入年份，判断是否为闰年。",[150,159228,159229],{},"输入三个数字，输出最大值。",[150,159231,159232,159233,159236,159237,159239],{},"写登录判断：用户名是 ",[27,159234,159235],{},"admin"," 且密码是 ",[27,159238,15266],{}," 才登录成功。",[150,159241,159242],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[234,159244,159245],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":44,"depth":44,"links":159247},[159248,159249,159250,159251,159252,159253,159258,159259,159260,159261,159262,159263,159264],{"id":157636,"depth":44,"text":157637},{"id":157689,"depth":44,"text":157690},{"id":157793,"depth":44,"text":157794},{"id":157883,"depth":44,"text":157884},{"id":158073,"depth":44,"text":158074},{"id":158196,"depth":44,"text":158197,"children":159254},[159255,159256,159257],{"id":158200,"depth":52,"text":158201},{"id":158257,"depth":52,"text":158258},{"id":158314,"depth":52,"text":158315},{"id":158359,"depth":44,"text":158360},{"id":158450,"depth":44,"text":158451},{"id":158577,"depth":44,"text":158578},{"id":158707,"depth":44,"text":158708},{"id":158892,"depth":44,"text":158893},{"id":159128,"depth":44,"text":159129},{"id":159217,"depth":44,"text":159218},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157628,"description":242},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159271,"title":159272,"body":159273,"description":242,"extension":243,"meta":161042,"navigation":245,"path":161043,"seo":161044,"stem":161045,"__hash__":161046},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159274,"toc":161022},[159275,159278,159282,159288,159291,159308,159312,159314,159331,159333,159378,159380,159397,159401,159404,159470,159473,159491,159495,159656,159665,159669,159673,159678,159725,159727,159733,159737,159742,159789,159791,159797,159801,159806,159842,159845,159892,159896,159902,159960,159965,159996,160001,160005,160060,160063,160135,160138,160197,160201,160204,160279,160282,160286,160392,160395,160421,160425,160437,160506,160509,160601,160605,160607,160618,160620,160750,160754,160956,160964,160968,160998,161002,161019],[10,159276,159272],{"id":159277},"_4-循环语句",[15,159279,159281],{"id":159280},"_41-为什么需要循环","4.1 为什么需要循环",[157,159283,159284,159285,159287],{},"如果要输出 1 到 100，不应该写 100 行 ",[27,159286,146610],{},"，而应该用循环。",[157,159289,159290],{},"循环适合处理重复任务：",[271,159292,159293,159296,159299,159302,159305],{},[150,159294,159295],{},"重复输出。",[150,159297,159298],{},"重复输入。",[150,159300,159301],{},"遍历数据。",[150,159303,159304],{},"持续执行菜单。",[150,159306,159307],{},"批量处理文件或数据。",[15,159309,159311],{"id":159310},"_42-while循环","4.2 while循环",[157,159313,5363],{},[20,159315,159317],{"className":30516,"code":159316,"language":30518,"meta":25,"style":25},"while 条件:\n    循环体\n",[27,159318,159319,159326],{"__ignoreMap":25},[30,159320,159321,159323],{"class":32,"line":33},[30,159322,108801],{"class":317},[30,159324,159325],{"class":321}," 条件:\n",[30,159327,159328],{"class":32,"line":44},[30,159329,159330],{"class":321},"    循环体\n",[157,159332,15317],{},[20,159334,159336],{"className":30516,"code":159335,"language":30518,"meta":25,"style":25},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[27,159337,159338,159346,159350,159362,159369],{"__ignoreMap":25},[30,159339,159340,159342,159344],{"class":32,"line":33},[30,159341,100286],{"class":321},[30,159343,367],{"class":317},[30,159345,55837],{"class":40},[30,159347,159348],{"class":32,"line":44},[30,159349,2582],{"emptyLinePlaceholder":245},[30,159351,159352,159354,159356,159358,159360],{"class":32,"line":52},[30,159353,108801],{"class":317},[30,159355,9620],{"class":321},[30,159357,1774],{"class":317},[30,159359,2330],{"class":40},[30,159361,3921],{"class":321},[30,159363,159364,159366],{"class":32,"line":60},[30,159365,31437],{"class":40},[30,159367,159368],{"class":321},"(i)\n",[30,159370,159371,159374,159376],{"class":32,"line":68},[30,159372,159373],{"class":321},"    i ",[30,159375,9659],{"class":317},[30,159377,55837],{"class":40},[157,159379,81067],{},[271,159381,159382,159388,159391,159394],{},[150,159383,159384,159385,28523],{},"判断条件 ",[27,159386,159387],{},"i \u003C= 5",[150,159389,159390],{},"条件成立，执行循环体。",[150,159392,159393],{},"执行完后回到条件判断。",[150,159395,159396],{},"条件不成立，退出循环。",[15,159398,159400],{"id":159399},"_43-while累加","4.3 while累加",[157,159402,159403],{},"计算 1 到 100 的和：",[20,159405,159407],{"className":30516,"code":159406,"language":30518,"meta":25,"style":25},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[27,159408,159409,159417,159425,159429,159441,159451,159459,159463],{"__ignoreMap":25},[30,159410,159411,159413,159415],{"class":32,"line":33},[30,159412,100286],{"class":321},[30,159414,367],{"class":317},[30,159416,55837],{"class":40},[30,159418,159419,159421,159423],{"class":32,"line":44},[30,159420,157398],{"class":321},[30,159422,367],{"class":317},[30,159424,47471],{"class":40},[30,159426,159427],{"class":32,"line":52},[30,159428,2582],{"emptyLinePlaceholder":245},[30,159430,159431,159433,159435,159437,159439],{"class":32,"line":60},[30,159432,108801],{"class":317},[30,159434,9620],{"class":321},[30,159436,1774],{"class":317},[30,159438,5936],{"class":40},[30,159440,3921],{"class":321},[30,159442,159443,159446,159448],{"class":32,"line":68},[30,159444,159445],{"class":321},"    total ",[30,159447,9659],{"class":317},[30,159449,159450],{"class":321}," i\n",[30,159452,159453,159455,159457],{"class":32,"line":80},[30,159454,159373],{"class":321},[30,159456,9659],{"class":317},[30,159458,55837],{"class":40},[30,159460,159461],{"class":32,"line":88},[30,159462,2582],{"emptyLinePlaceholder":245},[30,159464,159465,159467],{"class":32,"line":96},[30,159466,30553],{"class":40},[30,159468,159469],{"class":321},"(total)\n",[157,159471,159472],{},"核心思想：",[271,159474,159475,159480,159485],{},[150,159476,159477,159479],{},[27,159478,761],{}," 控制循环次数。",[150,159481,159482,159484],{},[27,159483,157499],{}," 保存累加结果。",[150,159486,159487,159488,159490],{},"每轮循环都要更新 ",[27,159489,761],{},"，否则可能死循环。",[15,159492,159494],{"id":159493},"_44-while猜数字","4.4 while猜数字",[20,159496,159498],{"className":30516,"code":159497,"language":30518,"meta":25,"style":25},"import random\n\nanswer = random.randint(1, 100)\ncount = 0\n\nwhile True:\n    guess = int(input(\"请输入1到100之间的数字:\"))\n    count += 1\n\n    if guess > answer:\n        print(\"猜大了\")\n    elif guess \u003C answer:\n        print(\"猜小了\")\n    else:\n        print(f\"猜对了，一共猜了{count}次\")\n        break\n",[27,159499,159500,159506,159510,159527,159535,159539,159547,159567,159576,159580,159592,159603,159613,159624,159630,159652],{"__ignoreMap":25},[30,159501,159502,159504],{"class":32,"line":33},[30,159503,30530],{"class":317},[30,159505,45466],{"class":321},[30,159507,159508],{"class":32,"line":44},[30,159509,2582],{"emptyLinePlaceholder":245},[30,159511,159512,159514,159516,159519,159521,159523,159525],{"class":32,"line":52},[30,159513,159178],{"class":321},[30,159515,367],{"class":317},[30,159517,159518],{"class":321}," random.randint(",[30,159520,537],{"class":40},[30,159522,12617],{"class":321},[30,159524,631],{"class":40},[30,159526,328],{"class":321},[30,159528,159529,159531,159533],{"class":32,"line":60},[30,159530,146829],{"class":321},[30,159532,367],{"class":317},[30,159534,47471],{"class":40},[30,159536,159537],{"class":32,"line":68},[30,159538,2582],{"emptyLinePlaceholder":245},[30,159540,159541,159543,159545],{"class":32,"line":80},[30,159542,108801],{"class":317},[30,159544,95430],{"class":40},[30,159546,3921],{"class":321},[30,159548,159549,159552,159554,159556,159558,159560,159562,159565],{"class":32,"line":88},[30,159550,159551],{"class":321},"    guess ",[30,159553,367],{"class":317},[30,159555,2564],{"class":40},[30,159557,322],{"class":321},[30,159559,53959],{"class":40},[30,159561,322],{"class":321},[30,159563,159564],{"class":74},"\"请输入1到100之间的数字:\"",[30,159566,30635],{"class":321},[30,159568,159569,159572,159574],{"class":32,"line":96},[30,159570,159571],{"class":321},"    count ",[30,159573,9659],{"class":317},[30,159575,55837],{"class":40},[30,159577,159578],{"class":32,"line":104},[30,159579,2582],{"emptyLinePlaceholder":245},[30,159581,159582,159584,159587,159589],{"class":32,"line":112},[30,159583,3283],{"class":317},[30,159585,159586],{"class":321}," guess ",[30,159588,1280],{"class":317},[30,159590,159591],{"class":321}," answer:\n",[30,159593,159594,159596,159598,159601],{"class":32,"line":123},[30,159595,32589],{"class":40},[30,159597,322],{"class":321},[30,159599,159600],{"class":74},"\"猜大了\"",[30,159602,328],{"class":321},[30,159604,159605,159607,159609,159611],{"class":32,"line":131},[30,159606,39431],{"class":317},[30,159608,159586],{"class":321},[30,159610,1230],{"class":317},[30,159612,159591],{"class":321},[30,159614,159615,159617,159619,159622],{"class":32,"line":142},[30,159616,32589],{"class":40},[30,159618,322],{"class":321},[30,159620,159621],{"class":74},"\"猜小了\"",[30,159623,328],{"class":321},[30,159625,159626,159628],{"class":32,"line":1811},[30,159627,158160],{"class":317},[30,159629,3921],{"class":321},[30,159631,159632,159634,159636,159638,159641,159643,159645,159647,159650],{"class":32,"line":1825},[30,159633,32589],{"class":40},[30,159635,322],{"class":321},[30,159637,373],{"class":317},[30,159639,159640],{"class":74},"\"猜对了，一共猜了",[30,159642,1216],{"class":40},[30,159644,84572],{"class":321},[30,159646,1266],{"class":40},[30,159648,159649],{"class":74},"次\"",[30,159651,328],{"class":321},[30,159653,159654],{"class":32,"line":1830},[30,159655,31765],{"class":317},[157,159657,159658,159661,159662,159664],{},[27,159659,159660],{},"while True"," 表示无限循环，通常配合 ",[27,159663,2235],{}," 使用。",[15,159666,159668],{"id":159667},"_45-break和continue","4.5 break和continue",[287,159670,159672],{"id":159671},"_451-break","4.5.1 break",[157,159674,159675,159677],{},[27,159676,2235],{}," 直接结束整个循环。",[20,159679,159681],{"className":30516,"code":159680,"language":30518,"meta":25,"style":25},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[27,159682,159683,159703,159715,159719],{"__ignoreMap":25},[30,159684,159685,159687,159689,159691,159693,159695,159697,159699,159701],{"class":32,"line":33},[30,159686,3207],{"class":317},[30,159688,9620],{"class":321},[30,159690,26181],{"class":317},[30,159692,32581],{"class":40},[30,159694,322],{"class":321},[30,159696,537],{"class":40},[30,159698,12617],{"class":321},[30,159700,664],{"class":40},[30,159702,30924],{"class":321},[30,159704,159705,159707,159709,159711,159713],{"class":32,"line":44},[30,159706,3283],{"class":317},[30,159708,9620],{"class":321},[30,159710,3131],{"class":317},[30,159712,78208],{"class":40},[30,159714,3921],{"class":321},[30,159716,159717],{"class":32,"line":52},[30,159718,31765],{"class":317},[30,159720,159721,159723],{"class":32,"line":60},[30,159722,31437],{"class":40},[30,159724,159368],{"class":321},[157,159726,146595],{},[20,159728,159731],{"className":159729,"code":159730,"language":5369,"meta":25},[5367],"1\n2\n",[27,159732,159730],{"__ignoreMap":25},[287,159734,159736],{"id":159735},"_452-continue","4.5.2 continue",[157,159738,159739,159741],{},[27,159740,154810],{}," 跳过本轮剩余代码，进入下一轮循环。",[20,159743,159745],{"className":30516,"code":159744,"language":30518,"meta":25,"style":25},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[27,159746,159747,159767,159779,159783],{"__ignoreMap":25},[30,159748,159749,159751,159753,159755,159757,159759,159761,159763,159765],{"class":32,"line":33},[30,159750,3207],{"class":317},[30,159752,9620],{"class":321},[30,159754,26181],{"class":317},[30,159756,32581],{"class":40},[30,159758,322],{"class":321},[30,159760,537],{"class":40},[30,159762,12617],{"class":321},[30,159764,664],{"class":40},[30,159766,30924],{"class":321},[30,159768,159769,159771,159773,159775,159777],{"class":32,"line":44},[30,159770,3283],{"class":317},[30,159772,9620],{"class":321},[30,159774,3131],{"class":317},[30,159776,78208],{"class":40},[30,159778,3921],{"class":321},[30,159780,159781],{"class":32,"line":52},[30,159782,148650],{"class":317},[30,159784,159785,159787],{"class":32,"line":60},[30,159786,31437],{"class":40},[30,159788,159368],{"class":321},[157,159790,146595],{},[20,159792,159795],{"className":159793,"code":159794,"language":5369,"meta":25},[5367],"1\n2\n4\n5\n",[27,159796,159794],{"__ignoreMap":25},[15,159798,159800],{"id":159799},"_46-for循环","4.6 for循环",[157,159802,159803,159805],{},[27,159804,3207],{}," 常用于遍历序列。",[20,159807,159809],{"className":30516,"code":159808,"language":30518,"meta":25,"style":25},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[27,159810,159811,159820,159824,159835],{"__ignoreMap":25},[30,159812,159813,159815,159817],{"class":32,"line":33},[30,159814,146674],{"class":321},[30,159816,367],{"class":317},[30,159818,159819],{"class":74}," \"python\"\n",[30,159821,159822],{"class":32,"line":44},[30,159823,2582],{"emptyLinePlaceholder":245},[30,159825,159826,159828,159831,159833],{"class":32,"line":52},[30,159827,3207],{"class":317},[30,159829,159830],{"class":321}," ch ",[30,159832,26181],{"class":317},[30,159834,158537],{"class":321},[30,159836,159837,159839],{"class":32,"line":60},[30,159838,31437],{"class":40},[30,159840,159841],{"class":321},"(ch)\n",[157,159843,159844],{},"遍历列表：",[20,159846,159848],{"className":30516,"code":159847,"language":30518,"meta":25,"style":25},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[27,159849,159850,159872,159876,159886],{"__ignoreMap":25},[30,159851,159852,159855,159857,159859,159861,159863,159865,159867,159870],{"class":32,"line":33},[30,159853,159854],{"class":321},"students ",[30,159856,367],{"class":317},[30,159858,52364],{"class":321},[30,159860,150026],{"class":74},[30,159862,12617],{"class":321},[30,159864,151074],{"class":74},[30,159866,12617],{"class":321},[30,159868,159869],{"class":74},"\"小刚\"",[30,159871,33384],{"class":321},[30,159873,159874],{"class":32,"line":44},[30,159875,2582],{"emptyLinePlaceholder":245},[30,159877,159878,159880,159882,159884],{"class":32,"line":52},[30,159879,3207],{"class":317},[30,159881,152275],{"class":321},[30,159883,26181],{"class":317},[30,159885,152280],{"class":321},[30,159887,159888,159890],{"class":32,"line":60},[30,159889,31437],{"class":40},[30,159891,150180],{"class":321},[15,159893,159895],{"id":159894},"_47-range函数","4.7 range函数",[157,159897,159898,159901],{},[27,159899,159900],{},"range()"," 用于生成整数序列。",[20,159903,159905],{"className":30516,"code":159904,"language":30518,"meta":25,"style":25},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[27,159906,159907,159921,159939],{"__ignoreMap":25},[30,159908,159909,159911,159913,159915,159918],{"class":32,"line":33},[30,159910,33554],{"class":40},[30,159912,322],{"class":321},[30,159914,639],{"class":40},[30,159916,159917],{"class":321},")          ",[30,159919,159920],{"class":379},"# 0,1,2,3,4\n",[30,159922,159923,159925,159927,159929,159931,159933,159936],{"class":32,"line":44},[30,159924,33554],{"class":40},[30,159926,322],{"class":321},[30,159928,537],{"class":40},[30,159930,12617],{"class":321},[30,159932,639],{"class":40},[30,159934,159935],{"class":321},")       ",[30,159937,159938],{"class":379},"# 1,2,3,4\n",[30,159940,159941,159943,159945,159947,159949,159951,159953,159955,159957],{"class":32,"line":52},[30,159942,33554],{"class":40},[30,159944,322],{"class":321},[30,159946,537],{"class":40},[30,159948,12617],{"class":321},[30,159950,766],{"class":40},[30,159952,12617],{"class":321},[30,159954,398],{"class":40},[30,159956,155799],{"class":321},[30,159958,159959],{"class":379},"# 1,3,5,7,9\n",[157,159961,159962,159963,24799],{},"配合 ",[27,159964,3207],{},[20,159966,159968],{"className":30516,"code":159967,"language":30518,"meta":25,"style":25},"for i in range(1, 6):\n    print(i)\n",[27,159969,159970,159990],{"__ignoreMap":25},[30,159971,159972,159974,159976,159978,159980,159982,159984,159986,159988],{"class":32,"line":33},[30,159973,3207],{"class":317},[30,159975,9620],{"class":321},[30,159977,26181],{"class":317},[30,159979,32581],{"class":40},[30,159981,322],{"class":321},[30,159983,537],{"class":40},[30,159985,12617],{"class":321},[30,159987,664],{"class":40},[30,159989,30924],{"class":321},[30,159991,159992,159994],{"class":32,"line":44},[30,159993,31437],{"class":40},[30,159995,159368],{"class":321},[157,159997,9207,159998,160000],{},[27,159999,33554],{}," 的结束值不包含在内。",[15,160002,160004],{"id":160003},"_48-for循环求和","4.8 for循环求和",[20,160006,160008],{"className":30516,"code":160007,"language":30518,"meta":25,"style":25},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[27,160009,160010,160018,160022,160042,160050,160054],{"__ignoreMap":25},[30,160011,160012,160014,160016],{"class":32,"line":33},[30,160013,157398],{"class":321},[30,160015,367],{"class":317},[30,160017,47471],{"class":40},[30,160019,160020],{"class":32,"line":44},[30,160021,2582],{"emptyLinePlaceholder":245},[30,160023,160024,160026,160028,160030,160032,160034,160036,160038,160040],{"class":32,"line":52},[30,160025,3207],{"class":317},[30,160027,9620],{"class":321},[30,160029,26181],{"class":317},[30,160031,32581],{"class":40},[30,160033,322],{"class":321},[30,160035,537],{"class":40},[30,160037,12617],{"class":321},[30,160039,657],{"class":40},[30,160041,30924],{"class":321},[30,160043,160044,160046,160048],{"class":32,"line":60},[30,160045,159445],{"class":321},[30,160047,9659],{"class":317},[30,160049,159450],{"class":321},[30,160051,160052],{"class":32,"line":68},[30,160053,2582],{"emptyLinePlaceholder":245},[30,160055,160056,160058],{"class":32,"line":80},[30,160057,30553],{"class":40},[30,160059,159469],{"class":321},[157,160061,160062],{},"求偶数和：",[20,160064,160066],{"className":30516,"code":160065,"language":30518,"meta":25,"style":25},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[27,160067,160068,160076,160080,160100,160116,160125,160129],{"__ignoreMap":25},[30,160069,160070,160072,160074],{"class":32,"line":33},[30,160071,157398],{"class":321},[30,160073,367],{"class":317},[30,160075,47471],{"class":40},[30,160077,160078],{"class":32,"line":44},[30,160079,2582],{"emptyLinePlaceholder":245},[30,160081,160082,160084,160086,160088,160090,160092,160094,160096,160098],{"class":32,"line":52},[30,160083,3207],{"class":317},[30,160085,9620],{"class":321},[30,160087,26181],{"class":317},[30,160089,32581],{"class":40},[30,160091,322],{"class":321},[30,160093,537],{"class":40},[30,160095,12617],{"class":321},[30,160097,657],{"class":40},[30,160099,30924],{"class":321},[30,160101,160102,160104,160106,160108,160110,160112,160114],{"class":32,"line":60},[30,160103,3283],{"class":317},[30,160105,9620],{"class":321},[30,160107,648],{"class":317},[30,160109,14937],{"class":40},[30,160111,101697],{"class":317},[30,160113,4275],{"class":40},[30,160115,3921],{"class":321},[30,160117,160118,160121,160123],{"class":32,"line":68},[30,160119,160120],{"class":321},"        total ",[30,160122,9659],{"class":317},[30,160124,159450],{"class":321},[30,160126,160127],{"class":32,"line":80},[30,160128,2582],{"emptyLinePlaceholder":245},[30,160130,160131,160133],{"class":32,"line":88},[30,160132,30553],{"class":40},[30,160134,159469],{"class":321},[157,160136,160137],{},"也可以：",[20,160139,160141],{"className":30516,"code":160140,"language":30518,"meta":25,"style":25},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[27,160142,160143,160151,160155,160179,160187,160191],{"__ignoreMap":25},[30,160144,160145,160147,160149],{"class":32,"line":33},[30,160146,157398],{"class":321},[30,160148,367],{"class":317},[30,160150,47471],{"class":40},[30,160152,160153],{"class":32,"line":44},[30,160154,2582],{"emptyLinePlaceholder":245},[30,160156,160157,160159,160161,160163,160165,160167,160169,160171,160173,160175,160177],{"class":32,"line":52},[30,160158,3207],{"class":317},[30,160160,9620],{"class":321},[30,160162,26181],{"class":317},[30,160164,32581],{"class":40},[30,160166,322],{"class":321},[30,160168,398],{"class":40},[30,160170,12617],{"class":321},[30,160172,657],{"class":40},[30,160174,12617],{"class":321},[30,160176,398],{"class":40},[30,160178,30924],{"class":321},[30,160180,160181,160183,160185],{"class":32,"line":60},[30,160182,159445],{"class":321},[30,160184,9659],{"class":317},[30,160186,159450],{"class":321},[30,160188,160189],{"class":32,"line":68},[30,160190,2582],{"emptyLinePlaceholder":245},[30,160192,160193,160195],{"class":32,"line":80},[30,160194,30553],{"class":40},[30,160196,159469],{"class":321},[15,160198,160200],{"id":160199},"_49-循环嵌套","4.9 循环嵌套",[157,160202,160203],{},"嵌套循环就是循环里面再写循环。",[20,160205,160207],{"className":30516,"code":160206,"language":30518,"meta":25,"style":25},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[27,160208,160209,160229,160249],{"__ignoreMap":25},[30,160210,160211,160213,160215,160217,160219,160221,160223,160225,160227],{"class":32,"line":33},[30,160212,3207],{"class":317},[30,160214,9620],{"class":321},[30,160216,26181],{"class":317},[30,160218,32581],{"class":40},[30,160220,322],{"class":321},[30,160222,537],{"class":40},[30,160224,12617],{"class":321},[30,160226,613],{"class":40},[30,160228,30924],{"class":321},[30,160230,160231,160233,160235,160237,160239,160241,160243,160245,160247],{"class":32,"line":44},[30,160232,3383],{"class":317},[30,160234,9682],{"class":321},[30,160236,26181],{"class":317},[30,160238,32581],{"class":40},[30,160240,322],{"class":321},[30,160242,537],{"class":40},[30,160244,12617],{"class":321},[30,160246,613],{"class":40},[30,160248,30924],{"class":321},[30,160250,160251,160253,160255,160257,160260,160262,160264,160266,160269,160271,160273,160275,160277],{"class":32,"line":52},[30,160252,32589],{"class":40},[30,160254,322],{"class":321},[30,160256,373],{"class":317},[30,160258,160259],{"class":74},"\"i=",[30,160261,1216],{"class":40},[30,160263,761],{"class":321},[30,160265,1266],{"class":40},[30,160267,160268],{"class":74},", j=",[30,160270,1216],{"class":40},[30,160272,787],{"class":321},[30,160274,1266],{"class":40},[30,160276,571],{"class":74},[30,160278,328],{"class":321},[157,160280,160281],{},"外层循环执行一次，内层循环执行完整一轮。",[15,160283,160285],{"id":160284},"_410-九九乘法表","4.10 九九乘法表",[20,160287,160289],{"className":30516,"code":160288,"language":30518,"meta":25,"style":25},"for i in range(1, 10):\n    for j in range(1, i + 1):\n        print(f\"{j}*{i}={i * j}\", end=\"\\t\")\n    print()\n",[27,160290,160291,160311,160334,160386],{"__ignoreMap":25},[30,160292,160293,160295,160297,160299,160301,160303,160305,160307,160309],{"class":32,"line":33},[30,160294,3207],{"class":317},[30,160296,9620],{"class":321},[30,160298,26181],{"class":317},[30,160300,32581],{"class":40},[30,160302,322],{"class":321},[30,160304,537],{"class":40},[30,160306,12617],{"class":321},[30,160308,766],{"class":40},[30,160310,30924],{"class":321},[30,160312,160313,160315,160317,160319,160321,160323,160325,160328,160330,160332],{"class":32,"line":44},[30,160314,3383],{"class":317},[30,160316,9682],{"class":321},[30,160318,26181],{"class":317},[30,160320,32581],{"class":40},[30,160322,322],{"class":321},[30,160324,537],{"class":40},[30,160326,160327],{"class":321},", i ",[30,160329,801],{"class":317},[30,160331,25291],{"class":40},[30,160333,30924],{"class":321},[30,160335,160336,160338,160340,160342,160344,160346,160348,160350,160352,160354,160356,160358,160360,160362,160364,160366,160368,160370,160372,160374,160376,160378,160380,160382,160384],{"class":32,"line":52},[30,160337,32589],{"class":40},[30,160339,322],{"class":321},[30,160341,373],{"class":317},[30,160343,571],{"class":74},[30,160345,1216],{"class":40},[30,160347,787],{"class":321},[30,160349,1266],{"class":40},[30,160351,775],{"class":74},[30,160353,1216],{"class":40},[30,160355,761],{"class":321},[30,160357,1266],{"class":40},[30,160359,367],{"class":74},[30,160361,1216],{"class":40},[30,160363,100286],{"class":321},[30,160365,775],{"class":317},[30,160367,3592],{"class":321},[30,160369,1266],{"class":40},[30,160371,571],{"class":74},[30,160373,12617],{"class":321},[30,160375,45939],{"class":5398},[30,160377,367],{"class":317},[30,160379,571],{"class":74},[30,160381,1420],{"class":40},[30,160383,571],{"class":74},[30,160385,328],{"class":321},[30,160387,160388,160390],{"class":32,"line":60},[30,160389,31437],{"class":40},[30,160391,2158],{"class":321},[157,160393,160394],{},"关键点：",[271,160396,160397,160403,160409,160415],{},[150,160398,160399,160400,160402],{},"外层 ",[27,160401,761],{}," 控制行。",[150,160404,160405,160406,160408],{},"内层 ",[27,160407,787],{}," 控制列。",[150,160410,160411,160412,160414],{},"每行结束后用 ",[27,160413,146610],{}," 换行。",[150,160416,160417,160420],{},[27,160418,160419],{},"end=\"\\t\""," 让同一行的内容横向排列。",[15,160422,160424],{"id":160423},"_411-循环else","4.11 循环else",[157,160426,160427,160428,160430,160431,160433,160434,160436],{},"Python 的循环可以带 ",[27,160429,1884],{},"。当循环正常结束时执行 ",[27,160432,1884],{},"，如果被 ",[27,160435,2235],{}," 打断，则不执行。",[20,160438,160440],{"className":30516,"code":160439,"language":30518,"meta":25,"style":25},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[27,160441,160442,160462,160474,160485,160489,160495],{"__ignoreMap":25},[30,160443,160444,160446,160448,160450,160452,160454,160456,160458,160460],{"class":32,"line":33},[30,160445,3207],{"class":317},[30,160447,9620],{"class":321},[30,160449,26181],{"class":317},[30,160451,32581],{"class":40},[30,160453,322],{"class":321},[30,160455,537],{"class":40},[30,160457,12617],{"class":321},[30,160459,664],{"class":40},[30,160461,30924],{"class":321},[30,160463,160464,160466,160468,160470,160472],{"class":32,"line":44},[30,160465,3283],{"class":317},[30,160467,9620],{"class":321},[30,160469,3131],{"class":317},[30,160471,2220],{"class":40},[30,160473,3921],{"class":321},[30,160475,160476,160478,160480,160483],{"class":32,"line":52},[30,160477,32589],{"class":40},[30,160479,322],{"class":321},[30,160481,160482],{"class":74},"\"找到了\"",[30,160484,328],{"class":321},[30,160486,160487],{"class":32,"line":60},[30,160488,31765],{"class":317},[30,160490,160491,160493],{"class":32,"line":68},[30,160492,1884],{"class":317},[30,160494,3921],{"class":321},[30,160496,160497,160499,160501,160504],{"class":32,"line":80},[30,160498,31437],{"class":40},[30,160500,322],{"class":321},[30,160502,160503],{"class":74},"\"没找到\"",[30,160505,328],{"class":321},[157,160507,160508],{},"常用于搜索。",[20,160510,160512],{"className":30516,"code":160511,"language":30518,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[27,160513,160514,160535,160544,160548,160560,160571,160581,160585,160591],{"__ignoreMap":25},[30,160515,160516,160519,160521,160523,160525,160527,160529,160531,160533],{"class":32,"line":33},[30,160517,160518],{"class":321},"names ",[30,160520,367],{"class":317},[30,160522,52364],{"class":321},[30,160524,150026],{"class":74},[30,160526,12617],{"class":321},[30,160528,151074],{"class":74},[30,160530,12617],{"class":321},[30,160532,159869],{"class":74},[30,160534,33384],{"class":321},[30,160536,160537,160539,160541],{"class":32,"line":44},[30,160538,111716],{"class":321},[30,160540,367],{"class":317},[30,160542,160543],{"class":74}," \"小李\"\n",[30,160545,160546],{"class":32,"line":52},[30,160547,2582],{"emptyLinePlaceholder":245},[30,160549,160550,160552,160555,160557],{"class":32,"line":60},[30,160551,3207],{"class":317},[30,160553,160554],{"class":321}," name ",[30,160556,26181],{"class":317},[30,160558,160559],{"class":321}," names:\n",[30,160561,160562,160564,160566,160568],{"class":32,"line":68},[30,160563,3283],{"class":317},[30,160565,160554],{"class":321},[30,160567,3131],{"class":317},[30,160569,160570],{"class":321}," target:\n",[30,160572,160573,160575,160577,160579],{"class":32,"line":80},[30,160574,32589],{"class":40},[30,160576,322],{"class":321},[30,160578,160482],{"class":74},[30,160580,328],{"class":321},[30,160582,160583],{"class":32,"line":88},[30,160584,31765],{"class":317},[30,160586,160587,160589],{"class":32,"line":96},[30,160588,1884],{"class":317},[30,160590,3921],{"class":321},[30,160592,160593,160595,160597,160599],{"class":32,"line":104},[30,160594,31437],{"class":40},[30,160596,322],{"class":321},[30,160598,160503],{"class":74},[30,160600,328],{"class":321},[15,160602,160604],{"id":160603},"_412-小案例登录重试","4.12 小案例：登录重试",[157,160606,123430],{},[271,160608,160609,160612,160615],{},[150,160610,160611],{},"用户最多输入 3 次密码。",[150,160613,160614],{},"密码正确则登录成功。",[150,160616,160617],{},"3 次都错误则锁定账号。",[157,160619,10217],{},[20,160621,160623],{"className":30516,"code":160622,"language":30518,"meta":25,"style":25},"password = \"123456\"\n\nfor i in range(3):\n    user_password = input(\"请输入密码:\")\n\n    if user_password == password:\n        print(\"登录成功\")\n        break\n    else:\n        print(f\"密码错误，还剩{2 - i}次机会\")\nelse:\n    print(\"账号已锁定\")\n",[27,160624,160625,160635,160639,160655,160671,160675,160687,160698,160702,160708,160733,160739],{"__ignoreMap":25},[30,160626,160627,160630,160632],{"class":32,"line":33},[30,160628,160629],{"class":321},"password ",[30,160631,367],{"class":317},[30,160633,160634],{"class":74}," \"123456\"\n",[30,160636,160637],{"class":32,"line":44},[30,160638,2582],{"emptyLinePlaceholder":245},[30,160640,160641,160643,160645,160647,160649,160651,160653],{"class":32,"line":52},[30,160642,3207],{"class":317},[30,160644,9620],{"class":321},[30,160646,26181],{"class":317},[30,160648,32581],{"class":40},[30,160650,322],{"class":321},[30,160652,392],{"class":40},[30,160654,30924],{"class":321},[30,160656,160657,160660,160662,160664,160666,160669],{"class":32,"line":60},[30,160658,160659],{"class":321},"    user_password ",[30,160661,367],{"class":317},[30,160663,60743],{"class":40},[30,160665,322],{"class":321},[30,160667,160668],{"class":74},"\"请输入密码:\"",[30,160670,328],{"class":321},[30,160672,160673],{"class":32,"line":68},[30,160674,2582],{"emptyLinePlaceholder":245},[30,160676,160677,160679,160682,160684],{"class":32,"line":80},[30,160678,3283],{"class":317},[30,160680,160681],{"class":321}," user_password ",[30,160683,3131],{"class":317},[30,160685,160686],{"class":321}," password:\n",[30,160688,160689,160691,160693,160696],{"class":32,"line":88},[30,160690,32589],{"class":40},[30,160692,322],{"class":321},[30,160694,160695],{"class":74},"\"登录成功\"",[30,160697,328],{"class":321},[30,160699,160700],{"class":32,"line":96},[30,160701,31765],{"class":317},[30,160703,160704,160706],{"class":32,"line":104},[30,160705,158160],{"class":317},[30,160707,3921],{"class":321},[30,160709,160710,160712,160714,160716,160719,160722,160724,160726,160728,160731],{"class":32,"line":112},[30,160711,32589],{"class":40},[30,160713,322],{"class":321},[30,160715,373],{"class":317},[30,160717,160718],{"class":74},"\"密码错误，还剩",[30,160720,160721],{"class":40},"{2",[30,160723,52409],{"class":317},[30,160725,3214],{"class":321},[30,160727,1266],{"class":40},[30,160729,160730],{"class":74},"次机会\"",[30,160732,328],{"class":321},[30,160734,160735,160737],{"class":32,"line":123},[30,160736,1884],{"class":317},[30,160738,3921],{"class":321},[30,160740,160741,160743,160745,160748],{"class":32,"line":131},[30,160742,31437],{"class":40},[30,160744,322],{"class":321},[30,160746,160747],{"class":74},"\"账号已锁定\"",[30,160749,328],{"class":321},[15,160751,160753],{"id":160752},"_413-小案例菜单程序","4.13 小案例：菜单程序",[20,160755,160757],{"className":30516,"code":160756,"language":30518,"meta":25,"style":25},"while True:\n    print(\"====== 菜单 ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        print(\"余额为1000元\")\n    elif choice == \"2\":\n        print(\"存款功能\")\n    elif choice == \"3\":\n        print(\"取款功能\")\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[27,160758,160759,160767,160778,160789,160800,160811,160822,160826,160841,160845,160857,160868,160880,160891,160903,160914,160926,160936,160940,160946],{"__ignoreMap":25},[30,160760,160761,160763,160765],{"class":32,"line":33},[30,160762,108801],{"class":317},[30,160764,95430],{"class":40},[30,160766,3921],{"class":321},[30,160768,160769,160771,160773,160776],{"class":32,"line":44},[30,160770,31437],{"class":40},[30,160772,322],{"class":321},[30,160774,160775],{"class":74},"\"====== 菜单 ======\"",[30,160777,328],{"class":321},[30,160779,160780,160782,160784,160787],{"class":32,"line":52},[30,160781,31437],{"class":40},[30,160783,322],{"class":321},[30,160785,160786],{"class":74},"\"1. 查询余额\"",[30,160788,328],{"class":321},[30,160790,160791,160793,160795,160798],{"class":32,"line":60},[30,160792,31437],{"class":40},[30,160794,322],{"class":321},[30,160796,160797],{"class":74},"\"2. 存款\"",[30,160799,328],{"class":321},[30,160801,160802,160804,160806,160809],{"class":32,"line":68},[30,160803,31437],{"class":40},[30,160805,322],{"class":321},[30,160807,160808],{"class":74},"\"3. 取款\"",[30,160810,328],{"class":321},[30,160812,160813,160815,160817,160820],{"class":32,"line":80},[30,160814,31437],{"class":40},[30,160816,322],{"class":321},[30,160818,160819],{"class":74},"\"0. 退出\"",[30,160821,328],{"class":321},[30,160823,160824],{"class":32,"line":88},[30,160825,2582],{"emptyLinePlaceholder":245},[30,160827,160828,160831,160833,160835,160837,160839],{"class":32,"line":96},[30,160829,160830],{"class":321},"    choice ",[30,160832,367],{"class":317},[30,160834,60743],{"class":40},[30,160836,322],{"class":321},[30,160838,153211],{"class":74},[30,160840,328],{"class":321},[30,160842,160843],{"class":32,"line":104},[30,160844,2582],{"emptyLinePlaceholder":245},[30,160846,160847,160849,160851,160853,160855],{"class":32,"line":112},[30,160848,3283],{"class":317},[30,160850,153224],{"class":321},[30,160852,3131],{"class":317},[30,160854,153229],{"class":74},[30,160856,3921],{"class":321},[30,160858,160859,160861,160863,160866],{"class":32,"line":123},[30,160860,32589],{"class":40},[30,160862,322],{"class":321},[30,160864,160865],{"class":74},"\"余额为1000元\"",[30,160867,328],{"class":321},[30,160869,160870,160872,160874,160876,160878],{"class":32,"line":131},[30,160871,39431],{"class":317},[30,160873,153224],{"class":321},[30,160875,3131],{"class":317},[30,160877,153248],{"class":74},[30,160879,3921],{"class":321},[30,160881,160882,160884,160886,160889],{"class":32,"line":142},[30,160883,32589],{"class":40},[30,160885,322],{"class":321},[30,160887,160888],{"class":74},"\"存款功能\"",[30,160890,328],{"class":321},[30,160892,160893,160895,160897,160899,160901],{"class":32,"line":1811},[30,160894,39431],{"class":317},[30,160896,153224],{"class":321},[30,160898,3131],{"class":317},[30,160900,153266],{"class":74},[30,160902,3921],{"class":321},[30,160904,160905,160907,160909,160912],{"class":32,"line":1825},[30,160906,32589],{"class":40},[30,160908,322],{"class":321},[30,160910,160911],{"class":74},"\"取款功能\"",[30,160913,328],{"class":321},[30,160915,160916,160918,160920,160922,160924],{"class":32,"line":1830},[30,160917,39431],{"class":317},[30,160919,153224],{"class":321},[30,160921,3131],{"class":317},[30,160923,153320],{"class":74},[30,160925,3921],{"class":321},[30,160927,160928,160930,160932,160934],{"class":32,"line":1836},[30,160929,32589],{"class":40},[30,160931,322],{"class":321},[30,160933,153331],{"class":74},[30,160935,328],{"class":321},[30,160937,160938],{"class":32,"line":1857},[30,160939,31765],{"class":317},[30,160941,160942,160944],{"class":32,"line":1862},[30,160943,158160],{"class":317},[30,160945,3921],{"class":321},[30,160947,160948,160950,160952,160954],{"class":32,"line":1876},[30,160949,32589],{"class":40},[30,160951,322],{"class":321},[30,160953,153352],{"class":74},[30,160955,328],{"class":321},[157,160957,160958,160959,160961,160962,28523],{},"菜单类程序通常使用 ",[27,160960,159660],{},"，用户选择退出时 ",[27,160963,2235],{},[15,160965,160967],{"id":160966},"_414-易错点","4.14 易错点",[271,160969,160970,160975,160981,160989,160995],{},[150,160971,160972,160974],{},[27,160973,108801],{}," 循环必须更新控制变量。",[150,160976,160977,160980],{},[27,160978,160979],{},"range(1, 10)"," 不包含 10。",[150,160982,160983,160985,160986,160988],{},[27,160984,2235],{}," 结束整个循环，",[27,160987,154810],{}," 只跳过本轮。",[150,160990,160991,160992,160994],{},"嵌套循环中，",[27,160993,2235],{}," 只跳出当前所在的一层循环。",[150,160996,160997],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[15,160999,161001],{"id":161000},"_415-本章练习","4.15 本章练习",[271,161003,161004,161007,161010,161013,161016],{},[150,161005,161006],{},"输出 1 到 100。",[150,161008,161009],{},"计算 1 到 100 的偶数和。",[150,161011,161012],{},"输出 100 以内能被 3 和 5 同时整除的数。",[150,161014,161015],{},"编写猜数字游戏，限制最多猜 7 次。",[150,161017,161018],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[234,161020,161021],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":161023},[161024,161025,161026,161027,161028,161032,161033,161034,161035,161036,161037,161038,161039,161040,161041],{"id":159280,"depth":44,"text":159281},{"id":159310,"depth":44,"text":159311},{"id":159399,"depth":44,"text":159400},{"id":159493,"depth":44,"text":159494},{"id":159667,"depth":44,"text":159668,"children":161029},[161030,161031],{"id":159671,"depth":52,"text":159672},{"id":159735,"depth":52,"text":159736},{"id":159799,"depth":44,"text":159800},{"id":159894,"depth":44,"text":159895},{"id":160003,"depth":44,"text":160004},{"id":160199,"depth":44,"text":160200},{"id":160284,"depth":44,"text":160285},{"id":160423,"depth":44,"text":160424},{"id":160603,"depth":44,"text":160604},{"id":160752,"depth":44,"text":160753},{"id":160966,"depth":44,"text":160967},{"id":161000,"depth":44,"text":161001},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159272,"description":242},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161048,"title":161049,"body":161050,"description":242,"extension":243,"meta":163055,"navigation":245,"path":163056,"seo":163057,"stem":163058,"__hash__":163059},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161051,"toc":163035},[161052,161055,161059,161062,161065,161079,161082,161096,161100,161102,161121,161123,161170,161172,161186,161190,161264,161267,161271,161274,161333,161341,161344,161397,161400,161404,161409,161464,161472,161522,161526,161531,161539,161638,161644,161648,161653,161656,161667,161708,161721,161725,161728,161764,161767,161780,161783,161843,161847,161851,161854,161905,161909,161912,161959,161965,162031,162034,162038,162041,162157,162160,162164,162167,162273,162277,162280,162318,162321,162363,162366,162426,162429,162433,162897,162900,162904,162931,162937,162998,163002,163032],[10,161053,161049],{"id":161054},"_5-函数基础",[15,161056,161058],{"id":161057},"_51-为什么需要函数","5.1 为什么需要函数",[157,161060,161061],{},"函数用于封装一段可以重复使用的代码。",[157,161063,161064],{},"不使用函数的问题：",[271,161066,161067,161070,161073,161076],{},[150,161068,161069],{},"重复代码多。",[150,161071,161072],{},"修改逻辑时容易漏改。",[150,161074,161075],{},"主流程不清晰。",[150,161077,161078],{},"程序越写越长，难以维护。",[157,161080,161081],{},"使用函数后的好处：",[271,161083,161084,161087,161090,161093],{},[150,161085,161086],{},"提高复用性。",[150,161088,161089],{},"提高可读性。",[150,161091,161092],{},"便于调试。",[150,161094,161095],{},"便于分工。",[15,161097,161099],{"id":161098},"_52-函数定义","5.2 函数定义",[157,161101,5363],{},[20,161103,161105],{"className":30516,"code":161104,"language":30518,"meta":25,"style":25},"def 函数名():\n    函数体\n",[27,161106,161107,161116],{"__ignoreMap":25},[30,161108,161109,161111,161114],{"class":32,"line":33},[30,161110,32085],{"class":317},[30,161112,161113],{"class":36}," 函数名",[30,161115,32091],{"class":321},[30,161117,161118],{"class":32,"line":44},[30,161119,161120],{"class":321},"    函数体\n",[157,161122,15317],{},[20,161124,161126],{"className":30516,"code":161125,"language":30518,"meta":25,"style":25},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[27,161127,161128,161137,161147,161157,161161,161165],{"__ignoreMap":25},[30,161129,161130,161132,161135],{"class":32,"line":33},[30,161131,32085],{"class":317},[30,161133,161134],{"class":36}," say_hello",[30,161136,32091],{"class":321},[30,161138,161139,161141,161143,161145],{"class":32,"line":44},[30,161140,31437],{"class":40},[30,161142,322],{"class":321},[30,161144,6026],{"class":74},[30,161146,328],{"class":321},[30,161148,161149,161151,161153,161155],{"class":32,"line":52},[30,161150,31437],{"class":40},[30,161152,322],{"class":321},[30,161154,146777],{"class":74},[30,161156,328],{"class":321},[30,161158,161159],{"class":32,"line":60},[30,161160,2582],{"emptyLinePlaceholder":245},[30,161162,161163],{"class":32,"line":68},[30,161164,2582],{"emptyLinePlaceholder":245},[30,161166,161167],{"class":32,"line":80},[30,161168,161169],{"class":321},"say_hello()\n",[157,161171,9207],{},[271,161173,161174,161177,161180,161183],{},[150,161175,161176],{},"函数必须先定义，再调用。",[150,161178,161179],{},"函数名遵循变量命名规则。",[150,161181,161182],{},"函数体需要缩进。",[150,161184,161185],{},"函数不调用就不会执行。",[15,161187,161189],{"id":161188},"_53-函数调用","5.3 函数调用",[20,161191,161193],{"className":30516,"code":161192,"language":30518,"meta":25,"style":25},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[27,161194,161195,161204,161215,161226,161237,161247,161251,161255,161260],{"__ignoreMap":25},[30,161196,161197,161199,161202],{"class":32,"line":33},[30,161198,32085],{"class":317},[30,161200,161201],{"class":36}," print_menu",[30,161203,32091],{"class":321},[30,161205,161206,161208,161210,161213],{"class":32,"line":44},[30,161207,31437],{"class":40},[30,161209,322],{"class":321},[30,161211,161212],{"class":74},"\"1. 查询\"",[30,161214,328],{"class":321},[30,161216,161217,161219,161221,161224],{"class":32,"line":52},[30,161218,31437],{"class":40},[30,161220,322],{"class":321},[30,161222,161223],{"class":74},"\"2. 添加\"",[30,161225,328],{"class":321},[30,161227,161228,161230,161232,161235],{"class":32,"line":60},[30,161229,31437],{"class":40},[30,161231,322],{"class":321},[30,161233,161234],{"class":74},"\"3. 删除\"",[30,161236,328],{"class":321},[30,161238,161239,161241,161243,161245],{"class":32,"line":68},[30,161240,31437],{"class":40},[30,161242,322],{"class":321},[30,161244,160819],{"class":74},[30,161246,328],{"class":321},[30,161248,161249],{"class":32,"line":80},[30,161250,2582],{"emptyLinePlaceholder":245},[30,161252,161253],{"class":32,"line":88},[30,161254,2582],{"emptyLinePlaceholder":245},[30,161256,161257],{"class":32,"line":96},[30,161258,161259],{"class":321},"print_menu()\n",[30,161261,161262],{"class":32,"line":104},[30,161263,161259],{"class":321},[157,161265,161266],{},"函数可以多次调用，每次调用都会执行函数体。",[15,161268,161270],{"id":161269},"_54-参数","5.4 参数",[157,161272,161273],{},"参数用于向函数传递数据。",[20,161275,161277],{"className":30516,"code":161276,"language":30518,"meta":25,"style":25},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[27,161278,161279,161288,161308,161312,161316,161325],{"__ignoreMap":25},[30,161280,161281,161283,161285],{"class":32,"line":33},[30,161282,32085],{"class":317},[30,161284,161134],{"class":36},[30,161286,161287],{"class":321},"(name):\n",[30,161289,161290,161292,161294,161296,161298,161300,161302,161304,161306],{"class":32,"line":44},[30,161291,31437],{"class":40},[30,161293,322],{"class":321},[30,161295,373],{"class":317},[30,161297,157192],{"class":74},[30,161299,1216],{"class":40},[30,161301,79948],{"class":321},[30,161303,1266],{"class":40},[30,161305,571],{"class":74},[30,161307,328],{"class":321},[30,161309,161310],{"class":32,"line":52},[30,161311,2582],{"emptyLinePlaceholder":245},[30,161313,161314],{"class":32,"line":60},[30,161315,2582],{"emptyLinePlaceholder":245},[30,161317,161318,161321,161323],{"class":32,"line":68},[30,161319,161320],{"class":321},"say_hello(",[30,161322,150026],{"class":74},[30,161324,328],{"class":321},[30,161326,161327,161329,161331],{"class":32,"line":80},[30,161328,161320],{"class":321},[30,161330,151074],{"class":74},[30,161332,328],{"class":321},[157,161334,161335,161337,161338,161340],{},[27,161336,79948],{}," 是形参，",[27,161339,150026],{}," 是实参。",[157,161342,161343],{},"多个参数：",[20,161345,161347],{"className":30516,"code":161346,"language":30518,"meta":25,"style":25},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[27,161348,161349,161357,161370,161376,161380,161384],{"__ignoreMap":25},[30,161350,161351,161353,161355],{"class":32,"line":33},[30,161352,32085],{"class":317},[30,161354,5391],{"class":36},[30,161356,151231],{"class":321},[30,161358,161359,161362,161364,161366,161368],{"class":32,"line":44},[30,161360,161361],{"class":321},"    result ",[30,161363,367],{"class":317},[30,161365,11051],{"class":321},[30,161367,801],{"class":317},[30,161369,151242],{"class":321},[30,161371,161372,161374],{"class":32,"line":52},[30,161373,31437],{"class":40},[30,161375,76723],{"class":321},[30,161377,161378],{"class":32,"line":60},[30,161379,2582],{"emptyLinePlaceholder":245},[30,161381,161382],{"class":32,"line":68},[30,161383,2582],{"emptyLinePlaceholder":245},[30,161385,161386,161389,161391,161393,161395],{"class":32,"line":80},[30,161387,161388],{"class":321},"add(",[30,161390,766],{"class":40},[30,161392,12617],{"class":321},[30,161394,1020],{"class":40},[30,161396,328],{"class":321},[157,161398,161399],{},"调用时参数数量必须匹配。",[15,161401,161403],{"id":161402},"_55-返回值","5.5 返回值",[157,161405,161406,161408],{},[27,161407,17228],{}," 用于把函数内部的结果返回给调用者。",[20,161410,161412],{"className":30516,"code":161411,"language":30518,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[27,161413,161414,161422,161432,161436,161440,161458],{"__ignoreMap":25},[30,161415,161416,161418,161420],{"class":32,"line":33},[30,161417,32085],{"class":317},[30,161419,5391],{"class":36},[30,161421,151231],{"class":321},[30,161423,161424,161426,161428,161430],{"class":32,"line":44},[30,161425,4272],{"class":317},[30,161427,11051],{"class":321},[30,161429,801],{"class":317},[30,161431,151242],{"class":321},[30,161433,161434],{"class":32,"line":52},[30,161435,2582],{"emptyLinePlaceholder":245},[30,161437,161438],{"class":32,"line":60},[30,161439,2582],{"emptyLinePlaceholder":245},[30,161441,161442,161445,161447,161450,161452,161454,161456],{"class":32,"line":68},[30,161443,161444],{"class":321},"result ",[30,161446,367],{"class":317},[30,161448,161449],{"class":321}," add(",[30,161451,766],{"class":40},[30,161453,12617],{"class":321},[30,161455,1020],{"class":40},[30,161457,328],{"class":321},[30,161459,161460,161462],{"class":32,"line":80},[30,161461,30553],{"class":40},[30,161463,76723],{"class":321},[157,161465,161466,161467,161469,161470,28523],{},"如果函数没有写 ",[27,161468,17228],{},"，默认返回 ",[27,161471,95824],{},[20,161473,161475],{"className":30516,"code":161474,"language":30518,"meta":25,"style":25},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[27,161476,161477,161485,161495,161499,161503,161512],{"__ignoreMap":25},[30,161478,161479,161481,161483],{"class":32,"line":33},[30,161480,32085],{"class":317},[30,161482,161134],{"class":36},[30,161484,32091],{"class":321},[30,161486,161487,161489,161491,161493],{"class":32,"line":44},[30,161488,31437],{"class":40},[30,161490,322],{"class":321},[30,161492,6026],{"class":74},[30,161494,328],{"class":321},[30,161496,161497],{"class":32,"line":52},[30,161498,2582],{"emptyLinePlaceholder":245},[30,161500,161501],{"class":32,"line":60},[30,161502,2582],{"emptyLinePlaceholder":245},[30,161504,161505,161507,161509],{"class":32,"line":68},[30,161506,161444],{"class":321},[30,161508,367],{"class":317},[30,161510,161511],{"class":321}," say_hello()\n",[30,161513,161514,161516,161519],{"class":32,"line":80},[30,161515,30553],{"class":40},[30,161517,161518],{"class":321},"(result)  ",[30,161520,161521],{"class":379},"# None\n",[15,161523,161525],{"id":161524},"_56-return的作用","5.6 return的作用",[157,161527,161528,161530],{},[27,161529,17228],{}," 有两个作用：",[271,161532,161533,161536],{},[150,161534,161535],{},"返回结果。",[150,161537,161538],{},"结束函数。",[20,161540,161542],{"className":30516,"code":161541,"language":30518,"meta":25,"style":25},"def check_age(age):\n    if age \u003C 0:\n        return \"年龄不合法\"\n\n    if age >= 18:\n        return \"成年人\"\n\n    return \"未成年人\"\n\n\nprint(check_age(20))\nprint(check_age(-1))\n",[27,161543,161544,161554,161566,161573,161577,161589,161596,161600,161607,161611,161615,161626],{"__ignoreMap":25},[30,161545,161546,161548,161551],{"class":32,"line":33},[30,161547,32085],{"class":317},[30,161549,161550],{"class":36}," check_age",[30,161552,161553],{"class":321},"(age):\n",[30,161555,161556,161558,161560,161562,161564],{"class":32,"line":44},[30,161557,3283],{"class":317},[30,161559,15889],{"class":321},[30,161561,1230],{"class":317},[30,161563,4275],{"class":40},[30,161565,3921],{"class":321},[30,161567,161568,161570],{"class":32,"line":52},[30,161569,14934],{"class":317},[30,161571,161572],{"class":74}," \"年龄不合法\"\n",[30,161574,161575],{"class":32,"line":60},[30,161576,2582],{"emptyLinePlaceholder":245},[30,161578,161579,161581,161583,161585,161587],{"class":32,"line":68},[30,161580,3283],{"class":317},[30,161582,15889],{"class":321},[30,161584,1893],{"class":317},[30,161586,156423],{"class":40},[30,161588,3921],{"class":321},[30,161590,161591,161593],{"class":32,"line":80},[30,161592,14934],{"class":317},[30,161594,161595],{"class":74}," \"成年人\"\n",[30,161597,161598],{"class":32,"line":88},[30,161599,2582],{"emptyLinePlaceholder":245},[30,161601,161602,161604],{"class":32,"line":96},[30,161603,4272],{"class":317},[30,161605,161606],{"class":74}," \"未成年人\"\n",[30,161608,161609],{"class":32,"line":104},[30,161610,2582],{"emptyLinePlaceholder":245},[30,161612,161613],{"class":32,"line":112},[30,161614,2582],{"emptyLinePlaceholder":245},[30,161616,161617,161619,161622,161624],{"class":32,"line":123},[30,161618,30553],{"class":40},[30,161620,161621],{"class":321},"(check_age(",[30,161623,1020],{"class":40},[30,161625,30635],{"class":321},[30,161627,161628,161630,161632,161634,161636],{"class":32,"line":131},[30,161629,30553],{"class":40},[30,161631,161621],{"class":321},[30,161633,852],{"class":317},[30,161635,537],{"class":40},[30,161637,30635],{"class":321},[157,161639,161640,161641,161643],{},"函数执行到 ",[27,161642,17228],{}," 后，后面的代码不会继续执行。",[15,161645,161647],{"id":161646},"_57-none","5.7 None",[157,161649,161650,161652],{},[27,161651,95824],{}," 表示空值或没有结果。",[157,161654,161655],{},"常见使用场景：",[271,161657,161658,161661,161664],{},[150,161659,161660],{},"函数没有返回值。",[150,161662,161663],{},"变量暂时没有具体值。",[150,161665,161666],{},"表示查询不到结果。",[20,161668,161670],{"className":30516,"code":161669,"language":30518,"meta":25,"style":25},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[27,161671,161672,161680,161684,161697],{"__ignoreMap":25},[30,161673,161674,161676,161678],{"class":32,"line":33},[30,161675,161444],{"class":321},[30,161677,367],{"class":317},[30,161679,152310],{"class":40},[30,161681,161682],{"class":32,"line":44},[30,161683,2582],{"emptyLinePlaceholder":245},[30,161685,161686,161688,161691,161693,161695],{"class":32,"line":52},[30,161687,1717],{"class":317},[30,161689,161690],{"class":321}," result ",[30,161692,39065],{"class":317},[30,161694,39071],{"class":40},[30,161696,3921],{"class":321},[30,161698,161699,161701,161703,161706],{"class":32,"line":60},[30,161700,31437],{"class":40},[30,161702,322],{"class":321},[30,161704,161705],{"class":74},"\"没有数据\"",[30,161707,328],{"class":321},[157,161709,161710,161711,161713,161714,161717,161718,28523],{},"判断 ",[27,161712,95824],{}," 推荐使用 ",[27,161715,161716],{},"is None","，不要写成 ",[27,161719,161720],{},"== None",[15,161722,161724],{"id":161723},"_58-函数文档字符串","5.8 函数文档字符串",[157,161726,161727],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[20,161729,161731],{"className":30516,"code":161730,"language":30518,"meta":25,"style":25},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[27,161732,161733,161743,161748],{"__ignoreMap":25},[30,161734,161735,161737,161740],{"class":32,"line":33},[30,161736,32085],{"class":317},[30,161738,161739],{"class":36}," calculate_bmi",[30,161741,161742],{"class":321},"(weight, height):\n",[30,161744,161745],{"class":32,"line":44},[30,161746,161747],{"class":74},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[30,161749,161750,161752,161755,161757,161760,161762],{"class":32,"line":52},[30,161751,4272],{"class":317},[30,161753,161754],{"class":321}," weight ",[30,161756,904],{"class":317},[30,161758,161759],{"class":321}," height ",[30,161761,10843],{"class":317},[30,161763,47861],{"class":40},[157,161765,161766],{},"查看说明：",[20,161768,161770],{"className":30516,"code":161769,"language":30518,"meta":25,"style":25},"help(calculate_bmi)\n",[27,161771,161772],{"__ignoreMap":25},[30,161773,161774,161777],{"class":32,"line":33},[30,161775,161776],{"class":40},"help",[30,161778,161779],{"class":321},"(calculate_bmi)\n",[157,161781,161782],{},"较完整的写法：",[20,161784,161786],{"className":30516,"code":161785,"language":30518,"meta":25,"style":25},"def calculate_bmi(weight, height):\n    \"\"\"\n    计算BMI。\n\n    :param weight: 体重，单位kg\n    :param height: 身高，单位m\n    :return: BMI数值\n    \"\"\"\n    return weight \u002F height ** 2\n",[27,161787,161788,161796,161801,161806,161810,161815,161820,161825,161829],{"__ignoreMap":25},[30,161789,161790,161792,161794],{"class":32,"line":33},[30,161791,32085],{"class":317},[30,161793,161739],{"class":36},[30,161795,161742],{"class":321},[30,161797,161798],{"class":32,"line":44},[30,161799,161800],{"class":74},"    \"\"\"\n",[30,161802,161803],{"class":32,"line":52},[30,161804,161805],{"class":74},"    计算BMI。\n",[30,161807,161808],{"class":32,"line":60},[30,161809,2582],{"emptyLinePlaceholder":245},[30,161811,161812],{"class":32,"line":68},[30,161813,161814],{"class":74},"    :param weight: 体重，单位kg\n",[30,161816,161817],{"class":32,"line":80},[30,161818,161819],{"class":74},"    :param height: 身高，单位m\n",[30,161821,161822],{"class":32,"line":88},[30,161823,161824],{"class":74},"    :return: BMI数值\n",[30,161826,161827],{"class":32,"line":96},[30,161828,161800],{"class":74},[30,161830,161831,161833,161835,161837,161839,161841],{"class":32,"line":104},[30,161832,4272],{"class":317},[30,161834,161754],{"class":321},[30,161836,904],{"class":317},[30,161838,161759],{"class":321},[30,161840,10843],{"class":317},[30,161842,47861],{"class":40},[15,161844,161846],{"id":161845},"_59-变量作用域","5.9 变量作用域",[287,161848,161850],{"id":161849},"_591-局部变量","5.9.1 局部变量",[157,161852,161853],{},"在函数内部定义的变量，只能在函数内部使用。",[20,161855,161857],{"className":30516,"code":161856,"language":30518,"meta":25,"style":25},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[27,161858,161859,161868,161876,161882,161886,161890,161895],{"__ignoreMap":25},[30,161860,161861,161863,161866],{"class":32,"line":33},[30,161862,32085],{"class":317},[30,161864,161865],{"class":36}," test",[30,161867,32091],{"class":321},[30,161869,161870,161872,161874],{"class":32,"line":44},[30,161871,45731],{"class":321},[30,161873,367],{"class":317},[30,161875,58566],{"class":40},[30,161877,161878,161880],{"class":32,"line":52},[30,161879,31437],{"class":40},[30,161881,335],{"class":321},[30,161883,161884],{"class":32,"line":60},[30,161885,2582],{"emptyLinePlaceholder":245},[30,161887,161888],{"class":32,"line":68},[30,161889,2582],{"emptyLinePlaceholder":245},[30,161891,161892],{"class":32,"line":80},[30,161893,161894],{"class":321},"test()\n",[30,161896,161897,161899,161902],{"class":32,"line":88},[30,161898,30553],{"class":40},[30,161900,161901],{"class":321},"(num)  ",[30,161903,161904],{"class":379},"# 报错\n",[287,161906,161908],{"id":161907},"_592-全局变量","5.9.2 全局变量",[157,161910,161911],{},"在函数外部定义的变量，可以在函数内部读取。",[20,161913,161915],{"className":30516,"code":161914,"language":30518,"meta":25,"style":25},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[27,161916,161917,161925,161929,161933,161941,161947,161951,161955],{"__ignoreMap":25},[30,161918,161919,161921,161923],{"class":32,"line":33},[30,161920,146674],{"class":321},[30,161922,367],{"class":317},[30,161924,149491],{"class":74},[30,161926,161927],{"class":32,"line":44},[30,161928,2582],{"emptyLinePlaceholder":245},[30,161930,161931],{"class":32,"line":52},[30,161932,2582],{"emptyLinePlaceholder":245},[30,161934,161935,161937,161939],{"class":32,"line":60},[30,161936,32085],{"class":317},[30,161938,161134],{"class":36},[30,161940,32091],{"class":321},[30,161942,161943,161945],{"class":32,"line":68},[30,161944,31437],{"class":40},[30,161946,150798],{"class":321},[30,161948,161949],{"class":32,"line":80},[30,161950,2582],{"emptyLinePlaceholder":245},[30,161952,161953],{"class":32,"line":88},[30,161954,2582],{"emptyLinePlaceholder":245},[30,161956,161957],{"class":32,"line":96},[30,161958,161169],{"class":321},[157,161960,161961,161962,28523],{},"如果要在函数内部修改全局变量，需要 ",[27,161963,161964],{},"global",[20,161966,161968],{"className":30516,"code":161967,"language":30518,"meta":25,"style":25},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[27,161969,161970,161978,161982,161986,161995,162003,162011,162015,162019,162024],{"__ignoreMap":25},[30,161971,161972,161974,161976],{"class":32,"line":33},[30,161973,146829],{"class":321},[30,161975,367],{"class":317},[30,161977,47471],{"class":40},[30,161979,161980],{"class":32,"line":44},[30,161981,2582],{"emptyLinePlaceholder":245},[30,161983,161984],{"class":32,"line":52},[30,161985,2582],{"emptyLinePlaceholder":245},[30,161987,161988,161990,161993],{"class":32,"line":60},[30,161989,32085],{"class":317},[30,161991,161992],{"class":36}," add_count",[30,161994,32091],{"class":321},[30,161996,161997,162000],{"class":32,"line":68},[30,161998,161999],{"class":317},"    global",[30,162001,162002],{"class":321}," count\n",[30,162004,162005,162007,162009],{"class":32,"line":80},[30,162006,159571],{"class":321},[30,162008,9659],{"class":317},[30,162010,55837],{"class":40},[30,162012,162013],{"class":32,"line":88},[30,162014,2582],{"emptyLinePlaceholder":245},[30,162016,162017],{"class":32,"line":96},[30,162018,2582],{"emptyLinePlaceholder":245},[30,162020,162021],{"class":32,"line":104},[30,162022,162023],{"class":321},"add_count()\n",[30,162025,162026,162028],{"class":32,"line":112},[30,162027,30553],{"class":40},[30,162029,162030],{"class":321},"(count)\n",[157,162032,162033],{},"不建议大量使用全局变量，项目变大后很难维护。",[15,162035,162037],{"id":162036},"_510-函数嵌套调用","5.10 函数嵌套调用",[157,162039,162040],{},"一个函数中可以调用另一个函数。",[20,162042,162044],{"className":30516,"code":162043,"language":30518,"meta":25,"style":25},"def print_line():\n    print(\"-\" * 30)\n\n\ndef print_info(name, age):\n    print_line()\n    print(f\"姓名:{name}\")\n    print(f\"年龄:{age}\")\n    print_line()\n\n\nprint_info(\"小明\", 18)\n",[27,162045,162046,162055,162069,162073,162077,162086,162091,162111,162132,162136,162140,162144],{"__ignoreMap":25},[30,162047,162048,162050,162053],{"class":32,"line":33},[30,162049,32085],{"class":317},[30,162051,162052],{"class":36}," print_line",[30,162054,32091],{"class":321},[30,162056,162057,162059,162061,162063,162065,162067],{"class":32,"line":44},[30,162058,31437],{"class":40},[30,162060,322],{"class":321},[30,162062,32621],{"class":74},[30,162064,6700],{"class":317},[30,162066,78803],{"class":40},[30,162068,328],{"class":321},[30,162070,162071],{"class":32,"line":52},[30,162072,2582],{"emptyLinePlaceholder":245},[30,162074,162075],{"class":32,"line":60},[30,162076,2582],{"emptyLinePlaceholder":245},[30,162078,162079,162081,162084],{"class":32,"line":68},[30,162080,32085],{"class":317},[30,162082,162083],{"class":36}," print_info",[30,162085,149513],{"class":321},[30,162087,162088],{"class":32,"line":80},[30,162089,162090],{"class":321},"    print_line()\n",[30,162092,162093,162095,162097,162099,162101,162103,162105,162107,162109],{"class":32,"line":88},[30,162094,31437],{"class":40},[30,162096,322],{"class":321},[30,162098,373],{"class":317},[30,162100,156820],{"class":74},[30,162102,1216],{"class":40},[30,162104,79948],{"class":321},[30,162106,1266],{"class":40},[30,162108,571],{"class":74},[30,162110,328],{"class":321},[30,162112,162113,162115,162117,162119,162122,162124,162126,162128,162130],{"class":32,"line":96},[30,162114,31437],{"class":40},[30,162116,322],{"class":321},[30,162118,373],{"class":317},[30,162120,162121],{"class":74},"\"年龄:",[30,162123,1216],{"class":40},[30,162125,70359],{"class":321},[30,162127,1266],{"class":40},[30,162129,571],{"class":74},[30,162131,328],{"class":321},[30,162133,162134],{"class":32,"line":104},[30,162135,162090],{"class":321},[30,162137,162138],{"class":32,"line":112},[30,162139,2582],{"emptyLinePlaceholder":245},[30,162141,162142],{"class":32,"line":123},[30,162143,2582],{"emptyLinePlaceholder":245},[30,162145,162146,162149,162151,162153,162155],{"class":32,"line":131},[30,162147,162148],{"class":321},"print_info(",[30,162150,150026],{"class":74},[30,162152,12617],{"class":321},[30,162154,970],{"class":40},[30,162156,328],{"class":321},[157,162158,162159],{},"这种方式可以把小功能组合成大功能。",[15,162161,162163],{"id":162162},"_511-参数检查","5.11 参数检查",[157,162165,162166],{},"函数内部可以检查参数是否合法。",[20,162168,162170],{"className":30516,"code":162169,"language":30518,"meta":25,"style":25},"def divide(a, b):\n    if b == 0:\n        return None\n    return a \u002F b\n\n\nresult = divide(10, 0)\n\nif result is None:\n    print(\"除数不能为0\")\nelse:\n    print(result)\n",[27,162171,162172,162181,162193,162199,162209,162213,162217,162234,162238,162250,162261,162267],{"__ignoreMap":25},[30,162173,162174,162176,162179],{"class":32,"line":33},[30,162175,32085],{"class":317},[30,162177,162178],{"class":36}," divide",[30,162180,151231],{"class":321},[30,162182,162183,162185,162187,162189,162191],{"class":32,"line":44},[30,162184,3283],{"class":317},[30,162186,11064],{"class":321},[30,162188,3131],{"class":317},[30,162190,4275],{"class":40},[30,162192,3921],{"class":321},[30,162194,162195,162197],{"class":32,"line":52},[30,162196,14934],{"class":317},[30,162198,152310],{"class":40},[30,162200,162201,162203,162205,162207],{"class":32,"line":60},[30,162202,4272],{"class":317},[30,162204,11051],{"class":321},[30,162206,904],{"class":317},[30,162208,151242],{"class":321},[30,162210,162211],{"class":32,"line":68},[30,162212,2582],{"emptyLinePlaceholder":245},[30,162214,162215],{"class":32,"line":80},[30,162216,2582],{"emptyLinePlaceholder":245},[30,162218,162219,162221,162223,162226,162228,162230,162232],{"class":32,"line":88},[30,162220,161444],{"class":321},[30,162222,367],{"class":317},[30,162224,162225],{"class":321}," divide(",[30,162227,766],{"class":40},[30,162229,12617],{"class":321},[30,162231,511],{"class":40},[30,162233,328],{"class":321},[30,162235,162236],{"class":32,"line":96},[30,162237,2582],{"emptyLinePlaceholder":245},[30,162239,162240,162242,162244,162246,162248],{"class":32,"line":104},[30,162241,1717],{"class":317},[30,162243,161690],{"class":321},[30,162245,39065],{"class":317},[30,162247,39071],{"class":40},[30,162249,3921],{"class":321},[30,162251,162252,162254,162256,162259],{"class":32,"line":112},[30,162253,31437],{"class":40},[30,162255,322],{"class":321},[30,162257,162258],{"class":74},"\"除数不能为0\"",[30,162260,328],{"class":321},[30,162262,162263,162265],{"class":32,"line":123},[30,162264,1884],{"class":317},[30,162266,3921],{"class":321},[30,162268,162269,162271],{"class":32,"line":131},[30,162270,31437],{"class":40},[30,162272,76723],{"class":321},[15,162274,162276],{"id":162275},"_512-类型提示","5.12 类型提示",[157,162278,162279],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[20,162281,162283],{"className":30516,"code":162282,"language":30518,"meta":25,"style":25},"def add(a: int, b: int) -> int:\n    return a + b\n",[27,162284,162285,162308],{"__ignoreMap":25},[30,162286,162287,162289,162291,162294,162296,162299,162301,162304,162306],{"class":32,"line":33},[30,162288,32085],{"class":317},[30,162290,5391],{"class":36},[30,162292,162293],{"class":321},"(a: ",[30,162295,325],{"class":40},[30,162297,162298],{"class":321},", b: ",[30,162300,325],{"class":40},[30,162302,162303],{"class":321},") -> ",[30,162305,325],{"class":40},[30,162307,3921],{"class":321},[30,162309,162310,162312,162314,162316],{"class":32,"line":44},[30,162311,4272],{"class":317},[30,162313,11051],{"class":321},[30,162315,801],{"class":317},[30,162317,151242],{"class":321},[157,162319,162320],{},"字符串参数：",[20,162322,162324],{"className":30516,"code":162323,"language":30518,"meta":25,"style":25},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[27,162325,162326,162343],{"__ignoreMap":25},[30,162327,162328,162330,162332,162335,162337,162339,162341],{"class":32,"line":33},[30,162329,32085],{"class":317},[30,162331,161134],{"class":36},[30,162333,162334],{"class":321},"(name: ",[30,162336,1489],{"class":40},[30,162338,162303],{"class":321},[30,162340,95824],{"class":40},[30,162342,3921],{"class":321},[30,162344,162345,162347,162349,162351,162353,162355,162357,162359,162361],{"class":32,"line":44},[30,162346,31437],{"class":40},[30,162348,322],{"class":321},[30,162350,373],{"class":317},[30,162352,157192],{"class":74},[30,162354,1216],{"class":40},[30,162356,79948],{"class":321},[30,162358,1266],{"class":40},[30,162360,571],{"class":74},[30,162362,328],{"class":321},[157,162364,162365],{},"列表参数：",[20,162367,162369],{"className":30516,"code":162368,"language":30518,"meta":25,"style":25},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[27,162370,162371,162390,162398,162410,162419],{"__ignoreMap":25},[30,162372,162373,162375,162378,162381,162383,162386,162388],{"class":32,"line":33},[30,162374,32085],{"class":317},[30,162376,162377],{"class":36}," get_total",[30,162379,162380],{"class":321},"(numbers: list[",[30,162382,325],{"class":40},[30,162384,162385],{"class":321},"]) -> ",[30,162387,325],{"class":40},[30,162389,3921],{"class":321},[30,162391,162392,162394,162396],{"class":32,"line":44},[30,162393,159445],{"class":321},[30,162395,367],{"class":317},[30,162397,47471],{"class":40},[30,162399,162400,162402,162405,162407],{"class":32,"line":52},[30,162401,3383],{"class":317},[30,162403,162404],{"class":321}," number ",[30,162406,26181],{"class":317},[30,162408,162409],{"class":321}," numbers:\n",[30,162411,162412,162414,162416],{"class":32,"line":60},[30,162413,160120],{"class":321},[30,162415,9659],{"class":317},[30,162417,162418],{"class":321}," number\n",[30,162420,162421,162423],{"class":32,"line":68},[30,162422,4272],{"class":317},[30,162424,162425],{"class":321}," total\n",[157,162427,162428],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[15,162430,162432],{"id":162431},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[20,162434,162436],{"className":30516,"code":162435,"language":30518,"meta":25,"style":25},"balance = 1000\n\n\ndef show_menu():\n    print(\"====== ATM ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n\ndef show_balance():\n    print(f\"当前余额:{balance}元\")\n\n\ndef save_money():\n    global balance\n    money = float(input(\"请输入存款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    balance += money\n    print(\"存款成功\")\n    show_balance()\n\n\ndef withdraw_money():\n    global balance\n    money = float(input(\"请输入取款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    if money > balance:\n        print(\"余额不足\")\n        return\n    balance -= money\n    print(\"取款成功\")\n    show_balance()\n\n\nwhile True:\n    show_menu()\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        show_balance()\n    elif choice == \"2\":\n        save_money()\n    elif choice == \"3\":\n        withdraw_money()\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[27,162437,162438,162448,162452,162456,162464,162475,162485,162495,162505,162515,162519,162523,162532,162554,162558,162562,162571,162577,162597,162609,162620,162624,162633,162644,162649,162653,162657,162666,162672,162691,162703,162713,162717,162728,162738,162742,162750,162761,162765,162769,162773,162781,162786,162800,162804,162816,162821,162833,162838,162850,162855,162867,162877,162881,162887],{"__ignoreMap":25},[30,162439,162440,162443,162445],{"class":32,"line":33},[30,162441,162442],{"class":321},"balance ",[30,162444,367],{"class":317},[30,162446,162447],{"class":40}," 1000\n",[30,162449,162450],{"class":32,"line":44},[30,162451,2582],{"emptyLinePlaceholder":245},[30,162453,162454],{"class":32,"line":52},[30,162455,2582],{"emptyLinePlaceholder":245},[30,162457,162458,162460,162462],{"class":32,"line":60},[30,162459,32085],{"class":317},[30,162461,152171],{"class":36},[30,162463,32091],{"class":321},[30,162465,162466,162468,162470,162473],{"class":32,"line":68},[30,162467,31437],{"class":40},[30,162469,322],{"class":321},[30,162471,162472],{"class":74},"\"====== ATM ======\"",[30,162474,328],{"class":321},[30,162476,162477,162479,162481,162483],{"class":32,"line":80},[30,162478,31437],{"class":40},[30,162480,322],{"class":321},[30,162482,160786],{"class":74},[30,162484,328],{"class":321},[30,162486,162487,162489,162491,162493],{"class":32,"line":88},[30,162488,31437],{"class":40},[30,162490,322],{"class":321},[30,162492,160797],{"class":74},[30,162494,328],{"class":321},[30,162496,162497,162499,162501,162503],{"class":32,"line":96},[30,162498,31437],{"class":40},[30,162500,322],{"class":321},[30,162502,160808],{"class":74},[30,162504,328],{"class":321},[30,162506,162507,162509,162511,162513],{"class":32,"line":104},[30,162508,31437],{"class":40},[30,162510,322],{"class":321},[30,162512,160819],{"class":74},[30,162514,328],{"class":321},[30,162516,162517],{"class":32,"line":112},[30,162518,2582],{"emptyLinePlaceholder":245},[30,162520,162521],{"class":32,"line":123},[30,162522,2582],{"emptyLinePlaceholder":245},[30,162524,162525,162527,162530],{"class":32,"line":131},[30,162526,32085],{"class":317},[30,162528,162529],{"class":36}," show_balance",[30,162531,32091],{"class":321},[30,162533,162534,162536,162538,162540,162543,162545,162548,162550,162552],{"class":32,"line":142},[30,162535,31437],{"class":40},[30,162537,322],{"class":321},[30,162539,373],{"class":317},[30,162541,162542],{"class":74},"\"当前余额:",[30,162544,1216],{"class":40},[30,162546,162547],{"class":321},"balance",[30,162549,1266],{"class":40},[30,162551,157150],{"class":74},[30,162553,328],{"class":321},[30,162555,162556],{"class":32,"line":1811},[30,162557,2582],{"emptyLinePlaceholder":245},[30,162559,162560],{"class":32,"line":1825},[30,162561,2582],{"emptyLinePlaceholder":245},[30,162563,162564,162566,162569],{"class":32,"line":1830},[30,162565,32085],{"class":317},[30,162567,162568],{"class":36}," save_money",[30,162570,32091],{"class":321},[30,162572,162573,162575],{"class":32,"line":1836},[30,162574,161999],{"class":317},[30,162576,150237],{"class":321},[30,162578,162579,162582,162584,162586,162588,162590,162592,162595],{"class":32,"line":1857},[30,162580,162581],{"class":321},"    money ",[30,162583,367],{"class":317},[30,162585,109935],{"class":40},[30,162587,322],{"class":321},[30,162589,53959],{"class":40},[30,162591,322],{"class":321},[30,162593,162594],{"class":74},"\"请输入存款金额:\"",[30,162596,30635],{"class":321},[30,162598,162599,162601,162603,162605,162607],{"class":32,"line":1862},[30,162600,3283],{"class":317},[30,162602,150280],{"class":321},[30,162604,1774],{"class":317},[30,162606,4275],{"class":40},[30,162608,3921],{"class":321},[30,162610,162611,162613,162615,162618],{"class":32,"line":1876},[30,162612,32589],{"class":40},[30,162614,322],{"class":321},[30,162616,162617],{"class":74},"\"金额必须大于0\"",[30,162619,328],{"class":321},[30,162621,162622],{"class":32,"line":1881},[30,162623,152499],{"class":317},[30,162625,162626,162629,162631],{"class":32,"line":1910},[30,162627,162628],{"class":321},"    balance ",[30,162630,9659],{"class":317},[30,162632,150313],{"class":321},[30,162634,162635,162637,162639,162642],{"class":32,"line":1915},[30,162636,31437],{"class":40},[30,162638,322],{"class":321},[30,162640,162641],{"class":74},"\"存款成功\"",[30,162643,328],{"class":321},[30,162645,162646],{"class":32,"line":1932},[30,162647,162648],{"class":321},"    show_balance()\n",[30,162650,162651],{"class":32,"line":1937},[30,162652,2582],{"emptyLinePlaceholder":245},[30,162654,162655],{"class":32,"line":1942},[30,162656,2582],{"emptyLinePlaceholder":245},[30,162658,162659,162661,162664],{"class":32,"line":1947},[30,162660,32085],{"class":317},[30,162662,162663],{"class":36}," withdraw_money",[30,162665,32091],{"class":321},[30,162667,162668,162670],{"class":32,"line":1961},[30,162669,161999],{"class":317},[30,162671,150237],{"class":321},[30,162673,162674,162676,162678,162680,162682,162684,162686,162689],{"class":32,"line":1966},[30,162675,162581],{"class":321},[30,162677,367],{"class":317},[30,162679,109935],{"class":40},[30,162681,322],{"class":321},[30,162683,53959],{"class":40},[30,162685,322],{"class":321},[30,162687,162688],{"class":74},"\"请输入取款金额:\"",[30,162690,30635],{"class":321},[30,162692,162693,162695,162697,162699,162701],{"class":32,"line":2759},[30,162694,3283],{"class":317},[30,162696,150280],{"class":321},[30,162698,1774],{"class":317},[30,162700,4275],{"class":40},[30,162702,3921],{"class":321},[30,162704,162705,162707,162709,162711],{"class":32,"line":2773},[30,162706,32589],{"class":40},[30,162708,322],{"class":321},[30,162710,162617],{"class":74},[30,162712,328],{"class":321},[30,162714,162715],{"class":32,"line":2781},[30,162716,152499],{"class":317},[30,162718,162719,162721,162723,162725],{"class":32,"line":2786},[30,162720,3283],{"class":317},[30,162722,150280],{"class":321},[30,162724,1280],{"class":317},[30,162726,162727],{"class":321}," balance:\n",[30,162729,162730,162732,162734,162736],{"class":32,"line":2792},[30,162731,32589],{"class":40},[30,162733,322],{"class":321},[30,162735,150375],{"class":74},[30,162737,328],{"class":321},[30,162739,162740],{"class":32,"line":2798},[30,162741,152499],{"class":317},[30,162743,162744,162746,162748],{"class":32,"line":2803},[30,162745,162628],{"class":321},[30,162747,150390],{"class":317},[30,162749,150313],{"class":321},[30,162751,162752,162754,162756,162759],{"class":32,"line":8130},[30,162753,31437],{"class":40},[30,162755,322],{"class":321},[30,162757,162758],{"class":74},"\"取款成功\"",[30,162760,328],{"class":321},[30,162762,162763],{"class":32,"line":8154},[30,162764,162648],{"class":321},[30,162766,162767],{"class":32,"line":8159},[30,162768,2582],{"emptyLinePlaceholder":245},[30,162770,162771],{"class":32,"line":8165},[30,162772,2582],{"emptyLinePlaceholder":245},[30,162774,162775,162777,162779],{"class":32,"line":8192},[30,162776,108801],{"class":317},[30,162778,95430],{"class":40},[30,162780,3921],{"class":321},[30,162782,162783],{"class":32,"line":8197},[30,162784,162785],{"class":321},"    show_menu()\n",[30,162787,162788,162790,162792,162794,162796,162798],{"class":32,"line":8203},[30,162789,160830],{"class":321},[30,162791,367],{"class":317},[30,162793,60743],{"class":40},[30,162795,322],{"class":321},[30,162797,153211],{"class":74},[30,162799,328],{"class":321},[30,162801,162802],{"class":32,"line":8215},[30,162803,2582],{"emptyLinePlaceholder":245},[30,162805,162806,162808,162810,162812,162814],{"class":32,"line":8227},[30,162807,3283],{"class":317},[30,162809,153224],{"class":321},[30,162811,3131],{"class":317},[30,162813,153229],{"class":74},[30,162815,3921],{"class":321},[30,162817,162818],{"class":32,"line":8239},[30,162819,162820],{"class":321},"        show_balance()\n",[30,162822,162823,162825,162827,162829,162831],{"class":32,"line":9898},[30,162824,39431],{"class":317},[30,162826,153224],{"class":321},[30,162828,3131],{"class":317},[30,162830,153248],{"class":74},[30,162832,3921],{"class":321},[30,162834,162835],{"class":32,"line":9923},[30,162836,162837],{"class":321},"        save_money()\n",[30,162839,162840,162842,162844,162846,162848],{"class":32,"line":9946},[30,162841,39431],{"class":317},[30,162843,153224],{"class":321},[30,162845,3131],{"class":317},[30,162847,153266],{"class":74},[30,162849,3921],{"class":321},[30,162851,162852],{"class":32,"line":9970},[30,162853,162854],{"class":321},"        withdraw_money()\n",[30,162856,162857,162859,162861,162863,162865],{"class":32,"line":9975},[30,162858,39431],{"class":317},[30,162860,153224],{"class":321},[30,162862,3131],{"class":317},[30,162864,153320],{"class":74},[30,162866,3921],{"class":321},[30,162868,162869,162871,162873,162875],{"class":32,"line":9980},[30,162870,32589],{"class":40},[30,162872,322],{"class":321},[30,162874,153331],{"class":74},[30,162876,328],{"class":321},[30,162878,162879],{"class":32,"line":9985},[30,162880,31765],{"class":317},[30,162882,162883,162885],{"class":32,"line":9994},[30,162884,158160],{"class":317},[30,162886,3921],{"class":321},[30,162888,162889,162891,162893,162895],{"class":32,"line":9999},[30,162890,32589],{"class":40},[30,162892,322],{"class":321},[30,162894,153352],{"class":74},[30,162896,328],{"class":321},[157,162898,162899],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[15,162901,162903],{"id":162902},"_514-易错点","5.14 易错点",[271,162905,162906,162909,162912,162917,162922,162925],{},[150,162907,162908],{},"函数定义后必须调用才会执行。",[150,162910,162911],{},"函数名后面有括号才是调用。",[150,162913,162914,162916],{},[27,162915,17228],{}," 后面的代码不会执行。",[150,162918,162919,162920,28523],{},"没有返回值的函数默认返回 ",[27,162921,95824],{},[150,162923,162924],{},"局部变量不能在函数外部访问。",[150,162926,162927,162928,162930],{},"不要滥用 ",[27,162929,161964],{},"，更好的方式是让函数返回新值。",[157,162932,162933,162934,162936],{},"例如不用 ",[27,162935,161964],{}," 改写存款：",[20,162938,162940],{"className":30516,"code":162939,"language":30518,"meta":25,"style":25},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[27,162941,162942,162951,162962,162966,162970,162978,162991],{"__ignoreMap":25},[30,162943,162944,162946,162948],{"class":32,"line":33},[30,162945,32085],{"class":317},[30,162947,162568],{"class":36},[30,162949,162950],{"class":321},"(balance, money):\n",[30,162952,162953,162955,162958,162960],{"class":32,"line":44},[30,162954,4272],{"class":317},[30,162956,162957],{"class":321}," balance ",[30,162959,801],{"class":317},[30,162961,150313],{"class":321},[30,162963,162964],{"class":32,"line":52},[30,162965,2582],{"emptyLinePlaceholder":245},[30,162967,162968],{"class":32,"line":60},[30,162969,2582],{"emptyLinePlaceholder":245},[30,162971,162972,162974,162976],{"class":32,"line":68},[30,162973,162442],{"class":321},[30,162975,367],{"class":317},[30,162977,162447],{"class":40},[30,162979,162980,162982,162984,162987,162989],{"class":32,"line":80},[30,162981,162442],{"class":321},[30,162983,367],{"class":317},[30,162985,162986],{"class":321}," save_money(balance, ",[30,162988,1905],{"class":40},[30,162990,328],{"class":321},[30,162992,162993,162995],{"class":32,"line":88},[30,162994,30553],{"class":40},[30,162996,162997],{"class":321},"(balance)\n",[15,162999,163001],{"id":163000},"_515-本章练习","5.15 本章练习",[271,163003,163004,163011,163017,163023,163029],{},[150,163005,163006,163007,163010],{},"定义函数 ",[27,163008,163009],{},"print_student(name, age)","，输出学生信息。",[150,163012,163006,163013,163016],{},[27,163014,163015],{},"get_max(a, b, c)","，返回三个数中的最大值。",[150,163018,163006,163019,163022],{},[27,163020,163021],{},"is_even(num)","，判断一个数是否为偶数。",[150,163024,163006,163025,163028],{},[27,163026,163027],{},"calculate_bmi(weight, height)","，返回 BMI。",[150,163030,163031],{},"把第 4 章的菜单程序拆分成多个函数。",[234,163033,163034],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":44,"depth":44,"links":163036},[163037,163038,163039,163040,163041,163042,163043,163044,163045,163049,163050,163051,163052,163053,163054],{"id":161057,"depth":44,"text":161058},{"id":161098,"depth":44,"text":161099},{"id":161188,"depth":44,"text":161189},{"id":161269,"depth":44,"text":161270},{"id":161402,"depth":44,"text":161403},{"id":161524,"depth":44,"text":161525},{"id":161646,"depth":44,"text":161647},{"id":161723,"depth":44,"text":161724},{"id":161845,"depth":44,"text":161846,"children":163046},[163047,163048],{"id":161849,"depth":52,"text":161850},{"id":161907,"depth":52,"text":161908},{"id":162036,"depth":44,"text":162037},{"id":162162,"depth":44,"text":162163},{"id":162275,"depth":44,"text":162276},{"id":162431,"depth":44,"text":162432},{"id":162902,"depth":44,"text":162903},{"id":163000,"depth":44,"text":163001},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161049,"description":242},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163061,"title":163062,"body":163063,"description":242,"extension":243,"meta":166107,"navigation":245,"path":166108,"seo":166109,"stem":166110,"__hash__":166111},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163064,"toc":166088},[163065,163068,163072,163075,163078,163182,163185,163189,163192,163272,163275,163279,163282,163342,163345,163381,163384,163399,163403,163476,163479,163534,163537,163607,163610,163694,163704,163762,163766,163811,163814,163840,163843,163949,163953,163956,163998,164001,164065,164068,164072,164075,164136,164139,164169,164172,164210,164214,164217,164226,164229,164353,164356,164397,164401,164404,164415,164455,164458,164473,164478,164481,164548,164551,164641,164645,164648,164696,164699,164726,164728,164758,164761,164781,164784,164815,164818,164851,164855,164858,164882,164885,164909,164912,164936,164940,164943,165073,165076,165156,165159,165234,165238,165241,165291,165294,165336,165339,165363,165365,165389,165392,165447,165450,165516,165520,165523,165526,165564,165567,165620,165623,165669,165672,165705,165708,165712,166031,166035,166064,166068,166085],[10,163066,163062],{"id":163067},"_6-数据容器",[15,163069,163071],{"id":163070},"_61-什么是数据容器","6.1 什么是数据容器",[157,163073,163074],{},"数据容器用于一次保存多个数据。",[157,163076,163077],{},"常见容器：",[457,163079,163080,163097],{},[460,163081,163082],{},[463,163083,163084,163086,163089,163092,163095],{},[466,163085,25909],{},[466,163087,163088],{},"是否有序",[466,163090,163091],{},"是否可变",[466,163093,163094],{},"是否允许重复",[466,163096,27630],{},[504,163098,163099,163117,163133,163148,163165],{},[463,163100,163101,163104,163107,163110,163113],{},[509,163102,163103],{},"list列表",[509,163105,163106],{},"有序",[509,163108,163109],{},"可变",[509,163111,163112],{},"允许",[509,163114,163115],{},[27,163116,155395],{},[463,163118,163119,163122,163124,163127,163129],{},[509,163120,163121],{},"tuple元组",[509,163123,163106],{},[509,163125,163126],{},"不可变",[509,163128,163112],{},[509,163130,163131],{},[27,163132,155408],{},[463,163134,163135,163138,163140,163142,163144],{},[509,163136,163137],{},"str字符串",[509,163139,163106],{},[509,163141,163126],{},[509,163143,163112],{},[509,163145,163146],{},[27,163147,156018],{},[463,163149,163150,163153,163156,163158,163161],{},[509,163151,163152],{},"set集合",[509,163154,163155],{},"无序",[509,163157,163109],{},[509,163159,163160],{},"不允许",[509,163162,163163],{},[27,163164,155433],{},[463,163166,163167,163170,163172,163174,163177],{},[509,163168,163169],{},"dict字典",[509,163171,163106],{},[509,163173,163109],{},[509,163175,163176],{},"key不允许重复",[509,163178,163179],{},[27,163180,163181],{},"{\"name\": \"小明\"}",[157,163183,163184],{},"Python 3.7 之后，字典保持插入顺序。",[15,163186,163188],{"id":163187},"_62-列表list","6.2 列表list",[157,163190,163191],{},"列表用于保存一组有顺序的数据。",[20,163193,163195],{"className":30516,"code":163194,"language":30518,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[27,163196,163197,163217,163242,163263],{"__ignoreMap":25},[30,163198,163199,163201,163203,163205,163207,163209,163211,163213,163215],{"class":32,"line":33},[30,163200,160518],{"class":321},[30,163202,367],{"class":317},[30,163204,52364],{"class":321},[30,163206,150026],{"class":74},[30,163208,12617],{"class":321},[30,163210,151074],{"class":74},[30,163212,12617],{"class":321},[30,163214,159869],{"class":74},[30,163216,33384],{"class":321},[30,163218,163219,163222,163224,163226,163228,163230,163232,163234,163236,163238,163240],{"class":32,"line":44},[30,163220,163221],{"class":321},"numbers ",[30,163223,367],{"class":317},[30,163225,52364],{"class":321},[30,163227,537],{"class":40},[30,163229,12617],{"class":321},[30,163231,398],{"class":40},[30,163233,12617],{"class":321},[30,163235,392],{"class":40},[30,163237,12617],{"class":321},[30,163239,613],{"class":40},[30,163241,33384],{"class":321},[30,163243,163244,163247,163249,163251,163253,163255,163257,163259,163261],{"class":32,"line":52},[30,163245,163246],{"class":321},"mixed ",[30,163248,367],{"class":317},[30,163250,52364],{"class":321},[30,163252,150026],{"class":74},[30,163254,12617],{"class":321},[30,163256,970],{"class":40},[30,163258,12617],{"class":321},[30,163260,31614],{"class":40},[30,163262,33384],{"class":321},[30,163264,163265,163268,163270],{"class":32,"line":60},[30,163266,163267],{"class":321},"empty ",[30,163269,367],{"class":317},[30,163271,51976],{"class":321},[157,163273,163274],{},"推荐一个列表中保存同类数据，代码更清晰。",[15,163276,163278],{"id":163277},"_63-列表索引","6.3 列表索引",[157,163280,163281],{},"正向索引从 0 开始：",[20,163283,163285],{"className":30516,"code":163284,"language":30518,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[27,163286,163287,163307,163311,163322,163332],{"__ignoreMap":25},[30,163288,163289,163291,163293,163295,163297,163299,163301,163303,163305],{"class":32,"line":33},[30,163290,160518],{"class":321},[30,163292,367],{"class":317},[30,163294,52364],{"class":321},[30,163296,150026],{"class":74},[30,163298,12617],{"class":321},[30,163300,151074],{"class":74},[30,163302,12617],{"class":321},[30,163304,159869],{"class":74},[30,163306,33384],{"class":321},[30,163308,163309],{"class":32,"line":44},[30,163310,2582],{"emptyLinePlaceholder":245},[30,163312,163313,163315,163318,163320],{"class":32,"line":52},[30,163314,30553],{"class":40},[30,163316,163317],{"class":321},"(names[",[30,163319,511],{"class":40},[30,163321,4839],{"class":321},[30,163323,163324,163326,163328,163330],{"class":32,"line":60},[30,163325,30553],{"class":40},[30,163327,163317],{"class":321},[30,163329,537],{"class":40},[30,163331,4839],{"class":321},[30,163333,163334,163336,163338,163340],{"class":32,"line":68},[30,163335,30553],{"class":40},[30,163337,163317],{"class":321},[30,163339,398],{"class":40},[30,163341,4839],{"class":321},[157,163343,163344],{},"反向索引从 -1 开始：",[20,163346,163348],{"className":30516,"code":163347,"language":30518,"meta":25,"style":25},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[27,163349,163350,163366],{"__ignoreMap":25},[30,163351,163352,163354,163356,163358,163360,163363],{"class":32,"line":33},[30,163353,30553],{"class":40},[30,163355,163317],{"class":321},[30,163357,852],{"class":317},[30,163359,537],{"class":40},[30,163361,163362],{"class":321},"])  ",[30,163364,163365],{"class":379},"# 小刚\n",[30,163367,163368,163370,163372,163374,163376,163378],{"class":32,"line":44},[30,163369,30553],{"class":40},[30,163371,163317],{"class":321},[30,163373,852],{"class":317},[30,163375,398],{"class":40},[30,163377,163362],{"class":321},[30,163379,163380],{"class":379},"# 小红\n",[157,163382,163383],{},"索引越界会报错：",[20,163385,163387],{"className":30516,"code":163386,"language":30518,"meta":25,"style":25},"print(names[3])\n",[27,163388,163389],{"__ignoreMap":25},[30,163390,163391,163393,163395,163397],{"class":32,"line":33},[30,163392,30553],{"class":40},[30,163394,163317],{"class":321},[30,163396,392],{"class":40},[30,163398,4839],{"class":321},[15,163400,163402],{"id":163401},"_64-列表常用方法","6.4 列表常用方法",[20,163404,163406],{"className":30516,"code":163405,"language":30518,"meta":25,"style":25},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[27,163407,163408,163424,163428,163437,163451,163465,163469],{"__ignoreMap":25},[30,163409,163410,163412,163414,163416,163418,163420,163422],{"class":32,"line":33},[30,163411,160518],{"class":321},[30,163413,367],{"class":317},[30,163415,52364],{"class":321},[30,163417,150026],{"class":74},[30,163419,12617],{"class":321},[30,163421,151074],{"class":74},[30,163423,33384],{"class":321},[30,163425,163426],{"class":32,"line":44},[30,163427,2582],{"emptyLinePlaceholder":245},[30,163429,163430,163433,163435],{"class":32,"line":52},[30,163431,163432],{"class":321},"names.append(",[30,163434,159869],{"class":74},[30,163436,328],{"class":321},[30,163438,163439,163442,163444,163446,163449],{"class":32,"line":60},[30,163440,163441],{"class":321},"names.insert(",[30,163443,537],{"class":40},[30,163445,12617],{"class":321},[30,163447,163448],{"class":74},"\"小李\"",[30,163450,328],{"class":321},[30,163452,163453,163456,163458,163460,163463],{"class":32,"line":68},[30,163454,163455],{"class":321},"names.extend([",[30,163457,8865],{"class":74},[30,163459,12617],{"class":321},[30,163461,163462],{"class":74},"\"小赵\"",[30,163464,4839],{"class":321},[30,163466,163467],{"class":32,"line":80},[30,163468,2582],{"emptyLinePlaceholder":245},[30,163470,163471,163473],{"class":32,"line":88},[30,163472,30553],{"class":40},[30,163474,163475],{"class":321},"(names)\n",[157,163477,163478],{},"删除元素：",[20,163480,163482],{"className":30516,"code":163481,"language":30518,"meta":25,"style":25},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[27,163483,163484,163493,163503,163517,163529],{"__ignoreMap":25},[30,163485,163486,163489,163491],{"class":32,"line":33},[30,163487,163488],{"class":321},"names.remove(",[30,163490,151074],{"class":74},[30,163492,328],{"class":321},[30,163494,163495,163498,163500],{"class":32,"line":44},[30,163496,163497],{"class":321},"last ",[30,163499,367],{"class":317},[30,163501,163502],{"class":321}," names.pop()\n",[30,163504,163505,163508,163510,163513,163515],{"class":32,"line":52},[30,163506,163507],{"class":321},"first ",[30,163509,367],{"class":317},[30,163511,163512],{"class":321}," names.pop(",[30,163514,511],{"class":40},[30,163516,328],{"class":321},[30,163518,163519,163522,163525,163527],{"class":32,"line":60},[30,163520,163521],{"class":317},"del",[30,163523,163524],{"class":321}," names[",[30,163526,511],{"class":40},[30,163528,33384],{"class":321},[30,163530,163531],{"class":32,"line":68},[30,163532,163533],{"class":321},"names.clear()\n",[157,163535,163536],{},"查询和统计：",[20,163538,163540],{"className":30516,"code":163539,"language":30518,"meta":25,"style":25},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[27,163541,163542,163570,163574,163585,163596],{"__ignoreMap":25},[30,163543,163544,163546,163548,163550,163552,163554,163556,163558,163560,163562,163564,163566,163568],{"class":32,"line":33},[30,163545,163221],{"class":321},[30,163547,367],{"class":317},[30,163549,52364],{"class":321},[30,163551,537],{"class":40},[30,163553,12617],{"class":321},[30,163555,398],{"class":40},[30,163557,12617],{"class":321},[30,163559,392],{"class":40},[30,163561,12617],{"class":321},[30,163563,398],{"class":40},[30,163565,12617],{"class":321},[30,163567,613],{"class":40},[30,163569,33384],{"class":321},[30,163571,163572],{"class":32,"line":44},[30,163573,2582],{"emptyLinePlaceholder":245},[30,163575,163576,163578,163581,163583],{"class":32,"line":52},[30,163577,30553],{"class":40},[30,163579,163580],{"class":321},"(numbers.index(",[30,163582,392],{"class":40},[30,163584,30635],{"class":321},[30,163586,163587,163589,163592,163594],{"class":32,"line":60},[30,163588,30553],{"class":40},[30,163590,163591],{"class":321},"(numbers.count(",[30,163593,398],{"class":40},[30,163595,30635],{"class":321},[30,163597,163598,163600,163602,163604],{"class":32,"line":68},[30,163599,30553],{"class":40},[30,163601,322],{"class":321},[30,163603,7540],{"class":40},[30,163605,163606],{"class":321},"(numbers))\n",[157,163608,163609],{},"排序：",[20,163611,163613],{"className":30516,"code":163612,"language":30518,"meta":25,"style":25},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[27,163614,163615,163639,163643,163648,163655,163659,163673,163679,163683,163688],{"__ignoreMap":25},[30,163616,163617,163619,163621,163623,163625,163627,163629,163631,163633,163635,163637],{"class":32,"line":33},[30,163618,163221],{"class":321},[30,163620,367],{"class":317},[30,163622,52364],{"class":321},[30,163624,392],{"class":40},[30,163626,12617],{"class":321},[30,163628,537],{"class":40},[30,163630,12617],{"class":321},[30,163632,639],{"class":40},[30,163634,12617],{"class":321},[30,163636,398],{"class":40},[30,163638,33384],{"class":321},[30,163640,163641],{"class":32,"line":44},[30,163642,2582],{"emptyLinePlaceholder":245},[30,163644,163645],{"class":32,"line":52},[30,163646,163647],{"class":321},"numbers.sort()\n",[30,163649,163650,163652],{"class":32,"line":60},[30,163651,30553],{"class":40},[30,163653,163654],{"class":321},"(numbers)\n",[30,163656,163657],{"class":32,"line":68},[30,163658,2582],{"emptyLinePlaceholder":245},[30,163660,163661,163664,163667,163669,163671],{"class":32,"line":80},[30,163662,163663],{"class":321},"numbers.sort(",[30,163665,163666],{"class":5398},"reverse",[30,163668,367],{"class":317},[30,163670,31614],{"class":40},[30,163672,328],{"class":321},[30,163674,163675,163677],{"class":32,"line":88},[30,163676,30553],{"class":40},[30,163678,163654],{"class":321},[30,163680,163681],{"class":32,"line":96},[30,163682,2582],{"emptyLinePlaceholder":245},[30,163684,163685],{"class":32,"line":104},[30,163686,163687],{"class":321},"numbers.reverse()\n",[30,163689,163690,163692],{"class":32,"line":112},[30,163691,30553],{"class":40},[30,163693,163654],{"class":321},[157,163695,163696,163699,163700,163703],{},[27,163697,163698],{},"sort()"," 会修改原列表，",[27,163701,163702],{},"sorted()"," 返回新列表。",[20,163705,163707],{"className":30516,"code":163706,"language":30518,"meta":25,"style":25},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[27,163708,163709,163733,163745,163749,163755],{"__ignoreMap":25},[30,163710,163711,163713,163715,163717,163719,163721,163723,163725,163727,163729,163731],{"class":32,"line":33},[30,163712,163221],{"class":321},[30,163714,367],{"class":317},[30,163716,52364],{"class":321},[30,163718,392],{"class":40},[30,163720,12617],{"class":321},[30,163722,537],{"class":40},[30,163724,12617],{"class":321},[30,163726,639],{"class":40},[30,163728,12617],{"class":321},[30,163730,398],{"class":40},[30,163732,33384],{"class":321},[30,163734,163735,163738,163740,163743],{"class":32,"line":44},[30,163736,163737],{"class":321},"new_numbers ",[30,163739,367],{"class":317},[30,163741,163742],{"class":40}," sorted",[30,163744,163654],{"class":321},[30,163746,163747],{"class":32,"line":52},[30,163748,2582],{"emptyLinePlaceholder":245},[30,163750,163751,163753],{"class":32,"line":60},[30,163752,30553],{"class":40},[30,163754,163654],{"class":321},[30,163756,163757,163759],{"class":32,"line":68},[30,163758,30553],{"class":40},[30,163760,163761],{"class":321},"(new_numbers)\n",[15,163763,163765],{"id":163764},"_65-列表遍历","6.5 列表遍历",[20,163767,163769],{"className":30516,"code":163768,"language":30518,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[27,163770,163771,163791,163795,163805],{"__ignoreMap":25},[30,163772,163773,163775,163777,163779,163781,163783,163785,163787,163789],{"class":32,"line":33},[30,163774,160518],{"class":321},[30,163776,367],{"class":317},[30,163778,52364],{"class":321},[30,163780,150026],{"class":74},[30,163782,12617],{"class":321},[30,163784,151074],{"class":74},[30,163786,12617],{"class":321},[30,163788,159869],{"class":74},[30,163790,33384],{"class":321},[30,163792,163793],{"class":32,"line":44},[30,163794,2582],{"emptyLinePlaceholder":245},[30,163796,163797,163799,163801,163803],{"class":32,"line":52},[30,163798,3207],{"class":317},[30,163800,160554],{"class":321},[30,163802,26181],{"class":317},[30,163804,160559],{"class":321},[30,163806,163807,163809],{"class":32,"line":60},[30,163808,31437],{"class":40},[30,163810,150798],{"class":321},[157,163812,163813],{},"需要索引时：",[20,163815,163817],{"className":30516,"code":163816,"language":30518,"meta":25,"style":25},"for index, name in enumerate(names):\n    print(index, name)\n",[27,163818,163819,163833],{"__ignoreMap":25},[30,163820,163821,163823,163826,163828,163830],{"class":32,"line":33},[30,163822,3207],{"class":317},[30,163824,163825],{"class":321}," index, name ",[30,163827,26181],{"class":317},[30,163829,31744],{"class":40},[30,163831,163832],{"class":321},"(names):\n",[30,163834,163835,163837],{"class":32,"line":44},[30,163836,31437],{"class":40},[30,163838,163839],{"class":321},"(index, name)\n",[157,163841,163842],{},"统计总分：",[20,163844,163846],{"className":30516,"code":163845,"language":30518,"meta":25,"style":25},"scores = [90, 85, 66, 78]\ntotal = 0\n\nfor score in scores:\n    total += score\n\navg = total \u002F len(scores)\nprint(f\"平均分:{avg:.2f}\")\n",[27,163847,163848,163873,163881,163885,163896,163904,163908,163925],{"__ignoreMap":25},[30,163849,163850,163853,163855,163857,163859,163861,163863,163865,163867,163869,163871],{"class":32,"line":33},[30,163851,163852],{"class":321},"scores ",[30,163854,367],{"class":317},[30,163856,52364],{"class":321},[30,163858,1182],{"class":40},[30,163860,12617],{"class":321},[30,163862,1056],{"class":40},[30,163864,12617],{"class":321},[30,163866,574],{"class":40},[30,163868,12617],{"class":321},[30,163870,881],{"class":40},[30,163872,33384],{"class":321},[30,163874,163875,163877,163879],{"class":32,"line":44},[30,163876,157398],{"class":321},[30,163878,367],{"class":317},[30,163880,47471],{"class":40},[30,163882,163883],{"class":32,"line":52},[30,163884,2582],{"emptyLinePlaceholder":245},[30,163886,163887,163889,163891,163893],{"class":32,"line":60},[30,163888,3207],{"class":317},[30,163890,157921],{"class":321},[30,163892,26181],{"class":317},[30,163894,163895],{"class":321}," scores:\n",[30,163897,163898,163900,163902],{"class":32,"line":68},[30,163899,159445],{"class":321},[30,163901,9659],{"class":317},[30,163903,1765],{"class":321},[30,163905,163906],{"class":32,"line":80},[30,163907,2582],{"emptyLinePlaceholder":245},[30,163909,163910,163913,163915,163918,163920,163922],{"class":32,"line":88},[30,163911,163912],{"class":321},"avg ",[30,163914,367],{"class":317},[30,163916,163917],{"class":321}," total ",[30,163919,904],{"class":317},[30,163921,7513],{"class":40},[30,163923,163924],{"class":321},"(scores)\n",[30,163926,163927,163929,163931,163933,163936,163938,163941,163943,163945,163947],{"class":32,"line":96},[30,163928,30553],{"class":40},[30,163930,322],{"class":321},[30,163932,373],{"class":317},[30,163934,163935],{"class":74},"\"平均分:",[30,163937,1216],{"class":40},[30,163939,163940],{"class":321},"avg",[30,163942,157297],{"class":317},[30,163944,1266],{"class":40},[30,163946,571],{"class":74},[30,163948,328],{"class":321},[15,163950,163952],{"id":163951},"_66-元组tuple","6.6 元组tuple",[157,163954,163955],{},"元组和列表类似，但不可修改。",[20,163957,163959],{"className":30516,"code":163958,"language":30518,"meta":25,"style":25},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[27,163960,163961,163978],{"__ignoreMap":25},[30,163962,163963,163966,163968,163970,163972,163974,163976],{"class":32,"line":33},[30,163964,163965],{"class":321},"point ",[30,163967,367],{"class":317},[30,163969,1841],{"class":321},[30,163971,766],{"class":40},[30,163973,12617],{"class":321},[30,163975,1020],{"class":40},[30,163977,328],{"class":321},[30,163979,163980,163982,163984,163986,163988,163990,163992,163994,163996],{"class":32,"line":44},[30,163981,116452],{"class":321},[30,163983,367],{"class":317},[30,163985,1841],{"class":321},[30,163987,150026],{"class":74},[30,163989,12617],{"class":321},[30,163991,970],{"class":40},[30,163993,12617],{"class":321},[30,163995,69407],{"class":74},[30,163997,328],{"class":321},[157,163999,164000],{},"单元素元组必须加逗号：",[20,164002,164004],{"className":30516,"code":164003,"language":30518,"meta":25,"style":25},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[27,164005,164006,164020,164033,164037,164051],{"__ignoreMap":25},[30,164007,164008,164011,164013,164015,164017],{"class":32,"line":33},[30,164009,164010],{"class":321},"t1 ",[30,164012,367],{"class":317},[30,164014,1841],{"class":321},[30,164016,766],{"class":40},[30,164018,164019],{"class":321},",)\n",[30,164021,164022,164025,164027,164029,164031],{"class":32,"line":44},[30,164023,164024],{"class":321},"t2 ",[30,164026,367],{"class":317},[30,164028,1841],{"class":321},[30,164030,766],{"class":40},[30,164032,328],{"class":321},[30,164034,164035],{"class":32,"line":52},[30,164036,2582],{"emptyLinePlaceholder":245},[30,164038,164039,164041,164043,164045,164048],{"class":32,"line":60},[30,164040,30553],{"class":40},[30,164042,322],{"class":321},[30,164044,103245],{"class":40},[30,164046,164047],{"class":321},"(t1))  ",[30,164049,164050],{"class":379},"# tuple\n",[30,164052,164053,164055,164057,164059,164062],{"class":32,"line":68},[30,164054,30553],{"class":40},[30,164056,322],{"class":321},[30,164058,103245],{"class":40},[30,164060,164061],{"class":321},"(t2))  ",[30,164063,164064],{"class":379},"# int\n",[157,164066,164067],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[15,164069,164071],{"id":164070},"_67-字符串str","6.7 字符串str",[157,164073,164074],{},"字符串也是序列，可以索引、切片和遍历。",[20,164076,164078],{"className":30516,"code":164077,"language":30518,"meta":25,"style":25},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[27,164079,164080,164088,164092,164103,164115,164119,164130],{"__ignoreMap":25},[30,164081,164082,164084,164086],{"class":32,"line":33},[30,164083,156582],{"class":321},[30,164085,367],{"class":317},[30,164087,159819],{"class":74},[30,164089,164090],{"class":32,"line":44},[30,164091,2582],{"emptyLinePlaceholder":245},[30,164093,164094,164096,164099,164101],{"class":32,"line":52},[30,164095,30553],{"class":40},[30,164097,164098],{"class":321},"(text[",[30,164100,511],{"class":40},[30,164102,4839],{"class":321},[30,164104,164105,164107,164109,164111,164113],{"class":32,"line":60},[30,164106,30553],{"class":40},[30,164108,164098],{"class":321},[30,164110,852],{"class":317},[30,164112,537],{"class":40},[30,164114,4839],{"class":321},[30,164116,164117],{"class":32,"line":68},[30,164118,2582],{"emptyLinePlaceholder":245},[30,164120,164121,164123,164125,164127],{"class":32,"line":80},[30,164122,3207],{"class":317},[30,164124,159830],{"class":321},[30,164126,26181],{"class":317},[30,164128,164129],{"class":321}," text:\n",[30,164131,164132,164134],{"class":32,"line":88},[30,164133,31437],{"class":40},[30,164135,159841],{"class":321},[157,164137,164138],{},"字符串不可变：",[20,164140,164142],{"className":30516,"code":164141,"language":30518,"meta":25,"style":25},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[27,164143,164144,164152],{"__ignoreMap":25},[30,164145,164146,164148,164150],{"class":32,"line":33},[30,164147,156582],{"class":321},[30,164149,367],{"class":317},[30,164151,159819],{"class":74},[30,164153,164154,164157,164159,164161,164163,164166],{"class":32,"line":44},[30,164155,164156],{"class":321},"text[",[30,164158,511],{"class":40},[30,164160,4625],{"class":321},[30,164162,367],{"class":317},[30,164164,164165],{"class":74}," \"P\"",[30,164167,164168],{"class":379},"  # 报错\n",[157,164170,164171],{},"如果要得到新字符串：",[20,164173,164175],{"className":30516,"code":164174,"language":30518,"meta":25,"style":25},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[27,164176,164177,164185,164203],{"__ignoreMap":25},[30,164178,164179,164181,164183],{"class":32,"line":33},[30,164180,156582],{"class":321},[30,164182,367],{"class":317},[30,164184,159819],{"class":74},[30,164186,164187,164189,164191,164193,164195,164198,164200],{"class":32,"line":44},[30,164188,156582],{"class":321},[30,164190,367],{"class":317},[30,164192,164165],{"class":74},[30,164194,45704],{"class":317},[30,164196,164197],{"class":321}," text[",[30,164199,537],{"class":40},[30,164201,164202],{"class":321},":]\n",[30,164204,164205,164207],{"class":32,"line":52},[30,164206,30553],{"class":40},[30,164208,164209],{"class":321},"(text)\n",[15,164211,164213],{"id":164212},"_68-切片","6.8 切片",[157,164215,164216],{},"切片用于从序列中取一部分。",[20,164218,164220],{"className":30516,"code":164219,"language":30518,"meta":25,"style":25},"序列[开始:结束:步长]\n",[27,164221,164222],{"__ignoreMap":25},[30,164223,164224],{"class":32,"line":33},[30,164225,164219],{"class":321},[157,164227,164228],{},"结束位置不包含。",[20,164230,164232],{"className":30516,"code":164231,"language":30518,"meta":25,"style":25},"nums = [0, 1, 2, 3, 4, 5, 6]\n\nprint(nums[1:4])    # [1, 2, 3]\nprint(nums[:3])     # [0, 1, 2]\nprint(nums[3:])     # [3, 4, 5, 6]\nprint(nums[::2])    # [0, 2, 4, 6]\nprint(nums[::-1])   # 反转\n",[27,164233,164234,164271,164275,164294,164309,164323,164337],{"__ignoreMap":25},[30,164235,164236,164239,164241,164243,164245,164247,164249,164251,164253,164255,164257,164259,164261,164263,164265,164267,164269],{"class":32,"line":33},[30,164237,164238],{"class":321},"nums ",[30,164240,367],{"class":317},[30,164242,52364],{"class":321},[30,164244,511],{"class":40},[30,164246,12617],{"class":321},[30,164248,537],{"class":40},[30,164250,12617],{"class":321},[30,164252,398],{"class":40},[30,164254,12617],{"class":321},[30,164256,392],{"class":40},[30,164258,12617],{"class":321},[30,164260,613],{"class":40},[30,164262,12617],{"class":321},[30,164264,639],{"class":40},[30,164266,12617],{"class":321},[30,164268,664],{"class":40},[30,164270,33384],{"class":321},[30,164272,164273],{"class":32,"line":44},[30,164274,2582],{"emptyLinePlaceholder":245},[30,164276,164277,164279,164282,164284,164286,164288,164291],{"class":32,"line":52},[30,164278,30553],{"class":40},[30,164280,164281],{"class":321},"(nums[",[30,164283,537],{"class":40},[30,164285,1179],{"class":321},[30,164287,613],{"class":40},[30,164289,164290],{"class":321},"])    ",[30,164292,164293],{"class":379},"# [1, 2, 3]\n",[30,164295,164296,164298,164301,164303,164306],{"class":32,"line":60},[30,164297,30553],{"class":40},[30,164299,164300],{"class":321},"(nums[:",[30,164302,392],{"class":40},[30,164304,164305],{"class":321},"])     ",[30,164307,164308],{"class":379},"# [0, 1, 2]\n",[30,164310,164311,164313,164315,164317,164320],{"class":32,"line":68},[30,164312,30553],{"class":40},[30,164314,164281],{"class":321},[30,164316,392],{"class":40},[30,164318,164319],{"class":321},":])     ",[30,164321,164322],{"class":379},"# [3, 4, 5, 6]\n",[30,164324,164325,164327,164330,164332,164334],{"class":32,"line":80},[30,164326,30553],{"class":40},[30,164328,164329],{"class":321},"(nums[::",[30,164331,398],{"class":40},[30,164333,164290],{"class":321},[30,164335,164336],{"class":379},"# [0, 2, 4, 6]\n",[30,164338,164339,164341,164343,164345,164347,164350],{"class":32,"line":88},[30,164340,30553],{"class":40},[30,164342,164329],{"class":321},[30,164344,852],{"class":317},[30,164346,537],{"class":40},[30,164348,164349],{"class":321},"])   ",[30,164351,164352],{"class":379},"# 反转\n",[157,164354,164355],{},"字符串切片：",[20,164357,164359],{"className":30516,"code":164358,"language":30518,"meta":25,"style":25},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[27,164360,164361,164370,164384],{"__ignoreMap":25},[30,164362,164363,164365,164367],{"class":32,"line":33},[30,164364,156582],{"class":321},[30,164366,367],{"class":317},[30,164368,164369],{"class":74}," \"abcdef\"\n",[30,164371,164372,164374,164376,164378,164380,164382],{"class":32,"line":44},[30,164373,30553],{"class":40},[30,164375,164098],{"class":321},[30,164377,537],{"class":40},[30,164379,1179],{"class":321},[30,164381,613],{"class":40},[30,164383,4839],{"class":321},[30,164385,164386,164388,164391,164393,164395],{"class":32,"line":52},[30,164387,30553],{"class":40},[30,164389,164390],{"class":321},"(text[::",[30,164392,852],{"class":317},[30,164394,537],{"class":40},[30,164396,4839],{"class":321},[15,164398,164400],{"id":164399},"_69-集合set","6.9 集合set",[157,164402,164403],{},"集合特点：",[271,164405,164406,164409,164412],{},[150,164407,164408],{},"无序。",[150,164410,164411],{},"元素不重复。",[150,164413,164414],{},"可以做交集、并集、差集。",[20,164416,164418],{"className":30516,"code":164417,"language":30518,"meta":25,"style":25},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[27,164419,164420,164448],{"__ignoreMap":25},[30,164421,164422,164424,164426,164428,164430,164432,164434,164436,164438,164440,164442,164444,164446],{"class":32,"line":33},[30,164423,164238],{"class":321},[30,164425,367],{"class":317},[30,164427,4630],{"class":321},[30,164429,537],{"class":40},[30,164431,12617],{"class":321},[30,164433,398],{"class":40},[30,164435,12617],{"class":321},[30,164437,392],{"class":40},[30,164439,12617],{"class":321},[30,164441,392],{"class":40},[30,164443,12617],{"class":321},[30,164445,613],{"class":40},[30,164447,1751],{"class":321},[30,164449,164450,164452],{"class":32,"line":44},[30,164451,30553],{"class":40},[30,164453,164454],{"class":321},"(nums)\n",[157,164456,164457],{},"创建空集合：",[20,164459,164461],{"className":30516,"code":164460,"language":30518,"meta":25,"style":25},"s = set()\n",[27,164462,164463],{"__ignoreMap":25},[30,164464,164465,164467,164469,164471],{"class":32,"line":33},[30,164466,10761],{"class":321},[30,164468,367],{"class":317},[30,164470,119860],{"class":40},[30,164472,2158],{"class":321},[157,164474,9207,164475,164477],{},[27,164476,32597],{}," 是空字典，不是空集合。",[157,164479,164480],{},"集合常用操作：",[20,164482,164484],{"className":30516,"code":164483,"language":30518,"meta":25,"style":25},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[27,164485,164486,164506,164510,164519,164528,164537],{"__ignoreMap":25},[30,164487,164488,164490,164492,164494,164496,164498,164500,164502,164504],{"class":32,"line":33},[30,164489,10761],{"class":321},[30,164491,367],{"class":317},[30,164493,4630],{"class":321},[30,164495,537],{"class":40},[30,164497,12617],{"class":321},[30,164499,398],{"class":40},[30,164501,12617],{"class":321},[30,164503,392],{"class":40},[30,164505,1751],{"class":321},[30,164507,164508],{"class":32,"line":44},[30,164509,2582],{"emptyLinePlaceholder":245},[30,164511,164512,164515,164517],{"class":32,"line":52},[30,164513,164514],{"class":321},"s.add(",[30,164516,613],{"class":40},[30,164518,328],{"class":321},[30,164520,164521,164524,164526],{"class":32,"line":60},[30,164522,164523],{"class":321},"s.remove(",[30,164525,398],{"class":40},[30,164527,328],{"class":321},[30,164529,164530,164533,164535],{"class":32,"line":68},[30,164531,164532],{"class":321},"s.discard(",[30,164534,766],{"class":40},[30,164536,328],{"class":321},[30,164538,164539,164541,164543,164545],{"class":32,"line":80},[30,164540,30553],{"class":40},[30,164542,322],{"class":321},[30,164544,7540],{"class":40},[30,164546,164547],{"class":321},"(s))\n",[157,164549,164550],{},"交并差：",[20,164552,164554],{"className":30516,"code":164553,"language":30518,"meta":25,"style":25},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[27,164555,164556,164576,164596,164600,164615,164628],{"__ignoreMap":25},[30,164557,164558,164560,164562,164564,164566,164568,164570,164572,164574],{"class":32,"line":33},[30,164559,11101],{"class":321},[30,164561,367],{"class":317},[30,164563,4630],{"class":321},[30,164565,537],{"class":40},[30,164567,12617],{"class":321},[30,164569,398],{"class":40},[30,164571,12617],{"class":321},[30,164573,392],{"class":40},[30,164575,1751],{"class":321},[30,164577,164578,164580,164582,164584,164586,164588,164590,164592,164594],{"class":32,"line":44},[30,164579,11127],{"class":321},[30,164581,367],{"class":317},[30,164583,4630],{"class":321},[30,164585,392],{"class":40},[30,164587,12617],{"class":321},[30,164589,613],{"class":40},[30,164591,12617],{"class":321},[30,164593,639],{"class":40},[30,164595,1751],{"class":321},[30,164597,164598],{"class":32,"line":52},[30,164599,2582],{"emptyLinePlaceholder":245},[30,164601,164602,164604,164607,164609,164612],{"class":32,"line":60},[30,164603,30553],{"class":40},[30,164605,164606],{"class":321},"(a ",[30,164608,673],{"class":317},[30,164610,164611],{"class":321}," b)  ",[30,164613,164614],{"class":379},"# 交集\n",[30,164616,164617,164619,164621,164623,164625],{"class":32,"line":68},[30,164618,30553],{"class":40},[30,164620,164606],{"class":321},[30,164622,1241],{"class":317},[30,164624,164611],{"class":321},[30,164626,164627],{"class":379},"# 并集\n",[30,164629,164630,164632,164634,164636,164638],{"class":32,"line":80},[30,164631,30553],{"class":40},[30,164633,164606],{"class":321},[30,164635,852],{"class":317},[30,164637,164611],{"class":321},[30,164639,164640],{"class":379},"# 差集\n",[15,164642,164644],{"id":164643},"_610-字典dict","6.10 字典dict",[157,164646,164647],{},"字典通过 key-value 保存数据。",[20,164649,164651],{"className":30516,"code":164650,"language":30518,"meta":25,"style":25},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[27,164652,164653,164661,164671,164682,164692],{"__ignoreMap":25},[30,164654,164655,164657,164659],{"class":32,"line":33},[30,164656,149619],{"class":321},[30,164658,367],{"class":317},[30,164660,15754],{"class":321},[30,164662,164663,164665,164667,164669],{"class":32,"line":44},[30,164664,147158],{"class":74},[30,164666,51575],{"class":321},[30,164668,150026],{"class":74},[30,164670,31604],{"class":321},[30,164672,164673,164676,164678,164680],{"class":32,"line":52},[30,164674,164675],{"class":74},"    \"age\"",[30,164677,51575],{"class":321},[30,164679,970],{"class":40},[30,164681,31604],{"class":321},[30,164683,164684,164687,164689],{"class":32,"line":60},[30,164685,164686],{"class":74},"    \"score\"",[30,164688,51575],{"class":321},[30,164690,164691],{"class":40},"95\n",[30,164693,164694],{"class":32,"line":68},[30,164695,1751],{"class":321},[157,164697,164698],{},"获取值：",[20,164700,164702],{"className":30516,"code":164701,"language":30518,"meta":25,"style":25},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[27,164703,164704,164715],{"__ignoreMap":25},[30,164705,164706,164708,164711,164713],{"class":32,"line":33},[30,164707,30553],{"class":40},[30,164709,164710],{"class":321},"(student[",[30,164712,62817],{"class":74},[30,164714,4839],{"class":321},[30,164716,164717,164719,164722,164724],{"class":32,"line":44},[30,164718,30553],{"class":40},[30,164720,164721],{"class":321},"(student.get(",[30,164723,62817],{"class":74},[30,164725,30635],{"class":321},[157,164727,15570],{},[20,164729,164731],{"className":30516,"code":164730,"language":30518,"meta":25,"style":25},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[27,164732,164733,164746],{"__ignoreMap":25},[30,164734,164735,164737,164740,164743],{"class":32,"line":33},[30,164736,152997],{"class":321},[30,164738,164739],{"class":74},"\"address\"",[30,164741,164742],{"class":321},"]     ",[30,164744,164745],{"class":379},"# key不存在会报错\n",[30,164747,164748,164751,164753,164755],{"class":32,"line":44},[30,164749,164750],{"class":321},"student.get(",[30,164752,164739],{"class":74},[30,164754,13896],{"class":321},[30,164756,164757],{"class":379},"# key不存在返回None\n",[157,164759,164760],{},"设置默认值：",[20,164762,164764],{"className":30516,"code":164763,"language":30518,"meta":25,"style":25},"print(student.get(\"address\", \"未知\"))\n",[27,164765,164766],{"__ignoreMap":25},[30,164767,164768,164770,164772,164774,164776,164779],{"class":32,"line":33},[30,164769,30553],{"class":40},[30,164771,164721],{"class":321},[30,164773,164739],{"class":74},[30,164775,12617],{"class":321},[30,164777,164778],{"class":74},"\"未知\"",[30,164780,30635],{"class":321},[157,164782,164783],{},"新增和修改：",[20,164785,164787],{"className":30516,"code":164786,"language":30518,"meta":25,"style":25},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[27,164788,164789,164802],{"__ignoreMap":25},[30,164790,164791,164793,164795,164797,164799],{"class":32,"line":33},[30,164792,152997],{"class":321},[30,164794,69262],{"class":74},[30,164796,4625],{"class":321},[30,164798,367],{"class":317},[30,164800,164801],{"class":40}," 19\n",[30,164803,164804,164806,164808,164810,164812],{"class":32,"line":44},[30,164805,152997],{"class":321},[30,164807,164739],{"class":74},[30,164809,4625],{"class":321},[30,164811,367],{"class":317},[30,164813,164814],{"class":74}," \"北京\"\n",[157,164816,164817],{},"删除：",[20,164819,164821],{"className":30516,"code":164820,"language":30518,"meta":25,"style":25},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[27,164822,164823,164836,164846],{"__ignoreMap":25},[30,164824,164825,164827,164829,164832,164834],{"class":32,"line":33},[30,164826,155496],{"class":321},[30,164828,367],{"class":317},[30,164830,164831],{"class":321}," student.pop(",[30,164833,151610],{"class":74},[30,164835,328],{"class":321},[30,164837,164838,164840,164842,164844],{"class":32,"line":44},[30,164839,163521],{"class":317},[30,164841,152287],{"class":321},[30,164843,69262],{"class":74},[30,164845,33384],{"class":321},[30,164847,164848],{"class":32,"line":52},[30,164849,164850],{"class":321},"student.clear()\n",[15,164852,164854],{"id":164853},"_611-字典遍历","6.11 字典遍历",[157,164856,164857],{},"遍历 key：",[20,164859,164861],{"className":30516,"code":164860,"language":30518,"meta":25,"style":25},"for key in student:\n    print(key, student[key])\n",[27,164862,164863,164875],{"__ignoreMap":25},[30,164864,164865,164867,164870,164872],{"class":32,"line":33},[30,164866,3207],{"class":317},[30,164868,164869],{"class":321}," key ",[30,164871,26181],{"class":317},[30,164873,164874],{"class":321}," student:\n",[30,164876,164877,164879],{"class":32,"line":44},[30,164878,31437],{"class":40},[30,164880,164881],{"class":321},"(key, student[key])\n",[157,164883,164884],{},"遍历 value：",[20,164886,164888],{"className":30516,"code":164887,"language":30518,"meta":25,"style":25},"for value in student.values():\n    print(value)\n",[27,164889,164890,164902],{"__ignoreMap":25},[30,164891,164892,164894,164897,164899],{"class":32,"line":33},[30,164893,3207],{"class":317},[30,164895,164896],{"class":321}," value ",[30,164898,26181],{"class":317},[30,164900,164901],{"class":321}," student.values():\n",[30,164903,164904,164906],{"class":32,"line":44},[30,164905,31437],{"class":40},[30,164907,164908],{"class":321},"(value)\n",[157,164910,164911],{},"遍历 key 和 value：",[20,164913,164915],{"className":30516,"code":164914,"language":30518,"meta":25,"style":25},"for key, value in student.items():\n    print(key, value)\n",[27,164916,164917,164929],{"__ignoreMap":25},[30,164918,164919,164921,164924,164926],{"class":32,"line":33},[30,164920,3207],{"class":317},[30,164922,164923],{"class":321}," key, value ",[30,164925,26181],{"class":317},[30,164927,164928],{"class":321}," student.items():\n",[30,164930,164931,164933],{"class":32,"line":44},[30,164932,31437],{"class":40},[30,164934,164935],{"class":321},"(key, value)\n",[15,164937,164939],{"id":164938},"_612-嵌套容器","6.12 嵌套容器",[157,164941,164942],{},"列表中保存字典，是项目中最常见的结构之一。",[20,164944,164946],{"className":30516,"code":164945,"language":30518,"meta":25,"style":25},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 72},\n]\n\nfor student in students:\n    print(student[\"name\"], student[\"score\"])\n",[27,164947,164948,164956,164984,165012,165040,165044,165048,165058],{"__ignoreMap":25},[30,164949,164950,164952,164954],{"class":32,"line":33},[30,164951,159854],{"class":321},[30,164953,367],{"class":317},[30,164955,55585],{"class":321},[30,164957,164958,164960,164962,164964,164966,164968,164970,164972,164974,164976,164978,164980,164982],{"class":32,"line":44},[30,164959,148523],{"class":321},[30,164961,62817],{"class":74},[30,164963,51575],{"class":321},[30,164965,150026],{"class":74},[30,164967,12617],{"class":321},[30,164969,69262],{"class":74},[30,164971,51575],{"class":321},[30,164973,970],{"class":40},[30,164975,12617],{"class":321},[30,164977,151610],{"class":74},[30,164979,51575],{"class":321},[30,164981,1309],{"class":40},[30,164983,5112],{"class":321},[30,164985,164986,164988,164990,164992,164994,164996,164998,165000,165002,165004,165006,165008,165010],{"class":32,"line":52},[30,164987,148523],{"class":321},[30,164989,62817],{"class":74},[30,164991,51575],{"class":321},[30,164993,151074],{"class":74},[30,164995,12617],{"class":321},[30,164997,69262],{"class":74},[30,164999,51575],{"class":321},[30,165001,945],{"class":40},[30,165003,12617],{"class":321},[30,165005,151610],{"class":74},[30,165007,51575],{"class":321},[30,165009,1131],{"class":40},[30,165011,5112],{"class":321},[30,165013,165014,165016,165018,165020,165022,165024,165026,165028,165030,165032,165034,165036,165038],{"class":32,"line":60},[30,165015,148523],{"class":321},[30,165017,62817],{"class":74},[30,165019,51575],{"class":321},[30,165021,159869],{"class":74},[30,165023,12617],{"class":321},[30,165025,69262],{"class":74},[30,165027,51575],{"class":321},[30,165029,995],{"class":40},[30,165031,12617],{"class":321},[30,165033,151610],{"class":74},[30,165035,51575],{"class":321},[30,165037,726],{"class":40},[30,165039,5112],{"class":321},[30,165041,165042],{"class":32,"line":68},[30,165043,33384],{"class":321},[30,165045,165046],{"class":32,"line":80},[30,165047,2582],{"emptyLinePlaceholder":245},[30,165049,165050,165052,165054,165056],{"class":32,"line":88},[30,165051,3207],{"class":317},[30,165053,152275],{"class":321},[30,165055,26181],{"class":317},[30,165057,152280],{"class":321},[30,165059,165060,165062,165064,165066,165069,165071],{"class":32,"line":96},[30,165061,31437],{"class":40},[30,165063,164710],{"class":321},[30,165065,62817],{"class":74},[30,165067,165068],{"class":321},"], student[",[30,165070,151610],{"class":74},[30,165072,4839],{"class":321},[157,165074,165075],{},"统计平均分：",[20,165077,165079],{"className":30516,"code":165078,"language":30518,"meta":25,"style":25},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[27,165080,165081,165089,165093,165103,165115,165119,165134],{"__ignoreMap":25},[30,165082,165083,165085,165087],{"class":32,"line":33},[30,165084,157398],{"class":321},[30,165086,367],{"class":317},[30,165088,47471],{"class":40},[30,165090,165091],{"class":32,"line":44},[30,165092,2582],{"emptyLinePlaceholder":245},[30,165094,165095,165097,165099,165101],{"class":32,"line":52},[30,165096,3207],{"class":317},[30,165098,152275],{"class":321},[30,165100,26181],{"class":317},[30,165102,152280],{"class":321},[30,165104,165105,165107,165109,165111,165113],{"class":32,"line":60},[30,165106,159445],{"class":321},[30,165108,9659],{"class":317},[30,165110,152287],{"class":321},[30,165112,151610],{"class":74},[30,165114,33384],{"class":321},[30,165116,165117],{"class":32,"line":68},[30,165118,2582],{"emptyLinePlaceholder":245},[30,165120,165121,165123,165125,165127,165129,165131],{"class":32,"line":80},[30,165122,163912],{"class":321},[30,165124,367],{"class":317},[30,165126,163917],{"class":321},[30,165128,904],{"class":317},[30,165130,7513],{"class":40},[30,165132,165133],{"class":321},"(students)\n",[30,165135,165136,165138,165140,165142,165144,165146,165148,165150,165152,165154],{"class":32,"line":88},[30,165137,30553],{"class":40},[30,165139,322],{"class":321},[30,165141,373],{"class":317},[30,165143,163935],{"class":74},[30,165145,1216],{"class":40},[30,165147,163940],{"class":321},[30,165149,157297],{"class":317},[30,165151,1266],{"class":40},[30,165153,571],{"class":74},[30,165155,328],{"class":321},[157,165157,165158],{},"查找学生：",[20,165160,165162],{"className":30516,"code":165161,"language":30518,"meta":25,"style":25},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[27,165163,165164,165179,165183,165193,165207,165213,165217,165223],{"__ignoreMap":25},[30,165165,165166,165168,165170,165172,165174,165177],{"class":32,"line":33},[30,165167,111716],{"class":321},[30,165169,367],{"class":317},[30,165171,60743],{"class":40},[30,165173,322],{"class":321},[30,165175,165176],{"class":74},"\"请输入学生姓名:\"",[30,165178,328],{"class":321},[30,165180,165181],{"class":32,"line":44},[30,165182,2582],{"emptyLinePlaceholder":245},[30,165184,165185,165187,165189,165191],{"class":32,"line":52},[30,165186,3207],{"class":317},[30,165188,152275],{"class":321},[30,165190,26181],{"class":317},[30,165192,152280],{"class":321},[30,165194,165195,165197,165199,165201,165203,165205],{"class":32,"line":60},[30,165196,3283],{"class":317},[30,165198,152287],{"class":321},[30,165200,62817],{"class":74},[30,165202,4625],{"class":321},[30,165204,3131],{"class":317},[30,165206,160570],{"class":321},[30,165208,165209,165211],{"class":32,"line":68},[30,165210,32589],{"class":40},[30,165212,150180],{"class":321},[30,165214,165215],{"class":32,"line":80},[30,165216,31765],{"class":317},[30,165218,165219,165221],{"class":32,"line":88},[30,165220,1884],{"class":317},[30,165222,3921],{"class":321},[30,165224,165225,165227,165229,165232],{"class":32,"line":96},[30,165226,31437],{"class":40},[30,165228,322],{"class":321},[30,165230,165231],{"class":74},"\"没有找到\"",[30,165233,328],{"class":321},[15,165235,165237],{"id":165236},"_613-容器通用操作","6.13 容器通用操作",[157,165239,165240],{},"长度：",[20,165242,165244],{"className":30516,"code":165243,"language":30518,"meta":25,"style":25},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[27,165245,165246,165265,165275],{"__ignoreMap":25},[30,165247,165248,165250,165253,165255,165257,165259,165261,165263],{"class":32,"line":33},[30,165249,7540],{"class":40},[30,165251,165252],{"class":321},"([",[30,165254,537],{"class":40},[30,165256,12617],{"class":321},[30,165258,398],{"class":40},[30,165260,12617],{"class":321},[30,165262,392],{"class":40},[30,165264,4839],{"class":321},[30,165266,165267,165269,165271,165273],{"class":32,"line":44},[30,165268,7540],{"class":40},[30,165270,322],{"class":321},[30,165272,156018],{"class":74},[30,165274,328],{"class":321},[30,165276,165277,165279,165282,165284,165286,165288],{"class":32,"line":52},[30,165278,7540],{"class":40},[30,165280,165281],{"class":321},"({",[30,165283,62817],{"class":74},[30,165285,51575],{"class":321},[30,165287,150026],{"class":74},[30,165289,165290],{"class":321},"})\n",[157,165292,165293],{},"最大最小：",[20,165295,165297],{"className":30516,"code":165296,"language":30518,"meta":25,"style":25},"max([1, 2, 3])\nmin([1, 2, 3])\n",[27,165298,165299,165317],{"__ignoreMap":25},[30,165300,165301,165303,165305,165307,165309,165311,165313,165315],{"class":32,"line":33},[30,165302,6197],{"class":40},[30,165304,165252],{"class":321},[30,165306,537],{"class":40},[30,165308,12617],{"class":321},[30,165310,398],{"class":40},[30,165312,12617],{"class":321},[30,165314,392],{"class":40},[30,165316,4839],{"class":321},[30,165318,165319,165322,165324,165326,165328,165330,165332,165334],{"class":32,"line":44},[30,165320,165321],{"class":40},"min",[30,165323,165252],{"class":321},[30,165325,537],{"class":40},[30,165327,12617],{"class":321},[30,165329,398],{"class":40},[30,165331,12617],{"class":321},[30,165333,392],{"class":40},[30,165335,4839],{"class":321},[157,165337,165338],{},"求和：",[20,165340,165342],{"className":30516,"code":165341,"language":30518,"meta":25,"style":25},"sum([1, 2, 3])\n",[27,165343,165344],{"__ignoreMap":25},[30,165345,165346,165349,165351,165353,165355,165357,165359,165361],{"class":32,"line":33},[30,165347,165348],{"class":40},"sum",[30,165350,165252],{"class":321},[30,165352,537],{"class":40},[30,165354,12617],{"class":321},[30,165356,398],{"class":40},[30,165358,12617],{"class":321},[30,165360,392],{"class":40},[30,165362,4839],{"class":321},[157,165364,163609],{},[20,165366,165368],{"className":30516,"code":165367,"language":30518,"meta":25,"style":25},"sorted([3, 1, 2])\n",[27,165369,165370],{"__ignoreMap":25},[30,165371,165372,165375,165377,165379,165381,165383,165385,165387],{"class":32,"line":33},[30,165373,165374],{"class":40},"sorted",[30,165376,165252],{"class":321},[30,165378,392],{"class":40},[30,165380,12617],{"class":321},[30,165382,537],{"class":40},[30,165384,12617],{"class":321},[30,165386,398],{"class":40},[30,165388,4839],{"class":321},[157,165390,165391],{},"类型转换：",[20,165393,165395],{"className":30516,"code":165394,"language":30518,"meta":25,"style":25},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[27,165396,165397,165407,165425],{"__ignoreMap":25},[30,165398,165399,165401,165403,165405],{"class":32,"line":33},[30,165400,154208],{"class":40},[30,165402,322],{"class":321},[30,165404,156018],{"class":74},[30,165406,328],{"class":321},[30,165408,165409,165411,165413,165415,165417,165419,165421,165423],{"class":32,"line":44},[30,165410,155403],{"class":40},[30,165412,165252],{"class":321},[30,165414,537],{"class":40},[30,165416,12617],{"class":321},[30,165418,398],{"class":40},[30,165420,12617],{"class":321},[30,165422,392],{"class":40},[30,165424,4839],{"class":321},[30,165426,165427,165429,165431,165433,165435,165437,165439,165441,165443,165445],{"class":32,"line":52},[30,165428,155428],{"class":40},[30,165430,165252],{"class":321},[30,165432,537],{"class":40},[30,165434,12617],{"class":321},[30,165436,537],{"class":40},[30,165438,12617],{"class":321},[30,165440,398],{"class":40},[30,165442,12617],{"class":321},[30,165444,392],{"class":40},[30,165446,4839],{"class":321},[157,165448,165449],{},"成员判断：",[20,165451,165453],{"className":30516,"code":165452,"language":30518,"meta":25,"style":25},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[27,165454,165455,165472,165496],{"__ignoreMap":25},[30,165456,165457,165459,165461,165464,165467,165470],{"class":32,"line":33},[30,165458,30553],{"class":40},[30,165460,322],{"class":321},[30,165462,165463],{"class":74},"\"a\"",[30,165465,165466],{"class":317}," in",[30,165468,165469],{"class":74}," \"abc\"",[30,165471,328],{"class":321},[30,165473,165474,165476,165478,165480,165482,165484,165486,165488,165490,165492,165494],{"class":32,"line":44},[30,165475,30553],{"class":40},[30,165477,322],{"class":321},[30,165479,537],{"class":40},[30,165481,165466],{"class":317},[30,165483,52364],{"class":321},[30,165485,537],{"class":40},[30,165487,12617],{"class":321},[30,165489,398],{"class":40},[30,165491,12617],{"class":321},[30,165493,392],{"class":40},[30,165495,4839],{"class":321},[30,165497,165498,165500,165502,165504,165506,165508,165510,165512,165514],{"class":32,"line":52},[30,165499,30553],{"class":40},[30,165501,322],{"class":321},[30,165503,62817],{"class":74},[30,165505,165466],{"class":317},[30,165507,4630],{"class":321},[30,165509,62817],{"class":74},[30,165511,51575],{"class":321},[30,165513,150026],{"class":74},[30,165515,165290],{"class":321},[15,165517,165519],{"id":165518},"_614-推导式","6.14 推导式",[157,165521,165522],{},"推导式用于快速生成容器。",[157,165524,165525],{},"列表推导式：",[20,165527,165529],{"className":30516,"code":165528,"language":30518,"meta":25,"style":25},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[27,165530,165531,165558],{"__ignoreMap":25},[30,165532,165533,165535,165537,165540,165542,165544,165546,165548,165550,165552,165554,165556],{"class":32,"line":33},[30,165534,164238],{"class":321},[30,165536,367],{"class":317},[30,165538,165539],{"class":321}," [i ",[30,165541,3207],{"class":317},[30,165543,9620],{"class":321},[30,165545,26181],{"class":317},[30,165547,32581],{"class":40},[30,165549,322],{"class":321},[30,165551,537],{"class":40},[30,165553,12617],{"class":321},[30,165555,664],{"class":40},[30,165557,97438],{"class":321},[30,165559,165560,165562],{"class":32,"line":44},[30,165561,30553],{"class":40},[30,165563,164454],{"class":321},[157,165565,165566],{},"带条件：",[20,165568,165570],{"className":30516,"code":165569,"language":30518,"meta":25,"style":25},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[27,165571,165572,165613],{"__ignoreMap":25},[30,165573,165574,165577,165579,165581,165583,165585,165587,165589,165591,165593,165595,165597,165599,165601,165603,165605,165607,165609,165611],{"class":32,"line":33},[30,165575,165576],{"class":321},"even_nums ",[30,165578,367],{"class":317},[30,165580,165539],{"class":321},[30,165582,3207],{"class":317},[30,165584,9620],{"class":321},[30,165586,26181],{"class":317},[30,165588,32581],{"class":40},[30,165590,322],{"class":321},[30,165592,537],{"class":40},[30,165594,12617],{"class":321},[30,165596,657],{"class":40},[30,165598,13896],{"class":321},[30,165600,1717],{"class":317},[30,165602,9620],{"class":321},[30,165604,648],{"class":317},[30,165606,14937],{"class":40},[30,165608,101697],{"class":317},[30,165610,4275],{"class":40},[30,165612,33384],{"class":321},[30,165614,165615,165617],{"class":32,"line":44},[30,165616,30553],{"class":40},[30,165618,165619],{"class":321},"(even_nums)\n",[157,165621,165622],{},"字典推导式：",[20,165624,165626],{"className":30516,"code":165625,"language":30518,"meta":25,"style":25},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[27,165627,165628,165662],{"__ignoreMap":25},[30,165629,165630,165633,165635,165638,165640,165642,165645,165647,165649,165651,165653,165655,165657,165659],{"class":32,"line":33},[30,165631,165632],{"class":321},"squares ",[30,165634,367],{"class":317},[30,165636,165637],{"class":321}," {i: i ",[30,165639,10843],{"class":317},[30,165641,14937],{"class":40},[30,165643,165644],{"class":317}," for",[30,165646,9620],{"class":321},[30,165648,26181],{"class":317},[30,165650,32581],{"class":40},[30,165652,322],{"class":321},[30,165654,537],{"class":40},[30,165656,12617],{"class":321},[30,165658,664],{"class":40},[30,165660,165661],{"class":321},")}\n",[30,165663,165664,165666],{"class":32,"line":44},[30,165665,30553],{"class":40},[30,165667,165668],{"class":321},"(squares)\n",[157,165670,165671],{},"集合推导式：",[20,165673,165675],{"className":30516,"code":165674,"language":30518,"meta":25,"style":25},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[27,165676,165677,165698],{"__ignoreMap":25},[30,165678,165679,165682,165684,165687,165689,165691,165693,165696],{"class":32,"line":33},[30,165680,165681],{"class":321},"chars ",[30,165683,367],{"class":317},[30,165685,165686],{"class":321}," {ch ",[30,165688,3207],{"class":317},[30,165690,159830],{"class":321},[30,165692,26181],{"class":317},[30,165694,165695],{"class":74}," \"hello\"",[30,165697,1751],{"class":321},[30,165699,165700,165702],{"class":32,"line":44},[30,165701,30553],{"class":40},[30,165703,165704],{"class":321},"(chars)\n",[157,165706,165707],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[15,165709,165711],{"id":165710},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[20,165713,165715],{"className":30516,"code":165714,"language":30518,"meta":25,"style":25},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n    {\"name\": \"小李\", \"score\": 59},\n]\n\ntotal = 0\nmax_student = students[0]\npassed = []\n\nfor student in students:\n    total += student[\"score\"]\n\n    if student[\"score\"] > max_student[\"score\"]:\n        max_student = student\n\n    if student[\"score\"] >= 60:\n        passed.append(student)\n\navg = total \u002F len(students)\n\nprint(f\"平均分:{avg:.2f}\")\nprint(f\"最高分学生:{max_student['name']} {max_student['score']}\")\nprint(f\"及格人数:{len(passed)}\")\n",[27,165716,165717,165725,165745,165765,165785,165805,165809,165813,165821,165835,165844,165848,165858,165870,165874,165894,165903,165907,165923,165928,165932,165946,165950,165972,166008],{"__ignoreMap":25},[30,165718,165719,165721,165723],{"class":32,"line":33},[30,165720,159854],{"class":321},[30,165722,367],{"class":317},[30,165724,55585],{"class":321},[30,165726,165727,165729,165731,165733,165735,165737,165739,165741,165743],{"class":32,"line":44},[30,165728,148523],{"class":321},[30,165730,62817],{"class":74},[30,165732,51575],{"class":321},[30,165734,150026],{"class":74},[30,165736,12617],{"class":321},[30,165738,151610],{"class":74},[30,165740,51575],{"class":321},[30,165742,1309],{"class":40},[30,165744,5112],{"class":321},[30,165746,165747,165749,165751,165753,165755,165757,165759,165761,165763],{"class":32,"line":52},[30,165748,148523],{"class":321},[30,165750,62817],{"class":74},[30,165752,51575],{"class":321},[30,165754,151074],{"class":74},[30,165756,12617],{"class":321},[30,165758,151610],{"class":74},[30,165760,51575],{"class":321},[30,165762,1131],{"class":40},[30,165764,5112],{"class":321},[30,165766,165767,165769,165771,165773,165775,165777,165779,165781,165783],{"class":32,"line":60},[30,165768,148523],{"class":321},[30,165770,62817],{"class":74},[30,165772,51575],{"class":321},[30,165774,159869],{"class":74},[30,165776,12617],{"class":321},[30,165778,151610],{"class":74},[30,165780,51575],{"class":321},[30,165782,726],{"class":40},[30,165784,5112],{"class":321},[30,165786,165787,165789,165791,165793,165795,165797,165799,165801,165803],{"class":32,"line":68},[30,165788,148523],{"class":321},[30,165790,62817],{"class":74},[30,165792,51575],{"class":321},[30,165794,163448],{"class":74},[30,165796,12617],{"class":321},[30,165798,151610],{"class":74},[30,165800,51575],{"class":321},[30,165802,1202],{"class":40},[30,165804,5112],{"class":321},[30,165806,165807],{"class":32,"line":80},[30,165808,33384],{"class":321},[30,165810,165811],{"class":32,"line":88},[30,165812,2582],{"emptyLinePlaceholder":245},[30,165814,165815,165817,165819],{"class":32,"line":96},[30,165816,157398],{"class":321},[30,165818,367],{"class":317},[30,165820,47471],{"class":40},[30,165822,165823,165826,165828,165831,165833],{"class":32,"line":104},[30,165824,165825],{"class":321},"max_student ",[30,165827,367],{"class":317},[30,165829,165830],{"class":321}," students[",[30,165832,511],{"class":40},[30,165834,33384],{"class":321},[30,165836,165837,165840,165842],{"class":32,"line":112},[30,165838,165839],{"class":321},"passed ",[30,165841,367],{"class":317},[30,165843,51976],{"class":321},[30,165845,165846],{"class":32,"line":123},[30,165847,2582],{"emptyLinePlaceholder":245},[30,165849,165850,165852,165854,165856],{"class":32,"line":131},[30,165851,3207],{"class":317},[30,165853,152275],{"class":321},[30,165855,26181],{"class":317},[30,165857,152280],{"class":321},[30,165859,165860,165862,165864,165866,165868],{"class":32,"line":142},[30,165861,159445],{"class":321},[30,165863,9659],{"class":317},[30,165865,152287],{"class":321},[30,165867,151610],{"class":74},[30,165869,33384],{"class":321},[30,165871,165872],{"class":32,"line":1811},[30,165873,2582],{"emptyLinePlaceholder":245},[30,165875,165876,165878,165880,165882,165884,165886,165889,165891],{"class":32,"line":1825},[30,165877,3283],{"class":317},[30,165879,152287],{"class":321},[30,165881,151610],{"class":74},[30,165883,4625],{"class":321},[30,165885,1280],{"class":317},[30,165887,165888],{"class":321}," max_student[",[30,165890,151610],{"class":74},[30,165892,165893],{"class":321},"]:\n",[30,165895,165896,165899,165901],{"class":32,"line":1830},[30,165897,165898],{"class":321},"        max_student ",[30,165900,367],{"class":317},[30,165902,152303],{"class":321},[30,165904,165905],{"class":32,"line":1836},[30,165906,2582],{"emptyLinePlaceholder":245},[30,165908,165909,165911,165913,165915,165917,165919,165921],{"class":32,"line":1857},[30,165910,3283],{"class":317},[30,165912,152287],{"class":321},[30,165914,151610],{"class":74},[30,165916,4625],{"class":321},[30,165918,1893],{"class":317},[30,165920,157975],{"class":40},[30,165922,3921],{"class":321},[30,165924,165925],{"class":32,"line":1862},[30,165926,165927],{"class":321},"        passed.append(student)\n",[30,165929,165930],{"class":32,"line":1876},[30,165931,2582],{"emptyLinePlaceholder":245},[30,165933,165934,165936,165938,165940,165942,165944],{"class":32,"line":1881},[30,165935,163912],{"class":321},[30,165937,367],{"class":317},[30,165939,163917],{"class":321},[30,165941,904],{"class":317},[30,165943,7513],{"class":40},[30,165945,165133],{"class":321},[30,165947,165948],{"class":32,"line":1910},[30,165949,2582],{"emptyLinePlaceholder":245},[30,165951,165952,165954,165956,165958,165960,165962,165964,165966,165968,165970],{"class":32,"line":1915},[30,165953,30553],{"class":40},[30,165955,322],{"class":321},[30,165957,373],{"class":317},[30,165959,163935],{"class":74},[30,165961,1216],{"class":40},[30,165963,163940],{"class":321},[30,165965,157297],{"class":317},[30,165967,1266],{"class":40},[30,165969,571],{"class":74},[30,165971,328],{"class":321},[30,165973,165974,165976,165978,165980,165983,165985,165988,165990,165992,165994,165996,165998,166000,166002,166004,166006],{"class":32,"line":1932},[30,165975,30553],{"class":40},[30,165977,322],{"class":321},[30,165979,373],{"class":317},[30,165981,165982],{"class":74},"\"最高分学生:",[30,165984,1216],{"class":40},[30,165986,165987],{"class":321},"max_student[",[30,165989,153020],{"class":74},[30,165991,1260],{"class":321},[30,165993,1266],{"class":40},[30,165995,4630],{"class":40},[30,165997,165987],{"class":321},[30,165999,153058],{"class":74},[30,166001,1260],{"class":321},[30,166003,1266],{"class":40},[30,166005,571],{"class":74},[30,166007,328],{"class":321},[30,166009,166010,166012,166014,166016,166019,166022,166025,166027,166029],{"class":32,"line":1937},[30,166011,30553],{"class":40},[30,166013,322],{"class":321},[30,166015,373],{"class":317},[30,166017,166018],{"class":74},"\"及格人数:",[30,166020,166021],{"class":40},"{len",[30,166023,166024],{"class":321},"(passed)",[30,166026,1266],{"class":40},[30,166028,571],{"class":74},[30,166030,328],{"class":321},[15,166032,166034],{"id":166033},"_616-易错点","6.16 易错点",[271,166036,166037,166040,166043,166046,166052,166061],{},[150,166038,166039],{},"列表可变，元组和字符串不可变。",[150,166041,166042],{},"切片结束位置不包含。",[150,166044,166045],{},"字典通过 key 取值，不是通过索引。",[150,166047,166048,166049,28523],{},"空集合要用 ",[27,166050,166051],{},"set()",[150,166053,104504,166054,166057,166058,28523],{},[27,166055,166056],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[27,166059,166060],{},"get()",[150,166062,166063],{},"嵌套容器要先看清楚每一层是什么类型。",[15,166065,166067],{"id":166066},"_617-本章练习","6.17 本章练习",[271,166069,166070,166073,166076,166079,166082],{},[150,166071,166072],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[150,166074,166075],{},"输入一句话，统计每个字符出现次数。",[150,166077,166078],{},"使用集合去除列表中的重复元素。",[150,166080,166081],{},"使用字典保存一个学生的信息，并实现修改成绩。",[150,166083,166084],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[234,166086,166087],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":166089},[166090,166091,166092,166093,166094,166095,166096,166097,166098,166099,166100,166101,166102,166103,166104,166105,166106],{"id":163070,"depth":44,"text":163071},{"id":163187,"depth":44,"text":163188},{"id":163277,"depth":44,"text":163278},{"id":163401,"depth":44,"text":163402},{"id":163764,"depth":44,"text":163765},{"id":163951,"depth":44,"text":163952},{"id":164070,"depth":44,"text":164071},{"id":164212,"depth":44,"text":164213},{"id":164399,"depth":44,"text":164400},{"id":164643,"depth":44,"text":164644},{"id":164853,"depth":44,"text":164854},{"id":164938,"depth":44,"text":164939},{"id":165236,"depth":44,"text":165237},{"id":165518,"depth":44,"text":165519},{"id":165710,"depth":44,"text":165711},{"id":166033,"depth":44,"text":166034},{"id":166066,"depth":44,"text":166067},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163062,"description":242},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166113,"title":166114,"body":166115,"description":242,"extension":243,"meta":168287,"navigation":245,"path":168288,"seo":168289,"stem":168290,"__hash__":168291},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166116,"toc":168262},[166117,166120,166124,166127,166207,166210,166231,166234,166238,166241,166303,166306,166323,166327,166330,166375,166377,166385,166389,166392,166474,166477,166480,166505,166508,166531,166535,166538,166540,166602,166605,166607,166658,166662,166666,166672,166777,166781,166787,166858,166862,166865,166933,166936,167016,167020,167026,167062,167065,167068,167178,167184,167188,167191,167263,167266,167270,167274,167279,167341,167345,167350,167418,167422,167427,167543,167547,167550,167630,167633,167637,167640,167744,167746,167761,167764,167768,167906,167914,167918,167920,167931,167933,168191,168195,168227,168231,168259],[10,166118,166114],{"id":166119},"_7-函数进阶",[15,166121,166123],{"id":166122},"_71-多返回值","7.1 多返回值",[157,166125,166126],{},"Python 函数可以返回多个值，本质上返回的是元组。",[20,166128,166130],{"className":30516,"code":166129,"language":30518,"meta":25,"style":25},"def get_info():\n    name = \"小明\"\n    age = 18\n    score = 95\n    return name, age, score\n\n\nresult = get_info()\nprint(result)\nprint(type(result))\n",[27,166131,166132,166141,166149,166157,166166,166173,166177,166181,166190,166196],{"__ignoreMap":25},[30,166133,166134,166136,166139],{"class":32,"line":33},[30,166135,32085],{"class":317},[30,166137,166138],{"class":36}," get_info",[30,166140,32091],{"class":321},[30,166142,166143,166145,166147],{"class":32,"line":44},[30,166144,152508],{"class":321},[30,166146,367],{"class":317},[30,166148,149491],{"class":74},[30,166150,166151,166153,166155],{"class":32,"line":52},[30,166152,152524],{"class":321},[30,166154,367],{"class":317},[30,166156,146689],{"class":40},[30,166158,166159,166161,166163],{"class":32,"line":60},[30,166160,152539],{"class":321},[30,166162,367],{"class":317},[30,166164,166165],{"class":40}," 95\n",[30,166167,166168,166170],{"class":32,"line":68},[30,166169,4272],{"class":317},[30,166171,166172],{"class":321}," name, age, score\n",[30,166174,166175],{"class":32,"line":80},[30,166176,2582],{"emptyLinePlaceholder":245},[30,166178,166179],{"class":32,"line":88},[30,166180,2582],{"emptyLinePlaceholder":245},[30,166182,166183,166185,166187],{"class":32,"line":96},[30,166184,161444],{"class":321},[30,166186,367],{"class":317},[30,166188,166189],{"class":321}," get_info()\n",[30,166191,166192,166194],{"class":32,"line":104},[30,166193,30553],{"class":40},[30,166195,76723],{"class":321},[30,166197,166198,166200,166202,166204],{"class":32,"line":112},[30,166199,30553],{"class":40},[30,166201,322],{"class":321},[30,166203,103245],{"class":40},[30,166205,166206],{"class":321},"(result))\n",[157,166208,166209],{},"可以直接解包：",[20,166211,166213],{"className":30516,"code":166212,"language":30518,"meta":25,"style":25},"name, age, score = get_info()\nprint(name, age, score)\n",[27,166214,166215,166224],{"__ignoreMap":25},[30,166216,166217,166220,166222],{"class":32,"line":33},[30,166218,166219],{"class":321},"name, age, score ",[30,166221,367],{"class":317},[30,166223,166189],{"class":321},[30,166225,166226,166228],{"class":32,"line":44},[30,166227,30553],{"class":40},[30,166229,166230],{"class":321},"(name, age, score)\n",[157,166232,166233],{},"返回多个值适合函数需要同时给出多个结果时使用。",[15,166235,166237],{"id":166236},"_72-位置参数","7.2 位置参数",[157,166239,166240],{},"位置参数按顺序传递。",[20,166242,166244],{"className":30516,"code":166243,"language":30518,"meta":25,"style":25},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[27,166245,166246,166254,166282,166286,166290],{"__ignoreMap":25},[30,166247,166248,166250,166252],{"class":32,"line":33},[30,166249,32085],{"class":317},[30,166251,149510],{"class":36},[30,166253,149513],{"class":321},[30,166255,166256,166258,166260,166262,166264,166266,166268,166270,166272,166274,166276,166278,166280],{"class":32,"line":44},[30,166257,31437],{"class":40},[30,166259,322],{"class":321},[30,166261,373],{"class":317},[30,166263,149524],{"class":74},[30,166265,1216],{"class":40},[30,166267,79948],{"class":321},[30,166269,1266],{"class":40},[30,166271,149533],{"class":74},[30,166273,1216],{"class":40},[30,166275,70359],{"class":321},[30,166277,1266],{"class":40},[30,166279,149542],{"class":74},[30,166281,328],{"class":321},[30,166283,166284],{"class":32,"line":52},[30,166285,2582],{"emptyLinePlaceholder":245},[30,166287,166288],{"class":32,"line":60},[30,166289,2582],{"emptyLinePlaceholder":245},[30,166291,166292,166295,166297,166299,166301],{"class":32,"line":68},[30,166293,166294],{"class":321},"introduce(",[30,166296,150026],{"class":74},[30,166298,12617],{"class":321},[30,166300,970],{"class":40},[30,166302,328],{"class":321},[157,166304,166305],{},"顺序错了就会得到错误含义：",[20,166307,166309],{"className":30516,"code":166308,"language":30518,"meta":25,"style":25},"introduce(18, \"小明\")\n",[27,166310,166311],{"__ignoreMap":25},[30,166312,166313,166315,166317,166319,166321],{"class":32,"line":33},[30,166314,166294],{"class":321},[30,166316,970],{"class":40},[30,166318,12617],{"class":321},[30,166320,150026],{"class":74},[30,166322,328],{"class":321},[15,166324,166326],{"id":166325},"_73-关键字参数","7.3 关键字参数",[157,166328,166329],{},"关键字参数按参数名传递。",[20,166331,166333],{"className":30516,"code":166332,"language":30518,"meta":25,"style":25},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[27,166334,166335,166355],{"__ignoreMap":25},[30,166336,166337,166339,166341,166343,166345,166347,166349,166351,166353],{"class":32,"line":33},[30,166338,166294],{"class":321},[30,166340,79948],{"class":5398},[30,166342,367],{"class":317},[30,166344,150026],{"class":74},[30,166346,12617],{"class":321},[30,166348,70359],{"class":5398},[30,166350,367],{"class":317},[30,166352,970],{"class":40},[30,166354,328],{"class":321},[30,166356,166357,166359,166361,166363,166365,166367,166369,166371,166373],{"class":32,"line":44},[30,166358,166294],{"class":321},[30,166360,70359],{"class":5398},[30,166362,367],{"class":317},[30,166364,970],{"class":40},[30,166366,12617],{"class":321},[30,166368,79948],{"class":5398},[30,166370,367],{"class":317},[30,166372,150026],{"class":74},[30,166374,328],{"class":321},[157,166376,118072],{},[271,166378,166379,166382],{},[150,166380,166381],{},"顺序不容易错。",[150,166383,166384],{},"调用时可读性更强。",[15,166386,166388],{"id":166387},"_74-默认参数","7.4 默认参数",[157,166390,166391],{},"默认参数给参数设置默认值。",[20,166393,166395],{"className":30516,"code":166394,"language":30518,"meta":25,"style":25},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[27,166396,166397,166413,166443,166447,166451,166461],{"__ignoreMap":25},[30,166398,166399,166401,166403,166406,166408,166411],{"class":32,"line":33},[30,166400,32085],{"class":317},[30,166402,122231],{"class":36},[30,166404,166405],{"class":321},"(host, port",[30,166407,367],{"class":317},[30,166409,166410],{"class":40},"3306",[30,166412,30924],{"class":321},[30,166414,166415,166417,166419,166421,166424,166426,166428,166430,166432,166434,166437,166439,166441],{"class":32,"line":44},[30,166416,31437],{"class":40},[30,166418,322],{"class":321},[30,166420,373],{"class":317},[30,166422,166423],{"class":74},"\"连接",[30,166425,1216],{"class":40},[30,166427,27533],{"class":321},[30,166429,1266],{"class":40},[30,166431,1179],{"class":74},[30,166433,1216],{"class":40},[30,166435,166436],{"class":321},"port",[30,166438,1266],{"class":40},[30,166440,571],{"class":74},[30,166442,328],{"class":321},[30,166444,166445],{"class":32,"line":52},[30,166446,2582],{"emptyLinePlaceholder":245},[30,166448,166449],{"class":32,"line":60},[30,166450,2582],{"emptyLinePlaceholder":245},[30,166452,166453,166456,166459],{"class":32,"line":68},[30,166454,166455],{"class":321},"connect(",[30,166457,166458],{"class":74},"\"localhost\"",[30,166460,328],{"class":321},[30,166462,166463,166465,166467,166469,166472],{"class":32,"line":80},[30,166464,166455],{"class":321},[30,166466,166458],{"class":74},[30,166468,12617],{"class":321},[30,166470,166471],{"class":40},"6379",[30,166473,328],{"class":321},[157,166475,166476],{},"注意：默认参数必须放在非默认参数后面。",[157,166478,166479],{},"错误：",[20,166481,166483],{"className":30516,"code":166482,"language":30518,"meta":25,"style":25},"def connect(port=3306, host):\n    pass\n",[27,166484,166485,166501],{"__ignoreMap":25},[30,166486,166487,166489,166491,166494,166496,166498],{"class":32,"line":33},[30,166488,32085],{"class":317},[30,166490,122231],{"class":36},[30,166492,166493],{"class":321},"(port",[30,166495,367],{"class":317},[30,166497,166410],{"class":40},[30,166499,166500],{"class":321},", host):\n",[30,166502,166503],{"class":32,"line":44},[30,166504,149675],{"class":317},[157,166506,166507],{},"正确：",[20,166509,166511],{"className":30516,"code":166510,"language":30518,"meta":25,"style":25},"def connect(host, port=3306):\n    pass\n",[27,166512,166513,166527],{"__ignoreMap":25},[30,166514,166515,166517,166519,166521,166523,166525],{"class":32,"line":33},[30,166516,32085],{"class":317},[30,166518,122231],{"class":36},[30,166520,166405],{"class":321},[30,166522,367],{"class":317},[30,166524,166410],{"class":40},[30,166526,30924],{"class":321},[30,166528,166529],{"class":32,"line":44},[30,166530,149675],{"class":317},[15,166532,166534],{"id":166533},"_75-默认参数的坑","7.5 默认参数的坑",[157,166536,166537],{},"不要使用可变对象作为默认参数。",[157,166539,157761],{},[20,166541,166543],{"className":30516,"code":166542,"language":30518,"meta":25,"style":25},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[27,166544,166545,166560,166565,166572,166576,166580,166591],{"__ignoreMap":25},[30,166546,166547,166549,166552,166555,166557],{"class":32,"line":33},[30,166548,32085],{"class":317},[30,166550,166551],{"class":36}," add_item",[30,166553,166554],{"class":321},"(item, items",[30,166556,367],{"class":317},[30,166558,166559],{"class":321},"[]):\n",[30,166561,166562],{"class":32,"line":44},[30,166563,166564],{"class":321},"    items.append(item)\n",[30,166566,166567,166569],{"class":32,"line":52},[30,166568,4272],{"class":317},[30,166570,166571],{"class":321}," items\n",[30,166573,166574],{"class":32,"line":60},[30,166575,2582],{"emptyLinePlaceholder":245},[30,166577,166578],{"class":32,"line":68},[30,166579,2582],{"emptyLinePlaceholder":245},[30,166581,166582,166584,166587,166589],{"class":32,"line":80},[30,166583,30553],{"class":40},[30,166585,166586],{"class":321},"(add_item(",[30,166588,165463],{"class":74},[30,166590,30635],{"class":321},[30,166592,166593,166595,166597,166600],{"class":32,"line":88},[30,166594,30553],{"class":40},[30,166596,166586],{"class":321},[30,166598,166599],{"class":74},"\"b\"",[30,166601,30635],{"class":321},[157,166603,166604],{},"第二次调用会复用第一次的列表。",[157,166606,156026],{},[20,166608,166610],{"className":30516,"code":166609,"language":30518,"meta":25,"style":25},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[27,166611,166612,166626,166639,166648,166652],{"__ignoreMap":25},[30,166613,166614,166616,166618,166620,166622,166624],{"class":32,"line":33},[30,166615,32085],{"class":317},[30,166617,166551],{"class":36},[30,166619,166554],{"class":321},[30,166621,367],{"class":317},[30,166623,95824],{"class":40},[30,166625,30924],{"class":321},[30,166627,166628,166630,166633,166635,166637],{"class":32,"line":44},[30,166629,3283],{"class":317},[30,166631,166632],{"class":321}," items ",[30,166634,39065],{"class":317},[30,166636,39071],{"class":40},[30,166638,3921],{"class":321},[30,166640,166641,166644,166646],{"class":32,"line":52},[30,166642,166643],{"class":321},"        items ",[30,166645,367],{"class":317},[30,166647,51976],{"class":321},[30,166649,166650],{"class":32,"line":60},[30,166651,166564],{"class":321},[30,166653,166654,166656],{"class":32,"line":68},[30,166655,4272],{"class":317},[30,166657,166571],{"class":321},[15,166659,166661],{"id":166660},"_76-不定长参数","7.6 不定长参数",[287,166663,166665],{"id":166664},"_761-args","7.6.1 *args",[157,166667,166668,166671],{},[27,166669,166670],{},"*args"," 接收任意数量的位置参数，得到元组。",[20,166673,166675],{"className":30516,"code":166674,"language":30518,"meta":25,"style":25},"def add(*args):\n    total = 0\n    for num in args:\n        total += num\n    return total\n\n\nprint(add(1, 2, 3))\nprint(add(1, 2, 3, 4, 5))\n",[27,166676,166677,166690,166698,166709,166718,166724,166728,166732,166751],{"__ignoreMap":25},[30,166678,166679,166681,166683,166685,166687],{"class":32,"line":33},[30,166680,32085],{"class":317},[30,166682,5391],{"class":36},[30,166684,322],{"class":321},[30,166686,775],{"class":317},[30,166688,166689],{"class":321},"args):\n",[30,166691,166692,166694,166696],{"class":32,"line":44},[30,166693,159445],{"class":321},[30,166695,367],{"class":317},[30,166697,47471],{"class":40},[30,166699,166700,166702,166704,166706],{"class":32,"line":52},[30,166701,3383],{"class":317},[30,166703,156318],{"class":321},[30,166705,26181],{"class":317},[30,166707,166708],{"class":321}," args:\n",[30,166710,166711,166713,166715],{"class":32,"line":60},[30,166712,160120],{"class":321},[30,166714,9659],{"class":317},[30,166716,166717],{"class":321}," num\n",[30,166719,166720,166722],{"class":32,"line":68},[30,166721,4272],{"class":317},[30,166723,162425],{"class":321},[30,166725,166726],{"class":32,"line":80},[30,166727,2582],{"emptyLinePlaceholder":245},[30,166729,166730],{"class":32,"line":88},[30,166731,2582],{"emptyLinePlaceholder":245},[30,166733,166734,166736,166739,166741,166743,166745,166747,166749],{"class":32,"line":96},[30,166735,30553],{"class":40},[30,166737,166738],{"class":321},"(add(",[30,166740,537],{"class":40},[30,166742,12617],{"class":321},[30,166744,398],{"class":40},[30,166746,12617],{"class":321},[30,166748,392],{"class":40},[30,166750,30635],{"class":321},[30,166752,166753,166755,166757,166759,166761,166763,166765,166767,166769,166771,166773,166775],{"class":32,"line":104},[30,166754,30553],{"class":40},[30,166756,166738],{"class":321},[30,166758,537],{"class":40},[30,166760,12617],{"class":321},[30,166762,398],{"class":40},[30,166764,12617],{"class":321},[30,166766,392],{"class":40},[30,166768,12617],{"class":321},[30,166770,613],{"class":40},[30,166772,12617],{"class":321},[30,166774,639],{"class":40},[30,166776,30635],{"class":321},[287,166778,166780],{"id":166779},"_762-kwargs","7.6.2 **kwargs",[157,166782,166783,166786],{},[27,166784,166785],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[20,166788,166790],{"className":30516,"code":166789,"language":30518,"meta":25,"style":25},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[27,166791,166792,166805,166816,166822,166826,166830],{"__ignoreMap":25},[30,166793,166794,166796,166798,166800,166802],{"class":32,"line":33},[30,166795,32085],{"class":317},[30,166797,162083],{"class":36},[30,166799,322],{"class":321},[30,166801,10843],{"class":317},[30,166803,166804],{"class":321},"kwargs):\n",[30,166806,166807,166809,166811,166813],{"class":32,"line":44},[30,166808,3383],{"class":317},[30,166810,164923],{"class":321},[30,166812,26181],{"class":317},[30,166814,166815],{"class":321}," kwargs.items():\n",[30,166817,166818,166820],{"class":32,"line":52},[30,166819,32589],{"class":40},[30,166821,164935],{"class":321},[30,166823,166824],{"class":32,"line":60},[30,166825,2582],{"emptyLinePlaceholder":245},[30,166827,166828],{"class":32,"line":68},[30,166829,2582],{"emptyLinePlaceholder":245},[30,166831,166832,166834,166836,166838,166840,166842,166844,166846,166848,166850,166852,166854,166856],{"class":32,"line":80},[30,166833,162148],{"class":321},[30,166835,79948],{"class":5398},[30,166837,367],{"class":317},[30,166839,150026],{"class":74},[30,166841,12617],{"class":321},[30,166843,70359],{"class":5398},[30,166845,367],{"class":317},[30,166847,970],{"class":40},[30,166849,12617],{"class":321},[30,166851,70410],{"class":5398},[30,166853,367],{"class":317},[30,166855,69407],{"class":74},[30,166857,328],{"class":321},[15,166859,166861],{"id":166860},"_77-参数解包","7.7 参数解包",[157,166863,166864],{},"列表或元组解包为位置参数：",[20,166866,166868],{"className":30516,"code":166867,"language":30518,"meta":25,"style":25},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[27,166869,166870,166879,166894,166898,166902,166922],{"__ignoreMap":25},[30,166871,166872,166874,166876],{"class":32,"line":33},[30,166873,32085],{"class":317},[30,166875,5391],{"class":36},[30,166877,166878],{"class":321},"(a, b, c):\n",[30,166880,166881,166883,166885,166887,166889,166891],{"class":32,"line":44},[30,166882,4272],{"class":317},[30,166884,11051],{"class":321},[30,166886,801],{"class":317},[30,166888,11064],{"class":321},[30,166890,801],{"class":317},[30,166892,166893],{"class":321}," c\n",[30,166895,166896],{"class":32,"line":52},[30,166897,2582],{"emptyLinePlaceholder":245},[30,166899,166900],{"class":32,"line":60},[30,166901,2582],{"emptyLinePlaceholder":245},[30,166903,166904,166906,166908,166910,166912,166914,166916,166918,166920],{"class":32,"line":68},[30,166905,164238],{"class":321},[30,166907,367],{"class":317},[30,166909,52364],{"class":321},[30,166911,537],{"class":40},[30,166913,12617],{"class":321},[30,166915,398],{"class":40},[30,166917,12617],{"class":321},[30,166919,392],{"class":40},[30,166921,33384],{"class":321},[30,166923,166924,166926,166928,166930],{"class":32,"line":80},[30,166925,30553],{"class":40},[30,166927,166738],{"class":321},[30,166929,775],{"class":317},[30,166931,166932],{"class":321},"nums))\n",[157,166934,166935],{},"字典解包为关键字参数：",[20,166937,166939],{"className":30516,"code":166938,"language":30518,"meta":25,"style":25},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[27,166940,166941,166949,166975,166979,166983,167007],{"__ignoreMap":25},[30,166942,166943,166945,166947],{"class":32,"line":33},[30,166944,32085],{"class":317},[30,166946,149510],{"class":36},[30,166948,149513],{"class":321},[30,166950,166951,166953,166955,166957,166959,166961,166963,166965,166967,166969,166971,166973],{"class":32,"line":44},[30,166952,31437],{"class":40},[30,166954,322],{"class":321},[30,166956,373],{"class":317},[30,166958,571],{"class":74},[30,166960,1216],{"class":40},[30,166962,79948],{"class":321},[30,166964,1266],{"class":40},[30,166966,4630],{"class":40},[30,166968,70359],{"class":321},[30,166970,1266],{"class":40},[30,166972,571],{"class":74},[30,166974,328],{"class":321},[30,166976,166977],{"class":32,"line":52},[30,166978,2582],{"emptyLinePlaceholder":245},[30,166980,166981],{"class":32,"line":60},[30,166982,2582],{"emptyLinePlaceholder":245},[30,166984,166985,166987,166989,166991,166993,166995,166997,166999,167001,167003,167005],{"class":32,"line":68},[30,166986,116452],{"class":321},[30,166988,367],{"class":317},[30,166990,4630],{"class":321},[30,166992,62817],{"class":74},[30,166994,51575],{"class":321},[30,166996,150026],{"class":74},[30,166998,12617],{"class":321},[30,167000,69262],{"class":74},[30,167002,51575],{"class":321},[30,167004,970],{"class":40},[30,167006,1751],{"class":321},[30,167008,167009,167011,167013],{"class":32,"line":80},[30,167010,166294],{"class":321},[30,167012,10843],{"class":317},[30,167014,167015],{"class":321},"info)\n",[15,167017,167019],{"id":167018},"_78-匿名函数lambda","7.8 匿名函数lambda",[157,167021,167022,167025],{},[27,167023,167024],{},"lambda"," 用于定义简单匿名函数。",[20,167027,167029],{"className":30516,"code":167028,"language":30518,"meta":25,"style":25},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[27,167030,167031,167048],{"__ignoreMap":25},[30,167032,167033,167036,167038,167041,167044,167046],{"class":32,"line":33},[30,167034,167035],{"class":321},"add ",[30,167037,367],{"class":317},[30,167039,167040],{"class":317}," lambda",[30,167042,167043],{"class":321}," a, b: a ",[30,167045,801],{"class":317},[30,167047,151242],{"class":321},[30,167049,167050,167052,167054,167056,167058,167060],{"class":32,"line":44},[30,167051,30553],{"class":40},[30,167053,166738],{"class":321},[30,167055,537],{"class":40},[30,167057,12617],{"class":321},[30,167059,398],{"class":40},[30,167061,30635],{"class":321},[157,167063,167064],{},"常和排序、过滤等函数一起使用。",[157,167066,167067],{},"按分数排序：",[20,167069,167071],{"className":30516,"code":167070,"language":30518,"meta":25,"style":25},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nstudents.sort(key=lambda item: item[\"score\"], reverse=True)\nprint(students)\n",[27,167072,167073,167081,167101,167121,167141,167145,167149,167172],{"__ignoreMap":25},[30,167074,167075,167077,167079],{"class":32,"line":33},[30,167076,159854],{"class":321},[30,167078,367],{"class":317},[30,167080,55585],{"class":321},[30,167082,167083,167085,167087,167089,167091,167093,167095,167097,167099],{"class":32,"line":44},[30,167084,148523],{"class":321},[30,167086,62817],{"class":74},[30,167088,51575],{"class":321},[30,167090,150026],{"class":74},[30,167092,12617],{"class":321},[30,167094,151610],{"class":74},[30,167096,51575],{"class":321},[30,167098,1309],{"class":40},[30,167100,5112],{"class":321},[30,167102,167103,167105,167107,167109,167111,167113,167115,167117,167119],{"class":32,"line":52},[30,167104,148523],{"class":321},[30,167106,62817],{"class":74},[30,167108,51575],{"class":321},[30,167110,151074],{"class":74},[30,167112,12617],{"class":321},[30,167114,151610],{"class":74},[30,167116,51575],{"class":321},[30,167118,1131],{"class":40},[30,167120,5112],{"class":321},[30,167122,167123,167125,167127,167129,167131,167133,167135,167137,167139],{"class":32,"line":60},[30,167124,148523],{"class":321},[30,167126,62817],{"class":74},[30,167128,51575],{"class":321},[30,167130,159869],{"class":74},[30,167132,12617],{"class":321},[30,167134,151610],{"class":74},[30,167136,51575],{"class":321},[30,167138,726],{"class":40},[30,167140,5112],{"class":321},[30,167142,167143],{"class":32,"line":68},[30,167144,33384],{"class":321},[30,167146,167147],{"class":32,"line":80},[30,167148,2582],{"emptyLinePlaceholder":245},[30,167150,167151,167154,167156,167158,167160,167162,167164,167166,167168,167170],{"class":32,"line":88},[30,167152,167153],{"class":321},"students.sort(",[30,167155,154084],{"class":5398},[30,167157,154087],{"class":317},[30,167159,154090],{"class":321},[30,167161,151610],{"class":74},[30,167163,112340],{"class":321},[30,167165,163666],{"class":5398},[30,167167,367],{"class":317},[30,167169,31614],{"class":40},[30,167171,328],{"class":321},[30,167173,167174,167176],{"class":32,"line":96},[30,167175,30553],{"class":40},[30,167177,165133],{"class":321},[157,167179,167180,167181,167183],{},"如果逻辑复杂，不要硬写 ",[27,167182,167024],{},"，定义普通函数更清晰。",[15,167185,167187],{"id":167186},"_79-函数作为参数","7.9 函数作为参数",[157,167189,167190],{},"函数可以作为参数传给另一个函数。",[20,167192,167194],{"className":30516,"code":167193,"language":30518,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\ndef calculate(a, b, func):\n    return func(a, b)\n\n\nprint(calculate(10, 20, add))\n",[27,167195,167196,167204,167214,167218,167222,167232,167239,167243,167247],{"__ignoreMap":25},[30,167197,167198,167200,167202],{"class":32,"line":33},[30,167199,32085],{"class":317},[30,167201,5391],{"class":36},[30,167203,151231],{"class":321},[30,167205,167206,167208,167210,167212],{"class":32,"line":44},[30,167207,4272],{"class":317},[30,167209,11051],{"class":321},[30,167211,801],{"class":317},[30,167213,151242],{"class":321},[30,167215,167216],{"class":32,"line":52},[30,167217,2582],{"emptyLinePlaceholder":245},[30,167219,167220],{"class":32,"line":60},[30,167221,2582],{"emptyLinePlaceholder":245},[30,167223,167224,167226,167229],{"class":32,"line":68},[30,167225,32085],{"class":317},[30,167227,167228],{"class":36}," calculate",[30,167230,167231],{"class":321},"(a, b, func):\n",[30,167233,167234,167236],{"class":32,"line":80},[30,167235,4272],{"class":317},[30,167237,167238],{"class":321}," func(a, b)\n",[30,167240,167241],{"class":32,"line":88},[30,167242,2582],{"emptyLinePlaceholder":245},[30,167244,167245],{"class":32,"line":96},[30,167246,2582],{"emptyLinePlaceholder":245},[30,167248,167249,167251,167254,167256,167258,167260],{"class":32,"line":104},[30,167250,30553],{"class":40},[30,167252,167253],{"class":321},"(calculate(",[30,167255,766],{"class":40},[30,167257,12617],{"class":321},[30,167259,1020],{"class":40},[30,167261,167262],{"class":321},", add))\n",[157,167264,167265],{},"这种思想在排序、回调、框架中经常出现。",[15,167267,167269],{"id":167268},"_710-mapfiltersorted","7.10 map、filter、sorted",[287,167271,167273],{"id":167272},"_7101-map","7.10.1 map",[157,167275,167276,167278],{},[27,167277,74182],{}," 对每个元素执行函数。",[20,167280,167282],{"className":30516,"code":167281,"language":30518,"meta":25,"style":25},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[27,167283,167284,167308,167331],{"__ignoreMap":25},[30,167285,167286,167288,167290,167292,167294,167296,167298,167300,167302,167304,167306],{"class":32,"line":33},[30,167287,164238],{"class":321},[30,167289,367],{"class":317},[30,167291,52364],{"class":321},[30,167293,537],{"class":40},[30,167295,12617],{"class":321},[30,167297,398],{"class":40},[30,167299,12617],{"class":321},[30,167301,392],{"class":40},[30,167303,12617],{"class":321},[30,167305,613],{"class":40},[30,167307,33384],{"class":321},[30,167309,167310,167312,167314,167317,167319,167321,167324,167326,167328],{"class":32,"line":44},[30,167311,161444],{"class":321},[30,167313,367],{"class":317},[30,167315,167316],{"class":40}," map",[30,167318,322],{"class":321},[30,167320,167024],{"class":317},[30,167322,167323],{"class":321}," x: x ",[30,167325,775],{"class":317},[30,167327,14937],{"class":40},[30,167329,167330],{"class":321},", nums)\n",[30,167332,167333,167335,167337,167339],{"class":32,"line":52},[30,167334,30553],{"class":40},[30,167336,322],{"class":321},[30,167338,154208],{"class":40},[30,167340,166206],{"class":321},[287,167342,167344],{"id":167343},"_7102-filter","7.10.2 filter",[157,167346,167347,167349],{},[27,167348,80189],{}," 保留满足条件的元素。",[20,167351,167353],{"className":30516,"code":167352,"language":30518,"meta":25,"style":25},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[27,167354,167355,167383,167408],{"__ignoreMap":25},[30,167356,167357,167359,167361,167363,167365,167367,167369,167371,167373,167375,167377,167379,167381],{"class":32,"line":33},[30,167358,164238],{"class":321},[30,167360,367],{"class":317},[30,167362,52364],{"class":321},[30,167364,537],{"class":40},[30,167366,12617],{"class":321},[30,167368,398],{"class":40},[30,167370,12617],{"class":321},[30,167372,392],{"class":40},[30,167374,12617],{"class":321},[30,167376,613],{"class":40},[30,167378,12617],{"class":321},[30,167380,639],{"class":40},[30,167382,33384],{"class":321},[30,167384,167385,167387,167389,167392,167394,167396,167398,167400,167402,167404,167406],{"class":32,"line":44},[30,167386,161444],{"class":321},[30,167388,367],{"class":317},[30,167390,167391],{"class":40}," filter",[30,167393,322],{"class":321},[30,167395,167024],{"class":317},[30,167397,167323],{"class":321},[30,167399,648],{"class":317},[30,167401,14937],{"class":40},[30,167403,101697],{"class":317},[30,167405,4275],{"class":40},[30,167407,167330],{"class":321},[30,167409,167410,167412,167414,167416],{"class":32,"line":52},[30,167411,30553],{"class":40},[30,167413,322],{"class":321},[30,167415,154208],{"class":40},[30,167417,166206],{"class":321},[287,167419,167421],{"id":167420},"_7103-sorted","7.10.3 sorted",[157,167423,167424,167426],{},[27,167425,165374],{}," 返回排序后的新列表。",[20,167428,167430],{"className":30516,"code":167429,"language":30518,"meta":25,"style":25},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nresult = sorted(students, key=lambda item: item[\"score\"], reverse=True)\nprint(result)\n",[27,167431,167432,167440,167460,167480,167500,167504,167508,167537],{"__ignoreMap":25},[30,167433,167434,167436,167438],{"class":32,"line":33},[30,167435,159854],{"class":321},[30,167437,367],{"class":317},[30,167439,55585],{"class":321},[30,167441,167442,167444,167446,167448,167450,167452,167454,167456,167458],{"class":32,"line":44},[30,167443,148523],{"class":321},[30,167445,62817],{"class":74},[30,167447,51575],{"class":321},[30,167449,150026],{"class":74},[30,167451,12617],{"class":321},[30,167453,151610],{"class":74},[30,167455,51575],{"class":321},[30,167457,1309],{"class":40},[30,167459,5112],{"class":321},[30,167461,167462,167464,167466,167468,167470,167472,167474,167476,167478],{"class":32,"line":52},[30,167463,148523],{"class":321},[30,167465,62817],{"class":74},[30,167467,51575],{"class":321},[30,167469,151074],{"class":74},[30,167471,12617],{"class":321},[30,167473,151610],{"class":74},[30,167475,51575],{"class":321},[30,167477,1131],{"class":40},[30,167479,5112],{"class":321},[30,167481,167482,167484,167486,167488,167490,167492,167494,167496,167498],{"class":32,"line":60},[30,167483,148523],{"class":321},[30,167485,62817],{"class":74},[30,167487,51575],{"class":321},[30,167489,159869],{"class":74},[30,167491,12617],{"class":321},[30,167493,151610],{"class":74},[30,167495,51575],{"class":321},[30,167497,726],{"class":40},[30,167499,5112],{"class":321},[30,167501,167502],{"class":32,"line":68},[30,167503,33384],{"class":321},[30,167505,167506],{"class":32,"line":80},[30,167507,2582],{"emptyLinePlaceholder":245},[30,167509,167510,167512,167514,167516,167519,167521,167523,167525,167527,167529,167531,167533,167535],{"class":32,"line":88},[30,167511,161444],{"class":321},[30,167513,367],{"class":317},[30,167515,163742],{"class":40},[30,167517,167518],{"class":321},"(students, ",[30,167520,154084],{"class":5398},[30,167522,154087],{"class":317},[30,167524,154090],{"class":321},[30,167526,151610],{"class":74},[30,167528,112340],{"class":321},[30,167530,163666],{"class":5398},[30,167532,367],{"class":317},[30,167534,31614],{"class":40},[30,167536,328],{"class":321},[30,167538,167539,167541],{"class":32,"line":96},[30,167540,30553],{"class":40},[30,167542,76723],{"class":321},[15,167544,167546],{"id":167545},"_711-闭包入门","7.11 闭包入门",[157,167548,167549],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[20,167551,167553],{"className":30516,"code":167552,"language":30518,"meta":25,"style":25},"def outer(base):\n    def inner(num):\n        return base + num\n\n    return inner\n\n\nadd_10 = outer(10)\nprint(add_10(5))\n",[27,167554,167555,167565,167575,167586,167590,167597,167601,167605,167619],{"__ignoreMap":25},[30,167556,167557,167559,167562],{"class":32,"line":33},[30,167558,32085],{"class":317},[30,167560,167561],{"class":36}," outer",[30,167563,167564],{"class":321},"(base):\n",[30,167566,167567,167569,167572],{"class":32,"line":44},[30,167568,30939],{"class":317},[30,167570,167571],{"class":36}," inner",[30,167573,167574],{"class":321},"(num):\n",[30,167576,167577,167579,167582,167584],{"class":32,"line":52},[30,167578,14934],{"class":317},[30,167580,167581],{"class":321}," base ",[30,167583,801],{"class":317},[30,167585,166717],{"class":321},[30,167587,167588],{"class":32,"line":60},[30,167589,2582],{"emptyLinePlaceholder":245},[30,167591,167592,167594],{"class":32,"line":68},[30,167593,4272],{"class":317},[30,167595,167596],{"class":321}," inner\n",[30,167598,167599],{"class":32,"line":80},[30,167600,2582],{"emptyLinePlaceholder":245},[30,167602,167603],{"class":32,"line":88},[30,167604,2582],{"emptyLinePlaceholder":245},[30,167606,167607,167610,167612,167615,167617],{"class":32,"line":96},[30,167608,167609],{"class":321},"add_10 ",[30,167611,367],{"class":317},[30,167613,167614],{"class":321}," outer(",[30,167616,766],{"class":40},[30,167618,328],{"class":321},[30,167620,167621,167623,167626,167628],{"class":32,"line":104},[30,167622,30553],{"class":40},[30,167624,167625],{"class":321},"(add_10(",[30,167627,639],{"class":40},[30,167629,30635],{"class":321},[157,167631,167632],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[15,167634,167636],{"id":167635},"_712-装饰器入门","7.12 装饰器入门",[157,167638,167639],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[20,167641,167643],{"className":30516,"code":167642,"language":30518,"meta":25,"style":25},"def log(func):\n    def wrapper():\n        print(\"函数开始执行\")\n        func()\n        print(\"函数执行结束\")\n\n    return wrapper\n\n\n@log\ndef say_hello():\n    print(\"hello\")\n\n\nsay_hello()\n",[27,167644,167645,167654,167663,167674,167679,167690,167694,167701,167705,167709,167714,167722,167732,167736,167740],{"__ignoreMap":25},[30,167646,167647,167649,167651],{"class":32,"line":33},[30,167648,32085],{"class":317},[30,167650,87329],{"class":36},[30,167652,167653],{"class":321},"(func):\n",[30,167655,167656,167658,167661],{"class":32,"line":44},[30,167657,30939],{"class":317},[30,167659,167660],{"class":36}," wrapper",[30,167662,32091],{"class":321},[30,167664,167665,167667,167669,167672],{"class":32,"line":52},[30,167666,32589],{"class":40},[30,167668,322],{"class":321},[30,167670,167671],{"class":74},"\"函数开始执行\"",[30,167673,328],{"class":321},[30,167675,167676],{"class":32,"line":60},[30,167677,167678],{"class":321},"        func()\n",[30,167680,167681,167683,167685,167688],{"class":32,"line":68},[30,167682,32589],{"class":40},[30,167684,322],{"class":321},[30,167686,167687],{"class":74},"\"函数执行结束\"",[30,167689,328],{"class":321},[30,167691,167692],{"class":32,"line":80},[30,167693,2582],{"emptyLinePlaceholder":245},[30,167695,167696,167698],{"class":32,"line":88},[30,167697,4272],{"class":317},[30,167699,167700],{"class":321}," wrapper\n",[30,167702,167703],{"class":32,"line":96},[30,167704,2582],{"emptyLinePlaceholder":245},[30,167706,167707],{"class":32,"line":104},[30,167708,2582],{"emptyLinePlaceholder":245},[30,167710,167711],{"class":32,"line":112},[30,167712,167713],{"class":36},"@log\n",[30,167715,167716,167718,167720],{"class":32,"line":123},[30,167717,32085],{"class":317},[30,167719,161134],{"class":36},[30,167721,32091],{"class":321},[30,167723,167724,167726,167728,167730],{"class":32,"line":131},[30,167725,31437],{"class":40},[30,167727,322],{"class":321},[30,167729,6026],{"class":74},[30,167731,328],{"class":321},[30,167733,167734],{"class":32,"line":142},[30,167735,2582],{"emptyLinePlaceholder":245},[30,167737,167738],{"class":32,"line":1811},[30,167739,2582],{"emptyLinePlaceholder":245},[30,167741,167742],{"class":32,"line":1825},[30,167743,161169],{"class":321},[157,167745,158412],{},[20,167747,167749],{"className":30516,"code":167748,"language":30518,"meta":25,"style":25},"say_hello = log(say_hello)\n",[27,167750,167751],{"__ignoreMap":25},[30,167752,167753,167756,167758],{"class":32,"line":33},[30,167754,167755],{"class":321},"say_hello ",[30,167757,367],{"class":317},[30,167759,167760],{"class":321}," log(say_hello)\n",[157,167762,167763],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[15,167765,167767],{"id":167766},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[20,167769,167771],{"className":30516,"code":167770,"language":30518,"meta":25,"style":25},"def log(func):\n    def wrapper(*args, **kwargs):\n        print(\"函数开始执行\")\n        result = func(*args, **kwargs)\n        print(\"函数执行结束\")\n        return result\n\n    return wrapper\n\n\n@log\ndef add(a, b):\n    return a + b\n\n\nprint(add(10, 20))\n",[27,167772,167773,167781,167798,167808,167827,167837,167844,167848,167854,167858,167862,167866,167874,167884,167888,167892],{"__ignoreMap":25},[30,167774,167775,167777,167779],{"class":32,"line":33},[30,167776,32085],{"class":317},[30,167778,87329],{"class":36},[30,167780,167653],{"class":321},[30,167782,167783,167785,167787,167789,167791,167794,167796],{"class":32,"line":44},[30,167784,30939],{"class":317},[30,167786,167660],{"class":36},[30,167788,322],{"class":321},[30,167790,775],{"class":317},[30,167792,167793],{"class":321},"args, ",[30,167795,10843],{"class":317},[30,167797,166804],{"class":321},[30,167799,167800,167802,167804,167806],{"class":32,"line":52},[30,167801,32589],{"class":40},[30,167803,322],{"class":321},[30,167805,167671],{"class":74},[30,167807,328],{"class":321},[30,167809,167810,167813,167815,167818,167820,167822,167824],{"class":32,"line":60},[30,167811,167812],{"class":321},"        result ",[30,167814,367],{"class":317},[30,167816,167817],{"class":321}," func(",[30,167819,775],{"class":317},[30,167821,167793],{"class":321},[30,167823,10843],{"class":317},[30,167825,167826],{"class":321},"kwargs)\n",[30,167828,167829,167831,167833,167835],{"class":32,"line":68},[30,167830,32589],{"class":40},[30,167832,322],{"class":321},[30,167834,167687],{"class":74},[30,167836,328],{"class":321},[30,167838,167839,167841],{"class":32,"line":80},[30,167840,14934],{"class":317},[30,167842,167843],{"class":321}," result\n",[30,167845,167846],{"class":32,"line":88},[30,167847,2582],{"emptyLinePlaceholder":245},[30,167849,167850,167852],{"class":32,"line":96},[30,167851,4272],{"class":317},[30,167853,167700],{"class":321},[30,167855,167856],{"class":32,"line":104},[30,167857,2582],{"emptyLinePlaceholder":245},[30,167859,167860],{"class":32,"line":112},[30,167861,2582],{"emptyLinePlaceholder":245},[30,167863,167864],{"class":32,"line":123},[30,167865,167713],{"class":36},[30,167867,167868,167870,167872],{"class":32,"line":131},[30,167869,32085],{"class":317},[30,167871,5391],{"class":36},[30,167873,151231],{"class":321},[30,167875,167876,167878,167880,167882],{"class":32,"line":142},[30,167877,4272],{"class":317},[30,167879,11051],{"class":321},[30,167881,801],{"class":317},[30,167883,151242],{"class":321},[30,167885,167886],{"class":32,"line":1811},[30,167887,2582],{"emptyLinePlaceholder":245},[30,167889,167890],{"class":32,"line":1825},[30,167891,2582],{"emptyLinePlaceholder":245},[30,167893,167894,167896,167898,167900,167902,167904],{"class":32,"line":1830},[30,167895,30553],{"class":40},[30,167897,166738],{"class":321},[30,167899,766],{"class":40},[30,167901,12617],{"class":321},[30,167903,1020],{"class":40},[30,167905,30635],{"class":321},[157,167907,167908,167909,101156,167911,167913],{},"这个写法使用 ",[27,167910,166670],{},[27,167912,166785],{}," 接收原函数的所有参数。",[15,167915,167917],{"id":167916},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[157,167919,123430],{},[271,167921,167922,167925,167928],{},[150,167923,167924],{},"给定一组学生数据。",[150,167926,167927],{},"封装函数，根据传入规则筛选学生。",[150,167929,167930],{},"筛选及格、优秀、未成年学生。",[157,167932,10217],{},[20,167934,167936],{"className":30516,"code":167935,"language":30518,"meta":25,"style":25},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 59},\n]\n\n\ndef filter_students(students, condition):\n    result = []\n    for student in students:\n        if condition(student):\n            result.append(student)\n    return result\n\n\npassed = filter_students(students, lambda s: s[\"score\"] >= 60)\nexcellent = filter_students(students, lambda s: s[\"score\"] >= 90)\nunder_age = filter_students(students, lambda s: s[\"age\"] \u003C 18)\n\nprint(passed)\nprint(excellent)\nprint(under_age)\n",[27,167937,167938,167946,167974,168002,168030,168034,168038,168042,168052,168060,168070,168077,168082,168088,168092,168096,168120,168143,168166,168170,168177,168184],{"__ignoreMap":25},[30,167939,167940,167942,167944],{"class":32,"line":33},[30,167941,159854],{"class":321},[30,167943,367],{"class":317},[30,167945,55585],{"class":321},[30,167947,167948,167950,167952,167954,167956,167958,167960,167962,167964,167966,167968,167970,167972],{"class":32,"line":44},[30,167949,148523],{"class":321},[30,167951,62817],{"class":74},[30,167953,51575],{"class":321},[30,167955,150026],{"class":74},[30,167957,12617],{"class":321},[30,167959,69262],{"class":74},[30,167961,51575],{"class":321},[30,167963,970],{"class":40},[30,167965,12617],{"class":321},[30,167967,151610],{"class":74},[30,167969,51575],{"class":321},[30,167971,1309],{"class":40},[30,167973,5112],{"class":321},[30,167975,167976,167978,167980,167982,167984,167986,167988,167990,167992,167994,167996,167998,168000],{"class":32,"line":52},[30,167977,148523],{"class":321},[30,167979,62817],{"class":74},[30,167981,51575],{"class":321},[30,167983,151074],{"class":74},[30,167985,12617],{"class":321},[30,167987,69262],{"class":74},[30,167989,51575],{"class":321},[30,167991,945],{"class":40},[30,167993,12617],{"class":321},[30,167995,151610],{"class":74},[30,167997,51575],{"class":321},[30,167999,1131],{"class":40},[30,168001,5112],{"class":321},[30,168003,168004,168006,168008,168010,168012,168014,168016,168018,168020,168022,168024,168026,168028],{"class":32,"line":60},[30,168005,148523],{"class":321},[30,168007,62817],{"class":74},[30,168009,51575],{"class":321},[30,168011,159869],{"class":74},[30,168013,12617],{"class":321},[30,168015,69262],{"class":74},[30,168017,51575],{"class":321},[30,168019,995],{"class":40},[30,168021,12617],{"class":321},[30,168023,151610],{"class":74},[30,168025,51575],{"class":321},[30,168027,1202],{"class":40},[30,168029,5112],{"class":321},[30,168031,168032],{"class":32,"line":68},[30,168033,33384],{"class":321},[30,168035,168036],{"class":32,"line":80},[30,168037,2582],{"emptyLinePlaceholder":245},[30,168039,168040],{"class":32,"line":88},[30,168041,2582],{"emptyLinePlaceholder":245},[30,168043,168044,168046,168049],{"class":32,"line":96},[30,168045,32085],{"class":317},[30,168047,168048],{"class":36}," filter_students",[30,168050,168051],{"class":321},"(students, condition):\n",[30,168053,168054,168056,168058],{"class":32,"line":104},[30,168055,161361],{"class":321},[30,168057,367],{"class":317},[30,168059,51976],{"class":321},[30,168061,168062,168064,168066,168068],{"class":32,"line":112},[30,168063,3383],{"class":317},[30,168065,152275],{"class":321},[30,168067,26181],{"class":317},[30,168069,152280],{"class":321},[30,168071,168072,168074],{"class":32,"line":123},[30,168073,2679],{"class":317},[30,168075,168076],{"class":321}," condition(student):\n",[30,168078,168079],{"class":32,"line":131},[30,168080,168081],{"class":321},"            result.append(student)\n",[30,168083,168084,168086],{"class":32,"line":142},[30,168085,4272],{"class":317},[30,168087,167843],{"class":321},[30,168089,168090],{"class":32,"line":1811},[30,168091,2582],{"emptyLinePlaceholder":245},[30,168093,168094],{"class":32,"line":1825},[30,168095,2582],{"emptyLinePlaceholder":245},[30,168097,168098,168100,168102,168105,168107,168110,168112,168114,168116,168118],{"class":32,"line":1830},[30,168099,165839],{"class":321},[30,168101,367],{"class":317},[30,168103,168104],{"class":321}," filter_students(students, ",[30,168106,167024],{"class":317},[30,168108,168109],{"class":321}," s: s[",[30,168111,151610],{"class":74},[30,168113,4625],{"class":321},[30,168115,1893],{"class":317},[30,168117,157975],{"class":40},[30,168119,328],{"class":321},[30,168121,168122,168125,168127,168129,168131,168133,168135,168137,168139,168141],{"class":32,"line":1836},[30,168123,168124],{"class":321},"excellent ",[30,168126,367],{"class":317},[30,168128,168104],{"class":321},[30,168130,167024],{"class":317},[30,168132,168109],{"class":321},[30,168134,151610],{"class":74},[30,168136,4625],{"class":321},[30,168138,1893],{"class":317},[30,168140,157926],{"class":40},[30,168142,328],{"class":321},[30,168144,168145,168148,168150,168152,168154,168156,168158,168160,168162,168164],{"class":32,"line":1857},[30,168146,168147],{"class":321},"under_age ",[30,168149,367],{"class":317},[30,168151,168104],{"class":321},[30,168153,167024],{"class":317},[30,168155,168109],{"class":321},[30,168157,69262],{"class":74},[30,168159,4625],{"class":321},[30,168161,1230],{"class":317},[30,168163,156423],{"class":40},[30,168165,328],{"class":321},[30,168167,168168],{"class":32,"line":1862},[30,168169,2582],{"emptyLinePlaceholder":245},[30,168171,168172,168174],{"class":32,"line":1876},[30,168173,30553],{"class":40},[30,168175,168176],{"class":321},"(passed)\n",[30,168178,168179,168181],{"class":32,"line":1881},[30,168180,30553],{"class":40},[30,168182,168183],{"class":321},"(excellent)\n",[30,168185,168186,168188],{"class":32,"line":1910},[30,168187,30553],{"class":40},[30,168189,168190],{"class":321},"(under_age)\n",[15,168192,168194],{"id":168193},"_715-易错点","7.15 易错点",[271,168196,168197,168200,168208,168213,168224],{},[150,168198,168199],{},"默认参数不要写可变对象。",[150,168201,168202,168204,168205,168207],{},[27,168203,166670],{}," 是元组，",[27,168206,166785],{}," 是字典。",[150,168209,168210,168212],{},[27,168211,167024],{}," 只适合简单表达式。",[150,168214,168215,101156,168217,168219,168220,168223],{},[27,168216,74182],{},[27,168218,80189],{}," 的结果是迭代器，常用 ",[27,168221,168222],{},"list()"," 转换查看。",[150,168225,168226],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[15,168228,168230],{"id":168229},"_716-本章练习","7.16 本章练习",[271,168232,168233,168240,168246,168251,168256],{},[150,168234,168235,168236,168239],{},"写函数 ",[27,168237,168238],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[150,168241,168235,168242,168245],{},[27,168243,168244],{},"print_user(**kwargs)","，输出用户所有字段。",[150,168247,104504,168248,168250],{},[27,168249,167024],{}," 对学生列表按年龄排序。",[150,168252,104504,168253,168255],{},[27,168254,80189],{}," 找出成绩不及格的学生。",[150,168257,168258],{},"写一个装饰器，统计函数执行前后的提示信息。",[234,168260,168261],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":168263},[168264,168265,168266,168267,168268,168269,168273,168274,168275,168276,168281,168282,168283,168284,168285,168286],{"id":166122,"depth":44,"text":166123},{"id":166236,"depth":44,"text":166237},{"id":166325,"depth":44,"text":166326},{"id":166387,"depth":44,"text":166388},{"id":166533,"depth":44,"text":166534},{"id":166660,"depth":44,"text":166661,"children":168270},[168271,168272],{"id":166664,"depth":52,"text":166665},{"id":166779,"depth":52,"text":166780},{"id":166860,"depth":44,"text":166861},{"id":167018,"depth":44,"text":167019},{"id":167186,"depth":44,"text":167187},{"id":167268,"depth":44,"text":167269,"children":168277},[168278,168279,168280],{"id":167272,"depth":52,"text":167273},{"id":167343,"depth":52,"text":167344},{"id":167420,"depth":52,"text":167421},{"id":167545,"depth":44,"text":167546},{"id":167635,"depth":44,"text":167636},{"id":167766,"depth":44,"text":167767},{"id":167916,"depth":44,"text":167917},{"id":168193,"depth":44,"text":168194},{"id":168229,"depth":44,"text":168230},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166114,"description":242},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168293,"title":168294,"body":168295,"description":242,"extension":243,"meta":170814,"navigation":245,"path":170815,"seo":170816,"stem":170817,"__hash__":170818},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168296,"toc":170789},[168297,168300,168304,168307,168310,168341,168345,168349,168352,168379,168383,168386,168437,168440,168455,168458,168493,168497,168499,168523,168526,168586,168590,168594,168597,168654,168657,168677,168681,168684,168747,168751,168754,168810,168817,168841,168845,168848,168911,168915,168920,168971,168974,168978,168983,169050,169053,169135,169139,169144,169195,169198,169202,169205,169208,169216,169219,169265,169268,169314,169318,169324,169368,169371,169417,169420,169460,169463,169524,169528,169531,169621,169624,169766,169769,169836,169840,169843,169846,169987,169990,170068,170071,170247,170251,170253,170264,170266,170465,170469,170713,170717,170751,170755,170786],[10,168298,168294],{"id":168299},"_8-文件操作",[15,168301,168303],{"id":168302},"_81-文件操作的意义","8.1 文件操作的意义",[157,168305,168306],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[157,168308,168309],{},"常见文件类型：",[271,168311,168312,168318,168324,168330,168336],{},[150,168313,168314,168317],{},[27,168315,168316],{},".txt","：普通文本。",[150,168319,168320,168323],{},[27,168321,168322],{},".csv","：表格文本。",[150,168325,168326,168329],{},[27,168327,168328],{},".json","：结构化数据。",[150,168331,168332,168335],{},[27,168333,168334],{},".log","：日志文件。",[150,168337,168338,168340],{},[27,168339,146490],{},"：Python 源代码。",[15,168342,168344],{"id":168343},"_82-路径","8.2 路径",[287,168346,168348],{"id":168347},"_821-相对路径","8.2.1 相对路径",[157,168350,168351],{},"相对当前运行目录：",[20,168353,168355],{"className":30516,"code":168354,"language":30518,"meta":25,"style":25},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[27,168356,168357],{"__ignoreMap":25},[30,168358,168359,168361,168363,168365,168367,168369,168371,168373,168375,168377],{"class":32,"line":33},[30,168360,87053],{"class":40},[30,168362,322],{"class":321},[30,168364,146934],{"class":74},[30,168366,12617],{"class":321},[30,168368,146939],{"class":74},[30,168370,12617],{"class":321},[30,168372,146944],{"class":5398},[30,168374,367],{"class":317},[30,168376,146949],{"class":74},[30,168378,328],{"class":321},[287,168380,168382],{"id":168381},"_822-绝对路径","8.2.2 绝对路径",[157,168384,168385],{},"从根目录或盘符开始：",[20,168387,168389],{"className":30516,"code":168388,"language":30518,"meta":25,"style":25},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[27,168390,168391,168414],{"__ignoreMap":25},[30,168392,168393,168395,168397,168400,168402,168404,168406,168408,168410,168412],{"class":32,"line":33},[30,168394,87053],{"class":40},[30,168396,322],{"class":321},[30,168398,168399],{"class":74},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[30,168401,12617],{"class":321},[30,168403,146939],{"class":74},[30,168405,12617],{"class":321},[30,168407,146944],{"class":5398},[30,168409,367],{"class":317},[30,168411,146949],{"class":74},[30,168413,328],{"class":321},[30,168415,168416,168418,168420,168423,168425,168427,168429,168431,168433,168435],{"class":32,"line":44},[30,168417,87053],{"class":40},[30,168419,322],{"class":321},[30,168421,168422],{"class":74},"\"D:\u002Fdata\u002Fdata.txt\"",[30,168424,12617],{"class":321},[30,168426,146939],{"class":74},[30,168428,12617],{"class":321},[30,168430,146944],{"class":5398},[30,168432,367],{"class":317},[30,168434,146949],{"class":74},[30,168436,328],{"class":321},[157,168438,168439],{},"Windows 路径建议写成：",[20,168441,168443],{"className":30516,"code":168442,"language":30518,"meta":25,"style":25},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[27,168444,168445],{"__ignoreMap":25},[30,168446,168447,168450,168452],{"class":32,"line":33},[30,168448,168449],{"class":321},"path ",[30,168451,367],{"class":317},[30,168453,168454],{"class":74}," \"D:\u002Fdata\u002Fdata.txt\"\n",[157,168456,168457],{},"或原始字符串：",[20,168459,168461],{"className":30516,"code":168460,"language":30518,"meta":25,"style":25},"path = r\"D:\\data\\data.txt\"\n",[27,168462,168463],{"__ignoreMap":25},[30,168464,168465,168467,168469,168471,168473,168476,168479,168482,168484,168486,168488,168491],{"class":32,"line":33},[30,168466,168449],{"class":321},[30,168468,367],{"class":317},[30,168470,17303],{"class":317},[30,168472,571],{"class":74},[30,168474,168475],{"class":48115},"D:",[30,168477,168478],{"class":40},"\\d",[30,168480,168481],{"class":48115},"ata",[30,168483,168478],{"class":40},[30,168485,168481],{"class":48115},[30,168487,878],{"class":40},[30,168489,168490],{"class":48115},"txt",[30,168492,25306],{"class":74},[15,168494,168496],{"id":168495},"_83-open函数","8.3 open函数",[157,168498,5363],{},[20,168500,168502],{"className":30516,"code":168501,"language":30518,"meta":25,"style":25},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[27,168503,168504],{"__ignoreMap":25},[30,168505,168506,168508,168510,168512,168515,168517,168519,168521],{"class":32,"line":33},[30,168507,45492],{"class":5398},[30,168509,13746],{"class":317},[30,168511,146929],{"class":40},[30,168513,168514],{"class":321},"(文件路径, 打开模式, ",[30,168516,146944],{"class":5398},[30,168518,367],{"class":317},[30,168520,146949],{"class":74},[30,168522,328],{"class":321},[157,168524,168525],{},"常见模式：",[457,168527,168528,168537],{},[460,168529,168530],{},[463,168531,168532,168535],{},[466,168533,168534],{},"模式",[466,168536,26007],{},[504,168538,168539,168548,168557,168566,168576],{},[463,168540,168541,168545],{},[509,168542,168543],{},[27,168544,990],{},[509,168546,168547],{},"只读，文件不存在会报错",[463,168549,168550,168554],{},[509,168551,168552],{},[27,168553,1115],{},[509,168555,168556],{},"只写，文件不存在会创建，存在会清空",[463,168558,168559,168563],{},[509,168560,168561],{},[27,168562,558],{},[509,168564,168565],{},"追加，文件不存在会创建",[463,168567,168568,168573],{},[509,168569,168570],{},[27,168571,168572],{},"rb",[509,168574,168575],{},"二进制只读",[463,168577,168578,168583],{},[509,168579,168580],{},[27,168581,168582],{},"wb",[509,168584,168585],{},"二进制只写",[15,168587,168589],{"id":168588},"_84-读取文件","8.4 读取文件",[287,168591,168593],{"id":168592},"_841-read","8.4.1 read",[157,168595,168596],{},"一次读取全部内容：",[20,168598,168600],{"className":30516,"code":168599,"language":30518,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[27,168601,168602,168628,168640,168647],{"__ignoreMap":25},[30,168603,168604,168606,168608,168610,168612,168614,168616,168618,168620,168622,168624,168626],{"class":32,"line":33},[30,168605,45492],{"class":5398},[30,168607,13746],{"class":317},[30,168609,146929],{"class":40},[30,168611,322],{"class":321},[30,168613,146934],{"class":74},[30,168615,12617],{"class":321},[30,168617,146939],{"class":74},[30,168619,12617],{"class":321},[30,168621,146944],{"class":5398},[30,168623,367],{"class":317},[30,168625,146949],{"class":74},[30,168627,328],{"class":321},[30,168629,168630,168633,168635,168637],{"class":32,"line":44},[30,168631,168632],{"class":321},"content ",[30,168634,367],{"class":317},[30,168636,148291],{"class":5398},[30,168638,168639],{"class":321},".read()\n",[30,168641,168642,168644],{"class":32,"line":52},[30,168643,30553],{"class":40},[30,168645,168646],{"class":321},"(content)\n",[30,168648,168649,168651],{"class":32,"line":60},[30,168650,45492],{"class":5398},[30,168652,168653],{"class":321},".close()\n",[157,168655,168656],{},"可以指定读取字符数：",[20,168658,168660],{"className":30516,"code":168659,"language":30518,"meta":25,"style":25},"content = file.read(10)\n",[27,168661,168662],{"__ignoreMap":25},[30,168663,168664,168666,168668,168670,168673,168675],{"class":32,"line":33},[30,168665,168632],{"class":321},[30,168667,367],{"class":317},[30,168669,148291],{"class":5398},[30,168671,168672],{"class":321},".read(",[30,168674,766],{"class":40},[30,168676,328],{"class":321},[287,168678,168680],{"id":168679},"_842-readline","8.4.2 readline",[157,168682,168683],{},"一次读取一行：",[20,168685,168687],{"className":30516,"code":168686,"language":30518,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[27,168688,168689,168715,168719,168730,168737,168741],{"__ignoreMap":25},[30,168690,168691,168693,168695,168697,168699,168701,168703,168705,168707,168709,168711,168713],{"class":32,"line":33},[30,168692,45492],{"class":5398},[30,168694,13746],{"class":317},[30,168696,146929],{"class":40},[30,168698,322],{"class":321},[30,168700,146934],{"class":74},[30,168702,12617],{"class":321},[30,168704,146939],{"class":74},[30,168706,12617],{"class":321},[30,168708,146944],{"class":5398},[30,168710,367],{"class":317},[30,168712,146949],{"class":74},[30,168714,328],{"class":321},[30,168716,168717],{"class":32,"line":44},[30,168718,2582],{"emptyLinePlaceholder":245},[30,168720,168721,168723,168725,168727],{"class":32,"line":52},[30,168722,147390],{"class":321},[30,168724,367],{"class":317},[30,168726,148291],{"class":5398},[30,168728,168729],{"class":321},".readline()\n",[30,168731,168732,168734],{"class":32,"line":60},[30,168733,30553],{"class":40},[30,168735,168736],{"class":321},"(line)\n",[30,168738,168739],{"class":32,"line":68},[30,168740,2582],{"emptyLinePlaceholder":245},[30,168742,168743,168745],{"class":32,"line":80},[30,168744,45492],{"class":5398},[30,168746,168653],{"class":321},[287,168748,168750],{"id":168749},"_843-readlines","8.4.3 readlines",[157,168752,168753],{},"读取所有行，返回列表：",[20,168755,168757],{"className":30516,"code":168756,"language":30518,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[27,168758,168759,168785,168797,168804],{"__ignoreMap":25},[30,168760,168761,168763,168765,168767,168769,168771,168773,168775,168777,168779,168781,168783],{"class":32,"line":33},[30,168762,45492],{"class":5398},[30,168764,13746],{"class":317},[30,168766,146929],{"class":40},[30,168768,322],{"class":321},[30,168770,146934],{"class":74},[30,168772,12617],{"class":321},[30,168774,146939],{"class":74},[30,168776,12617],{"class":321},[30,168778,146944],{"class":5398},[30,168780,367],{"class":317},[30,168782,146949],{"class":74},[30,168784,328],{"class":321},[30,168786,168787,168790,168792,168794],{"class":32,"line":44},[30,168788,168789],{"class":321},"lines ",[30,168791,367],{"class":317},[30,168793,148291],{"class":5398},[30,168795,168796],{"class":321},".readlines()\n",[30,168798,168799,168801],{"class":32,"line":52},[30,168800,30553],{"class":40},[30,168802,168803],{"class":321},"(lines)\n",[30,168805,168806,168808],{"class":32,"line":60},[30,168807,45492],{"class":5398},[30,168809,168653],{"class":321},[157,168811,168812,168813,168816],{},"每一行通常带有换行符，可以用 ",[27,168814,168815],{},"strip()"," 去掉：",[20,168818,168820],{"className":30516,"code":168819,"language":30518,"meta":25,"style":25},"for line in lines:\n    print(line.strip())\n",[27,168821,168822,168834],{"__ignoreMap":25},[30,168823,168824,168826,168829,168831],{"class":32,"line":33},[30,168825,3207],{"class":317},[30,168827,168828],{"class":321}," line ",[30,168830,26181],{"class":317},[30,168832,168833],{"class":321}," lines:\n",[30,168835,168836,168838],{"class":32,"line":44},[30,168837,31437],{"class":40},[30,168839,168840],{"class":321},"(line.strip())\n",[287,168842,168844],{"id":168843},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[157,168846,168847],{},"推荐读取大文件时使用：",[20,168849,168851],{"className":30516,"code":168850,"language":30518,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[27,168852,168853,168879,168883,168895,168901,168905],{"__ignoreMap":25},[30,168854,168855,168857,168859,168861,168863,168865,168867,168869,168871,168873,168875,168877],{"class":32,"line":33},[30,168856,45492],{"class":5398},[30,168858,13746],{"class":317},[30,168860,146929],{"class":40},[30,168862,322],{"class":321},[30,168864,146934],{"class":74},[30,168866,12617],{"class":321},[30,168868,146939],{"class":74},[30,168870,12617],{"class":321},[30,168872,146944],{"class":5398},[30,168874,367],{"class":317},[30,168876,146949],{"class":74},[30,168878,328],{"class":321},[30,168880,168881],{"class":32,"line":44},[30,168882,2582],{"emptyLinePlaceholder":245},[30,168884,168885,168887,168889,168891,168893],{"class":32,"line":52},[30,168886,3207],{"class":317},[30,168888,168828],{"class":321},[30,168890,26181],{"class":317},[30,168892,148291],{"class":5398},[30,168894,3921],{"class":321},[30,168896,168897,168899],{"class":32,"line":60},[30,168898,31437],{"class":40},[30,168900,168840],{"class":321},[30,168902,168903],{"class":32,"line":68},[30,168904,2582],{"emptyLinePlaceholder":245},[30,168906,168907,168909],{"class":32,"line":80},[30,168908,45492],{"class":5398},[30,168910,168653],{"class":321},[15,168912,168914],{"id":168913},"_85-with语句","8.5 with语句",[157,168916,168917,168919],{},[27,168918,107971],{}," 会自动关闭文件，推荐使用。",[20,168921,168923],{"className":30516,"code":168922,"language":30518,"meta":25,"style":25},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[27,168924,168925,168955,168965],{"__ignoreMap":25},[30,168926,168927,168929,168931,168933,168935,168937,168939,168941,168943,168945,168947,168949,168951,168953],{"class":32,"line":33},[30,168928,107971],{"class":317},[30,168930,146929],{"class":40},[30,168932,322],{"class":321},[30,168934,146934],{"class":74},[30,168936,12617],{"class":321},[30,168938,146939],{"class":74},[30,168940,12617],{"class":321},[30,168942,146944],{"class":5398},[30,168944,367],{"class":317},[30,168946,146949],{"class":74},[30,168948,13896],{"class":321},[30,168950,31521],{"class":317},[30,168952,148291],{"class":5398},[30,168954,3921],{"class":321},[30,168956,168957,168959,168961,168963],{"class":32,"line":44},[30,168958,146961],{"class":321},[30,168960,367],{"class":317},[30,168962,148291],{"class":5398},[30,168964,168639],{"class":321},[30,168966,168967,168969],{"class":32,"line":52},[30,168968,31437],{"class":40},[30,168970,168646],{"class":321},[157,168972,168973],{},"等价于打开文件、读取、最后关闭，但更安全。",[15,168975,168977],{"id":168976},"_86-写入文件","8.6 写入文件",[157,168979,168980,168982],{},[27,168981,1115],{}," 模式会清空原文件。",[20,168984,168986],{"className":30516,"code":168985,"language":30518,"meta":25,"style":25},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[27,168987,168988,169018,169035],{"__ignoreMap":25},[30,168989,168990,168992,168994,168996,168998,169000,169002,169004,169006,169008,169010,169012,169014,169016],{"class":32,"line":33},[30,168991,107971],{"class":317},[30,168993,146929],{"class":40},[30,168995,322],{"class":321},[30,168997,146934],{"class":74},[30,168999,12617],{"class":321},[30,169001,152114],{"class":74},[30,169003,12617],{"class":321},[30,169005,146944],{"class":5398},[30,169007,367],{"class":317},[30,169009,146949],{"class":74},[30,169011,13896],{"class":321},[30,169013,31521],{"class":317},[30,169015,148291],{"class":5398},[30,169017,3921],{"class":321},[30,169019,169020,169023,169026,169029,169031,169033],{"class":32,"line":44},[30,169021,169022],{"class":5398},"    file",[30,169024,169025],{"class":321},".write(",[30,169027,169028],{"class":74},"\"hello",[30,169030,156663],{"class":40},[30,169032,571],{"class":74},[30,169034,328],{"class":321},[30,169036,169037,169039,169041,169044,169046,169048],{"class":32,"line":52},[30,169038,169022],{"class":5398},[30,169040,169025],{"class":321},[30,169042,169043],{"class":74},"\"python",[30,169045,156663],{"class":40},[30,169047,571],{"class":74},[30,169049,328],{"class":321},[157,169051,169052],{},"写入多行：",[20,169054,169056],{"className":30516,"code":169055,"language":30518,"meta":25,"style":25},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[27,169057,169058,169093,169097,169128],{"__ignoreMap":25},[30,169059,169060,169062,169064,169066,169069,169071,169073,169075,169078,169080,169082,169084,169087,169089,169091],{"class":32,"line":33},[30,169061,168789],{"class":321},[30,169063,367],{"class":317},[30,169065,52364],{"class":321},[30,169067,169068],{"class":74},"\"小明,18",[30,169070,156663],{"class":40},[30,169072,571],{"class":74},[30,169074,12617],{"class":321},[30,169076,169077],{"class":74},"\"小红,17",[30,169079,156663],{"class":40},[30,169081,571],{"class":74},[30,169083,12617],{"class":321},[30,169085,169086],{"class":74},"\"小刚,19",[30,169088,156663],{"class":40},[30,169090,571],{"class":74},[30,169092,33384],{"class":321},[30,169094,169095],{"class":32,"line":44},[30,169096,2582],{"emptyLinePlaceholder":245},[30,169098,169099,169101,169103,169105,169108,169110,169112,169114,169116,169118,169120,169122,169124,169126],{"class":32,"line":52},[30,169100,107971],{"class":317},[30,169102,146929],{"class":40},[30,169104,322],{"class":321},[30,169106,169107],{"class":74},"\"students.txt\"",[30,169109,12617],{"class":321},[30,169111,152114],{"class":74},[30,169113,12617],{"class":321},[30,169115,146944],{"class":5398},[30,169117,367],{"class":317},[30,169119,146949],{"class":74},[30,169121,13896],{"class":321},[30,169123,31521],{"class":317},[30,169125,148291],{"class":5398},[30,169127,3921],{"class":321},[30,169129,169130,169132],{"class":32,"line":60},[30,169131,169022],{"class":5398},[30,169133,169134],{"class":321},".writelines(lines)\n",[15,169136,169138],{"id":169137},"_87-追加文件","8.7 追加文件",[157,169140,169141,169143],{},[27,169142,558],{}," 模式不会清空原内容，而是在末尾追加。",[20,169145,169147],{"className":30516,"code":169146,"language":30518,"meta":25,"style":25},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[27,169148,169149,169180],{"__ignoreMap":25},[30,169150,169151,169153,169155,169157,169160,169162,169164,169166,169168,169170,169172,169174,169176,169178],{"class":32,"line":33},[30,169152,107971],{"class":317},[30,169154,146929],{"class":40},[30,169156,322],{"class":321},[30,169158,169159],{"class":74},"\"log.txt\"",[30,169161,12617],{"class":321},[30,169163,165463],{"class":74},[30,169165,12617],{"class":321},[30,169167,146944],{"class":5398},[30,169169,367],{"class":317},[30,169171,146949],{"class":74},[30,169173,13896],{"class":321},[30,169175,31521],{"class":317},[30,169177,148291],{"class":5398},[30,169179,3921],{"class":321},[30,169181,169182,169184,169186,169189,169191,169193],{"class":32,"line":44},[30,169183,169022],{"class":5398},[30,169185,169025],{"class":321},[30,169187,169188],{"class":74},"\"程序启动",[30,169190,156663],{"class":40},[30,169192,571],{"class":74},[30,169194,328],{"class":321},[157,169196,169197],{},"日志类文件常用追加模式。",[15,169199,169201],{"id":169200},"_88-文件编码","8.8 文件编码",[157,169203,169204],{},"编码决定文字如何保存为字节。",[157,169206,169207],{},"常见编码：",[271,169209,169210,169213],{},[150,169211,169212],{},"UTF-8：推荐。",[150,169214,169215],{},"GBK：部分 Windows 中文文件常见。",[157,169217,169218],{},"读取文件乱码时，可以尝试：",[20,169220,169222],{"className":30516,"code":169221,"language":30518,"meta":25,"style":25},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[27,169223,169224,169255],{"__ignoreMap":25},[30,169225,169226,169228,169230,169232,169234,169236,169238,169240,169242,169244,169247,169249,169251,169253],{"class":32,"line":33},[30,169227,107971],{"class":317},[30,169229,146929],{"class":40},[30,169231,322],{"class":321},[30,169233,146934],{"class":74},[30,169235,12617],{"class":321},[30,169237,146939],{"class":74},[30,169239,12617],{"class":321},[30,169241,146944],{"class":5398},[30,169243,367],{"class":317},[30,169245,169246],{"class":74},"\"gbk\"",[30,169248,13896],{"class":321},[30,169250,31521],{"class":317},[30,169252,148291],{"class":5398},[30,169254,3921],{"class":321},[30,169256,169257,169259,169261,169263],{"class":32,"line":44},[30,169258,146961],{"class":321},[30,169260,367],{"class":317},[30,169262,148291],{"class":5398},[30,169264,168639],{"class":321},[157,169266,169267],{},"写文件时建议统一 UTF-8：",[20,169269,169271],{"className":30516,"code":169270,"language":30518,"meta":25,"style":25},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[27,169272,169273,169303],{"__ignoreMap":25},[30,169274,169275,169277,169279,169281,169283,169285,169287,169289,169291,169293,169295,169297,169299,169301],{"class":32,"line":33},[30,169276,107971],{"class":317},[30,169278,146929],{"class":40},[30,169280,322],{"class":321},[30,169282,146934],{"class":74},[30,169284,12617],{"class":321},[30,169286,152114],{"class":74},[30,169288,12617],{"class":321},[30,169290,146944],{"class":5398},[30,169292,367],{"class":317},[30,169294,146949],{"class":74},[30,169296,13896],{"class":321},[30,169298,31521],{"class":317},[30,169300,148291],{"class":5398},[30,169302,3921],{"class":321},[30,169304,169305,169307,169309,169312],{"class":32,"line":44},[30,169306,169022],{"class":5398},[30,169308,169025],{"class":321},[30,169310,169311],{"class":74},"\"中文内容\"",[30,169313,328],{"class":321},[15,169315,169317],{"id":169316},"_89-pathlib","8.9 pathlib",[157,169319,169320,169323],{},[27,169321,169322],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[20,169325,169327],{"className":30516,"code":169326,"language":30518,"meta":25,"style":25},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[27,169328,169329,169339,169343,169361],{"__ignoreMap":25},[30,169330,169331,169333,169335,169337],{"class":32,"line":33},[30,169332,30875],{"class":317},[30,169334,108449],{"class":321},[30,169336,30530],{"class":317},[30,169338,108454],{"class":321},[30,169340,169341],{"class":32,"line":44},[30,169342,2582],{"emptyLinePlaceholder":245},[30,169344,169345,169347,169349,169351,169354,169356,169358],{"class":32,"line":52},[30,169346,168449],{"class":321},[30,169348,367],{"class":317},[30,169350,108683],{"class":321},[30,169352,169353],{"class":74},"\"data\"",[30,169355,13896],{"class":321},[30,169357,904],{"class":317},[30,169359,169360],{"class":74}," \"students.txt\"\n",[30,169362,169363,169365],{"class":32,"line":60},[30,169364,30553],{"class":40},[30,169366,169367],{"class":321},"(path)\n",[157,169369,169370],{},"创建目录：",[20,169372,169374],{"className":30516,"code":169373,"language":30518,"meta":25,"style":25},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[27,169375,169376,169386,169390,169403],{"__ignoreMap":25},[30,169377,169378,169380,169382,169384],{"class":32,"line":33},[30,169379,30875],{"class":317},[30,169381,108449],{"class":321},[30,169383,30530],{"class":317},[30,169385,108454],{"class":321},[30,169387,169388],{"class":32,"line":44},[30,169389,2582],{"emptyLinePlaceholder":245},[30,169391,169392,169395,169397,169399,169401],{"class":32,"line":52},[30,169393,169394],{"class":321},"data_dir ",[30,169396,367],{"class":317},[30,169398,108683],{"class":321},[30,169400,169353],{"class":74},[30,169402,328],{"class":321},[30,169404,169405,169408,169411,169413,169415],{"class":32,"line":60},[30,169406,169407],{"class":321},"data_dir.mkdir(",[30,169409,169410],{"class":5398},"exist_ok",[30,169412,367],{"class":317},[30,169414,31614],{"class":40},[30,169416,328],{"class":321},[157,169418,169419],{},"判断文件是否存在：",[20,169421,169423],{"className":30516,"code":169422,"language":30518,"meta":25,"style":25},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[27,169424,169425,169438,169442,169449],{"__ignoreMap":25},[30,169426,169427,169429,169431,169433,169436],{"class":32,"line":33},[30,169428,168449],{"class":321},[30,169430,367],{"class":317},[30,169432,108683],{"class":321},[30,169434,169435],{"class":74},"\"data\u002Fstudents.txt\"",[30,169437,328],{"class":321},[30,169439,169440],{"class":32,"line":44},[30,169441,2582],{"emptyLinePlaceholder":245},[30,169443,169444,169446],{"class":32,"line":52},[30,169445,1717],{"class":317},[30,169447,169448],{"class":321}," path.exists():\n",[30,169450,169451,169453,169455,169458],{"class":32,"line":60},[30,169452,31437],{"class":40},[30,169454,322],{"class":321},[30,169456,169457],{"class":74},"\"文件存在\"",[30,169459,328],{"class":321},[157,169461,169462],{},"读写文本：",[20,169464,169466],{"className":30516,"code":169465,"language":30518,"meta":25,"style":25},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[27,169467,169468,169480,169484,169501,169518],{"__ignoreMap":25},[30,169469,169470,169472,169474,169476,169478],{"class":32,"line":33},[30,169471,168449],{"class":321},[30,169473,367],{"class":317},[30,169475,108683],{"class":321},[30,169477,146934],{"class":74},[30,169479,328],{"class":321},[30,169481,169482],{"class":32,"line":44},[30,169483,2582],{"emptyLinePlaceholder":245},[30,169485,169486,169489,169491,169493,169495,169497,169499],{"class":32,"line":52},[30,169487,169488],{"class":321},"path.write_text(",[30,169490,146014],{"class":74},[30,169492,12617],{"class":321},[30,169494,146944],{"class":5398},[30,169496,367],{"class":317},[30,169498,146949],{"class":74},[30,169500,328],{"class":321},[30,169502,169503,169505,169507,169510,169512,169514,169516],{"class":32,"line":60},[30,169504,168632],{"class":321},[30,169506,367],{"class":317},[30,169508,169509],{"class":321}," path.read_text(",[30,169511,146944],{"class":5398},[30,169513,367],{"class":317},[30,169515,146949],{"class":74},[30,169517,328],{"class":321},[30,169519,169520,169522],{"class":32,"line":68},[30,169521,30553],{"class":40},[30,169523,168646],{"class":321},[15,169525,169527],{"id":169526},"_810-json文件","8.10 JSON文件",[157,169529,169530],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[20,169532,169534],{"className":30516,"code":169533,"language":30518,"meta":25,"style":25},"import json\n\nstudent = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n\ntext = json.dumps(student, ensure_ascii=False, indent=2)\nprint(text)\n",[27,169535,169536,169542,169546,169554,169564,169574,169582,169586,169590,169615],{"__ignoreMap":25},[30,169537,169538,169540],{"class":32,"line":33},[30,169539,30530],{"class":317},[30,169541,147229],{"class":321},[30,169543,169544],{"class":32,"line":44},[30,169545,2582],{"emptyLinePlaceholder":245},[30,169547,169548,169550,169552],{"class":32,"line":52},[30,169549,149619],{"class":321},[30,169551,367],{"class":317},[30,169553,15754],{"class":321},[30,169555,169556,169558,169560,169562],{"class":32,"line":60},[30,169557,147158],{"class":74},[30,169559,51575],{"class":321},[30,169561,150026],{"class":74},[30,169563,31604],{"class":321},[30,169565,169566,169568,169570,169572],{"class":32,"line":68},[30,169567,164675],{"class":74},[30,169569,51575],{"class":321},[30,169571,970],{"class":40},[30,169573,31604],{"class":321},[30,169575,169576,169578,169580],{"class":32,"line":80},[30,169577,164686],{"class":74},[30,169579,51575],{"class":321},[30,169581,164691],{"class":40},[30,169583,169584],{"class":32,"line":88},[30,169585,1751],{"class":321},[30,169587,169588],{"class":32,"line":96},[30,169589,2582],{"emptyLinePlaceholder":245},[30,169591,169592,169594,169596,169599,169601,169603,169605,169607,169609,169611,169613],{"class":32,"line":104},[30,169593,156582],{"class":321},[30,169595,367],{"class":317},[30,169597,169598],{"class":321}," json.dumps(student, ",[30,169600,147275],{"class":5398},[30,169602,367],{"class":317},[30,169604,34125],{"class":40},[30,169606,12617],{"class":321},[30,169608,152150],{"class":5398},[30,169610,367],{"class":317},[30,169612,398],{"class":40},[30,169614,328],{"class":321},[30,169616,169617,169619],{"class":32,"line":112},[30,169618,30553],{"class":40},[30,169620,164209],{"class":321},[157,169622,169623],{},"写入 JSON 文件：",[20,169625,169627],{"className":30516,"code":169626,"language":30518,"meta":25,"style":25},"import json\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.json\", \"w\", encoding=\"utf-8\") as file:\n    json.dump(students, file, ensure_ascii=False, indent=2)\n",[27,169628,169629,169635,169639,169647,169675,169703,169707,169711,169741],{"__ignoreMap":25},[30,169630,169631,169633],{"class":32,"line":33},[30,169632,30530],{"class":317},[30,169634,147229],{"class":321},[30,169636,169637],{"class":32,"line":44},[30,169638,2582],{"emptyLinePlaceholder":245},[30,169640,169641,169643,169645],{"class":32,"line":52},[30,169642,159854],{"class":321},[30,169644,367],{"class":317},[30,169646,55585],{"class":321},[30,169648,169649,169651,169653,169655,169657,169659,169661,169663,169665,169667,169669,169671,169673],{"class":32,"line":60},[30,169650,148523],{"class":321},[30,169652,62817],{"class":74},[30,169654,51575],{"class":321},[30,169656,150026],{"class":74},[30,169658,12617],{"class":321},[30,169660,69262],{"class":74},[30,169662,51575],{"class":321},[30,169664,970],{"class":40},[30,169666,12617],{"class":321},[30,169668,151610],{"class":74},[30,169670,51575],{"class":321},[30,169672,1309],{"class":40},[30,169674,5112],{"class":321},[30,169676,169677,169679,169681,169683,169685,169687,169689,169691,169693,169695,169697,169699,169701],{"class":32,"line":68},[30,169678,148523],{"class":321},[30,169680,62817],{"class":74},[30,169682,51575],{"class":321},[30,169684,151074],{"class":74},[30,169686,12617],{"class":321},[30,169688,69262],{"class":74},[30,169690,51575],{"class":321},[30,169692,945],{"class":40},[30,169694,12617],{"class":321},[30,169696,151610],{"class":74},[30,169698,51575],{"class":321},[30,169700,1131],{"class":40},[30,169702,5112],{"class":321},[30,169704,169705],{"class":32,"line":80},[30,169706,33384],{"class":321},[30,169708,169709],{"class":32,"line":88},[30,169710,2582],{"emptyLinePlaceholder":245},[30,169712,169713,169715,169717,169719,169721,169723,169725,169727,169729,169731,169733,169735,169737,169739],{"class":32,"line":96},[30,169714,107971],{"class":317},[30,169716,146929],{"class":40},[30,169718,322],{"class":321},[30,169720,151969],{"class":74},[30,169722,12617],{"class":321},[30,169724,152114],{"class":74},[30,169726,12617],{"class":321},[30,169728,146944],{"class":5398},[30,169730,367],{"class":317},[30,169732,146949],{"class":74},[30,169734,13896],{"class":321},[30,169736,31521],{"class":317},[30,169738,148291],{"class":5398},[30,169740,3921],{"class":321},[30,169742,169743,169746,169748,169750,169752,169754,169756,169758,169760,169762,169764],{"class":32,"line":104},[30,169744,169745],{"class":321},"    json.dump(students, ",[30,169747,45492],{"class":5398},[30,169749,12617],{"class":321},[30,169751,147275],{"class":5398},[30,169753,367],{"class":317},[30,169755,34125],{"class":40},[30,169757,12617],{"class":321},[30,169759,152150],{"class":5398},[30,169761,367],{"class":317},[30,169763,398],{"class":40},[30,169765,328],{"class":321},[157,169767,169768],{},"读取 JSON 文件：",[20,169770,169772],{"className":30516,"code":169771,"language":30518,"meta":25,"style":25},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[27,169773,169774,169780,169784,169814,169826,169830],{"__ignoreMap":25},[30,169775,169776,169778],{"class":32,"line":33},[30,169777,30530],{"class":317},[30,169779,147229],{"class":321},[30,169781,169782],{"class":32,"line":44},[30,169783,2582],{"emptyLinePlaceholder":245},[30,169785,169786,169788,169790,169792,169794,169796,169798,169800,169802,169804,169806,169808,169810,169812],{"class":32,"line":52},[30,169787,107971],{"class":317},[30,169789,146929],{"class":40},[30,169791,322],{"class":321},[30,169793,151969],{"class":74},[30,169795,12617],{"class":321},[30,169797,146939],{"class":74},[30,169799,12617],{"class":321},[30,169801,146944],{"class":5398},[30,169803,367],{"class":317},[30,169805,146949],{"class":74},[30,169807,13896],{"class":321},[30,169809,31521],{"class":317},[30,169811,148291],{"class":5398},[30,169813,3921],{"class":321},[30,169815,169816,169818,169820,169822,169824],{"class":32,"line":60},[30,169817,153175],{"class":321},[30,169819,367],{"class":317},[30,169821,148302],{"class":321},[30,169823,45492],{"class":5398},[30,169825,328],{"class":321},[30,169827,169828],{"class":32,"line":68},[30,169829,2582],{"emptyLinePlaceholder":245},[30,169831,169832,169834],{"class":32,"line":80},[30,169833,30553],{"class":40},[30,169835,165133],{"class":321},[15,169837,169839],{"id":169838},"_811-csv文件","8.11 CSV文件",[157,169841,169842],{},"CSV 是逗号分隔值，常用于表格数据。",[157,169844,169845],{},"写入 CSV：",[20,169847,169849],{"className":30516,"code":169848,"language":30518,"meta":25,"style":25},"import csv\n\nstudents = [\n    [\"姓名\", \"年龄\", \"成绩\"],\n    [\"小明\", 18, 95],\n    [\"小红\", 17, 88],\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    writer = csv.writer(file)\n    writer.writerows(students)\n",[27,169850,169851,169858,169862,169870,169888,169904,169920,169924,169928,169968,169982],{"__ignoreMap":25},[30,169852,169853,169855],{"class":32,"line":33},[30,169854,30530],{"class":317},[30,169856,169857],{"class":321}," csv\n",[30,169859,169860],{"class":32,"line":44},[30,169861,2582],{"emptyLinePlaceholder":245},[30,169863,169864,169866,169868],{"class":32,"line":52},[30,169865,159854],{"class":321},[30,169867,367],{"class":317},[30,169869,55585],{"class":321},[30,169871,169872,169875,169877,169879,169881,169883,169886],{"class":32,"line":60},[30,169873,169874],{"class":321},"    [",[30,169876,73237],{"class":74},[30,169878,12617],{"class":321},[30,169880,73270],{"class":74},[30,169882,12617],{"class":321},[30,169884,169885],{"class":74},"\"成绩\"",[30,169887,87974],{"class":321},[30,169889,169890,169892,169894,169896,169898,169900,169902],{"class":32,"line":68},[30,169891,169874],{"class":321},[30,169893,150026],{"class":74},[30,169895,12617],{"class":321},[30,169897,970],{"class":40},[30,169899,12617],{"class":321},[30,169901,1309],{"class":40},[30,169903,87974],{"class":321},[30,169905,169906,169908,169910,169912,169914,169916,169918],{"class":32,"line":80},[30,169907,169874],{"class":321},[30,169909,151074],{"class":74},[30,169911,12617],{"class":321},[30,169913,945],{"class":40},[30,169915,12617],{"class":321},[30,169917,1131],{"class":40},[30,169919,87974],{"class":321},[30,169921,169922],{"class":32,"line":88},[30,169923,33384],{"class":321},[30,169925,169926],{"class":32,"line":96},[30,169927,2582],{"emptyLinePlaceholder":245},[30,169929,169930,169932,169934,169936,169939,169941,169943,169945,169947,169949,169951,169953,169956,169958,169960,169962,169964,169966],{"class":32,"line":104},[30,169931,107971],{"class":317},[30,169933,146929],{"class":40},[30,169935,322],{"class":321},[30,169937,169938],{"class":74},"\"students.csv\"",[30,169940,12617],{"class":321},[30,169942,152114],{"class":74},[30,169944,12617],{"class":321},[30,169946,146944],{"class":5398},[30,169948,367],{"class":317},[30,169950,146949],{"class":74},[30,169952,12617],{"class":321},[30,169954,169955],{"class":5398},"newline",[30,169957,367],{"class":317},[30,169959,7834],{"class":74},[30,169961,13896],{"class":321},[30,169963,31521],{"class":317},[30,169965,148291],{"class":5398},[30,169967,3921],{"class":321},[30,169969,169970,169973,169975,169978,169980],{"class":32,"line":112},[30,169971,169972],{"class":321},"    writer ",[30,169974,367],{"class":317},[30,169976,169977],{"class":321}," csv.writer(",[30,169979,45492],{"class":5398},[30,169981,328],{"class":321},[30,169983,169984],{"class":32,"line":123},[30,169985,169986],{"class":321},"    writer.writerows(students)\n",[157,169988,169989],{},"读取 CSV：",[20,169991,169993],{"className":30516,"code":169992,"language":30518,"meta":25,"style":25},"import csv\n\nwith open(\"students.csv\", \"r\", encoding=\"utf-8\") as file:\n    reader = csv.reader(file)\n    for row in reader:\n        print(row)\n",[27,169994,169995,170001,170005,170035,170049,170061],{"__ignoreMap":25},[30,169996,169997,169999],{"class":32,"line":33},[30,169998,30530],{"class":317},[30,170000,169857],{"class":321},[30,170002,170003],{"class":32,"line":44},[30,170004,2582],{"emptyLinePlaceholder":245},[30,170006,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031,170033],{"class":32,"line":52},[30,170008,107971],{"class":317},[30,170010,146929],{"class":40},[30,170012,322],{"class":321},[30,170014,169938],{"class":74},[30,170016,12617],{"class":321},[30,170018,146939],{"class":74},[30,170020,12617],{"class":321},[30,170022,146944],{"class":5398},[30,170024,367],{"class":317},[30,170026,146949],{"class":74},[30,170028,13896],{"class":321},[30,170030,31521],{"class":317},[30,170032,148291],{"class":5398},[30,170034,3921],{"class":321},[30,170036,170037,170040,170042,170045,170047],{"class":32,"line":60},[30,170038,170039],{"class":321},"    reader ",[30,170041,367],{"class":317},[30,170043,170044],{"class":321}," csv.reader(",[30,170046,45492],{"class":5398},[30,170048,328],{"class":321},[30,170050,170051,170053,170056,170058],{"class":32,"line":68},[30,170052,3383],{"class":317},[30,170054,170055],{"class":321}," row ",[30,170057,26181],{"class":317},[30,170059,170060],{"class":321}," reader:\n",[30,170062,170063,170065],{"class":32,"line":80},[30,170064,32589],{"class":40},[30,170066,170067],{"class":321},"(row)\n",[157,170069,170070],{},"使用字典写入：",[20,170072,170074],{"className":30516,"code":170073,"language":30518,"meta":25,"style":25},"import csv\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    fieldnames = [\"name\", \"age\", \"score\"]\n    writer = csv.DictWriter(file, fieldnames=fieldnames)\n    writer.writeheader()\n    writer.writerows(students)\n",[27,170075,170076,170082,170086,170094,170122,170150,170154,170158,170196,170217,170238,170243],{"__ignoreMap":25},[30,170077,170078,170080],{"class":32,"line":33},[30,170079,30530],{"class":317},[30,170081,169857],{"class":321},[30,170083,170084],{"class":32,"line":44},[30,170085,2582],{"emptyLinePlaceholder":245},[30,170087,170088,170090,170092],{"class":32,"line":52},[30,170089,159854],{"class":321},[30,170091,367],{"class":317},[30,170093,55585],{"class":321},[30,170095,170096,170098,170100,170102,170104,170106,170108,170110,170112,170114,170116,170118,170120],{"class":32,"line":60},[30,170097,148523],{"class":321},[30,170099,62817],{"class":74},[30,170101,51575],{"class":321},[30,170103,150026],{"class":74},[30,170105,12617],{"class":321},[30,170107,69262],{"class":74},[30,170109,51575],{"class":321},[30,170111,970],{"class":40},[30,170113,12617],{"class":321},[30,170115,151610],{"class":74},[30,170117,51575],{"class":321},[30,170119,1309],{"class":40},[30,170121,5112],{"class":321},[30,170123,170124,170126,170128,170130,170132,170134,170136,170138,170140,170142,170144,170146,170148],{"class":32,"line":68},[30,170125,148523],{"class":321},[30,170127,62817],{"class":74},[30,170129,51575],{"class":321},[30,170131,151074],{"class":74},[30,170133,12617],{"class":321},[30,170135,69262],{"class":74},[30,170137,51575],{"class":321},[30,170139,945],{"class":40},[30,170141,12617],{"class":321},[30,170143,151610],{"class":74},[30,170145,51575],{"class":321},[30,170147,1131],{"class":40},[30,170149,5112],{"class":321},[30,170151,170152],{"class":32,"line":80},[30,170153,33384],{"class":321},[30,170155,170156],{"class":32,"line":88},[30,170157,2582],{"emptyLinePlaceholder":245},[30,170159,170160,170162,170164,170166,170168,170170,170172,170174,170176,170178,170180,170182,170184,170186,170188,170190,170192,170194],{"class":32,"line":96},[30,170161,107971],{"class":317},[30,170163,146929],{"class":40},[30,170165,322],{"class":321},[30,170167,169938],{"class":74},[30,170169,12617],{"class":321},[30,170171,152114],{"class":74},[30,170173,12617],{"class":321},[30,170175,146944],{"class":5398},[30,170177,367],{"class":317},[30,170179,146949],{"class":74},[30,170181,12617],{"class":321},[30,170183,169955],{"class":5398},[30,170185,367],{"class":317},[30,170187,7834],{"class":74},[30,170189,13896],{"class":321},[30,170191,31521],{"class":317},[30,170193,148291],{"class":5398},[30,170195,3921],{"class":321},[30,170197,170198,170201,170203,170205,170207,170209,170211,170213,170215],{"class":32,"line":104},[30,170199,170200],{"class":321},"    fieldnames ",[30,170202,367],{"class":317},[30,170204,52364],{"class":321},[30,170206,62817],{"class":74},[30,170208,12617],{"class":321},[30,170210,69262],{"class":74},[30,170212,12617],{"class":321},[30,170214,151610],{"class":74},[30,170216,33384],{"class":321},[30,170218,170219,170221,170223,170226,170228,170230,170233,170235],{"class":32,"line":112},[30,170220,169972],{"class":321},[30,170222,367],{"class":317},[30,170224,170225],{"class":321}," csv.DictWriter(",[30,170227,45492],{"class":5398},[30,170229,12617],{"class":321},[30,170231,170232],{"class":5398},"fieldnames",[30,170234,367],{"class":317},[30,170236,170237],{"class":321},"fieldnames)\n",[30,170239,170240],{"class":32,"line":123},[30,170241,170242],{"class":321},"    writer.writeheader()\n",[30,170244,170245],{"class":32,"line":131},[30,170246,169986],{"class":321},[15,170248,170250],{"id":170249},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[157,170252,123430],{},[271,170254,170255,170258,170261],{},[150,170256,170257],{},"读取文本文件。",[150,170259,170260],{},"统计每个单词出现次数。",[150,170262,170263],{},"输出出现次数最多的前 10 个单词。",[157,170265,10217],{},[20,170267,170269],{"className":30516,"code":170268,"language":30518,"meta":25,"style":25},"from pathlib import Path\n\npath = Path(\"article.txt\")\ncontent = path.read_text(encoding=\"utf-8\")\n\nwords = content.lower().split()\ncounter = {}\n\nfor word in words:\n    word = word.strip(\".,!?;:\\\"'()[]\")\n    if not word:\n        continue\n    counter[word] = counter.get(word, 0) + 1\n\nitems = sorted(counter.items(), key=lambda item: item[1], reverse=True)\n\nfor word, count in items[:10]:\n    print(word, count)\n",[27,170270,170271,170281,170285,170298,170314,170318,170328,170337,170341,170353,170373,170382,170386,170404,170408,170438,170442,170458],{"__ignoreMap":25},[30,170272,170273,170275,170277,170279],{"class":32,"line":33},[30,170274,30875],{"class":317},[30,170276,108449],{"class":321},[30,170278,30530],{"class":317},[30,170280,108454],{"class":321},[30,170282,170283],{"class":32,"line":44},[30,170284,2582],{"emptyLinePlaceholder":245},[30,170286,170287,170289,170291,170293,170296],{"class":32,"line":52},[30,170288,168449],{"class":321},[30,170290,367],{"class":317},[30,170292,108683],{"class":321},[30,170294,170295],{"class":74},"\"article.txt\"",[30,170297,328],{"class":321},[30,170299,170300,170302,170304,170306,170308,170310,170312],{"class":32,"line":60},[30,170301,168632],{"class":321},[30,170303,367],{"class":317},[30,170305,169509],{"class":321},[30,170307,146944],{"class":5398},[30,170309,367],{"class":317},[30,170311,146949],{"class":74},[30,170313,328],{"class":321},[30,170315,170316],{"class":32,"line":68},[30,170317,2582],{"emptyLinePlaceholder":245},[30,170319,170320,170323,170325],{"class":32,"line":80},[30,170321,170322],{"class":321},"words ",[30,170324,367],{"class":317},[30,170326,170327],{"class":321}," content.lower().split()\n",[30,170329,170330,170333,170335],{"class":32,"line":88},[30,170331,170332],{"class":321},"counter ",[30,170334,367],{"class":317},[30,170336,88006],{"class":321},[30,170338,170339],{"class":32,"line":96},[30,170340,2582],{"emptyLinePlaceholder":245},[30,170342,170343,170345,170348,170350],{"class":32,"line":104},[30,170344,3207],{"class":317},[30,170346,170347],{"class":321}," word ",[30,170349,26181],{"class":317},[30,170351,170352],{"class":321}," words:\n",[30,170354,170355,170358,170360,170363,170366,170368,170371],{"class":32,"line":112},[30,170356,170357],{"class":321},"    word ",[30,170359,367],{"class":317},[30,170361,170362],{"class":321}," word.strip(",[30,170364,170365],{"class":74},"\".,!?;:",[30,170367,156633],{"class":40},[30,170369,170370],{"class":74},"'()[]\"",[30,170372,328],{"class":321},[30,170374,170375,170377,170379],{"class":32,"line":123},[30,170376,3283],{"class":317},[30,170378,39068],{"class":317},[30,170380,170381],{"class":321}," word:\n",[30,170383,170384],{"class":32,"line":131},[30,170385,148650],{"class":317},[30,170387,170388,170391,170393,170396,170398,170400,170402],{"class":32,"line":142},[30,170389,170390],{"class":321},"    counter[word] ",[30,170392,367],{"class":317},[30,170394,170395],{"class":321}," counter.get(word, ",[30,170397,511],{"class":40},[30,170399,13896],{"class":321},[30,170401,801],{"class":317},[30,170403,55837],{"class":40},[30,170405,170406],{"class":32,"line":1811},[30,170407,2582],{"emptyLinePlaceholder":245},[30,170409,170410,170413,170415,170417,170420,170422,170424,170426,170428,170430,170432,170434,170436],{"class":32,"line":1825},[30,170411,170412],{"class":321},"items ",[30,170414,367],{"class":317},[30,170416,163742],{"class":40},[30,170418,170419],{"class":321},"(counter.items(), ",[30,170421,154084],{"class":5398},[30,170423,154087],{"class":317},[30,170425,154090],{"class":321},[30,170427,537],{"class":40},[30,170429,112340],{"class":321},[30,170431,163666],{"class":5398},[30,170433,367],{"class":317},[30,170435,31614],{"class":40},[30,170437,328],{"class":321},[30,170439,170440],{"class":32,"line":1830},[30,170441,2582],{"emptyLinePlaceholder":245},[30,170443,170444,170446,170449,170451,170454,170456],{"class":32,"line":1836},[30,170445,3207],{"class":317},[30,170447,170448],{"class":321}," word, count ",[30,170450,26181],{"class":317},[30,170452,170453],{"class":321}," items[:",[30,170455,766],{"class":40},[30,170457,165893],{"class":321},[30,170459,170460,170462],{"class":32,"line":1857},[30,170461,31437],{"class":40},[30,170463,170464],{"class":321},"(word, count)\n",[15,170466,170468],{"id":170467},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[20,170470,170472],{"className":30516,"code":170471,"language":30518,"meta":25,"style":25},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\nstudents = load_students()\nstudents.append({\"name\": \"小明\", \"age\": 18, \"score\": 95})\nsave_students(students)\nprint(\"保存成功\")\n",[27,170473,170474,170480,170490,170494,170506,170510,170514,170522,170532,170538,170542,170572,170582,170586,170590,170598,170628,170652,170656,170660,170668,170697,170702],{"__ignoreMap":25},[30,170475,170476,170478],{"class":32,"line":33},[30,170477,30530],{"class":317},[30,170479,147229],{"class":321},[30,170481,170482,170484,170486,170488],{"class":32,"line":44},[30,170483,30875],{"class":317},[30,170485,108449],{"class":321},[30,170487,30530],{"class":317},[30,170489,108454],{"class":321},[30,170491,170492],{"class":32,"line":52},[30,170493,2582],{"emptyLinePlaceholder":245},[30,170495,170496,170498,170500,170502,170504],{"class":32,"line":60},[30,170497,151962],{"class":40},[30,170499,13746],{"class":317},[30,170501,108683],{"class":321},[30,170503,151969],{"class":74},[30,170505,328],{"class":321},[30,170507,170508],{"class":32,"line":68},[30,170509,2582],{"emptyLinePlaceholder":245},[30,170511,170512],{"class":32,"line":80},[30,170513,2582],{"emptyLinePlaceholder":245},[30,170515,170516,170518,170520],{"class":32,"line":88},[30,170517,32085],{"class":317},[30,170519,151986],{"class":36},[30,170521,32091],{"class":321},[30,170523,170524,170526,170528,170530],{"class":32,"line":96},[30,170525,3283],{"class":317},[30,170527,39068],{"class":317},[30,170529,151997],{"class":40},[30,170531,152000],{"class":321},[30,170533,170534,170536],{"class":32,"line":104},[30,170535,14934],{"class":317},[30,170537,51976],{"class":321},[30,170539,170540],{"class":32,"line":112},[30,170541,2582],{"emptyLinePlaceholder":245},[30,170543,170544,170546,170548,170550,170552,170554,170556,170558,170560,170562,170564,170566,170568,170570],{"class":32,"line":123},[30,170545,34316],{"class":317},[30,170547,146929],{"class":40},[30,170549,322],{"class":321},[30,170551,151962],{"class":40},[30,170553,12617],{"class":321},[30,170555,146939],{"class":74},[30,170557,12617],{"class":321},[30,170559,146944],{"class":5398},[30,170561,367],{"class":317},[30,170563,146949],{"class":74},[30,170565,13896],{"class":321},[30,170567,31521],{"class":317},[30,170569,148291],{"class":5398},[30,170571,3921],{"class":321},[30,170573,170574,170576,170578,170580],{"class":32,"line":131},[30,170575,14934],{"class":317},[30,170577,148302],{"class":321},[30,170579,45492],{"class":5398},[30,170581,328],{"class":321},[30,170583,170584],{"class":32,"line":142},[30,170585,2582],{"emptyLinePlaceholder":245},[30,170587,170588],{"class":32,"line":1811},[30,170589,2582],{"emptyLinePlaceholder":245},[30,170591,170592,170594,170596],{"class":32,"line":1825},[30,170593,32085],{"class":317},[30,170595,152096],{"class":36},[30,170597,152099],{"class":321},[30,170599,170600,170602,170604,170606,170608,170610,170612,170614,170616,170618,170620,170622,170624,170626],{"class":32,"line":1830},[30,170601,34316],{"class":317},[30,170603,146929],{"class":40},[30,170605,322],{"class":321},[30,170607,151962],{"class":40},[30,170609,12617],{"class":321},[30,170611,152114],{"class":74},[30,170613,12617],{"class":321},[30,170615,146944],{"class":5398},[30,170617,367],{"class":317},[30,170619,146949],{"class":74},[30,170621,13896],{"class":321},[30,170623,31521],{"class":317},[30,170625,148291],{"class":5398},[30,170627,3921],{"class":321},[30,170629,170630,170632,170634,170636,170638,170640,170642,170644,170646,170648,170650],{"class":32,"line":1836},[30,170631,152135],{"class":321},[30,170633,45492],{"class":5398},[30,170635,12617],{"class":321},[30,170637,147275],{"class":5398},[30,170639,367],{"class":317},[30,170641,34125],{"class":40},[30,170643,12617],{"class":321},[30,170645,152150],{"class":5398},[30,170647,367],{"class":317},[30,170649,398],{"class":40},[30,170651,328],{"class":321},[30,170653,170654],{"class":32,"line":1857},[30,170655,2582],{"emptyLinePlaceholder":245},[30,170657,170658],{"class":32,"line":1862},[30,170659,2582],{"emptyLinePlaceholder":245},[30,170661,170662,170664,170666],{"class":32,"line":1876},[30,170663,159854],{"class":321},[30,170665,367],{"class":317},[30,170667,153180],{"class":321},[30,170669,170670,170673,170675,170677,170679,170681,170683,170685,170687,170689,170691,170693,170695],{"class":32,"line":1881},[30,170671,170672],{"class":321},"students.append({",[30,170674,62817],{"class":74},[30,170676,51575],{"class":321},[30,170678,150026],{"class":74},[30,170680,12617],{"class":321},[30,170682,69262],{"class":74},[30,170684,51575],{"class":321},[30,170686,970],{"class":40},[30,170688,12617],{"class":321},[30,170690,151610],{"class":74},[30,170692,51575],{"class":321},[30,170694,1309],{"class":40},[30,170696,165290],{"class":321},[30,170698,170699],{"class":32,"line":1910},[30,170700,170701],{"class":321},"save_students(students)\n",[30,170703,170704,170706,170708,170711],{"class":32,"line":1915},[30,170705,30553],{"class":40},[30,170707,322],{"class":321},[30,170709,170710],{"class":74},"\"保存成功\"",[30,170712,328],{"class":321},[15,170714,170716],{"id":170715},"_814-易错点","8.14 易错点",[271,170718,170719,170723,170729,170734,170741,170748],{},[150,170720,170721,168982],{},[27,170722,1115],{},[150,170724,170725,170726,28523],{},"读写中文要指定 ",[27,170727,170728],{},"encoding=\"utf-8\"",[150,170730,170731,170732,28523],{},"打开文件后要关闭，推荐使用 ",[27,170733,107971],{},[150,170735,170736,170737,170740],{},"读取大文件不要直接 ",[27,170738,170739],{},"read()"," 全部内容。",[150,170742,170743,170744,170747],{},"Windows 写 CSV 时建议加 ",[27,170745,170746],{},"newline=\"\"","，避免空行。",[150,170749,170750],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[15,170752,170754],{"id":170753},"_815-本章练习","8.15 本章练习",[271,170756,170757,170764,170769,170772,170775],{},[150,170758,170759,170760,170763],{},"写入一个 ",[27,170761,170762],{},"students.txt","，每行保存一个学生姓名。",[150,170765,104493,170766,170768],{},[27,170767,170762],{}," 并输出所有学生。",[150,170770,170771],{},"把学生列表保存为 JSON 文件。",[150,170773,170774],{},"从 JSON 文件读取学生数据，计算平均分。",[150,170776,170777,170778,170781,170782,170785],{},"写一个日志函数 ",[27,170779,170780],{},"write_log(message)","，每次调用向 ",[27,170783,170784],{},"app.log"," 追加一行。",[234,170787,170788],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":25,"searchDepth":44,"depth":44,"links":170790},[170791,170792,170796,170797,170803,170804,170805,170806,170807,170808,170809,170810,170811,170812,170813],{"id":168302,"depth":44,"text":168303},{"id":168343,"depth":44,"text":168344,"children":170793},[170794,170795],{"id":168347,"depth":52,"text":168348},{"id":168381,"depth":52,"text":168382},{"id":168495,"depth":44,"text":168496},{"id":168588,"depth":44,"text":168589,"children":170798},[170799,170800,170801,170802],{"id":168592,"depth":52,"text":168593},{"id":168679,"depth":52,"text":168680},{"id":168749,"depth":52,"text":168750},{"id":168843,"depth":52,"text":168844},{"id":168913,"depth":44,"text":168914},{"id":168976,"depth":44,"text":168977},{"id":169137,"depth":44,"text":169138},{"id":169200,"depth":44,"text":169201},{"id":169316,"depth":44,"text":169317},{"id":169526,"depth":44,"text":169527},{"id":169838,"depth":44,"text":169839},{"id":170249,"depth":44,"text":170250},{"id":170467,"depth":44,"text":170468},{"id":170715,"depth":44,"text":170716},{"id":170753,"depth":44,"text":170754},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168294,"description":242},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170820,"title":170821,"body":170822,"description":242,"extension":243,"meta":173008,"navigation":245,"path":173009,"seo":173010,"stem":173011,"__hash__":173012},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170823,"toc":172975},[170824,170827,170831,170834,170837,170929,170931,170950,170955,170959,170962,170965,170994,171001,171004,171008,171011,171040,171042,171094,171100,171153,171157,171255,171258,171325,171329,171386,171388,171394,171398,171403,171409,171500,171505,171509,171512,171590,171593,171631,171635,171753,171756,171760,171763,171808,171811,171815,171820,171826,171876,171879,171910,171914,171918,171948,171952,171987,171991,172026,172066,172070,172086,172089,172093,172097,172176,172180,172221,172225,172280,172284,172318,172322,172352,172361,172368,172374,172431,172434,172442,172445,172449,172456,172459,172465,172468,172485,172490,172494,172500,172513,172516,172553,172556,172567,172570,172584,172587,172601,172605,172612,172645,172648,172650,172656,172659,172663,172665,172671,172676,172849,172853,172916,172920,172944,172948,172972],[10,170825,170821],{"id":170826},"_9-异常模块与包",[15,170828,170830],{"id":170829},"_91-什么是异常","9.1 什么是异常",[157,170832,170833],{},"异常是程序运行过程中出现的错误。",[157,170835,170836],{},"常见异常：",[457,170838,170839,170848],{},[460,170840,170841],{},[463,170842,170843,170846],{},[466,170844,170845],{},"异常",[466,170847,26007],{},[504,170849,170850,170860,170870,170879,170889,170899,170909,170919],{},[463,170851,170852,170857],{},[509,170853,170854],{},[27,170855,170856],{},"NameError",[509,170858,170859],{},"使用了未定义变量",[463,170861,170862,170867],{},[509,170863,170864],{},[27,170865,170866],{},"TypeError",[509,170868,170869],{},"类型不匹配",[463,170871,170872,170876],{},[509,170873,170874],{},[27,170875,154972],{},[509,170877,170878],{},"值不合法",[463,170880,170881,170886],{},[509,170882,170883],{},[27,170884,170885],{},"IndexError",[509,170887,170888],{},"列表索引越界",[463,170890,170891,170896],{},[509,170892,170893],{},[27,170894,170895],{},"KeyError",[509,170897,170898],{},"字典 key 不存在",[463,170900,170901,170906],{},[509,170902,170903],{},[27,170904,170905],{},"FileNotFoundError",[509,170907,170908],{},"文件不存在",[463,170910,170911,170916],{},[509,170912,170913],{},[27,170914,170915],{},"ZeroDivisionError",[509,170917,170918],{},"除数为 0",[463,170920,170921,170926],{},[509,170922,170923],{},[27,170924,170925],{},"ImportError",[509,170927,170928],{},"导入失败",[157,170930,15317],{},[20,170932,170934],{"className":30516,"code":170933,"language":30518,"meta":25,"style":25},"num = int(\"abc\")\n",[27,170935,170936],{"__ignoreMap":25},[30,170937,170938,170940,170942,170944,170946,170948],{"class":32,"line":33},[30,170939,155925],{"class":321},[30,170941,367],{"class":317},[30,170943,2564],{"class":40},[30,170945,322],{"class":321},[30,170947,156018],{"class":74},[30,170949,328],{"class":321},[157,170951,170952,170953,28523],{},"会触发 ",[27,170954,154972],{},[15,170956,170958],{"id":170957},"_92-为什么要处理异常","9.2 为什么要处理异常",[157,170960,170961],{},"如果不处理异常，程序会直接终止。",[157,170963,170964],{},"例如用户输入年龄：",[20,170966,170968],{"className":30516,"code":170967,"language":30518,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[27,170969,170970,170988],{"__ignoreMap":25},[30,170971,170972,170974,170976,170978,170980,170982,170984,170986],{"class":32,"line":33},[30,170973,146684],{"class":321},[30,170975,367],{"class":317},[30,170977,2564],{"class":40},[30,170979,322],{"class":321},[30,170981,53959],{"class":40},[30,170983,322],{"class":321},[30,170985,152532],{"class":74},[30,170987,30635],{"class":321},[30,170989,170990,170992],{"class":32,"line":44},[30,170991,30553],{"class":40},[30,170993,155899],{"class":321},[157,170995,170996,170997,171000],{},"用户输入 ",[27,170998,170999],{},"abc","，程序就会报错退出。",[157,171002,171003],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[15,171005,171007],{"id":171006},"_93-try-except","9.3 try except",[157,171009,171010],{},"基础语法：",[20,171012,171014],{"className":30516,"code":171013,"language":30518,"meta":25,"style":25},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[27,171015,171016,171023,171028,171035],{"__ignoreMap":25},[30,171017,171018,171021],{"class":32,"line":33},[30,171019,171020],{"class":317},"try",[30,171022,3921],{"class":321},[30,171024,171025],{"class":32,"line":44},[30,171026,171027],{"class":321},"    可能出错的代码\n",[30,171029,171030,171033],{"class":32,"line":52},[30,171031,171032],{"class":317},"except",[30,171034,3921],{"class":321},[30,171036,171037],{"class":32,"line":60},[30,171038,171039],{"class":321},"    出错后的处理代码\n",[157,171041,15317],{},[20,171043,171045],{"className":30516,"code":171044,"language":30518,"meta":25,"style":25},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[27,171046,171047,171053,171071,171077,171083],{"__ignoreMap":25},[30,171048,171049,171051],{"class":32,"line":33},[30,171050,171020],{"class":317},[30,171052,3921],{"class":321},[30,171054,171055,171057,171059,171061,171063,171065,171067,171069],{"class":32,"line":44},[30,171056,152524],{"class":321},[30,171058,367],{"class":317},[30,171060,2564],{"class":40},[30,171062,322],{"class":321},[30,171064,53959],{"class":40},[30,171066,322],{"class":321},[30,171068,152532],{"class":74},[30,171070,30635],{"class":321},[30,171072,171073,171075],{"class":32,"line":52},[30,171074,31437],{"class":40},[30,171076,155899],{"class":321},[30,171078,171079,171081],{"class":32,"line":60},[30,171080,171032],{"class":317},[30,171082,3921],{"class":321},[30,171084,171085,171087,171089,171092],{"class":32,"line":68},[30,171086,31437],{"class":40},[30,171088,322],{"class":321},[30,171090,171091],{"class":74},"\"年龄必须是数字\"",[30,171093,328],{"class":321},[157,171095,171096,171097,171099],{},"不建议裸写 ",[27,171098,171032],{},"，最好指定异常类型。",[20,171101,171103],{"className":30516,"code":171102,"language":30518,"meta":25,"style":25},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[27,171104,171105,171111,171129,171135,171143],{"__ignoreMap":25},[30,171106,171107,171109],{"class":32,"line":33},[30,171108,171020],{"class":317},[30,171110,3921],{"class":321},[30,171112,171113,171115,171117,171119,171121,171123,171125,171127],{"class":32,"line":44},[30,171114,152524],{"class":321},[30,171116,367],{"class":317},[30,171118,2564],{"class":40},[30,171120,322],{"class":321},[30,171122,53959],{"class":40},[30,171124,322],{"class":321},[30,171126,152532],{"class":74},[30,171128,30635],{"class":321},[30,171130,171131,171133],{"class":32,"line":52},[30,171132,31437],{"class":40},[30,171134,155899],{"class":321},[30,171136,171137,171139,171141],{"class":32,"line":60},[30,171138,171032],{"class":317},[30,171140,152364],{"class":40},[30,171142,3921],{"class":321},[30,171144,171145,171147,171149,171151],{"class":32,"line":68},[30,171146,31437],{"class":40},[30,171148,322],{"class":321},[30,171150,171091],{"class":74},[30,171152,328],{"class":321},[15,171154,171156],{"id":171155},"_94-捕获多个异常","9.4 捕获多个异常",[20,171158,171160],{"className":30516,"code":171159,"language":30518,"meta":25,"style":25},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[27,171161,171162,171168,171189,171209,171216,171224,171235,171244],{"__ignoreMap":25},[30,171163,171164,171166],{"class":32,"line":33},[30,171165,171020],{"class":317},[30,171167,3921],{"class":321},[30,171169,171170,171173,171175,171177,171179,171181,171183,171185,171187],{"class":32,"line":44},[30,171171,171172],{"class":321},"    nums ",[30,171174,367],{"class":317},[30,171176,52364],{"class":321},[30,171178,537],{"class":40},[30,171180,12617],{"class":321},[30,171182,398],{"class":40},[30,171184,12617],{"class":321},[30,171186,392],{"class":40},[30,171188,33384],{"class":321},[30,171190,171191,171194,171196,171198,171200,171202,171204,171207],{"class":32,"line":52},[30,171192,171193],{"class":321},"    index ",[30,171195,367],{"class":317},[30,171197,2564],{"class":40},[30,171199,322],{"class":321},[30,171201,53959],{"class":40},[30,171203,322],{"class":321},[30,171205,171206],{"class":74},"\"请输入索引:\"",[30,171208,30635],{"class":321},[30,171210,171211,171213],{"class":32,"line":60},[30,171212,31437],{"class":40},[30,171214,171215],{"class":321},"(nums[index])\n",[30,171217,171218,171220,171222],{"class":32,"line":68},[30,171219,171032],{"class":317},[30,171221,152364],{"class":40},[30,171223,3921],{"class":321},[30,171225,171226,171228,171230,171233],{"class":32,"line":80},[30,171227,31437],{"class":40},[30,171229,322],{"class":321},[30,171231,171232],{"class":74},"\"索引必须是整数\"",[30,171234,328],{"class":321},[30,171236,171237,171239,171242],{"class":32,"line":88},[30,171238,171032],{"class":317},[30,171240,171241],{"class":40}," IndexError",[30,171243,3921],{"class":321},[30,171245,171246,171248,171250,171253],{"class":32,"line":96},[30,171247,31437],{"class":40},[30,171249,322],{"class":321},[30,171251,171252],{"class":74},"\"索引越界\"",[30,171254,328],{"class":321},[157,171256,171257],{},"多个异常使用相同处理逻辑：",[20,171259,171261],{"className":30516,"code":171260,"language":30518,"meta":25,"style":25},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[27,171262,171263,171269,171287,171300,171314],{"__ignoreMap":25},[30,171264,171265,171267],{"class":32,"line":33},[30,171266,171020],{"class":317},[30,171268,3921],{"class":321},[30,171270,171271,171273,171275,171277,171279,171281,171283,171285],{"class":32,"line":44},[30,171272,45731],{"class":321},[30,171274,367],{"class":317},[30,171276,2564],{"class":40},[30,171278,322],{"class":321},[30,171280,53959],{"class":40},[30,171282,322],{"class":321},[30,171284,155934],{"class":74},[30,171286,30635],{"class":321},[30,171288,171289,171291,171293,171295,171297],{"class":32,"line":52},[30,171290,31437],{"class":40},[30,171292,322],{"class":321},[30,171294,766],{"class":40},[30,171296,156184],{"class":317},[30,171298,171299],{"class":321}," num)\n",[30,171301,171302,171304,171306,171308,171310,171312],{"class":32,"line":60},[30,171303,171032],{"class":317},[30,171305,1841],{"class":321},[30,171307,154972],{"class":40},[30,171309,12617],{"class":321},[30,171311,170915],{"class":40},[30,171313,30924],{"class":321},[30,171315,171316,171318,171320,171323],{"class":32,"line":68},[30,171317,31437],{"class":40},[30,171319,322],{"class":321},[30,171321,171322],{"class":74},"\"输入不合法\"",[30,171324,328],{"class":321},[15,171326,171328],{"id":171327},"_95-获取异常信息","9.5 获取异常信息",[20,171330,171332],{"className":30516,"code":171331,"language":30518,"meta":25,"style":25},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[27,171333,171334,171340,171354,171365],{"__ignoreMap":25},[30,171335,171336,171338],{"class":32,"line":33},[30,171337,171020],{"class":317},[30,171339,3921],{"class":321},[30,171341,171342,171344,171346,171348,171350,171352],{"class":32,"line":44},[30,171343,45731],{"class":321},[30,171345,367],{"class":317},[30,171347,2564],{"class":40},[30,171349,322],{"class":321},[30,171351,156018],{"class":74},[30,171353,328],{"class":321},[30,171355,171356,171358,171360,171362],{"class":32,"line":52},[30,171357,171032],{"class":317},[30,171359,152364],{"class":40},[30,171361,64742],{"class":317},[30,171363,171364],{"class":321}," e:\n",[30,171366,171367,171369,171371,171373,171376,171378,171380,171382,171384],{"class":32,"line":60},[30,171368,31437],{"class":40},[30,171370,322],{"class":321},[30,171372,373],{"class":317},[30,171374,171375],{"class":74},"\"出错了:",[30,171377,1216],{"class":40},[30,171379,395],{"class":321},[30,171381,1266],{"class":40},[30,171383,571],{"class":74},[30,171385,328],{"class":321},[157,171387,146595],{},[20,171389,171392],{"className":171390,"code":171391,"language":5369,"meta":25},[5367],"出错了:invalid literal for int() with base 10: 'abc'\n",[27,171393,171391],{"__ignoreMap":25},[15,171395,171397],{"id":171396},"_96-else和finally","9.6 else和finally",[157,171399,171400,171402],{},[27,171401,1884],{},"：没有异常时执行。",[157,171404,171405,171408],{},[27,171406,171407],{},"finally","：无论是否异常都会执行。",[20,171410,171412],{"className":30516,"code":171411,"language":30518,"meta":25,"style":25},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[27,171413,171414,171420,171438,171446,171456,171462,171483,171489],{"__ignoreMap":25},[30,171415,171416,171418],{"class":32,"line":33},[30,171417,171020],{"class":317},[30,171419,3921],{"class":321},[30,171421,171422,171424,171426,171428,171430,171432,171434,171436],{"class":32,"line":44},[30,171423,45731],{"class":321},[30,171425,367],{"class":317},[30,171427,2564],{"class":40},[30,171429,322],{"class":321},[30,171431,53959],{"class":40},[30,171433,322],{"class":321},[30,171435,155934],{"class":74},[30,171437,30635],{"class":321},[30,171439,171440,171442,171444],{"class":32,"line":52},[30,171441,171032],{"class":317},[30,171443,152364],{"class":40},[30,171445,3921],{"class":321},[30,171447,171448,171450,171452,171454],{"class":32,"line":60},[30,171449,31437],{"class":40},[30,171451,322],{"class":321},[30,171453,153352],{"class":74},[30,171455,328],{"class":321},[30,171457,171458,171460],{"class":32,"line":68},[30,171459,1884],{"class":317},[30,171461,3921],{"class":321},[30,171463,171464,171466,171468,171470,171473,171475,171477,171479,171481],{"class":32,"line":80},[30,171465,31437],{"class":40},[30,171467,322],{"class":321},[30,171469,373],{"class":317},[30,171471,171472],{"class":74},"\"输入正确:",[30,171474,1216],{"class":40},[30,171476,1848],{"class":321},[30,171478,1266],{"class":40},[30,171480,571],{"class":74},[30,171482,328],{"class":321},[30,171484,171485,171487],{"class":32,"line":88},[30,171486,171407],{"class":317},[30,171488,3921],{"class":321},[30,171490,171491,171493,171495,171498],{"class":32,"line":96},[30,171492,31437],{"class":40},[30,171494,322],{"class":321},[30,171496,171497],{"class":74},"\"程序结束\"",[30,171499,328],{"class":321},[157,171501,171502,171504],{},[27,171503,171407],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[15,171506,171508],{"id":171507},"_97-抛出异常","9.7 抛出异常",[157,171510,171511],{},"程序可以主动抛出异常。",[20,171513,171515],{"className":30516,"code":171514,"language":30518,"meta":25,"style":25},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[27,171516,171517,171526,171538,171551,171571,171575,171579],{"__ignoreMap":25},[30,171518,171519,171521,171524],{"class":32,"line":33},[30,171520,32085],{"class":317},[30,171522,171523],{"class":36}," set_age",[30,171525,161553],{"class":321},[30,171527,171528,171530,171532,171534,171536],{"class":32,"line":44},[30,171529,3283],{"class":317},[30,171531,15889],{"class":321},[30,171533,1230],{"class":317},[30,171535,4275],{"class":40},[30,171537,3921],{"class":321},[30,171539,171540,171542,171544,171546,171549],{"class":32,"line":52},[30,171541,103570],{"class":317},[30,171543,152364],{"class":40},[30,171545,322],{"class":321},[30,171547,171548],{"class":74},"\"年龄不能为负数\"",[30,171550,328],{"class":321},[30,171552,171553,171555,171557,171559,171561,171563,171565,171567,171569],{"class":32,"line":60},[30,171554,31437],{"class":40},[30,171556,322],{"class":321},[30,171558,373],{"class":317},[30,171560,162121],{"class":74},[30,171562,1216],{"class":40},[30,171564,70359],{"class":321},[30,171566,1266],{"class":40},[30,171568,571],{"class":74},[30,171570,328],{"class":321},[30,171572,171573],{"class":32,"line":68},[30,171574,2582],{"emptyLinePlaceholder":245},[30,171576,171577],{"class":32,"line":80},[30,171578,2582],{"emptyLinePlaceholder":245},[30,171580,171581,171584,171586,171588],{"class":32,"line":88},[30,171582,171583],{"class":321},"set_age(",[30,171585,852],{"class":317},[30,171587,537],{"class":40},[30,171589,328],{"class":321},[157,171591,171592],{},"调用者可以捕获：",[20,171594,171596],{"className":30516,"code":171595,"language":30518,"meta":25,"style":25},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[27,171597,171598,171604,171615,171625],{"__ignoreMap":25},[30,171599,171600,171602],{"class":32,"line":33},[30,171601,171020],{"class":317},[30,171603,3921],{"class":321},[30,171605,171606,171609,171611,171613],{"class":32,"line":44},[30,171607,171608],{"class":321},"    set_age(",[30,171610,852],{"class":317},[30,171612,537],{"class":40},[30,171614,328],{"class":321},[30,171616,171617,171619,171621,171623],{"class":32,"line":52},[30,171618,171032],{"class":317},[30,171620,152364],{"class":40},[30,171622,64742],{"class":317},[30,171624,171364],{"class":321},[30,171626,171627,171629],{"class":32,"line":60},[30,171628,31437],{"class":40},[30,171630,67137],{"class":321},[15,171632,171634],{"id":171633},"_98-自定义异常","9.8 自定义异常",[20,171636,171638],{"className":30516,"code":171637,"language":30518,"meta":25,"style":25},"class BalanceNotEnoughError(Exception):\n    pass\n\n\ndef withdraw(balance, money):\n    if money > balance:\n        raise BalanceNotEnoughError(\"余额不足\")\n    return balance - money\n\n\ntry:\n    balance = withdraw(100, 200)\nexcept BalanceNotEnoughError as e:\n    print(e)\n",[27,171639,171640,171654,171658,171662,171666,171674,171684,171695,171705,171709,171713,171719,171736,171747],{"__ignoreMap":25},[30,171641,171642,171644,171647,171649,171652],{"class":32,"line":33},[30,171643,14876],{"class":317},[30,171645,171646],{"class":36}," BalanceNotEnoughError",[30,171648,322],{"class":321},[30,171650,171651],{"class":40},"Exception",[30,171653,30924],{"class":321},[30,171655,171656],{"class":32,"line":44},[30,171657,149675],{"class":317},[30,171659,171660],{"class":32,"line":52},[30,171661,2582],{"emptyLinePlaceholder":245},[30,171663,171664],{"class":32,"line":60},[30,171665,2582],{"emptyLinePlaceholder":245},[30,171667,171668,171670,171672],{"class":32,"line":68},[30,171669,32085],{"class":317},[30,171671,150324],{"class":36},[30,171673,162950],{"class":321},[30,171675,171676,171678,171680,171682],{"class":32,"line":80},[30,171677,3283],{"class":317},[30,171679,150280],{"class":321},[30,171681,1280],{"class":317},[30,171683,162727],{"class":321},[30,171685,171686,171688,171691,171693],{"class":32,"line":88},[30,171687,103570],{"class":317},[30,171689,171690],{"class":321}," BalanceNotEnoughError(",[30,171692,150375],{"class":74},[30,171694,328],{"class":321},[30,171696,171697,171699,171701,171703],{"class":32,"line":96},[30,171698,4272],{"class":317},[30,171700,162957],{"class":321},[30,171702,852],{"class":317},[30,171704,150313],{"class":321},[30,171706,171707],{"class":32,"line":104},[30,171708,2582],{"emptyLinePlaceholder":245},[30,171710,171711],{"class":32,"line":112},[30,171712,2582],{"emptyLinePlaceholder":245},[30,171714,171715,171717],{"class":32,"line":123},[30,171716,171020],{"class":317},[30,171718,3921],{"class":321},[30,171720,171721,171723,171725,171728,171730,171732,171734],{"class":32,"line":131},[30,171722,162628],{"class":321},[30,171724,367],{"class":317},[30,171726,171727],{"class":321}," withdraw(",[30,171729,631],{"class":40},[30,171731,12617],{"class":321},[30,171733,1905],{"class":40},[30,171735,328],{"class":321},[30,171737,171738,171740,171743,171745],{"class":32,"line":142},[30,171739,171032],{"class":317},[30,171741,171742],{"class":321}," BalanceNotEnoughError ",[30,171744,31521],{"class":317},[30,171746,171364],{"class":321},[30,171748,171749,171751],{"class":32,"line":1811},[30,171750,31437],{"class":40},[30,171752,67137],{"class":321},[157,171754,171755],{},"入门阶段大多数情况使用内置异常即可。",[15,171757,171759],{"id":171758},"_99-traceback","9.9 traceback",[157,171761,171762],{},"调试时可以输出完整异常堆栈。",[20,171764,171766],{"className":30516,"code":171765,"language":30518,"meta":25,"style":25},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[27,171767,171768,171775,171779,171785,171795,171803],{"__ignoreMap":25},[30,171769,171770,171772],{"class":32,"line":33},[30,171771,30530],{"class":317},[30,171773,171774],{"class":321}," traceback\n",[30,171776,171777],{"class":32,"line":44},[30,171778,2582],{"emptyLinePlaceholder":245},[30,171780,171781,171783],{"class":32,"line":52},[30,171782,171020],{"class":317},[30,171784,3921],{"class":321},[30,171786,171787,171789,171791,171793],{"class":32,"line":60},[30,171788,2167],{"class":40},[30,171790,322],{"class":321},[30,171792,156018],{"class":74},[30,171794,328],{"class":321},[30,171796,171797,171799,171801],{"class":32,"line":68},[30,171798,171032],{"class":317},[30,171800,152364],{"class":40},[30,171802,3921],{"class":321},[30,171804,171805],{"class":32,"line":80},[30,171806,171807],{"class":321},"    traceback.print_exc()\n",[157,171809,171810],{},"日志系统中常把异常堆栈记录到文件。",[15,171812,171814],{"id":171813},"_910-什么是模块","9.10 什么是模块",[157,171816,171817,171818,126121],{},"模块就是一个 ",[27,171819,146490],{},[157,171821,171822,171823,24799],{},"例如创建 ",[27,171824,171825],{},"my_math.py",[20,171827,171829],{"className":30516,"code":171828,"language":30518,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[27,171830,171831,171839,171849,171853,171857,171866],{"__ignoreMap":25},[30,171832,171833,171835,171837],{"class":32,"line":33},[30,171834,32085],{"class":317},[30,171836,5391],{"class":36},[30,171838,151231],{"class":321},[30,171840,171841,171843,171845,171847],{"class":32,"line":44},[30,171842,4272],{"class":317},[30,171844,11051],{"class":321},[30,171846,801],{"class":317},[30,171848,151242],{"class":321},[30,171850,171851],{"class":32,"line":52},[30,171852,2582],{"emptyLinePlaceholder":245},[30,171854,171855],{"class":32,"line":60},[30,171856,2582],{"emptyLinePlaceholder":245},[30,171858,171859,171861,171864],{"class":32,"line":68},[30,171860,32085],{"class":317},[30,171862,171863],{"class":36}," sub",[30,171865,151231],{"class":321},[30,171867,171868,171870,171872,171874],{"class":32,"line":80},[30,171869,4272],{"class":317},[30,171871,11051],{"class":321},[30,171873,852],{"class":317},[30,171875,151242],{"class":321},[157,171877,171878],{},"在另一个文件中导入：",[20,171880,171882],{"className":30516,"code":171881,"language":30518,"meta":25,"style":25},"import my_math\n\nprint(my_math.add(1, 2))\n",[27,171883,171884,171891,171895],{"__ignoreMap":25},[30,171885,171886,171888],{"class":32,"line":33},[30,171887,30530],{"class":317},[30,171889,171890],{"class":321}," my_math\n",[30,171892,171893],{"class":32,"line":44},[30,171894,2582],{"emptyLinePlaceholder":245},[30,171896,171897,171899,171902,171904,171906,171908],{"class":32,"line":52},[30,171898,30553],{"class":40},[30,171900,171901],{"class":321},"(my_math.add(",[30,171903,537],{"class":40},[30,171905,12617],{"class":321},[30,171907,398],{"class":40},[30,171909,30635],{"class":321},[15,171911,171913],{"id":171912},"_911-import导入","9.11 import导入",[287,171915,171917],{"id":171916},"_9111-导入模块","9.11.1 导入模块",[20,171919,171921],{"className":30516,"code":171920,"language":30518,"meta":25,"style":25},"import random\n\nprint(random.randint(1, 10))\n",[27,171922,171923,171929,171933],{"__ignoreMap":25},[30,171924,171925,171927],{"class":32,"line":33},[30,171926,30530],{"class":317},[30,171928,45466],{"class":321},[30,171930,171931],{"class":32,"line":44},[30,171932,2582],{"emptyLinePlaceholder":245},[30,171934,171935,171937,171940,171942,171944,171946],{"class":32,"line":52},[30,171936,30553],{"class":40},[30,171938,171939],{"class":321},"(random.randint(",[30,171941,537],{"class":40},[30,171943,12617],{"class":321},[30,171945,766],{"class":40},[30,171947,30635],{"class":321},[287,171949,171951],{"id":171950},"_9112-导入指定内容","9.11.2 导入指定内容",[20,171953,171955],{"className":30516,"code":171954,"language":30518,"meta":25,"style":25},"from random import randint\n\nprint(randint(1, 10))\n",[27,171956,171957,171968,171972],{"__ignoreMap":25},[30,171958,171959,171961,171963,171965],{"class":32,"line":33},[30,171960,30875],{"class":317},[30,171962,57934],{"class":321},[30,171964,30530],{"class":317},[30,171966,171967],{"class":321}," randint\n",[30,171969,171970],{"class":32,"line":44},[30,171971,2582],{"emptyLinePlaceholder":245},[30,171973,171974,171976,171979,171981,171983,171985],{"class":32,"line":52},[30,171975,30553],{"class":40},[30,171977,171978],{"class":321},"(randint(",[30,171980,537],{"class":40},[30,171982,12617],{"class":321},[30,171984,766],{"class":40},[30,171986,30635],{"class":321},[287,171988,171990],{"id":171989},"_9113-起别名","9.11.3 起别名",[20,171992,171994],{"className":30516,"code":171993,"language":30518,"meta":25,"style":25},"import random as rd\n\nprint(rd.randint(1, 10))\n",[27,171995,171996,172007,172011],{"__ignoreMap":25},[30,171997,171998,172000,172002,172004],{"class":32,"line":33},[30,171999,30530],{"class":317},[30,172001,57934],{"class":321},[30,172003,31521],{"class":317},[30,172005,172006],{"class":321}," rd\n",[30,172008,172009],{"class":32,"line":44},[30,172010,2582],{"emptyLinePlaceholder":245},[30,172012,172013,172015,172018,172020,172022,172024],{"class":32,"line":52},[30,172014,30553],{"class":40},[30,172016,172017],{"class":321},"(rd.randint(",[30,172019,537],{"class":40},[30,172021,12617],{"class":321},[30,172023,766],{"class":40},[30,172025,30635],{"class":321},[20,172027,172029],{"className":30516,"code":172028,"language":30518,"meta":25,"style":25},"from random import randint as rint\n\nprint(rint(1, 10))\n",[27,172030,172031,172047,172051],{"__ignoreMap":25},[30,172032,172033,172035,172037,172039,172042,172044],{"class":32,"line":33},[30,172034,30875],{"class":317},[30,172036,57934],{"class":321},[30,172038,30530],{"class":317},[30,172040,172041],{"class":321}," randint ",[30,172043,31521],{"class":317},[30,172045,172046],{"class":321}," rint\n",[30,172048,172049],{"class":32,"line":44},[30,172050,2582],{"emptyLinePlaceholder":245},[30,172052,172053,172055,172058,172060,172062,172064],{"class":32,"line":52},[30,172054,30553],{"class":40},[30,172056,172057],{"class":321},"(rint(",[30,172059,537],{"class":40},[30,172061,12617],{"class":321},[30,172063,766],{"class":40},[30,172065,30635],{"class":321},[287,172067,172069],{"id":172068},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[20,172071,172073],{"className":30516,"code":172072,"language":30518,"meta":25,"style":25},"from random import *\n",[27,172074,172075],{"__ignoreMap":25},[30,172076,172077,172079,172081,172083],{"class":32,"line":33},[30,172078,30875],{"class":317},[30,172080,57934],{"class":321},[30,172082,30530],{"class":317},[30,172084,172085],{"class":317}," *\n",[157,172087,172088],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[15,172090,172092],{"id":172091},"_912-常用内置模块","9.12 常用内置模块",[287,172094,172096],{"id":172095},"_9121-random","9.12.1 random",[20,172098,172100],{"className":30516,"code":172099,"language":30518,"meta":25,"style":25},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[27,172101,172102,172108,172112,172126,172145],{"__ignoreMap":25},[30,172103,172104,172106],{"class":32,"line":33},[30,172105,30530],{"class":317},[30,172107,45466],{"class":321},[30,172109,172110],{"class":32,"line":44},[30,172111,2582],{"emptyLinePlaceholder":245},[30,172113,172114,172116,172118,172120,172122,172124],{"class":32,"line":52},[30,172115,30553],{"class":40},[30,172117,171939],{"class":321},[30,172119,537],{"class":40},[30,172121,12617],{"class":321},[30,172123,766],{"class":40},[30,172125,30635],{"class":321},[30,172127,172128,172130,172133,172135,172137,172139,172141,172143],{"class":32,"line":60},[30,172129,30553],{"class":40},[30,172131,172132],{"class":321},"(random.choice([",[30,172134,150026],{"class":74},[30,172136,12617],{"class":321},[30,172138,151074],{"class":74},[30,172140,12617],{"class":321},[30,172142,159869],{"class":74},[30,172144,33281],{"class":321},[30,172146,172147,172149,172152,172154,172156,172158,172160,172162,172164,172166,172168,172170,172172,172174],{"class":32,"line":68},[30,172148,30553],{"class":40},[30,172150,172151],{"class":321},"(random.sample([",[30,172153,537],{"class":40},[30,172155,12617],{"class":321},[30,172157,398],{"class":40},[30,172159,12617],{"class":321},[30,172161,392],{"class":40},[30,172163,12617],{"class":321},[30,172165,613],{"class":40},[30,172167,12617],{"class":321},[30,172169,639],{"class":40},[30,172171,112340],{"class":321},[30,172173,398],{"class":40},[30,172175,30635],{"class":321},[287,172177,172179],{"id":172178},"_9122-time","9.12.2 time",[20,172181,172183],{"className":30516,"code":172182,"language":30518,"meta":25,"style":25},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[27,172184,172185,172191,172195,172202,172210],{"__ignoreMap":25},[30,172186,172187,172189],{"class":32,"line":33},[30,172188,30530],{"class":317},[30,172190,31967],{"class":321},[30,172192,172193],{"class":32,"line":44},[30,172194,2582],{"emptyLinePlaceholder":245},[30,172196,172197,172199],{"class":32,"line":52},[30,172198,30553],{"class":40},[30,172200,172201],{"class":321},"(time.time())\n",[30,172203,172204,172206,172208],{"class":32,"line":60},[30,172205,95209],{"class":321},[30,172207,537],{"class":40},[30,172209,328],{"class":321},[30,172211,172212,172214,172216,172219],{"class":32,"line":68},[30,172213,30553],{"class":40},[30,172215,322],{"class":321},[30,172217,172218],{"class":74},"\"1秒后执行\"",[30,172220,328],{"class":321},[287,172222,172224],{"id":172223},"_9123-datetime","9.12.3 datetime",[20,172226,172228],{"className":30516,"code":172227,"language":30518,"meta":25,"style":25},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[27,172229,172230,172242,172246,172256,172263],{"__ignoreMap":25},[30,172231,172232,172234,172237,172239],{"class":32,"line":33},[30,172233,30875],{"class":317},[30,172235,172236],{"class":321}," datetime ",[30,172238,30530],{"class":317},[30,172240,172241],{"class":321}," datetime\n",[30,172243,172244],{"class":32,"line":44},[30,172245,2582],{"emptyLinePlaceholder":245},[30,172247,172248,172251,172253],{"class":32,"line":52},[30,172249,172250],{"class":321},"now ",[30,172252,367],{"class":317},[30,172254,172255],{"class":321}," datetime.now()\n",[30,172257,172258,172260],{"class":32,"line":60},[30,172259,30553],{"class":40},[30,172261,172262],{"class":321},"(now)\n",[30,172264,172265,172267,172270,172273,172275,172278],{"class":32,"line":68},[30,172266,30553],{"class":40},[30,172268,172269],{"class":321},"(now.strftime(",[30,172271,172272],{"class":74},"\"%Y-%m-",[30,172274,156829],{"class":40},[30,172276,172277],{"class":74}," %H:%M:%S\"",[30,172279,30635],{"class":321},[287,172281,172283],{"id":172282},"_9124-os","9.12.4 os",[20,172285,172287],{"className":30516,"code":172286,"language":30518,"meta":25,"style":25},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[27,172288,172289,172295,172299,172306],{"__ignoreMap":25},[30,172290,172291,172293],{"class":32,"line":33},[30,172292,30530],{"class":317},[30,172294,45443],{"class":321},[30,172296,172297],{"class":32,"line":44},[30,172298,2582],{"emptyLinePlaceholder":245},[30,172300,172301,172303],{"class":32,"line":52},[30,172302,30553],{"class":40},[30,172304,172305],{"class":321},"(os.getcwd())\n",[30,172307,172308,172310,172313,172316],{"class":32,"line":60},[30,172309,30553],{"class":40},[30,172311,172312],{"class":321},"(os.listdir(",[30,172314,172315],{"class":74},"\".\"",[30,172317,30635],{"class":321},[287,172319,172321],{"id":172320},"_9125-sys","9.12.5 sys",[20,172323,172325],{"className":30516,"code":172324,"language":30518,"meta":25,"style":25},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[27,172326,172327,172334,172338,172345],{"__ignoreMap":25},[30,172328,172329,172331],{"class":32,"line":33},[30,172330,30530],{"class":317},[30,172332,172333],{"class":321}," sys\n",[30,172335,172336],{"class":32,"line":44},[30,172337,2582],{"emptyLinePlaceholder":245},[30,172339,172340,172342],{"class":32,"line":52},[30,172341,30553],{"class":40},[30,172343,172344],{"class":321},"(sys.version)\n",[30,172346,172347,172349],{"class":32,"line":60},[30,172348,30553],{"class":40},[30,172350,172351],{"class":321},"(sys.path)\n",[15,172353,172355,172356,172358,172359,571],{"id":172354},"_913-if-name-main","9.13 if ",[469,172357,79948],{}," == \"",[469,172360,102196],{},[157,172362,172363,172364,172367],{},"模块被直接运行和被导入时，",[27,172365,172366],{},"__name__"," 的值不同。",[157,172369,172370,172371,24799],{},"创建 ",[27,172372,172373],{},"my_module.py",[20,172375,172377],{"className":30516,"code":172376,"language":30518,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[27,172378,172379,172387,172397,172401,172405,172417],{"__ignoreMap":25},[30,172380,172381,172383,172385],{"class":32,"line":33},[30,172382,32085],{"class":317},[30,172384,5391],{"class":36},[30,172386,151231],{"class":321},[30,172388,172389,172391,172393,172395],{"class":32,"line":44},[30,172390,4272],{"class":317},[30,172392,11051],{"class":321},[30,172394,801],{"class":317},[30,172396,151242],{"class":321},[30,172398,172399],{"class":32,"line":52},[30,172400,2582],{"emptyLinePlaceholder":245},[30,172402,172403],{"class":32,"line":60},[30,172404,2582],{"emptyLinePlaceholder":245},[30,172406,172407,172409,172411,172413,172415],{"class":32,"line":68},[30,172408,1717],{"class":317},[30,172410,31358],{"class":40},[30,172412,101697],{"class":317},[30,172414,101700],{"class":74},[30,172416,3921],{"class":321},[30,172418,172419,172421,172423,172425,172427,172429],{"class":32,"line":80},[30,172420,31437],{"class":40},[30,172422,166738],{"class":321},[30,172424,537],{"class":40},[30,172426,12617],{"class":321},[30,172428,398],{"class":40},[30,172430,30635],{"class":321},[157,172432,172433],{},"作用：",[271,172435,172436,172439],{},[150,172437,172438],{},"直接运行该文件时，执行测试代码。",[150,172440,172441],{},"被其他文件导入时，不执行测试代码。",[157,172443,172444],{},"这是写模块时很常用的习惯。",[15,172446,172448],{"id":172447},"_914-包","9.14 包",[157,172450,172451,172452,172455],{},"包是包含 ",[27,172453,172454],{},"__init__.py"," 的目录，用于组织多个模块。",[157,172457,172458],{},"目录结构：",[20,172460,172463],{"className":172461,"code":172462,"language":5369,"meta":25},[5367],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[27,172464,172462],{"__ignoreMap":25},[157,172466,172467],{},"导入：",[20,172469,172471],{"className":30516,"code":172470,"language":30518,"meta":25,"style":25},"from utils.file_utils import read_file\n",[27,172472,172473],{"__ignoreMap":25},[30,172474,172475,172477,172480,172482],{"class":32,"line":33},[30,172476,30875],{"class":317},[30,172478,172479],{"class":321}," utils.file_utils ",[30,172481,30530],{"class":317},[30,172483,172484],{"class":321}," read_file\n",[157,172486,172487,172489],{},[27,172488,172454],{}," 可以为空，也可以写包初始化逻辑。",[15,172491,172493],{"id":172492},"_915-第三方包","9.15 第三方包",[157,172495,172496,172497,172499],{},"第三方包通过 ",[27,172498,24011],{}," 安装。",[20,172501,172503],{"className":22,"code":172502,"language":24,"meta":25,"style":25},"pip install requests\n",[27,172504,172505],{"__ignoreMap":25},[30,172506,172507,172509,172511],{"class":32,"line":33},[30,172508,24011],{"class":36},[30,172510,24014],{"class":74},[30,172512,146236],{"class":74},[157,172514,172515],{},"使用：",[20,172517,172519],{"className":30516,"code":172518,"language":30518,"meta":25,"style":25},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[27,172520,172521,172527,172531,172546],{"__ignoreMap":25},[30,172522,172523,172525],{"class":32,"line":33},[30,172524,30530],{"class":317},[30,172526,146236],{"class":321},[30,172528,172529],{"class":32,"line":44},[30,172530,2582],{"emptyLinePlaceholder":245},[30,172532,172533,172536,172538,172541,172544],{"class":32,"line":52},[30,172534,172535],{"class":321},"response ",[30,172537,367],{"class":317},[30,172539,172540],{"class":321}," requests.get(",[30,172542,172543],{"class":74},"\"https:\u002F\u002Fwww.example.com\"",[30,172545,328],{"class":321},[30,172547,172548,172550],{"class":32,"line":60},[30,172549,30553],{"class":40},[30,172551,172552],{"class":321},"(response.status_code)\n",[157,172554,172555],{},"查看已安装包：",[20,172557,172559],{"className":22,"code":172558,"language":24,"meta":25,"style":25},"pip list\n",[27,172560,172561],{"__ignoreMap":25},[30,172562,172563,172565],{"class":32,"line":33},[30,172564,24011],{"class":36},[30,172566,119093],{"class":74},[157,172568,172569],{},"导出项目依赖：",[20,172571,172572],{"className":22,"code":146431,"language":24,"meta":25,"style":25},[27,172573,172574],{"__ignoreMap":25},[30,172575,172576,172578,172580,172582],{"class":32,"line":33},[30,172577,24011],{"class":36},[30,172579,146440],{"class":74},[30,172581,26360],{"class":317},[30,172583,146445],{"class":74},[157,172585,172586],{},"安装项目依赖：",[20,172588,172589],{"className":22,"code":146451,"language":24,"meta":25,"style":25},[27,172590,172591],{"__ignoreMap":25},[30,172592,172593,172595,172597,172599],{"class":32,"line":33},[30,172594,24011],{"class":36},[30,172596,24014],{"class":74},[30,172598,119777],{"class":40},[30,172600,146445],{"class":74},[15,172602,172604],{"id":172603},"_916-模块搜索路径","9.16 模块搜索路径",[157,172606,172607,172608,172611],{},"Python 导入模块时会在 ",[27,172609,172610],{},"sys.path"," 中查找。",[20,172613,172615],{"className":30516,"code":172614,"language":30518,"meta":25,"style":25},"import sys\n\nfor path in sys.path:\n    print(path)\n",[27,172616,172617,172623,172627,172639],{"__ignoreMap":25},[30,172618,172619,172621],{"class":32,"line":33},[30,172620,30530],{"class":317},[30,172622,172333],{"class":321},[30,172624,172625],{"class":32,"line":44},[30,172626,2582],{"emptyLinePlaceholder":245},[30,172628,172629,172631,172634,172636],{"class":32,"line":52},[30,172630,3207],{"class":317},[30,172632,172633],{"class":321}," path ",[30,172635,26181],{"class":317},[30,172637,172638],{"class":321}," sys.path:\n",[30,172640,172641,172643],{"class":32,"line":60},[30,172642,31437],{"class":40},[30,172644,169367],{"class":321},[157,172646,172647],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[157,172649,157761],{},[20,172651,172654],{"className":172652,"code":172653,"language":5369,"meta":25},[5367],"random.py\njson.py\ntime.py\n",[27,172655,172653],{"__ignoreMap":25},[157,172657,172658],{},"这些文件名可能导致导入异常。",[15,172660,172662],{"id":172661},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[157,172664,172458],{},[20,172666,172669],{"className":172667,"code":172668,"language":5369,"meta":25},[5367],"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",[27,172670,172668],{"__ignoreMap":25},[157,172672,172673,24799],{},[27,172674,172675],{},"utils\u002Ffile_utils.py",[20,172677,172679],{"className":30516,"code":172678,"language":30518,"meta":25,"style":25},"import json\nfrom pathlib import Path\n\n\ndef read_json(path):\n    path = Path(path)\n    if not path.exists():\n        return []\n\n    with open(path, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef write_json(path, data):\n    with open(path, \"w\", encoding=\"utf-8\") as file:\n        json.dump(data, file, ensure_ascii=False, indent=2)\n",[27,172680,172681,172687,172697,172701,172705,172715,172725,172733,172739,172743,172770,172780,172784,172788,172798,172824],{"__ignoreMap":25},[30,172682,172683,172685],{"class":32,"line":33},[30,172684,30530],{"class":317},[30,172686,147229],{"class":321},[30,172688,172689,172691,172693,172695],{"class":32,"line":44},[30,172690,30875],{"class":317},[30,172692,108449],{"class":321},[30,172694,30530],{"class":317},[30,172696,108454],{"class":321},[30,172698,172699],{"class":32,"line":52},[30,172700,2582],{"emptyLinePlaceholder":245},[30,172702,172703],{"class":32,"line":60},[30,172704,2582],{"emptyLinePlaceholder":245},[30,172706,172707,172709,172712],{"class":32,"line":68},[30,172708,32085],{"class":317},[30,172710,172711],{"class":36}," read_json",[30,172713,172714],{"class":321},"(path):\n",[30,172716,172717,172720,172722],{"class":32,"line":80},[30,172718,172719],{"class":321},"    path ",[30,172721,367],{"class":317},[30,172723,172724],{"class":321}," Path(path)\n",[30,172726,172727,172729,172731],{"class":32,"line":88},[30,172728,3283],{"class":317},[30,172730,39068],{"class":317},[30,172732,169448],{"class":321},[30,172734,172735,172737],{"class":32,"line":96},[30,172736,14934],{"class":317},[30,172738,51976],{"class":321},[30,172740,172741],{"class":32,"line":104},[30,172742,2582],{"emptyLinePlaceholder":245},[30,172744,172745,172747,172749,172752,172754,172756,172758,172760,172762,172764,172766,172768],{"class":32,"line":112},[30,172746,34316],{"class":317},[30,172748,146929],{"class":40},[30,172750,172751],{"class":321},"(path, ",[30,172753,146939],{"class":74},[30,172755,12617],{"class":321},[30,172757,146944],{"class":5398},[30,172759,367],{"class":317},[30,172761,146949],{"class":74},[30,172763,13896],{"class":321},[30,172765,31521],{"class":317},[30,172767,148291],{"class":5398},[30,172769,3921],{"class":321},[30,172771,172772,172774,172776,172778],{"class":32,"line":123},[30,172773,14934],{"class":317},[30,172775,148302],{"class":321},[30,172777,45492],{"class":5398},[30,172779,328],{"class":321},[30,172781,172782],{"class":32,"line":131},[30,172783,2582],{"emptyLinePlaceholder":245},[30,172785,172786],{"class":32,"line":142},[30,172787,2582],{"emptyLinePlaceholder":245},[30,172789,172790,172792,172795],{"class":32,"line":1811},[30,172791,32085],{"class":317},[30,172793,172794],{"class":36}," write_json",[30,172796,172797],{"class":321},"(path, data):\n",[30,172799,172800,172802,172804,172806,172808,172810,172812,172814,172816,172818,172820,172822],{"class":32,"line":1825},[30,172801,34316],{"class":317},[30,172803,146929],{"class":40},[30,172805,172751],{"class":321},[30,172807,152114],{"class":74},[30,172809,12617],{"class":321},[30,172811,146944],{"class":5398},[30,172813,367],{"class":317},[30,172815,146949],{"class":74},[30,172817,13896],{"class":321},[30,172819,31521],{"class":317},[30,172821,148291],{"class":5398},[30,172823,3921],{"class":321},[30,172825,172826,172829,172831,172833,172835,172837,172839,172841,172843,172845,172847],{"class":32,"line":1830},[30,172827,172828],{"class":321},"        json.dump(data, ",[30,172830,45492],{"class":5398},[30,172832,12617],{"class":321},[30,172834,147275],{"class":5398},[30,172836,367],{"class":317},[30,172838,34125],{"class":40},[30,172840,12617],{"class":321},[30,172842,152150],{"class":5398},[30,172844,367],{"class":317},[30,172846,398],{"class":40},[30,172848,328],{"class":321},[157,172850,172851,24799],{},[27,172852,154745],{},[20,172854,172856],{"className":30516,"code":172855,"language":30518,"meta":25,"style":25},"from utils.file_utils import read_json, write_json\n\nstudents = read_json(\"students.json\")\nstudents.append({\"name\": \"小明\", \"score\": 95})\nwrite_json(\"students.json\", students)\n",[27,172857,172858,172869,172873,172886,172906],{"__ignoreMap":25},[30,172859,172860,172862,172864,172866],{"class":32,"line":33},[30,172861,30875],{"class":317},[30,172863,172479],{"class":321},[30,172865,30530],{"class":317},[30,172867,172868],{"class":321}," read_json, write_json\n",[30,172870,172871],{"class":32,"line":44},[30,172872,2582],{"emptyLinePlaceholder":245},[30,172874,172875,172877,172879,172882,172884],{"class":32,"line":52},[30,172876,159854],{"class":321},[30,172878,367],{"class":317},[30,172880,172881],{"class":321}," read_json(",[30,172883,151969],{"class":74},[30,172885,328],{"class":321},[30,172887,172888,172890,172892,172894,172896,172898,172900,172902,172904],{"class":32,"line":60},[30,172889,170672],{"class":321},[30,172891,62817],{"class":74},[30,172893,51575],{"class":321},[30,172895,150026],{"class":74},[30,172897,12617],{"class":321},[30,172899,151610],{"class":74},[30,172901,51575],{"class":321},[30,172903,1309],{"class":40},[30,172905,165290],{"class":321},[30,172907,172908,172911,172913],{"class":32,"line":68},[30,172909,172910],{"class":321},"write_json(",[30,172912,151969],{"class":74},[30,172914,172915],{"class":321},", students)\n",[15,172917,172919],{"id":172918},"_918-易错点","9.18 易错点",[271,172921,172922,172925,172930,172935,172938,172941],{},[150,172923,172924],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[150,172926,172927,172928,28523],{},"能指定异常类型就不要裸写 ",[27,172929,171032],{},[150,172931,172932,172934],{},[27,172933,171407],{}," 无论是否出错都会执行。",[150,172936,172937],{},"模块文件名不要和标准库重名。",[150,172939,172940],{},"导入自己写的模块时，要注意运行目录。",[150,172942,172943],{},"第三方包要安装到当前解释器或虚拟环境中。",[15,172945,172947],{"id":172946},"_919-本章练习","9.19 本章练习",[271,172949,172950,172953,172956,172962,172969],{},[150,172951,172952],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[150,172954,172955],{},"写函数读取文件，如果文件不存在则返回空字符串。",[150,172957,172370,172958,172961],{},[27,172959,172960],{},"math_utils.py","，实现加减乘除函数并导入使用。",[150,172963,172964,172965,172968],{},"创建一个 ",[27,172966,172967],{},"utils"," 包，把 JSON 读写函数放进去。",[150,172970,172971],{},"写一个程序，捕获除零异常和输入格式异常。",[234,172973,172974],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":44,"depth":44,"links":172976},[172977,172978,172979,172980,172981,172982,172983,172984,172985,172986,172987,172993,173000,173002,173003,173004,173005,173006,173007],{"id":170829,"depth":44,"text":170830},{"id":170957,"depth":44,"text":170958},{"id":171006,"depth":44,"text":171007},{"id":171155,"depth":44,"text":171156},{"id":171327,"depth":44,"text":171328},{"id":171396,"depth":44,"text":171397},{"id":171507,"depth":44,"text":171508},{"id":171633,"depth":44,"text":171634},{"id":171758,"depth":44,"text":171759},{"id":171813,"depth":44,"text":171814},{"id":171912,"depth":44,"text":171913,"children":172988},[172989,172990,172991,172992],{"id":171916,"depth":52,"text":171917},{"id":171950,"depth":52,"text":171951},{"id":171989,"depth":52,"text":171990},{"id":172068,"depth":52,"text":172069},{"id":172091,"depth":44,"text":172092,"children":172994},[172995,172996,172997,172998,172999],{"id":172095,"depth":52,"text":172096},{"id":172178,"depth":52,"text":172179},{"id":172223,"depth":52,"text":172224},{"id":172282,"depth":52,"text":172283},{"id":172320,"depth":52,"text":172321},{"id":172354,"depth":44,"text":173001},"9.13 if name == \"main\"",{"id":172447,"depth":44,"text":172448},{"id":172492,"depth":44,"text":172493},{"id":172603,"depth":44,"text":172604},{"id":172661,"depth":44,"text":172662},{"id":172918,"depth":44,"text":172919},{"id":172946,"depth":44,"text":172947},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170821,"description":242},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173014,"title":173015,"body":173016,"description":173179,"extension":243,"meta":173180,"navigation":245,"path":173181,"seo":173182,"stem":173183,"__hash__":173184},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173017,"toc":173174},[173018,173021,173024,173027,173038,173040,173114,173117,173120,173123,173126,173129,173132,173135,173138,173141,173144],[10,173019,173015],{"id":173020},"python教程",[157,173022,173023],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[157,173025,173026],{},"建议学习环境：",[271,173028,173029,173032,173035],{},[150,173030,173031],{},"Python 版本：Python 3.10 及以上。",[150,173033,173034],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[150,173036,173037],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[15,173039,117216],{"id":117216},[271,173041,173042,173048,173054,173060,173066,173072,173078,173084,173090,173096,173102,173108],{},[150,173043,173044],{},[558,173045,173047],{"href":173046},".\u002Fch1-Python","Python环境与第一个程序",[150,173049,173050],{},[558,173051,173053],{"href":173052},".\u002Fch2","基础语法、变量与字符串",[150,173055,173056],{},[558,173057,173059],{"href":173058},".\u002Fch3","判断语句",[150,173061,173062],{},[558,173063,173065],{"href":173064},".\u002Fch4","循环语句",[150,173067,173068],{},[558,173069,173071],{"href":173070},".\u002Fch5","函数基础",[150,173073,173074],{},[558,173075,173077],{"href":173076},".\u002Fch6","数据容器",[150,173079,173080],{},[558,173081,173083],{"href":173082},".\u002Fch7","函数进阶",[150,173085,173086],{},[558,173087,173089],{"href":173088},".\u002Fch8","文件操作",[150,173091,173092],{},[558,173093,173095],{"href":173094},".\u002Fch9","异常、模块与包",[150,173097,173098],{},[558,173099,173101],{"href":173100},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[150,173103,173104],{},[558,173105,173107],{"href":173106},".\u002Fch11","面向对象基础",[150,173109,173110],{},[558,173111,173113],{"href":173112},".\u002Fch12","综合案例与复习路线",[15,173115,173116],{"id":173116},"学习路线",[157,173118,173119],{},"第一阶段：能运行程序。",[157,173121,173122],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[157,173124,173125],{},"第二阶段：能组织数据。",[157,173127,173128],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[157,173130,173131],{},"第三阶段：能封装逻辑。",[157,173133,173134],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[157,173136,173137],{},"第四阶段：能做小项目。",[157,173139,173140],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[15,173142,173143],{"id":173143},"参考资料",[271,173145,173146,173153,173160,173167],{},[150,173147,173148,173149],{},"黑马程序员 Python 入门教程推荐：",[558,173150,173151],{"href":173151,"rel":173152},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24045],[150,173154,173155,173156],{},"Python 官方中文教程：",[558,173157,173158],{"href":173158,"rel":173159},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24045],[150,173161,173162,173163],{},"Python 标准库文档：",[558,173164,173165],{"href":173165,"rel":173166},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24045],[150,173168,173169,173170],{},"pyecharts 文档：",[558,173171,173172],{"href":173172,"rel":173173},"https:\u002F\u002Fpyecharts.org\u002F",[24045],{"title":25,"searchDepth":44,"depth":44,"links":173175},[173176,173177,173178],{"id":117216,"depth":44,"text":117216},{"id":173116,"depth":44,"text":173116},{"id":173143,"depth":44,"text":173143},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23560},"\u002Fwiki\u002F2024-10-10-python",{"title":173015,"description":173179},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331398863]