[{"data":1,"prerenderedAt":173293},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-01-27-linux-ji-ben-cao-zuo\u002Fch6-tuo-zhan-gong-neng":3,"wiki-doc-nav":408},{"id":4,"title":5,"body":6,"description":400,"extension":401,"meta":402,"navigation":403,"path":404,"seo":405,"stem":406,"__hash__":407},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":8,"toc":392},"minimark",[9,13,18,22,27,34,44,48,377,381,388],[10,11,5],"h1",{"id":12},"_6-拓展功能",[14,15,17],"h2",{"id":16},"_61-wine","6.1 Wine",[14,19,21],{"id":20},"_62-android","6.2 Android",[23,24,26],"h3",{"id":25},"_621-i卡a卡","6.2.1 I卡、A卡",[28,29,30],"ol",{},[31,32,33],"li",{},"Wayland-Waydroid(体验超级好)",[35,36,37,38],"p",{},"Waydroid 官网与安装指南：",[39,40,41],"a",{"href":41,"rel":42},"https:\u002F\u002Fwaydro.id\u002F",[43],"nofollow",[23,45,47],{"id":46},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[28,49,50],{},[31,51,52,53,56,57,61,63,68,74,301],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54,55],"br",{},"BlissOS 官网下载：",[39,58,59],{"href":59,"rel":60},"https:\u002F\u002Fblissos.org\u002F",[43],[54,62],{},[64,65],"img",{"alt":66,"src":67},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[28,69,71],{"start":70},3,[31,72,73],{},"比较推荐的配置",[75,76,80],"pre",{"className":77,"code":78,"language":79,"meta":66,"style":66},"language-Bash shiki shiki-themes github-light github-dark","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","Bash",[81,82,83,96,108,118,129,143,154,162,173,183,193,204,215,225,236,247,260,271,281,292],"code",{"__ignoreMap":66},[84,85,88,92],"span",{"class":86,"line":87},"line",1,[84,89,91],{"class":90},"sScJk","qemu-system-x86_64",[84,93,95],{"class":94},"sj4cs"," \\\n",[84,97,99,102,106],{"class":86,"line":98},2,[84,100,101],{"class":94},"        -M",[84,103,105],{"class":104},"sZZnC"," q35,vmport=off",[84,107,95],{"class":94},[84,109,110,113,116],{"class":86,"line":70},[84,111,112],{"class":94},"        -accel",[84,114,115],{"class":104}," kvm",[84,117,95],{"class":94},[84,119,121,124,127],{"class":86,"line":120},4,[84,122,123],{"class":94},"        -cpu",[84,125,126],{"class":104}," qemu64,+sse3,+sse4.2",[84,128,95],{"class":94},[84,130,132,135,138,141],{"class":86,"line":131},5,[84,133,134],{"class":94},"        -smp",[84,136,137],{"class":104}," 8,cores=",[84,139,140],{"class":94},"4",[84,142,95],{"class":94},[84,144,146,149,152],{"class":86,"line":145},6,[84,147,148],{"class":94},"        -m",[84,150,151],{"class":104}," 6G",[84,153,95],{"class":94},[84,155,157,160],{"class":86,"line":156},7,[84,158,159],{"class":94},"        -usb",[84,161,95],{"class":94},[84,163,165,168,171],{"class":86,"line":164},8,[84,166,167],{"class":94},"        -device",[84,169,170],{"class":104}," virtio-tablet",[84,172,95],{"class":94},[84,174,176,178,181],{"class":86,"line":175},9,[84,177,167],{"class":94},[84,179,180],{"class":104}," virtio-keyboard",[84,182,95],{"class":94},[84,184,186,188,191],{"class":86,"line":185},10,[84,187,167],{"class":94},[84,189,190],{"class":104}," usb-tablet",[84,192,95],{"class":94},[84,194,196,199,202],{"class":86,"line":195},11,[84,197,198],{"class":94},"        -bios",[84,200,201],{"class":104}," OVMF-pure-efi64.fd",[84,203,95],{"class":94},[84,205,207,210,213],{"class":86,"line":206},12,[84,208,209],{"class":94},"        -net",[84,211,212],{"class":104}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[84,214,95],{"class":94},[84,216,218,220,223],{"class":86,"line":217},13,[84,219,209],{"class":94},[84,221,222],{"class":104}," nic,model=virtio",[84,224,95],{"class":94},[84,226,228,231,234],{"class":86,"line":227},14,[84,229,230],{"class":94},"        -audio",[84,232,233],{"class":104}," sdl,model=hda",[84,235,95],{"class":94},[84,237,239,242,245],{"class":86,"line":238},15,[84,240,241],{"class":94},"        -display",[84,243,244],{"class":104}," sdl,gl=on,show-cursor=on",[84,246,95],{"class":94},[84,248,250,252,255,258],{"class":86,"line":249},16,[84,251,167],{"class":94},[84,253,254],{"class":104}," virtio-vga-gl,xres=1920,yres=",[84,256,257],{"class":94},"1080",[84,259,95],{"class":94},[84,261,263,266,269],{"class":86,"line":262},17,[84,264,265],{"class":94},"        -drive",[84,267,268],{"class":104}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[84,270,95],{"class":94},[84,272,274,276,279],{"class":86,"line":273},18,[84,275,265],{"class":94},[84,277,278],{"class":104}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[84,280,95],{"class":94},[84,282,284,287,290],{"class":86,"line":283},19,[84,285,286],{"class":94},"        -monitor",[84,288,289],{"class":104}," stdio",[84,291,95],{"class":94},[84,293,295,298],{"class":86,"line":294},20,[84,296,297],{"class":94},"        -serial",[84,299,300],{"class":104}," none\n",[28,302,303],{"start":131},[31,304,305,306],{},"常用操作：",[28,307,308,311,369],{},[31,309,310],{},"全屏：Ctrl+Alt+F",[31,312,313,314,319],{},"adb调试",[28,315,316],{},[31,317,318],{},"使Linux与Android用ADB连接。",[75,320,322],{"className":77,"code":321,"language":79,"meta":66,"style":66},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[81,323,324,330,341,346,359,364],{"__ignoreMap":66},[84,325,326],{"class":86,"line":87},[84,327,329],{"class":328},"sJ8bj","# 连接安卓\n",[84,331,332,335,338],{"class":86,"line":98},[84,333,334],{"class":90},"adb",[84,336,337],{"class":104}," connect",[84,339,340],{"class":94}," 127.0.0.1\n",[84,342,343],{"class":86,"line":70},[84,344,345],{"class":328},"# 打开shell\n",[84,347,348,350,353,356],{"class":86,"line":120},[84,349,334],{"class":90},[84,351,352],{"class":94}," -s",[84,354,355],{"class":104}," 127.0.0.1:5555",[84,357,358],{"class":104}," shell\n",[84,360,361],{"class":86,"line":131},[84,362,363],{"class":328},"# 使用root权限\n",[84,365,366],{"class":86,"line":145},[84,367,368],{"class":90},"su\n",[31,370,371,372],{},"中文输入法",[28,373,374],{},[31,375,376],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,378,380],{"id":379},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[35,382,383,384],{},"rEFInd 官网与文档：",[39,385,386],{"href":386,"rel":387},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[43],[389,390,391],"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);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":66,"searchDepth":98,"depth":98,"links":393},[394,395,399],{"id":16,"depth":98,"text":17},{"id":20,"depth":98,"text":21,"children":396},[397,398],{"id":25,"depth":70,"text":26},{"id":46,"depth":70,"text":47},{"id":379,"depth":98,"text":380},null,"md",{},true,"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":5,"description":400},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",[409,5491,6599,8019,11008,12359,13848,14937,23700,23712,24310,24336,24460,24701,24766,24784,24797,24844,24968,25136,25335,25515,25720,25856,25951,25988,26001,26311,27052,27759,27780,28800,30431,30582,30595,30607,30908,50720,50735,50752,50785,53657,77004,93149,93170,93283,93404,94174,94837,95198,95236,95342,95442,95485,95511,95572,97226,97327,97352,97843,98343,99423,99706,100448,100950,100962,102978,104642,106145,107843,109760,111679,113701,117171,117603,118064,118813,121757,122105,122127,122405,125712,125724,126127,126150,126297,126464,126669,126970,127527,128184,130115,131713,132362,133856,135287,136522,138216,139968,142378,142494,143429,143640,144525,145760,145988,146001,147156,149568,151936,155257,157734,159378,161155,163168,166220,168400,170927,173121],{"id":410,"title":411,"body":412,"description":66,"extension":401,"meta":5486,"navigation":403,"path":5487,"seo":5488,"stem":5489,"__hash__":5490},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":413,"toc":5458},[414,417,421,424,428,439,443,447,450,453,456,459,462,492,496,499,502,505,508,559,563,581,583,597,600,608,611,1472,1479,1496,1500,1586,1590,1596,1682,1686,1724,1728,1792,1796,1800,1806,1817,1821,1826,1830,1835,1839,1844,1848,1852,1857,2117,2122,2260,2265,2521,2524,2532,2536,2541,2644,2647,2953,2962,3063,3066,3069,3072,3075,3335,3340,3480,3483,3662,3665,3793,3796,3948,3952,3957,3960,3971,3979,3982,4089,4093,4097,4102,4152,4157,4162,4186,4191,4244,4247,4252,4429,4434,4719,4724,5121,5125,5130,5187,5192,5200,5203,5343,5346,5455],[10,415,411],{"id":416},"_1基础入门",[14,418,420],{"id":419},"_11注释","1.1注释",[35,422,423],{},"\u002F\u002F或者\u002F* *\u002F",[14,425,427],{"id":426},"_12命名","1.2命名",[28,429,430,433,436],{},[31,431,432],{},"字母数字下划线",[31,434,435],{},"开头必须是字母或_",[31,437,438],{},"不能使用关键词",[14,440,442],{"id":441},"_13数据类型","1.3数据类型",[23,444,446],{"id":445},"_131整形","1.3.1整形",[35,448,449],{},"short 短整形 2",[35,451,452],{},"int 整形 4",[35,454,455],{},"long 长整形 win4 linux32位4 linux64位8",[35,457,458],{},"long long 长长整形 8",[35,460,461],{},"利用sizeof可以求数据类型占用的内存空间大小",[75,463,467],{"className":464,"code":465,"language":466,"meta":66,"style":66},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[81,468,469,485],{"__ignoreMap":66},[84,470,471,475,479,482],{"class":86,"line":87},[84,472,474],{"class":473},"szBVR","sizeof",[84,476,478],{"class":477},"sVt8B","(",[84,480,481],{"class":473},"int",[84,483,484],{"class":477},")\n",[84,486,487,489],{"class":86,"line":98},[84,488,474],{"class":473},[84,490,491],{"class":477},"(num)\n",[23,493,495],{"id":494},"_132浮点型","1.3.2浮点型",[35,497,498],{},"float 单精度 4节 7位有效数字",[35,500,501],{},"double 双精度 8节 15-16有效数字",[35,503,504],{},"默认情况下，输出一个小数，会显示6位有效数字",[35,506,507],{},"注意点：",[75,509,511],{"className":464,"code":510,"language":466,"meta":66,"style":66},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[81,512,513,536],{"__ignoreMap":66},[84,514,515,518,521,524,527,530,533],{"class":86,"line":87},[84,516,517],{"class":473},"float",[84,519,520],{"class":477}," f1",[84,522,523],{"class":473},"=",[84,525,526],{"class":94},"3.14",[84,528,529],{"class":473},"f",[84,531,532],{"class":477},";",[84,534,535],{"class":328}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[84,537,538,540,543,545,548,551,554,556],{"class":86,"line":98},[84,539,517],{"class":473},[84,541,542],{"class":477}," f2",[84,544,523],{"class":473},[84,546,547],{"class":94},"3",[84,549,550],{"class":473},"e",[84,552,553],{"class":94},"2",[84,555,532],{"class":477},[84,557,558],{"class":328}," \u002F\u002F科学记数法\n",[23,560,562],{"id":561},"_133字符型","1.3.3字符型",[75,564,566],{"className":464,"code":565,"language":466,"meta":66,"style":66},"char ch='a'\n",[81,567,568],{"__ignoreMap":66},[84,569,570,573,576,578],{"class":86,"line":87},[84,571,572],{"class":473},"char",[84,574,575],{"class":477}," ch",[84,577,523],{"class":473},[84,579,580],{"class":104},"'a'\n",[35,582,507],{},[28,584,585,588,591,594],{},[31,586,587],{},"在显示字符型变量时，只能单引号，双引号x",[31,589,590],{},"单引号内只能一个字符，不能字符串",[31,592,593],{},"c和c++字符型变量只占用一个字符",[31,595,596],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[35,598,599],{},"ASCII码大致由以下两部分组成：",[28,601,602,605],{},[31,603,604],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[31,606,607],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[35,609,610],{},"ASCII码表格：",[612,613,614,658],"table",{},[615,616,617],"thead",{},[618,619,620,628,633,637,642,646,650,654],"tr",{},[621,622,623,627],"th",{},[624,625,626],"strong",{},"ASCII","值",[621,629,630],{},[624,631,632],{},"控制字符",[621,634,635,627],{},[624,636,626],{},[621,638,639],{},[624,640,641],{},"字符",[621,643,644,627],{},[624,645,626],{},[621,647,648],{},[624,649,641],{},[621,651,652,627],{},[624,653,626],{},[621,655,656],{},[624,657,641],{},[659,660,661,688,713,738,763,788,813,838,864,889,915,941,967,992,1018,1044,1070,1094,1119,1144,1169,1194,1219,1244,1269,1294,1319,1345,1370,1395,1420,1446],"tbody",{},[618,662,663,667,670,673,676,679,682,685],{},[664,665,666],"td",{},"0",[664,668,669],{},"NUT",[664,671,672],{},"32",[664,674,675],{},"(space)",[664,677,678],{},"64",[664,680,681],{},"@",[664,683,684],{},"96",[664,686,687],{},"、",[618,689,690,693,696,699,702,705,708,711],{},[664,691,692],{},"1",[664,694,695],{},"SOH",[664,697,698],{},"33",[664,700,701],{},"!",[664,703,704],{},"65",[664,706,707],{},"A",[664,709,710],{},"97",[664,712,39],{},[618,714,715,717,720,723,726,729,732,735],{},[664,716,553],{},[664,718,719],{},"STX",[664,721,722],{},"34",[664,724,725],{},"\"",[664,727,728],{},"66",[664,730,731],{},"B",[664,733,734],{},"98",[664,736,737],{},"b",[618,739,740,742,745,748,751,754,757,760],{},[664,741,547],{},[664,743,744],{},"ETX",[664,746,747],{},"35",[664,749,750],{},"#",[664,752,753],{},"67",[664,755,756],{},"C",[664,758,759],{},"99",[664,761,762],{},"c",[618,764,765,767,770,773,776,779,782,785],{},[664,766,140],{},[664,768,769],{},"EOT",[664,771,772],{},"36",[664,774,775],{},"$",[664,777,778],{},"68",[664,780,781],{},"D",[664,783,784],{},"100",[664,786,787],{},"d",[618,789,790,793,796,799,802,805,808,811],{},[664,791,792],{},"5",[664,794,795],{},"ENQ",[664,797,798],{},"37",[664,800,801],{},"%",[664,803,804],{},"69",[664,806,807],{},"E",[664,809,810],{},"101",[664,812,550],{},[618,814,815,818,821,824,827,830,833,836],{},[664,816,817],{},"6",[664,819,820],{},"ACK",[664,822,823],{},"38",[664,825,826],{},"&",[664,828,829],{},"70",[664,831,832],{},"F",[664,834,835],{},"102",[664,837,529],{},[618,839,840,843,846,849,852,855,858,861],{},[664,841,842],{},"7",[664,844,845],{},"BEL",[664,847,848],{},"39",[664,850,851],{},",",[664,853,854],{},"71",[664,856,857],{},"G",[664,859,860],{},"103",[664,862,863],{},"g",[618,865,866,869,872,875,877,880,883,886],{},[664,867,868],{},"8",[664,870,871],{},"BS",[664,873,874],{},"40",[664,876,478],{},[664,878,879],{},"72",[664,881,882],{},"H",[664,884,885],{},"104",[664,887,888],{},"h",[618,890,891,894,897,900,903,906,909,912],{},[664,892,893],{},"9",[664,895,896],{},"HT",[664,898,899],{},"41",[664,901,902],{},")",[664,904,905],{},"73",[664,907,908],{},"I",[664,910,911],{},"105",[664,913,914],{},"i",[618,916,917,920,923,926,929,932,935,938],{},[664,918,919],{},"10",[664,921,922],{},"LF",[664,924,925],{},"42",[664,927,928],{},"*",[664,930,931],{},"74",[664,933,934],{},"J",[664,936,937],{},"106",[664,939,940],{},"j",[618,942,943,946,949,952,955,958,961,964],{},[664,944,945],{},"11",[664,947,948],{},"VT",[664,950,951],{},"43",[664,953,954],{},"+",[664,956,957],{},"75",[664,959,960],{},"K",[664,962,963],{},"107",[664,965,966],{},"k",[618,968,969,972,975,978,980,983,986,989],{},[664,970,971],{},"12",[664,973,974],{},"FF",[664,976,977],{},"44",[664,979,851],{},[664,981,982],{},"76",[664,984,985],{},"L",[664,987,988],{},"108",[664,990,991],{},"l",[618,993,994,997,1000,1003,1006,1009,1012,1015],{},[664,995,996],{},"13",[664,998,999],{},"CR",[664,1001,1002],{},"45",[664,1004,1005],{},"-",[664,1007,1008],{},"77",[664,1010,1011],{},"M",[664,1013,1014],{},"109",[664,1016,1017],{},"m",[618,1019,1020,1023,1026,1029,1032,1035,1038,1041],{},[664,1021,1022],{},"14",[664,1024,1025],{},"SO",[664,1027,1028],{},"46",[664,1030,1031],{},".",[664,1033,1034],{},"78",[664,1036,1037],{},"N",[664,1039,1040],{},"110",[664,1042,1043],{},"n",[618,1045,1046,1049,1052,1055,1058,1061,1064,1067],{},[664,1047,1048],{},"15",[664,1050,1051],{},"SI",[664,1053,1054],{},"47",[664,1056,1057],{},"\u002F",[664,1059,1060],{},"79",[664,1062,1063],{},"O",[664,1065,1066],{},"111",[664,1068,1069],{},"o",[618,1071,1072,1075,1078,1081,1083,1086,1089,1092],{},[664,1073,1074],{},"16",[664,1076,1077],{},"DLE",[664,1079,1080],{},"48",[664,1082,666],{},[664,1084,1085],{},"80",[664,1087,1088],{},"P",[664,1090,1091],{},"112",[664,1093,35],{},[618,1095,1096,1099,1102,1105,1107,1110,1113,1116],{},[664,1097,1098],{},"17",[664,1100,1101],{},"DCI",[664,1103,1104],{},"49",[664,1106,692],{},[664,1108,1109],{},"81",[664,1111,1112],{},"Q",[664,1114,1115],{},"113",[664,1117,1118],{},"q",[618,1120,1121,1124,1127,1130,1132,1135,1138,1141],{},[664,1122,1123],{},"18",[664,1125,1126],{},"DC2",[664,1128,1129],{},"50",[664,1131,553],{},[664,1133,1134],{},"82",[664,1136,1137],{},"R",[664,1139,1140],{},"114",[664,1142,1143],{},"r",[618,1145,1146,1149,1152,1155,1157,1160,1163,1166],{},[664,1147,1148],{},"19",[664,1150,1151],{},"DC3",[664,1153,1154],{},"51",[664,1156,547],{},[664,1158,1159],{},"83",[664,1161,1162],{},"S",[664,1164,1165],{},"115",[664,1167,1168],{},"s",[618,1170,1171,1174,1177,1180,1182,1185,1188,1191],{},[664,1172,1173],{},"20",[664,1175,1176],{},"DC4",[664,1178,1179],{},"52",[664,1181,140],{},[664,1183,1184],{},"84",[664,1186,1187],{},"T",[664,1189,1190],{},"116",[664,1192,1193],{},"t",[618,1195,1196,1199,1202,1205,1207,1210,1213,1216],{},[664,1197,1198],{},"21",[664,1200,1201],{},"NAK",[664,1203,1204],{},"53",[664,1206,792],{},[664,1208,1209],{},"85",[664,1211,1212],{},"U",[664,1214,1215],{},"117",[664,1217,1218],{},"u",[618,1220,1221,1224,1227,1230,1232,1235,1238,1241],{},[664,1222,1223],{},"22",[664,1225,1226],{},"SYN",[664,1228,1229],{},"54",[664,1231,817],{},[664,1233,1234],{},"86",[664,1236,1237],{},"V",[664,1239,1240],{},"118",[664,1242,1243],{},"v",[618,1245,1246,1249,1252,1255,1257,1260,1263,1266],{},[664,1247,1248],{},"23",[664,1250,1251],{},"TB",[664,1253,1254],{},"55",[664,1256,842],{},[664,1258,1259],{},"87",[664,1261,1262],{},"W",[664,1264,1265],{},"119",[664,1267,1268],{},"w",[618,1270,1271,1274,1277,1280,1282,1285,1288,1291],{},[664,1272,1273],{},"24",[664,1275,1276],{},"CAN",[664,1278,1279],{},"56",[664,1281,868],{},[664,1283,1284],{},"88",[664,1286,1287],{},"X",[664,1289,1290],{},"120",[664,1292,1293],{},"x",[618,1295,1296,1299,1302,1305,1307,1310,1313,1316],{},[664,1297,1298],{},"25",[664,1300,1301],{},"EM",[664,1303,1304],{},"57",[664,1306,893],{},[664,1308,1309],{},"89",[664,1311,1312],{},"Y",[664,1314,1315],{},"121",[664,1317,1318],{},"y",[618,1320,1321,1324,1327,1330,1333,1336,1339,1342],{},[664,1322,1323],{},"26",[664,1325,1326],{},"SUB",[664,1328,1329],{},"58",[664,1331,1332],{},":",[664,1334,1335],{},"90",[664,1337,1338],{},"Z",[664,1340,1341],{},"122",[664,1343,1344],{},"z",[618,1346,1347,1350,1353,1356,1358,1361,1364,1367],{},[664,1348,1349],{},"27",[664,1351,1352],{},"ESC",[664,1354,1355],{},"59",[664,1357,532],{},[664,1359,1360],{},"91",[664,1362,1363],{},"[",[664,1365,1366],{},"123",[664,1368,1369],{},"{",[618,1371,1372,1375,1378,1381,1384,1387,1389,1392],{},[664,1373,1374],{},"28",[664,1376,1377],{},"FS",[664,1379,1380],{},"60",[664,1382,1383],{},"\u003C",[664,1385,1386],{},"92",[664,1388,1057],{},[664,1390,1391],{},"124",[664,1393,1394],{},"|",[618,1396,1397,1400,1403,1406,1408,1411,1414,1417],{},[664,1398,1399],{},"29",[664,1401,1402],{},"GS",[664,1404,1405],{},"61",[664,1407,523],{},[664,1409,1410],{},"93",[664,1412,1413],{},"]",[664,1415,1416],{},"125",[664,1418,1419],{},"}",[618,1421,1422,1425,1428,1431,1434,1437,1440,1443],{},[664,1423,1424],{},"30",[664,1426,1427],{},"RS",[664,1429,1430],{},"62",[664,1432,1433],{},">",[664,1435,1436],{},"94",[664,1438,1439],{},"^",[664,1441,1442],{},"126",[664,1444,1445],{},"`",[618,1447,1448,1451,1454,1457,1460,1463,1466,1469],{},[664,1449,1450],{},"31",[664,1452,1453],{},"US",[664,1455,1456],{},"63",[664,1458,1459],{},"?",[664,1461,1462],{},"95",[664,1464,1465],{},"_",[664,1467,1468],{},"127",[664,1470,1471],{},"DEL",[35,1473,1474,1475,1478],{},"ASCII 码大致由以下",[624,1476,1477],{},"两部分组","成：",[1480,1481,1482,1489],"ul",{},[31,1483,1484,1485,1488],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[624,1486,1487],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[31,1490,1491,1492,1495],{},"ASCII 打印字符：数字 ",[624,1493,1494],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[23,1497,1499],{"id":1498},"_134转义字符","1.3.4转义字符",[75,1501,1503],{"className":464,"code":1502,"language":466,"meta":66,"style":66},"\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",[81,1504,1505,1510,1526,1540,1545,1558,1563],{"__ignoreMap":66},[84,1506,1507],{"class":86,"line":87},[84,1508,1509],{"class":328},"\u002F\u002F换行符\n",[84,1511,1512,1515,1518,1521,1523],{"class":86,"line":98},[84,1513,1514],{"class":477},"cout ",[84,1516,1517],{"class":473},"\u003C\u003C",[84,1519,1520],{"class":104},"\"hello world\u002Fn\"",[84,1522,532],{"class":477},[84,1524,1525],{"class":328}," \u002F\u002F就等同于如下：\n",[84,1527,1528,1530,1532,1535,1537],{"class":86,"line":70},[84,1529,1514],{"class":477},[84,1531,1517],{"class":473},[84,1533,1534],{"class":104},"\"hello world\"",[84,1536,1517],{"class":473},[84,1538,1539],{"class":477},"endl;\n",[84,1541,1542],{"class":86,"line":120},[84,1543,1544],{"class":328},"\u002F\u002F反斜杠\n",[84,1546,1547,1549,1551,1554,1556],{"class":86,"line":131},[84,1548,1514],{"class":477},[84,1550,1517],{"class":473},[84,1552,1553],{"class":104},"\"\u002F\u002F\"",[84,1555,1517],{"class":473},[84,1557,1539],{"class":477},[84,1559,1560],{"class":86,"line":145},[84,1561,1562],{"class":328},"\u002F\u002F水平制表符\n",[84,1564,1565,1567,1569,1572,1575,1578,1580,1583],{"class":86,"line":156},[84,1566,1514],{"class":477},[84,1568,1517],{"class":473},[84,1570,1571],{"class":104},"\"aaaa",[84,1573,1574],{"class":94},"\\t",[84,1576,1577],{"class":104},"helloworld\"",[84,1579,1517],{"class":473},[84,1581,1582],{"class":477},"endl;",[84,1584,1585],{"class":328}," \u002F\u002F输出窗口时有对齐效果\n",[23,1587,1589],{"id":1588},"_135字符串型","1.3.5字符串型",[35,1591,1592,1593,1595],{},"char 变量名",[84,1594],{},"=\"字符串值\"",[75,1597,1599],{"className":464,"code":1598,"language":466,"meta":66,"style":66},"\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",[81,1600,1601,1606,1611,1616,1621,1635,1648,1653,1658,1669],{"__ignoreMap":66},[84,1602,1603],{"class":86,"line":87},[84,1604,1605],{"class":328},"\u002F\u002Fc风格字符串\n",[84,1607,1608],{"class":86,"line":98},[84,1609,1610],{"class":328},"\u002F\u002F注意事项：\n",[84,1612,1613],{"class":86,"line":70},[84,1614,1615],{"class":328},"\u002F\u002F1.char字符串名[]\n",[84,1617,1618],{"class":86,"line":120},[84,1619,1620],{"class":328},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[84,1622,1623,1625,1628,1630,1632],{"class":86,"line":131},[84,1624,572],{"class":473},[84,1626,1627],{"class":477}," str[]",[84,1629,523],{"class":473},[84,1631,1534],{"class":104},[84,1633,1634],{"class":477},";\n",[84,1636,1637,1639,1641,1644,1646],{"class":86,"line":145},[84,1638,1514],{"class":477},[84,1640,1517],{"class":473},[84,1642,1643],{"class":477},"str",[84,1645,1517],{"class":473},[84,1647,1539],{"class":477},[84,1649,1650],{"class":86,"line":156},[84,1651,1652],{"class":328},"\u002F\u002Fc++风格字符串\n",[84,1654,1655],{"class":86,"line":164},[84,1656,1657],{"class":328},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[84,1659,1660,1663,1665,1667],{"class":86,"line":175},[84,1661,1662],{"class":477},"string str2",[84,1664,523],{"class":473},[84,1666,1534],{"class":104},[84,1668,1634],{"class":477},[84,1670,1671,1673,1675,1678,1680],{"class":86,"line":185},[84,1672,1514],{"class":477},[84,1674,1517],{"class":473},[84,1676,1677],{"class":477},"str2",[84,1679,1517],{"class":473},[84,1681,1539],{"class":477},[23,1683,1685],{"id":1684},"_136布尔类型bool","1.3.6布尔类型bool",[75,1687,1689],{"className":464,"code":1688,"language":466,"meta":66,"style":66},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[81,1690,1691,1706],{"__ignoreMap":66},[84,1692,1693,1696,1699,1701,1704],{"class":86,"line":87},[84,1694,1695],{"class":473},"bool",[84,1697,1698],{"class":477}," flag",[84,1700,523],{"class":473},[84,1702,1703],{"class":94},"true",[84,1705,1634],{"class":477},[84,1707,1708,1711,1714,1717,1719,1721],{"class":86,"line":98},[84,1709,1710],{"class":477},"cout",[84,1712,1713],{"class":473},"\u003C\u003Csizeof",[84,1715,1716],{"class":477},"(flag)",[84,1718,1517],{"class":473},[84,1720,1582],{"class":477},[84,1722,1723],{"class":328}," \u002F\u002F查看布尔占内存空间\n",[14,1725,1727],{"id":1726},"_14键盘输入cin","1.4键盘输入cin",[75,1729,1731],{"className":464,"code":1730,"language":466,"meta":66,"style":66},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[81,1732,1733,1746,1763,1774],{"__ignoreMap":66},[84,1734,1735,1737,1740,1742,1744],{"class":86,"line":87},[84,1736,481],{"class":473},[84,1738,1739],{"class":477}," a",[84,1741,523],{"class":473},[84,1743,666],{"class":94},[84,1745,1634],{"class":477},[84,1747,1748,1750,1752,1755,1757,1759,1761],{"class":86,"line":98},[84,1749,1710],{"class":477},[84,1751,1517],{"class":473},[84,1753,1754],{"class":104},"\"请给整型变量a赋值\"",[84,1756,1517],{"class":473},[84,1758,39],{"class":477},[84,1760,1517],{"class":473},[84,1762,1539],{"class":477},[84,1764,1765,1768,1771],{"class":86,"line":70},[84,1766,1767],{"class":477},"cin ",[84,1769,1770],{"class":473},">>",[84,1772,1773],{"class":477}," a;\n",[84,1775,1776,1778,1780,1783,1786,1788,1790],{"class":86,"line":120},[84,1777,1514],{"class":477},[84,1779,1517],{"class":473},[84,1781,1782],{"class":104}," \"整型变量a=\"",[84,1784,1785],{"class":473}," \u003C\u003C",[84,1787,39],{"class":477},[84,1789,1517],{"class":473},[84,1791,1539],{"class":477},[14,1793,1795],{"id":1794},"_15运算符","1.5运算符",[23,1797,1799],{"id":1798},"_151算术运算符","1.5.1算术运算符",[35,1801,1802,1805],{},[64,1803],{"alt":66,"src":1804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[28,1807,1808,1811,1814],{},[31,1809,1810],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[31,1812,1813],{},"两个小数不可以做取模运算",[31,1815,1816],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[23,1818,1820],{"id":1819},"_152赋值运算符","1.5.2赋值运算符",[35,1822,1823],{},[64,1824],{"alt":66,"src":1825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[23,1827,1829],{"id":1828},"_153比较运算符","1.5.3比较运算符",[35,1831,1832],{},[64,1833],{"alt":66,"src":1834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[23,1836,1838],{"id":1837},"_154逻辑运算符","1.5.4逻辑运算符",[35,1840,1841],{},[64,1842],{"alt":66,"src":1843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1845,1847],{"id":1846},"_16程序流程结构","1.6程序流程结构",[23,1849,1851],{"id":1850},"_161选择结构","1.6.1选择结构",[28,1853,1854],{},[31,1855,1856],{},"if语句\n单行、多行、多条件if语句",[75,1858,1860],{"className":464,"code":1859,"language":466,"meta":66,"style":66},"\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",[81,1861,1862,1867,1882,1887,1901,1906,1911,1920,1933,1937,1950,1954,1959,1963,1976,1980,1985,2005,2009,2022,2026,2055,2060,2077,2082,2087,2092,2106,2111],{"__ignoreMap":66},[84,1863,1864],{"class":86,"line":87},[84,1865,1866],{"class":328},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[84,1868,1869,1872,1875,1877,1880],{"class":86,"line":98},[84,1870,1871],{"class":473},"if",[84,1873,1874],{"class":477},"(score",[84,1876,1433],{"class":473},[84,1878,1879],{"class":94},"600",[84,1881,484],{"class":477},[84,1883,1884],{"class":86,"line":70},[84,1885,1886],{"class":477},"{\n",[84,1888,1889,1892,1894,1897,1899],{"class":86,"line":120},[84,1890,1891],{"class":477},"    cout",[84,1893,1517],{"class":473},[84,1895,1896],{"class":104},"'这是单行if语句'",[84,1898,1517],{"class":473},[84,1900,1539],{"class":477},[84,1902,1903],{"class":86,"line":131},[84,1904,1905],{"class":477},"}\n",[84,1907,1908],{"class":86,"line":145},[84,1909,1910],{"class":328},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[84,1912,1913,1915,1917],{"class":86,"line":156},[84,1914,1767],{"class":477},[84,1916,1770],{"class":473},[84,1918,1919],{"class":477}," score\n",[84,1921,1922,1924,1926,1929,1931],{"class":86,"line":164},[84,1923,1871],{"class":473},[84,1925,1874],{"class":477},[84,1927,1928],{"class":473},"\u003C=",[84,1930,1879],{"class":94},[84,1932,484],{"class":477},[84,1934,1935],{"class":86,"line":175},[84,1936,1886],{"class":477},[84,1938,1939,1941,1943,1946,1948],{"class":86,"line":185},[84,1940,1891],{"class":477},[84,1942,1770],{"class":473},[84,1944,1945],{"class":104},"\"小于等于600\"",[84,1947,1517],{"class":473},[84,1949,1539],{"class":477},[84,1951,1952],{"class":86,"line":195},[84,1953,1905],{"class":477},[84,1955,1956],{"class":86,"line":206},[84,1957,1958],{"class":473},"else\n",[84,1960,1961],{"class":86,"line":217},[84,1962,1886],{"class":477},[84,1964,1965,1967,1969,1972,1974],{"class":86,"line":227},[84,1966,1891],{"class":477},[84,1968,1770],{"class":473},[84,1970,1971],{"class":104},"\"大于600\"",[84,1973,1770],{"class":473},[84,1975,1539],{"class":477},[84,1977,1978],{"class":86,"line":238},[84,1979,1905],{"class":477},[84,1981,1982],{"class":86,"line":249},[84,1983,1984],{"class":328},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[84,1986,1987,1989,1992,1994,1996,1999,2001,2003],{"class":86,"line":262},[84,1988,1871],{"class":473},[84,1990,1991],{"class":477}," (",[84,1993,666],{"class":94},[84,1995,1383],{"class":473},[84,1997,1998],{"class":477},"num",[84,2000,1383],{"class":473},[84,2002,784],{"class":94},[84,2004,484],{"class":477},[84,2006,2007],{"class":86,"line":273},[84,2008,1886],{"class":477},[84,2010,2011,2013,2015,2018,2020],{"class":86,"line":283},[84,2012,1891],{"class":477},[84,2014,1517],{"class":473},[84,2016,2017],{"class":104},"\"小于100\"",[84,2019,1517],{"class":473},[84,2021,1539],{"class":477},[84,2023,2024],{"class":86,"line":294},[84,2025,1905],{"class":477},[84,2027,2029,2032,2035,2038,2041,2043,2046,2048,2050,2053],{"class":86,"line":2028},21,[84,2030,2031],{"class":473},"else",[84,2033,2034],{"class":473}," if",[84,2036,2037],{"class":477}," (nmu",[84,2039,2040],{"class":473},">=",[84,2042,784],{"class":94},[84,2044,2045],{"class":473},"&&",[84,2047,1998],{"class":477},[84,2049,1383],{"class":473},[84,2051,2052],{"class":94},"200",[84,2054,484],{"class":477},[84,2056,2058],{"class":86,"line":2057},22,[84,2059,1886],{"class":477},[84,2061,2063,2065,2067,2070,2072,2074],{"class":86,"line":2062},23,[84,2064,1891],{"class":477},[84,2066,1517],{"class":473},[84,2068,2069],{"class":104},"\"不小于100且小于200\"",[84,2071,1517],{"class":473},[84,2073,1582],{"class":477},[84,2075,2076],{"class":328}," \u002F\u002F可以无限else if,python中是elif：\n",[84,2078,2080],{"class":86,"line":2079},24,[84,2081,1905],{"class":477},[84,2083,2085],{"class":86,"line":2084},25,[84,2086,1958],{"class":473},[84,2088,2090],{"class":86,"line":2089},26,[84,2091,1886],{"class":477},[84,2093,2095,2097,2099,2102,2104],{"class":86,"line":2094},27,[84,2096,1891],{"class":477},[84,2098,1517],{"class":473},[84,2100,2101],{"class":104},"\"不小于200\"",[84,2103,1517],{"class":473},[84,2105,1539],{"class":477},[84,2107,2109],{"class":86,"line":2108},28,[84,2110,1905],{"class":477},[84,2112,2114],{"class":86,"line":2113},29,[84,2115,2116],{"class":328},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[28,2118,2119],{"start":98},[31,2120,2121],{},"三目运算符",[75,2123,2125],{"className":464,"code":2124,"language":466,"meta":66,"style":66},"\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",[81,2126,2127,2132,2137,2163,2185,2202,2207,2230,2245],{"__ignoreMap":66},[84,2128,2129],{"class":86,"line":87},[84,2130,2131],{"class":328},"\u002F\u002F创建三个变量a,b,c\n",[84,2133,2134],{"class":86,"line":98},[84,2135,2136],{"class":328},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[84,2138,2139,2141,2143,2145,2147,2150,2152,2154,2157,2159,2161],{"class":86,"line":70},[84,2140,481],{"class":473},[84,2142,1739],{"class":477},[84,2144,523],{"class":473},[84,2146,1173],{"class":94},[84,2148,2149],{"class":477},",b",[84,2151,523],{"class":473},[84,2153,919],{"class":94},[84,2155,2156],{"class":477},",c",[84,2158,523],{"class":473},[84,2160,666],{"class":94},[84,2162,1634],{"class":477},[84,2164,2165,2167,2169,2172,2174,2176,2178,2180,2182],{"class":86,"line":120},[84,2166,762],{"class":477},[84,2168,523],{"class":473},[84,2170,2171],{"class":477},"(a",[84,2173,1433],{"class":473},[84,2175,737],{"class":477},[84,2177,1459],{"class":473},[84,2179,39],{"class":477},[84,2181,1332],{"class":473},[84,2183,2184],{"class":477},"b)\n",[84,2186,2187,2189,2191,2194,2196,2198,2200],{"class":86,"line":131},[84,2188,1710],{"class":477},[84,2190,1517],{"class":473},[84,2192,2193],{"class":104},"\"c=\"",[84,2195,1517],{"class":473},[84,2197,762],{"class":477},[84,2199,1517],{"class":473},[84,2201,1539],{"class":477},[84,2203,2204],{"class":86,"line":145},[84,2205,2206],{"class":328},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[84,2208,2209,2211,2213,2215,2217,2219,2221,2224,2226,2228],{"class":86,"line":156},[84,2210,2171],{"class":477},[84,2212,1433],{"class":473},[84,2214,737],{"class":477},[84,2216,1459],{"class":473},[84,2218,39],{"class":477},[84,2220,1332],{"class":473},[84,2222,2223],{"class":477},"b)",[84,2225,523],{"class":473},[84,2227,784],{"class":94},[84,2229,1634],{"class":477},[84,2231,2232,2234,2236,2238,2240,2242],{"class":86,"line":164},[84,2233,1710],{"class":477},[84,2235,1517],{"class":473},[84,2237,39],{"class":477},[84,2239,1517],{"class":473},[84,2241,1582],{"class":477},[84,2243,2244],{"class":328}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[84,2246,2247,2249,2251,2253,2255,2257],{"class":86,"line":175},[84,2248,1710],{"class":477},[84,2250,1517],{"class":473},[84,2252,737],{"class":477},[84,2254,1517],{"class":473},[84,2256,1582],{"class":477},[84,2258,2259],{"class":328}," \u002F\u002F10   a>b,b还是原值\n",[28,2261,2262],{"start":70},[31,2263,2264],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[75,2266,2268],{"className":464,"code":2267,"language":466,"meta":66,"style":66},"\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",[81,2269,2270,2275,2283,2296,2306,2310,2324,2337,2347,2355,2360,2385,2406,2428,2449,2471,2492,2512,2517],{"__ignoreMap":66},[84,2271,2272],{"class":86,"line":87},[84,2273,2274],{"class":328},"\u002F\u002F案例-电影打分\n",[84,2276,2277,2280],{"class":86,"line":98},[84,2278,2279],{"class":473},"#include",[84,2281,2282],{"class":104},"\u003Ciostream>\n",[84,2284,2285,2288,2291,2294],{"class":86,"line":70},[84,2286,2287],{"class":473},"using",[84,2289,2290],{"class":473}," namespace",[84,2292,2293],{"class":90}," std",[84,2295,1634],{"class":477},[84,2297,2298,2300,2303],{"class":86,"line":120},[84,2299,481],{"class":473},[84,2301,2302],{"class":90}," main",[84,2304,2305],{"class":477},"()\n",[84,2307,2308],{"class":86,"line":131},[84,2309,1886],{"class":477},[84,2311,2312,2315,2318,2320,2322],{"class":86,"line":145},[84,2313,2314],{"class":473},"    int",[84,2316,2317],{"class":477}," score",[84,2319,523],{"class":473},[84,2321,666],{"class":94},[84,2323,1634],{"class":477},[84,2325,2326,2328,2330,2333,2335],{"class":86,"line":156},[84,2327,1891],{"class":477},[84,2329,1517],{"class":473},[84,2331,2332],{"class":104},"\"电影打分：\"",[84,2334,1517],{"class":473},[84,2336,1539],{"class":477},[84,2338,2339,2342,2344],{"class":86,"line":164},[84,2340,2341],{"class":477},"    cin",[84,2343,1770],{"class":473},[84,2345,2346],{"class":477},"score;\n",[84,2348,2349,2352],{"class":86,"line":175},[84,2350,2351],{"class":473},"    switch",[84,2353,2354],{"class":477},"(score)\n",[84,2356,2357],{"class":86,"line":185},[84,2358,2359],{"class":477},"    {\n",[84,2361,2362,2365,2368,2371,2373,2376,2378,2380,2383],{"class":86,"line":195},[84,2363,2364],{"class":473},"        case",[84,2366,2367],{"class":94}," 10",[84,2369,2370],{"class":477},":cout",[84,2372,1517],{"class":473},[84,2374,2375],{"class":104},"\"经典\"",[84,2377,1517],{"class":473},[84,2379,1582],{"class":477},[84,2381,2382],{"class":473},"break",[84,2384,1634],{"class":477},[84,2386,2387,2389,2392,2394,2396,2398,2400,2402,2404],{"class":86,"line":206},[84,2388,2364],{"class":473},[84,2390,2391],{"class":94}," 9",[84,2393,2370],{"class":477},[84,2395,1517],{"class":473},[84,2397,2375],{"class":104},[84,2399,1517],{"class":473},[84,2401,1582],{"class":477},[84,2403,2382],{"class":473},[84,2405,1634],{"class":477},[84,2407,2408,2410,2413,2415,2417,2420,2422,2424,2426],{"class":86,"line":217},[84,2409,2364],{"class":473},[84,2411,2412],{"class":94}," 8",[84,2414,2370],{"class":477},[84,2416,1517],{"class":473},[84,2418,2419],{"class":104},"\"非常好\"",[84,2421,1517],{"class":473},[84,2423,1582],{"class":477},[84,2425,2382],{"class":473},[84,2427,1634],{"class":477},[84,2429,2430,2432,2435,2437,2439,2441,2443,2445,2447],{"class":86,"line":227},[84,2431,2364],{"class":473},[84,2433,2434],{"class":94}," 7",[84,2436,2370],{"class":477},[84,2438,1517],{"class":473},[84,2440,2419],{"class":104},[84,2442,1517],{"class":473},[84,2444,1582],{"class":477},[84,2446,2382],{"class":473},[84,2448,1634],{"class":477},[84,2450,2451,2453,2456,2458,2460,2463,2465,2467,2469],{"class":86,"line":238},[84,2452,2364],{"class":473},[84,2454,2455],{"class":94}," 6",[84,2457,2370],{"class":477},[84,2459,1517],{"class":473},[84,2461,2462],{"class":104},"\"一般\"",[84,2464,1517],{"class":473},[84,2466,1582],{"class":477},[84,2468,2382],{"class":473},[84,2470,1634],{"class":477},[84,2472,2473,2475,2478,2480,2482,2484,2486,2488,2490],{"class":86,"line":249},[84,2474,2364],{"class":473},[84,2476,2477],{"class":94}," 5",[84,2479,2370],{"class":477},[84,2481,1517],{"class":473},[84,2483,2462],{"class":104},[84,2485,1517],{"class":473},[84,2487,1582],{"class":477},[84,2489,2382],{"class":473},[84,2491,1634],{"class":477},[84,2493,2494,2497,2499,2501,2504,2506,2508,2510],{"class":86,"line":262},[84,2495,2496],{"class":473},"        default",[84,2498,2370],{"class":477},[84,2500,1517],{"class":473},[84,2502,2503],{"class":104},"\"烂片\"",[84,2505,1517],{"class":473},[84,2507,1582],{"class":477},[84,2509,2382],{"class":473},[84,2511,1634],{"class":477},[84,2513,2514],{"class":86,"line":273},[84,2515,2516],{"class":477},"    }\n",[84,2518,2519],{"class":86,"line":283},[84,2520,1905],{"class":477},[35,2522,2523],{},"if和switch区别：",[1480,2525,2526,2529],{},[31,2527,2528],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[31,2530,2531],{},"switch优点：结构清晰，执行效率高",[23,2533,2535],{"id":2534},"_162循环结构","1.6.2循环结构",[28,2537,2538],{},[31,2539,2540],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[75,2542,2544],{"className":464,"code":2543,"language":466,"meta":66,"style":66},"\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",[81,2545,2546,2551,2559,2563,2576,2590,2594,2614,2624,2628,2640],{"__ignoreMap":66},[84,2547,2548],{"class":86,"line":87},[84,2549,2550],{"class":328},"\u002F\u002F打印0-9数字\n",[84,2552,2553,2555,2557],{"class":86,"line":98},[84,2554,481],{"class":473},[84,2556,2302],{"class":90},[84,2558,2305],{"class":477},[84,2560,2561],{"class":86,"line":70},[84,2562,1886],{"class":477},[84,2564,2565,2567,2570,2572,2574],{"class":86,"line":120},[84,2566,2314],{"class":473},[84,2568,2569],{"class":477}," num",[84,2571,523],{"class":473},[84,2573,666],{"class":94},[84,2575,1634],{"class":477},[84,2577,2578,2581,2584,2586,2588],{"class":86,"line":131},[84,2579,2580],{"class":473},"    while",[84,2582,2583],{"class":477},"(num",[84,2585,1383],{"class":473},[84,2587,919],{"class":94},[84,2589,484],{"class":477},[84,2591,2592],{"class":86,"line":145},[84,2593,2359],{"class":477},[84,2595,2596,2599,2602,2604,2606,2608,2611],{"class":86,"line":156},[84,2597,2598],{"class":90},"       std",[84,2600,2601],{"class":477},"::cout",[84,2603,1517],{"class":473},[84,2605,1998],{"class":477},[84,2607,1517],{"class":473},[84,2609,2610],{"class":90},"std",[84,2612,2613],{"class":477},"::endl;\n",[84,2615,2616,2619,2622],{"class":86,"line":164},[84,2617,2618],{"class":477},"        num",[84,2620,2621],{"class":473},"++",[84,2623,1634],{"class":477},[84,2625,2626],{"class":86,"line":175},[84,2627,2516],{"class":477},[84,2629,2630,2633,2635,2638],{"class":86,"line":185},[84,2631,2632],{"class":90},"    system",[84,2634,478],{"class":477},[84,2636,2637],{"class":104},"\"pause\"",[84,2639,484],{"class":477},[84,2641,2642],{"class":86,"line":195},[84,2643,1905],{"class":477},[35,2645,2646],{},"注意：写好循环条件，避免死循环情况",[75,2648,2650],{"className":464,"code":2649,"language":466,"meta":66,"style":66},"\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",[81,2651,2652,2657,2664,2671,2681,2689,2693,2698,2725,2730,2735,2743,2770,2775,2780,2793,2803,2807,2817,2822,2835,2840,2854,2859,2874,2878,2891,2895,2900,2904,2918,2926,2931,2937,2943,2948],{"__ignoreMap":66},[84,2653,2654],{"class":86,"line":87},[84,2655,2656],{"class":328},"\u002F\u002F循环结构-猜数字\n",[84,2658,2659,2661],{"class":86,"line":98},[84,2660,2279],{"class":473},[84,2662,2663],{"class":104}," \u003Ciostream>\n",[84,2665,2666,2668],{"class":86,"line":70},[84,2667,2279],{"class":473},[84,2669,2670],{"class":104}," \u003Cctime>\n",[84,2672,2673,2675,2677,2679],{"class":86,"line":120},[84,2674,2287],{"class":473},[84,2676,2290],{"class":473},[84,2678,2293],{"class":90},[84,2680,1634],{"class":477},[84,2682,2683,2685,2687],{"class":86,"line":131},[84,2684,481],{"class":473},[84,2686,2302],{"class":90},[84,2688,2305],{"class":477},[84,2690,2691],{"class":86,"line":145},[84,2692,1886],{"class":477},[84,2694,2695],{"class":86,"line":156},[84,2696,2697],{"class":328},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[84,2699,2700,2703,2706,2709,2712,2714,2717,2719,2722],{"class":86,"line":164},[84,2701,2702],{"class":90},"    srand",[84,2704,2705],{"class":477},"((",[84,2707,2708],{"class":473},"unsigned",[84,2710,2711],{"class":473}," int",[84,2713,902],{"class":477},[84,2715,2716],{"class":90},"time",[84,2718,478],{"class":477},[84,2720,2721],{"class":94},"NULL",[84,2723,2724],{"class":477},"));\n",[84,2726,2727],{"class":86,"line":175},[84,2728,2729],{"emptyLinePlaceholder":403},"\n",[84,2731,2732],{"class":86,"line":185},[84,2733,2734],{"class":328},"    \u002F\u002F1.系统生成随机数\n",[84,2736,2737,2740],{"class":86,"line":195},[84,2738,2739],{"class":328},"    \u002F\u002Frand()%100",[84,2741,2742],{"class":328}," \u002F\u002F生成0-99的随机数\n",[84,2744,2745,2747,2749,2751,2754,2757,2759,2761,2763,2765,2767],{"class":86,"line":206},[84,2746,2314],{"class":473},[84,2748,2569],{"class":477},[84,2750,523],{"class":473},[84,2752,2753],{"class":90},"rand",[84,2755,2756],{"class":477},"()",[84,2758,801],{"class":473},[84,2760,784],{"class":94},[84,2762,954],{"class":473},[84,2764,692],{"class":94},[84,2766,532],{"class":477},[84,2768,2769],{"class":328}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[84,2771,2772],{"class":86,"line":217},[84,2773,2774],{"class":328},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[84,2776,2777],{"class":86,"line":227},[84,2778,2779],{"class":328},"    \u002F\u002F2.玩家猜测\n",[84,2781,2782,2784,2787,2789,2791],{"class":86,"line":238},[84,2783,2314],{"class":473},[84,2785,2786],{"class":477}," val",[84,2788,523],{"class":473},[84,2790,666],{"class":94},[84,2792,1634],{"class":477},[84,2794,2795,2797,2799,2801],{"class":86,"line":249},[84,2796,2580],{"class":473},[84,2798,1991],{"class":477},[84,2800,692],{"class":94},[84,2802,484],{"class":477},[84,2804,2805],{"class":86,"line":262},[84,2806,2359],{"class":477},[84,2808,2809,2812,2814],{"class":86,"line":273},[84,2810,2811],{"class":477},"        cin",[84,2813,1770],{"class":473},[84,2815,2816],{"class":477},"val;\n",[84,2818,2819],{"class":86,"line":283},[84,2820,2821],{"class":328},"        \u002F\u002F3.判断玩家猜测\n",[84,2823,2824,2827,2830,2832],{"class":86,"line":294},[84,2825,2826],{"class":473},"        if",[84,2828,2829],{"class":477},"(val",[84,2831,1383],{"class":473},[84,2833,2834],{"class":477},"num) \n",[84,2836,2837],{"class":86,"line":2028},[84,2838,2839],{"class":477},"        {\n",[84,2841,2842,2845,2847,2850,2852],{"class":86,"line":2057},[84,2843,2844],{"class":477},"            cout",[84,2846,1517],{"class":473},[84,2848,2849],{"class":104},"\"猜小了！\"",[84,2851,1517],{"class":473},[84,2853,1539],{"class":477},[84,2855,2856],{"class":86,"line":2062},[84,2857,2858],{"class":477},"        }\n",[84,2860,2861,2864,2866,2869,2871],{"class":86,"line":2079},[84,2862,2863],{"class":473},"        else",[84,2865,2034],{"class":473},[84,2867,2868],{"class":477}," (val",[84,2870,1433],{"class":473},[84,2872,2873],{"class":477},"num)\n",[84,2875,2876],{"class":86,"line":2084},[84,2877,2839],{"class":477},[84,2879,2880,2882,2884,2887,2889],{"class":86,"line":2089},[84,2881,2844],{"class":477},[84,2883,1517],{"class":473},[84,2885,2886],{"class":104},"\"猜大了！\"",[84,2888,1517],{"class":473},[84,2890,1539],{"class":477},[84,2892,2893],{"class":86,"line":2094},[84,2894,2858],{"class":477},[84,2896,2897],{"class":86,"line":2108},[84,2898,2899],{"class":473},"        else\n",[84,2901,2902],{"class":86,"line":2113},[84,2903,2839],{"class":477},[84,2905,2907,2909,2911,2914,2916],{"class":86,"line":2906},30,[84,2908,2844],{"class":477},[84,2910,1517],{"class":473},[84,2912,2913],{"class":104},"\"猜对了！\"",[84,2915,1517],{"class":473},[84,2917,1539],{"class":477},[84,2919,2921,2924],{"class":86,"line":2920},31,[84,2922,2923],{"class":473},"            break",[84,2925,1634],{"class":477},[84,2927,2929],{"class":86,"line":2928},32,[84,2930,2858],{"class":477},[84,2932,2934],{"class":86,"line":2933},33,[84,2935,2936],{"class":328},"        \u002F\u002F猜对 退出游戏\n",[84,2938,2940],{"class":86,"line":2939},34,[84,2941,2942],{"class":328},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[84,2944,2946],{"class":86,"line":2945},35,[84,2947,2516],{"class":477},[84,2949,2951],{"class":86,"line":2950},36,[84,2952,1905],{"class":477},[28,2954,2955],{"start":98},[31,2956,2957,2958,2961],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[624,2959,2960],{},"do...while会先执行一次循环语句","，在判断循环语句",[75,2963,2965],{"className":464,"code":2964,"language":466,"meta":66,"style":66},"\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",[81,2966,2967,2972,2980,2984,2996,3004,3008,3025,3032,3036,3049,3059],{"__ignoreMap":66},[84,2968,2969],{"class":86,"line":87},[84,2970,2971],{"class":328},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[84,2973,2974,2976,2978],{"class":86,"line":98},[84,2975,481],{"class":473},[84,2977,2302],{"class":90},[84,2979,2305],{"class":477},[84,2981,2982],{"class":86,"line":70},[84,2983,1886],{"class":477},[84,2985,2986,2988,2990,2992,2994],{"class":86,"line":120},[84,2987,2314],{"class":473},[84,2989,2569],{"class":477},[84,2991,523],{"class":473},[84,2993,666],{"class":94},[84,2995,1634],{"class":477},[84,2997,2998,3001],{"class":86,"line":131},[84,2999,3000],{"class":473},"    do",[84,3002,3003],{"class":477}," \n",[84,3005,3006],{"class":86,"line":145},[84,3007,2359],{"class":477},[84,3009,3010,3013,3015,3017,3019,3021,3023],{"class":86,"line":156},[84,3011,3012],{"class":90},"        std",[84,3014,2601],{"class":477},[84,3016,1517],{"class":473},[84,3018,1998],{"class":477},[84,3020,1517],{"class":473},[84,3022,2610],{"class":90},[84,3024,2613],{"class":477},[84,3026,3027,3029],{"class":86,"line":164},[84,3028,2618],{"class":477},[84,3030,3031],{"class":473},"++\n",[84,3033,3034],{"class":86,"line":175},[84,3035,2516],{"class":477},[84,3037,3038,3040,3042,3044,3046],{"class":86,"line":185},[84,3039,2580],{"class":473},[84,3041,2583],{"class":477},[84,3043,1383],{"class":473},[84,3045,919],{"class":94},[84,3047,3048],{"class":477},");\n",[84,3050,3051,3053,3055,3057],{"class":86,"line":195},[84,3052,2632],{"class":90},[84,3054,478],{"class":477},[84,3056,2637],{"class":104},[84,3058,3048],{"class":477},[84,3060,3061],{"class":86,"line":206},[84,3062,1905],{"class":477},[35,3064,3065],{},"案例-水仙花数",[35,3067,3068],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[35,3070,3071],{},"例如：1^3+5^3+3^3=153",[35,3073,3074],{},"请用do...while语句，求出所有3位数的水仙花数",[75,3076,3078],{"className":464,"code":3077,"language":466,"meta":66,"style":66},"#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",[81,3079,3080,3086,3096,3104,3108,3113,3125,3131,3135,3140,3156,3172,3188,3203,3222,3237,3285,3289,3301,3305,3313,3317,3331],{"__ignoreMap":66},[84,3081,3082,3084],{"class":86,"line":87},[84,3083,2279],{"class":473},[84,3085,2663],{"class":104},[84,3087,3088,3090,3092,3094],{"class":86,"line":98},[84,3089,2287],{"class":473},[84,3091,2290],{"class":473},[84,3093,2293],{"class":90},[84,3095,1634],{"class":477},[84,3097,3098,3100,3102],{"class":86,"line":70},[84,3099,481],{"class":473},[84,3101,2302],{"class":90},[84,3103,2305],{"class":477},[84,3105,3106],{"class":86,"line":120},[84,3107,1886],{"class":477},[84,3109,3110],{"class":86,"line":131},[84,3111,3112],{"class":328},"    \u002F\u002F1.先打印所有三位数字\n",[84,3114,3115,3117,3119,3121,3123],{"class":86,"line":145},[84,3116,2314],{"class":473},[84,3118,2569],{"class":477},[84,3120,523],{"class":473},[84,3122,784],{"class":94},[84,3124,1634],{"class":477},[84,3126,3127,3129],{"class":86,"line":156},[84,3128,3000],{"class":473},[84,3130,3003],{"class":477},[84,3132,3133],{"class":86,"line":164},[84,3134,2359],{"class":477},[84,3136,3137],{"class":86,"line":175},[84,3138,3139],{"class":328},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[84,3141,3142,3145,3147,3149,3151,3153],{"class":86,"line":185},[84,3143,3144],{"class":473},"        int",[84,3146,1739],{"class":477},[84,3148,523],{"class":473},[84,3150,666],{"class":94},[84,3152,532],{"class":477},[84,3154,3155],{"class":328}," \u002F\u002F个位\n",[84,3157,3158,3160,3163,3165,3167,3169],{"class":86,"line":195},[84,3159,3144],{"class":473},[84,3161,3162],{"class":477}," b",[84,3164,523],{"class":473},[84,3166,666],{"class":94},[84,3168,532],{"class":477},[84,3170,3171],{"class":328}," \u002F\u002F十位\n",[84,3173,3174,3176,3179,3181,3183,3185],{"class":86,"line":206},[84,3175,3144],{"class":473},[84,3177,3178],{"class":477}," c",[84,3180,523],{"class":473},[84,3182,666],{"class":94},[84,3184,532],{"class":477},[84,3186,3187],{"class":328}," \u002F\u002F百位\n",[84,3189,3190,3193,3195,3197,3199,3201],{"class":86,"line":217},[84,3191,3192],{"class":477},"        a",[84,3194,523],{"class":473},[84,3196,1998],{"class":477},[84,3198,801],{"class":473},[84,3200,919],{"class":94},[84,3202,1634],{"class":477},[84,3204,3205,3208,3210,3212,3214,3216,3218,3220],{"class":86,"line":227},[84,3206,3207],{"class":477},"        b",[84,3209,523],{"class":473},[84,3211,1998],{"class":477},[84,3213,1057],{"class":473},[84,3215,919],{"class":94},[84,3217,801],{"class":473},[84,3219,919],{"class":94},[84,3221,1634],{"class":477},[84,3223,3224,3227,3229,3231,3233,3235],{"class":86,"line":238},[84,3225,3226],{"class":477},"        c",[84,3228,523],{"class":473},[84,3230,1998],{"class":477},[84,3232,1057],{"class":473},[84,3234,784],{"class":94},[84,3236,1634],{"class":477},[84,3238,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3276,3279,3282],{"class":86,"line":249},[84,3240,2826],{"class":473},[84,3242,2171],{"class":477},[84,3244,928],{"class":473},[84,3246,39],{"class":477},[84,3248,928],{"class":473},[84,3250,39],{"class":477},[84,3252,954],{"class":473},[84,3254,737],{"class":477},[84,3256,928],{"class":473},[84,3258,737],{"class":477},[84,3260,928],{"class":473},[84,3262,737],{"class":477},[84,3264,954],{"class":473},[84,3266,762],{"class":477},[84,3268,928],{"class":473},[84,3270,762],{"class":477},[84,3272,928],{"class":473},[84,3274,3275],{"class":477},"c ",[84,3277,3278],{"class":473},"==",[84,3280,3281],{"class":477}," num)",[84,3283,3284],{"class":328}," \u002F\u002F如果是水仙花数，才打印\n",[84,3286,3287],{"class":86,"line":262},[84,3288,2839],{"class":477},[84,3290,3291,3293,3295,3297,3299],{"class":86,"line":273},[84,3292,2844],{"class":477},[84,3294,1517],{"class":473},[84,3296,1998],{"class":477},[84,3298,1517],{"class":473},[84,3300,1539],{"class":477},[84,3302,3303],{"class":86,"line":283},[84,3304,2858],{"class":477},[84,3306,3307,3309,3311],{"class":86,"line":294},[84,3308,2618],{"class":477},[84,3310,2621],{"class":473},[84,3312,1634],{"class":477},[84,3314,3315],{"class":86,"line":2028},[84,3316,2516],{"class":477},[84,3318,3319,3321,3324,3326,3329],{"class":86,"line":2057},[84,3320,2580],{"class":473},[84,3322,3323],{"class":477}," (num ",[84,3325,1383],{"class":473},[84,3327,3328],{"class":94}," 1000",[84,3330,3048],{"class":477},[84,3332,3333],{"class":86,"line":2062},[84,3334,1905],{"class":477},[28,3336,3337],{"start":70},[31,3338,3339],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[75,3341,3343],{"className":464,"code":3342,"language":466,"meta":66,"style":66},"\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",[81,3344,3345,3350,3379,3383,3395,3399,3404,3415,3422,3426,3440,3444,3451,3455,3467,3476],{"__ignoreMap":66},[84,3346,3347],{"class":86,"line":87},[84,3348,3349],{"class":328},"\u002F\u002F从数字0-9打印\n",[84,3351,3352,3355,3357,3359,3362,3364,3366,3369,3371,3373,3375,3377],{"class":86,"line":98},[84,3353,3354],{"class":473},"for",[84,3356,478],{"class":477},[84,3358,481],{"class":473},[84,3360,3361],{"class":477}," i",[84,3363,523],{"class":473},[84,3365,666],{"class":94},[84,3367,3368],{"class":477},";i",[84,3370,1383],{"class":473},[84,3372,919],{"class":94},[84,3374,3368],{"class":477},[84,3376,2621],{"class":473},[84,3378,484],{"class":477},[84,3380,3381],{"class":86,"line":70},[84,3382,1886],{"class":477},[84,3384,3385,3387,3389,3391,3393],{"class":86,"line":120},[84,3386,1891],{"class":477},[84,3388,1517],{"class":473},[84,3390,914],{"class":477},[84,3392,1517],{"class":473},[84,3394,1539],{"class":477},[84,3396,3397],{"class":86,"line":131},[84,3398,1905],{"class":477},[84,3400,3401],{"class":86,"line":145},[84,3402,3403],{"class":328},"\u002F\u002F上式可以进行拆分\n",[84,3405,3406,3408,3410,3412],{"class":86,"line":156},[84,3407,481],{"class":473},[84,3409,3361],{"class":477},[84,3411,523],{"class":473},[84,3413,3414],{"class":94},"0\n",[84,3416,3417,3419],{"class":86,"line":164},[84,3418,3354],{"class":473},[84,3420,3421],{"class":477},"(;;;)\n",[84,3423,3424],{"class":86,"line":175},[84,3425,1886],{"class":477},[84,3427,3428,3431,3434,3436,3438],{"class":86,"line":185},[84,3429,3430],{"class":473},"    if",[84,3432,3433],{"class":477},"(i",[84,3435,2040],{"class":473},[84,3437,919],{"class":94},[84,3439,484],{"class":477},[84,3441,3442],{"class":86,"line":195},[84,3443,2359],{"class":477},[84,3445,3446,3449],{"class":86,"line":206},[84,3447,3448],{"class":473},"        break",[84,3450,1634],{"class":477},[84,3452,3453],{"class":86,"line":217},[84,3454,2516],{"class":477},[84,3456,3457,3459,3461,3463,3465],{"class":86,"line":227},[84,3458,1891],{"class":477},[84,3460,1517],{"class":473},[84,3462,914],{"class":477},[84,3464,1517],{"class":473},[84,3466,1539],{"class":477},[84,3468,3469,3472,3474],{"class":86,"line":238},[84,3470,3471],{"class":477},"    i",[84,3473,2621],{"class":473},[84,3475,1634],{"class":477},[84,3477,3478],{"class":86,"line":249},[84,3479,1905],{"class":477},[35,3481,3482],{},"小练习",[75,3484,3486],{"className":464,"code":3485,"language":466,"meta":66,"style":66},"#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",[81,3487,3488,3494,3504,3512,3516,3521,3526,3554,3558,3563,3568,3609,3613,3626,3630,3634,3638,3650,3654,3658],{"__ignoreMap":66},[84,3489,3490,3492],{"class":86,"line":87},[84,3491,2279],{"class":473},[84,3493,2282],{"class":104},[84,3495,3496,3498,3500,3502],{"class":86,"line":98},[84,3497,2287],{"class":473},[84,3499,2290],{"class":473},[84,3501,2293],{"class":90},[84,3503,1634],{"class":477},[84,3505,3506,3508,3510],{"class":86,"line":70},[84,3507,481],{"class":473},[84,3509,2302],{"class":90},[84,3511,2305],{"class":477},[84,3513,3514],{"class":86,"line":120},[84,3515,1886],{"class":477},[84,3517,3518],{"class":86,"line":131},[84,3519,3520],{"class":328},"    \u002F\u002F敲桌子案例\n",[84,3522,3523],{"class":86,"line":145},[84,3524,3525],{"class":328},"    \u002F\u002F1.先输出1-100的数字\n",[84,3527,3528,3531,3533,3535,3537,3539,3541,3544,3546,3548,3550,3552],{"class":86,"line":156},[84,3529,3530],{"class":473},"    for",[84,3532,478],{"class":477},[84,3534,481],{"class":473},[84,3536,3361],{"class":477},[84,3538,523],{"class":473},[84,3540,692],{"class":94},[84,3542,3543],{"class":477},"; i",[84,3545,1928],{"class":473},[84,3547,784],{"class":94},[84,3549,3543],{"class":477},[84,3551,2621],{"class":473},[84,3553,484],{"class":477},[84,3555,3556],{"class":86,"line":164},[84,3557,2359],{"class":477},[84,3559,3560],{"class":86,"line":175},[84,3561,3562],{"class":328},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[84,3564,3565],{"class":86,"line":185},[84,3566,3567],{"class":328},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[84,3569,3570,3572,3574,3576,3578,3580,3582,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607],{"class":86,"line":195},[84,3571,2826],{"class":473},[84,3573,3433],{"class":477},[84,3575,801],{"class":473},[84,3577,842],{"class":94},[84,3579,3278],{"class":473},[84,3581,666],{"class":94},[84,3583,3584],{"class":473}," ||",[84,3586,3361],{"class":477},[84,3588,801],{"class":473},[84,3590,919],{"class":94},[84,3592,3278],{"class":473},[84,3594,842],{"class":94},[84,3596,3584],{"class":473},[84,3598,3361],{"class":477},[84,3600,1057],{"class":473},[84,3602,919],{"class":94},[84,3604,3278],{"class":473},[84,3606,842],{"class":94},[84,3608,484],{"class":477},[84,3610,3611],{"class":86,"line":206},[84,3612,2839],{"class":477},[84,3614,3615,3617,3619,3622,3624],{"class":86,"line":217},[84,3616,2844],{"class":477},[84,3618,1517],{"class":473},[84,3620,3621],{"class":104},"\"敲桌子\"",[84,3623,1517],{"class":473},[84,3625,1539],{"class":477},[84,3627,3628],{"class":86,"line":227},[84,3629,2858],{"class":477},[84,3631,3632],{"class":86,"line":238},[84,3633,2899],{"class":473},[84,3635,3636],{"class":86,"line":249},[84,3637,2839],{"class":477},[84,3639,3640,3642,3644,3646,3648],{"class":86,"line":262},[84,3641,2844],{"class":477},[84,3643,1517],{"class":473},[84,3645,914],{"class":477},[84,3647,1517],{"class":473},[84,3649,1539],{"class":477},[84,3651,3652],{"class":86,"line":273},[84,3653,2858],{"class":477},[84,3655,3656],{"class":86,"line":283},[84,3657,2516],{"class":477},[84,3659,3660],{"class":86,"line":294},[84,3661,1905],{"class":477},[35,3663,3664],{},"嵌套实现星图",[75,3666,3668],{"className":464,"code":3667,"language":466,"meta":66,"style":66},"#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",[81,3669,3670,3676,3686,3694,3698,3724,3728,3757,3761,3772,3776,3785,3789],{"__ignoreMap":66},[84,3671,3672,3674],{"class":86,"line":87},[84,3673,2279],{"class":473},[84,3675,2282],{"class":104},[84,3677,3678,3680,3682,3684],{"class":86,"line":98},[84,3679,2287],{"class":473},[84,3681,2290],{"class":473},[84,3683,2293],{"class":90},[84,3685,1634],{"class":477},[84,3687,3688,3690,3692],{"class":86,"line":70},[84,3689,481],{"class":473},[84,3691,2302],{"class":90},[84,3693,2305],{"class":477},[84,3695,3696],{"class":86,"line":120},[84,3697,1886],{"class":477},[84,3699,3700,3702,3704,3706,3708,3710,3712,3714,3716,3718,3720,3722],{"class":86,"line":131},[84,3701,3530],{"class":473},[84,3703,1991],{"class":477},[84,3705,481],{"class":473},[84,3707,3361],{"class":477},[84,3709,523],{"class":473},[84,3711,666],{"class":94},[84,3713,3368],{"class":477},[84,3715,1383],{"class":473},[84,3717,919],{"class":94},[84,3719,3368],{"class":477},[84,3721,2621],{"class":473},[84,3723,484],{"class":477},[84,3725,3726],{"class":86,"line":145},[84,3727,2359],{"class":477},[84,3729,3730,3733,3735,3737,3740,3742,3744,3747,3749,3751,3753,3755],{"class":86,"line":156},[84,3731,3732],{"class":473},"        for",[84,3734,1991],{"class":477},[84,3736,481],{"class":473},[84,3738,3739],{"class":477}," j",[84,3741,523],{"class":473},[84,3743,666],{"class":94},[84,3745,3746],{"class":477},";j",[84,3748,1383],{"class":473},[84,3750,919],{"class":94},[84,3752,3746],{"class":477},[84,3754,2621],{"class":473},[84,3756,484],{"class":477},[84,3758,3759],{"class":86,"line":164},[84,3760,2839],{"class":477},[84,3762,3763,3765,3767,3770],{"class":86,"line":175},[84,3764,2844],{"class":477},[84,3766,1517],{"class":473},[84,3768,3769],{"class":104},"\"*\"",[84,3771,1634],{"class":477},[84,3773,3774],{"class":86,"line":185},[84,3775,2858],{"class":477},[84,3777,3778,3781,3783],{"class":86,"line":195},[84,3779,3780],{"class":477},"        cout",[84,3782,1517],{"class":473},[84,3784,1539],{"class":477},[84,3786,3787],{"class":86,"line":206},[84,3788,2516],{"class":477},[84,3790,3791],{"class":86,"line":217},[84,3792,1905],{"class":477},[35,3794,3795],{},"乘法口诀表",[75,3797,3799],{"className":464,"code":3798,"language":466,"meta":66,"style":66},"#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",[81,3800,3801,3807,3817,3825,3829,3855,3859,3884,3888,3928,3932,3940,3944],{"__ignoreMap":66},[84,3802,3803,3805],{"class":86,"line":87},[84,3804,2279],{"class":473},[84,3806,2663],{"class":104},[84,3808,3809,3811,3813,3815],{"class":86,"line":98},[84,3810,2287],{"class":473},[84,3812,2290],{"class":473},[84,3814,2293],{"class":90},[84,3816,1634],{"class":477},[84,3818,3819,3821,3823],{"class":86,"line":70},[84,3820,481],{"class":473},[84,3822,2302],{"class":90},[84,3824,2305],{"class":477},[84,3826,3827],{"class":86,"line":120},[84,3828,1886],{"class":477},[84,3830,3831,3833,3835,3837,3839,3841,3843,3845,3847,3849,3851,3853],{"class":86,"line":131},[84,3832,3530],{"class":473},[84,3834,478],{"class":477},[84,3836,481],{"class":473},[84,3838,3361],{"class":477},[84,3840,523],{"class":473},[84,3842,692],{"class":94},[84,3844,3368],{"class":477},[84,3846,1383],{"class":473},[84,3848,919],{"class":94},[84,3850,3368],{"class":477},[84,3852,2621],{"class":473},[84,3854,484],{"class":477},[84,3856,3857],{"class":86,"line":145},[84,3858,2359],{"class":477},[84,3860,3861,3863,3865,3867,3869,3871,3873,3875,3877,3880,3882],{"class":86,"line":156},[84,3862,3732],{"class":473},[84,3864,478],{"class":477},[84,3866,481],{"class":473},[84,3868,3739],{"class":477},[84,3870,523],{"class":473},[84,3872,692],{"class":94},[84,3874,3746],{"class":477},[84,3876,1928],{"class":473},[84,3878,3879],{"class":477},"i;j",[84,3881,2621],{"class":473},[84,3883,484],{"class":477},[84,3885,3886],{"class":86,"line":164},[84,3887,2839],{"class":477},[84,3889,3890,3892,3894,3896,3898,3900,3902,3904,3906,3909,3911,3913,3915,3917,3919,3922,3924,3926],{"class":86,"line":175},[84,3891,2844],{"class":477},[84,3893,1517],{"class":473},[84,3895,940],{"class":477},[84,3897,1517],{"class":473},[84,3899,3769],{"class":104},[84,3901,1517],{"class":473},[84,3903,914],{"class":477},[84,3905,1517],{"class":473},[84,3907,3908],{"class":104},"\"=\"",[84,3910,1517],{"class":473},[84,3912,914],{"class":477},[84,3914,928],{"class":473},[84,3916,940],{"class":477},[84,3918,1517],{"class":473},[84,3920,3921],{"class":104},"'",[84,3923,1574],{"class":94},[84,3925,3921],{"class":104},[84,3927,1634],{"class":477},[84,3929,3930],{"class":86,"line":185},[84,3931,2858],{"class":477},[84,3933,3934,3936,3938],{"class":86,"line":195},[84,3935,3780],{"class":477},[84,3937,1517],{"class":473},[84,3939,1539],{"class":477},[84,3941,3942],{"class":86,"line":206},[84,3943,2516],{"class":477},[84,3945,3946],{"class":86,"line":217},[84,3947,1905],{"class":477},[23,3949,3951],{"id":3950},"_163跳出语句","1.6.3跳出语句",[28,3953,3954],{},[31,3955,3956],{},"break语句\n作用：用于跳出选择结构或者循环结构",[35,3958,3959],{},"break使用时机：",[1480,3961,3962,3965,3968],{},[31,3963,3964],{},"出现在switch条件语句中，作用是终止case并跳出switch",[31,3966,3967],{},"出现在循环结构中，作用是跳出当前的循环结构",[31,3969,3970],{},"出现在嵌套循环中，跳出最近的内层循环语句",[28,3972,3973,3976],{"start":98},[31,3974,3975],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[31,3977,3978],{},"goto语句\n语法：goto 标记;",[35,3980,3981],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[75,3983,3985],{"className":464,"code":3984,"language":466,"meta":66,"style":66},"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",[81,3986,3987,3995,3999,4012,4022,4035,4048,4061,4069,4085],{"__ignoreMap":66},[84,3988,3989,3991,3993],{"class":86,"line":87},[84,3990,481],{"class":473},[84,3992,2302],{"class":90},[84,3994,2305],{"class":477},[84,3996,3997],{"class":86,"line":98},[84,3998,1886],{"class":477},[84,4000,4001,4003,4005,4008,4010],{"class":86,"line":70},[84,4002,1891],{"class":477},[84,4004,1517],{"class":473},[84,4006,4007],{"class":104},"\"1\"",[84,4009,1517],{"class":473},[84,4011,1539],{"class":477},[84,4013,4014,4017,4020],{"class":86,"line":120},[84,4015,4016],{"class":473},"    goto",[84,4018,4019],{"class":90}," FLAG",[84,4021,1634],{"class":477},[84,4023,4024,4026,4028,4031,4033],{"class":86,"line":131},[84,4025,1891],{"class":477},[84,4027,1517],{"class":473},[84,4029,4030],{"class":104},"\"2\"",[84,4032,1517],{"class":473},[84,4034,1539],{"class":477},[84,4036,4037,4039,4041,4044,4046],{"class":86,"line":145},[84,4038,1891],{"class":477},[84,4040,1517],{"class":473},[84,4042,4043],{"class":104},"\"3\"",[84,4045,1517],{"class":473},[84,4047,1539],{"class":477},[84,4049,4050,4052,4054,4057,4059],{"class":86,"line":156},[84,4051,1891],{"class":477},[84,4053,1517],{"class":473},[84,4055,4056],{"class":104},"\"4\"",[84,4058,1517],{"class":473},[84,4060,1539],{"class":477},[84,4062,4063,4066],{"class":86,"line":164},[84,4064,4065],{"class":90},"    FLAG",[84,4067,4068],{"class":477},":\n",[84,4070,4071,4073,4075,4078,4080,4082],{"class":86,"line":175},[84,4072,1891],{"class":477},[84,4074,1517],{"class":473},[84,4076,4077],{"class":104},"\"5\"",[84,4079,1517],{"class":473},[84,4081,1582],{"class":477},[84,4083,4084],{"class":328},"\u002F\u002F跳过了2,3,4,直接到5\n",[84,4086,4087],{"class":86,"line":185},[84,4088,1905],{"class":477},[14,4090,4092],{"id":4091},"_17数组","1.7数组",[23,4094,4096],{"id":4095},"_171一维数组","1.7.1一维数组",[28,4098,4099],{},[31,4100,4101],{},"一维数组定义方式",[612,4103,4104,4114],{},[615,4105,4106],{},[618,4107,4108,4111],{},[621,4109,4110],{},"方式",[621,4112,4113],{},"注意事项",[659,4115,4116,4130,4140],{},[618,4117,4118,4124],{},[664,4119,4120,4121,532],{},"数据类型 数组名",[84,4122,4123],{},"数组长度",[664,4125,4126,4127,4129],{},"这种方式是先定义再arr",[84,4128,914],{},"赋值",[618,4131,4132,4137],{},[664,4133,4120,4134,4136],{},[84,4135,4123],{},"={值1,值2....};",[664,4138,4139],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[618,4141,4142,4146],{},[664,4143,4120,4144,4136],{},[84,4145],{},[664,4147,4148,4149,4151],{},"int arr",[84,4150],{},";这是不正确的，按照这样的方式定义必须有初始长度",[28,4153,4154],{"start":98},[31,4155,4156],{},"一维数组数组名\n用途：",[1480,4158,4159],{},[31,4160,4161],{},"1.可以统计整个数组在内存中的长度：",[75,4163,4165],{"className":464,"code":4164,"language":466,"meta":66,"style":66},"sizeof(arr);\nsizeof(arr[0]);\n",[81,4166,4167,4174],{"__ignoreMap":66},[84,4168,4169,4171],{"class":86,"line":87},[84,4170,474],{"class":473},[84,4172,4173],{"class":477},"(arr);\n",[84,4175,4176,4178,4181,4183],{"class":86,"line":98},[84,4177,474],{"class":473},[84,4179,4180],{"class":477},"(arr[",[84,4182,666],{"class":94},[84,4184,4185],{"class":477},"]);\n",[1480,4187,4188],{},[31,4189,4190],{},"2.可以获取数组在内存中的首地址:",[75,4192,4194],{"className":464,"code":4193,"language":466,"meta":66,"style":66},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[81,4195,4196,4201,4214,4219],{"__ignoreMap":66},[84,4197,4198],{"class":86,"line":87},[84,4199,4200],{"class":328},"\u002F\u002F查看16进制的首地址\n",[84,4202,4203,4205,4207,4210,4212],{"class":86,"line":98},[84,4204,1710],{"class":477},[84,4206,1517],{"class":473},[84,4208,4209],{"class":477},"arr",[84,4211,1517],{"class":473},[84,4213,1539],{"class":477},[84,4215,4216],{"class":86,"line":70},[84,4217,4218],{"class":328},"\u002F\u002F看10进制数\n",[84,4220,4221,4223,4225,4227,4229,4231,4233,4236,4238,4240,4242],{"class":86,"line":120},[84,4222,1710],{"class":477},[84,4224,1517],{"class":473},[84,4226,478],{"class":477},[84,4228,481],{"class":473},[84,4230,902],{"class":477},[84,4232,826],{"class":473},[84,4234,4235],{"class":477},"arr[",[84,4237,666],{"class":94},[84,4239,1413],{"class":477},[84,4241,1517],{"class":473},[84,4243,1539],{"class":477},[35,4245,4246],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1480,4248,4249],{},[31,4250,4251],{},"1️⃣五只小猪称体重",[75,4253,4255],{"className":464,"code":4254,"language":466,"meta":66,"style":66},"#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",[81,4256,4257,4263,4273,4281,4285,4325,4338,4364,4368,4380,4384,4394,4398,4402,4415,4425],{"__ignoreMap":66},[84,4258,4259,4261],{"class":86,"line":87},[84,4260,2279],{"class":473},[84,4262,2282],{"class":104},[84,4264,4265,4267,4269,4271],{"class":86,"line":98},[84,4266,2287],{"class":473},[84,4268,2290],{"class":473},[84,4270,2293],{"class":90},[84,4272,1634],{"class":477},[84,4274,4275,4277,4279],{"class":86,"line":70},[84,4276,481],{"class":473},[84,4278,2302],{"class":90},[84,4280,2305],{"class":477},[84,4282,4283],{"class":86,"line":120},[84,4284,1886],{"class":477},[84,4286,4287,4289,4292,4294,4296,4298,4300,4303,4305,4308,4310,4312,4314,4317,4319,4322],{"class":86,"line":131},[84,4288,2314],{"class":473},[84,4290,4291],{"class":477}," arr[",[84,4293,792],{"class":94},[84,4295,1413],{"class":477},[84,4297,523],{"class":473},[84,4299,1369],{"class":477},[84,4301,4302],{"class":94},"300",[84,4304,851],{"class":477},[84,4306,4307],{"class":94},"350",[84,4309,851],{"class":477},[84,4311,2052],{"class":94},[84,4313,851],{"class":477},[84,4315,4316],{"class":94},"400",[84,4318,851],{"class":477},[84,4320,4321],{"class":94},"250",[84,4323,4324],{"class":477},"};\n",[84,4326,4327,4329,4332,4334,4336],{"class":86,"line":145},[84,4328,2314],{"class":473},[84,4330,4331],{"class":477}," tmp",[84,4333,523],{"class":473},[84,4335,666],{"class":94},[84,4337,1634],{"class":477},[84,4339,4340,4342,4344,4346,4348,4350,4352,4354,4356,4358,4360,4362],{"class":86,"line":156},[84,4341,3530],{"class":473},[84,4343,1991],{"class":477},[84,4345,481],{"class":473},[84,4347,3361],{"class":477},[84,4349,523],{"class":473},[84,4351,666],{"class":94},[84,4353,3368],{"class":477},[84,4355,1383],{"class":473},[84,4357,792],{"class":94},[84,4359,3368],{"class":477},[84,4361,2621],{"class":473},[84,4363,484],{"class":477},[84,4365,4366],{"class":86,"line":164},[84,4367,2359],{"class":477},[84,4369,4370,4372,4375,4377],{"class":86,"line":175},[84,4371,2826],{"class":473},[84,4373,4374],{"class":477},"(tmp",[84,4376,1383],{"class":473},[84,4378,4379],{"class":477},"arr[i])\n",[84,4381,4382],{"class":86,"line":185},[84,4383,2839],{"class":477},[84,4385,4386,4389,4391],{"class":86,"line":195},[84,4387,4388],{"class":477},"            tmp",[84,4390,523],{"class":473},[84,4392,4393],{"class":477},"arr[i];\n",[84,4395,4396],{"class":86,"line":206},[84,4397,2858],{"class":477},[84,4399,4400],{"class":86,"line":217},[84,4401,2516],{"class":477},[84,4403,4404,4406,4408,4411,4413],{"class":86,"line":227},[84,4405,1891],{"class":477},[84,4407,1517],{"class":473},[84,4409,4410],{"class":477},"tmp",[84,4412,1517],{"class":473},[84,4414,1539],{"class":477},[84,4416,4417,4420,4423],{"class":86,"line":238},[84,4418,4419],{"class":473},"    return",[84,4421,4422],{"class":94}," 0",[84,4424,1634],{"class":477},[84,4426,4427],{"class":86,"line":249},[84,4428,1905],{"class":477},[1480,4430,4431],{},[31,4432,4433],{},"2️⃣数组元素逆置",[75,4435,4437],{"className":464,"code":4436,"language":466,"meta":66,"style":66},"\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",[81,4438,4439,4444,4450,4460,4468,4472,4507,4523,4555,4568,4573,4578,4590,4600,4610,4615,4624,4634,4639,4644,4671,4675,4691,4695,4706,4715],{"__ignoreMap":66},[84,4440,4441],{"class":86,"line":87},[84,4442,4443],{"class":328},"\u002F\u002F元素逆置\n",[84,4445,4446,4448],{"class":86,"line":98},[84,4447,2279],{"class":473},[84,4449,2282],{"class":104},[84,4451,4452,4454,4456,4458],{"class":86,"line":70},[84,4453,2287],{"class":473},[84,4455,2290],{"class":473},[84,4457,2293],{"class":90},[84,4459,1634],{"class":477},[84,4461,4462,4464,4466],{"class":86,"line":120},[84,4463,481],{"class":473},[84,4465,2302],{"class":90},[84,4467,2305],{"class":477},[84,4469,4470],{"class":86,"line":131},[84,4471,1886],{"class":477},[84,4473,4474,4477,4479,4481,4483,4485,4487,4489,4491,4493,4495,4497,4499,4501,4503,4505],{"class":86,"line":145},[84,4475,4476],{"class":473},"   int",[84,4478,4291],{"class":477},[84,4480,792],{"class":94},[84,4482,1413],{"class":477},[84,4484,523],{"class":473},[84,4486,1369],{"class":477},[84,4488,692],{"class":94},[84,4490,851],{"class":477},[84,4492,553],{"class":94},[84,4494,851],{"class":477},[84,4496,547],{"class":94},[84,4498,851],{"class":477},[84,4500,140],{"class":94},[84,4502,851],{"class":477},[84,4504,792],{"class":94},[84,4506,4324],{"class":477},[84,4508,4509,4511,4514,4516,4518,4520],{"class":86,"line":156},[84,4510,4476],{"class":473},[84,4512,4513],{"class":477}," start",[84,4515,523],{"class":473},[84,4517,666],{"class":94},[84,4519,532],{"class":477},[84,4521,4522],{"class":328},"\u002F\u002F起始下标\n",[84,4524,4525,4527,4530,4533,4536,4539,4541,4543,4546,4548,4550,4552],{"class":86,"line":164},[84,4526,4476],{"class":473},[84,4528,4529],{"class":477}," end",[84,4531,4532],{"class":473},"=sizeof",[84,4534,4535],{"class":477},"(arr)",[84,4537,4538],{"class":473},"\u002Fsizeof",[84,4540,4180],{"class":477},[84,4542,666],{"class":94},[84,4544,4545],{"class":477},"])",[84,4547,1005],{"class":473},[84,4549,692],{"class":94},[84,4551,532],{"class":477},[84,4553,4554],{"class":328},"\u002F\u002F结束下标\n",[84,4556,4557,4560,4563,4565],{"class":86,"line":175},[84,4558,4559],{"class":473},"   while",[84,4561,4562],{"class":477}," (start",[84,4564,1383],{"class":473},[84,4566,4567],{"class":477},"end)\n",[84,4569,4570],{"class":86,"line":185},[84,4571,4572],{"class":477},"   {\n",[84,4574,4575],{"class":86,"line":195},[84,4576,4577],{"class":328},"    \u002F\u002F实现元素互换代码\n",[84,4579,4580,4582,4585,4587],{"class":86,"line":206},[84,4581,2314],{"class":473},[84,4583,4584],{"class":477}," temp",[84,4586,523],{"class":473},[84,4588,4589],{"class":477},"arr[start];\n",[84,4591,4592,4595,4597],{"class":86,"line":217},[84,4593,4594],{"class":477},"    arr[start]",[84,4596,523],{"class":473},[84,4598,4599],{"class":477},"arr[end];\n",[84,4601,4602,4605,4607],{"class":86,"line":227},[84,4603,4604],{"class":477},"    arr[end]",[84,4606,523],{"class":473},[84,4608,4609],{"class":477},"temp;\n",[84,4611,4612],{"class":86,"line":238},[84,4613,4614],{"class":328},"    \u002F\u002F下标更新\n",[84,4616,4617,4620,4622],{"class":86,"line":249},[84,4618,4619],{"class":477},"    start",[84,4621,2621],{"class":473},[84,4623,1634],{"class":477},[84,4625,4626,4629,4632],{"class":86,"line":262},[84,4627,4628],{"class":477},"    end",[84,4630,4631],{"class":473},"--",[84,4633,1634],{"class":477},[84,4635,4636],{"class":86,"line":273},[84,4637,4638],{"class":477},"   }\n",[84,4640,4641],{"class":86,"line":283},[84,4642,4643],{"class":328},"   \u002F\u002F输出逆置后的数组\n",[84,4645,4646,4649,4651,4653,4655,4657,4659,4661,4663,4665,4667,4669],{"class":86,"line":294},[84,4647,4648],{"class":473},"   for",[84,4650,1991],{"class":477},[84,4652,481],{"class":473},[84,4654,3361],{"class":477},[84,4656,523],{"class":473},[84,4658,666],{"class":94},[84,4660,3368],{"class":477},[84,4662,1383],{"class":473},[84,4664,792],{"class":94},[84,4666,3368],{"class":477},[84,4668,2621],{"class":473},[84,4670,484],{"class":477},[84,4672,4673],{"class":86,"line":2028},[84,4674,4572],{"class":477},[84,4676,4677,4679,4681,4684,4686,4689],{"class":86,"line":2057},[84,4678,1891],{"class":477},[84,4680,1517],{"class":473},[84,4682,4683],{"class":477},"arr[i]",[84,4685,1517],{"class":473},[84,4687,4688],{"class":104},"\" \"",[84,4690,1634],{"class":477},[84,4692,4693],{"class":86,"line":2062},[84,4694,4638],{"class":477},[84,4696,4697,4700,4702,4704],{"class":86,"line":2079},[84,4698,4699],{"class":90},"   system",[84,4701,478],{"class":477},[84,4703,2637],{"class":104},[84,4705,3048],{"class":477},[84,4707,4708,4711,4713],{"class":86,"line":2084},[84,4709,4710],{"class":473},"   return",[84,4712,4422],{"class":94},[84,4714,1634],{"class":477},[84,4716,4717],{"class":86,"line":2089},[84,4718,1905],{"class":477},[1480,4720,4721],{},[31,4722,4723],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[75,4725,4727],{"className":464,"code":4726,"language":466,"meta":66,"style":66},"\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",[81,4728,4729,4734,4740,4750,4758,4762,4814,4827,4853,4857,4871,4875,4880,4885,4915,4919,4924,4958,4962,4967,4987,4992,5004,5020,5035,5040,5044,5048,5061,5087,5091,5105,5109,5117],{"__ignoreMap":66},[84,4730,4731],{"class":86,"line":87},[84,4732,4733],{"class":328},"\u002F\u002F冒泡排序,升序\n",[84,4735,4736,4738],{"class":86,"line":98},[84,4737,2279],{"class":473},[84,4739,2282],{"class":104},[84,4741,4742,4744,4746,4748],{"class":86,"line":70},[84,4743,2287],{"class":473},[84,4745,2290],{"class":473},[84,4747,2293],{"class":90},[84,4749,1634],{"class":477},[84,4751,4752,4754,4756],{"class":86,"line":120},[84,4753,481],{"class":473},[84,4755,2302],{"class":90},[84,4757,2305],{"class":477},[84,4759,4760],{"class":86,"line":131},[84,4761,1886],{"class":477},[84,4763,4764,4766,4768,4770,4773,4775,4778,4780,4782,4784,4786,4788,4790,4792,4794,4796,4798,4800,4802,4804,4806,4808,4810,4812],{"class":86,"line":145},[84,4765,2314],{"class":473},[84,4767,4291],{"class":477},[84,4769,893],{"class":94},[84,4771,4772],{"class":477},"] ",[84,4774,523],{"class":473},[84,4776,4777],{"class":477}," {",[84,4779,140],{"class":94},[84,4781,851],{"class":477},[84,4783,553],{"class":94},[84,4785,851],{"class":477},[84,4787,868],{"class":94},[84,4789,851],{"class":477},[84,4791,666],{"class":94},[84,4793,851],{"class":477},[84,4795,792],{"class":94},[84,4797,851],{"class":477},[84,4799,842],{"class":94},[84,4801,851],{"class":477},[84,4803,692],{"class":94},[84,4805,851],{"class":477},[84,4807,547],{"class":94},[84,4809,851],{"class":477},[84,4811,893],{"class":94},[84,4813,4324],{"class":477},[84,4815,4816,4818,4820,4823,4825],{"class":86,"line":156},[84,4817,1891],{"class":477},[84,4819,1517],{"class":473},[84,4821,4822],{"class":104},"\"排序前：\"",[84,4824,1517],{"class":473},[84,4826,1539],{"class":477},[84,4828,4829,4831,4833,4835,4837,4839,4841,4843,4845,4847,4849,4851],{"class":86,"line":164},[84,4830,3530],{"class":473},[84,4832,1991],{"class":477},[84,4834,481],{"class":473},[84,4836,3361],{"class":477},[84,4838,523],{"class":473},[84,4840,666],{"class":94},[84,4842,3368],{"class":477},[84,4844,1383],{"class":473},[84,4846,893],{"class":94},[84,4848,3368],{"class":477},[84,4850,2621],{"class":473},[84,4852,484],{"class":477},[84,4854,4855],{"class":86,"line":175},[84,4856,2359],{"class":477},[84,4858,4859,4861,4863,4865,4867,4869],{"class":86,"line":185},[84,4860,3780],{"class":477},[84,4862,1517],{"class":473},[84,4864,4683],{"class":477},[84,4866,1517],{"class":473},[84,4868,4688],{"class":104},[84,4870,1634],{"class":477},[84,4872,4873],{"class":86,"line":195},[84,4874,2516],{"class":477},[84,4876,4877],{"class":86,"line":206},[84,4878,4879],{"class":328},"    \u002F\u002F开始冒泡排序\n",[84,4881,4882],{"class":86,"line":217},[84,4883,4884],{"class":328},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[84,4886,4887,4889,4891,4893,4895,4897,4899,4901,4903,4905,4907,4909,4911,4913],{"class":86,"line":227},[84,4888,3530],{"class":473},[84,4890,1991],{"class":477},[84,4892,481],{"class":473},[84,4894,3361],{"class":477},[84,4896,523],{"class":473},[84,4898,666],{"class":94},[84,4900,3368],{"class":477},[84,4902,1383],{"class":473},[84,4904,893],{"class":94},[84,4906,1005],{"class":473},[84,4908,692],{"class":94},[84,4910,3368],{"class":477},[84,4912,2621],{"class":473},[84,4914,484],{"class":477},[84,4916,4917],{"class":86,"line":238},[84,4918,2359],{"class":477},[84,4920,4921],{"class":86,"line":249},[84,4922,4923],{"class":328},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[84,4925,4926,4928,4930,4932,4934,4936,4938,4940,4942,4944,4946,4948,4950,4952,4954,4956],{"class":86,"line":262},[84,4927,3732],{"class":473},[84,4929,1991],{"class":477},[84,4931,481],{"class":473},[84,4933,3739],{"class":477},[84,4935,523],{"class":473},[84,4937,666],{"class":94},[84,4939,3746],{"class":477},[84,4941,1383],{"class":473},[84,4943,893],{"class":94},[84,4945,1005],{"class":473},[84,4947,914],{"class":477},[84,4949,1005],{"class":473},[84,4951,692],{"class":94},[84,4953,3746],{"class":477},[84,4955,2621],{"class":473},[84,4957,484],{"class":477},[84,4959,4960],{"class":86,"line":273},[84,4961,2839],{"class":477},[84,4963,4964],{"class":86,"line":283},[84,4965,4966],{"class":328},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[84,4968,4969,4972,4975,4977,4980,4982,4984],{"class":86,"line":294},[84,4970,4971],{"class":473},"            if",[84,4973,4974],{"class":477},"(arr[j]",[84,4976,1433],{"class":473},[84,4978,4979],{"class":477},"arr[j",[84,4981,954],{"class":473},[84,4983,692],{"class":94},[84,4985,4986],{"class":477},"])\n",[84,4988,4989],{"class":86,"line":2028},[84,4990,4991],{"class":477},"            {\n",[84,4993,4994,4997,4999,5001],{"class":86,"line":2057},[84,4995,4996],{"class":473},"                int",[84,4998,4584],{"class":477},[84,5000,523],{"class":473},[84,5002,5003],{"class":477},"arr[j];\n",[84,5005,5006,5009,5011,5013,5015,5017],{"class":86,"line":2062},[84,5007,5008],{"class":477},"                arr[j]",[84,5010,523],{"class":473},[84,5012,4979],{"class":477},[84,5014,954],{"class":473},[84,5016,692],{"class":94},[84,5018,5019],{"class":477},"];\n",[84,5021,5022,5025,5027,5029,5031,5033],{"class":86,"line":2079},[84,5023,5024],{"class":477},"                arr[j",[84,5026,954],{"class":473},[84,5028,692],{"class":94},[84,5030,1413],{"class":477},[84,5032,523],{"class":473},[84,5034,4609],{"class":477},[84,5036,5037],{"class":86,"line":2084},[84,5038,5039],{"class":477},"            }\n",[84,5041,5042],{"class":86,"line":2089},[84,5043,2858],{"class":477},[84,5045,5046],{"class":86,"line":2094},[84,5047,2516],{"class":477},[84,5049,5050,5052,5054,5057,5059],{"class":86,"line":2108},[84,5051,1891],{"class":477},[84,5053,1517],{"class":473},[84,5055,5056],{"class":104},"\"排序后：\"",[84,5058,1517],{"class":473},[84,5060,1539],{"class":477},[84,5062,5063,5065,5067,5069,5071,5073,5075,5077,5079,5081,5083,5085],{"class":86,"line":2113},[84,5064,3530],{"class":473},[84,5066,1991],{"class":477},[84,5068,481],{"class":473},[84,5070,3361],{"class":477},[84,5072,523],{"class":473},[84,5074,666],{"class":94},[84,5076,3368],{"class":477},[84,5078,1383],{"class":473},[84,5080,893],{"class":94},[84,5082,3368],{"class":477},[84,5084,2621],{"class":473},[84,5086,484],{"class":477},[84,5088,5089],{"class":86,"line":2906},[84,5090,2359],{"class":477},[84,5092,5093,5095,5097,5099,5101,5103],{"class":86,"line":2920},[84,5094,3780],{"class":477},[84,5096,1517],{"class":473},[84,5098,4683],{"class":477},[84,5100,1517],{"class":473},[84,5102,4688],{"class":104},[84,5104,1634],{"class":477},[84,5106,5107],{"class":86,"line":2928},[84,5108,2516],{"class":477},[84,5110,5111,5113,5115],{"class":86,"line":2933},[84,5112,4419],{"class":473},[84,5114,4422],{"class":94},[84,5116,1634],{"class":477},[84,5118,5119],{"class":86,"line":2939},[84,5120,1905],{"class":477},[23,5122,5124],{"id":5123},"_172二维数组","1.7.2二维数组",[28,5126,5127],{},[31,5128,5129],{},"二维数组的四种定义方式",[612,5131,5132,5141],{},[615,5133,5134],{},[618,5135,5136,5139],{},[621,5137,5138],{},"序号",[621,5140,4110],{},[659,5142,5143,5153,5162,5171,5180],{},[618,5144,5145,5147],{},[664,5146,692],{},[664,5148,5149,5150,532],{},"数据类型 数组名[行数]",[84,5151,5152],{},"列数",[618,5154,5155,5157],{},[664,5156,553],{},[664,5158,5149,5159,5161],{},[84,5160,5152],{},"={ {数据1,数据2}，{数据3，数据4}... }",[618,5163,5164,5166],{},[664,5165,547],{},[664,5167,5149,5168,5170],{},[84,5169,5152],{},"={数据1,数据2,数据3...}",[618,5172,5173,5175],{},[664,5174,140],{},[664,5176,5177,5178,5170],{},"数据类型 数组名[]",[84,5179,5152],{},[618,5181,5182,5185],{},[664,5183,5184],{},"注意：不能只省略列数",[664,5186],{},[28,5188,5189],{"start":98},[31,5190,5191],{},"二维数组数组名",[1480,5193,5194,5197],{},[31,5195,5196],{},"1.查看二维数组所占内存空间",[31,5198,5199],{},"2.获取二维数组首地址",[35,5201,5202],{},"已知二维数组，求二维数组的行数与列数",[75,5204,5206],{"className":464,"code":5205,"language":466,"meta":66,"style":66},"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",[81,5207,5208,5216,5220,5238,5242,5260,5276,5281,5306,5339],{"__ignoreMap":66},[84,5209,5210,5212,5214],{"class":86,"line":87},[84,5211,481],{"class":473},[84,5213,2302],{"class":90},[84,5215,2305],{"class":477},[84,5217,5218],{"class":86,"line":98},[84,5219,1886],{"class":477},[84,5221,5222,5224,5226,5228,5231,5233,5235],{"class":86,"line":70},[84,5223,2314],{"class":473},[84,5225,4291],{"class":477},[84,5227,553],{"class":94},[84,5229,5230],{"class":477},"][",[84,5232,547],{"class":94},[84,5234,1413],{"class":477},[84,5236,5237],{"class":473},"=\n",[84,5239,5240],{"class":86,"line":120},[84,5241,2359],{"class":477},[84,5243,5244,5247,5249,5251,5253,5255,5257],{"class":86,"line":131},[84,5245,5246],{"class":477},"        {",[84,5248,692],{"class":94},[84,5250,851],{"class":477},[84,5252,553],{"class":94},[84,5254,851],{"class":477},[84,5256,547],{"class":94},[84,5258,5259],{"class":477},"},\n",[84,5261,5262,5264,5266,5268,5270,5272,5274],{"class":86,"line":145},[84,5263,5246],{"class":477},[84,5265,140],{"class":94},[84,5267,851],{"class":477},[84,5269,792],{"class":94},[84,5271,851],{"class":477},[84,5273,817],{"class":94},[84,5275,1905],{"class":477},[84,5277,5278],{"class":86,"line":156},[84,5279,5280],{"class":477},"    };\n",[84,5282,5283,5285,5287,5290,5292,5294,5296,5298,5300,5302,5304],{"class":86,"line":164},[84,5284,1891],{"class":477},[84,5286,1517],{"class":473},[84,5288,5289],{"class":104},"\"二维数组的行数\"",[84,5291,1713],{"class":473},[84,5293,4535],{"class":477},[84,5295,4538],{"class":473},[84,5297,4180],{"class":477},[84,5299,666],{"class":94},[84,5301,4545],{"class":477},[84,5303,1517],{"class":473},[84,5305,1539],{"class":477},[84,5307,5308,5310,5312,5315,5317,5319,5321,5323,5325,5327,5329,5331,5333,5335,5337],{"class":86,"line":175},[84,5309,1891],{"class":477},[84,5311,1517],{"class":473},[84,5313,5314],{"class":104},"\"二维数组的列数\"",[84,5316,1713],{"class":473},[84,5318,4180],{"class":477},[84,5320,666],{"class":94},[84,5322,4545],{"class":477},[84,5324,4538],{"class":473},[84,5326,4180],{"class":477},[84,5328,666],{"class":94},[84,5330,5230],{"class":477},[84,5332,666],{"class":94},[84,5334,4545],{"class":477},[84,5336,1517],{"class":473},[84,5338,1539],{"class":477},[84,5340,5341],{"class":86,"line":185},[84,5342,1905],{"class":477},[35,5344,5345],{},"查看二维数组首地址",[75,5347,5349],{"className":464,"code":5348,"language":466,"meta":66,"style":66},"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",[81,5350,5351,5368,5394,5419],{"__ignoreMap":66},[84,5352,5353,5355,5357,5360,5362,5364,5366],{"class":86,"line":87},[84,5354,1710],{"class":477},[84,5356,1517],{"class":473},[84,5358,5359],{"class":104},"\"二维数组首地址：\"",[84,5361,1517],{"class":473},[84,5363,4209],{"class":477},[84,5365,1517],{"class":473},[84,5367,1539],{"class":477},[84,5369,5370,5372,5374,5377,5379,5381,5383,5386,5388,5390,5392],{"class":86,"line":98},[84,5371,1710],{"class":477},[84,5373,1517],{"class":473},[84,5375,5376],{"class":104},"\"二维数组第一行的首地址：\"",[84,5378,1517],{"class":473},[84,5380,478],{"class":477},[84,5382,481],{"class":473},[84,5384,5385],{"class":477},")arr[",[84,5387,666],{"class":94},[84,5389,1413],{"class":477},[84,5391,1517],{"class":473},[84,5393,1539],{"class":477},[84,5395,5396,5398,5400,5403,5405,5407,5409,5411,5413,5415,5417],{"class":86,"line":70},[84,5397,1710],{"class":477},[84,5399,1517],{"class":473},[84,5401,5402],{"class":104},"\"二维数组第二行的首地址：\"",[84,5404,1517],{"class":473},[84,5406,478],{"class":477},[84,5408,481],{"class":473},[84,5410,5385],{"class":477},[84,5412,692],{"class":94},[84,5414,1413],{"class":477},[84,5416,1517],{"class":473},[84,5418,1539],{"class":477},[84,5420,5421,5423,5425,5428,5430,5432,5434,5436,5438,5440,5442,5444,5446,5448,5450,5452],{"class":86,"line":120},[84,5422,1710],{"class":477},[84,5424,1517],{"class":473},[84,5426,5427],{"class":104},"\"二维数组第一个元素的首地址:\"",[84,5429,1517],{"class":473},[84,5431,478],{"class":477},[84,5433,481],{"class":473},[84,5435,902],{"class":477},[84,5437,826],{"class":473},[84,5439,4235],{"class":477},[84,5441,666],{"class":94},[84,5443,5230],{"class":477},[84,5445,666],{"class":94},[84,5447,1413],{"class":477},[84,5449,1517],{"class":473},[84,5451,1582],{"class":477},[84,5453,5454],{"class":328},"\u002F\u002F对于数，要加取址符\n",[389,5456,5457],{},"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":66,"searchDepth":98,"depth":98,"links":5459},[5460,5461,5462,5470,5471,5477,5482],{"id":419,"depth":98,"text":420},{"id":426,"depth":98,"text":427},{"id":441,"depth":98,"text":442,"children":5463},[5464,5465,5466,5467,5468,5469],{"id":445,"depth":70,"text":446},{"id":494,"depth":70,"text":495},{"id":561,"depth":70,"text":562},{"id":1498,"depth":70,"text":1499},{"id":1588,"depth":70,"text":1589},{"id":1684,"depth":70,"text":1685},{"id":1726,"depth":98,"text":1727},{"id":1794,"depth":98,"text":1795,"children":5472},[5473,5474,5475,5476],{"id":1798,"depth":70,"text":1799},{"id":1819,"depth":70,"text":1820},{"id":1828,"depth":70,"text":1829},{"id":1837,"depth":70,"text":1838},{"id":1846,"depth":98,"text":1847,"children":5478},[5479,5480,5481],{"id":1850,"depth":70,"text":1851},{"id":2534,"depth":70,"text":2535},{"id":3950,"depth":70,"text":3951},{"id":4091,"depth":98,"text":4092,"children":5483},[5484,5485],{"id":4095,"depth":70,"text":4096},{"id":5123,"depth":70,"text":5124},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":411,"description":66},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5492,"title":5493,"body":5494,"description":66,"extension":401,"meta":6594,"navigation":403,"path":6595,"seo":6596,"stem":6597,"__hash__":6598},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5495,"toc":6586},[5496,5499,5503,5511,5519,5522,5588,5592,5595,5671,5675,5678,5681,5684,5897,5901,5906,5970,5975,6042,6047,6138,6141,6246,6250,6253,6259,6403,6407,6410,6424,6427,6472,6475,6583],[10,5497,5493],{"id":5498},"_2函数",[14,5500,5502],{"id":5501},"_21函数概述","2.1函数概述",[28,5504,5505,5508],{},[31,5506,5507],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[31,5509,5510],{},"语法：",[75,5512,5517],{"className":5513,"code":5515,"language":5516,"meta":66},[5514],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[81,5518,5515],{"__ignoreMap":66},[35,5520,5521],{},"小案例",[75,5523,5525],{"className":464,"code":5524,"language":466,"meta":66,"style":66},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[81,5526,5527,5532,5556,5560,5577,5584],{"__ignoreMap":66},[84,5528,5529],{"class":86,"line":87},[84,5530,5531],{"class":328},"\u002F\u002Fnum1,num2形参\n",[84,5533,5534,5536,5539,5541,5543,5547,5549,5551,5554],{"class":86,"line":98},[84,5535,481],{"class":473},[84,5537,5538],{"class":90}," add",[84,5540,478],{"class":477},[84,5542,481],{"class":473},[84,5544,5546],{"class":5545},"s4XuR"," num1",[84,5548,851],{"class":477},[84,5550,481],{"class":473},[84,5552,5553],{"class":5545}," num2",[84,5555,484],{"class":477},[84,5557,5558],{"class":86,"line":70},[84,5559,1886],{"class":477},[84,5561,5562,5564,5567,5569,5572,5574],{"class":86,"line":120},[84,5563,2314],{"class":473},[84,5565,5566],{"class":477}," sum",[84,5568,523],{"class":473},[84,5570,5571],{"class":477},"num1",[84,5573,954],{"class":473},[84,5575,5576],{"class":477},"num2;\n",[84,5578,5579,5581],{"class":86,"line":131},[84,5580,4419],{"class":473},[84,5582,5583],{"class":477}," sum;\n",[84,5585,5586],{"class":86,"line":145},[84,5587,1905],{"class":477},[14,5589,5591],{"id":5590},"_22函数调用","2.2函数调用",[35,5593,5594],{},"调用刚刚写的求和函数",[75,5596,5598],{"className":464,"code":5597,"language":466,"meta":66,"style":66},"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",[81,5599,5600,5608,5612,5617,5629,5641,5650,5655,5667],{"__ignoreMap":66},[84,5601,5602,5604,5606],{"class":86,"line":87},[84,5603,481],{"class":473},[84,5605,2302],{"class":90},[84,5607,2305],{"class":477},[84,5609,5610],{"class":86,"line":98},[84,5611,1886],{"class":477},[84,5613,5614],{"class":86,"line":70},[84,5615,5616],{"class":328},"    \u002F\u002Fa,b实参\n",[84,5618,5619,5621,5623,5625,5627],{"class":86,"line":120},[84,5620,2314],{"class":473},[84,5622,1739],{"class":477},[84,5624,523],{"class":473},[84,5626,666],{"class":94},[84,5628,1634],{"class":477},[84,5630,5631,5633,5635,5637,5639],{"class":86,"line":131},[84,5632,2314],{"class":473},[84,5634,3162],{"class":477},[84,5636,523],{"class":473},[84,5638,666],{"class":94},[84,5640,1634],{"class":477},[84,5642,5643,5645,5647],{"class":86,"line":145},[84,5644,2341],{"class":477},[84,5646,1770],{"class":473},[84,5648,5649],{"class":477},"a,b;\n",[84,5651,5652],{"class":86,"line":156},[84,5653,5654],{"class":328},"    \u002F\u002F调用函数时，实参值传给了形参\n",[84,5656,5657,5659,5661,5664],{"class":86,"line":164},[84,5658,1891],{"class":477},[84,5660,1517],{"class":473},[84,5662,5663],{"class":90},"add",[84,5665,5666],{"class":477},"(a,b);\n",[84,5668,5669],{"class":86,"line":175},[84,5670,1905],{"class":477},[14,5672,5674],{"id":5673},"_23值传递","2.3值传递",[35,5676,5677],{},"值传递就是函数调用时实参将数值传给形参",[35,5679,5680],{},"值传递时，如果形参发生任何改变，不会影响实参",[35,5682,5683],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[75,5685,5687],{"className":464,"code":5686,"language":466,"meta":66,"style":66},"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",[81,5688,5689,5711,5715,5728,5745,5763,5774,5783,5792,5805,5821,5837,5846,5850,5858,5862,5874,5886,5893],{"__ignoreMap":66},[84,5690,5691,5694,5697,5699,5701,5703,5705,5707,5709],{"class":86,"line":87},[84,5692,5693],{"class":473},"void",[84,5695,5696],{"class":90}," swap",[84,5698,478],{"class":477},[84,5700,481],{"class":473},[84,5702,5546],{"class":5545},[84,5704,851],{"class":477},[84,5706,481],{"class":473},[84,5708,5553],{"class":5545},[84,5710,484],{"class":477},[84,5712,5713],{"class":86,"line":98},[84,5714,1886],{"class":477},[84,5716,5717,5719,5721,5724,5726],{"class":86,"line":70},[84,5718,1891],{"class":477},[84,5720,1517],{"class":473},[84,5722,5723],{"class":104},"\"交换前：\"",[84,5725,1517],{"class":473},[84,5727,1539],{"class":477},[84,5729,5730,5732,5734,5737,5739,5741,5743],{"class":86,"line":120},[84,5731,1891],{"class":477},[84,5733,1517],{"class":473},[84,5735,5736],{"class":104},"\"num1=\"",[84,5738,1517],{"class":473},[84,5740,5571],{"class":477},[84,5742,1517],{"class":473},[84,5744,1539],{"class":477},[84,5746,5747,5749,5751,5754,5756,5759,5761],{"class":86,"line":131},[84,5748,1891],{"class":477},[84,5750,1517],{"class":473},[84,5752,5753],{"class":104},"\"num2=\"",[84,5755,1517],{"class":473},[84,5757,5758],{"class":477},"num2",[84,5760,1517],{"class":473},[84,5762,1539],{"class":477},[84,5764,5765,5767,5769,5771],{"class":86,"line":145},[84,5766,2314],{"class":473},[84,5768,4584],{"class":477},[84,5770,523],{"class":473},[84,5772,5773],{"class":477},"num1;\n",[84,5775,5776,5779,5781],{"class":86,"line":156},[84,5777,5778],{"class":477},"    num1",[84,5780,523],{"class":473},[84,5782,5576],{"class":477},[84,5784,5785,5788,5790],{"class":86,"line":164},[84,5786,5787],{"class":477},"    num2",[84,5789,523],{"class":473},[84,5791,4609],{"class":477},[84,5793,5794,5796,5798,5801,5803],{"class":86,"line":175},[84,5795,1891],{"class":477},[84,5797,1517],{"class":473},[84,5799,5800],{"class":104},"\"交换后：\"",[84,5802,1517],{"class":473},[84,5804,1539],{"class":477},[84,5806,5807,5809,5811,5813,5815,5817,5819],{"class":86,"line":185},[84,5808,1891],{"class":477},[84,5810,1517],{"class":473},[84,5812,5736],{"class":104},[84,5814,1517],{"class":473},[84,5816,5571],{"class":477},[84,5818,1517],{"class":473},[84,5820,1539],{"class":477},[84,5822,5823,5825,5827,5829,5831,5833,5835],{"class":86,"line":195},[84,5824,1891],{"class":477},[84,5826,1517],{"class":473},[84,5828,5753],{"class":104},[84,5830,1517],{"class":473},[84,5832,5758],{"class":477},[84,5834,1517],{"class":473},[84,5836,1539],{"class":477},[84,5838,5839,5841,5843],{"class":86,"line":206},[84,5840,4419],{"class":473},[84,5842,532],{"class":477},[84,5844,5845],{"class":328},"\u002F\u002F或者不写\n",[84,5847,5848],{"class":86,"line":217},[84,5849,1905],{"class":477},[84,5851,5852,5854,5856],{"class":86,"line":227},[84,5853,481],{"class":473},[84,5855,2302],{"class":90},[84,5857,2305],{"class":477},[84,5859,5860],{"class":86,"line":238},[84,5861,1886],{"class":477},[84,5863,5864,5866,5868,5870,5872],{"class":86,"line":249},[84,5865,2314],{"class":473},[84,5867,1739],{"class":477},[84,5869,523],{"class":473},[84,5871,919],{"class":94},[84,5873,1634],{"class":477},[84,5875,5876,5878,5880,5882,5884],{"class":86,"line":262},[84,5877,2314],{"class":473},[84,5879,3162],{"class":477},[84,5881,523],{"class":473},[84,5883,1173],{"class":94},[84,5885,1634],{"class":477},[84,5887,5888,5891],{"class":86,"line":273},[84,5889,5890],{"class":90},"    swap",[84,5892,5666],{"class":477},[84,5894,5895],{"class":86,"line":283},[84,5896,1905],{"class":477},[14,5898,5900],{"id":5899},"_24函数的常见形式","2.4函数的常见形式",[28,5902,5903],{},[31,5904,5905],{},"无参无返",[75,5907,5909],{"className":464,"code":5908,"language":466,"meta":66,"style":66},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[81,5910,5911,5920,5924,5937,5941,5949,5953,5958,5966],{"__ignoreMap":66},[84,5912,5913,5915,5918],{"class":86,"line":87},[84,5914,5693],{"class":473},[84,5916,5917],{"class":90}," test01",[84,5919,2305],{"class":477},[84,5921,5922],{"class":86,"line":98},[84,5923,1886],{"class":477},[84,5925,5926,5928,5930,5933,5935],{"class":86,"line":70},[84,5927,1891],{"class":477},[84,5929,1517],{"class":473},[84,5931,5932],{"class":104},"\"你好\"",[84,5934,1517],{"class":473},[84,5936,1539],{"class":477},[84,5938,5939],{"class":86,"line":120},[84,5940,1905],{"class":477},[84,5942,5943,5945,5947],{"class":86,"line":131},[84,5944,481],{"class":473},[84,5946,2302],{"class":90},[84,5948,2305],{"class":477},[84,5950,5951],{"class":86,"line":145},[84,5952,1886],{"class":477},[84,5954,5955],{"class":86,"line":156},[84,5956,5957],{"class":328},"    \u002F\u002F函数调用\n",[84,5959,5960,5963],{"class":86,"line":164},[84,5961,5962],{"class":90},"    test01",[84,5964,5965],{"class":477},"();\n",[84,5967,5968],{"class":86,"line":175},[84,5969,1905],{"class":477},[28,5971,5972],{"start":98},[31,5973,5974],{},"有参无返",[75,5976,5978],{"className":464,"code":5977,"language":466,"meta":66,"style":66},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[81,5979,5980,5995,5999,6011,6015,6023,6027,6038],{"__ignoreMap":66},[84,5981,5982,5984,5987,5989,5991,5993],{"class":86,"line":87},[84,5983,5693],{"class":473},[84,5985,5986],{"class":90}," test02",[84,5988,478],{"class":477},[84,5990,481],{"class":473},[84,5992,1739],{"class":5545},[84,5994,484],{"class":477},[84,5996,5997],{"class":86,"line":98},[84,5998,1886],{"class":477},[84,6000,6001,6003,6005,6007,6009],{"class":86,"line":70},[84,6002,1891],{"class":477},[84,6004,1517],{"class":473},[84,6006,5932],{"class":104},[84,6008,1517],{"class":473},[84,6010,1539],{"class":477},[84,6012,6013],{"class":86,"line":120},[84,6014,1905],{"class":477},[84,6016,6017,6019,6021],{"class":86,"line":131},[84,6018,481],{"class":473},[84,6020,2302],{"class":90},[84,6022,2305],{"class":477},[84,6024,6025],{"class":86,"line":145},[84,6026,1886],{"class":477},[84,6028,6029,6032,6034,6036],{"class":86,"line":156},[84,6030,6031],{"class":90},"    test02",[84,6033,478],{"class":477},[84,6035,784],{"class":94},[84,6037,3048],{"class":477},[84,6039,6040],{"class":86,"line":164},[84,6041,1905],{"class":477},[28,6043,6044],{"start":70},[31,6045,6046],{},"无参有返",[75,6048,6050],{"className":464,"code":6049,"language":466,"meta":66,"style":66},"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",[81,6051,6052,6061,6065,6077,6086,6090,6098,6102,6115,6134],{"__ignoreMap":66},[84,6053,6054,6056,6059],{"class":86,"line":87},[84,6055,481],{"class":473},[84,6057,6058],{"class":90}," test03",[84,6060,2305],{"class":477},[84,6062,6063],{"class":86,"line":98},[84,6064,1886],{"class":477},[84,6066,6067,6069,6071,6073,6075],{"class":86,"line":70},[84,6068,1891],{"class":477},[84,6070,1517],{"class":473},[84,6072,5932],{"class":104},[84,6074,1517],{"class":473},[84,6076,1539],{"class":477},[84,6078,6079,6081,6084],{"class":86,"line":120},[84,6080,4419],{"class":473},[84,6082,6083],{"class":94}," 100",[84,6085,1634],{"class":477},[84,6087,6088],{"class":86,"line":131},[84,6089,1905],{"class":477},[84,6091,6092,6094,6096],{"class":86,"line":145},[84,6093,481],{"class":473},[84,6095,2302],{"class":90},[84,6097,2305],{"class":477},[84,6099,6100],{"class":86,"line":156},[84,6101,1886],{"class":477},[84,6103,6104,6106,6108,6110,6113],{"class":86,"line":164},[84,6105,2314],{"class":473},[84,6107,5546],{"class":477},[84,6109,523],{"class":473},[84,6111,6112],{"class":90},"test03",[84,6114,5965],{"class":477},[84,6116,6117,6119,6121,6123,6125,6127,6129,6131],{"class":86,"line":175},[84,6118,1891],{"class":477},[84,6120,1517],{"class":473},[84,6122,5736],{"class":104},[84,6124,1517],{"class":473},[84,6126,5571],{"class":477},[84,6128,1517],{"class":473},[84,6130,1582],{"class":477},[84,6132,6133],{"class":328}," \u002F\u002F100\n",[84,6135,6136],{"class":86,"line":185},[84,6137,1905],{"class":477},[35,6139,6140],{},"4.有参有返",[75,6142,6144],{"className":464,"code":6143,"language":466,"meta":66,"style":66},"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",[81,6145,6146,6161,6165,6178,6184,6188,6197,6201,6213,6227,6242],{"__ignoreMap":66},[84,6147,6148,6150,6153,6155,6157,6159],{"class":86,"line":87},[84,6149,481],{"class":473},[84,6151,6152],{"class":90}," test04",[84,6154,478],{"class":477},[84,6156,481],{"class":473},[84,6158,1739],{"class":5545},[84,6160,484],{"class":477},[84,6162,6163],{"class":86,"line":98},[84,6164,1886],{"class":477},[84,6166,6167,6169,6171,6174,6176],{"class":86,"line":70},[84,6168,1891],{"class":477},[84,6170,1517],{"class":473},[84,6172,6173],{"class":104},"\"hello\"",[84,6175,1517],{"class":473},[84,6177,1539],{"class":477},[84,6179,6180,6182],{"class":86,"line":120},[84,6181,4419],{"class":473},[84,6183,1773],{"class":477},[84,6185,6186],{"class":86,"line":131},[84,6187,1905],{"class":477},[84,6189,6190,6192,6195],{"class":86,"line":145},[84,6191,481],{"class":473},[84,6193,6194],{"class":90}," mian",[84,6196,2305],{"class":477},[84,6198,6199],{"class":86,"line":156},[84,6200,1886],{"class":477},[84,6202,6203,6205,6207,6209,6211],{"class":86,"line":164},[84,6204,2314],{"class":473},[84,6206,3162],{"class":477},[84,6208,523],{"class":473},[84,6210,692],{"class":94},[84,6212,1634],{"class":477},[84,6214,6215,6217,6219,6221,6224],{"class":86,"line":175},[84,6216,2314],{"class":473},[84,6218,3178],{"class":477},[84,6220,523],{"class":473},[84,6222,6223],{"class":90},"test04",[84,6225,6226],{"class":477},"(b);\n",[84,6228,6229,6231,6233,6235,6237,6239],{"class":86,"line":185},[84,6230,1891],{"class":477},[84,6232,1517],{"class":473},[84,6234,762],{"class":477},[84,6236,1517],{"class":473},[84,6238,1582],{"class":477},[84,6240,6241],{"class":328}," \u002F\u002F1\n",[84,6243,6244],{"class":86,"line":195},[84,6245,1905],{"class":477},[14,6247,6249],{"id":6248},"_25函数的声明","2.5函数的声明",[35,6251,6252],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[35,6254,6255,6256],{},"函数的",[624,6257,6258],{},"声明可以多次，但是函数的定义只能有一次",[75,6260,6262],{"className":464,"code":6261,"language":466,"meta":66,"style":66},"\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",[81,6263,6264,6269,6274,6299,6308,6312,6324,6336,6352,6356,6376,6380,6399],{"__ignoreMap":66},[84,6265,6266],{"class":86,"line":87},[84,6267,6268],{"class":328},"\u002F\u002F函数声明\n",[84,6270,6271],{"class":86,"line":98},[84,6272,6273],{"class":328},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[84,6275,6276,6278,6281,6283,6285,6287,6289,6291,6293,6296],{"class":86,"line":70},[84,6277,481],{"class":473},[84,6279,6280],{"class":90}," max",[84,6282,478],{"class":477},[84,6284,481],{"class":473},[84,6286,1739],{"class":5545},[84,6288,851],{"class":477},[84,6290,481],{"class":473},[84,6292,3162],{"class":5545},[84,6294,6295],{"class":477},");",[84,6297,6298],{"class":328},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[84,6300,6301,6303,6305],{"class":86,"line":120},[84,6302,481],{"class":473},[84,6304,2302],{"class":90},[84,6306,6307],{"class":477},"() \n",[84,6309,6310],{"class":86,"line":131},[84,6311,1886],{"class":477},[84,6313,6314,6316,6318,6320,6322],{"class":86,"line":145},[84,6315,2314],{"class":473},[84,6317,1739],{"class":477},[84,6319,523],{"class":473},[84,6321,919],{"class":94},[84,6323,1634],{"class":477},[84,6325,6326,6328,6330,6332,6334],{"class":86,"line":156},[84,6327,2314],{"class":473},[84,6329,3162],{"class":477},[84,6331,523],{"class":473},[84,6333,1173],{"class":94},[84,6335,1634],{"class":477},[84,6337,6338,6340,6342,6345,6348,6350],{"class":86,"line":164},[84,6339,1891],{"class":477},[84,6341,1517],{"class":473},[84,6343,6344],{"class":90},"max",[84,6346,6347],{"class":477},"(a,b)",[84,6349,1517],{"class":473},[84,6351,1539],{"class":477},[84,6353,6354],{"class":86,"line":175},[84,6355,1905],{"class":477},[84,6357,6358,6360,6362,6364,6366,6368,6370,6372,6374],{"class":86,"line":185},[84,6359,481],{"class":473},[84,6361,6280],{"class":90},[84,6363,478],{"class":477},[84,6365,481],{"class":473},[84,6367,1739],{"class":5545},[84,6369,851],{"class":477},[84,6371,481],{"class":473},[84,6373,3162],{"class":5545},[84,6375,484],{"class":477},[84,6377,6378],{"class":86,"line":195},[84,6379,1886],{"class":477},[84,6381,6382,6384,6386,6388,6390,6392,6394,6396],{"class":86,"line":206},[84,6383,4419],{"class":473},[84,6385,1739],{"class":477},[84,6387,1433],{"class":473},[84,6389,737],{"class":477},[84,6391,1459],{"class":473},[84,6393,39],{"class":477},[84,6395,1332],{"class":473},[84,6397,6398],{"class":477},"b;\n",[84,6400,6401],{"class":86,"line":217},[84,6402,1905],{"class":477},[14,6404,6406],{"id":6405},"_26函数的分文件编写","2.6函数的分文件编写",[35,6408,6409],{},"4个步骤：",[1480,6411,6412,6415,6418,6421],{},[31,6413,6414],{},"1.创建后缀名为.h的头文件",[31,6416,6417],{},"2.创建后缀名为.cpp的源文件",[31,6419,6420],{},"3.在头文件中写函数的定义",[31,6422,6423],{},"4.在源文件中写函数的定义\n示例：",[35,6425,6426],{},"头文件：swap.h",[75,6428,6430],{"className":464,"code":6429,"language":466,"meta":66,"style":66},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[81,6431,6432,6438,6448,6452],{"__ignoreMap":66},[84,6433,6434,6436],{"class":86,"line":87},[84,6435,2279],{"class":473},[84,6437,2282],{"class":104},[84,6439,6440,6442,6444,6446],{"class":86,"line":98},[84,6441,2287],{"class":473},[84,6443,2290],{"class":473},[84,6445,2293],{"class":90},[84,6447,1634],{"class":477},[84,6449,6450],{"class":86,"line":70},[84,6451,6268],{"class":328},[84,6453,6454,6456,6458,6460,6462,6464,6466,6468,6470],{"class":86,"line":120},[84,6455,5693],{"class":473},[84,6457,5696],{"class":90},[84,6459,478],{"class":477},[84,6461,481],{"class":473},[84,6463,1739],{"class":5545},[84,6465,851],{"class":477},[84,6467,481],{"class":473},[84,6469,3162],{"class":5545},[84,6471,3048],{"class":477},[35,6473,6474],{},"源文件：swap.cpp",[75,6476,6478],{"className":464,"code":6477,"language":466,"meta":66,"style":66},"#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",[81,6479,6480,6487,6492,6512,6516,6527,6536,6545,6562,6579],{"__ignoreMap":66},[84,6481,6482,6484],{"class":86,"line":87},[84,6483,2279],{"class":473},[84,6485,6486],{"class":104}," \"swap.h\"\n",[84,6488,6489],{"class":86,"line":98},[84,6490,6491],{"class":328},"\u002F\u002F函数的定义\n",[84,6493,6494,6496,6498,6500,6502,6504,6506,6508,6510],{"class":86,"line":70},[84,6495,5693],{"class":473},[84,6497,5696],{"class":90},[84,6499,478],{"class":477},[84,6501,481],{"class":473},[84,6503,1739],{"class":5545},[84,6505,851],{"class":477},[84,6507,481],{"class":473},[84,6509,3162],{"class":5545},[84,6511,484],{"class":477},[84,6513,6514],{"class":86,"line":120},[84,6515,1886],{"class":477},[84,6517,6518,6520,6522,6524],{"class":86,"line":131},[84,6519,2314],{"class":473},[84,6521,4584],{"class":477},[84,6523,523],{"class":473},[84,6525,6526],{"class":477},"a;\n",[84,6528,6529,6532,6534],{"class":86,"line":145},[84,6530,6531],{"class":477},"    a",[84,6533,523],{"class":473},[84,6535,6398],{"class":477},[84,6537,6538,6541,6543],{"class":86,"line":156},[84,6539,6540],{"class":477},"    b",[84,6542,523],{"class":473},[84,6544,4609],{"class":477},[84,6546,6547,6549,6551,6554,6556,6558,6560],{"class":86,"line":164},[84,6548,1891],{"class":477},[84,6550,1517],{"class":473},[84,6552,6553],{"class":104},"\"a=\"",[84,6555,1517],{"class":473},[84,6557,39],{"class":477},[84,6559,1517],{"class":473},[84,6561,1539],{"class":477},[84,6563,6564,6566,6568,6571,6573,6575,6577],{"class":86,"line":175},[84,6565,1891],{"class":477},[84,6567,1517],{"class":473},[84,6569,6570],{"class":104},"\"b=\"",[84,6572,1517],{"class":473},[84,6574,737],{"class":477},[84,6576,1517],{"class":473},[84,6578,1539],{"class":477},[84,6580,6581],{"class":86,"line":185},[84,6582,1905],{"class":477},[389,6584,6585],{},"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":66,"searchDepth":98,"depth":98,"links":6587},[6588,6589,6590,6591,6592,6593],{"id":5501,"depth":98,"text":5502},{"id":5590,"depth":98,"text":5591},{"id":5673,"depth":98,"text":5674},{"id":5899,"depth":98,"text":5900},{"id":6248,"depth":98,"text":6249},{"id":6405,"depth":98,"text":6406},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5493,"description":66},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6600,"title":6601,"body":6602,"description":6609,"extension":401,"meta":8014,"navigation":403,"path":8015,"seo":8016,"stem":8017,"__hash__":8018},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6603,"toc":8004},[6604,6607,6610,6614,6776,6780,6783,6786,6789,6792,6932,6936,6939,6942,6945,7010,7014,7019,7086,7089,7093,7096,7107,7112,7132,7135,7140,7159,7162,7166,7185,7188,7192,7427,7431,7434,7437,7440,7602,7605,7609,7612,7618,8001],[10,6605,6601],{"id":6606},"_3指针",[35,6608,6609],{},"通过指针保存一个地址，指针就是个地址",[14,6611,6613],{"id":6612},"_31定义指针","3.1定义指针",[75,6615,6617],{"className":464,"code":6616,"language":466,"meta":66,"style":66},"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",[81,6618,6619,6627,6631,6636,6648,6653,6661,6671,6689,6709,6713,6718,6723,6728,6742,6758,6772],{"__ignoreMap":66},[84,6620,6621,6623,6625],{"class":86,"line":87},[84,6622,481],{"class":473},[84,6624,2302],{"class":90},[84,6626,2305],{"class":477},[84,6628,6629],{"class":86,"line":98},[84,6630,1886],{"class":477},[84,6632,6633],{"class":86,"line":70},[84,6634,6635],{"class":328},"    \u002F\u002F1.定义指针\n",[84,6637,6638,6640,6642,6644,6646],{"class":86,"line":120},[84,6639,2314],{"class":473},[84,6641,1739],{"class":477},[84,6643,523],{"class":473},[84,6645,919],{"class":94},[84,6647,1634],{"class":477},[84,6649,6650],{"class":86,"line":131},[84,6651,6652],{"class":328},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[84,6654,6655,6658],{"class":86,"line":145},[84,6656,6657],{"class":473},"    int*",[84,6659,6660],{"class":477},"p;\n",[84,6662,6663,6666,6669],{"class":86,"line":156},[84,6664,6665],{"class":477},"    p",[84,6667,6668],{"class":473},"=&",[84,6670,6526],{"class":477},[84,6672,6673,6675,6677,6680,6683,6685,6687],{"class":86,"line":164},[84,6674,1891],{"class":477},[84,6676,1517],{"class":473},[84,6678,6679],{"class":104},"\"a的地址为：\"",[84,6681,6682],{"class":473},"\u003C\u003C&",[84,6684,39],{"class":477},[84,6686,1517],{"class":473},[84,6688,1539],{"class":477},[84,6690,6691,6693,6695,6698,6700,6702,6704,6706],{"class":86,"line":175},[84,6692,1891],{"class":477},[84,6694,1517],{"class":473},[84,6696,6697],{"class":104},"\"指针p为：\"",[84,6699,1517],{"class":473},[84,6701,35],{"class":477},[84,6703,1517],{"class":473},[84,6705,1582],{"class":477},[84,6707,6708],{"class":328},"\u002F\u002F指针p表示的就是a的地址\n",[84,6710,6711],{"class":86,"line":185},[84,6712,2729],{"emptyLinePlaceholder":403},[84,6714,6715],{"class":86,"line":195},[84,6716,6717],{"class":328},"    \u002F\u002F2.使用指针\n",[84,6719,6720],{"class":86,"line":206},[84,6721,6722],{"class":328},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[84,6724,6725],{"class":86,"line":217},[84,6726,6727],{"class":328},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[84,6729,6730,6733,6735,6737,6740],{"class":86,"line":227},[84,6731,6732],{"class":473},"    *",[84,6734,35],{"class":477},[84,6736,523],{"class":473},[84,6738,6739],{"class":94},"1000",[84,6741,1634],{"class":477},[84,6743,6744,6746,6749,6751,6753,6755],{"class":86,"line":238},[84,6745,1891],{"class":477},[84,6747,6748],{"class":473},"\u003C\u003C*",[84,6750,35],{"class":477},[84,6752,1517],{"class":473},[84,6754,1582],{"class":477},[84,6756,6757],{"class":328},"\u002F\u002F1000\n",[84,6759,6760,6762,6764,6766,6768,6770],{"class":86,"line":249},[84,6761,1891],{"class":477},[84,6763,1517],{"class":473},[84,6765,39],{"class":477},[84,6767,1517],{"class":473},[84,6769,1582],{"class":477},[84,6771,6757],{"class":328},[84,6773,6774],{"class":86,"line":262},[84,6775,1905],{"class":477},[14,6777,6779],{"id":6778},"_32指针所占的内存空间","3.2指针所占的内存空间",[35,6781,6782],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[35,6784,6785],{},"在32位操作系统下：占用4个字节空间",[35,6787,6788],{},"在64位操作系统下：占用8个字节空间",[35,6790,6791],{},"上方是不管啥数据类型的",[75,6793,6795],{"className":464,"code":6794,"language":466,"meta":66,"style":66},"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",[81,6796,6797,6805,6809,6814,6826,6831,6836,6841,6854,6876,6902,6928],{"__ignoreMap":66},[84,6798,6799,6801,6803],{"class":86,"line":87},[84,6800,481],{"class":473},[84,6802,2302],{"class":90},[84,6804,2305],{"class":477},[84,6806,6807],{"class":86,"line":98},[84,6808,1886],{"class":477},[84,6810,6811],{"class":86,"line":70},[84,6812,6813],{"class":328},"    \u002F\u002F指针所占内存空间\n",[84,6815,6816,6818,6820,6822,6824],{"class":86,"line":120},[84,6817,2314],{"class":473},[84,6819,1739],{"class":477},[84,6821,523],{"class":473},[84,6823,919],{"class":94},[84,6825,1634],{"class":477},[84,6827,6828],{"class":86,"line":131},[84,6829,6830],{"class":328},"    \u002F\u002Fint *p;\n",[84,6832,6833],{"class":86,"line":145},[84,6834,6835],{"class":328},"    \u002F\u002Fp=&a;\n",[84,6837,6838],{"class":86,"line":156},[84,6839,6840],{"class":328},"    \u002F\u002F上述可以写为以下：\n",[84,6842,6843,6845,6848,6850,6852],{"class":86,"line":164},[84,6844,2314],{"class":473},[84,6846,6847],{"class":473}," *",[84,6849,35],{"class":477},[84,6851,6668],{"class":473},[84,6853,6526],{"class":477},[84,6855,6856,6859,6861,6864,6866,6869,6871,6873],{"class":86,"line":175},[84,6857,6858],{"class":477},"    cout ",[84,6860,1517],{"class":473},[84,6862,6863],{"class":104},"\"sizeof(int *)\"",[84,6865,1713],{"class":473},[84,6867,6868],{"class":477},"(p)",[84,6870,1517],{"class":473},[84,6872,1582],{"class":477},[84,6874,6875],{"class":328},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[84,6877,6878,6880,6882,6884,6886,6888,6890,6892,6894,6896,6899],{"class":86,"line":185},[84,6879,6858],{"class":477},[84,6881,1517],{"class":473},[84,6883,6863],{"class":104},[84,6885,1713],{"class":473},[84,6887,478],{"class":477},[84,6889,481],{"class":473},[84,6891,6847],{"class":473},[84,6893,902],{"class":477},[84,6895,1517],{"class":473},[84,6897,6898],{"class":477},"endl",[84,6900,6901],{"class":328},"  \u002F\u002F4字节(32位的话)\n",[84,6903,6904,6906,6908,6911,6913,6915,6917,6919,6921,6923,6925],{"class":86,"line":195},[84,6905,6858],{"class":477},[84,6907,1517],{"class":473},[84,6909,6910],{"class":104},"\"sizeof(char *)\"",[84,6912,1713],{"class":473},[84,6914,478],{"class":477},[84,6916,572],{"class":473},[84,6918,6847],{"class":473},[84,6920,902],{"class":477},[84,6922,1517],{"class":473},[84,6924,1582],{"class":477},[84,6926,6927],{"class":328}," \u002F\u002F4字节(32位的话)\n",[84,6929,6930],{"class":86,"line":206},[84,6931,1905],{"class":477},[14,6933,6935],{"id":6934},"_33空指针","3.3空指针",[35,6937,6938],{},"空指针：指针变量指向内存中编号为0的空间",[35,6940,6941],{},"用途：初始化指针变量",[35,6943,6944],{},"注意：空指针指向的内存是不可以访问的",[75,6946,6948],{"className":464,"code":6947,"language":466,"meta":66,"style":66},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[81,6949,6950,6958,6962,6967,6981,6986,7001,7006],{"__ignoreMap":66},[84,6951,6952,6954,6956],{"class":86,"line":87},[84,6953,481],{"class":473},[84,6955,2302],{"class":90},[84,6957,2305],{"class":477},[84,6959,6960],{"class":86,"line":98},[84,6961,1886],{"class":477},[84,6963,6964],{"class":86,"line":70},[84,6965,6966],{"class":328},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[84,6968,6969,6971,6973,6975,6977,6979],{"class":86,"line":120},[84,6970,2314],{"class":473},[84,6972,6847],{"class":473},[84,6974,35],{"class":477},[84,6976,523],{"class":473},[84,6978,2721],{"class":94},[84,6980,1634],{"class":477},[84,6982,6983],{"class":86,"line":131},[84,6984,6985],{"class":328},"    \u002F\u002F2.空指针不能进行访问\n",[84,6987,6988,6990,6992,6994,6996,6998],{"class":86,"line":145},[84,6989,6732],{"class":473},[84,6991,35],{"class":477},[84,6993,523],{"class":473},[84,6995,784],{"class":94},[84,6997,532],{"class":477},[84,6999,7000],{"class":328},"\u002F\u002F直接报错，压根不能访问\n",[84,7002,7003],{"class":86,"line":156},[84,7004,7005],{"class":328},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[84,7007,7008],{"class":86,"line":164},[84,7009,1905],{"class":477},[14,7011,7013],{"id":7012},"_34野指针","3.4野指针",[35,7015,7016],{},[624,7017,7018],{},"指针变量指向非法的内存空间",[75,7020,7022],{"className":464,"code":7021,"language":466,"meta":66,"style":66},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[81,7023,7024,7032,7036,7065,7070,7082],{"__ignoreMap":66},[84,7025,7026,7028,7030],{"class":86,"line":87},[84,7027,481],{"class":473},[84,7029,2302],{"class":90},[84,7031,2305],{"class":477},[84,7033,7034],{"class":86,"line":98},[84,7035,1886],{"class":477},[84,7037,7038,7040,7042,7044,7046,7048,7050,7052,7054,7057,7060,7062],{"class":86,"line":70},[84,7039,2314],{"class":473},[84,7041,6847],{"class":473},[84,7043,35],{"class":477},[84,7045,523],{"class":473},[84,7047,478],{"class":477},[84,7049,481],{"class":473},[84,7051,6847],{"class":473},[84,7053,902],{"class":477},[84,7055,7056],{"class":473},"0x",[84,7058,7059],{"class":94},"1100",[84,7061,532],{"class":477},[84,7063,7064],{"class":328}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[84,7066,7067],{"class":86,"line":120},[84,7068,7069],{"class":328},"    \u002F\u002F访问野指针报错\n",[84,7071,7072,7074,7076,7078,7080],{"class":86,"line":131},[84,7073,1891],{"class":477},[84,7075,6748],{"class":473},[84,7077,35],{"class":477},[84,7079,1517],{"class":473},[84,7081,1539],{"class":477},[84,7083,7084],{"class":86,"line":145},[84,7085,1905],{"class":477},[35,7087,7088],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7090,7092],{"id":7091},"_35const修饰指针","3.5const修饰指针",[35,7094,7095],{},"三种情况：",[1480,7097,7098,7101,7104],{},[31,7099,7100],{},"const修饰指针 常量指针",[31,7102,7103],{},"const修饰常量 指针常量",[31,7105,7106],{},"const即修饰指针，又修饰常量",[28,7108,7109],{},[31,7110,7111],{},"常量指针",[75,7113,7115],{"className":464,"code":7114,"language":466,"meta":66,"style":66},"const int *p=&a;\n",[81,7116,7117],{"__ignoreMap":66},[84,7118,7119,7122,7124,7126,7128,7130],{"class":86,"line":87},[84,7120,7121],{"class":473},"const",[84,7123,2711],{"class":473},[84,7125,6847],{"class":473},[84,7127,35],{"class":477},[84,7129,6668],{"class":473},[84,7131,6526],{"class":477},[35,7133,7134],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[28,7136,7137],{"start":98},[31,7138,7139],{},"指针常量",[75,7141,7143],{"className":464,"code":7142,"language":466,"meta":66,"style":66},"int *const p=&a;\n",[81,7144,7145],{"__ignoreMap":66},[84,7146,7147,7149,7152,7155,7157],{"class":86,"line":87},[84,7148,481],{"class":473},[84,7150,7151],{"class":473}," *const",[84,7153,7154],{"class":477}," p",[84,7156,6668],{"class":473},[84,7158,6526],{"class":477},[35,7160,7161],{},"指针的指向不可以改，指针指向的值可以改",[28,7163,7164],{"start":70},[31,7165,7106],{},[75,7167,7169],{"className":464,"code":7168,"language":466,"meta":66,"style":66},"const int *const p=&a;\n",[81,7170,7171],{"__ignoreMap":66},[84,7172,7173,7175,7177,7179,7181,7183],{"class":86,"line":87},[84,7174,7121],{"class":473},[84,7176,2711],{"class":473},[84,7178,7151],{"class":473},[84,7180,7154],{"class":477},[84,7182,6668],{"class":473},[84,7184,6526],{"class":477},[35,7186,7187],{},"指针的指向和指针指向的值都不可以改变",[14,7189,7191],{"id":7190},"_36指针和数组","3.6指针和数组",[75,7193,7195],{"className":464,"code":7194,"language":466,"meta":66,"style":66},"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",[81,7196,7197,7205,7209,7214,7268,7289,7305,7321,7332,7349,7354,7368,7394,7398,7410,7419,7423],{"__ignoreMap":66},[84,7198,7199,7201,7203],{"class":86,"line":87},[84,7200,481],{"class":473},[84,7202,2302],{"class":90},[84,7204,2305],{"class":477},[84,7206,7207],{"class":86,"line":98},[84,7208,1886],{"class":477},[84,7210,7211],{"class":86,"line":70},[84,7212,7213],{"class":328},"    \u002F\u002F利用指针访问数组中的元素\n",[84,7215,7216,7218,7220,7222,7224,7226,7228,7230,7232,7234,7236,7238,7240,7242,7244,7246,7248,7250,7252,7254,7256,7258,7260,7262,7264,7266],{"class":86,"line":120},[84,7217,2314],{"class":473},[84,7219,4291],{"class":477},[84,7221,919],{"class":94},[84,7223,1413],{"class":477},[84,7225,523],{"class":473},[84,7227,1369],{"class":477},[84,7229,692],{"class":94},[84,7231,851],{"class":477},[84,7233,553],{"class":94},[84,7235,851],{"class":477},[84,7237,547],{"class":94},[84,7239,851],{"class":477},[84,7241,140],{"class":94},[84,7243,851],{"class":477},[84,7245,792],{"class":94},[84,7247,851],{"class":477},[84,7249,817],{"class":94},[84,7251,851],{"class":477},[84,7253,842],{"class":94},[84,7255,851],{"class":477},[84,7257,868],{"class":94},[84,7259,851],{"class":477},[84,7261,893],{"class":94},[84,7263,851],{"class":477},[84,7265,919],{"class":94},[84,7267,4324],{"class":477},[84,7269,7270,7272,7274,7277,7279,7281,7283,7285,7287],{"class":86,"line":131},[84,7271,1891],{"class":477},[84,7273,1517],{"class":473},[84,7275,7276],{"class":104},"\"数组的第一个元素为：\"",[84,7278,1517],{"class":473},[84,7280,4235],{"class":477},[84,7282,666],{"class":94},[84,7284,1413],{"class":477},[84,7286,1517],{"class":473},[84,7288,1539],{"class":477},[84,7290,7291,7293,7295,7297,7299,7302],{"class":86,"line":145},[84,7292,2314],{"class":473},[84,7294,6847],{"class":473},[84,7296,35],{"class":477},[84,7298,523],{"class":473},[84,7300,7301],{"class":477},"arr;",[84,7303,7304],{"class":328},"\u002F\u002F注意数才要加取地址符号&\n",[84,7306,7307,7309,7311,7313,7315,7317,7319],{"class":86,"line":156},[84,7308,1891],{"class":477},[84,7310,1517],{"class":473},[84,7312,7276],{"class":104},[84,7314,6748],{"class":473},[84,7316,35],{"class":477},[84,7318,1517],{"class":473},[84,7320,1539],{"class":477},[84,7322,7323,7325,7327,7329],{"class":86,"line":164},[84,7324,6665],{"class":477},[84,7326,2621],{"class":473},[84,7328,532],{"class":477},[84,7330,7331],{"class":328}," \u002F\u002F让指针向后偏移4个字节\n",[84,7333,7334,7336,7338,7341,7343,7345,7347],{"class":86,"line":175},[84,7335,1891],{"class":477},[84,7337,1517],{"class":473},[84,7339,7340],{"class":104},"\"数组的第二个元素为：\"",[84,7342,6748],{"class":473},[84,7344,35],{"class":477},[84,7346,1517],{"class":473},[84,7348,1539],{"class":477},[84,7350,7351],{"class":86,"line":185},[84,7352,7353],{"class":328},"    \u002F\u002F利用指针遍历数组\n",[84,7355,7356,7358,7360,7363,7365],{"class":86,"line":195},[84,7357,2314],{"class":473},[84,7359,6847],{"class":473},[84,7361,7362],{"class":477},"p2",[84,7364,523],{"class":473},[84,7366,7367],{"class":477},"arr;\n",[84,7369,7370,7372,7374,7376,7378,7380,7382,7384,7386,7388,7390,7392],{"class":86,"line":206},[84,7371,3530],{"class":473},[84,7373,1991],{"class":477},[84,7375,481],{"class":473},[84,7377,3361],{"class":477},[84,7379,523],{"class":473},[84,7381,666],{"class":94},[84,7383,3368],{"class":477},[84,7385,1383],{"class":473},[84,7387,919],{"class":94},[84,7389,3368],{"class":477},[84,7391,2621],{"class":473},[84,7393,484],{"class":477},[84,7395,7396],{"class":86,"line":217},[84,7397,2359],{"class":477},[84,7399,7400,7402,7404,7406,7408],{"class":86,"line":227},[84,7401,3780],{"class":477},[84,7403,6748],{"class":473},[84,7405,7362],{"class":477},[84,7407,1517],{"class":473},[84,7409,1539],{"class":477},[84,7411,7412,7415,7417],{"class":86,"line":238},[84,7413,7414],{"class":477},"        p2",[84,7416,2621],{"class":473},[84,7418,1634],{"class":477},[84,7420,7421],{"class":86,"line":249},[84,7422,2516],{"class":477},[84,7424,7425],{"class":86,"line":262},[84,7426,1905],{"class":477},[14,7428,7430],{"id":7429},"_37指针和函数","3.7指针和函数",[35,7432,7433],{},"利用指针做函数参数，可以修改实参的值",[35,7435,7436],{},"值传递：只改变形参，不改变实参",[35,7438,7439],{},"地址传递：",[75,7441,7443],{"className":464,"code":7442,"language":466,"meta":66,"style":66},"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",[81,7444,7445,7470,7474,7486,7497,7507,7511,7519,7523,7535,7547,7552,7568,7583,7598],{"__ignoreMap":66},[84,7446,7447,7449,7451,7453,7455,7457,7460,7462,7464,7466,7468],{"class":86,"line":87},[84,7448,5693],{"class":473},[84,7450,5696],{"class":90},[84,7452,478],{"class":477},[84,7454,481],{"class":473},[84,7456,6847],{"class":473},[84,7458,7459],{"class":5545},"p1",[84,7461,851],{"class":477},[84,7463,481],{"class":473},[84,7465,6847],{"class":473},[84,7467,7362],{"class":5545},[84,7469,484],{"class":477},[84,7471,7472],{"class":86,"line":98},[84,7473,1886],{"class":477},[84,7475,7476,7478,7480,7483],{"class":86,"line":70},[84,7477,2314],{"class":473},[84,7479,4584],{"class":477},[84,7481,7482],{"class":473},"=*",[84,7484,7485],{"class":477},"p1;\n",[84,7487,7488,7490,7492,7494],{"class":86,"line":120},[84,7489,6732],{"class":473},[84,7491,7459],{"class":477},[84,7493,7482],{"class":473},[84,7495,7496],{"class":477},"p2;\n",[84,7498,7499,7501,7503,7505],{"class":86,"line":131},[84,7500,6732],{"class":473},[84,7502,7362],{"class":477},[84,7504,523],{"class":473},[84,7506,4609],{"class":477},[84,7508,7509],{"class":86,"line":145},[84,7510,1905],{"class":477},[84,7512,7513,7515,7517],{"class":86,"line":156},[84,7514,481],{"class":473},[84,7516,2302],{"class":90},[84,7518,2305],{"class":477},[84,7520,7521],{"class":86,"line":164},[84,7522,1886],{"class":477},[84,7524,7525,7527,7529,7531,7533],{"class":86,"line":175},[84,7526,2314],{"class":473},[84,7528,1739],{"class":477},[84,7530,523],{"class":473},[84,7532,919],{"class":94},[84,7534,1634],{"class":477},[84,7536,7537,7539,7541,7543,7545],{"class":86,"line":185},[84,7538,2314],{"class":473},[84,7540,3162],{"class":477},[84,7542,523],{"class":473},[84,7544,1173],{"class":94},[84,7546,1634],{"class":477},[84,7548,7549],{"class":86,"line":195},[84,7550,7551],{"class":328},"    \u002F\u002F地址传递\n",[84,7553,7554,7556,7558,7560,7563,7565],{"class":86,"line":206},[84,7555,5890],{"class":90},[84,7557,478],{"class":477},[84,7559,826],{"class":473},[84,7561,7562],{"class":477},"a,",[84,7564,826],{"class":473},[84,7566,7567],{"class":477},"b);\n",[84,7569,7570,7572,7574,7576,7578,7580],{"class":86,"line":217},[84,7571,1891],{"class":477},[84,7573,1517],{"class":473},[84,7575,39],{"class":477},[84,7577,1517],{"class":473},[84,7579,1582],{"class":477},[84,7581,7582],{"class":328},"\u002F\u002F20\n",[84,7584,7585,7587,7589,7591,7593,7595],{"class":86,"line":227},[84,7586,1891],{"class":477},[84,7588,1517],{"class":473},[84,7590,737],{"class":477},[84,7592,1517],{"class":473},[84,7594,1582],{"class":477},[84,7596,7597],{"class":328},"\u002F\u002F10\n",[84,7599,7600],{"class":86,"line":238},[84,7601,1905],{"class":477},[35,7603,7604],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7606,7608],{"id":7607},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[35,7610,7611],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[35,7613,7614,7615,7617],{},"例如数组：int arr",[84,7616,919],{},"={4,3,6,9,1,2,10,8,7,5}",[75,7619,7621],{"className":464,"code":7620,"language":466,"meta":66,"style":66},"#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",[81,7622,7623,7629,7639,7663,7667,7698,7702,7736,7740,7758,7762,7773,7788,7803,7807,7811,7815,7819,7823,7831,7835,7840,7894,7906,7918,7923,7931,7935,7940,7965,7969,7984,7993,7997],{"__ignoreMap":66},[84,7624,7625,7627],{"class":86,"line":87},[84,7626,2279],{"class":473},[84,7628,2282],{"class":104},[84,7630,7631,7633,7635,7637],{"class":86,"line":98},[84,7632,2287],{"class":473},[84,7634,2290],{"class":473},[84,7636,2293],{"class":90},[84,7638,1634],{"class":477},[84,7640,7641,7643,7646,7648,7650,7652,7654,7656,7658,7661],{"class":86,"line":70},[84,7642,5693],{"class":473},[84,7644,7645],{"class":90}," bubbleSort",[84,7647,478],{"class":477},[84,7649,481],{"class":473},[84,7651,6847],{"class":473},[84,7653,35],{"class":5545},[84,7655,851],{"class":477},[84,7657,481],{"class":473},[84,7659,7660],{"class":5545}," len",[84,7662,484],{"class":477},[84,7664,7665],{"class":86,"line":120},[84,7666,1886],{"class":477},[84,7668,7669,7671,7673,7675,7677,7679,7681,7683,7685,7688,7690,7692,7694,7696],{"class":86,"line":131},[84,7670,3530],{"class":473},[84,7672,478],{"class":477},[84,7674,481],{"class":473},[84,7676,3361],{"class":477},[84,7678,523],{"class":473},[84,7680,666],{"class":94},[84,7682,3368],{"class":477},[84,7684,1383],{"class":473},[84,7686,7687],{"class":477},"len",[84,7689,1005],{"class":473},[84,7691,692],{"class":94},[84,7693,3368],{"class":477},[84,7695,2621],{"class":473},[84,7697,484],{"class":477},[84,7699,7700],{"class":86,"line":145},[84,7701,2359],{"class":477},[84,7703,7704,7706,7708,7710,7712,7714,7716,7718,7720,7722,7724,7726,7728,7730,7732,7734],{"class":86,"line":156},[84,7705,3732],{"class":473},[84,7707,478],{"class":477},[84,7709,481],{"class":473},[84,7711,3739],{"class":477},[84,7713,523],{"class":473},[84,7715,666],{"class":94},[84,7717,3746],{"class":477},[84,7719,1383],{"class":473},[84,7721,7687],{"class":477},[84,7723,1005],{"class":473},[84,7725,914],{"class":477},[84,7727,1005],{"class":473},[84,7729,692],{"class":94},[84,7731,3746],{"class":477},[84,7733,2621],{"class":473},[84,7735,484],{"class":477},[84,7737,7738],{"class":86,"line":164},[84,7739,2839],{"class":477},[84,7741,7742,7744,7747,7749,7752,7754,7756],{"class":86,"line":175},[84,7743,4971],{"class":473},[84,7745,7746],{"class":477},"(p[j]",[84,7748,1433],{"class":473},[84,7750,7751],{"class":477},"p[j",[84,7753,954],{"class":473},[84,7755,692],{"class":94},[84,7757,4986],{"class":477},[84,7759,7760],{"class":86,"line":185},[84,7761,4991],{"class":477},[84,7763,7764,7766,7768,7770],{"class":86,"line":195},[84,7765,4996],{"class":473},[84,7767,4584],{"class":477},[84,7769,523],{"class":473},[84,7771,7772],{"class":477},"p[j];\n",[84,7774,7775,7778,7780,7782,7784,7786],{"class":86,"line":206},[84,7776,7777],{"class":477},"                p[j]",[84,7779,523],{"class":473},[84,7781,7751],{"class":477},[84,7783,954],{"class":473},[84,7785,692],{"class":94},[84,7787,5019],{"class":477},[84,7789,7790,7793,7795,7797,7799,7801],{"class":86,"line":217},[84,7791,7792],{"class":477},"                p[j",[84,7794,954],{"class":473},[84,7796,692],{"class":94},[84,7798,1413],{"class":477},[84,7800,523],{"class":473},[84,7802,4609],{"class":477},[84,7804,7805],{"class":86,"line":227},[84,7806,5039],{"class":477},[84,7808,7809],{"class":86,"line":238},[84,7810,2858],{"class":477},[84,7812,7813],{"class":86,"line":249},[84,7814,2516],{"class":477},[84,7816,7817],{"class":86,"line":262},[84,7818,1905],{"class":477},[84,7820,7821],{"class":86,"line":273},[84,7822,2729],{"emptyLinePlaceholder":403},[84,7824,7825,7827,7829],{"class":86,"line":283},[84,7826,481],{"class":473},[84,7828,2302],{"class":90},[84,7830,2305],{"class":477},[84,7832,7833],{"class":86,"line":294},[84,7834,1886],{"class":477},[84,7836,7837],{"class":86,"line":2028},[84,7838,7839],{"class":328},"    \u002F\u002F 1.创建数组\n",[84,7841,7842,7844,7846,7848,7850,7852,7854,7856,7858,7860,7862,7864,7866,7868,7870,7872,7874,7876,7878,7880,7882,7884,7886,7888,7890,7892],{"class":86,"line":2057},[84,7843,2314],{"class":473},[84,7845,4291],{"class":477},[84,7847,919],{"class":94},[84,7849,1413],{"class":477},[84,7851,523],{"class":473},[84,7853,1369],{"class":477},[84,7855,140],{"class":94},[84,7857,851],{"class":477},[84,7859,547],{"class":94},[84,7861,851],{"class":477},[84,7863,817],{"class":94},[84,7865,851],{"class":477},[84,7867,893],{"class":94},[84,7869,851],{"class":477},[84,7871,692],{"class":94},[84,7873,851],{"class":477},[84,7875,553],{"class":94},[84,7877,851],{"class":477},[84,7879,919],{"class":94},[84,7881,851],{"class":477},[84,7883,868],{"class":94},[84,7885,851],{"class":477},[84,7887,842],{"class":94},[84,7889,851],{"class":477},[84,7891,792],{"class":94},[84,7893,4324],{"class":477},[84,7895,7896,7898,7900,7902,7904],{"class":86,"line":2062},[84,7897,2314],{"class":473},[84,7899,7660],{"class":477},[84,7901,523],{"class":473},[84,7903,919],{"class":94},[84,7905,1634],{"class":477},[84,7907,7908,7910,7912,7914,7916],{"class":86,"line":2079},[84,7909,2314],{"class":473},[84,7911,6847],{"class":473},[84,7913,35],{"class":477},[84,7915,523],{"class":473},[84,7917,7367],{"class":477},[84,7919,7920],{"class":86,"line":2084},[84,7921,7922],{"class":328},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[84,7924,7925,7928],{"class":86,"line":2089},[84,7926,7927],{"class":90},"    bubbleSort",[84,7929,7930],{"class":477},"(p,len);\n",[84,7932,7933],{"class":86,"line":2094},[84,7934,2729],{"emptyLinePlaceholder":403},[84,7936,7937],{"class":86,"line":2108},[84,7938,7939],{"class":328},"    \u002F\u002F 3.打印排序后的数组\n",[84,7941,7942,7944,7946,7948,7950,7952,7954,7956,7958,7961,7963],{"class":86,"line":2113},[84,7943,3530],{"class":473},[84,7945,1991],{"class":477},[84,7947,481],{"class":473},[84,7949,3361],{"class":477},[84,7951,523],{"class":473},[84,7953,666],{"class":94},[84,7955,3543],{"class":477},[84,7957,1383],{"class":473},[84,7959,7960],{"class":477},"len; i",[84,7962,2621],{"class":473},[84,7964,484],{"class":477},[84,7966,7967],{"class":86,"line":2906},[84,7968,2359],{"class":477},[84,7970,7971,7973,7975,7977,7979,7982],{"class":86,"line":2920},[84,7972,3780],{"class":477},[84,7974,6748],{"class":473},[84,7976,35],{"class":477},[84,7978,1517],{"class":473},[84,7980,7981],{"class":104},"\"\"",[84,7983,1634],{"class":477},[84,7985,7986,7989,7991],{"class":86,"line":2928},[84,7987,7988],{"class":477},"        p",[84,7990,2621],{"class":473},[84,7992,1634],{"class":477},[84,7994,7995],{"class":86,"line":2933},[84,7996,2516],{"class":477},[84,7998,7999],{"class":86,"line":2939},[84,8000,1905],{"class":477},[389,8002,8003],{},"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":66,"searchDepth":98,"depth":98,"links":8005},[8006,8007,8008,8009,8010,8011,8012,8013],{"id":6612,"depth":98,"text":6613},{"id":6778,"depth":98,"text":6779},{"id":6934,"depth":98,"text":6935},{"id":7012,"depth":98,"text":7013},{"id":7091,"depth":98,"text":7092},{"id":7190,"depth":98,"text":7191},{"id":7429,"depth":98,"text":7430},{"id":7607,"depth":98,"text":7608},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6601,"description":6609},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8020,"title":8021,"body":8022,"description":8029,"extension":401,"meta":11003,"navigation":403,"path":11004,"seo":11005,"stem":11006,"__hash__":11007},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8023,"toc":10994},[8024,8027,8030,8034,8037,8040,8051,8389,8392,8396,8399,8406,8661,8665,8668,8671,8826,8830,8833,8836,9042,9046,9049,9352,9355,9363,9367,9370,9521,9523,9534,9591,9595,9600,10257,10265,10268,10362,10365,10985,10991],[10,8025,8021],{"id":8026},"_4结构体",[35,8028,8029],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8031,8033],{"id":8032},"_41结构体定义与使用","4.1结构体定义与使用",[35,8035,8036],{},"语法：struct 结构体名 {结构体成员列表}；",[35,8038,8039],{},"通过结构体创建变量的方式：",[1480,8041,8042,8045,8048],{},[31,8043,8044],{},"struct 结构体名 变量名",[31,8046,8047],{},"struct 结构体名 变量名={成员1值，成员2值...}",[31,8049,8050],{},"定义结构体时顺便创建变量",[75,8052,8054],{"className":464,"code":8053,"language":466,"meta":66,"style":66},"#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",[81,8055,8056,8062,8072,8079,8084,8092,8096,8101,8105,8110,8115,8120,8127,8132,8139,8143,8150,8154,8158,8162,8166,8170,8174,8180,8184,8190,8198,8206,8210,8215,8220,8231,8236,8248,8259,8270,8275,8299,8304,8310,8337,8342,8348,8360,8372,8384],{"__ignoreMap":66},[84,8057,8058,8060],{"class":86,"line":87},[84,8059,2279],{"class":473},[84,8061,2282],{"class":104},[84,8063,8064,8066,8068,8070],{"class":86,"line":98},[84,8065,2287],{"class":473},[84,8067,2290],{"class":473},[84,8069,2293],{"class":90},[84,8071,1634],{"class":477},[84,8073,8074,8076],{"class":86,"line":70},[84,8075,2279],{"class":473},[84,8077,8078],{"class":104},"\u003Cstring>\n",[84,8080,8081],{"class":86,"line":120},[84,8082,8083],{"class":328},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[84,8085,8086,8089],{"class":86,"line":131},[84,8087,8088],{"class":473},"struct",[84,8090,8091],{"class":90}," Student\n",[84,8093,8094],{"class":86,"line":145},[84,8095,1886],{"class":477},[84,8097,8098],{"class":86,"line":156},[84,8099,8100],{"class":328},"    \u002F\u002F成员列表\n",[84,8102,8103],{"class":86,"line":164},[84,8104,2729],{"emptyLinePlaceholder":403},[84,8106,8107],{"class":86,"line":175},[84,8108,8109],{"class":328},"    \u002F\u002F姓名\n",[84,8111,8112],{"class":86,"line":185},[84,8113,8114],{"class":477},"    string name;\n",[84,8116,8117],{"class":86,"line":195},[84,8118,8119],{"class":328},"    \u002F\u002F年龄\n",[84,8121,8122,8124],{"class":86,"line":206},[84,8123,2314],{"class":473},[84,8125,8126],{"class":477}," age;\n",[84,8128,8129],{"class":86,"line":217},[84,8130,8131],{"class":328},"    \u002F\u002F分数\n",[84,8133,8134,8136],{"class":86,"line":227},[84,8135,2314],{"class":473},[84,8137,8138],{"class":477}," score;\n",[84,8140,8141],{"class":86,"line":238},[84,8142,4324],{"class":477},[84,8144,8145,8147],{"class":86,"line":249},[84,8146,8088],{"class":473},[84,8148,8149],{"class":90}," School\n",[84,8151,8152],{"class":86,"line":262},[84,8153,1886],{"class":477},[84,8155,8156],{"class":86,"line":273},[84,8157,8100],{"class":328},[84,8159,8160],{"class":86,"line":283},[84,8161,2729],{"emptyLinePlaceholder":403},[84,8163,8164],{"class":86,"line":294},[84,8165,8109],{"class":328},[84,8167,8168],{"class":86,"line":2028},[84,8169,8114],{"class":477},[84,8171,8172],{"class":86,"line":2057},[84,8173,8119],{"class":328},[84,8175,8176,8178],{"class":86,"line":2062},[84,8177,2314],{"class":473},[84,8179,8126],{"class":477},[84,8181,8182],{"class":86,"line":2079},[84,8183,8131],{"class":328},[84,8185,8186,8188],{"class":86,"line":2084},[84,8187,2314],{"class":473},[84,8189,8138],{"class":477},[84,8191,8192,8195],{"class":86,"line":2089},[84,8193,8194],{"class":477},"} s3;",[84,8196,8197],{"class":328}," \u002F\u002F创建结构体时就创建了变量\n",[84,8199,8200,8202,8204],{"class":86,"line":2094},[84,8201,481],{"class":473},[84,8203,2302],{"class":90},[84,8205,2305],{"class":477},[84,8207,8208],{"class":86,"line":2108},[84,8209,1886],{"class":477},[84,8211,8212],{"class":86,"line":2113},[84,8213,8214],{"class":328},"    \u002F\u002F2.通过学生类型创建具体学生\n",[84,8216,8217],{"class":86,"line":2906},[84,8218,8219],{"class":328},"    \u002F\u002F2.1 struct Student s1;\n",[84,8221,8222,8225,8228],{"class":86,"line":2920},[84,8223,8224],{"class":473},"    struct",[84,8226,8227],{"class":90}," Student",[84,8229,8230],{"class":477}," s1;\n",[84,8232,8233],{"class":86,"line":2928},[84,8234,8235],{"class":328},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[84,8237,8238,8241,8243,8246],{"class":86,"line":2933},[84,8239,8240],{"class":477},"    s1.name",[84,8242,523],{"class":473},[84,8244,8245],{"class":104},"\"张三\"",[84,8247,1634],{"class":477},[84,8249,8250,8253,8255,8257],{"class":86,"line":2939},[84,8251,8252],{"class":477},"    s1.age",[84,8254,523],{"class":473},[84,8256,1123],{"class":94},[84,8258,1634],{"class":477},[84,8260,8261,8264,8266,8268],{"class":86,"line":2945},[84,8262,8263],{"class":477},"    s1.score",[84,8265,523],{"class":473},[84,8267,728],{"class":94},[84,8269,1634],{"class":477},[84,8271,8272],{"class":86,"line":2950},[84,8273,8274],{"class":328},"    \u002F\u002F输出结果\n",[84,8276,8278,8280,8282,8285,8287,8290,8292,8295,8297],{"class":86,"line":8277},37,[84,8279,1891],{"class":477},[84,8281,1517],{"class":473},[84,8283,8284],{"class":477},"s1.name",[84,8286,1517],{"class":473},[84,8288,8289],{"class":477},"s1.age",[84,8291,1517],{"class":473},[84,8293,8294],{"class":477},"s1.score",[84,8296,1517],{"class":473},[84,8298,1539],{"class":477},[84,8300,8302],{"class":86,"line":8301},38,[84,8303,2729],{"emptyLinePlaceholder":403},[84,8305,8307],{"class":86,"line":8306},39,[84,8308,8309],{"class":328},"    \u002F\u002F2.2 struct Student s2={...}\n",[84,8311,8313,8315,8317,8320,8322,8324,8327,8329,8331,8333,8335],{"class":86,"line":8312},40,[84,8314,8224],{"class":473},[84,8316,8227],{"class":90},[84,8318,8319],{"class":477}," s2",[84,8321,523],{"class":473},[84,8323,1369],{"class":477},[84,8325,8326],{"class":104},"\"王五\"",[84,8328,851],{"class":477},[84,8330,1123],{"class":94},[84,8332,851],{"class":477},[84,8334,728],{"class":94},[84,8336,4324],{"class":477},[84,8338,8340],{"class":86,"line":8339},41,[84,8341,2729],{"emptyLinePlaceholder":403},[84,8343,8345],{"class":86,"line":8344},42,[84,8346,8347],{"class":328},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[84,8349,8351,8354,8356,8358],{"class":86,"line":8350},43,[84,8352,8353],{"class":477},"    s3.name",[84,8355,523],{"class":473},[84,8357,4007],{"class":104},[84,8359,1634],{"class":477},[84,8361,8363,8366,8368,8370],{"class":86,"line":8362},44,[84,8364,8365],{"class":477},"    s3.age",[84,8367,523],{"class":473},[84,8369,1123],{"class":94},[84,8371,1634],{"class":477},[84,8373,8375,8378,8380,8382],{"class":86,"line":8374},45,[84,8376,8377],{"class":477},"    s3.score",[84,8379,523],{"class":473},[84,8381,1173],{"class":94},[84,8383,1634],{"class":477},[84,8385,8387],{"class":86,"line":8386},46,[84,8388,1905],{"class":477},[35,8390,8391],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8393,8395],{"id":8394},"_42结构体数组","4.2结构体数组",[35,8397,8398],{},"将自定义的结构体放入到数组中方便维护",[35,8400,8401,8402,8405],{},"语法：struct 结构体名 数组名",[84,8403,8404],{},"元素个数","={ {}，{},...{} };",[75,8407,8409],{"className":464,"code":8408,"language":466,"meta":66,"style":66},"#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",[81,8410,8411,8417,8427,8433,8438,8444,8448,8452,8458,8464,8468,8472,8480,8484,8489,8504,8508,8524,8540,8544,8549,8565,8580,8595,8600,8626,8630,8653,8657],{"__ignoreMap":66},[84,8412,8413,8415],{"class":86,"line":87},[84,8414,2279],{"class":473},[84,8416,2282],{"class":104},[84,8418,8419,8421,8423,8425],{"class":86,"line":98},[84,8420,2287],{"class":473},[84,8422,2290],{"class":473},[84,8424,2293],{"class":90},[84,8426,1634],{"class":477},[84,8428,8429,8431],{"class":86,"line":70},[84,8430,2279],{"class":473},[84,8432,8078],{"class":104},[84,8434,8435],{"class":86,"line":120},[84,8436,8437],{"class":328},"\u002F\u002F1.定义结构体\n",[84,8439,8440,8442],{"class":86,"line":131},[84,8441,8088],{"class":473},[84,8443,8091],{"class":90},[84,8445,8446],{"class":86,"line":145},[84,8447,1886],{"class":477},[84,8449,8450],{"class":86,"line":156},[84,8451,8114],{"class":477},[84,8453,8454,8456],{"class":86,"line":164},[84,8455,2314],{"class":473},[84,8457,8126],{"class":477},[84,8459,8460,8462],{"class":86,"line":175},[84,8461,2314],{"class":473},[84,8463,8138],{"class":477},[84,8465,8466],{"class":86,"line":185},[84,8467,2729],{"emptyLinePlaceholder":403},[84,8469,8470],{"class":86,"line":195},[84,8471,4324],{"class":477},[84,8473,8474,8476,8478],{"class":86,"line":206},[84,8475,481],{"class":473},[84,8477,2302],{"class":90},[84,8479,2305],{"class":477},[84,8481,8482],{"class":86,"line":217},[84,8483,1886],{"class":477},[84,8485,8486],{"class":86,"line":227},[84,8487,8488],{"class":328},"    \u002F\u002F2.创建结构体数组\n",[84,8490,8491,8493,8495,8498,8500,8502],{"class":86,"line":238},[84,8492,8224],{"class":473},[84,8494,8227],{"class":90},[84,8496,8497],{"class":477}," stuArray[",[84,8499,553],{"class":94},[84,8501,1413],{"class":477},[84,8503,5237],{"class":473},[84,8505,8506],{"class":86,"line":249},[84,8507,2359],{"class":477},[84,8509,8510,8512,8514,8516,8518,8520,8522],{"class":86,"line":262},[84,8511,5246],{"class":477},[84,8513,8245],{"class":104},[84,8515,851],{"class":477},[84,8517,1123],{"class":94},[84,8519,851],{"class":477},[84,8521,784],{"class":94},[84,8523,5259],{"class":477},[84,8525,8526,8528,8530,8532,8534,8536,8538],{"class":86,"line":273},[84,8527,5246],{"class":477},[84,8529,4007],{"class":104},[84,8531,851],{"class":477},[84,8533,1048],{"class":94},[84,8535,851],{"class":477},[84,8537,1048],{"class":94},[84,8539,1905],{"class":477},[84,8541,8542],{"class":86,"line":283},[84,8543,2516],{"class":477},[84,8545,8546],{"class":86,"line":294},[84,8547,8548],{"class":328},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[84,8550,8551,8554,8556,8559,8561,8563],{"class":86,"line":2028},[84,8552,8553],{"class":477},"    stuArray[",[84,8555,692],{"class":94},[84,8557,8558],{"class":477},"].name",[84,8560,523],{"class":473},[84,8562,4030],{"class":104},[84,8564,1634],{"class":477},[84,8566,8567,8569,8571,8574,8576,8578],{"class":86,"line":2057},[84,8568,8553],{"class":477},[84,8570,692],{"class":94},[84,8572,8573],{"class":477},"].age",[84,8575,523],{"class":473},[84,8577,553],{"class":94},[84,8579,1634],{"class":477},[84,8581,8582,8584,8586,8589,8591,8593],{"class":86,"line":2062},[84,8583,8553],{"class":477},[84,8585,692],{"class":94},[84,8587,8588],{"class":477},"].score",[84,8590,523],{"class":473},[84,8592,553],{"class":94},[84,8594,1634],{"class":477},[84,8596,8597],{"class":86,"line":2079},[84,8598,8599],{"class":328},"    \u002F\u002F4.遍历结构体数组\n",[84,8601,8602,8604,8606,8608,8610,8612,8614,8616,8618,8620,8622,8624],{"class":86,"line":2084},[84,8603,3530],{"class":473},[84,8605,1991],{"class":477},[84,8607,481],{"class":473},[84,8609,3361],{"class":477},[84,8611,523],{"class":473},[84,8613,666],{"class":94},[84,8615,3368],{"class":477},[84,8617,1383],{"class":473},[84,8619,553],{"class":94},[84,8621,3368],{"class":477},[84,8623,2621],{"class":473},[84,8625,484],{"class":477},[84,8627,8628],{"class":86,"line":2089},[84,8629,2359],{"class":477},[84,8631,8632,8634,8636,8639,8641,8644,8646,8649,8651],{"class":86,"line":2094},[84,8633,3780],{"class":477},[84,8635,1517],{"class":473},[84,8637,8638],{"class":477},"stuArray[i].name",[84,8640,1517],{"class":473},[84,8642,8643],{"class":477},"stuArray[i].age",[84,8645,1517],{"class":473},[84,8647,8648],{"class":477},"stuArray[i].score",[84,8650,1517],{"class":473},[84,8652,1539],{"class":477},[84,8654,8655],{"class":86,"line":2108},[84,8656,2516],{"class":477},[84,8658,8659],{"class":86,"line":2113},[84,8660,1905],{"class":477},[14,8662,8664],{"id":8663},"_43结构体指针","4.3结构体指针",[35,8666,8667],{},"作用：通过指针访问结构体中的成员",[35,8669,8670],{},"利用操作符->可以通过结构体指针访问结构体属性",[75,8672,8674],{"className":464,"code":8673,"language":466,"meta":66,"style":66},"#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",[81,8675,8676,8682,8692,8698,8702,8708,8712,8716,8722,8728,8732,8740,8744,8749,8774,8779,8794,8799,8822],{"__ignoreMap":66},[84,8677,8678,8680],{"class":86,"line":87},[84,8679,2279],{"class":473},[84,8681,2282],{"class":104},[84,8683,8684,8686,8688,8690],{"class":86,"line":98},[84,8685,2287],{"class":473},[84,8687,2290],{"class":473},[84,8689,2293],{"class":90},[84,8691,1634],{"class":477},[84,8693,8694,8696],{"class":86,"line":70},[84,8695,2279],{"class":473},[84,8697,8078],{"class":104},[84,8699,8700],{"class":86,"line":120},[84,8701,8437],{"class":328},[84,8703,8704,8706],{"class":86,"line":131},[84,8705,8088],{"class":473},[84,8707,8091],{"class":90},[84,8709,8710],{"class":86,"line":145},[84,8711,1886],{"class":477},[84,8713,8714],{"class":86,"line":156},[84,8715,8114],{"class":477},[84,8717,8718,8720],{"class":86,"line":164},[84,8719,2314],{"class":473},[84,8721,8126],{"class":477},[84,8723,8724,8726],{"class":86,"line":175},[84,8725,2314],{"class":473},[84,8727,8138],{"class":477},[84,8729,8730],{"class":86,"line":185},[84,8731,4324],{"class":477},[84,8733,8734,8736,8738],{"class":86,"line":195},[84,8735,481],{"class":473},[84,8737,2302],{"class":90},[84,8739,2305],{"class":477},[84,8741,8742],{"class":86,"line":206},[84,8743,1886],{"class":477},[84,8745,8746],{"class":86,"line":217},[84,8747,8748],{"class":328},"    \u002F\u002F创建学生结构体变量\n",[84,8750,8751,8753,8755,8758,8760,8762,8764,8766,8768,8770,8772],{"class":86,"line":227},[84,8752,8224],{"class":473},[84,8754,8227],{"class":90},[84,8756,8757],{"class":477}," s",[84,8759,523],{"class":473},[84,8761,1369],{"class":477},[84,8763,8245],{"class":104},[84,8765,851],{"class":477},[84,8767,1123],{"class":94},[84,8769,851],{"class":477},[84,8771,2052],{"class":94},[84,8773,4324],{"class":477},[84,8775,8776],{"class":86,"line":238},[84,8777,8778],{"class":328},"    \u002F\u002F通过指针指向结构体变量\n",[84,8780,8781,8783,8785,8787,8789,8791],{"class":86,"line":249},[84,8782,8224],{"class":473},[84,8784,8227],{"class":90},[84,8786,6847],{"class":473},[84,8788,35],{"class":477},[84,8790,6668],{"class":473},[84,8792,8793],{"class":477},"s\n",[84,8795,8796],{"class":86,"line":262},[84,8797,8798],{"class":328},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[84,8800,8801,8803,8805,8808,8810,8813,8815,8818,8820],{"class":86,"line":273},[84,8802,1891],{"class":477},[84,8804,1517],{"class":473},[84,8806,8807],{"class":477},"p->name",[84,8809,1517],{"class":473},[84,8811,8812],{"class":477},"p->age",[84,8814,1517],{"class":473},[84,8816,8817],{"class":477},"p->score",[84,8819,1517],{"class":473},[84,8821,1539],{"class":477},[84,8823,8824],{"class":86,"line":283},[84,8825,1905],{"class":477},[14,8827,8829],{"id":8828},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[35,8831,8832],{},"作用：结构体中的成员可以是另一个结构体",[35,8834,8835],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[75,8837,8839],{"className":464,"code":8838,"language":466,"meta":66,"style":66},"#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",[81,8840,8841,8847,8857,8863,8868,8876,8880,8884,8890,8896,8900,8905,8912,8916,8923,8927,8933,8938,8942,8950,8954,8959,8964,8969,8980,8992,9003,9016,9027,9038],{"__ignoreMap":66},[84,8842,8843,8845],{"class":86,"line":87},[84,8844,2279],{"class":473},[84,8846,2282],{"class":104},[84,8848,8849,8851,8853,8855],{"class":86,"line":98},[84,8850,2287],{"class":473},[84,8852,2290],{"class":473},[84,8854,2293],{"class":90},[84,8856,1634],{"class":477},[84,8858,8859,8861],{"class":86,"line":70},[84,8860,2279],{"class":473},[84,8862,8078],{"class":104},[84,8864,8865],{"class":86,"line":120},[84,8866,8867],{"class":328},"\u002F\u002F定义学生结构体\n",[84,8869,8870,8872,8874],{"class":86,"line":131},[84,8871,8088],{"class":473},[84,8873,8227],{"class":90},[84,8875,3003],{"class":477},[84,8877,8878],{"class":86,"line":145},[84,8879,1886],{"class":477},[84,8881,8882],{"class":86,"line":156},[84,8883,8114],{"class":477},[84,8885,8886,8888],{"class":86,"line":164},[84,8887,2314],{"class":473},[84,8889,8126],{"class":477},[84,8891,8892,8894],{"class":86,"line":175},[84,8893,2314],{"class":473},[84,8895,8138],{"class":477},[84,8897,8898],{"class":86,"line":185},[84,8899,1905],{"class":477},[84,8901,8902],{"class":86,"line":195},[84,8903,8904],{"class":328},"\u002F\u002F定义老师结构体\n",[84,8906,8907,8909],{"class":86,"line":206},[84,8908,8088],{"class":473},[84,8910,8911],{"class":90}," Teacher\n",[84,8913,8914],{"class":86,"line":217},[84,8915,1886],{"class":477},[84,8917,8918,8920],{"class":86,"line":227},[84,8919,2314],{"class":473},[84,8921,8922],{"class":477}," id;\n",[84,8924,8925],{"class":86,"line":238},[84,8926,8114],{"class":477},[84,8928,8929,8931],{"class":86,"line":249},[84,8930,2314],{"class":473},[84,8932,8126],{"class":477},[84,8934,8935],{"class":86,"line":262},[84,8936,8937],{"class":477},"    Student stu;\n",[84,8939,8940],{"class":86,"line":273},[84,8941,1905],{"class":477},[84,8943,8944,8946,8948],{"class":86,"line":283},[84,8945,481],{"class":473},[84,8947,2302],{"class":90},[84,8949,6307],{"class":477},[84,8951,8952],{"class":86,"line":294},[84,8953,1886],{"class":477},[84,8955,8956],{"class":86,"line":2028},[84,8957,8958],{"class":328},"    \u002F\u002F结构体嵌套结构体\n",[84,8960,8961],{"class":86,"line":2057},[84,8962,8963],{"class":328},"    \u002F\u002F创建老师\n",[84,8965,8966],{"class":86,"line":2062},[84,8967,8968],{"class":477},"    Teacher t;\n",[84,8970,8971,8974,8976,8978],{"class":86,"line":2079},[84,8972,8973],{"class":477},"    t.id",[84,8975,523],{"class":473},[84,8977,784],{"class":94},[84,8979,1634],{"class":477},[84,8981,8982,8985,8987,8990],{"class":86,"line":2084},[84,8983,8984],{"class":477},"    t.name",[84,8986,523],{"class":473},[84,8988,8989],{"class":104},"\"老王\"",[84,8991,1634],{"class":477},[84,8993,8994,8997,8999,9001],{"class":86,"line":2089},[84,8995,8996],{"class":477},"    t.age",[84,8998,523],{"class":473},[84,9000,1123],{"class":94},[84,9002,1634],{"class":477},[84,9004,9005,9008,9010,9013],{"class":86,"line":2094},[84,9006,9007],{"class":477},"    t.stu.name",[84,9009,523],{"class":473},[84,9011,9012],{"class":104},"\"小王\"",[84,9014,9015],{"class":477},"；\n",[84,9017,9018,9021,9023,9025],{"class":86,"line":2108},[84,9019,9020],{"class":477},"    t.stu.age",[84,9022,523],{"class":473},[84,9024,1173],{"class":94},[84,9026,1634],{"class":477},[84,9028,9029,9032,9034,9036],{"class":86,"line":2113},[84,9030,9031],{"class":477},"    t.stu.score",[84,9033,523],{"class":473},[84,9035,817],{"class":94},[84,9037,1634],{"class":477},[84,9039,9040],{"class":86,"line":2906},[84,9041,1905],{"class":477},[14,9043,9045],{"id":9044},"_45结构体做函数参数","4.5结构体做函数参数",[35,9047,9048],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[75,9050,9052],{"className":464,"code":9051,"language":466,"meta":66,"style":66},"#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",[81,9053,9054,9060,9070,9076,9082,9086,9090,9096,9102,9106,9111,9116,9133,9137,9170,9174,9179,9198,9202,9233,9237,9245,9249,9258,9270,9282,9294,9307,9315,9328,9340,9348],{"__ignoreMap":66},[84,9055,9056,9058],{"class":86,"line":87},[84,9057,2279],{"class":473},[84,9059,2282],{"class":104},[84,9061,9062,9064,9066,9068],{"class":86,"line":98},[84,9063,2287],{"class":473},[84,9065,2290],{"class":473},[84,9067,2293],{"class":90},[84,9069,1634],{"class":477},[84,9071,9072,9074],{"class":86,"line":70},[84,9073,2279],{"class":473},[84,9075,8078],{"class":104},[84,9077,9078,9080],{"class":86,"line":120},[84,9079,8088],{"class":473},[84,9081,8091],{"class":90},[84,9083,9084],{"class":86,"line":131},[84,9085,1886],{"class":477},[84,9087,9088],{"class":86,"line":145},[84,9089,8114],{"class":477},[84,9091,9092,9094],{"class":86,"line":156},[84,9093,2314],{"class":473},[84,9095,8126],{"class":477},[84,9097,9098,9100],{"class":86,"line":164},[84,9099,2314],{"class":473},[84,9101,8138],{"class":477},[84,9103,9104],{"class":86,"line":175},[84,9105,4324],{"class":477},[84,9107,9108],{"class":86,"line":185},[84,9109,9110],{"class":328},"\u002F\u002F打印学生信息的函数\n",[84,9112,9113],{"class":86,"line":195},[84,9114,9115],{"class":328},"\u002F\u002F值传递\n",[84,9117,9118,9120,9123,9125,9127,9129,9131],{"class":86,"line":206},[84,9119,5693],{"class":473},[84,9121,9122],{"class":90}," printStudent1",[84,9124,478],{"class":477},[84,9126,8088],{"class":473},[84,9128,8227],{"class":90},[84,9130,8757],{"class":5545},[84,9132,484],{"class":477},[84,9134,9135],{"class":86,"line":217},[84,9136,1886],{"class":477},[84,9138,9139,9141,9143,9146,9148,9151,9153,9156,9158,9160,9162,9165,9167],{"class":86,"line":227},[84,9140,6858],{"class":477},[84,9142,1517],{"class":473},[84,9144,9145],{"class":477}," s.name ",[84,9147,1517],{"class":473},[84,9149,9150],{"class":104}," \" \"",[84,9152,1785],{"class":473},[84,9154,9155],{"class":477}," s.age ",[84,9157,1517],{"class":473},[84,9159,9150],{"class":104},[84,9161,1785],{"class":473},[84,9163,9164],{"class":477}," s.score ",[84,9166,1517],{"class":473},[84,9168,9169],{"class":477}," endl;\n",[84,9171,9172],{"class":86,"line":238},[84,9173,1905],{"class":477},[84,9175,9176],{"class":86,"line":249},[84,9177,9178],{"class":328},"\u002F\u002F地址传递\n",[84,9180,9181,9183,9186,9188,9190,9192,9194,9196],{"class":86,"line":262},[84,9182,5693],{"class":473},[84,9184,9185],{"class":90}," printStudent2",[84,9187,478],{"class":477},[84,9189,8088],{"class":473},[84,9191,8227],{"class":90},[84,9193,6847],{"class":473},[84,9195,1168],{"class":5545},[84,9197,484],{"class":477},[84,9199,9200],{"class":86,"line":273},[84,9201,1886],{"class":477},[84,9203,9204,9206,9208,9211,9213,9215,9217,9220,9222,9224,9226,9229,9231],{"class":86,"line":283},[84,9205,6858],{"class":477},[84,9207,1517],{"class":473},[84,9209,9210],{"class":477}," s->name ",[84,9212,1517],{"class":473},[84,9214,9150],{"class":104},[84,9216,1785],{"class":473},[84,9218,9219],{"class":477}," s->age ",[84,9221,1517],{"class":473},[84,9223,9150],{"class":104},[84,9225,1785],{"class":473},[84,9227,9228],{"class":477}," s->score ",[84,9230,1517],{"class":473},[84,9232,9169],{"class":477},[84,9234,9235],{"class":86,"line":294},[84,9236,1905],{"class":477},[84,9238,9239,9241,9243],{"class":86,"line":2028},[84,9240,481],{"class":473},[84,9242,2302],{"class":90},[84,9244,2305],{"class":477},[84,9246,9247],{"class":86,"line":2057},[84,9248,1886],{"class":477},[84,9250,9251,9253,9255],{"class":86,"line":2062},[84,9252,8224],{"class":473},[84,9254,8227],{"class":90},[84,9256,9257],{"class":477}," s;\n",[84,9259,9260,9263,9265,9268],{"class":86,"line":2079},[84,9261,9262],{"class":477},"    s.name ",[84,9264,523],{"class":473},[84,9266,9267],{"class":104}," \"张三\"",[84,9269,1634],{"class":477},[84,9271,9272,9275,9277,9280],{"class":86,"line":2084},[84,9273,9274],{"class":477},"    s.age ",[84,9276,523],{"class":473},[84,9278,9279],{"class":94}," 20",[84,9281,1634],{"class":477},[84,9283,9284,9287,9289,9292],{"class":86,"line":2089},[84,9285,9286],{"class":477},"    s.score ",[84,9288,523],{"class":473},[84,9290,9291],{"class":94}," 85",[84,9293,1634],{"class":477},[84,9295,9296,9298,9300,9303,9305],{"class":86,"line":2094},[84,9297,1891],{"class":477},[84,9299,1517],{"class":473},[84,9301,9302],{"class":104},"\"值传递:\"",[84,9304,1517],{"class":473},[84,9306,1539],{"class":477},[84,9308,9309,9312],{"class":86,"line":2108},[84,9310,9311],{"class":90},"    printStudent1",[84,9313,9314],{"class":477},"(s);\n",[84,9316,9317,9319,9321,9324,9326],{"class":86,"line":2113},[84,9318,1891],{"class":477},[84,9320,1517],{"class":473},[84,9322,9323],{"class":104},"\"地址传递:\"",[84,9325,1517],{"class":473},[84,9327,1539],{"class":477},[84,9329,9330,9333,9335,9337],{"class":86,"line":2906},[84,9331,9332],{"class":90},"    printStudent2",[84,9334,478],{"class":477},[84,9336,826],{"class":473},[84,9338,9339],{"class":477},"s); \n",[84,9341,9342,9344,9346],{"class":86,"line":2920},[84,9343,4419],{"class":473},[84,9345,4422],{"class":94},[84,9347,1634],{"class":477},[84,9349,9350],{"class":86,"line":2928},[84,9351,1905],{"class":477},[35,9353,9354],{},"注意：",[1480,9356,9357,9360],{},[31,9358,9359],{},"1.先定义结构体，不要在函数中写结构体的定义",[31,9361,9362],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9364,9366],{"id":9365},"_46结构体中const使用场景","4.6结构体中const使用场景",[35,9368,9369],{},"用const防止误操作",[75,9371,9373],{"className":464,"code":9372,"language":466,"meta":66,"style":66},"#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",[81,9374,9375,9381,9391,9397,9402,9406,9410,9416,9422,9426,9442,9446,9469,9473,9481,9485,9506,9513,9517],{"__ignoreMap":66},[84,9376,9377,9379],{"class":86,"line":87},[84,9378,2279],{"class":473},[84,9380,2282],{"class":104},[84,9382,9383,9385,9387,9389],{"class":86,"line":98},[84,9384,2287],{"class":473},[84,9386,2290],{"class":473},[84,9388,2293],{"class":90},[84,9390,1634],{"class":477},[84,9392,9393,9395],{"class":86,"line":70},[84,9394,2279],{"class":473},[84,9396,8078],{"class":104},[84,9398,9399],{"class":86,"line":120},[84,9400,9401],{"class":477},"sctuct Student\n",[84,9403,9404],{"class":86,"line":131},[84,9405,1886],{"class":477},[84,9407,9408],{"class":86,"line":145},[84,9409,8114],{"class":477},[84,9411,9412,9414],{"class":86,"line":156},[84,9413,2314],{"class":473},[84,9415,8126],{"class":477},[84,9417,9418,9420],{"class":86,"line":164},[84,9419,2314],{"class":473},[84,9421,8138],{"class":477},[84,9423,9424],{"class":86,"line":175},[84,9425,4324],{"class":477},[84,9427,9428,9430,9433,9435,9438,9440],{"class":86,"line":185},[84,9429,5693],{"class":473},[84,9431,9432],{"class":90}," printStudents",[84,9434,478],{"class":477},[84,9436,9437],{"class":90},"student",[84,9439,8757],{"class":5545},[84,9441,484],{"class":477},[84,9443,9444],{"class":86,"line":195},[84,9445,1886],{"class":477},[84,9447,9448,9450,9452,9455,9457,9460,9462,9465,9467],{"class":86,"line":206},[84,9449,1891],{"class":477},[84,9451,1517],{"class":473},[84,9453,9454],{"class":477},"s.name",[84,9456,1517],{"class":473},[84,9458,9459],{"class":477},"s.age",[84,9461,1517],{"class":473},[84,9463,9464],{"class":477},"s.score",[84,9466,1517],{"class":473},[84,9468,1539],{"class":477},[84,9470,9471],{"class":86,"line":217},[84,9472,1905],{"class":477},[84,9474,9475,9477,9479],{"class":86,"line":227},[84,9476,481],{"class":473},[84,9478,2302],{"class":90},[84,9480,6307],{"class":477},[84,9482,9483],{"class":86,"line":238},[84,9484,1886],{"class":477},[84,9486,9487,9490,9492,9494,9496,9498,9500,9502,9504],{"class":86,"line":249},[84,9488,9489],{"class":477},"    Student s",[84,9491,523],{"class":473},[84,9493,1369],{"class":477},[84,9495,8245],{"class":104},[84,9497,851],{"class":477},[84,9499,1123],{"class":94},[84,9501,851],{"class":477},[84,9503,1123],{"class":94},[84,9505,4324],{"class":477},[84,9507,9508,9511],{"class":86,"line":262},[84,9509,9510],{"class":90},"    printStudent",[84,9512,9314],{"class":477},[84,9514,9515],{"class":86,"line":273},[84,9516,2729],{"emptyLinePlaceholder":403},[84,9518,9519],{"class":86,"line":283},[84,9520,1905],{"class":477},[35,9522,9354],{},[1480,9524,9525,9528,9531],{},[31,9526,9527],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[31,9529,9530],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[31,9532,9533],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[75,9535,9537],{"className":464,"code":9536,"language":466,"meta":66,"style":66},"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",[81,9538,9539,9558,9562,9567,9587],{"__ignoreMap":66},[84,9540,9541,9543,9545,9547,9549,9552,9554,9556],{"class":86,"line":87},[84,9542,5693],{"class":473},[84,9544,9432],{"class":90},[84,9546,478],{"class":477},[84,9548,7121],{"class":473},[84,9550,9551],{"class":90}," student",[84,9553,6847],{"class":473},[84,9555,1168],{"class":5545},[84,9557,484],{"class":477},[84,9559,9560],{"class":86,"line":98},[84,9561,1886],{"class":477},[84,9563,9564],{"class":86,"line":70},[84,9565,9566],{"class":328},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[84,9568,9569,9571,9573,9575,9577,9579,9581,9583,9585],{"class":86,"line":120},[84,9570,1891],{"class":477},[84,9572,1517],{"class":473},[84,9574,9454],{"class":477},[84,9576,1517],{"class":473},[84,9578,9459],{"class":477},[84,9580,1517],{"class":473},[84,9582,9464],{"class":477},[84,9584,1517],{"class":473},[84,9586,1539],{"class":477},[84,9588,9589],{"class":86,"line":131},[84,9590,1905],{"class":477},[14,9592,9594],{"id":9593},"_47案例","4.7案例",[28,9596,9597],{},[31,9598,9599],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[75,9601,9603],{"className":464,"code":9602,"language":466,"meta":66,"style":66},"#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",[81,9604,9605,9611,9621,9627,9634,9638,9644,9648,9653,9659,9665,9669,9673,9679,9683,9688,9693,9706,9710,9715,9741,9745,9757,9784,9788,9800,9810,9814,9819,9848,9852,9864,9873,9900,9911,9921,9925,9929,9933,9938,9962,9966,9990,9994,10013,10039,10043,10068,10091,10115,10120,10125,10130,10139,10144,10150,10171,10177,10191,10197,10224,10233,10239,10247,10252],{"__ignoreMap":66},[84,9606,9607,9609],{"class":86,"line":87},[84,9608,2279],{"class":473},[84,9610,2282],{"class":104},[84,9612,9613,9615,9617,9619],{"class":86,"line":98},[84,9614,2287],{"class":473},[84,9616,2290],{"class":473},[84,9618,2293],{"class":90},[84,9620,1634],{"class":477},[84,9622,9623,9625],{"class":86,"line":70},[84,9624,2279],{"class":473},[84,9626,8078],{"class":104},[84,9628,9629,9631],{"class":86,"line":120},[84,9630,2279],{"class":473},[84,9632,9633],{"class":104},"\u003Cctime>\n",[84,9635,9636],{"class":86,"line":131},[84,9637,8867],{"class":328},[84,9639,9640,9642],{"class":86,"line":145},[84,9641,8088],{"class":473},[84,9643,8091],{"class":90},[84,9645,9646],{"class":86,"line":156},[84,9647,1886],{"class":477},[84,9649,9650],{"class":86,"line":164},[84,9651,9652],{"class":477},"    string sName;\n",[84,9654,9655,9657],{"class":86,"line":175},[84,9656,2314],{"class":473},[84,9658,8126],{"class":477},[84,9660,9661,9663],{"class":86,"line":185},[84,9662,2314],{"class":473},[84,9664,8138],{"class":477},[84,9666,9667],{"class":86,"line":195},[84,9668,4324],{"class":477},[84,9670,9671],{"class":86,"line":206},[84,9672,8904],{"class":328},[84,9674,9675,9677],{"class":86,"line":217},[84,9676,8088],{"class":473},[84,9678,8911],{"class":90},[84,9680,9681],{"class":86,"line":227},[84,9682,1886],{"class":477},[84,9684,9685],{"class":86,"line":238},[84,9686,9687],{"class":477},"    string tName;\n",[84,9689,9690],{"class":86,"line":249},[84,9691,9692],{"class":328},"    \u002F\u002F学生数组\n",[84,9694,9695,9697,9699,9702,9704],{"class":86,"line":262},[84,9696,8224],{"class":473},[84,9698,8227],{"class":90},[84,9700,9701],{"class":477}," sArray[",[84,9703,792],{"class":94},[84,9705,5019],{"class":477},[84,9707,9708],{"class":86,"line":273},[84,9709,4324],{"class":477},[84,9711,9712],{"class":86,"line":283},[84,9713,9714],{"class":328},"\u002F\u002F给老师和学生赋值的函数\n",[84,9716,9717,9719,9722,9724,9726,9729,9732,9735,9737,9739],{"class":86,"line":294},[84,9718,5693],{"class":473},[84,9720,9721],{"class":90}," allocateSpace",[84,9723,478],{"class":477},[84,9725,8088],{"class":473},[84,9727,9728],{"class":90}," Teacher",[84,9730,9731],{"class":5545}," tArray",[84,9733,9734],{"class":477},"[],",[84,9736,481],{"class":473},[84,9738,7660],{"class":5545},[84,9740,484],{"class":477},[84,9742,9743],{"class":86,"line":2028},[84,9744,1886],{"class":477},[84,9746,9747,9750,9752,9755],{"class":86,"line":2057},[84,9748,9749],{"class":477},"    string nameSeed",[84,9751,523],{"class":473},[84,9753,9754],{"class":104},"\"ABCDE\"",[84,9756,1634],{"class":477},[84,9758,9759,9761,9763,9765,9768,9770,9772,9775,9777,9780,9782],{"class":86,"line":2062},[84,9760,3530],{"class":473},[84,9762,1991],{"class":477},[84,9764,481],{"class":473},[84,9766,9767],{"class":477}," i ",[84,9769,523],{"class":473},[84,9771,4422],{"class":94},[84,9773,9774],{"class":477},"; i ",[84,9776,1383],{"class":473},[84,9778,9779],{"class":477}," len; i",[84,9781,2621],{"class":473},[84,9783,484],{"class":477},[84,9785,9786],{"class":86,"line":2079},[84,9787,2359],{"class":477},[84,9789,9790,9793,9795,9798],{"class":86,"line":2084},[84,9791,9792],{"class":477},"        tArray[i].tName ",[84,9794,523],{"class":473},[84,9796,9797],{"class":104}," \"Teacher_\"",[84,9799,1634],{"class":477},[84,9801,9802,9804,9807],{"class":86,"line":2089},[84,9803,9792],{"class":477},[84,9805,9806],{"class":473},"+=",[84,9808,9809],{"class":477},"nameSeed[i];\n",[84,9811,9812],{"class":86,"line":2094},[84,9813,2729],{"emptyLinePlaceholder":403},[84,9815,9816],{"class":86,"line":2108},[84,9817,9818],{"class":328},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[84,9820,9821,9823,9825,9827,9830,9832,9834,9837,9839,9841,9844,9846],{"class":86,"line":2113},[84,9822,3732],{"class":473},[84,9824,1991],{"class":477},[84,9826,481],{"class":473},[84,9828,9829],{"class":477}," j ",[84,9831,523],{"class":473},[84,9833,4422],{"class":94},[84,9835,9836],{"class":477},"; j ",[84,9838,1383],{"class":473},[84,9840,2477],{"class":94},[84,9842,9843],{"class":477},"; j",[84,9845,2621],{"class":473},[84,9847,484],{"class":477},[84,9849,9850],{"class":86,"line":2906},[84,9851,2839],{"class":477},[84,9853,9854,9857,9859,9862],{"class":86,"line":2920},[84,9855,9856],{"class":477},"            tArray[i].sArray[j].sName ",[84,9858,523],{"class":473},[84,9860,9861],{"class":104}," \"Student_\"",[84,9863,1634],{"class":477},[84,9865,9866,9868,9870],{"class":86,"line":2928},[84,9867,9856],{"class":477},[84,9869,9806],{"class":473},[84,9871,9872],{"class":477}," nameSeed[j];\n",[84,9874,9875,9878,9881,9883,9885,9887,9889,9891,9893,9895,9897],{"class":86,"line":2933},[84,9876,9877],{"class":473},"            int",[84,9879,9880],{"class":477}," random",[84,9882,523],{"class":473},[84,9884,2753],{"class":90},[84,9886,2756],{"class":477},[84,9888,801],{"class":473},[84,9890,1380],{"class":94},[84,9892,954],{"class":473},[84,9894,874],{"class":94},[84,9896,532],{"class":477},[84,9898,9899],{"class":328},"\u002F\u002F40~99\n",[84,9901,9902,9905,9907,9909],{"class":86,"line":2939},[84,9903,9904],{"class":477},"            tArray[i].sArray[j].age ",[84,9906,523],{"class":473},[84,9908,9279],{"class":94},[84,9910,1634],{"class":477},[84,9912,9913,9916,9918],{"class":86,"line":2945},[84,9914,9915],{"class":477},"            tArray[i].sArray[j].score ",[84,9917,523],{"class":473},[84,9919,9920],{"class":477}," random;\n",[84,9922,9923],{"class":86,"line":2950},[84,9924,2858],{"class":477},[84,9926,9927],{"class":86,"line":8277},[84,9928,2516],{"class":477},[84,9930,9931],{"class":86,"line":8301},[84,9932,1905],{"class":477},[84,9934,9935],{"class":86,"line":8306},[84,9936,9937],{"class":328},"\u002F\u002F打印所有信息的函数\n",[84,9939,9940,9942,9945,9947,9949,9951,9953,9956,9958,9960],{"class":86,"line":8312},[84,9941,5693],{"class":473},[84,9943,9944],{"class":90}," printInfo",[84,9946,478],{"class":477},[84,9948,8088],{"class":473},[84,9950,9728],{"class":90},[84,9952,9731],{"class":5545},[84,9954,9955],{"class":477},"[], ",[84,9957,481],{"class":473},[84,9959,7660],{"class":5545},[84,9961,484],{"class":477},[84,9963,9964],{"class":86,"line":8339},[84,9965,1886],{"class":477},[84,9967,9968,9970,9972,9974,9976,9978,9980,9982,9984,9986,9988],{"class":86,"line":8344},[84,9969,3530],{"class":473},[84,9971,1991],{"class":477},[84,9973,481],{"class":473},[84,9975,9767],{"class":477},[84,9977,523],{"class":473},[84,9979,4422],{"class":94},[84,9981,9774],{"class":477},[84,9983,1383],{"class":473},[84,9985,9779],{"class":477},[84,9987,2621],{"class":473},[84,9989,484],{"class":477},[84,9991,9992],{"class":86,"line":8350},[84,9993,2359],{"class":477},[84,9995,9996,9999,10001,10004,10006,10009,10011],{"class":86,"line":8362},[84,9997,9998],{"class":477},"        cout ",[84,10000,1517],{"class":473},[84,10002,10003],{"class":104}," \"Teacher: \"",[84,10005,1785],{"class":473},[84,10007,10008],{"class":477}," tArray[i].tName ",[84,10010,1517],{"class":473},[84,10012,9169],{"class":477},[84,10014,10015,10017,10019,10021,10023,10025,10027,10029,10031,10033,10035,10037],{"class":86,"line":8374},[84,10016,3732],{"class":473},[84,10018,1991],{"class":477},[84,10020,481],{"class":473},[84,10022,9829],{"class":477},[84,10024,523],{"class":473},[84,10026,4422],{"class":94},[84,10028,9836],{"class":477},[84,10030,1383],{"class":473},[84,10032,2477],{"class":94},[84,10034,9843],{"class":477},[84,10036,2621],{"class":473},[84,10038,484],{"class":477},[84,10040,10041],{"class":86,"line":8386},[84,10042,2839],{"class":477},[84,10044,10046,10049,10051,10054,10056,10059,10061,10064,10066],{"class":86,"line":10045},47,[84,10047,10048],{"class":477},"            cout ",[84,10050,1517],{"class":473},[84,10052,10053],{"class":104}," \"",[84,10055,1574],{"class":94},[84,10057,10058],{"class":104},"Student: \"",[84,10060,1785],{"class":473},[84,10062,10063],{"class":477}," tArray[i].sArray[j].sName",[84,10065,1517],{"class":473},[84,10067,1539],{"class":477},[84,10069,10071,10073,10075,10077,10079,10082,10084,10087,10089],{"class":86,"line":10070},48,[84,10072,10048],{"class":477},[84,10074,1517],{"class":473},[84,10076,10053],{"class":104},[84,10078,1574],{"class":94},[84,10080,10081],{"class":104},"Age: \"",[84,10083,1785],{"class":473},[84,10085,10086],{"class":477}," tArray[i].sArray[j].age ",[84,10088,1517],{"class":473},[84,10090,9169],{"class":477},[84,10092,10094,10096,10098,10100,10102,10105,10107,10110,10112],{"class":86,"line":10093},49,[84,10095,10048],{"class":477},[84,10097,1517],{"class":473},[84,10099,10053],{"class":104},[84,10101,1574],{"class":94},[84,10103,10104],{"class":104},"Score: \"",[84,10106,1785],{"class":473},[84,10108,10109],{"class":477}," tArray[i].sArray[j].score ",[84,10111,1517],{"class":473},[84,10113,10114],{"class":477}," endl;   \n",[84,10116,10118],{"class":86,"line":10117},50,[84,10119,2858],{"class":477},[84,10121,10123],{"class":86,"line":10122},51,[84,10124,2516],{"class":477},[84,10126,10128],{"class":86,"line":10127},52,[84,10129,1905],{"class":477},[84,10131,10133,10135,10137],{"class":86,"line":10132},53,[84,10134,481],{"class":473},[84,10136,2302],{"class":90},[84,10138,2305],{"class":477},[84,10140,10142],{"class":86,"line":10141},54,[84,10143,1886],{"class":477},[84,10145,10147],{"class":86,"line":10146},55,[84,10148,10149],{"class":328},"    \u002F\u002F随机数种子\n",[84,10151,10153,10155,10157,10159,10161,10163,10165,10167,10169],{"class":86,"line":10152},56,[84,10154,2702],{"class":90},[84,10156,2705],{"class":477},[84,10158,2708],{"class":473},[84,10160,2711],{"class":473},[84,10162,902],{"class":477},[84,10164,2716],{"class":90},[84,10166,478],{"class":477},[84,10168,2721],{"class":94},[84,10170,2724],{"class":477},[84,10172,10174],{"class":86,"line":10173},57,[84,10175,10176],{"class":328},"    \u002F\u002F1.创建3名老师的数组\n",[84,10178,10180,10182,10184,10187,10189],{"class":86,"line":10179},58,[84,10181,8224],{"class":473},[84,10183,9728],{"class":90},[84,10185,10186],{"class":477}," tArray[",[84,10188,547],{"class":94},[84,10190,5019],{"class":477},[84,10192,10194],{"class":86,"line":10193},59,[84,10195,10196],{"class":328},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[84,10198,10200,10202,10205,10207,10210,10213,10215,10217,10220,10222],{"class":86,"line":10199},60,[84,10201,2314],{"class":473},[84,10203,10204],{"class":477}," len ",[84,10206,523],{"class":473},[84,10208,10209],{"class":473}," sizeof",[84,10211,10212],{"class":477},"(tArray) ",[84,10214,1057],{"class":473},[84,10216,10209],{"class":473},[84,10218,10219],{"class":477},"(tArray[",[84,10221,666],{"class":94},[84,10223,4185],{"class":477},[84,10225,10227,10230],{"class":86,"line":10226},61,[84,10228,10229],{"class":90},"    allocateSpace",[84,10231,10232],{"class":477},"(tArray, len);\n",[84,10234,10236],{"class":86,"line":10235},62,[84,10237,10238],{"class":328},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[84,10240,10242,10245],{"class":86,"line":10241},63,[84,10243,10244],{"class":90},"    printInfo",[84,10246,10232],{"class":477},[84,10248,10250],{"class":86,"line":10249},64,[84,10251,2729],{"emptyLinePlaceholder":403},[84,10253,10255],{"class":86,"line":10254},65,[84,10256,1905],{"class":477},[28,10258,10259],{"start":98},[31,10260,10261,10264],{},[624,10262,10263],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[35,10266,10267],{},"五名英雄信息如下：",[75,10269,10273],{"className":10270,"code":10271,"language":10272,"meta":66,"style":66},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[81,10274,10275,10293,10310,10327,10344],{"__ignoreMap":66},[84,10276,10277,10279,10282,10284,10286,10288,10291],{"class":86,"line":87},[84,10278,5246],{"class":477},[84,10280,10281],{"class":104},"\"刘备\"",[84,10283,851],{"class":477},[84,10285,1248],{"class":94},[84,10287,851],{"class":477},[84,10289,10290],{"class":104},"\"男\"",[84,10292,5259],{"class":477},[84,10294,10295,10297,10300,10302,10304,10306,10308],{"class":86,"line":98},[84,10296,5246],{"class":477},[84,10298,10299],{"class":104},"\"关羽\"",[84,10301,851],{"class":477},[84,10303,1223],{"class":94},[84,10305,851],{"class":477},[84,10307,10290],{"class":104},[84,10309,5259],{"class":477},[84,10311,10312,10314,10317,10319,10321,10323,10325],{"class":86,"line":70},[84,10313,5246],{"class":477},[84,10315,10316],{"class":104},"\"张飞\"",[84,10318,851],{"class":477},[84,10320,1173],{"class":94},[84,10322,851],{"class":477},[84,10324,10290],{"class":104},[84,10326,5259],{"class":477},[84,10328,10329,10331,10334,10336,10338,10340,10342],{"class":86,"line":120},[84,10330,5246],{"class":477},[84,10332,10333],{"class":104},"\"赵云\"",[84,10335,851],{"class":477},[84,10337,1198],{"class":94},[84,10339,851],{"class":477},[84,10341,10290],{"class":104},[84,10343,5259],{"class":477},[84,10345,10346,10348,10351,10353,10355,10357,10360],{"class":86,"line":131},[84,10347,5246],{"class":477},[84,10349,10350],{"class":104},"\"貂蝉\"",[84,10352,851],{"class":477},[84,10354,1148],{"class":94},[84,10356,851],{"class":477},[84,10358,10359],{"class":104},"\"女\"",[84,10361,5259],{"class":477},[35,10363,10364],{},"代码：",[75,10366,10368],{"className":464,"code":10367,"language":466,"meta":66,"style":66},"#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",[81,10369,10370,10376,10386,10392,10399,10403,10407,10413,10418,10422,10427,10450,10454,10479,10483,10516,10521,10550,10555,10570,10596,10616,10621,10626,10630,10634,10639,10661,10665,10689,10693,10755,10759,10763,10771,10775,10780,10791,10795,10811,10827,10843,10859,10875,10879,10899,10921,10926,10939,10946,10951,10957,10962,10975,10981],{"__ignoreMap":66},[84,10371,10372,10374],{"class":86,"line":87},[84,10373,2279],{"class":473},[84,10375,2282],{"class":104},[84,10377,10378,10380,10382,10384],{"class":86,"line":98},[84,10379,2287],{"class":473},[84,10381,2290],{"class":473},[84,10383,2293],{"class":90},[84,10385,1634],{"class":477},[84,10387,10388,10390],{"class":86,"line":70},[84,10389,2279],{"class":473},[84,10391,8078],{"class":104},[84,10393,10394,10396],{"class":86,"line":120},[84,10395,8088],{"class":473},[84,10397,10398],{"class":90}," Sanguo\n",[84,10400,10401],{"class":86,"line":131},[84,10402,1886],{"class":477},[84,10404,10405],{"class":86,"line":145},[84,10406,8114],{"class":477},[84,10408,10409,10411],{"class":86,"line":156},[84,10410,2314],{"class":473},[84,10412,8126],{"class":477},[84,10414,10415],{"class":86,"line":164},[84,10416,10417],{"class":477},"    string gender;\n",[84,10419,10420],{"class":86,"line":175},[84,10421,4324],{"class":477},[84,10423,10424],{"class":86,"line":185},[84,10425,10426],{"class":328},"\u002F\u002F定义排序函数\n",[84,10428,10429,10431,10433,10435,10438,10440,10442,10444,10446,10448],{"class":86,"line":195},[84,10430,5693],{"class":473},[84,10432,7645],{"class":90},[84,10434,478],{"class":477},[84,10436,10437],{"class":90},"Sanguo",[84,10439,6847],{"class":473},[84,10441,1168],{"class":5545},[84,10443,851],{"class":477},[84,10445,481],{"class":473},[84,10447,7660],{"class":5545},[84,10449,484],{"class":477},[84,10451,10452],{"class":86,"line":206},[84,10453,1886],{"class":477},[84,10455,10456,10458,10460,10462,10464,10466,10468,10470,10472,10475,10477],{"class":86,"line":217},[84,10457,3530],{"class":473},[84,10459,478],{"class":477},[84,10461,481],{"class":473},[84,10463,3361],{"class":477},[84,10465,523],{"class":473},[84,10467,666],{"class":94},[84,10469,3368],{"class":477},[84,10471,1383],{"class":473},[84,10473,10474],{"class":477},"len;i",[84,10476,2621],{"class":473},[84,10478,484],{"class":477},[84,10480,10481],{"class":86,"line":227},[84,10482,2359],{"class":477},[84,10484,10485,10488,10490,10492,10494,10496,10498,10500,10502,10504,10506,10508,10510,10512,10514],{"class":86,"line":238},[84,10486,10487],{"class":473},"     for",[84,10489,1991],{"class":477},[84,10491,481],{"class":473},[84,10493,3739],{"class":477},[84,10495,523],{"class":473},[84,10497,666],{"class":94},[84,10499,3746],{"class":477},[84,10501,1383],{"class":473},[84,10503,7687],{"class":477},[84,10505,1005],{"class":473},[84,10507,692],{"class":94},[84,10509,1005],{"class":473},[84,10511,3879],{"class":477},[84,10513,2621],{"class":473},[84,10515,484],{"class":477},[84,10517,10518],{"class":86,"line":249},[84,10519,10520],{"class":477},"     {\n",[84,10522,10523,10526,10529,10531,10534,10536,10539,10541,10543,10545,10547],{"class":86,"line":262},[84,10524,10525],{"class":473},"         if",[84,10527,10528],{"class":477}," ((s",[84,10530,954],{"class":473},[84,10532,10533],{"class":477},"j)->age ",[84,10535,1433],{"class":473},[84,10537,10538],{"class":477}," (s",[84,10540,954],{"class":473},[84,10542,940],{"class":477},[84,10544,954],{"class":473},[84,10546,692],{"class":94},[84,10548,10549],{"class":477},")->age)\n",[84,10551,10552],{"class":86,"line":273},[84,10553,10554],{"class":477},"         {\n",[84,10556,10557,10560,10562,10565,10567],{"class":86,"line":283},[84,10558,10559],{"class":477},"             Sanguo temp",[84,10561,7482],{"class":473},[84,10563,10564],{"class":477},"(s",[84,10566,954],{"class":473},[84,10568,10569],{"class":477},"j);\n",[84,10571,10572,10575,10577,10579,10582,10584,10586,10588,10590,10592,10594],{"class":86,"line":294},[84,10573,10574],{"class":473},"             *",[84,10576,10564],{"class":477},[84,10578,954],{"class":473},[84,10580,10581],{"class":477},"j)",[84,10583,7482],{"class":473},[84,10585,10564],{"class":477},[84,10587,954],{"class":473},[84,10589,940],{"class":477},[84,10591,954],{"class":473},[84,10593,692],{"class":94},[84,10595,3048],{"class":477},[84,10597,10598,10600,10602,10604,10606,10608,10610,10612,10614],{"class":86,"line":2028},[84,10599,10574],{"class":473},[84,10601,10564],{"class":477},[84,10603,954],{"class":473},[84,10605,940],{"class":477},[84,10607,954],{"class":473},[84,10609,692],{"class":94},[84,10611,902],{"class":477},[84,10613,523],{"class":473},[84,10615,4609],{"class":477},[84,10617,10618],{"class":86,"line":2057},[84,10619,10620],{"class":477},"         }\n",[84,10622,10623],{"class":86,"line":2062},[84,10624,10625],{"class":477},"     }\n",[84,10627,10628],{"class":86,"line":2079},[84,10629,2516],{"class":477},[84,10631,10632],{"class":86,"line":2084},[84,10633,1905],{"class":477},[84,10635,10636],{"class":86,"line":2089},[84,10637,10638],{"class":328},"\u002F\u002F定义打印函数\n",[84,10640,10641,10643,10645,10647,10649,10651,10653,10655,10657,10659],{"class":86,"line":2094},[84,10642,5693],{"class":473},[84,10644,9944],{"class":90},[84,10646,478],{"class":477},[84,10648,10437],{"class":90},[84,10650,6847],{"class":473},[84,10652,1168],{"class":5545},[84,10654,851],{"class":477},[84,10656,481],{"class":473},[84,10658,7660],{"class":5545},[84,10660,484],{"class":477},[84,10662,10663],{"class":86,"line":2108},[84,10664,1886],{"class":477},[84,10666,10667,10669,10671,10673,10675,10677,10679,10681,10683,10685,10687],{"class":86,"line":2113},[84,10668,3530],{"class":473},[84,10670,1991],{"class":477},[84,10672,481],{"class":473},[84,10674,3361],{"class":477},[84,10676,523],{"class":473},[84,10678,666],{"class":94},[84,10680,3368],{"class":477},[84,10682,1383],{"class":473},[84,10684,10474],{"class":477},[84,10686,2621],{"class":473},[84,10688,484],{"class":477},[84,10690,10691],{"class":86,"line":2906},[84,10692,2359],{"class":477},[84,10694,10695,10697,10699,10701,10703,10706,10708,10710,10712,10715,10717,10719,10721,10724,10726,10728,10730,10733,10735,10737,10739,10742,10744,10746,10748,10751,10753],{"class":86,"line":2920},[84,10696,3780],{"class":477},[84,10698,1517],{"class":473},[84,10700,725],{"class":104},[84,10702,1574],{"class":94},[84,10704,10705],{"class":104},"姓名：\"",[84,10707,1517],{"class":473},[84,10709,10564],{"class":477},[84,10711,954],{"class":473},[84,10713,10714],{"class":477},"i)->name",[84,10716,1517],{"class":473},[84,10718,725],{"class":104},[84,10720,1574],{"class":94},[84,10722,10723],{"class":104},"年龄：\"",[84,10725,1517],{"class":473},[84,10727,10564],{"class":477},[84,10729,954],{"class":473},[84,10731,10732],{"class":477},"i)->age",[84,10734,1517],{"class":473},[84,10736,725],{"class":104},[84,10738,1574],{"class":94},[84,10740,10741],{"class":104},"性别：\"",[84,10743,1517],{"class":473},[84,10745,10564],{"class":477},[84,10747,954],{"class":473},[84,10749,10750],{"class":477},"i)->gender",[84,10752,1517],{"class":473},[84,10754,1539],{"class":477},[84,10756,10757],{"class":86,"line":2928},[84,10758,2516],{"class":477},[84,10760,10761],{"class":86,"line":2933},[84,10762,1905],{"class":477},[84,10764,10765,10767,10769],{"class":86,"line":2939},[84,10766,481],{"class":473},[84,10768,2302],{"class":90},[84,10770,2305],{"class":477},[84,10772,10773],{"class":86,"line":2945},[84,10774,1886],{"class":477},[84,10776,10777],{"class":86,"line":2950},[84,10778,10779],{"class":328},"    \u002F\u002F定义结构体变量\n",[84,10781,10782,10785,10787,10789],{"class":86,"line":8277},[84,10783,10784],{"class":477},"    Sanguo s1[",[84,10786,792],{"class":94},[84,10788,1413],{"class":477},[84,10790,5237],{"class":473},[84,10792,10793],{"class":86,"line":8301},[84,10794,2359],{"class":477},[84,10796,10797,10799,10801,10803,10805,10807,10809],{"class":86,"line":8306},[84,10798,5246],{"class":477},[84,10800,10281],{"class":104},[84,10802,851],{"class":477},[84,10804,1248],{"class":94},[84,10806,851],{"class":477},[84,10808,10290],{"class":104},[84,10810,5259],{"class":477},[84,10812,10813,10815,10817,10819,10821,10823,10825],{"class":86,"line":8312},[84,10814,5246],{"class":477},[84,10816,10299],{"class":104},[84,10818,851],{"class":477},[84,10820,1223],{"class":94},[84,10822,851],{"class":477},[84,10824,10290],{"class":104},[84,10826,5259],{"class":477},[84,10828,10829,10831,10833,10835,10837,10839,10841],{"class":86,"line":8339},[84,10830,5246],{"class":477},[84,10832,10316],{"class":104},[84,10834,851],{"class":477},[84,10836,1173],{"class":94},[84,10838,851],{"class":477},[84,10840,10290],{"class":104},[84,10842,5259],{"class":477},[84,10844,10845,10847,10849,10851,10853,10855,10857],{"class":86,"line":8344},[84,10846,5246],{"class":477},[84,10848,10333],{"class":104},[84,10850,851],{"class":477},[84,10852,1198],{"class":94},[84,10854,851],{"class":477},[84,10856,10290],{"class":104},[84,10858,5259],{"class":477},[84,10860,10861,10863,10865,10867,10869,10871,10873],{"class":86,"line":8350},[84,10862,5246],{"class":477},[84,10864,10350],{"class":104},[84,10866,851],{"class":477},[84,10868,1148],{"class":94},[84,10870,851],{"class":477},[84,10872,10359],{"class":104},[84,10874,5259],{"class":477},[84,10876,10877],{"class":86,"line":8362},[84,10878,5280],{"class":477},[84,10880,10881,10883,10885,10887,10890,10892,10895,10897],{"class":86,"line":8374},[84,10882,2314],{"class":473},[84,10884,7660],{"class":477},[84,10886,4532],{"class":473},[84,10888,10889],{"class":477},"(s1)",[84,10891,4538],{"class":473},[84,10893,10894],{"class":477},"(s1[",[84,10896,666],{"class":94},[84,10898,4185],{"class":477},[84,10900,10901,10904,10906,10909,10911,10914,10917,10919],{"class":86,"line":8386},[84,10902,10903],{"class":477},"    Sanguo ",[84,10905,928],{"class":473},[84,10907,10908],{"class":477},"s ",[84,10910,523],{"class":473},[84,10912,10913],{"class":473}," &",[84,10915,10916],{"class":477},"s1[",[84,10918,666],{"class":94},[84,10920,5019],{"class":477},[84,10922,10923],{"class":86,"line":10045},[84,10924,10925],{"class":328},"    \u002F\u002F排序前：\n",[84,10927,10928,10930,10932,10935,10937],{"class":86,"line":10070},[84,10929,6858],{"class":477},[84,10931,1517],{"class":473},[84,10933,10934],{"class":104}," \"排序前：\"",[84,10936,1785],{"class":473},[84,10938,9169],{"class":477},[84,10940,10941,10943],{"class":86,"line":10093},[84,10942,10244],{"class":90},[84,10944,10945],{"class":477},"(s,len);\n",[84,10947,10948],{"class":86,"line":10117},[84,10949,10950],{"class":328},"    \u002F\u002F调用排序函数\n",[84,10952,10953,10955],{"class":86,"line":10122},[84,10954,7927],{"class":90},[84,10956,10945],{"class":477},[84,10958,10959],{"class":86,"line":10127},[84,10960,10961],{"class":328},"    \u002F\u002F排序后\n",[84,10963,10964,10966,10968,10971,10973],{"class":86,"line":10132},[84,10965,6858],{"class":477},[84,10967,1517],{"class":473},[84,10969,10970],{"class":104}," \"排序后：\"",[84,10972,1785],{"class":473},[84,10974,9169],{"class":477},[84,10976,10977,10979],{"class":86,"line":10141},[84,10978,10244],{"class":90},[84,10980,10945],{"class":477},[84,10982,10983],{"class":86,"line":10146},[84,10984,1905],{"class":477},[35,10986,10987,10988,10990],{},"注意：使用指针时直接用传首地址**&s",[84,10989,666],{},"**",[389,10992,10993],{},"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":66,"searchDepth":98,"depth":98,"links":10995},[10996,10997,10998,10999,11000,11001,11002],{"id":8032,"depth":98,"text":8033},{"id":8394,"depth":98,"text":8395},{"id":8663,"depth":98,"text":8664},{"id":8828,"depth":98,"text":8829},{"id":9044,"depth":98,"text":9045},{"id":9365,"depth":98,"text":9366},{"id":9593,"depth":98,"text":9594},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8021,"description":8029},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11009,"title":11010,"body":11011,"description":66,"extension":401,"meta":12354,"navigation":403,"path":12355,"seo":12356,"stem":12357,"__hash__":12358},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11012,"toc":12348},[11013,11016,11020,11026,11040,11045,11048,11052,11059,11065,11068,11075,11081,11086,11089,11092,11095,11659,11662,11676,11680,11685,11701,11841,11844,11850,11853,11858,11866,11974,11977,11982,11985,11990,11993,11999,12002,12345],[10,11014,11010],{"id":11015},"_5程序内存模型",[14,11017,11019],{"id":11018},"_51内存分区模型","5.1内存分区模型",[35,11021,11022,11023],{},"C++程序在执行时，将内存大方向划分为",[624,11024,11025],{},"4个区域",[1480,11027,11028,11031,11034,11037],{},[31,11029,11030],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[31,11032,11033],{},"全局区：存放全局变量和静态变量以及常量",[31,11035,11036],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[31,11038,11039],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[35,11041,11042],{},[624,11043,11044],{},"内存四区意义：",[35,11046,11047],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[23,11049,11051],{"id":11050},"_511程序运行前","5.1.1程序运行前",[35,11053,11054,11055,11058],{},"​\t在程序编译后，生成了exe可执行程序，",[624,11056,11057],{},"未执行该程序前","分为两个区域",[35,11060,11061,11062],{},"​\t",[624,11063,11064],{},"代码区：",[35,11066,11067],{},"​\t\t存放 CPU 执行的机器指令",[35,11069,11070,11071,11074],{},"​\t\t代码区是",[624,11072,11073],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[35,11076,11070,11077,11080],{},[624,11078,11079],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[35,11082,11061,11083],{},[624,11084,11085],{},"全局区：",[35,11087,11088],{},"​\t\t全局变量和静态变量存放在此.",[35,11090,11091],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[35,11093,11094],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[75,11096,11098],{"className":464,"code":11097,"language":466,"meta":66,"style":66},"\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",[81,11099,11100,11105,11118,11131,11135,11140,11155,11170,11174,11183,11187,11192,11205,11218,11222,11227,11253,11279,11283,11310,11336,11340,11345,11361,11376,11380,11406,11432,11436,11461,11486,11490,11516,11542,11546,11562,11577,11603,11629,11633,11643,11647,11655],{"__ignoreMap":66},[84,11101,11102],{"class":86,"line":87},[84,11103,11104],{"class":328},"\u002F\u002F全局变量\n",[84,11106,11107,11109,11112,11114,11116],{"class":86,"line":98},[84,11108,481],{"class":473},[84,11110,11111],{"class":477}," g_a ",[84,11113,523],{"class":473},[84,11115,2367],{"class":94},[84,11117,1634],{"class":477},[84,11119,11120,11122,11125,11127,11129],{"class":86,"line":70},[84,11121,481],{"class":473},[84,11123,11124],{"class":477}," g_b ",[84,11126,523],{"class":473},[84,11128,2367],{"class":94},[84,11130,1634],{"class":477},[84,11132,11133],{"class":86,"line":120},[84,11134,2729],{"emptyLinePlaceholder":403},[84,11136,11137],{"class":86,"line":131},[84,11138,11139],{"class":328},"\u002F\u002F全局常量\n",[84,11141,11142,11144,11146,11149,11151,11153],{"class":86,"line":145},[84,11143,7121],{"class":473},[84,11145,2711],{"class":473},[84,11147,11148],{"class":477}," c_g_a ",[84,11150,523],{"class":473},[84,11152,2367],{"class":94},[84,11154,1634],{"class":477},[84,11156,11157,11159,11161,11164,11166,11168],{"class":86,"line":156},[84,11158,7121],{"class":473},[84,11160,2711],{"class":473},[84,11162,11163],{"class":477}," c_g_b ",[84,11165,523],{"class":473},[84,11167,2367],{"class":94},[84,11169,1634],{"class":477},[84,11171,11172],{"class":86,"line":164},[84,11173,2729],{"emptyLinePlaceholder":403},[84,11175,11176,11178,11180],{"class":86,"line":175},[84,11177,481],{"class":473},[84,11179,2302],{"class":90},[84,11181,11182],{"class":477},"() {\n",[84,11184,11185],{"class":86,"line":185},[84,11186,2729],{"emptyLinePlaceholder":403},[84,11188,11189],{"class":86,"line":195},[84,11190,11191],{"class":328},"    \u002F\u002F局部变量\n",[84,11193,11194,11196,11199,11201,11203],{"class":86,"line":206},[84,11195,2314],{"class":473},[84,11197,11198],{"class":477}," a ",[84,11200,523],{"class":473},[84,11202,2367],{"class":94},[84,11204,1634],{"class":477},[84,11206,11207,11209,11212,11214,11216],{"class":86,"line":217},[84,11208,2314],{"class":473},[84,11210,11211],{"class":477}," b ",[84,11213,523],{"class":473},[84,11215,2367],{"class":94},[84,11217,1634],{"class":477},[84,11219,11220],{"class":86,"line":227},[84,11221,2729],{"emptyLinePlaceholder":403},[84,11223,11224],{"class":86,"line":238},[84,11225,11226],{"class":328},"    \u002F\u002F打印地址\n",[84,11228,11229,11231,11233,11236,11238,11240,11242,11244,11246,11249,11251],{"class":86,"line":249},[84,11230,6858],{"class":477},[84,11232,1517],{"class":473},[84,11234,11235],{"class":104}," \"局部变量a地址为： \"",[84,11237,1785],{"class":473},[84,11239,1991],{"class":477},[84,11241,481],{"class":473},[84,11243,902],{"class":477},[84,11245,826],{"class":473},[84,11247,11248],{"class":477},"a ",[84,11250,1517],{"class":473},[84,11252,9169],{"class":477},[84,11254,11255,11257,11259,11262,11264,11266,11268,11270,11272,11275,11277],{"class":86,"line":262},[84,11256,6858],{"class":477},[84,11258,1517],{"class":473},[84,11260,11261],{"class":104}," \"局部变量b地址为： \"",[84,11263,1785],{"class":473},[84,11265,1991],{"class":477},[84,11267,481],{"class":473},[84,11269,902],{"class":477},[84,11271,826],{"class":473},[84,11273,11274],{"class":477},"b ",[84,11276,1517],{"class":473},[84,11278,9169],{"class":477},[84,11280,11281],{"class":86,"line":273},[84,11282,2729],{"emptyLinePlaceholder":403},[84,11284,11285,11287,11289,11292,11294,11297,11299,11301,11303,11306,11308],{"class":86,"line":283},[84,11286,6858],{"class":477},[84,11288,1517],{"class":473},[84,11290,11291],{"class":104}," \"全局变量g_a地址为： \"",[84,11293,1785],{"class":473},[84,11295,11296],{"class":477},"  (",[84,11298,481],{"class":473},[84,11300,902],{"class":477},[84,11302,826],{"class":473},[84,11304,11305],{"class":477},"g_a ",[84,11307,1517],{"class":473},[84,11309,9169],{"class":477},[84,11311,11312,11314,11316,11319,11321,11323,11325,11327,11329,11332,11334],{"class":86,"line":294},[84,11313,6858],{"class":477},[84,11315,1517],{"class":473},[84,11317,11318],{"class":104}," \"全局变量g_b地址为： \"",[84,11320,1785],{"class":473},[84,11322,11296],{"class":477},[84,11324,481],{"class":473},[84,11326,902],{"class":477},[84,11328,826],{"class":473},[84,11330,11331],{"class":477},"g_b ",[84,11333,1517],{"class":473},[84,11335,9169],{"class":477},[84,11337,11338],{"class":86,"line":2028},[84,11339,2729],{"emptyLinePlaceholder":403},[84,11341,11342],{"class":86,"line":2057},[84,11343,11344],{"class":328},"    \u002F\u002F静态变量\n",[84,11346,11347,11350,11352,11355,11357,11359],{"class":86,"line":2062},[84,11348,11349],{"class":473},"    static",[84,11351,2711],{"class":473},[84,11353,11354],{"class":477}," s_a ",[84,11356,523],{"class":473},[84,11358,2367],{"class":94},[84,11360,1634],{"class":477},[84,11362,11363,11365,11367,11370,11372,11374],{"class":86,"line":2079},[84,11364,11349],{"class":473},[84,11366,2711],{"class":473},[84,11368,11369],{"class":477}," s_b ",[84,11371,523],{"class":473},[84,11373,2367],{"class":94},[84,11375,1634],{"class":477},[84,11377,11378],{"class":86,"line":2084},[84,11379,2729],{"emptyLinePlaceholder":403},[84,11381,11382,11384,11386,11389,11391,11393,11395,11397,11399,11402,11404],{"class":86,"line":2089},[84,11383,6858],{"class":477},[84,11385,1517],{"class":473},[84,11387,11388],{"class":104}," \"静态变量s_a地址为： \"",[84,11390,1785],{"class":473},[84,11392,1991],{"class":477},[84,11394,481],{"class":473},[84,11396,902],{"class":477},[84,11398,826],{"class":473},[84,11400,11401],{"class":477},"s_a ",[84,11403,1517],{"class":473},[84,11405,9169],{"class":477},[84,11407,11408,11410,11412,11415,11417,11419,11421,11423,11425,11428,11430],{"class":86,"line":2094},[84,11409,6858],{"class":477},[84,11411,1517],{"class":473},[84,11413,11414],{"class":104}," \"静态变量s_b地址为： \"",[84,11416,1785],{"class":473},[84,11418,1991],{"class":477},[84,11420,481],{"class":473},[84,11422,902],{"class":477},[84,11424,826],{"class":473},[84,11426,11427],{"class":477},"s_b ",[84,11429,1517],{"class":473},[84,11431,9169],{"class":477},[84,11433,11434],{"class":86,"line":2108},[84,11435,2729],{"emptyLinePlaceholder":403},[84,11437,11438,11440,11442,11445,11447,11449,11451,11453,11455,11457,11459],{"class":86,"line":2113},[84,11439,6858],{"class":477},[84,11441,1517],{"class":473},[84,11443,11444],{"class":104}," \"字符串常量地址为： \"",[84,11446,1785],{"class":473},[84,11448,1991],{"class":477},[84,11450,481],{"class":473},[84,11452,902],{"class":477},[84,11454,826],{"class":473},[84,11456,1534],{"class":104},[84,11458,1785],{"class":473},[84,11460,9169],{"class":477},[84,11462,11463,11465,11467,11469,11471,11473,11475,11477,11479,11482,11484],{"class":86,"line":2906},[84,11464,6858],{"class":477},[84,11466,1517],{"class":473},[84,11468,11444],{"class":104},[84,11470,1785],{"class":473},[84,11472,1991],{"class":477},[84,11474,481],{"class":473},[84,11476,902],{"class":477},[84,11478,826],{"class":473},[84,11480,11481],{"class":104},"\"hello world1\"",[84,11483,1785],{"class":473},[84,11485,9169],{"class":477},[84,11487,11488],{"class":86,"line":2920},[84,11489,2729],{"emptyLinePlaceholder":403},[84,11491,11492,11494,11496,11499,11501,11503,11505,11507,11509,11512,11514],{"class":86,"line":2928},[84,11493,6858],{"class":477},[84,11495,1517],{"class":473},[84,11497,11498],{"class":104}," \"全局常量c_g_a地址为： \"",[84,11500,1785],{"class":473},[84,11502,1991],{"class":477},[84,11504,481],{"class":473},[84,11506,902],{"class":477},[84,11508,826],{"class":473},[84,11510,11511],{"class":477},"c_g_a ",[84,11513,1517],{"class":473},[84,11515,9169],{"class":477},[84,11517,11518,11520,11522,11525,11527,11529,11531,11533,11535,11538,11540],{"class":86,"line":2933},[84,11519,6858],{"class":477},[84,11521,1517],{"class":473},[84,11523,11524],{"class":104}," \"全局常量c_g_b地址为： \"",[84,11526,1785],{"class":473},[84,11528,1991],{"class":477},[84,11530,481],{"class":473},[84,11532,902],{"class":477},[84,11534,826],{"class":473},[84,11536,11537],{"class":477},"c_g_b ",[84,11539,1517],{"class":473},[84,11541,9169],{"class":477},[84,11543,11544],{"class":86,"line":2939},[84,11545,2729],{"emptyLinePlaceholder":403},[84,11547,11548,11551,11553,11556,11558,11560],{"class":86,"line":2945},[84,11549,11550],{"class":473},"    const",[84,11552,2711],{"class":473},[84,11554,11555],{"class":477}," c_l_a ",[84,11557,523],{"class":473},[84,11559,2367],{"class":94},[84,11561,1634],{"class":477},[84,11563,11564,11566,11568,11571,11573,11575],{"class":86,"line":2950},[84,11565,11550],{"class":473},[84,11567,2711],{"class":473},[84,11569,11570],{"class":477}," c_l_b ",[84,11572,523],{"class":473},[84,11574,2367],{"class":94},[84,11576,1634],{"class":477},[84,11578,11579,11581,11583,11586,11588,11590,11592,11594,11596,11599,11601],{"class":86,"line":8277},[84,11580,6858],{"class":477},[84,11582,1517],{"class":473},[84,11584,11585],{"class":104}," \"局部常量c_l_a地址为： \"",[84,11587,1785],{"class":473},[84,11589,1991],{"class":477},[84,11591,481],{"class":473},[84,11593,902],{"class":477},[84,11595,826],{"class":473},[84,11597,11598],{"class":477},"c_l_a ",[84,11600,1517],{"class":473},[84,11602,9169],{"class":477},[84,11604,11605,11607,11609,11612,11614,11616,11618,11620,11622,11625,11627],{"class":86,"line":8301},[84,11606,6858],{"class":477},[84,11608,1517],{"class":473},[84,11610,11611],{"class":104}," \"局部常量c_l_b地址为： \"",[84,11613,1785],{"class":473},[84,11615,1991],{"class":477},[84,11617,481],{"class":473},[84,11619,902],{"class":477},[84,11621,826],{"class":473},[84,11623,11624],{"class":477},"c_l_b ",[84,11626,1517],{"class":473},[84,11628,9169],{"class":477},[84,11630,11631],{"class":86,"line":8306},[84,11632,2729],{"emptyLinePlaceholder":403},[84,11634,11635,11637,11639,11641],{"class":86,"line":8312},[84,11636,2632],{"class":90},[84,11638,478],{"class":477},[84,11640,2637],{"class":104},[84,11642,3048],{"class":477},[84,11644,11645],{"class":86,"line":8339},[84,11646,2729],{"emptyLinePlaceholder":403},[84,11648,11649,11651,11653],{"class":86,"line":8344},[84,11650,4419],{"class":473},[84,11652,4422],{"class":94},[84,11654,1634],{"class":477},[84,11656,11657],{"class":86,"line":8350},[84,11658,1905],{"class":477},[35,11660,11661],{},"总结：",[1480,11663,11664,11667,11670,11673],{},[31,11665,11666],{},"c++中程序运行前分为全局区和代码区",[31,11668,11669],{},"代码区特点是共享和只读",[31,11671,11672],{},"全局区中存放全局变量、静态变量、常量",[31,11674,11675],{},"常量区中存放const修饰的全局常量和字符串常量",[23,11677,11679],{"id":11678},"_512程序运行后","5.1.2程序运行后",[28,11681,11682],{},[31,11683,11684],{},"栈区：",[1480,11686,11687,11694],{},[31,11688,11689,11690,11693],{},"由编译器自动分配释放, 存放",[624,11691,11692],{},"函数的参数值,局部变量","等",[31,11695,11696,11697,11700],{},"注意事项：",[624,11698,11699],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[75,11702,11704],{"className":464,"code":11703,"language":466,"meta":66,"style":66},"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",[81,11705,11706,11717,11721,11736,11748,11752,11756,11764,11769,11784,11802,11819,11829,11837],{"__ignoreMap":66},[84,11707,11708,11710,11712,11715],{"class":86,"line":87},[84,11709,481],{"class":473},[84,11711,6847],{"class":473},[84,11713,11714],{"class":90}," func",[84,11716,2305],{"class":477},[84,11718,11719],{"class":86,"line":98},[84,11720,1886],{"class":477},[84,11722,11723,11725,11727,11729,11731,11733],{"class":86,"line":70},[84,11724,2314],{"class":473},[84,11726,11198],{"class":477},[84,11728,523],{"class":473},[84,11730,2367],{"class":94},[84,11732,532],{"class":477},[84,11734,11735],{"class":328}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[84,11737,11738,11740,11742,11745],{"class":86,"line":120},[84,11739,4419],{"class":473},[84,11741,10913],{"class":473},[84,11743,11744],{"class":477},"a;",[84,11746,11747],{"class":328}," \u002F\u002F放回局部变量的地址\n",[84,11749,11750],{"class":86,"line":131},[84,11751,1905],{"class":477},[84,11753,11754],{"class":86,"line":145},[84,11755,2729],{"emptyLinePlaceholder":403},[84,11757,11758,11760,11762],{"class":86,"line":156},[84,11759,481],{"class":473},[84,11761,2302],{"class":90},[84,11763,11182],{"class":477},[84,11765,11766],{"class":86,"line":164},[84,11767,11768],{"class":328},"    \u002F\u002F接受func的返回值\n",[84,11770,11771,11773,11775,11778,11780,11782],{"class":86,"line":175},[84,11772,2314],{"class":473},[84,11774,6847],{"class":473},[84,11776,11777],{"class":477},"p ",[84,11779,523],{"class":473},[84,11781,11714],{"class":90},[84,11783,5965],{"class":477},[84,11785,11786,11788,11790,11792,11794,11796,11799],{"class":86,"line":185},[84,11787,6858],{"class":477},[84,11789,1517],{"class":473},[84,11791,6847],{"class":473},[84,11793,11777],{"class":477},[84,11795,1517],{"class":473},[84,11797,11798],{"class":477}," endl;",[84,11800,11801],{"class":328}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[84,11803,11804,11806,11808,11810,11812,11814,11816],{"class":86,"line":195},[84,11805,6858],{"class":477},[84,11807,1517],{"class":473},[84,11809,6847],{"class":473},[84,11811,11777],{"class":477},[84,11813,1517],{"class":473},[84,11815,11798],{"class":477},[84,11817,11818],{"class":328}," \u002F\u002F第二次这个数据不再保留\n",[84,11820,11821,11823,11825,11827],{"class":86,"line":206},[84,11822,2632],{"class":90},[84,11824,478],{"class":477},[84,11826,2637],{"class":104},[84,11828,3048],{"class":477},[84,11830,11831,11833,11835],{"class":86,"line":217},[84,11832,4419],{"class":473},[84,11834,4422],{"class":94},[84,11836,1634],{"class":477},[84,11838,11839],{"class":86,"line":227},[84,11840,1905],{"class":477},[35,11842,11843],{},"输出结果：",[35,11845,11846],{},[64,11847],{"alt":11848,"src":11849},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[35,11851,11852],{},"总结：不要返回局部变量的地址",[28,11854,11855],{"start":98},[31,11856,11857],{},"堆区",[1480,11859,11860,11863],{},[31,11861,11862],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[31,11864,11865],{},"在c++中主要利用new在堆区开辟内存",[75,11867,11869],{"className":464,"code":11868,"language":466,"meta":66,"style":66},"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",[81,11870,11871,11886,11890,11895,11916,11923,11927,11935,11939,11944,11958,11970],{"__ignoreMap":66},[84,11872,11873,11875,11878,11881,11883],{"class":86,"line":87},[84,11874,481],{"class":473},[84,11876,11877],{"class":473},"  *",[84,11879,11880],{"class":90},"func",[84,11882,2756],{"class":477},[84,11884,11885],{"class":328},"  \u002F\u002F函数返回指针\n",[84,11887,11888],{"class":86,"line":98},[84,11889,1886],{"class":477},[84,11891,11892],{"class":86,"line":70},[84,11893,11894],{"class":328},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[84,11896,11897,11899,11901,11903,11905,11908,11910,11912,11914],{"class":86,"line":120},[84,11898,4476],{"class":473},[84,11900,6847],{"class":473},[84,11902,35],{"class":477},[84,11904,523],{"class":473},[84,11906,11907],{"class":473}," new",[84,11909,2711],{"class":473},[84,11911,478],{"class":477},[84,11913,919],{"class":94},[84,11915,3048],{"class":477},[84,11917,11918,11920],{"class":86,"line":131},[84,11919,4710],{"class":473},[84,11921,11922],{"class":477}," p;\n",[84,11924,11925],{"class":86,"line":145},[84,11926,1905],{"class":477},[84,11928,11929,11931,11933],{"class":86,"line":156},[84,11930,481],{"class":473},[84,11932,2302],{"class":90},[84,11934,2305],{"class":477},[84,11936,11937],{"class":86,"line":164},[84,11938,1886],{"class":477},[84,11940,11941],{"class":86,"line":175},[84,11942,11943],{"class":328},"    \u002F\u002F在堆区开辟数据\n",[84,11945,11946,11948,11950,11952,11954,11956],{"class":86,"line":185},[84,11947,2314],{"class":473},[84,11949,6847],{"class":473},[84,11951,35],{"class":477},[84,11953,523],{"class":473},[84,11955,11880],{"class":90},[84,11957,5965],{"class":477},[84,11959,11960,11962,11964,11966,11968],{"class":86,"line":195},[84,11961,1891],{"class":477},[84,11963,6748],{"class":473},[84,11965,35],{"class":477},[84,11967,1517],{"class":473},[84,11969,1539],{"class":477},[84,11971,11972],{"class":86,"line":206},[84,11973,1905],{"class":477},[35,11975,11976],{},"图片展示：",[35,11978,11979],{},[64,11980],{"alt":11848,"src":11981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[35,11983,11984],{},"堆区内存由程序员管生死！！！",[28,11986,11987],{"start":70},[31,11988,11989],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[35,11991,11992],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[35,11994,11995,11996],{},"​语法：",[81,11997,11998],{}," new 数据类型",[35,12000,12001],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[75,12003,12005],{"className":464,"code":12004,"language":466,"meta":66,"style":66},"\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",[81,12006,12007,12012,12022,12026,12031,12036,12058,12062,12070,12074,12088,12100,12112,12124,12129,12134,12145,12149,12154,12162,12166,12171,12193,12219,12223,12241,12245,12271,12275,12287,12291,12296,12301,12309,12313,12317,12325,12329,12335,12341],{"__ignoreMap":66},[84,12008,12009],{"class":86,"line":87},[84,12010,12011],{"class":328},"\u002F\u002F1.new的基本语法\n",[84,12013,12014,12016,12018,12020],{"class":86,"line":98},[84,12015,481],{"class":473},[84,12017,6847],{"class":473},[84,12019,11880],{"class":90},[84,12021,2305],{"class":477},[84,12023,12024],{"class":86,"line":70},[84,12025,1886],{"class":477},[84,12027,12028],{"class":86,"line":120},[84,12029,12030],{"class":328},"    \u002F\u002F在堆区创建整型数据\n",[84,12032,12033],{"class":86,"line":131},[84,12034,12035],{"class":328},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[84,12037,12038,12040,12042,12044,12047,12049,12051,12053,12055],{"class":86,"line":145},[84,12039,2314],{"class":473},[84,12041,6847],{"class":473},[84,12043,35],{"class":477},[84,12045,12046],{"class":473},"=new",[84,12048,2711],{"class":473},[84,12050,478],{"class":477},[84,12052,919],{"class":94},[84,12054,6295],{"class":477},[84,12056,12057],{"class":328},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[84,12059,12060],{"class":86,"line":156},[84,12061,1905],{"class":477},[84,12063,12064,12066,12068],{"class":86,"line":164},[84,12065,5693],{"class":473},[84,12067,5917],{"class":90},[84,12069,2305],{"class":477},[84,12071,12072],{"class":86,"line":175},[84,12073,1886],{"class":477},[84,12075,12076,12078,12080,12082,12084,12086],{"class":86,"line":185},[84,12077,2314],{"class":473},[84,12079,6847],{"class":473},[84,12081,35],{"class":477},[84,12083,523],{"class":473},[84,12085,11880],{"class":90},[84,12087,5965],{"class":477},[84,12089,12090,12092,12094,12096,12098],{"class":86,"line":195},[84,12091,1891],{"class":477},[84,12093,6748],{"class":473},[84,12095,35],{"class":477},[84,12097,1517],{"class":473},[84,12099,1539],{"class":477},[84,12101,12102,12104,12106,12108,12110],{"class":86,"line":206},[84,12103,1891],{"class":477},[84,12105,6748],{"class":473},[84,12107,35],{"class":477},[84,12109,1517],{"class":473},[84,12111,1539],{"class":477},[84,12113,12114,12116,12118,12120,12122],{"class":86,"line":217},[84,12115,1891],{"class":477},[84,12117,6748],{"class":473},[84,12119,35],{"class":477},[84,12121,1517],{"class":473},[84,12123,1539],{"class":477},[84,12125,12126],{"class":86,"line":227},[84,12127,12128],{"class":328},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[84,12130,12131],{"class":86,"line":238},[84,12132,12133],{"class":328},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[84,12135,12136,12139,12142],{"class":86,"line":249},[84,12137,12138],{"class":473},"    delete",[84,12140,12141],{"class":477}," p;",[84,12143,12144],{"class":328},"\u002F\u002F删除这块地址\n",[84,12146,12147],{"class":86,"line":262},[84,12148,1905],{"class":477},[84,12150,12151],{"class":86,"line":273},[84,12152,12153],{"class":328},"\u002F\u002F2.在堆区利用new开辟数组\n",[84,12155,12156,12158,12160],{"class":86,"line":283},[84,12157,5693],{"class":473},[84,12159,5986],{"class":90},[84,12161,2305],{"class":477},[84,12163,12164],{"class":86,"line":294},[84,12165,1886],{"class":477},[84,12167,12168],{"class":86,"line":2028},[84,12169,12170],{"class":328},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[84,12172,12173,12175,12177,12179,12181,12183,12185,12187,12190],{"class":86,"line":2057},[84,12174,2314],{"class":473},[84,12176,6847],{"class":473},[84,12178,4209],{"class":477},[84,12180,12046],{"class":473},[84,12182,2711],{"class":473},[84,12184,1363],{"class":477},[84,12186,919],{"class":94},[84,12188,12189],{"class":477},"];",[84,12191,12192],{"class":328},"\u002F\u002F10代表数组有10个元素\n",[84,12194,12195,12197,12199,12201,12203,12205,12207,12209,12211,12213,12215,12217],{"class":86,"line":2062},[84,12196,3530],{"class":473},[84,12198,1991],{"class":477},[84,12200,481],{"class":473},[84,12202,3361],{"class":477},[84,12204,523],{"class":473},[84,12206,666],{"class":94},[84,12208,3368],{"class":477},[84,12210,1383],{"class":473},[84,12212,919],{"class":94},[84,12214,3368],{"class":477},[84,12216,2621],{"class":473},[84,12218,484],{"class":477},[84,12220,12221],{"class":86,"line":2079},[84,12222,2359],{"class":477},[84,12224,12225,12228,12230,12232,12234,12236,12238],{"class":86,"line":2084},[84,12226,12227],{"class":477},"        arr[i]",[84,12229,523],{"class":473},[84,12231,914],{"class":477},[84,12233,954],{"class":473},[84,12235,784],{"class":94},[84,12237,532],{"class":477},[84,12239,12240],{"class":328},"\u002F\u002F给10个元素赋值100～109\n",[84,12242,12243],{"class":86,"line":2089},[84,12244,2516],{"class":477},[84,12246,12247,12249,12251,12253,12255,12257,12259,12261,12263,12265,12267,12269],{"class":86,"line":2094},[84,12248,3530],{"class":473},[84,12250,1991],{"class":477},[84,12252,481],{"class":473},[84,12254,3361],{"class":477},[84,12256,523],{"class":473},[84,12258,666],{"class":94},[84,12260,3368],{"class":477},[84,12262,1383],{"class":473},[84,12264,919],{"class":94},[84,12266,3368],{"class":477},[84,12268,2621],{"class":473},[84,12270,484],{"class":477},[84,12272,12273],{"class":86,"line":2108},[84,12274,2359],{"class":477},[84,12276,12277,12279,12281,12283,12285],{"class":86,"line":2113},[84,12278,3780],{"class":477},[84,12280,1517],{"class":473},[84,12282,4683],{"class":477},[84,12284,1517],{"class":473},[84,12286,1539],{"class":477},[84,12288,12289],{"class":86,"line":2906},[84,12290,2516],{"class":477},[84,12292,12293],{"class":86,"line":2920},[84,12294,12295],{"class":328},"    \u002F\u002F释放堆区数组\n",[84,12297,12298],{"class":86,"line":2928},[84,12299,12300],{"class":328},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[84,12302,12303,12306],{"class":86,"line":2933},[84,12304,12305],{"class":473},"    delete[]",[84,12307,12308],{"class":477}," arr;\n",[84,12310,12311],{"class":86,"line":2939},[84,12312,1905],{"class":477},[84,12314,12315],{"class":86,"line":2945},[84,12316,2729],{"emptyLinePlaceholder":403},[84,12318,12319,12321,12323],{"class":86,"line":2950},[84,12320,481],{"class":473},[84,12322,2302],{"class":90},[84,12324,2305],{"class":477},[84,12326,12327],{"class":86,"line":8277},[84,12328,1886],{"class":477},[84,12330,12331,12333],{"class":86,"line":8301},[84,12332,5962],{"class":90},[84,12334,5965],{"class":477},[84,12336,12337,12339],{"class":86,"line":8306},[84,12338,6031],{"class":90},[84,12340,5965],{"class":477},[84,12342,12343],{"class":86,"line":8312},[84,12344,1905],{"class":477},[389,12346,12347],{},"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":66,"searchDepth":98,"depth":98,"links":12349},[12350],{"id":11018,"depth":98,"text":11019,"children":12351},[12352,12353],{"id":11050,"depth":70,"text":11051},{"id":11678,"depth":70,"text":11679},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11010,"description":66},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12360,"title":12361,"body":12362,"description":66,"extension":401,"meta":13843,"navigation":403,"path":13844,"seo":13845,"stem":13846,"__hash__":13847},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12363,"toc":13835},[12364,12367,12371,12374,12377,12546,12550,12555,12572,12577,12729,12733,12736,12739,13133,13137,13140,13145,13148,13460,13464,13470,13630,13632,13640,13644,13647,13654,13832],[10,12365,12361],{"id":12366},"_6引用",[14,12368,12370],{"id":12369},"_61引用基本用法","6.1引用基本用法",[35,12372,12373],{},"引用的本质：给变量起别名",[35,12375,12376],{},"语法：数据类型 &别名=原名",[75,12378,12380],{"className":464,"code":12379,"language":466,"meta":66,"style":66},"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",[81,12381,12382,12390,12394,12406,12418,12422,12441,12460,12464,12475,12479,12498,12516,12520,12530,12534,12542],{"__ignoreMap":66},[84,12383,12384,12386,12388],{"class":86,"line":87},[84,12385,481],{"class":473},[84,12387,2302],{"class":90},[84,12389,11182],{"class":477},[84,12391,12392],{"class":86,"line":98},[84,12393,2729],{"emptyLinePlaceholder":403},[84,12395,12396,12398,12400,12402,12404],{"class":86,"line":70},[84,12397,2314],{"class":473},[84,12399,11198],{"class":477},[84,12401,523],{"class":473},[84,12403,2367],{"class":94},[84,12405,1634],{"class":477},[84,12407,12408,12410,12412,12414,12416],{"class":86,"line":120},[84,12409,2314],{"class":473},[84,12411,10913],{"class":473},[84,12413,11274],{"class":477},[84,12415,523],{"class":473},[84,12417,1773],{"class":477},[84,12419,12420],{"class":86,"line":131},[84,12421,2729],{"emptyLinePlaceholder":403},[84,12423,12424,12426,12428,12431,12433,12435,12437,12439],{"class":86,"line":145},[84,12425,6858],{"class":477},[84,12427,1517],{"class":473},[84,12429,12430],{"class":104}," \"a = \"",[84,12432,1785],{"class":473},[84,12434,11198],{"class":477},[84,12436,1517],{"class":473},[84,12438,11798],{"class":477},[84,12440,7597],{"class":328},[84,12442,12443,12445,12447,12450,12452,12454,12456,12458],{"class":86,"line":156},[84,12444,6858],{"class":477},[84,12446,1517],{"class":473},[84,12448,12449],{"class":104}," \"b = \"",[84,12451,1785],{"class":473},[84,12453,11211],{"class":477},[84,12455,1517],{"class":473},[84,12457,11798],{"class":477},[84,12459,7597],{"class":328},[84,12461,12462],{"class":86,"line":164},[84,12463,2729],{"emptyLinePlaceholder":403},[84,12465,12466,12469,12471,12473],{"class":86,"line":175},[84,12467,12468],{"class":477},"    b ",[84,12470,523],{"class":473},[84,12472,6083],{"class":94},[84,12474,1634],{"class":477},[84,12476,12477],{"class":86,"line":185},[84,12478,2729],{"emptyLinePlaceholder":403},[84,12480,12481,12483,12485,12487,12489,12491,12493,12495],{"class":86,"line":195},[84,12482,6858],{"class":477},[84,12484,1517],{"class":473},[84,12486,12430],{"class":104},[84,12488,1785],{"class":473},[84,12490,11198],{"class":477},[84,12492,1517],{"class":473},[84,12494,11798],{"class":477},[84,12496,12497],{"class":328},"\u002F\u002F100\n",[84,12499,12500,12502,12504,12506,12508,12510,12512,12514],{"class":86,"line":206},[84,12501,6858],{"class":477},[84,12503,1517],{"class":473},[84,12505,12449],{"class":104},[84,12507,1785],{"class":473},[84,12509,11211],{"class":477},[84,12511,1517],{"class":473},[84,12513,11798],{"class":477},[84,12515,12497],{"class":328},[84,12517,12518],{"class":86,"line":217},[84,12519,2729],{"emptyLinePlaceholder":403},[84,12521,12522,12524,12526,12528],{"class":86,"line":227},[84,12523,2632],{"class":90},[84,12525,478],{"class":477},[84,12527,2637],{"class":104},[84,12529,3048],{"class":477},[84,12531,12532],{"class":86,"line":238},[84,12533,2729],{"emptyLinePlaceholder":403},[84,12535,12536,12538,12540],{"class":86,"line":249},[84,12537,4419],{"class":473},[84,12539,4422],{"class":94},[84,12541,1634],{"class":477},[84,12543,12544],{"class":86,"line":262},[84,12545,1905],{"class":477},[14,12547,12549],{"id":12548},"_62引用的注意事项","6.2引用的注意事项",[28,12551,12552],{},[31,12553,12554],{},"引用必须要初始化",[75,12556,12558],{"className":464,"code":12557,"language":466,"meta":66,"style":66},"int &b;\u002F\u002F非常错误！\n",[81,12559,12560],{"__ignoreMap":66},[84,12561,12562,12564,12566,12569],{"class":86,"line":87},[84,12563,481],{"class":473},[84,12565,10913],{"class":473},[84,12567,12568],{"class":477},"b;",[84,12570,12571],{"class":328},"\u002F\u002F非常错误！\n",[28,12573,12574],{"start":98},[31,12575,12576],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[75,12578,12580],{"className":464,"code":12579,"language":466,"meta":66,"style":66},"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",[81,12581,12582,12590,12602,12614,12622,12638,12651,12669,12687,12707,12717,12725],{"__ignoreMap":66},[84,12583,12584,12586,12588],{"class":86,"line":87},[84,12585,481],{"class":473},[84,12587,2302],{"class":90},[84,12589,11182],{"class":477},[84,12591,12592,12594,12596,12598,12600],{"class":86,"line":98},[84,12593,2314],{"class":473},[84,12595,11198],{"class":477},[84,12597,523],{"class":473},[84,12599,2367],{"class":94},[84,12601,1634],{"class":477},[84,12603,12604,12606,12608,12610,12612],{"class":86,"line":70},[84,12605,2314],{"class":473},[84,12607,11211],{"class":477},[84,12609,523],{"class":473},[84,12611,9279],{"class":94},[84,12613,1634],{"class":477},[84,12615,12616,12619],{"class":86,"line":120},[84,12617,12618],{"class":328},"    \u002F\u002Fint &c;",[84,12620,12621],{"class":328}," \u002F\u002F错误，引用必须初始化\n",[84,12623,12624,12626,12628,12630,12632,12635],{"class":86,"line":131},[84,12625,2314],{"class":473},[84,12627,10913],{"class":473},[84,12629,3275],{"class":477},[84,12631,523],{"class":473},[84,12633,12634],{"class":477}," a;",[84,12636,12637],{"class":328}," \u002F\u002F一旦初始化后，就不可以更改\n",[84,12639,12640,12643,12645,12648],{"class":86,"line":145},[84,12641,12642],{"class":477},"    c ",[84,12644,523],{"class":473},[84,12646,12647],{"class":477}," b;",[84,12649,12650],{"class":328}," \u002F\u002F这是赋值操作，不是更改引用\n",[84,12652,12653,12655,12657,12659,12661,12663,12665,12667],{"class":86,"line":156},[84,12654,6858],{"class":477},[84,12656,1517],{"class":473},[84,12658,12430],{"class":104},[84,12660,1785],{"class":473},[84,12662,11198],{"class":477},[84,12664,1517],{"class":473},[84,12666,11798],{"class":477},[84,12668,7582],{"class":328},[84,12670,12671,12673,12675,12677,12679,12681,12683,12685],{"class":86,"line":164},[84,12672,6858],{"class":477},[84,12674,1517],{"class":473},[84,12676,12449],{"class":104},[84,12678,1785],{"class":473},[84,12680,11211],{"class":477},[84,12682,1517],{"class":473},[84,12684,11798],{"class":477},[84,12686,7582],{"class":328},[84,12688,12689,12691,12693,12696,12698,12701,12703,12705],{"class":86,"line":175},[84,12690,6858],{"class":477},[84,12692,1517],{"class":473},[84,12694,12695],{"class":104}," \"c = \"",[84,12697,1785],{"class":473},[84,12699,12700],{"class":477}," c ",[84,12702,1517],{"class":473},[84,12704,11798],{"class":477},[84,12706,7582],{"class":328},[84,12708,12709,12711,12713,12715],{"class":86,"line":185},[84,12710,2632],{"class":90},[84,12712,478],{"class":477},[84,12714,2637],{"class":104},[84,12716,3048],{"class":477},[84,12718,12719,12721,12723],{"class":86,"line":195},[84,12720,4419],{"class":473},[84,12722,4422],{"class":94},[84,12724,1634],{"class":477},[84,12726,12727],{"class":86,"line":206},[84,12728,1905],{"class":477},[14,12730,12732],{"id":12731},"_63引用做函数参数","6.3引用做函数参数",[35,12734,12735],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[35,12737,12738],{},"优点：可以简化指针修改实参",[75,12740,12742],{"className":464,"code":12741,"language":466,"meta":66,"style":66},"\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",[81,12743,12744,12749,12772,12783,12793,12802,12806,12810,12815,12837,12849,12861,12871,12875,12879,12884,12906,12916,12924,12932,12936,12940,12948,12952,12964,12976,12980,12991,13017,13021,13041,13065,13069,13079,13103,13107,13117,13121,13129],{"__ignoreMap":66},[84,12745,12746],{"class":86,"line":87},[84,12747,12748],{"class":328},"\u002F\u002F1. 值传递\n",[84,12750,12751,12753,12756,12758,12760,12762,12765,12767,12769],{"class":86,"line":98},[84,12752,5693],{"class":473},[84,12754,12755],{"class":90}," mySwap01",[84,12757,478],{"class":477},[84,12759,481],{"class":473},[84,12761,1739],{"class":5545},[84,12763,12764],{"class":477},", ",[84,12766,481],{"class":473},[84,12768,3162],{"class":5545},[84,12770,12771],{"class":477},") {\n",[84,12773,12774,12776,12779,12781],{"class":86,"line":70},[84,12775,2314],{"class":473},[84,12777,12778],{"class":477}," temp ",[84,12780,523],{"class":473},[84,12782,1773],{"class":477},[84,12784,12785,12788,12790],{"class":86,"line":120},[84,12786,12787],{"class":477},"    a ",[84,12789,523],{"class":473},[84,12791,12792],{"class":477}," b;\n",[84,12794,12795,12797,12799],{"class":86,"line":131},[84,12796,12468],{"class":477},[84,12798,523],{"class":473},[84,12800,12801],{"class":477}," temp;\n",[84,12803,12804],{"class":86,"line":145},[84,12805,1905],{"class":477},[84,12807,12808],{"class":86,"line":156},[84,12809,2729],{"emptyLinePlaceholder":403},[84,12811,12812],{"class":86,"line":164},[84,12813,12814],{"class":328},"\u002F\u002F2. 地址传递\n",[84,12816,12817,12819,12822,12824,12827,12829,12831,12833,12835],{"class":86,"line":175},[84,12818,5693],{"class":473},[84,12820,12821],{"class":90}," mySwap02",[84,12823,478],{"class":477},[84,12825,12826],{"class":473},"int*",[84,12828,1739],{"class":5545},[84,12830,12764],{"class":477},[84,12832,12826],{"class":473},[84,12834,3162],{"class":5545},[84,12836,12771],{"class":477},[84,12838,12839,12841,12843,12845,12847],{"class":86,"line":185},[84,12840,2314],{"class":473},[84,12842,12778],{"class":477},[84,12844,523],{"class":473},[84,12846,6847],{"class":473},[84,12848,6526],{"class":477},[84,12850,12851,12853,12855,12857,12859],{"class":86,"line":195},[84,12852,6732],{"class":473},[84,12854,11248],{"class":477},[84,12856,523],{"class":473},[84,12858,6847],{"class":473},[84,12860,6398],{"class":477},[84,12862,12863,12865,12867,12869],{"class":86,"line":206},[84,12864,6732],{"class":473},[84,12866,11274],{"class":477},[84,12868,523],{"class":473},[84,12870,12801],{"class":477},[84,12872,12873],{"class":86,"line":217},[84,12874,1905],{"class":477},[84,12876,12877],{"class":86,"line":227},[84,12878,2729],{"emptyLinePlaceholder":403},[84,12880,12881],{"class":86,"line":238},[84,12882,12883],{"class":328},"\u002F\u002F3. 引用传递\n",[84,12885,12886,12888,12891,12893,12896,12898,12900,12902,12904],{"class":86,"line":249},[84,12887,5693],{"class":473},[84,12889,12890],{"class":90}," mySwap03",[84,12892,478],{"class":477},[84,12894,12895],{"class":473},"int&",[84,12897,1739],{"class":5545},[84,12899,12764],{"class":477},[84,12901,12895],{"class":473},[84,12903,3162],{"class":5545},[84,12905,12771],{"class":477},[84,12907,12908,12910,12912,12914],{"class":86,"line":262},[84,12909,2314],{"class":473},[84,12911,12778],{"class":477},[84,12913,523],{"class":473},[84,12915,1773],{"class":477},[84,12917,12918,12920,12922],{"class":86,"line":273},[84,12919,12787],{"class":477},[84,12921,523],{"class":473},[84,12923,12792],{"class":477},[84,12925,12926,12928,12930],{"class":86,"line":283},[84,12927,12468],{"class":477},[84,12929,523],{"class":473},[84,12931,12801],{"class":477},[84,12933,12934],{"class":86,"line":294},[84,12935,1905],{"class":477},[84,12937,12938],{"class":86,"line":2028},[84,12939,2729],{"emptyLinePlaceholder":403},[84,12941,12942,12944,12946],{"class":86,"line":2057},[84,12943,481],{"class":473},[84,12945,2302],{"class":90},[84,12947,11182],{"class":477},[84,12949,12950],{"class":86,"line":2062},[84,12951,2729],{"emptyLinePlaceholder":403},[84,12953,12954,12956,12958,12960,12962],{"class":86,"line":2079},[84,12955,2314],{"class":473},[84,12957,11198],{"class":477},[84,12959,523],{"class":473},[84,12961,2367],{"class":94},[84,12963,1634],{"class":477},[84,12965,12966,12968,12970,12972,12974],{"class":86,"line":2084},[84,12967,2314],{"class":473},[84,12969,11211],{"class":477},[84,12971,523],{"class":473},[84,12973,9279],{"class":94},[84,12975,1634],{"class":477},[84,12977,12978],{"class":86,"line":2089},[84,12979,2729],{"emptyLinePlaceholder":403},[84,12981,12982,12985,12988],{"class":86,"line":2094},[84,12983,12984],{"class":90},"    mySwap01",[84,12986,12987],{"class":477},"(a, b);",[84,12989,12990],{"class":328},"\u002F\u002F值传递，形参不会修饰实参\n",[84,12992,12993,12995,12997,13000,13002,13004,13006,13009,13011,13013,13015],{"class":86,"line":2108},[84,12994,6858],{"class":477},[84,12996,1517],{"class":473},[84,12998,12999],{"class":104}," \"a:\"",[84,13001,1785],{"class":473},[84,13003,11198],{"class":477},[84,13005,1517],{"class":473},[84,13007,13008],{"class":104}," \" b:\"",[84,13010,1785],{"class":473},[84,13012,11211],{"class":477},[84,13014,1517],{"class":473},[84,13016,9169],{"class":477},[84,13018,13019],{"class":86,"line":2113},[84,13020,2729],{"emptyLinePlaceholder":403},[84,13022,13023,13026,13028,13030,13033,13035,13038],{"class":86,"line":2906},[84,13024,13025],{"class":90},"    mySwap02",[84,13027,478],{"class":477},[84,13029,826],{"class":473},[84,13031,13032],{"class":477},"a, ",[84,13034,826],{"class":473},[84,13036,13037],{"class":477},"b);",[84,13039,13040],{"class":328},"\u002F\u002F地址传递，形参会修饰实参\n",[84,13042,13043,13045,13047,13049,13051,13053,13055,13057,13059,13061,13063],{"class":86,"line":2920},[84,13044,6858],{"class":477},[84,13046,1517],{"class":473},[84,13048,12999],{"class":104},[84,13050,1785],{"class":473},[84,13052,11198],{"class":477},[84,13054,1517],{"class":473},[84,13056,13008],{"class":104},[84,13058,1785],{"class":473},[84,13060,11211],{"class":477},[84,13062,1517],{"class":473},[84,13064,9169],{"class":477},[84,13066,13067],{"class":86,"line":2928},[84,13068,2729],{"emptyLinePlaceholder":403},[84,13070,13071,13074,13076],{"class":86,"line":2933},[84,13072,13073],{"class":90},"    mySwap03",[84,13075,12987],{"class":477},[84,13077,13078],{"class":328},"\u002F\u002F引用传递，形参会修饰实参\n",[84,13080,13081,13083,13085,13087,13089,13091,13093,13095,13097,13099,13101],{"class":86,"line":2939},[84,13082,6858],{"class":477},[84,13084,1517],{"class":473},[84,13086,12999],{"class":104},[84,13088,1785],{"class":473},[84,13090,11198],{"class":477},[84,13092,1517],{"class":473},[84,13094,13008],{"class":104},[84,13096,1785],{"class":473},[84,13098,11211],{"class":477},[84,13100,1517],{"class":473},[84,13102,9169],{"class":477},[84,13104,13105],{"class":86,"line":2945},[84,13106,2729],{"emptyLinePlaceholder":403},[84,13108,13109,13111,13113,13115],{"class":86,"line":2950},[84,13110,2632],{"class":90},[84,13112,478],{"class":477},[84,13114,2637],{"class":104},[84,13116,3048],{"class":477},[84,13118,13119],{"class":86,"line":8277},[84,13120,2729],{"emptyLinePlaceholder":403},[84,13122,13123,13125,13127],{"class":86,"line":8301},[84,13124,4419],{"class":473},[84,13126,4422],{"class":94},[84,13128,1634],{"class":477},[84,13130,13131],{"class":86,"line":8306},[84,13132,1905],{"class":477},[14,13134,13136],{"id":13135},"_64引用做函数的返回值","6.4引用做函数的返回值",[35,13138,13139],{},"作用：引用是可以作为函数的返回值存在的",[35,13141,9354,13142],{},[624,13143,13144],{},"不要返回局部变量引用",[35,13146,13147],{},"用法：函数调用作为左值",[75,13149,13151],{"className":10270,"code":13150,"language":10272,"meta":66,"style":66},"\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",[81,13152,13153,13158,13166,13181,13187,13191,13195,13200,13208,13225,13231,13235,13239,13247,13251,13256,13270,13290,13309,13313,13318,13331,13351,13369,13373,13389,13393,13412,13430,13434,13444,13448,13456],{"__ignoreMap":66},[84,13154,13155],{"class":86,"line":87},[84,13156,13157],{"class":328},"\u002F\u002F返回局部变量引用\n",[84,13159,13160,13162,13164],{"class":86,"line":98},[84,13161,12895],{"class":473},[84,13163,5917],{"class":90},[84,13165,11182],{"class":477},[84,13167,13168,13170,13172,13174,13176,13178],{"class":86,"line":70},[84,13169,2314],{"class":473},[84,13171,11198],{"class":477},[84,13173,523],{"class":473},[84,13175,2367],{"class":94},[84,13177,532],{"class":477},[84,13179,13180],{"class":328}," \u002F\u002F局部变量\n",[84,13182,13183,13185],{"class":86,"line":120},[84,13184,4419],{"class":473},[84,13186,1773],{"class":477},[84,13188,13189],{"class":86,"line":131},[84,13190,1905],{"class":477},[84,13192,13193],{"class":86,"line":145},[84,13194,2729],{"emptyLinePlaceholder":403},[84,13196,13197],{"class":86,"line":156},[84,13198,13199],{"class":328},"\u002F\u002F返回静态变量引用\n",[84,13201,13202,13204,13206],{"class":86,"line":164},[84,13203,12895],{"class":473},[84,13205,5986],{"class":90},[84,13207,11182],{"class":477},[84,13209,13210,13212,13214,13216,13218,13220,13222],{"class":86,"line":175},[84,13211,11349],{"class":473},[84,13213,2711],{"class":473},[84,13215,11198],{"class":477},[84,13217,523],{"class":473},[84,13219,9279],{"class":94},[84,13221,532],{"class":477},[84,13223,13224],{"class":328},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[84,13226,13227,13229],{"class":86,"line":185},[84,13228,4419],{"class":473},[84,13230,1773],{"class":477},[84,13232,13233],{"class":86,"line":195},[84,13234,1905],{"class":477},[84,13236,13237],{"class":86,"line":206},[84,13238,2729],{"emptyLinePlaceholder":403},[84,13240,13241,13243,13245],{"class":86,"line":217},[84,13242,481],{"class":473},[84,13244,2302],{"class":90},[84,13246,11182],{"class":477},[84,13248,13249],{"class":86,"line":227},[84,13250,2729],{"emptyLinePlaceholder":403},[84,13252,13253],{"class":86,"line":238},[84,13254,13255],{"class":328},"    \u002F\u002F不能返回局部变量的引用\n",[84,13257,13258,13261,13264,13266,13268],{"class":86,"line":249},[84,13259,13260],{"class":473},"    int&",[84,13262,13263],{"class":477}," ref ",[84,13265,523],{"class":473},[84,13267,5917],{"class":90},[84,13269,5965],{"class":477},[84,13271,13272,13274,13276,13279,13281,13283,13285,13287],{"class":86,"line":262},[84,13273,6858],{"class":477},[84,13275,1517],{"class":473},[84,13277,13278],{"class":104}," \"ref = \"",[84,13280,1785],{"class":473},[84,13282,13263],{"class":477},[84,13284,1517],{"class":473},[84,13286,11798],{"class":477},[84,13288,13289],{"class":328},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[84,13291,13292,13294,13296,13298,13300,13302,13304,13306],{"class":86,"line":273},[84,13293,6858],{"class":477},[84,13295,1517],{"class":473},[84,13297,13278],{"class":104},[84,13299,1785],{"class":473},[84,13301,13263],{"class":477},[84,13303,1517],{"class":473},[84,13305,11798],{"class":477},[84,13307,13308],{"class":328},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[84,13310,13311],{"class":86,"line":283},[84,13312,2729],{"emptyLinePlaceholder":403},[84,13314,13315],{"class":86,"line":294},[84,13316,13317],{"class":328},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[84,13319,13320,13322,13325,13327,13329],{"class":86,"line":2028},[84,13321,13260],{"class":473},[84,13323,13324],{"class":477}," ref2 ",[84,13326,523],{"class":473},[84,13328,5986],{"class":90},[84,13330,5965],{"class":477},[84,13332,13333,13335,13337,13340,13342,13344,13346,13348],{"class":86,"line":2057},[84,13334,6858],{"class":477},[84,13336,1517],{"class":473},[84,13338,13339],{"class":104}," \"ref2 = \"",[84,13341,1785],{"class":473},[84,13343,13324],{"class":477},[84,13345,1517],{"class":473},[84,13347,11798],{"class":477},[84,13349,13350],{"class":328}," \u002F\u002F20\n",[84,13352,13353,13355,13357,13359,13361,13363,13365,13367],{"class":86,"line":2062},[84,13354,6858],{"class":477},[84,13356,1517],{"class":473},[84,13358,13339],{"class":104},[84,13360,1785],{"class":473},[84,13362,13324],{"class":477},[84,13364,1517],{"class":473},[84,13366,11798],{"class":477},[84,13368,13350],{"class":328},[84,13370,13371],{"class":86,"line":2079},[84,13372,2729],{"emptyLinePlaceholder":403},[84,13374,13375,13377,13380,13382,13384,13386],{"class":86,"line":2084},[84,13376,6031],{"class":90},[84,13378,13379],{"class":477},"() ",[84,13381,523],{"class":473},[84,13383,3328],{"class":94},[84,13385,532],{"class":477},[84,13387,13388],{"class":328},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[84,13390,13391],{"class":86,"line":2089},[84,13392,2729],{"emptyLinePlaceholder":403},[84,13394,13395,13397,13399,13401,13403,13405,13407,13409],{"class":86,"line":2094},[84,13396,6858],{"class":477},[84,13398,1517],{"class":473},[84,13400,13339],{"class":104},[84,13402,1785],{"class":473},[84,13404,13324],{"class":477},[84,13406,1517],{"class":473},[84,13408,11798],{"class":477},[84,13410,13411],{"class":328}," \u002F\u002F1000\n",[84,13413,13414,13416,13418,13420,13422,13424,13426,13428],{"class":86,"line":2108},[84,13415,6858],{"class":477},[84,13417,1517],{"class":473},[84,13419,13339],{"class":104},[84,13421,1785],{"class":473},[84,13423,13324],{"class":477},[84,13425,1517],{"class":473},[84,13427,11798],{"class":477},[84,13429,13411],{"class":328},[84,13431,13432],{"class":86,"line":2113},[84,13433,2729],{"emptyLinePlaceholder":403},[84,13435,13436,13438,13440,13442],{"class":86,"line":2906},[84,13437,2632],{"class":90},[84,13439,478],{"class":477},[84,13441,2637],{"class":104},[84,13443,3048],{"class":477},[84,13445,13446],{"class":86,"line":2920},[84,13447,2729],{"emptyLinePlaceholder":403},[84,13449,13450,13452,13454],{"class":86,"line":2928},[84,13451,4419],{"class":473},[84,13453,4422],{"class":94},[84,13455,1634],{"class":477},[84,13457,13458],{"class":86,"line":2933},[84,13459,1905],{"class":477},[14,13461,13463],{"id":13462},"_65引用的本质","6.5引用的本质",[35,13465,13466,13467],{},"本质：",[624,13468,13469],{},"引用的本质在c++内部实现是一个指针常量.",[75,13471,13473],{"className":464,"code":13472,"language":466,"meta":66,"style":66},"\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",[81,13474,13475,13480,13496,13510,13514,13523,13535,13540,13545,13556,13569,13573,13589,13606,13610,13618,13626],{"__ignoreMap":66},[84,13476,13477],{"class":86,"line":87},[84,13478,13479],{"class":328},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[84,13481,13482,13484,13486,13488,13490,13493],{"class":86,"line":98},[84,13483,5693],{"class":473},[84,13485,11714],{"class":90},[84,13487,478],{"class":477},[84,13489,12895],{"class":473},[84,13491,13492],{"class":5545}," ref",[84,13494,13495],{"class":477},"){\n",[84,13497,13498,13501,13503,13505,13507],{"class":86,"line":70},[84,13499,13500],{"class":477},"    ref ",[84,13502,523],{"class":473},[84,13504,6083],{"class":94},[84,13506,532],{"class":477},[84,13508,13509],{"class":328}," \u002F\u002F ref是引用，转换为*ref = 100\n",[84,13511,13512],{"class":86,"line":120},[84,13513,1905],{"class":477},[84,13515,13516,13518,13520],{"class":86,"line":131},[84,13517,481],{"class":473},[84,13519,2302],{"class":90},[84,13521,13522],{"class":477},"(){\n",[84,13524,13525,13527,13529,13531,13533],{"class":86,"line":145},[84,13526,2314],{"class":473},[84,13528,11198],{"class":477},[84,13530,523],{"class":473},[84,13532,2367],{"class":94},[84,13534,1634],{"class":477},[84,13536,13537],{"class":86,"line":156},[84,13538,13539],{"class":477},"    \n",[84,13541,13542],{"class":86,"line":164},[84,13543,13544],{"class":328},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[84,13546,13547,13549,13551,13553],{"class":86,"line":175},[84,13548,13260],{"class":473},[84,13550,13263],{"class":477},[84,13552,523],{"class":473},[84,13554,13555],{"class":477}," a; \n",[84,13557,13558,13560,13562,13564,13566],{"class":86,"line":185},[84,13559,13500],{"class":477},[84,13561,523],{"class":473},[84,13563,9279],{"class":94},[84,13565,532],{"class":477},[84,13567,13568],{"class":328}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[84,13570,13571],{"class":86,"line":195},[84,13572,13539],{"class":477},[84,13574,13575,13577,13579,13581,13583,13585,13587],{"class":86,"line":206},[84,13576,6858],{"class":477},[84,13578,1517],{"class":473},[84,13580,12999],{"class":104},[84,13582,1785],{"class":473},[84,13584,11198],{"class":477},[84,13586,1517],{"class":473},[84,13588,9169],{"class":477},[84,13590,13591,13593,13595,13598,13600,13602,13604],{"class":86,"line":217},[84,13592,6858],{"class":477},[84,13594,1517],{"class":473},[84,13596,13597],{"class":104}," \"ref:\"",[84,13599,1785],{"class":473},[84,13601,13263],{"class":477},[84,13603,1517],{"class":473},[84,13605,9169],{"class":477},[84,13607,13608],{"class":86,"line":227},[84,13609,13539],{"class":477},[84,13611,13612,13615],{"class":86,"line":238},[84,13613,13614],{"class":90},"    func",[84,13616,13617],{"class":477},"(a);\n",[84,13619,13620,13622,13624],{"class":86,"line":249},[84,13621,4419],{"class":473},[84,13623,4422],{"class":94},[84,13625,1634],{"class":477},[84,13627,13628],{"class":86,"line":262},[84,13629,1905],{"class":477},[35,13631,11661],{},[28,13633,13634,13637],{},[31,13635,13636],{},"引用的本质，就是一个指针常量",[31,13638,13639],{},"引用一旦初始化，就不可以发生改变",[14,13641,13643],{"id":13642},"_66常量引用","6.6常量引用",[35,13645,13646],{},"作用：常量引用主要用来修饰形参",[35,13648,13649,13650,13653],{},"在函数形参列表中，可以加",[624,13651,13652],{},"const修饰形参","，防止形参改变实参",[75,13655,13657],{"className":464,"code":13656,"language":466,"meta":66,"style":66},"\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",[81,13658,13659,13664,13669,13688,13693,13706,13710,13714,13722,13726,13731,13736,13750,13754,13762,13774,13778,13783,13795,13802,13806,13816,13820,13828],{"__ignoreMap":66},[84,13660,13661],{"class":86,"line":87},[84,13662,13663],{"class":328},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[84,13665,13666],{"class":86,"line":98},[84,13667,13668],{"class":328},"\u002F\u002F加上const就不能修改实参的\n",[84,13670,13671,13673,13676,13678,13680,13683,13686],{"class":86,"line":70},[84,13672,5693],{"class":473},[84,13674,13675],{"class":90}," showValue",[84,13677,478],{"class":477},[84,13679,7121],{"class":473},[84,13681,13682],{"class":473}," int&",[84,13684,13685],{"class":5545}," v",[84,13687,12771],{"class":477},[84,13689,13690],{"class":86,"line":120},[84,13691,13692],{"class":328},"    \u002F\u002Fv += 100;\n",[84,13694,13695,13697,13699,13702,13704],{"class":86,"line":131},[84,13696,6858],{"class":477},[84,13698,1517],{"class":473},[84,13700,13701],{"class":477}," v ",[84,13703,1517],{"class":473},[84,13705,9169],{"class":477},[84,13707,13708],{"class":86,"line":145},[84,13709,1905],{"class":477},[84,13711,13712],{"class":86,"line":156},[84,13713,2729],{"emptyLinePlaceholder":403},[84,13715,13716,13718,13720],{"class":86,"line":164},[84,13717,481],{"class":473},[84,13719,2302],{"class":90},[84,13721,11182],{"class":477},[84,13723,13724],{"class":86,"line":175},[84,13725,2729],{"emptyLinePlaceholder":403},[84,13727,13728],{"class":86,"line":185},[84,13729,13730],{"class":328},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[84,13732,13733],{"class":86,"line":195},[84,13734,13735],{"class":328},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[84,13737,13738,13740,13742,13744,13746,13748],{"class":86,"line":206},[84,13739,11550],{"class":473},[84,13741,13682],{"class":473},[84,13743,13263],{"class":477},[84,13745,523],{"class":473},[84,13747,2367],{"class":94},[84,13749,1634],{"class":477},[84,13751,13752],{"class":86,"line":217},[84,13753,2729],{"emptyLinePlaceholder":403},[84,13755,13756,13759],{"class":86,"line":227},[84,13757,13758],{"class":328},"    \u002F\u002Fref = 100;",[84,13760,13761],{"class":328},"  \u002F\u002F加入const后不可以修改变量\n",[84,13763,13764,13766,13768,13770,13772],{"class":86,"line":238},[84,13765,6858],{"class":477},[84,13767,1517],{"class":473},[84,13769,13263],{"class":477},[84,13771,1517],{"class":473},[84,13773,9169],{"class":477},[84,13775,13776],{"class":86,"line":249},[84,13777,2729],{"emptyLinePlaceholder":403},[84,13779,13780],{"class":86,"line":262},[84,13781,13782],{"class":328},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[84,13784,13785,13787,13789,13791,13793],{"class":86,"line":273},[84,13786,2314],{"class":473},[84,13788,11198],{"class":477},[84,13790,523],{"class":473},[84,13792,2367],{"class":94},[84,13794,1634],{"class":477},[84,13796,13797,13800],{"class":86,"line":283},[84,13798,13799],{"class":90},"    showValue",[84,13801,13617],{"class":477},[84,13803,13804],{"class":86,"line":294},[84,13805,2729],{"emptyLinePlaceholder":403},[84,13807,13808,13810,13812,13814],{"class":86,"line":2028},[84,13809,2632],{"class":90},[84,13811,478],{"class":477},[84,13813,2637],{"class":104},[84,13815,3048],{"class":477},[84,13817,13818],{"class":86,"line":2057},[84,13819,2729],{"emptyLinePlaceholder":403},[84,13821,13822,13824,13826],{"class":86,"line":2062},[84,13823,4419],{"class":473},[84,13825,4422],{"class":94},[84,13827,1634],{"class":477},[84,13829,13830],{"class":86,"line":2079},[84,13831,1905],{"class":477},[389,13833,13834],{},"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":66,"searchDepth":98,"depth":98,"links":13836},[13837,13838,13839,13840,13841,13842],{"id":12369,"depth":98,"text":12370},{"id":12548,"depth":98,"text":12549},{"id":12731,"depth":98,"text":12732},{"id":13135,"depth":98,"text":13136},{"id":13462,"depth":98,"text":13463},{"id":13642,"depth":98,"text":13643},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12361,"description":66},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13849,"title":13850,"body":13851,"description":66,"extension":401,"meta":14932,"navigation":403,"path":14933,"seo":14934,"stem":14935,"__hash__":14936},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13852,"toc":14924},[13853,13856,13860,13863,13868,14100,14102,14113,14117,14120,14128,14232,14235,14239,14242,14246,14249,14254,14276,14282,14609,14612,14616,14624,14921],[10,13854,13850],{"id":13855},"_7函数高级部分",[14,13857,13859],{"id":13858},"_71函数默认参数","7.1函数默认参数",[35,13861,13862],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[35,13864,5510,13865],{},[81,13866,13867],{}," 返回值类型  函数名 （参数= 默认值）{}",[75,13869,13871],{"className":464,"code":13870,"language":466,"meta":66,"style":66},"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",[81,13872,13873,13908,13923,13927,13931,13936,13941,13970,13990,14000,14004,14008,14016,14020,14048,14070,14074,14084,14088,14096],{"__ignoreMap":66},[84,13874,13875,13877,13879,13881,13883,13885,13887,13889,13891,13894,13896,13898,13900,13902,13904,13906],{"class":86,"line":87},[84,13876,481],{"class":473},[84,13878,11714],{"class":90},[84,13880,478],{"class":477},[84,13882,481],{"class":473},[84,13884,1739],{"class":5545},[84,13886,12764],{"class":477},[84,13888,481],{"class":473},[84,13890,3162],{"class":5545},[84,13892,13893],{"class":473}," =",[84,13895,2367],{"class":94},[84,13897,12764],{"class":477},[84,13899,481],{"class":473},[84,13901,3178],{"class":5545},[84,13903,13893],{"class":473},[84,13905,2367],{"class":94},[84,13907,12771],{"class":477},[84,13909,13910,13912,13914,13916,13918,13920],{"class":86,"line":98},[84,13911,4419],{"class":473},[84,13913,11198],{"class":477},[84,13915,954],{"class":473},[84,13917,11211],{"class":477},[84,13919,954],{"class":473},[84,13921,13922],{"class":477}," c;\n",[84,13924,13925],{"class":86,"line":70},[84,13926,1905],{"class":477},[84,13928,13929],{"class":86,"line":120},[84,13930,2729],{"emptyLinePlaceholder":403},[84,13932,13933],{"class":86,"line":131},[84,13934,13935],{"class":328},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[84,13937,13938],{"class":86,"line":145},[84,13939,13940],{"class":328},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[84,13942,13943,13945,13948,13950,13952,13954,13956,13958,13960,13962,13964,13966,13968],{"class":86,"line":156},[84,13944,481],{"class":473},[84,13946,13947],{"class":90}," func2",[84,13949,478],{"class":477},[84,13951,481],{"class":473},[84,13953,1739],{"class":5545},[84,13955,13893],{"class":473},[84,13957,2367],{"class":94},[84,13959,12764],{"class":477},[84,13961,481],{"class":473},[84,13963,3162],{"class":5545},[84,13965,13893],{"class":473},[84,13967,2367],{"class":94},[84,13969,3048],{"class":477},[84,13971,13972,13974,13976,13978,13980,13982,13984,13986,13988],{"class":86,"line":164},[84,13973,481],{"class":473},[84,13975,13947],{"class":90},[84,13977,478],{"class":477},[84,13979,481],{"class":473},[84,13981,1739],{"class":5545},[84,13983,12764],{"class":477},[84,13985,481],{"class":473},[84,13987,3162],{"class":5545},[84,13989,12771],{"class":477},[84,13991,13992,13994,13996,13998],{"class":86,"line":175},[84,13993,4419],{"class":473},[84,13995,11198],{"class":477},[84,13997,954],{"class":473},[84,13999,12792],{"class":477},[84,14001,14002],{"class":86,"line":185},[84,14003,1905],{"class":477},[84,14005,14006],{"class":86,"line":195},[84,14007,2729],{"emptyLinePlaceholder":403},[84,14009,14010,14012,14014],{"class":86,"line":206},[84,14011,481],{"class":473},[84,14013,2302],{"class":90},[84,14015,11182],{"class":477},[84,14017,14018],{"class":86,"line":217},[84,14019,2729],{"emptyLinePlaceholder":403},[84,14021,14022,14024,14026,14029,14031,14033,14035,14037,14039,14041,14044,14046],{"class":86,"line":227},[84,14023,6858],{"class":477},[84,14025,1517],{"class":473},[84,14027,14028],{"class":104}," \"ret = \"",[84,14030,1785],{"class":473},[84,14032,11714],{"class":90},[84,14034,478],{"class":477},[84,14036,1173],{"class":94},[84,14038,12764],{"class":477},[84,14040,1173],{"class":94},[84,14042,14043],{"class":477},") ",[84,14045,1517],{"class":473},[84,14047,9169],{"class":477},[84,14049,14050,14052,14054,14056,14058,14060,14062,14064,14066,14068],{"class":86,"line":238},[84,14051,6858],{"class":477},[84,14053,1517],{"class":473},[84,14055,14028],{"class":104},[84,14057,1785],{"class":473},[84,14059,11714],{"class":90},[84,14061,478],{"class":477},[84,14063,784],{"class":94},[84,14065,14043],{"class":477},[84,14067,1517],{"class":473},[84,14069,9169],{"class":477},[84,14071,14072],{"class":86,"line":249},[84,14073,2729],{"emptyLinePlaceholder":403},[84,14075,14076,14078,14080,14082],{"class":86,"line":262},[84,14077,2632],{"class":90},[84,14079,478],{"class":477},[84,14081,2637],{"class":104},[84,14083,3048],{"class":477},[84,14085,14086],{"class":86,"line":273},[84,14087,2729],{"emptyLinePlaceholder":403},[84,14089,14090,14092,14094],{"class":86,"line":283},[84,14091,4419],{"class":473},[84,14093,4422],{"class":94},[84,14095,1634],{"class":477},[84,14097,14098],{"class":86,"line":294},[84,14099,1905],{"class":477},[35,14101,11661],{},[28,14103,14104,14107,14110],{},[31,14105,14106],{},"我传就用我；没传就用你",[31,14108,14109],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[31,14111,14112],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14114,14116],{"id":14115},"_72函数的占位参数","7.2函数的占位参数",[35,14118,14119],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[35,14121,14122,14124,14125],{},[624,14123,5510],{}," ",[81,14126,14127],{},"返回值类型 函数名 (数据类型){}",[75,14129,14131],{"className":464,"code":14130,"language":466,"meta":66,"style":66},"\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",[81,14132,14133,14138,14156,14169,14173,14181,14185,14202,14206,14216,14220,14228],{"__ignoreMap":66},[84,14134,14135],{"class":86,"line":87},[84,14136,14137],{"class":328},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[84,14139,14140,14142,14144,14146,14148,14150,14152,14154],{"class":86,"line":98},[84,14141,5693],{"class":473},[84,14143,11714],{"class":90},[84,14145,478],{"class":477},[84,14147,481],{"class":473},[84,14149,1739],{"class":5545},[84,14151,12764],{"class":477},[84,14153,481],{"class":473},[84,14155,12771],{"class":477},[84,14157,14158,14160,14162,14165,14167],{"class":86,"line":70},[84,14159,6858],{"class":477},[84,14161,1517],{"class":473},[84,14163,14164],{"class":104}," \"this is func\"",[84,14166,1785],{"class":473},[84,14168,9169],{"class":477},[84,14170,14171],{"class":86,"line":120},[84,14172,1905],{"class":477},[84,14174,14175,14177,14179],{"class":86,"line":131},[84,14176,481],{"class":473},[84,14178,2302],{"class":90},[84,14180,11182],{"class":477},[84,14182,14183],{"class":86,"line":145},[84,14184,2729],{"emptyLinePlaceholder":403},[84,14186,14187,14189,14191,14193,14195,14197,14199],{"class":86,"line":156},[84,14188,13614],{"class":90},[84,14190,478],{"class":477},[84,14192,919],{"class":94},[84,14194,851],{"class":477},[84,14196,919],{"class":94},[84,14198,6295],{"class":477},[84,14200,14201],{"class":328}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[84,14203,14204],{"class":86,"line":164},[84,14205,2729],{"emptyLinePlaceholder":403},[84,14207,14208,14210,14212,14214],{"class":86,"line":175},[84,14209,2632],{"class":90},[84,14211,478],{"class":477},[84,14213,2637],{"class":104},[84,14215,3048],{"class":477},[84,14217,14218],{"class":86,"line":185},[84,14219,2729],{"emptyLinePlaceholder":403},[84,14221,14222,14224,14226],{"class":86,"line":195},[84,14223,4419],{"class":473},[84,14225,4422],{"class":94},[84,14227,1634],{"class":477},[84,14229,14230],{"class":86,"line":206},[84,14231,1905],{"class":477},[35,14233,14234],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14236,14238],{"id":14237},"_73函数重载","7.3函数重载",[35,14240,14241],{},"意思是函数名是可以相同的",[23,14243,14245],{"id":14244},"_731基本语法","7.3.1基本语法",[35,14247,14248],{},"作用：函数名可以相同，提高复用性",[35,14250,14251],{},[624,14252,14253],{},"函数重载满足条件：",[1480,14255,14256,14259,14262],{},[31,14257,14258],{},"同一个作用域下",[31,14260,14261],{},"函数名称相同",[31,14263,14264,14265,14268,14269,14272,14273],{},"函数参数",[624,14266,14267],{},"类型不同","  或者 ",[624,14270,14271],{},"个数不同"," 或者 ",[624,14274,14275],{},"顺序不同",[35,14277,14278,14281],{},[624,14279,14280],{},"注意:","  函数的返回值不可以作为函数重载的条件",[75,14283,14285],{"className":10270,"code":14284,"language":10272,"meta":66,"style":66},"\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",[81,14286,14287,14292,14300,14304,14317,14321,14335,14339,14352,14356,14371,14375,14388,14392,14413,14417,14430,14434,14454,14458,14471,14475,14479,14484,14489,14494,14499,14504,14508,14512,14520,14524,14530,14540,14550,14564,14579,14583,14593,14597,14605],{"__ignoreMap":66},[84,14288,14289],{"class":86,"line":87},[84,14290,14291],{"class":328},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[84,14293,14294,14296,14298],{"class":86,"line":98},[84,14295,5693],{"class":473},[84,14297,11714],{"class":90},[84,14299,2305],{"class":477},[84,14301,14302],{"class":86,"line":70},[84,14303,1886],{"class":477},[84,14305,14306,14308,14310,14313,14315],{"class":86,"line":120},[84,14307,6858],{"class":477},[84,14309,1517],{"class":473},[84,14311,14312],{"class":104}," \"func 的调用！\"",[84,14314,1785],{"class":473},[84,14316,9169],{"class":477},[84,14318,14319],{"class":86,"line":131},[84,14320,1905],{"class":477},[84,14322,14323,14325,14327,14329,14331,14333],{"class":86,"line":145},[84,14324,5693],{"class":473},[84,14326,11714],{"class":90},[84,14328,478],{"class":477},[84,14330,481],{"class":473},[84,14332,1739],{"class":5545},[84,14334,484],{"class":477},[84,14336,14337],{"class":86,"line":156},[84,14338,1886],{"class":477},[84,14340,14341,14343,14345,14348,14350],{"class":86,"line":164},[84,14342,6858],{"class":477},[84,14344,1517],{"class":473},[84,14346,14347],{"class":104}," \"func (int a) 的调用！\"",[84,14349,1785],{"class":473},[84,14351,9169],{"class":477},[84,14353,14354],{"class":86,"line":175},[84,14355,1905],{"class":477},[84,14357,14358,14360,14362,14364,14367,14369],{"class":86,"line":185},[84,14359,5693],{"class":473},[84,14361,11714],{"class":90},[84,14363,478],{"class":477},[84,14365,14366],{"class":473},"double",[84,14368,1739],{"class":5545},[84,14370,484],{"class":477},[84,14372,14373],{"class":86,"line":195},[84,14374,1886],{"class":477},[84,14376,14377,14379,14381,14384,14386],{"class":86,"line":206},[84,14378,6858],{"class":477},[84,14380,1517],{"class":473},[84,14382,14383],{"class":104}," \"func (double a)的调用！\"",[84,14385,1785],{"class":473},[84,14387,9169],{"class":477},[84,14389,14390],{"class":86,"line":217},[84,14391,1905],{"class":477},[84,14393,14394,14396,14398,14400,14402,14404,14407,14409,14411],{"class":86,"line":227},[84,14395,5693],{"class":473},[84,14397,11714],{"class":90},[84,14399,478],{"class":477},[84,14401,481],{"class":473},[84,14403,1739],{"class":5545},[84,14405,14406],{"class":477}," ,",[84,14408,14366],{"class":473},[84,14410,3162],{"class":5545},[84,14412,484],{"class":477},[84,14414,14415],{"class":86,"line":238},[84,14416,1886],{"class":477},[84,14418,14419,14421,14423,14426,14428],{"class":86,"line":249},[84,14420,6858],{"class":477},[84,14422,1517],{"class":473},[84,14424,14425],{"class":104}," \"func (int a ,double b) 的调用！\"",[84,14427,1785],{"class":473},[84,14429,9169],{"class":477},[84,14431,14432],{"class":86,"line":262},[84,14433,1905],{"class":477},[84,14435,14436,14438,14440,14442,14444,14446,14448,14450,14452],{"class":86,"line":273},[84,14437,5693],{"class":473},[84,14439,11714],{"class":90},[84,14441,478],{"class":477},[84,14443,14366],{"class":473},[84,14445,1739],{"class":5545},[84,14447,14406],{"class":477},[84,14449,481],{"class":473},[84,14451,3162],{"class":5545},[84,14453,484],{"class":477},[84,14455,14456],{"class":86,"line":283},[84,14457,1886],{"class":477},[84,14459,14460,14462,14464,14467,14469],{"class":86,"line":294},[84,14461,6858],{"class":477},[84,14463,1517],{"class":473},[84,14465,14466],{"class":104}," \"func (double a ,int b)的调用！\"",[84,14468,1785],{"class":473},[84,14470,9169],{"class":477},[84,14472,14473],{"class":86,"line":2028},[84,14474,1905],{"class":477},[84,14476,14477],{"class":86,"line":2057},[84,14478,2729],{"emptyLinePlaceholder":403},[84,14480,14481],{"class":86,"line":2062},[84,14482,14483],{"class":328},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[84,14485,14486],{"class":86,"line":2079},[84,14487,14488],{"class":328},"\u002F\u002Fint func(double a, int b)\n",[84,14490,14491],{"class":86,"line":2084},[84,14492,14493],{"class":328},"\u002F\u002F{\n",[84,14495,14496],{"class":86,"line":2089},[84,14497,14498],{"class":328},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[84,14500,14501],{"class":86,"line":2094},[84,14502,14503],{"class":328},"\u002F\u002F}\n",[84,14505,14506],{"class":86,"line":2108},[84,14507,2729],{"emptyLinePlaceholder":403},[84,14509,14510],{"class":86,"line":2113},[84,14511,2729],{"emptyLinePlaceholder":403},[84,14513,14514,14516,14518],{"class":86,"line":2906},[84,14515,481],{"class":473},[84,14517,2302],{"class":90},[84,14519,11182],{"class":477},[84,14521,14522],{"class":86,"line":2920},[84,14523,2729],{"emptyLinePlaceholder":403},[84,14525,14526,14528],{"class":86,"line":2928},[84,14527,13614],{"class":90},[84,14529,5965],{"class":477},[84,14531,14532,14534,14536,14538],{"class":86,"line":2933},[84,14533,13614],{"class":90},[84,14535,478],{"class":477},[84,14537,919],{"class":94},[84,14539,3048],{"class":477},[84,14541,14542,14544,14546,14548],{"class":86,"line":2939},[84,14543,13614],{"class":90},[84,14545,478],{"class":477},[84,14547,526],{"class":94},[84,14549,3048],{"class":477},[84,14551,14552,14554,14556,14558,14560,14562],{"class":86,"line":2945},[84,14553,13614],{"class":90},[84,14555,478],{"class":477},[84,14557,919],{"class":94},[84,14559,851],{"class":477},[84,14561,526],{"class":94},[84,14563,3048],{"class":477},[84,14565,14566,14568,14570,14572,14575,14577],{"class":86,"line":2950},[84,14567,13614],{"class":90},[84,14569,478],{"class":477},[84,14571,526],{"class":94},[84,14573,14574],{"class":477}," , ",[84,14576,919],{"class":94},[84,14578,3048],{"class":477},[84,14580,14581],{"class":86,"line":8277},[84,14582,13539],{"class":477},[84,14584,14585,14587,14589,14591],{"class":86,"line":8301},[84,14586,2632],{"class":90},[84,14588,478],{"class":477},[84,14590,2637],{"class":104},[84,14592,3048],{"class":477},[84,14594,14595],{"class":86,"line":8306},[84,14596,2729],{"emptyLinePlaceholder":403},[84,14598,14599,14601,14603],{"class":86,"line":8312},[84,14600,4419],{"class":473},[84,14602,4422],{"class":94},[84,14604,1634],{"class":477},[84,14606,14607],{"class":86,"line":8339},[84,14608,1905],{"class":477},[35,14610,14611],{},"重点：函数返回值不可以作为函数重载条件！",[23,14613,14615],{"id":14614},"_732注意事项","7.3.2注意事项",[1480,14617,14618,14621],{},[31,14619,14620],{},"引用作为重载条件!!!",[31,14622,14623],{},"函数重载碰到函数默认参数",[75,14625,14627],{"className":464,"code":14626,"language":466,"meta":66,"style":66},"\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",[81,14628,14629,14634,14639,14643,14659,14663,14676,14680,14684,14702,14706,14719,14723,14727,14731,14736,14740,14764,14768,14781,14785,14789,14803,14807,14820,14824,14828,14836,14840,14852,14862,14875,14879,14883,14891,14895,14905,14909,14917],{"__ignoreMap":66},[84,14630,14631],{"class":86,"line":87},[84,14632,14633],{"class":328},"\u002F\u002F函数重载注意事项\n",[84,14635,14636],{"class":86,"line":98},[84,14637,14638],{"class":328},"\u002F\u002F1、引用作为重载条件\n",[84,14640,14641],{"class":86,"line":70},[84,14642,2729],{"emptyLinePlaceholder":403},[84,14644,14645,14647,14649,14651,14653,14655,14657],{"class":86,"line":120},[84,14646,5693],{"class":473},[84,14648,11714],{"class":90},[84,14650,478],{"class":477},[84,14652,481],{"class":473},[84,14654,10913],{"class":473},[84,14656,39],{"class":5545},[84,14658,484],{"class":477},[84,14660,14661],{"class":86,"line":131},[84,14662,1886],{"class":477},[84,14664,14665,14667,14669,14672,14674],{"class":86,"line":145},[84,14666,6858],{"class":477},[84,14668,1517],{"class":473},[84,14670,14671],{"class":104}," \"func (int &a) 调用 \"",[84,14673,1785],{"class":473},[84,14675,9169],{"class":477},[84,14677,14678],{"class":86,"line":156},[84,14679,1905],{"class":477},[84,14681,14682],{"class":86,"line":164},[84,14683,2729],{"emptyLinePlaceholder":403},[84,14685,14686,14688,14690,14692,14694,14696,14698,14700],{"class":86,"line":175},[84,14687,5693],{"class":473},[84,14689,11714],{"class":90},[84,14691,478],{"class":477},[84,14693,7121],{"class":473},[84,14695,2711],{"class":473},[84,14697,10913],{"class":473},[84,14699,39],{"class":5545},[84,14701,484],{"class":477},[84,14703,14704],{"class":86,"line":185},[84,14705,1886],{"class":477},[84,14707,14708,14710,14712,14715,14717],{"class":86,"line":195},[84,14709,6858],{"class":477},[84,14711,1517],{"class":473},[84,14713,14714],{"class":104}," \"func (const int &a) 调用 \"",[84,14716,1785],{"class":473},[84,14718,9169],{"class":477},[84,14720,14721],{"class":86,"line":206},[84,14722,1905],{"class":477},[84,14724,14725],{"class":86,"line":217},[84,14726,2729],{"emptyLinePlaceholder":403},[84,14728,14729],{"class":86,"line":227},[84,14730,2729],{"emptyLinePlaceholder":403},[84,14732,14733],{"class":86,"line":238},[84,14734,14735],{"class":328},"\u002F\u002F2、函数重载碰到函数默认参数\n",[84,14737,14738],{"class":86,"line":249},[84,14739,2729],{"emptyLinePlaceholder":403},[84,14741,14742,14744,14746,14748,14750,14752,14754,14756,14758,14760,14762],{"class":86,"line":262},[84,14743,5693],{"class":473},[84,14745,13947],{"class":90},[84,14747,478],{"class":477},[84,14749,481],{"class":473},[84,14751,1739],{"class":5545},[84,14753,12764],{"class":477},[84,14755,481],{"class":473},[84,14757,3162],{"class":5545},[84,14759,13893],{"class":473},[84,14761,2367],{"class":94},[84,14763,484],{"class":477},[84,14765,14766],{"class":86,"line":273},[84,14767,1886],{"class":477},[84,14769,14770,14772,14774,14777,14779],{"class":86,"line":283},[84,14771,6858],{"class":477},[84,14773,1517],{"class":473},[84,14775,14776],{"class":104}," \"func2(int a, int b = 10) 调用\"",[84,14778,1785],{"class":473},[84,14780,9169],{"class":477},[84,14782,14783],{"class":86,"line":294},[84,14784,1905],{"class":477},[84,14786,14787],{"class":86,"line":2028},[84,14788,2729],{"emptyLinePlaceholder":403},[84,14790,14791,14793,14795,14797,14799,14801],{"class":86,"line":2057},[84,14792,5693],{"class":473},[84,14794,13947],{"class":90},[84,14796,478],{"class":477},[84,14798,481],{"class":473},[84,14800,1739],{"class":5545},[84,14802,484],{"class":477},[84,14804,14805],{"class":86,"line":2062},[84,14806,1886],{"class":477},[84,14808,14809,14811,14813,14816,14818],{"class":86,"line":2079},[84,14810,6858],{"class":477},[84,14812,1517],{"class":473},[84,14814,14815],{"class":104}," \"func2(int a) 调用\"",[84,14817,1785],{"class":473},[84,14819,9169],{"class":477},[84,14821,14822],{"class":86,"line":2084},[84,14823,1905],{"class":477},[84,14825,14826],{"class":86,"line":2089},[84,14827,2729],{"emptyLinePlaceholder":403},[84,14829,14830,14832,14834],{"class":86,"line":2094},[84,14831,481],{"class":473},[84,14833,2302],{"class":90},[84,14835,11182],{"class":477},[84,14837,14838],{"class":86,"line":2108},[84,14839,13539],{"class":477},[84,14841,14842,14844,14846,14848,14850],{"class":86,"line":2113},[84,14843,2314],{"class":473},[84,14845,11198],{"class":477},[84,14847,523],{"class":473},[84,14849,2367],{"class":94},[84,14851,1634],{"class":477},[84,14853,14854,14856,14859],{"class":86,"line":2906},[84,14855,13614],{"class":90},[84,14857,14858],{"class":477},"(a);",[84,14860,14861],{"class":328}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[84,14863,14864,14866,14868,14870,14872],{"class":86,"line":2920},[84,14865,13614],{"class":90},[84,14867,478],{"class":477},[84,14869,919],{"class":94},[84,14871,6295],{"class":477},[84,14873,14874],{"class":328},"\u002F\u002F调用有const   10是个常量\n",[84,14876,14877],{"class":86,"line":2928},[84,14878,2729],{"emptyLinePlaceholder":403},[84,14880,14881],{"class":86,"line":2933},[84,14882,2729],{"emptyLinePlaceholder":403},[84,14884,14885,14888],{"class":86,"line":2939},[84,14886,14887],{"class":328},"    \u002F\u002Ffunc2(10);",[84,14889,14890],{"class":328}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[84,14892,14893],{"class":86,"line":2945},[84,14894,2729],{"emptyLinePlaceholder":403},[84,14896,14897,14899,14901,14903],{"class":86,"line":2950},[84,14898,2632],{"class":90},[84,14900,478],{"class":477},[84,14902,2637],{"class":104},[84,14904,3048],{"class":477},[84,14906,14907],{"class":86,"line":8277},[84,14908,2729],{"emptyLinePlaceholder":403},[84,14910,14911,14913,14915],{"class":86,"line":8301},[84,14912,4419],{"class":473},[84,14914,4422],{"class":94},[84,14916,1634],{"class":477},[84,14918,14919],{"class":86,"line":8306},[84,14920,1905],{"class":477},[389,14922,14923],{},"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":66,"searchDepth":98,"depth":98,"links":14925},[14926,14927,14928],{"id":13858,"depth":98,"text":13859},{"id":14115,"depth":98,"text":14116},{"id":14237,"depth":98,"text":14238,"children":14929},[14930,14931],{"id":14244,"depth":70,"text":14245},{"id":14614,"depth":70,"text":14615},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13850,"description":66},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14938,"title":14939,"body":14940,"description":23694,"extension":401,"meta":23695,"navigation":403,"path":23696,"seo":23697,"stem":23698,"__hash__":23699},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14941,"toc":23675},[14942,14945,14951,14958,14963,14966,14969,14972,14976,14980,14983,14986,14994,14999,15002,15009,15014,15173,15176,15429,15432,15435,15438,15443,15446,15449,15460,15465,15701,15705,15715,15718,15726,15873,15877,15880,15883,15887,16332,16336,16344,16352,17264,17271,17276,17904,17907,17910,17913,18032,18035,18122,18125,18251,18254,18348,18351,18704,18708,18716,18720,18727,18730,18733,18744,18750,18755,18767,18775,18795,18803,18820,19006,19009,19013,19016,19019,19022,19025,19028,19031,19034,19494,19500,19504,19507,19518,20105,20108,20597,20601,20604,20607,20610,20613,20616,20624,21020,21024,21027,21030,21477,21480,21483,21488,21491,21496,21499,21503,21506,21508,21514,21517,21823,21833,21874,21878,21881,21883,21916,21919,22226,22228,22243,22246,22269,22278,22284,22287,22291,22294,22297,22302,22313,22318,22326,22331,22461,22464,22467,22642,22647,22859,22863,22866,22980,22985,23224,23228,23232,23235,23238,23243,23348,23351,23354,23357,23361,23472,23475,23478,23483,23535,23538,23541,23546,23592,23595,23600,23668,23670,23673],[10,14943,14939],{"id":14944},"_8类和对象",[35,14946,14947,14948],{},"C++面向对象的三大特性为",[624,14949,14950],{},"封装、继承、多态",[35,14952,14953,14954,14957],{},"C++认为",[624,14955,14956],{},"万事万物都皆为对象","，对象上有其属性和行为",[35,14959,14960],{},[624,14961,14962],{},"例如：",[35,14964,14965],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[35,14967,14968],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[35,14970,14971],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14973,14975],{"id":14974},"_81封装","8.1封装",[23,14977,14979],{"id":14978},"_811封装的意义","8.1.1封装的意义",[35,14981,14982],{},"封装是C++面向对象三大特性之一",[35,14984,14985],{},"封装的意义：",[1480,14987,14988,14991],{},[31,14989,14990],{},"将属性和行为作为一个整体，表现生活中的事物",[31,14992,14993],{},"将属性和行为加以权限控制",[35,14995,14996],{},[624,14997,14998],{},"封装意义一：",[35,15000,15001],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[35,15003,15004,14124,15006],{},[624,15005,5510],{},[81,15007,15008],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[28,15010,15011],{},[31,15012,15013],{},"**示例1：**设计一个圆类，求圆的周长",[75,15015,15017],{"className":464,"code":15016,"language":466,"meta":66,"style":66},"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",[81,15018,15019,15027,15031,15036,15041,15046,15051,15058,15063,15073,15077,15095,15099,15103,15111,15115,15120,15125,15130,15135,15146,15169],{"__ignoreMap":66},[84,15020,15021,15024],{"class":86,"line":87},[84,15022,15023],{"class":473},"class",[84,15025,15026],{"class":90}," Circle\n",[84,15028,15029],{"class":86,"line":98},[84,15030,1886],{"class":477},[84,15032,15033],{"class":86,"line":70},[84,15034,15035],{"class":328},"    \u002F\u002F访问权限\n",[84,15037,15038],{"class":86,"line":120},[84,15039,15040],{"class":328},"    \u002F\u002F公共权限\n",[84,15042,15043],{"class":86,"line":131},[84,15044,15045],{"class":473},"public:\n",[84,15047,15048],{"class":86,"line":145},[84,15049,15050],{"class":328},"    \u002F\u002F属性\n",[84,15052,15053,15055],{"class":86,"line":156},[84,15054,2314],{"class":473},[84,15056,15057],{"class":477}," m_r;\n",[84,15059,15060],{"class":86,"line":164},[84,15061,15062],{"class":328},"    \u002F\u002F行为\n",[84,15064,15065,15068,15071],{"class":86,"line":175},[84,15066,15067],{"class":473},"    double",[84,15069,15070],{"class":90}," calculateZC",[84,15072,2305],{"class":477},[84,15074,15075],{"class":86,"line":185},[84,15076,2359],{"class":477},[84,15078,15079,15082,15085,15087,15090,15092],{"class":86,"line":195},[84,15080,15081],{"class":473},"        return",[84,15083,15084],{"class":94}," 2",[84,15086,928],{"class":473},[84,15088,15089],{"class":477},"PI",[84,15091,928],{"class":473},[84,15093,15094],{"class":477},"m_r;\n",[84,15096,15097],{"class":86,"line":206},[84,15098,2516],{"class":477},[84,15100,15101],{"class":86,"line":217},[84,15102,4324],{"class":477},[84,15104,15105,15107,15109],{"class":86,"line":227},[84,15106,481],{"class":473},[84,15108,2302],{"class":90},[84,15110,2305],{"class":477},[84,15112,15113],{"class":86,"line":238},[84,15114,1886],{"class":477},[84,15116,15117],{"class":86,"line":249},[84,15118,15119],{"class":328},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[84,15121,15122],{"class":86,"line":262},[84,15123,15124],{"class":328},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[84,15126,15127],{"class":86,"line":273},[84,15128,15129],{"class":477},"    Circle c1;\n",[84,15131,15132],{"class":86,"line":283},[84,15133,15134],{"class":328},"    \u002F\u002F给圆对象 的属性进行赋值\n",[84,15136,15137,15140,15142,15144],{"class":86,"line":294},[84,15138,15139],{"class":477},"    c1.m_r",[84,15141,523],{"class":473},[84,15143,919],{"class":94},[84,15145,1634],{"class":477},[84,15147,15148,15150,15152,15155,15157,15160,15163,15165,15167],{"class":86,"line":2028},[84,15149,1891],{"class":477},[84,15151,1517],{"class":473},[84,15153,15154],{"class":104},"\"圆的周长\"",[84,15156,1517],{"class":473},[84,15158,15159],{"class":477},"c1.",[84,15161,15162],{"class":90},"calculateZC",[84,15164,2756],{"class":477},[84,15166,1517],{"class":473},[84,15168,1539],{"class":477},[84,15170,15171],{"class":86,"line":2057},[84,15172,1905],{"class":477},[35,15174,15175],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[75,15177,15179],{"className":464,"code":15178,"language":466,"meta":66,"style":66},"#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",[81,15180,15181,15187,15197,15203,15209,15213,15217,15222,15229,15234,15252,15256,15266,15270,15275,15291,15295,15305,15309,15314,15322,15326,15358,15362,15366,15374,15378,15383,15388,15402,15416,15425],{"__ignoreMap":66},[84,15182,15183,15185],{"class":86,"line":87},[84,15184,2279],{"class":473},[84,15186,2282],{"class":104},[84,15188,15189,15191,15193,15195],{"class":86,"line":98},[84,15190,2287],{"class":473},[84,15192,2290],{"class":473},[84,15194,2293],{"class":90},[84,15196,1634],{"class":477},[84,15198,15199,15201],{"class":86,"line":70},[84,15200,2279],{"class":473},[84,15202,8078],{"class":104},[84,15204,15205,15207],{"class":86,"line":120},[84,15206,15023],{"class":473},[84,15208,8091],{"class":90},[84,15210,15211],{"class":86,"line":131},[84,15212,1886],{"class":477},[84,15214,15215],{"class":86,"line":145},[84,15216,15045],{"class":473},[84,15218,15219],{"class":86,"line":156},[84,15220,15221],{"class":477},"    string m_name;\n",[84,15223,15224,15226],{"class":86,"line":164},[84,15225,2314],{"class":473},[84,15227,15228],{"class":477}," m_id;\n",[84,15230,15231],{"class":86,"line":175},[84,15232,15233],{"class":328},"    \u002F\u002F赋值姓名\n",[84,15235,15236,15239,15242,15244,15247,15250],{"class":86,"line":185},[84,15237,15238],{"class":473},"    void",[84,15240,15241],{"class":90}," setName",[84,15243,478],{"class":477},[84,15245,15246],{"class":90},"string",[84,15248,15249],{"class":5545}," name",[84,15251,484],{"class":477},[84,15253,15254],{"class":86,"line":195},[84,15255,2359],{"class":477},[84,15257,15258,15261,15263],{"class":86,"line":206},[84,15259,15260],{"class":477},"        m_name",[84,15262,523],{"class":473},[84,15264,15265],{"class":477},"name;\n",[84,15267,15268],{"class":86,"line":217},[84,15269,2516],{"class":477},[84,15271,15272],{"class":86,"line":227},[84,15273,15274],{"class":328},"    \u002F\u002F赋值学号\n",[84,15276,15277,15279,15282,15284,15286,15289],{"class":86,"line":238},[84,15278,15238],{"class":473},[84,15280,15281],{"class":90}," setId",[84,15283,478],{"class":477},[84,15285,481],{"class":473},[84,15287,15288],{"class":5545}," id",[84,15290,484],{"class":477},[84,15292,15293],{"class":86,"line":249},[84,15294,2359],{"class":477},[84,15296,15297,15300,15302],{"class":86,"line":262},[84,15298,15299],{"class":477},"        m_id",[84,15301,523],{"class":473},[84,15303,15304],{"class":477},"id;\n",[84,15306,15307],{"class":86,"line":273},[84,15308,2516],{"class":477},[84,15310,15311],{"class":86,"line":283},[84,15312,15313],{"class":328},"    \u002F\u002F打印学生信息\n",[84,15315,15316,15318,15320],{"class":86,"line":294},[84,15317,15238],{"class":473},[84,15319,9944],{"class":90},[84,15321,2305],{"class":477},[84,15323,15324],{"class":86,"line":2028},[84,15325,2359],{"class":477},[84,15327,15328,15330,15332,15335,15337,15340,15342,15344,15346,15349,15351,15354,15356],{"class":86,"line":2057},[84,15329,3780],{"class":477},[84,15331,1517],{"class":473},[84,15333,15334],{"class":104},"\"姓名：\"",[84,15336,1517],{"class":473},[84,15338,15339],{"class":477},"m_name",[84,15341,1517],{"class":473},[84,15343,4688],{"class":104},[84,15345,1517],{"class":473},[84,15347,15348],{"class":104},"\"学号：\"",[84,15350,1517],{"class":473},[84,15352,15353],{"class":477},"m_id",[84,15355,1517],{"class":473},[84,15357,1539],{"class":477},[84,15359,15360],{"class":86,"line":2062},[84,15361,2516],{"class":477},[84,15363,15364],{"class":86,"line":2079},[84,15365,4324],{"class":477},[84,15367,15368,15370,15372],{"class":86,"line":2084},[84,15369,481],{"class":473},[84,15371,2302],{"class":90},[84,15373,2305],{"class":477},[84,15375,15376],{"class":86,"line":2089},[84,15377,1886],{"class":477},[84,15379,15380],{"class":86,"line":2094},[84,15381,15382],{"class":328},"    \u002F\u002F实例化\n",[84,15384,15385],{"class":86,"line":2108},[84,15386,15387],{"class":477},"    Student s1;\n",[84,15389,15390,15393,15396,15398,15400],{"class":86,"line":2113},[84,15391,15392],{"class":477},"    s1.",[84,15394,15395],{"class":90},"setName",[84,15397,478],{"class":477},[84,15399,8245],{"class":104},[84,15401,3048],{"class":477},[84,15403,15404,15406,15409,15411,15414],{"class":86,"line":2906},[84,15405,15392],{"class":477},[84,15407,15408],{"class":90},"setId",[84,15410,478],{"class":477},[84,15412,15413],{"class":94},"123456",[84,15415,3048],{"class":477},[84,15417,15418,15420,15423],{"class":86,"line":2920},[84,15419,15392],{"class":477},[84,15421,15422],{"class":90},"printInfo",[84,15424,5965],{"class":477},[84,15426,15427],{"class":86,"line":2928},[84,15428,1905],{"class":477},[35,15430,15431],{},"类中的属性和行为统称为成员",[35,15433,15434],{},"属性：成员属性(成员变量)",[35,15436,15437],{},"方法：成员函数(成员方法)",[35,15439,15440],{},[624,15441,15442],{},"封装意义二：",[35,15444,15445],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[35,15447,15448],{},"访问权限有三种：",[28,15450,15451,15454,15457],{},[31,15452,15453],{},"public        公共权限",[31,15455,15456],{},"protected 保护权限",[31,15458,15459],{},"private      私有权限",[35,15461,15462],{},[624,15463,15464],{},"示例：",[75,15466,15468],{"className":10270,"code":15467,"language":10272,"meta":66,"style":66},"\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",[81,15469,15470,15475,15480,15485,15490,15494,15501,15505,15510,15514,15519,15523,15528,15533,15538,15542,15547,15552,15559,15563,15567,15575,15579,15590,15602,15614,15618,15622,15626,15634,15638,15643,15655,15663,15671,15675,15685,15689,15697],{"__ignoreMap":66},[84,15471,15472],{"class":86,"line":87},[84,15473,15474],{"class":328},"\u002F\u002F三种权限\n",[84,15476,15477],{"class":86,"line":98},[84,15478,15479],{"class":328},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[84,15481,15482],{"class":86,"line":70},[84,15483,15484],{"class":328},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[84,15486,15487],{"class":86,"line":120},[84,15488,15489],{"class":328},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[84,15491,15492],{"class":86,"line":131},[84,15493,2729],{"emptyLinePlaceholder":403},[84,15495,15496,15498],{"class":86,"line":145},[84,15497,15023],{"class":473},[84,15499,15500],{"class":90}," Person\n",[84,15502,15503],{"class":86,"line":156},[84,15504,1886],{"class":477},[84,15506,15507],{"class":86,"line":164},[84,15508,15509],{"class":328},"    \u002F\u002F姓名  公共权限\n",[84,15511,15512],{"class":86,"line":175},[84,15513,15045],{"class":473},[84,15515,15516],{"class":86,"line":185},[84,15517,15518],{"class":477},"    string m_Name;\n",[84,15520,15521],{"class":86,"line":195},[84,15522,2729],{"emptyLinePlaceholder":403},[84,15524,15525],{"class":86,"line":206},[84,15526,15527],{"class":328},"    \u002F\u002F汽车  保护权限\n",[84,15529,15530],{"class":86,"line":217},[84,15531,15532],{"class":473},"protected:\n",[84,15534,15535],{"class":86,"line":227},[84,15536,15537],{"class":477},"    string m_Car;\n",[84,15539,15540],{"class":86,"line":238},[84,15541,2729],{"emptyLinePlaceholder":403},[84,15543,15544],{"class":86,"line":249},[84,15545,15546],{"class":328},"    \u002F\u002F银行卡密码  私有权限\n",[84,15548,15549],{"class":86,"line":262},[84,15550,15551],{"class":473},"private:\n",[84,15553,15554,15556],{"class":86,"line":273},[84,15555,2314],{"class":473},[84,15557,15558],{"class":477}," m_Password;\n",[84,15560,15561],{"class":86,"line":283},[84,15562,2729],{"emptyLinePlaceholder":403},[84,15564,15565],{"class":86,"line":294},[84,15566,15045],{"class":473},[84,15568,15569,15571,15573],{"class":86,"line":2028},[84,15570,15238],{"class":473},[84,15572,11714],{"class":90},[84,15574,2305],{"class":477},[84,15576,15577],{"class":86,"line":2057},[84,15578,2359],{"class":477},[84,15580,15581,15584,15586,15588],{"class":86,"line":2062},[84,15582,15583],{"class":477},"        m_Name ",[84,15585,523],{"class":473},[84,15587,9267],{"class":104},[84,15589,1634],{"class":477},[84,15591,15592,15595,15597,15600],{"class":86,"line":2079},[84,15593,15594],{"class":477},"        m_Car ",[84,15596,523],{"class":473},[84,15598,15599],{"class":104}," \"拖拉机\"",[84,15601,1634],{"class":477},[84,15603,15604,15607,15609,15612],{"class":86,"line":2084},[84,15605,15606],{"class":477},"        m_Password ",[84,15608,523],{"class":473},[84,15610,15611],{"class":94}," 123456",[84,15613,1634],{"class":477},[84,15615,15616],{"class":86,"line":2089},[84,15617,2516],{"class":477},[84,15619,15620],{"class":86,"line":2094},[84,15621,4324],{"class":477},[84,15623,15624],{"class":86,"line":2108},[84,15625,2729],{"emptyLinePlaceholder":403},[84,15627,15628,15630,15632],{"class":86,"line":2113},[84,15629,481],{"class":473},[84,15631,2302],{"class":90},[84,15633,11182],{"class":477},[84,15635,15636],{"class":86,"line":2906},[84,15637,2729],{"emptyLinePlaceholder":403},[84,15639,15640],{"class":86,"line":2920},[84,15641,15642],{"class":477},"    Person p;\n",[84,15644,15645,15648,15650,15653],{"class":86,"line":2928},[84,15646,15647],{"class":477},"    p.m_Name ",[84,15649,523],{"class":473},[84,15651,15652],{"class":104}," \"李四\"",[84,15654,1634],{"class":477},[84,15656,15657,15660],{"class":86,"line":2933},[84,15658,15659],{"class":328},"    \u002F\u002Fp.m_Car = \"奔驰\";",[84,15661,15662],{"class":328},"  \u002F\u002F保护权限类外访问不到\n",[84,15664,15665,15668],{"class":86,"line":2939},[84,15666,15667],{"class":328},"    \u002F\u002Fp.m_Password = 123;",[84,15669,15670],{"class":328}," \u002F\u002F私有权限类外访问不到\n",[84,15672,15673],{"class":86,"line":2945},[84,15674,2729],{"emptyLinePlaceholder":403},[84,15676,15677,15679,15681,15683],{"class":86,"line":2950},[84,15678,2632],{"class":90},[84,15680,478],{"class":477},[84,15682,2637],{"class":104},[84,15684,3048],{"class":477},[84,15686,15687],{"class":86,"line":8277},[84,15688,2729],{"emptyLinePlaceholder":403},[84,15690,15691,15693,15695],{"class":86,"line":8301},[84,15692,4419],{"class":473},[84,15694,4422],{"class":94},[84,15696,1634],{"class":477},[84,15698,15699],{"class":86,"line":8306},[84,15700,1905],{"class":477},[23,15702,15704],{"id":15703},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[35,15706,15707,15708,15711,15712],{},"在C++中 struct和class唯一的",[624,15709,15710],{},"区别","就在于 ",[624,15713,15714],{},"默认的访问权限不同",[35,15716,15717],{},"区别：",[1480,15719,15720,15723],{},[31,15721,15722],{},"struct 默认权限为公共",[31,15724,15725],{},"class   默认权限为私有",[75,15727,15729],{"className":10270,"code":15728,"language":10272,"meta":66,"style":66},"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",[81,15730,15731,15738,15742,15752,15756,15760,15767,15771,15781,15785,15789,15797,15801,15806,15820,15824,15829,15843,15847,15857,15861,15869],{"__ignoreMap":66},[84,15732,15733,15735],{"class":86,"line":87},[84,15734,15023],{"class":473},[84,15736,15737],{"class":90}," C1\n",[84,15739,15740],{"class":86,"line":98},[84,15741,1886],{"class":477},[84,15743,15744,15746,15749],{"class":86,"line":70},[84,15745,2314],{"class":473},[84,15747,15748],{"class":477},"  m_A;",[84,15750,15751],{"class":328}," \u002F\u002F默认是私有权限\n",[84,15753,15754],{"class":86,"line":120},[84,15755,4324],{"class":477},[84,15757,15758],{"class":86,"line":131},[84,15759,2729],{"emptyLinePlaceholder":403},[84,15761,15762,15764],{"class":86,"line":145},[84,15763,8088],{"class":473},[84,15765,15766],{"class":90}," C2\n",[84,15768,15769],{"class":86,"line":156},[84,15770,1886],{"class":477},[84,15772,15773,15775,15778],{"class":86,"line":164},[84,15774,2314],{"class":473},[84,15776,15777],{"class":477}," m_A;",[84,15779,15780],{"class":328},"  \u002F\u002F默认是公共权限\n",[84,15782,15783],{"class":86,"line":175},[84,15784,4324],{"class":477},[84,15786,15787],{"class":86,"line":185},[84,15788,2729],{"emptyLinePlaceholder":403},[84,15790,15791,15793,15795],{"class":86,"line":195},[84,15792,481],{"class":473},[84,15794,2302],{"class":90},[84,15796,11182],{"class":477},[84,15798,15799],{"class":86,"line":206},[84,15800,2729],{"emptyLinePlaceholder":403},[84,15802,15803],{"class":86,"line":217},[84,15804,15805],{"class":477},"    C1 c1;\n",[84,15807,15808,15811,15813,15815,15817],{"class":86,"line":227},[84,15809,15810],{"class":477},"    c1.m_A ",[84,15812,523],{"class":473},[84,15814,2367],{"class":94},[84,15816,532],{"class":477},[84,15818,15819],{"class":328}," \u002F\u002F错误，访问权限是私有\n",[84,15821,15822],{"class":86,"line":238},[84,15823,2729],{"emptyLinePlaceholder":403},[84,15825,15826],{"class":86,"line":249},[84,15827,15828],{"class":477},"    C2 c2;\n",[84,15830,15831,15834,15836,15838,15840],{"class":86,"line":262},[84,15832,15833],{"class":477},"    c2.m_A ",[84,15835,523],{"class":473},[84,15837,2367],{"class":94},[84,15839,532],{"class":477},[84,15841,15842],{"class":328}," \u002F\u002F正确，访问权限是公共\n",[84,15844,15845],{"class":86,"line":273},[84,15846,2729],{"emptyLinePlaceholder":403},[84,15848,15849,15851,15853,15855],{"class":86,"line":283},[84,15850,2632],{"class":90},[84,15852,478],{"class":477},[84,15854,2637],{"class":104},[84,15856,3048],{"class":477},[84,15858,15859],{"class":86,"line":294},[84,15860,2729],{"emptyLinePlaceholder":403},[84,15862,15863,15865,15867],{"class":86,"line":2028},[84,15864,4419],{"class":473},[84,15866,4422],{"class":94},[84,15868,1634],{"class":477},[84,15870,15871],{"class":86,"line":2057},[84,15872,1905],{"class":477},[23,15874,15876],{"id":15875},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[35,15878,15879],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[35,15881,15882],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[35,15884,15885],{},[624,15886,15464],{},[75,15888,15890],{"className":10270,"code":15889,"language":10272,"meta":66,"style":66},"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",[81,15891,15892,15902,15906,15910,15915,15929,15938,15942,15952,15956,15963,15967,15971,15975,15980,15989,15996,16000,16005,16021,16044,16057,16064,16068,16077,16081,16085,16090,16106,16116,16120,16124,16128,16136,16140,16150,16154,16162,16166,16170,16178,16182,16186,16191,16204,16227,16231,16236,16249,16271,16275,16280,16294,16302,16306,16316,16320,16328],{"__ignoreMap":66},[84,15893,15894,15896,15899],{"class":86,"line":87},[84,15895,15023],{"class":473},[84,15897,15898],{"class":90}," Person",[84,15900,15901],{"class":477}," {\n",[84,15903,15904],{"class":86,"line":98},[84,15905,15045],{"class":473},[84,15907,15908],{"class":86,"line":70},[84,15909,2729],{"emptyLinePlaceholder":403},[84,15911,15912],{"class":86,"line":120},[84,15913,15914],{"class":328},"    \u002F\u002F姓名设置可读可写\n",[84,15916,15917,15919,15921,15923,15925,15927],{"class":86,"line":131},[84,15918,15238],{"class":473},[84,15920,15241],{"class":90},[84,15922,478],{"class":477},[84,15924,15246],{"class":90},[84,15926,15249],{"class":5545},[84,15928,12771],{"class":477},[84,15930,15931,15933,15935],{"class":86,"line":145},[84,15932,15583],{"class":477},[84,15934,523],{"class":473},[84,15936,15937],{"class":477}," name;\n",[84,15939,15940],{"class":86,"line":156},[84,15941,2516],{"class":477},[84,15943,15944,15947,15950],{"class":86,"line":164},[84,15945,15946],{"class":90},"    string",[84,15948,15949],{"class":90}," getName",[84,15951,2305],{"class":477},[84,15953,15954],{"class":86,"line":175},[84,15955,2359],{"class":477},[84,15957,15958,15960],{"class":86,"line":185},[84,15959,15081],{"class":473},[84,15961,15962],{"class":477}," m_Name;\n",[84,15964,15965],{"class":86,"line":195},[84,15966,2516],{"class":477},[84,15968,15969],{"class":86,"line":206},[84,15970,2729],{"emptyLinePlaceholder":403},[84,15972,15973],{"class":86,"line":217},[84,15974,2729],{"emptyLinePlaceholder":403},[84,15976,15977],{"class":86,"line":227},[84,15978,15979],{"class":328},"    \u002F\u002F获取年龄 \n",[84,15981,15982,15984,15987],{"class":86,"line":238},[84,15983,2314],{"class":473},[84,15985,15986],{"class":90}," getAge",[84,15988,11182],{"class":477},[84,15990,15991,15993],{"class":86,"line":249},[84,15992,15081],{"class":473},[84,15994,15995],{"class":477}," m_Age;\n",[84,15997,15998],{"class":86,"line":262},[84,15999,2516],{"class":477},[84,16001,16002],{"class":86,"line":273},[84,16003,16004],{"class":328},"    \u002F\u002F设置年龄\n",[84,16006,16007,16009,16012,16014,16016,16019],{"class":86,"line":283},[84,16008,15238],{"class":473},[84,16010,16011],{"class":90}," setAge",[84,16013,478],{"class":477},[84,16015,481],{"class":473},[84,16017,16018],{"class":5545}," age",[84,16020,12771],{"class":477},[84,16022,16023,16025,16028,16030,16032,16034,16037,16039,16042],{"class":86,"line":294},[84,16024,2826],{"class":473},[84,16026,16027],{"class":477}," (age ",[84,16029,1383],{"class":473},[84,16031,4422],{"class":94},[84,16033,3584],{"class":473},[84,16035,16036],{"class":477}," age ",[84,16038,1433],{"class":473},[84,16040,16041],{"class":94}," 150",[84,16043,12771],{"class":477},[84,16045,16046,16048,16050,16053,16055],{"class":86,"line":2028},[84,16047,10048],{"class":477},[84,16049,1517],{"class":473},[84,16051,16052],{"class":104}," \"你个老妖精!\"",[84,16054,1785],{"class":473},[84,16056,9169],{"class":477},[84,16058,16059,16062],{"class":86,"line":2057},[84,16060,16061],{"class":473},"            return",[84,16063,1634],{"class":477},[84,16065,16066],{"class":86,"line":2062},[84,16067,2858],{"class":477},[84,16069,16070,16073,16075],{"class":86,"line":2079},[84,16071,16072],{"class":477},"        m_Age ",[84,16074,523],{"class":473},[84,16076,8126],{"class":477},[84,16078,16079],{"class":86,"line":2084},[84,16080,2516],{"class":477},[84,16082,16083],{"class":86,"line":2089},[84,16084,2729],{"emptyLinePlaceholder":403},[84,16086,16087],{"class":86,"line":2094},[84,16088,16089],{"class":328},"    \u002F\u002F情人设置为只写\n",[84,16091,16092,16094,16097,16099,16101,16104],{"class":86,"line":2108},[84,16093,15238],{"class":473},[84,16095,16096],{"class":90}," setLover",[84,16098,478],{"class":477},[84,16100,15246],{"class":90},[84,16102,16103],{"class":5545}," lover",[84,16105,12771],{"class":477},[84,16107,16108,16111,16113],{"class":86,"line":2113},[84,16109,16110],{"class":477},"        m_Lover ",[84,16112,523],{"class":473},[84,16114,16115],{"class":477}," lover;\n",[84,16117,16118],{"class":86,"line":2906},[84,16119,2516],{"class":477},[84,16121,16122],{"class":86,"line":2920},[84,16123,2729],{"emptyLinePlaceholder":403},[84,16125,16126],{"class":86,"line":2928},[84,16127,15551],{"class":473},[84,16129,16130,16133],{"class":86,"line":2933},[84,16131,16132],{"class":477},"    string m_Name;",[84,16134,16135],{"class":328}," \u002F\u002F可读可写  姓名\n",[84,16137,16138],{"class":86,"line":2939},[84,16139,13539],{"class":477},[84,16141,16142,16144,16147],{"class":86,"line":2945},[84,16143,2314],{"class":473},[84,16145,16146],{"class":477}," m_Age;",[84,16148,16149],{"class":328}," \u002F\u002F只读  年龄\n",[84,16151,16152],{"class":86,"line":2950},[84,16153,2729],{"emptyLinePlaceholder":403},[84,16155,16156,16159],{"class":86,"line":8277},[84,16157,16158],{"class":477},"    string m_Lover;",[84,16160,16161],{"class":328}," \u002F\u002F只写  情人\n",[84,16163,16164],{"class":86,"line":8301},[84,16165,4324],{"class":477},[84,16167,16168],{"class":86,"line":8306},[84,16169,2729],{"emptyLinePlaceholder":403},[84,16171,16172,16174,16176],{"class":86,"line":8312},[84,16173,481],{"class":473},[84,16175,2302],{"class":90},[84,16177,11182],{"class":477},[84,16179,16180],{"class":86,"line":8339},[84,16181,2729],{"emptyLinePlaceholder":403},[84,16183,16184],{"class":86,"line":8344},[84,16185,15642],{"class":477},[84,16187,16188],{"class":86,"line":8350},[84,16189,16190],{"class":328},"    \u002F\u002F姓名设置\n",[84,16192,16193,16196,16198,16200,16202],{"class":86,"line":8362},[84,16194,16195],{"class":477},"    p.",[84,16197,15395],{"class":90},[84,16199,478],{"class":477},[84,16201,8245],{"class":104},[84,16203,3048],{"class":477},[84,16205,16206,16208,16210,16213,16215,16218,16221,16223,16225],{"class":86,"line":8374},[84,16207,6858],{"class":477},[84,16209,1517],{"class":473},[84,16211,16212],{"class":104}," \"姓名： \"",[84,16214,1785],{"class":473},[84,16216,16217],{"class":477}," p.",[84,16219,16220],{"class":90},"getName",[84,16222,13379],{"class":477},[84,16224,1517],{"class":473},[84,16226,9169],{"class":477},[84,16228,16229],{"class":86,"line":8386},[84,16230,2729],{"emptyLinePlaceholder":403},[84,16232,16233],{"class":86,"line":10045},[84,16234,16235],{"class":328},"    \u002F\u002F年龄设置\n",[84,16237,16238,16240,16243,16245,16247],{"class":86,"line":10070},[84,16239,16195],{"class":477},[84,16241,16242],{"class":90},"setAge",[84,16244,478],{"class":477},[84,16246,1129],{"class":94},[84,16248,3048],{"class":477},[84,16250,16251,16253,16255,16258,16260,16262,16265,16267,16269],{"class":86,"line":10093},[84,16252,6858],{"class":477},[84,16254,1517],{"class":473},[84,16256,16257],{"class":104}," \"年龄： \"",[84,16259,1785],{"class":473},[84,16261,16217],{"class":477},[84,16263,16264],{"class":90},"getAge",[84,16266,13379],{"class":477},[84,16268,1517],{"class":473},[84,16270,9169],{"class":477},[84,16272,16273],{"class":86,"line":10117},[84,16274,2729],{"emptyLinePlaceholder":403},[84,16276,16277],{"class":86,"line":10122},[84,16278,16279],{"class":328},"    \u002F\u002F情人设置\n",[84,16281,16282,16284,16287,16289,16292],{"class":86,"line":10127},[84,16283,16195],{"class":477},[84,16285,16286],{"class":90},"setLover",[84,16288,478],{"class":477},[84,16290,16291],{"class":104},"\"苍井\"",[84,16293,3048],{"class":477},[84,16295,16296,16299],{"class":86,"line":10132},[84,16297,16298],{"class":328},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[84,16300,16301],{"class":328},"  \u002F\u002F只写属性，不可以读取\n",[84,16303,16304],{"class":86,"line":10141},[84,16305,2729],{"emptyLinePlaceholder":403},[84,16307,16308,16310,16312,16314],{"class":86,"line":10146},[84,16309,2632],{"class":90},[84,16311,478],{"class":477},[84,16313,2637],{"class":104},[84,16315,3048],{"class":477},[84,16317,16318],{"class":86,"line":10152},[84,16319,2729],{"emptyLinePlaceholder":403},[84,16321,16322,16324,16326],{"class":86,"line":10173},[84,16323,4419],{"class":473},[84,16325,4422],{"class":94},[84,16327,1634],{"class":477},[84,16329,16330],{"class":86,"line":10179},[84,16331,1905],{"class":477},[23,16333,16335],{"id":16334},"_814封装案例","8.1.4封装案例",[28,16337,16338],{},[31,16339,16340,16343],{},[624,16341,16342],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1480,16345,16346,16349],{},[31,16347,16348],{},"求出立方体的面积和体积",[31,16350,16351],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[75,16353,16355],{"className":464,"code":16354,"language":466,"meta":66,"style":66},"#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",[81,16356,16357,16363,16373,16380,16384,16388,16393,16423,16427,16437,16447,16457,16461,16470,16474,16510,16514,16523,16527,16543,16547,16552,16561,16565,16572,16576,16585,16589,16596,16600,16609,16613,16620,16624,16629,16646,16650,16696,16700,16709,16713,16717,16721,16730,16734,16738,16743,16747,16753,16759,16765,16769,16773,16778,16800,16804,16858,16862,16870,16874,16879,16884,16897,16904,16920,16931,16937,16960,16966,16989,17003,17023,17029,17040,17063,17085,17090,17096,17110,17123,17128,17142,17147,17153,17158,17172,17177,17182,17196,17208,17213,17226,17231,17236,17241,17254,17259],{"__ignoreMap":66},[84,16358,16359,16361],{"class":86,"line":87},[84,16360,2279],{"class":473},[84,16362,2282],{"class":104},[84,16364,16365,16367,16369,16371],{"class":86,"line":98},[84,16366,2287],{"class":473},[84,16368,2290],{"class":473},[84,16370,2293],{"class":90},[84,16372,1634],{"class":477},[84,16374,16375,16377],{"class":86,"line":70},[84,16376,15023],{"class":473},[84,16378,16379],{"class":90}," Cube\n",[84,16381,16382],{"class":86,"line":120},[84,16383,1886],{"class":477},[84,16385,16386],{"class":86,"line":131},[84,16387,15045],{"class":473},[84,16389,16390],{"class":86,"line":145},[84,16391,16392],{"class":328},"    \u002F\u002F输入长宽高\n",[84,16394,16395,16397,16400,16402,16404,16407,16409,16411,16414,16416,16418,16421],{"class":86,"line":156},[84,16396,15238],{"class":473},[84,16398,16399],{"class":90}," setLwh",[84,16401,478],{"class":477},[84,16403,481],{"class":473},[84,16405,16406],{"class":5545}," l",[84,16408,851],{"class":477},[84,16410,481],{"class":473},[84,16412,16413],{"class":5545}," w",[84,16415,851],{"class":477},[84,16417,481],{"class":473},[84,16419,16420],{"class":5545}," h",[84,16422,484],{"class":477},[84,16424,16425],{"class":86,"line":164},[84,16426,2359],{"class":477},[84,16428,16429,16432,16434],{"class":86,"line":175},[84,16430,16431],{"class":477},"        m_L",[84,16433,523],{"class":473},[84,16435,16436],{"class":477},"l;\n",[84,16438,16439,16442,16444],{"class":86,"line":185},[84,16440,16441],{"class":477},"        m_W",[84,16443,523],{"class":473},[84,16445,16446],{"class":477},"w;\n",[84,16448,16449,16452,16454],{"class":86,"line":195},[84,16450,16451],{"class":477},"        m_H",[84,16453,523],{"class":473},[84,16455,16456],{"class":477},"h;\n",[84,16458,16459],{"class":86,"line":206},[84,16460,2516],{"class":477},[84,16462,16463,16465,16468],{"class":86,"line":217},[84,16464,2314],{"class":473},[84,16466,16467],{"class":90}," mianji",[84,16469,2305],{"class":477},[84,16471,16472],{"class":86,"line":227},[84,16473,2359],{"class":477},[84,16475,16476,16478,16480,16482,16485,16487,16490,16492,16495,16497,16500,16502,16505,16507],{"class":86,"line":238},[84,16477,15081],{"class":473},[84,16479,15084],{"class":94},[84,16481,928],{"class":473},[84,16483,16484],{"class":477},"(m_L",[84,16486,928],{"class":473},[84,16488,16489],{"class":477},"m_W ",[84,16491,954],{"class":473},[84,16493,16494],{"class":477}," m_L",[84,16496,928],{"class":473},[84,16498,16499],{"class":477},"m_H ",[84,16501,954],{"class":473},[84,16503,16504],{"class":477}," m_W",[84,16506,928],{"class":473},[84,16508,16509],{"class":477},"m_H);\n",[84,16511,16512],{"class":86,"line":249},[84,16513,2516],{"class":477},[84,16515,16516,16518,16521],{"class":86,"line":262},[84,16517,2314],{"class":473},[84,16519,16520],{"class":90}," tiji",[84,16522,2305],{"class":477},[84,16524,16525],{"class":86,"line":273},[84,16526,2359],{"class":477},[84,16528,16529,16531,16533,16535,16538,16540],{"class":86,"line":283},[84,16530,15081],{"class":473},[84,16532,16494],{"class":477},[84,16534,928],{"class":473},[84,16536,16537],{"class":477},"m_W",[84,16539,928],{"class":473},[84,16541,16542],{"class":477},"m_H;\n",[84,16544,16545],{"class":86,"line":294},[84,16546,2516],{"class":477},[84,16548,16549],{"class":86,"line":2028},[84,16550,16551],{"class":328},"    \u002F\u002F获取长宽高\n",[84,16553,16554,16556,16559],{"class":86,"line":2057},[84,16555,2314],{"class":473},[84,16557,16558],{"class":90}," getLength",[84,16560,2305],{"class":477},[84,16562,16563],{"class":86,"line":2062},[84,16564,2359],{"class":477},[84,16566,16567,16569],{"class":86,"line":2079},[84,16568,15081],{"class":473},[84,16570,16571],{"class":477}," m_L;\n",[84,16573,16574],{"class":86,"line":2084},[84,16575,2516],{"class":477},[84,16577,16578,16580,16583],{"class":86,"line":2089},[84,16579,2314],{"class":473},[84,16581,16582],{"class":90}," getWidth",[84,16584,2305],{"class":477},[84,16586,16587],{"class":86,"line":2094},[84,16588,2359],{"class":477},[84,16590,16591,16593],{"class":86,"line":2108},[84,16592,15081],{"class":473},[84,16594,16595],{"class":477}," m_W;\n",[84,16597,16598],{"class":86,"line":2113},[84,16599,2516],{"class":477},[84,16601,16602,16604,16607],{"class":86,"line":2906},[84,16603,2314],{"class":473},[84,16605,16606],{"class":90}," getHeight",[84,16608,2305],{"class":477},[84,16610,16611],{"class":86,"line":2920},[84,16612,2359],{"class":477},[84,16614,16615,16617],{"class":86,"line":2928},[84,16616,15081],{"class":473},[84,16618,16619],{"class":477}," m_H;\n",[84,16621,16622],{"class":86,"line":2933},[84,16623,2516],{"class":477},[84,16625,16626],{"class":86,"line":2939},[84,16627,16628],{"class":328},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[84,16630,16631,16634,16637,16639,16642,16644],{"class":86,"line":2945},[84,16632,16633],{"class":473},"    bool",[84,16635,16636],{"class":90}," isEqual",[84,16638,478],{"class":477},[84,16640,16641],{"class":90},"Cube",[84,16643,3178],{"class":5545},[84,16645,484],{"class":477},[84,16647,16648],{"class":86,"line":2950},[84,16649,2359],{"class":477},[84,16651,16652,16654,16657,16660,16662,16664,16667,16669,16672,16675,16677,16679,16682,16684,16686,16689,16691,16693],{"class":86,"line":8277},[84,16653,2826],{"class":473},[84,16655,16656],{"class":477}," (c.",[84,16658,16659],{"class":90},"getLength",[84,16661,13379],{"class":477},[84,16663,3278],{"class":473},[84,16665,16666],{"class":477}," m_L ",[84,16668,2045],{"class":473},[84,16670,16671],{"class":477}," c.",[84,16673,16674],{"class":90},"getWidth",[84,16676,13379],{"class":477},[84,16678,3278],{"class":473},[84,16680,16681],{"class":477}," m_W ",[84,16683,2045],{"class":473},[84,16685,16671],{"class":477},[84,16687,16688],{"class":90},"getHeight",[84,16690,13379],{"class":477},[84,16692,3278],{"class":473},[84,16694,16695],{"class":477}," m_H)\n",[84,16697,16698],{"class":86,"line":8301},[84,16699,2839],{"class":477},[84,16701,16702,16704,16707],{"class":86,"line":8306},[84,16703,16061],{"class":473},[84,16705,16706],{"class":94}," true",[84,16708,1634],{"class":477},[84,16710,16711],{"class":86,"line":8312},[84,16712,2858],{"class":477},[84,16714,16715],{"class":86,"line":8339},[84,16716,2899],{"class":473},[84,16718,16719],{"class":86,"line":8344},[84,16720,2839],{"class":477},[84,16722,16723,16725,16728],{"class":86,"line":8350},[84,16724,16061],{"class":473},[84,16726,16727],{"class":94}," false",[84,16729,1634],{"class":477},[84,16731,16732],{"class":86,"line":8362},[84,16733,2858],{"class":477},[84,16735,16736],{"class":86,"line":8374},[84,16737,2516],{"class":477},[84,16739,16740],{"class":86,"line":8386},[84,16741,16742],{"class":328},"    \u002F\u002F私有属性\n",[84,16744,16745],{"class":86,"line":10045},[84,16746,15551],{"class":473},[84,16748,16749,16751],{"class":86,"line":10070},[84,16750,2314],{"class":473},[84,16752,16571],{"class":477},[84,16754,16755,16757],{"class":86,"line":10093},[84,16756,2314],{"class":473},[84,16758,16595],{"class":477},[84,16760,16761,16763],{"class":86,"line":10117},[84,16762,2314],{"class":473},[84,16764,16619],{"class":477},[84,16766,16767],{"class":86,"line":10122},[84,16768,2729],{"emptyLinePlaceholder":403},[84,16770,16771],{"class":86,"line":10127},[84,16772,4324],{"class":477},[84,16774,16775],{"class":86,"line":10132},[84,16776,16777],{"class":328},"\u002F\u002F全局函数判断两个立方体是否相等\n",[84,16779,16780,16782,16784,16786,16788,16791,16793,16795,16798],{"class":86,"line":10141},[84,16781,1695],{"class":473},[84,16783,16636],{"class":90},[84,16785,478],{"class":477},[84,16787,16641],{"class":90},[84,16789,16790],{"class":5545}," c1",[84,16792,851],{"class":477},[84,16794,16641],{"class":90},[84,16796,16797],{"class":5545}," c2",[84,16799,484],{"class":477},[84,16801,16802],{"class":86,"line":10146},[84,16803,1886],{"class":477},[84,16805,16806,16808,16811,16813,16815,16817,16820,16822,16825,16827,16829,16831,16833,16835,16837,16839,16841,16843,16845,16847,16849,16851,16853,16855],{"class":86,"line":10152},[84,16807,4419],{"class":473},[84,16809,16810],{"class":477}," (c1.",[84,16812,16659],{"class":90},[84,16814,13379],{"class":477},[84,16816,3278],{"class":473},[84,16818,16819],{"class":477}," c2.",[84,16821,16659],{"class":90},[84,16823,16824],{"class":477},"()) ",[84,16826,2045],{"class":473},[84,16828,16810],{"class":477},[84,16830,16674],{"class":90},[84,16832,13379],{"class":477},[84,16834,3278],{"class":473},[84,16836,16819],{"class":477},[84,16838,16674],{"class":90},[84,16840,16824],{"class":477},[84,16842,2045],{"class":473},[84,16844,16810],{"class":477},[84,16846,16688],{"class":90},[84,16848,13379],{"class":477},[84,16850,3278],{"class":473},[84,16852,16819],{"class":477},[84,16854,16688],{"class":90},[84,16856,16857],{"class":477},"());\n",[84,16859,16860],{"class":86,"line":10173},[84,16861,1905],{"class":477},[84,16863,16864,16866,16868],{"class":86,"line":10179},[84,16865,481],{"class":473},[84,16867,2302],{"class":90},[84,16869,2305],{"class":477},[84,16871,16872],{"class":86,"line":10193},[84,16873,1886],{"class":477},[84,16875,16876],{"class":86,"line":10199},[84,16877,16878],{"class":477},"    Cube c1;\n",[84,16880,16881],{"class":86,"line":10226},[84,16882,16883],{"class":328},"    \u002F\u002F输入立方体的长宽高\n",[84,16885,16886,16888,16890,16893,16895],{"class":86,"line":10235},[84,16887,1891],{"class":477},[84,16889,1517],{"class":473},[84,16891,16892],{"class":104},"\"请输入第一个立方体的长、宽、高：\"",[84,16894,1517],{"class":473},[84,16896,1539],{"class":477},[84,16898,16899,16901],{"class":86,"line":10241},[84,16900,2314],{"class":473},[84,16902,16903],{"class":477}," l,w,h,l1,w1,h1;\n",[84,16905,16906,16908,16910,16912,16914,16916,16918],{"class":86,"line":10249},[84,16907,2341],{"class":477},[84,16909,1770],{"class":473},[84,16911,991],{"class":477},[84,16913,1770],{"class":473},[84,16915,1268],{"class":477},[84,16917,1770],{"class":473},[84,16919,16456],{"class":477},[84,16921,16922,16925,16928],{"class":86,"line":10254},[84,16923,16924],{"class":477},"    c1.",[84,16926,16927],{"class":90},"setLwh",[84,16929,16930],{"class":477},"(l,w,h);\n",[84,16932,16934],{"class":86,"line":16933},66,[84,16935,16936],{"class":328},"    \u002F\u002F面积\n",[84,16938,16940,16942,16944,16947,16949,16951,16954,16956,16958],{"class":86,"line":16939},67,[84,16941,1891],{"class":477},[84,16943,1517],{"class":473},[84,16945,16946],{"class":104},"\"立方体的表面积为：\"",[84,16948,1517],{"class":473},[84,16950,15159],{"class":477},[84,16952,16953],{"class":90},"mianji",[84,16955,2756],{"class":477},[84,16957,1517],{"class":473},[84,16959,1539],{"class":477},[84,16961,16963],{"class":86,"line":16962},68,[84,16964,16965],{"class":328},"    \u002F\u002F体积\n",[84,16967,16969,16971,16973,16976,16978,16980,16983,16985,16987],{"class":86,"line":16968},69,[84,16970,1891],{"class":477},[84,16972,1517],{"class":473},[84,16974,16975],{"class":104},"\"立方体的体积为：\"",[84,16977,1517],{"class":473},[84,16979,15159],{"class":477},[84,16981,16982],{"class":90},"tiji",[84,16984,2756],{"class":477},[84,16986,1517],{"class":473},[84,16988,1539],{"class":477},[84,16990,16992,16994,16996,16999,17001],{"class":86,"line":16991},70,[84,16993,1891],{"class":477},[84,16995,1517],{"class":473},[84,16997,16998],{"class":104},"\"请输入第二个立方体的长、宽、高：\"",[84,17000,1517],{"class":473},[84,17002,1539],{"class":477},[84,17004,17006,17008,17010,17013,17015,17018,17020],{"class":86,"line":17005},71,[84,17007,2341],{"class":477},[84,17009,1770],{"class":473},[84,17011,17012],{"class":477},"l1",[84,17014,1770],{"class":473},[84,17016,17017],{"class":477},"w1",[84,17019,1770],{"class":473},[84,17021,17022],{"class":477},"h1;\n",[84,17024,17026],{"class":86,"line":17025},72,[84,17027,17028],{"class":477},"    Cube c2;\n",[84,17030,17032,17035,17037],{"class":86,"line":17031},73,[84,17033,17034],{"class":477},"    c2.",[84,17036,16927],{"class":90},[84,17038,17039],{"class":477},"(l1,w1,h1);\n",[84,17041,17043,17045,17047,17050,17052,17055,17057,17059,17061],{"class":86,"line":17042},74,[84,17044,1891],{"class":477},[84,17046,1517],{"class":473},[84,17048,17049],{"class":104},"\"第二个立方体的表面积为：\"",[84,17051,1517],{"class":473},[84,17053,17054],{"class":477},"c2.",[84,17056,16953],{"class":90},[84,17058,2756],{"class":477},[84,17060,1517],{"class":473},[84,17062,1539],{"class":477},[84,17064,17066,17068,17070,17073,17075,17077,17079,17081,17083],{"class":86,"line":17065},75,[84,17067,1891],{"class":477},[84,17069,1517],{"class":473},[84,17071,17072],{"class":104},"\"第二个立方体的体积为：\"",[84,17074,1517],{"class":473},[84,17076,17054],{"class":477},[84,17078,16982],{"class":90},[84,17080,2756],{"class":477},[84,17082,1517],{"class":473},[84,17084,1539],{"class":477},[84,17086,17088],{"class":86,"line":17087},76,[84,17089,2729],{"emptyLinePlaceholder":403},[84,17091,17093],{"class":86,"line":17092},77,[84,17094,17095],{"class":328},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[84,17097,17099,17101,17103,17106,17108],{"class":86,"line":17098},78,[84,17100,1891],{"class":477},[84,17102,1517],{"class":473},[84,17104,17105],{"class":104},"\"内部函数判断结果：\"",[84,17107,1517],{"class":473},[84,17109,1539],{"class":477},[84,17111,17113,17115,17117,17120],{"class":86,"line":17112},79,[84,17114,3430],{"class":473},[84,17116,16810],{"class":477},[84,17118,17119],{"class":90},"isEqual",[84,17121,17122],{"class":477},"(c2))\n",[84,17124,17126],{"class":86,"line":17125},80,[84,17127,2359],{"class":477},[84,17129,17131,17133,17135,17138,17140],{"class":86,"line":17130},81,[84,17132,3780],{"class":477},[84,17134,1517],{"class":473},[84,17136,17137],{"class":104},"\"两个立方体相等\"",[84,17139,1517],{"class":473},[84,17141,1539],{"class":477},[84,17143,17145],{"class":86,"line":17144},82,[84,17146,2516],{"class":477},[84,17148,17150],{"class":86,"line":17149},83,[84,17151,17152],{"class":473},"    else\n",[84,17154,17156],{"class":86,"line":17155},84,[84,17157,2359],{"class":477},[84,17159,17161,17163,17165,17168,17170],{"class":86,"line":17160},85,[84,17162,3780],{"class":477},[84,17164,1517],{"class":473},[84,17166,17167],{"class":104},"\"两个立方体不相等\"",[84,17169,1517],{"class":473},[84,17171,1539],{"class":477},[84,17173,17175],{"class":86,"line":17174},86,[84,17176,2516],{"class":477},[84,17178,17180],{"class":86,"line":17179},87,[84,17181,2729],{"emptyLinePlaceholder":403},[84,17183,17185,17187,17189,17192,17194],{"class":86,"line":17184},88,[84,17186,1891],{"class":477},[84,17188,1517],{"class":473},[84,17190,17191],{"class":104},"\"全局函数判断结果：\"",[84,17193,1517],{"class":473},[84,17195,1539],{"class":477},[84,17197,17199,17201,17203,17205],{"class":86,"line":17198},89,[84,17200,3430],{"class":473},[84,17202,1991],{"class":477},[84,17204,17119],{"class":90},[84,17206,17207],{"class":477},"(c1, c2))\n",[84,17209,17211],{"class":86,"line":17210},90,[84,17212,2359],{"class":477},[84,17214,17216,17218,17220,17222,17224],{"class":86,"line":17215},91,[84,17217,3780],{"class":477},[84,17219,1517],{"class":473},[84,17221,17137],{"class":104},[84,17223,1517],{"class":473},[84,17225,1539],{"class":477},[84,17227,17229],{"class":86,"line":17228},92,[84,17230,2516],{"class":477},[84,17232,17234],{"class":86,"line":17233},93,[84,17235,17152],{"class":473},[84,17237,17239],{"class":86,"line":17238},94,[84,17240,2359],{"class":477},[84,17242,17244,17246,17248,17250,17252],{"class":86,"line":17243},95,[84,17245,3780],{"class":477},[84,17247,1517],{"class":473},[84,17249,17167],{"class":104},[84,17251,1517],{"class":473},[84,17253,1539],{"class":477},[84,17255,17257],{"class":86,"line":17256},96,[84,17258,2516],{"class":477},[84,17260,17262],{"class":86,"line":17261},97,[84,17263,1905],{"class":477},[28,17265,17266],{"start":98},[31,17267,17268],{},[624,17269,17270],{},"练习案例2：点和圆的关系",[1480,17272,17273],{},[31,17274,17275],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[75,17277,17279],{"className":464,"code":17278,"language":466,"meta":66,"style":66},"#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",[81,17280,17281,17287,17297,17304,17311,17315,17319,17324,17358,17363,17379,17393,17397,17401,17408,17415,17419,17425,17429,17433,17437,17459,17482,17487,17501,17516,17520,17524,17530,17535,17540,17544,17570,17574,17604,17632,17660,17677,17681,17694,17698,17702,17706,17719,17723,17727,17735,17739,17743,17747,17752,17756,17767,17774,17783,17793,17804,17811,17824,17835,17845,17856,17863,17877,17882,17892,17900],{"__ignoreMap":66},[84,17282,17283,17285],{"class":86,"line":87},[84,17284,2279],{"class":473},[84,17286,2282],{"class":104},[84,17288,17289,17291,17293,17295],{"class":86,"line":98},[84,17290,2287],{"class":473},[84,17292,2290],{"class":473},[84,17294,2293],{"class":90},[84,17296,1634],{"class":477},[84,17298,17299,17301],{"class":86,"line":70},[84,17300,2279],{"class":473},[84,17302,17303],{"class":104},"\u003Ccmath>\n",[84,17305,17306,17308],{"class":86,"line":120},[84,17307,15023],{"class":473},[84,17309,17310],{"class":90}," Point\n",[84,17312,17313],{"class":86,"line":131},[84,17314,1886],{"class":477},[84,17316,17317],{"class":86,"line":145},[84,17318,15045],{"class":473},[84,17320,17321],{"class":86,"line":156},[84,17322,17323],{"class":328},"    \u002F\u002F赋值\n",[84,17325,17326,17328,17331,17333,17335,17338,17340,17342,17345,17348,17350,17353,17355],{"class":86,"line":164},[84,17327,15238],{"class":473},[84,17329,17330],{"class":90}," setPoint",[84,17332,478],{"class":477},[84,17334,14366],{"class":473},[84,17336,17337],{"class":5545}," x",[84,17339,12764],{"class":477},[84,17341,14366],{"class":473},[84,17343,17344],{"class":5545}," y",[84,17346,17347],{"class":477},") { m_x ",[84,17349,523],{"class":473},[84,17351,17352],{"class":477}," x; m_y ",[84,17354,523],{"class":473},[84,17356,17357],{"class":477}," y; }\n",[84,17359,17360],{"class":86,"line":175},[84,17361,17362],{"class":328},"    \u002F\u002F获取坐标\n",[84,17364,17365,17367,17370,17373,17376],{"class":86,"line":185},[84,17366,15067],{"class":473},[84,17368,17369],{"class":90}," getX",[84,17371,17372],{"class":477},"() { ",[84,17374,17375],{"class":473},"return",[84,17377,17378],{"class":477}," m_x; }\n",[84,17380,17381,17383,17386,17388,17390],{"class":86,"line":195},[84,17382,15067],{"class":473},[84,17384,17385],{"class":90}," getY",[84,17387,17372],{"class":477},[84,17389,17375],{"class":473},[84,17391,17392],{"class":477}," m_y; }\n",[84,17394,17395],{"class":86,"line":206},[84,17396,2729],{"emptyLinePlaceholder":403},[84,17398,17399],{"class":86,"line":217},[84,17400,15551],{"class":473},[84,17402,17403,17405],{"class":86,"line":227},[84,17404,15067],{"class":473},[84,17406,17407],{"class":477}," m_x;\n",[84,17409,17410,17412],{"class":86,"line":238},[84,17411,15067],{"class":473},[84,17413,17414],{"class":477}," m_y;\n",[84,17416,17417],{"class":86,"line":249},[84,17418,4324],{"class":477},[84,17420,17421,17423],{"class":86,"line":262},[84,17422,15023],{"class":473},[84,17424,15026],{"class":90},[84,17426,17427],{"class":86,"line":273},[84,17428,1886],{"class":477},[84,17430,17431],{"class":86,"line":283},[84,17432,15045],{"class":473},[84,17434,17435],{"class":86,"line":294},[84,17436,17323],{"class":328},[84,17438,17439,17441,17444,17446,17448,17451,17454,17456],{"class":86,"line":2028},[84,17440,15238],{"class":473},[84,17442,17443],{"class":90}," setRadius",[84,17445,478],{"class":477},[84,17447,14366],{"class":473},[84,17449,17450],{"class":5545}," r",[84,17452,17453],{"class":477},") { m_r ",[84,17455,523],{"class":473},[84,17457,17458],{"class":477}," r; }\n",[84,17460,17461,17463,17466,17468,17471,17474,17477,17479],{"class":86,"line":2057},[84,17462,15238],{"class":473},[84,17464,17465],{"class":90}," setCenter",[84,17467,478],{"class":477},[84,17469,17470],{"class":90},"Point",[84,17472,17473],{"class":5545}," center",[84,17475,17476],{"class":477},") { m_center ",[84,17478,523],{"class":473},[84,17480,17481],{"class":477}," center; }\n",[84,17483,17484],{"class":86,"line":2062},[84,17485,17486],{"class":328},"    \u002F\u002F获取属性\n",[84,17488,17489,17491,17494,17496,17498],{"class":86,"line":2079},[84,17490,15067],{"class":473},[84,17492,17493],{"class":90}," getRadius",[84,17495,17372],{"class":477},[84,17497,17375],{"class":473},[84,17499,17500],{"class":477}," m_r; }\n",[84,17502,17503,17506,17509,17511,17513],{"class":86,"line":2084},[84,17504,17505],{"class":90},"    Point",[84,17507,17508],{"class":90}," getCenter",[84,17510,17372],{"class":477},[84,17512,17375],{"class":473},[84,17514,17515],{"class":477}," m_center; }\n",[84,17517,17518],{"class":86,"line":2089},[84,17519,2729],{"emptyLinePlaceholder":403},[84,17521,17522],{"class":86,"line":2094},[84,17523,15551],{"class":473},[84,17525,17526,17528],{"class":86,"line":2108},[84,17527,15067],{"class":473},[84,17529,15057],{"class":477},[84,17531,17532],{"class":86,"line":2113},[84,17533,17534],{"class":328},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[84,17536,17537],{"class":86,"line":2906},[84,17538,17539],{"class":477},"    Point m_center;\n",[84,17541,17542],{"class":86,"line":2920},[84,17543,4324],{"class":477},[84,17545,17546,17548,17551,17553,17556,17558,17560,17562,17564,17566,17568],{"class":86,"line":2928},[84,17547,5693],{"class":473},[84,17549,17550],{"class":90}," isInCircle",[84,17552,478],{"class":477},[84,17554,17555],{"class":90},"Circle",[84,17557,10913],{"class":473},[84,17559,762],{"class":5545},[84,17561,851],{"class":477},[84,17563,17470],{"class":90},[84,17565,10913],{"class":473},[84,17567,35],{"class":5545},[84,17569,484],{"class":477},[84,17571,17572],{"class":86,"line":2933},[84,17573,1886],{"class":477},[84,17575,17576,17578,17581,17583,17585,17588,17591,17594,17596,17598,17600,17602],{"class":86,"line":2939},[84,17577,15067],{"class":473},[84,17579,17580],{"class":477}," dx ",[84,17582,523],{"class":473},[84,17584,16671],{"class":477},[84,17586,17587],{"class":90},"getCenter",[84,17589,17590],{"class":477},"().",[84,17592,17593],{"class":90},"getX",[84,17595,13379],{"class":477},[84,17597,1005],{"class":473},[84,17599,16217],{"class":477},[84,17601,17593],{"class":90},[84,17603,5965],{"class":477},[84,17605,17606,17608,17611,17613,17615,17617,17619,17622,17624,17626,17628,17630],{"class":86,"line":2945},[84,17607,15067],{"class":473},[84,17609,17610],{"class":477}," dy ",[84,17612,523],{"class":473},[84,17614,16671],{"class":477},[84,17616,17587],{"class":90},[84,17618,17590],{"class":477},[84,17620,17621],{"class":90},"getY",[84,17623,13379],{"class":477},[84,17625,1005],{"class":473},[84,17627,16217],{"class":477},[84,17629,17621],{"class":90},[84,17631,5965],{"class":477},[84,17633,17634,17636,17639,17641,17644,17647,17649,17651,17653,17655,17657],{"class":86,"line":2950},[84,17635,15067],{"class":473},[84,17637,17638],{"class":477}," distance ",[84,17640,523],{"class":473},[84,17642,17643],{"class":90}," sqrt",[84,17645,17646],{"class":477},"(dx ",[84,17648,928],{"class":473},[84,17650,17580],{"class":477},[84,17652,954],{"class":473},[84,17654,17610],{"class":477},[84,17656,928],{"class":473},[84,17658,17659],{"class":477}," dy);\n",[84,17661,17662,17664,17667,17669,17671,17674],{"class":86,"line":8277},[84,17663,3430],{"class":473},[84,17665,17666],{"class":477}," (distance ",[84,17668,1383],{"class":473},[84,17670,16671],{"class":477},[84,17672,17673],{"class":90},"getRadius",[84,17675,17676],{"class":477},"())\n",[84,17678,17679],{"class":86,"line":8301},[84,17680,2359],{"class":477},[84,17682,17683,17685,17687,17690,17692],{"class":86,"line":8306},[84,17684,9998],{"class":477},[84,17686,1517],{"class":473},[84,17688,17689],{"class":104}," \"点在圆内\"",[84,17691,1785],{"class":473},[84,17693,9169],{"class":477},[84,17695,17696],{"class":86,"line":8312},[84,17697,2516],{"class":477},[84,17699,17700],{"class":86,"line":8339},[84,17701,17152],{"class":473},[84,17703,17704],{"class":86,"line":8344},[84,17705,2359],{"class":477},[84,17707,17708,17710,17712,17715,17717],{"class":86,"line":8350},[84,17709,9998],{"class":477},[84,17711,1517],{"class":473},[84,17713,17714],{"class":104}," \"点在圆外\"",[84,17716,1785],{"class":473},[84,17718,9169],{"class":477},[84,17720,17721],{"class":86,"line":8362},[84,17722,2516],{"class":477},[84,17724,17725],{"class":86,"line":8374},[84,17726,1905],{"class":477},[84,17728,17729,17731,17733],{"class":86,"line":8386},[84,17730,481],{"class":473},[84,17732,2302],{"class":90},[84,17734,2305],{"class":477},[84,17736,17737],{"class":86,"line":10045},[84,17738,1886],{"class":477},[84,17740,17741],{"class":86,"line":10070},[84,17742,15382],{"class":328},[84,17744,17745],{"class":86,"line":10093},[84,17746,15129],{"class":477},[84,17748,17749],{"class":86,"line":10117},[84,17750,17751],{"class":477},"    Point p1;\n",[84,17753,17754],{"class":86,"line":10122},[84,17755,17323],{"class":328},[84,17757,17758,17760,17762,17765],{"class":86,"line":10127},[84,17759,1891],{"class":477},[84,17761,1517],{"class":473},[84,17763,17764],{"class":104},"\"请输入圆的半径：\"",[84,17766,1634],{"class":477},[84,17768,17769,17771],{"class":86,"line":10132},[84,17770,15067],{"class":473},[84,17772,17773],{"class":477}," r;\n",[84,17775,17776,17778,17780],{"class":86,"line":10141},[84,17777,2341],{"class":477},[84,17779,1770],{"class":473},[84,17781,17782],{"class":477},"r;\n",[84,17784,17785,17787,17790],{"class":86,"line":10146},[84,17786,16924],{"class":477},[84,17788,17789],{"class":90},"setRadius",[84,17791,17792],{"class":477},"(r);\n",[84,17794,17795,17797,17799,17802],{"class":86,"line":10152},[84,17796,1891],{"class":477},[84,17798,1517],{"class":473},[84,17800,17801],{"class":104},"\"请输入圆心坐标：\"",[84,17803,1634],{"class":477},[84,17805,17806,17808],{"class":86,"line":10173},[84,17807,15067],{"class":473},[84,17809,17810],{"class":477}," x, y;\n",[84,17812,17813,17815,17817,17819,17821],{"class":86,"line":10179},[84,17814,2341],{"class":477},[84,17816,1770],{"class":473},[84,17818,1293],{"class":477},[84,17820,1770],{"class":473},[84,17822,17823],{"class":477},"y;\n",[84,17825,17826,17829,17832],{"class":86,"line":10193},[84,17827,17828],{"class":477},"    p1.",[84,17830,17831],{"class":90},"setPoint",[84,17833,17834],{"class":477},"(x, y);\n",[84,17836,17837,17839,17842],{"class":86,"line":10199},[84,17838,16924],{"class":477},[84,17840,17841],{"class":90},"setCenter",[84,17843,17844],{"class":477},"(p1);\n",[84,17846,17847,17849,17851,17854],{"class":86,"line":10226},[84,17848,1891],{"class":477},[84,17850,1517],{"class":473},[84,17852,17853],{"class":104},"\"请输入测试点坐标：\"",[84,17855,1634],{"class":477},[84,17857,17858,17860],{"class":86,"line":10235},[84,17859,15067],{"class":473},[84,17861,17862],{"class":477}," x1, y1;\n",[84,17864,17865,17867,17869,17872,17874],{"class":86,"line":10241},[84,17866,2341],{"class":477},[84,17868,1770],{"class":473},[84,17870,17871],{"class":477},"x1",[84,17873,1770],{"class":473},[84,17875,17876],{"class":477},"y1;\n",[84,17878,17879],{"class":86,"line":10249},[84,17880,17881],{"class":477},"    Point p2;\n",[84,17883,17884,17887,17889],{"class":86,"line":10254},[84,17885,17886],{"class":477},"    p2.",[84,17888,17831],{"class":90},[84,17890,17891],{"class":477},"(x1, y1);\n",[84,17893,17894,17897],{"class":86,"line":16933},[84,17895,17896],{"class":90},"    isInCircle",[84,17898,17899],{"class":477},"(c1, p2);\n",[84,17901,17902],{"class":86,"line":16939},[84,17903,1905],{"class":477},[35,17905,17906],{},"在类中可以让另一个类作为本来的成员",[35,17908,17909],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[35,17911,17912],{},"创建point.h",[75,17914,17916],{"className":464,"code":17915,"language":466,"meta":66,"style":66},"#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",[81,17917,17918,17929,17935,17945,17951,17955,17960,17964,17968,17988,17992,18000,18008,18012,18016,18022,18028],{"__ignoreMap":66},[84,17919,17920,17923,17926],{"class":86,"line":87},[84,17921,17922],{"class":473},"#pragma",[84,17924,17925],{"class":90}," once",[84,17927,17928],{"class":328}," \u002F\u002F防止头文件重复包含\n",[84,17930,17931,17933],{"class":86,"line":98},[84,17932,2279],{"class":473},[84,17934,2282],{"class":104},[84,17936,17937,17939,17941,17943],{"class":86,"line":70},[84,17938,2287],{"class":473},[84,17940,2290],{"class":473},[84,17942,2293],{"class":90},[84,17944,1634],{"class":477},[84,17946,17947,17949],{"class":86,"line":120},[84,17948,15023],{"class":473},[84,17950,17310],{"class":90},[84,17952,17953],{"class":86,"line":131},[84,17954,1886],{"class":477},[84,17956,17957],{"class":86,"line":145},[84,17958,17959],{"class":328},"\u002F\u002F做好声明与变量定义就可以\n",[84,17961,17962],{"class":86,"line":156},[84,17963,15045],{"class":473},[84,17965,17966],{"class":86,"line":164},[84,17967,17323],{"class":328},[84,17969,17970,17972,17974,17976,17978,17980,17982,17984,17986],{"class":86,"line":175},[84,17971,15238],{"class":473},[84,17973,17330],{"class":90},[84,17975,478],{"class":477},[84,17977,14366],{"class":473},[84,17979,17337],{"class":5545},[84,17981,12764],{"class":477},[84,17983,14366],{"class":473},[84,17985,17344],{"class":5545},[84,17987,3048],{"class":477},[84,17989,17990],{"class":86,"line":185},[84,17991,17362],{"class":328},[84,17993,17994,17996,17998],{"class":86,"line":195},[84,17995,15067],{"class":473},[84,17997,17369],{"class":90},[84,17999,5965],{"class":477},[84,18001,18002,18004,18006],{"class":86,"line":206},[84,18003,15067],{"class":473},[84,18005,17385],{"class":90},[84,18007,5965],{"class":477},[84,18009,18010],{"class":86,"line":217},[84,18011,2729],{"emptyLinePlaceholder":403},[84,18013,18014],{"class":86,"line":227},[84,18015,15551],{"class":473},[84,18017,18018,18020],{"class":86,"line":238},[84,18019,15067],{"class":473},[84,18021,17407],{"class":477},[84,18023,18024,18026],{"class":86,"line":249},[84,18025,15067],{"class":473},[84,18027,17414],{"class":477},[84,18029,18030],{"class":86,"line":262},[84,18031,4324],{"class":477},[35,18033,18034],{},"创建point.cpp",[75,18036,18038],{"className":464,"code":18037,"language":466,"meta":66,"style":66},"#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",[81,18039,18040,18047,18052,18086,18090,18106],{"__ignoreMap":66},[84,18041,18042,18044],{"class":86,"line":87},[84,18043,2279],{"class":473},[84,18045,18046],{"class":104},"\u003Cpoint.h>\n",[84,18048,18049],{"class":86,"line":98},[84,18050,18051],{"class":328},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[84,18053,18054,18056,18059,18062,18064,18066,18068,18070,18072,18074,18076,18078,18080,18082,18084],{"class":86,"line":70},[84,18055,15238],{"class":473},[84,18057,18058],{"class":90}," Point",[84,18060,18061],{"class":477},"::",[84,18063,17831],{"class":90},[84,18065,478],{"class":477},[84,18067,14366],{"class":473},[84,18069,17337],{"class":5545},[84,18071,12764],{"class":477},[84,18073,14366],{"class":473},[84,18075,17344],{"class":5545},[84,18077,17347],{"class":477},[84,18079,523],{"class":473},[84,18081,17352],{"class":477},[84,18083,523],{"class":473},[84,18085,17357],{"class":477},[84,18087,18088],{"class":86,"line":120},[84,18089,17362],{"class":328},[84,18091,18092,18094,18096,18098,18100,18102,18104],{"class":86,"line":131},[84,18093,15067],{"class":473},[84,18095,18058],{"class":90},[84,18097,18061],{"class":477},[84,18099,17593],{"class":90},[84,18101,17372],{"class":477},[84,18103,17375],{"class":473},[84,18105,17378],{"class":477},[84,18107,18108,18110,18112,18114,18116,18118,18120],{"class":86,"line":145},[84,18109,15067],{"class":473},[84,18111,18058],{"class":90},[84,18113,18061],{"class":477},[84,18115,17621],{"class":90},[84,18117,17372],{"class":477},[84,18119,17375],{"class":473},[84,18121,17392],{"class":477},[35,18123,18124],{},"创建circle.h",[75,18126,18128],{"className":464,"code":18127,"language":466,"meta":66,"style":66},"#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",[81,18129,18130,18137,18143,18153,18159,18165,18169,18173,18177,18191,18205,18209,18217,18225,18229,18233,18239,18243,18247],{"__ignoreMap":66},[84,18131,18132,18134],{"class":86,"line":87},[84,18133,17922],{"class":473},[84,18135,18136],{"class":90}," once\n",[84,18138,18139,18141],{"class":86,"line":98},[84,18140,2279],{"class":473},[84,18142,2282],{"class":104},[84,18144,18145,18147,18149,18151],{"class":86,"line":70},[84,18146,2287],{"class":473},[84,18148,2290],{"class":473},[84,18150,2293],{"class":90},[84,18152,1634],{"class":477},[84,18154,18155,18157],{"class":86,"line":120},[84,18156,2279],{"class":473},[84,18158,18046],{"class":104},[84,18160,18161,18163],{"class":86,"line":131},[84,18162,15023],{"class":473},[84,18164,15026],{"class":90},[84,18166,18167],{"class":86,"line":145},[84,18168,1886],{"class":477},[84,18170,18171],{"class":86,"line":156},[84,18172,15045],{"class":473},[84,18174,18175],{"class":86,"line":164},[84,18176,17323],{"class":328},[84,18178,18179,18181,18183,18185,18187,18189],{"class":86,"line":175},[84,18180,15238],{"class":473},[84,18182,17443],{"class":90},[84,18184,478],{"class":477},[84,18186,14366],{"class":473},[84,18188,17450],{"class":5545},[84,18190,3048],{"class":477},[84,18192,18193,18195,18197,18199,18201,18203],{"class":86,"line":185},[84,18194,15238],{"class":473},[84,18196,17465],{"class":90},[84,18198,478],{"class":477},[84,18200,17470],{"class":90},[84,18202,17473],{"class":5545},[84,18204,3048],{"class":477},[84,18206,18207],{"class":86,"line":195},[84,18208,17486],{"class":328},[84,18210,18211,18213,18215],{"class":86,"line":206},[84,18212,15067],{"class":473},[84,18214,17493],{"class":90},[84,18216,5965],{"class":477},[84,18218,18219,18221,18223],{"class":86,"line":217},[84,18220,17505],{"class":90},[84,18222,17508],{"class":90},[84,18224,5965],{"class":477},[84,18226,18227],{"class":86,"line":227},[84,18228,2729],{"emptyLinePlaceholder":403},[84,18230,18231],{"class":86,"line":238},[84,18232,15551],{"class":473},[84,18234,18235,18237],{"class":86,"line":249},[84,18236,15067],{"class":473},[84,18238,15057],{"class":477},[84,18240,18241],{"class":86,"line":262},[84,18242,17534],{"class":328},[84,18244,18245],{"class":86,"line":273},[84,18246,17539],{"class":477},[84,18248,18249],{"class":86,"line":283},[84,18250,4324],{"class":477},[35,18252,18253],{},"创建circle.cpp",[75,18255,18257],{"className":464,"code":18256,"language":466,"meta":66,"style":66},"#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",[81,18258,18259,18266,18289,18311,18316,18332],{"__ignoreMap":66},[84,18260,18261,18263],{"class":86,"line":87},[84,18262,2279],{"class":473},[84,18264,18265],{"class":104},"\u003Ccircle.h>\n",[84,18267,18268,18270,18273,18275,18277,18279,18281,18283,18285,18287],{"class":86,"line":98},[84,18269,5693],{"class":473},[84,18271,18272],{"class":90}," Circle",[84,18274,18061],{"class":477},[84,18276,17789],{"class":90},[84,18278,478],{"class":477},[84,18280,14366],{"class":473},[84,18282,17450],{"class":5545},[84,18284,17453],{"class":477},[84,18286,523],{"class":473},[84,18288,17458],{"class":477},[84,18290,18291,18293,18295,18297,18299,18301,18303,18305,18307,18309],{"class":86,"line":70},[84,18292,5693],{"class":473},[84,18294,18272],{"class":90},[84,18296,18061],{"class":477},[84,18298,17841],{"class":90},[84,18300,478],{"class":477},[84,18302,17470],{"class":90},[84,18304,17473],{"class":5545},[84,18306,17476],{"class":477},[84,18308,523],{"class":473},[84,18310,17481],{"class":477},[84,18312,18313],{"class":86,"line":120},[84,18314,18315],{"class":328},"\u002F\u002F获取属性\n",[84,18317,18318,18320,18322,18324,18326,18328,18330],{"class":86,"line":131},[84,18319,14366],{"class":473},[84,18321,18272],{"class":90},[84,18323,18061],{"class":477},[84,18325,17673],{"class":90},[84,18327,17372],{"class":477},[84,18329,17375],{"class":473},[84,18331,17500],{"class":477},[84,18333,18334,18336,18338,18340,18342,18344,18346],{"class":86,"line":145},[84,18335,17470],{"class":90},[84,18337,18272],{"class":90},[84,18339,18061],{"class":477},[84,18341,17587],{"class":90},[84,18343,17372],{"class":477},[84,18345,17375],{"class":473},[84,18347,17515],{"class":477},[35,18349,18350],{},"使用封装的类",[75,18352,18354],{"className":464,"code":18353,"language":466,"meta":66,"style":66},"#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",[81,18355,18356,18362,18372,18378,18384,18408,18412,18438,18464,18488,18502,18506,18518,18522,18526,18530,18542,18546,18550,18558,18562,18566,18570,18574,18578,18588,18594,18602,18610,18620,18626,18638,18646,18654,18664,18670,18682,18686,18694,18700],{"__ignoreMap":66},[84,18357,18358,18360],{"class":86,"line":87},[84,18359,2279],{"class":473},[84,18361,2282],{"class":104},[84,18363,18364,18366,18368,18370],{"class":86,"line":98},[84,18365,2287],{"class":473},[84,18367,2290],{"class":473},[84,18369,2293],{"class":90},[84,18371,1634],{"class":477},[84,18373,18374,18376],{"class":86,"line":70},[84,18375,2279],{"class":473},[84,18377,18265],{"class":104},[84,18379,18380,18382],{"class":86,"line":120},[84,18381,2279],{"class":473},[84,18383,18046],{"class":104},[84,18385,18386,18388,18390,18392,18394,18396,18398,18400,18402,18404,18406],{"class":86,"line":131},[84,18387,5693],{"class":473},[84,18389,17550],{"class":90},[84,18391,478],{"class":477},[84,18393,17555],{"class":90},[84,18395,10913],{"class":473},[84,18397,762],{"class":5545},[84,18399,851],{"class":477},[84,18401,17470],{"class":90},[84,18403,10913],{"class":473},[84,18405,35],{"class":5545},[84,18407,484],{"class":477},[84,18409,18410],{"class":86,"line":145},[84,18411,1886],{"class":477},[84,18413,18414,18416,18418,18420,18422,18424,18426,18428,18430,18432,18434,18436],{"class":86,"line":156},[84,18415,15067],{"class":473},[84,18417,17580],{"class":477},[84,18419,523],{"class":473},[84,18421,16671],{"class":477},[84,18423,17587],{"class":90},[84,18425,17590],{"class":477},[84,18427,17593],{"class":90},[84,18429,13379],{"class":477},[84,18431,1005],{"class":473},[84,18433,16217],{"class":477},[84,18435,17593],{"class":90},[84,18437,5965],{"class":477},[84,18439,18440,18442,18444,18446,18448,18450,18452,18454,18456,18458,18460,18462],{"class":86,"line":164},[84,18441,15067],{"class":473},[84,18443,17610],{"class":477},[84,18445,523],{"class":473},[84,18447,16671],{"class":477},[84,18449,17587],{"class":90},[84,18451,17590],{"class":477},[84,18453,17621],{"class":90},[84,18455,13379],{"class":477},[84,18457,1005],{"class":473},[84,18459,16217],{"class":477},[84,18461,17621],{"class":90},[84,18463,5965],{"class":477},[84,18465,18466,18468,18470,18472,18474,18476,18478,18480,18482,18484,18486],{"class":86,"line":175},[84,18467,15067],{"class":473},[84,18469,17638],{"class":477},[84,18471,523],{"class":473},[84,18473,17643],{"class":90},[84,18475,17646],{"class":477},[84,18477,928],{"class":473},[84,18479,17580],{"class":477},[84,18481,954],{"class":473},[84,18483,17610],{"class":477},[84,18485,928],{"class":473},[84,18487,17659],{"class":477},[84,18489,18490,18492,18494,18496,18498,18500],{"class":86,"line":185},[84,18491,3430],{"class":473},[84,18493,17666],{"class":477},[84,18495,1383],{"class":473},[84,18497,16671],{"class":477},[84,18499,17673],{"class":90},[84,18501,17676],{"class":477},[84,18503,18504],{"class":86,"line":195},[84,18505,2359],{"class":477},[84,18507,18508,18510,18512,18514,18516],{"class":86,"line":206},[84,18509,9998],{"class":477},[84,18511,1517],{"class":473},[84,18513,17689],{"class":104},[84,18515,1785],{"class":473},[84,18517,9169],{"class":477},[84,18519,18520],{"class":86,"line":217},[84,18521,2516],{"class":477},[84,18523,18524],{"class":86,"line":227},[84,18525,17152],{"class":473},[84,18527,18528],{"class":86,"line":238},[84,18529,2359],{"class":477},[84,18531,18532,18534,18536,18538,18540],{"class":86,"line":249},[84,18533,9998],{"class":477},[84,18535,1517],{"class":473},[84,18537,17714],{"class":104},[84,18539,1785],{"class":473},[84,18541,9169],{"class":477},[84,18543,18544],{"class":86,"line":262},[84,18545,2516],{"class":477},[84,18547,18548],{"class":86,"line":273},[84,18549,1905],{"class":477},[84,18551,18552,18554,18556],{"class":86,"line":283},[84,18553,481],{"class":473},[84,18555,2302],{"class":90},[84,18557,2305],{"class":477},[84,18559,18560],{"class":86,"line":294},[84,18561,1886],{"class":477},[84,18563,18564],{"class":86,"line":2028},[84,18565,15382],{"class":328},[84,18567,18568],{"class":86,"line":2057},[84,18569,15129],{"class":477},[84,18571,18572],{"class":86,"line":2062},[84,18573,17751],{"class":477},[84,18575,18576],{"class":86,"line":2079},[84,18577,17323],{"class":328},[84,18579,18580,18582,18584,18586],{"class":86,"line":2084},[84,18581,1891],{"class":477},[84,18583,1517],{"class":473},[84,18585,17764],{"class":104},[84,18587,1634],{"class":477},[84,18589,18590,18592],{"class":86,"line":2089},[84,18591,15067],{"class":473},[84,18593,17773],{"class":477},[84,18595,18596,18598,18600],{"class":86,"line":2094},[84,18597,2341],{"class":477},[84,18599,1770],{"class":473},[84,18601,17782],{"class":477},[84,18603,18604,18606,18608],{"class":86,"line":2108},[84,18605,16924],{"class":477},[84,18607,17789],{"class":90},[84,18609,17792],{"class":477},[84,18611,18612,18614,18616,18618],{"class":86,"line":2113},[84,18613,1891],{"class":477},[84,18615,1517],{"class":473},[84,18617,17801],{"class":104},[84,18619,1634],{"class":477},[84,18621,18622,18624],{"class":86,"line":2906},[84,18623,15067],{"class":473},[84,18625,17810],{"class":477},[84,18627,18628,18630,18632,18634,18636],{"class":86,"line":2920},[84,18629,2341],{"class":477},[84,18631,1770],{"class":473},[84,18633,1293],{"class":477},[84,18635,1770],{"class":473},[84,18637,17823],{"class":477},[84,18639,18640,18642,18644],{"class":86,"line":2928},[84,18641,17828],{"class":477},[84,18643,17831],{"class":90},[84,18645,17834],{"class":477},[84,18647,18648,18650,18652],{"class":86,"line":2933},[84,18649,16924],{"class":477},[84,18651,17841],{"class":90},[84,18653,17844],{"class":477},[84,18655,18656,18658,18660,18662],{"class":86,"line":2939},[84,18657,1891],{"class":477},[84,18659,1517],{"class":473},[84,18661,17853],{"class":104},[84,18663,1634],{"class":477},[84,18665,18666,18668],{"class":86,"line":2945},[84,18667,15067],{"class":473},[84,18669,17862],{"class":477},[84,18671,18672,18674,18676,18678,18680],{"class":86,"line":2950},[84,18673,2341],{"class":477},[84,18675,1770],{"class":473},[84,18677,17871],{"class":477},[84,18679,1770],{"class":473},[84,18681,17876],{"class":477},[84,18683,18684],{"class":86,"line":8277},[84,18685,17881],{"class":477},[84,18687,18688,18690,18692],{"class":86,"line":8301},[84,18689,17886],{"class":477},[84,18691,17831],{"class":90},[84,18693,17891],{"class":477},[84,18695,18696,18698],{"class":86,"line":8306},[84,18697,17896],{"class":90},[84,18699,17899],{"class":477},[84,18701,18702],{"class":86,"line":8312},[84,18703,1905],{"class":477},[14,18705,18707],{"id":18706},"_82对象的初始化清理","8.2对象的初始化清理",[1480,18709,18710,18713],{},[31,18711,18712],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[31,18714,18715],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[23,18717,18719],{"id":18718},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[35,18721,18722,18723,18726],{},"对象的",[624,18724,18725],{},"初始化和清理","也是两个非常重要的安全问题",[35,18728,18729],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[35,18731,18732],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[35,18734,18735,18736,18739,18740,18743],{},"c++利用了",[624,18737,18738],{},"构造函数","和",[624,18741,18742],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[35,18745,18746,18747],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[624,18748,18749],{},"我们不提供构造和析构，编译器会提供",[35,18751,18752],{},[624,18753,18754],{},"编译器提供的构造函数和析构函数是空实现。",[1480,18756,18757,18760],{},[31,18758,18759],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[31,18761,18762,18763,18766],{},"析构函数：主要作用在于对象",[624,18764,18765],{},"销毁前","系统自动调用，执行一些清理工作。",[35,18768,18769,18772],{},[624,18770,18771],{},"构造函数语法：",[81,18773,18774],{},"类名(){}",[28,18776,18777,18780,18783,18786,18789],{},[31,18778,18779],{},"构造函数，没有返回值也不写void",[31,18781,18782],{},"函数名称与类名相同",[31,18784,18785],{},"构造函数可以有参数，因此可以发生重载",[31,18787,18788],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[31,18790,18791,18792,902],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[81,18793,18794],{},"Person(){}",[35,18796,18797,14124,18800],{},[624,18798,18799],{},"析构函数语法：",[81,18801,18802],{},"~类名(){}",[28,18804,18805,18808,18811,18817],{},[31,18806,18807],{},"析构函数，没有返回值也不写void",[31,18809,18810],{},"函数名称与类名相同,在名称前加上符号  ~",[31,18812,18813,18814],{},"析构函数不可以有参数，因此",[624,18815,18816],{},"不可以发生重载",[31,18818,18819],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[75,18821,18823],{"className":464,"code":18822,"language":466,"meta":66,"style":66},"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",[81,18824,18825,18831,18835,18839,18844,18851,18855,18868,18872,18877,18884,18888,18901,18905,18909,18913,18917,18925,18929,18937,18941,18945,18953,18957,18962,18966,18973,18977,18990,18994,19002],{"__ignoreMap":66},[84,18826,18827,18829],{"class":86,"line":87},[84,18828,15023],{"class":473},[84,18830,15500],{"class":90},[84,18832,18833],{"class":86,"line":98},[84,18834,1886],{"class":477},[84,18836,18837],{"class":86,"line":70},[84,18838,15045],{"class":473},[84,18840,18841],{"class":86,"line":120},[84,18842,18843],{"class":328},"    \u002F\u002F构造函数\n",[84,18845,18846,18849],{"class":86,"line":131},[84,18847,18848],{"class":90},"    Person",[84,18850,2305],{"class":477},[84,18852,18853],{"class":86,"line":145},[84,18854,2359],{"class":477},[84,18856,18857,18859,18861,18864,18866],{"class":86,"line":156},[84,18858,9998],{"class":477},[84,18860,1517],{"class":473},[84,18862,18863],{"class":104}," \"Person的构造函数调用\"",[84,18865,1785],{"class":473},[84,18867,9169],{"class":477},[84,18869,18870],{"class":86,"line":164},[84,18871,2516],{"class":477},[84,18873,18874],{"class":86,"line":175},[84,18875,18876],{"class":328},"    \u002F\u002F析构函数\n",[84,18878,18879,18882],{"class":86,"line":185},[84,18880,18881],{"class":90},"    ~Person",[84,18883,2305],{"class":477},[84,18885,18886],{"class":86,"line":195},[84,18887,2359],{"class":477},[84,18889,18890,18892,18894,18897,18899],{"class":86,"line":206},[84,18891,9998],{"class":477},[84,18893,1517],{"class":473},[84,18895,18896],{"class":104}," \"Person的析构函数调用\"",[84,18898,1785],{"class":473},[84,18900,9169],{"class":477},[84,18902,18903],{"class":86,"line":217},[84,18904,2516],{"class":477},[84,18906,18907],{"class":86,"line":227},[84,18908,2729],{"emptyLinePlaceholder":403},[84,18910,18911],{"class":86,"line":238},[84,18912,4324],{"class":477},[84,18914,18915],{"class":86,"line":249},[84,18916,2729],{"emptyLinePlaceholder":403},[84,18918,18919,18921,18923],{"class":86,"line":262},[84,18920,5693],{"class":473},[84,18922,5917],{"class":90},[84,18924,2305],{"class":477},[84,18926,18927],{"class":86,"line":273},[84,18928,1886],{"class":477},[84,18930,18931,18934],{"class":86,"line":283},[84,18932,18933],{"class":477},"    Person p;",[84,18935,18936],{"class":328},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[84,18938,18939],{"class":86,"line":294},[84,18940,1905],{"class":477},[84,18942,18943],{"class":86,"line":2028},[84,18944,2729],{"emptyLinePlaceholder":403},[84,18946,18947,18949,18951],{"class":86,"line":2057},[84,18948,481],{"class":473},[84,18950,2302],{"class":90},[84,18952,11182],{"class":477},[84,18954,18955],{"class":86,"line":2062},[84,18956,13539],{"class":477},[84,18958,18959],{"class":86,"line":2079},[84,18960,18961],{"class":328},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[84,18963,18964],{"class":86,"line":2084},[84,18965,2729],{"emptyLinePlaceholder":403},[84,18967,18968,18970],{"class":86,"line":2089},[84,18969,18933],{"class":477},[84,18971,18972],{"class":328},"\u002F\u002F只有构造函数\n",[84,18974,18975],{"class":86,"line":2094},[84,18976,2729],{"emptyLinePlaceholder":403},[84,18978,18979,18981,18983,18985,18987],{"class":86,"line":2108},[84,18980,2632],{"class":90},[84,18982,478],{"class":477},[84,18984,2637],{"class":104},[84,18986,6295],{"class":477},[84,18988,18989],{"class":328},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[84,18991,18992],{"class":86,"line":2113},[84,18993,2729],{"emptyLinePlaceholder":403},[84,18995,18996,18998,19000],{"class":86,"line":2906},[84,18997,4419],{"class":473},[84,18999,4422],{"class":94},[84,19001,1634],{"class":477},[84,19003,19004],{"class":86,"line":2920},[84,19005,1905],{"class":477},[35,19007,19008],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[23,19010,19012],{"id":19011},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[35,19014,19015],{},"两种分类方式：",[35,19017,19018],{},"​\t按参数分为： 有参构造和无参构造",[35,19020,19021],{},"​\t按类型分为： 普通构造和拷贝构造",[35,19023,19024],{},"三种调用方式：",[35,19026,19027],{},"​\t括号法",[35,19029,19030],{},"​\t显示法",[35,19032,19033],{},"​\t隐式转换法",[75,19035,19037],{"className":464,"code":19036,"language":466,"meta":66,"style":66},"#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",[81,19038,19039,19045,19055,19060,19065,19070,19075,19079,19087,19091,19095,19099,19105,19109,19122,19126,19138,19142,19151,19164,19168,19172,19178,19182,19195,19199,19204,19220,19224,19229,19238,19251,19255,19261,19265,19270,19278,19282,19287,19291,19299,19303,19308,19313,19318,19323,19328,19332,19337,19342,19347,19352,19356,19361,19366,19382,19394,19399,19403,19408,19413,19418,19422,19427,19441,19454,19458,19466,19470,19476,19482,19490],{"__ignoreMap":66},[84,19040,19041,19043],{"class":86,"line":87},[84,19042,2279],{"class":473},[84,19044,2282],{"class":104},[84,19046,19047,19049,19051,19053],{"class":86,"line":98},[84,19048,2287],{"class":473},[84,19050,2290],{"class":473},[84,19052,2293],{"class":90},[84,19054,1634],{"class":477},[84,19056,19057],{"class":86,"line":70},[84,19058,19059],{"class":328},"\u002F\u002F1.构造函数的分类及调用\n",[84,19061,19062],{"class":86,"line":120},[84,19063,19064],{"class":328},"\u002F\u002F分类\n",[84,19066,19067],{"class":86,"line":131},[84,19068,19069],{"class":328},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[84,19071,19072],{"class":86,"line":145},[84,19073,19074],{"class":328},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[84,19076,19077],{"class":86,"line":156},[84,19078,2729],{"emptyLinePlaceholder":403},[84,19080,19081,19083,19085],{"class":86,"line":164},[84,19082,15023],{"class":473},[84,19084,15898],{"class":90},[84,19086,3003],{"class":477},[84,19088,19089],{"class":86,"line":175},[84,19090,1886],{"class":477},[84,19092,19093],{"class":86,"line":185},[84,19094,15045],{"class":473},[84,19096,19097],{"class":86,"line":195},[84,19098,18843],{"class":328},[84,19100,19101,19103],{"class":86,"line":206},[84,19102,18848],{"class":90},[84,19104,2305],{"class":477},[84,19106,19107],{"class":86,"line":217},[84,19108,2359],{"class":477},[84,19110,19111,19113,19115,19118,19120],{"class":86,"line":227},[84,19112,3780],{"class":477},[84,19114,1517],{"class":473},[84,19116,19117],{"class":104},"\"Person构造函数无参构造\"",[84,19119,1517],{"class":473},[84,19121,1539],{"class":477},[84,19123,19124],{"class":86,"line":238},[84,19125,2516],{"class":477},[84,19127,19128,19130,19132,19134,19136],{"class":86,"line":249},[84,19129,18848],{"class":90},[84,19131,478],{"class":477},[84,19133,481],{"class":473},[84,19135,1739],{"class":5545},[84,19137,484],{"class":477},[84,19139,19140],{"class":86,"line":262},[84,19141,2359],{"class":477},[84,19143,19144,19147,19149],{"class":86,"line":273},[84,19145,19146],{"class":477},"        age",[84,19148,523],{"class":473},[84,19150,6526],{"class":477},[84,19152,19153,19155,19157,19160,19162],{"class":86,"line":283},[84,19154,3780],{"class":477},[84,19156,1517],{"class":473},[84,19158,19159],{"class":104},"\"Person构造函数有参构造\"",[84,19161,1517],{"class":473},[84,19163,1539],{"class":477},[84,19165,19166],{"class":86,"line":294},[84,19167,2516],{"class":477},[84,19169,19170],{"class":86,"line":2028},[84,19171,18876],{"class":328},[84,19173,19174,19176],{"class":86,"line":2057},[84,19175,18881],{"class":90},[84,19177,2305],{"class":477},[84,19179,19180],{"class":86,"line":2062},[84,19181,2359],{"class":477},[84,19183,19184,19186,19188,19191,19193],{"class":86,"line":2079},[84,19185,3780],{"class":477},[84,19187,1517],{"class":473},[84,19189,19190],{"class":104},"\"Person析构函数被调用\"",[84,19192,1517],{"class":473},[84,19194,1539],{"class":477},[84,19196,19197],{"class":86,"line":2084},[84,19198,2516],{"class":477},[84,19200,19201],{"class":86,"line":2089},[84,19202,19203],{"class":328},"    \u002F\u002F拷贝构造函数\n",[84,19205,19206,19208,19210,19212,19214,19216,19218],{"class":86,"line":2094},[84,19207,18848],{"class":90},[84,19209,478],{"class":477},[84,19211,7121],{"class":473},[84,19213,15898],{"class":90},[84,19215,10913],{"class":473},[84,19217,35],{"class":5545},[84,19219,484],{"class":477},[84,19221,19222],{"class":86,"line":2108},[84,19223,2359],{"class":477},[84,19225,19226],{"class":86,"line":2113},[84,19227,19228],{"class":328},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[84,19230,19231,19233,19235],{"class":86,"line":2906},[84,19232,19146],{"class":477},[84,19234,523],{"class":473},[84,19236,19237],{"class":477},"p.age;\n",[84,19239,19240,19242,19244,19247,19249],{"class":86,"line":2920},[84,19241,3780],{"class":477},[84,19243,1517],{"class":473},[84,19245,19246],{"class":104},"\"Person拷贝构造函数被调用\"",[84,19248,1517],{"class":473},[84,19250,1539],{"class":477},[84,19252,19253],{"class":86,"line":2928},[84,19254,2516],{"class":477},[84,19256,19257,19259],{"class":86,"line":2933},[84,19258,2314],{"class":473},[84,19260,8126],{"class":477},[84,19262,19263],{"class":86,"line":2939},[84,19264,4324],{"class":477},[84,19266,19267],{"class":86,"line":2945},[84,19268,19269],{"class":328},"\u002F\u002F调用\n",[84,19271,19272,19274,19276],{"class":86,"line":2950},[84,19273,5693],{"class":473},[84,19275,5917],{"class":90},[84,19277,2305],{"class":477},[84,19279,19280],{"class":86,"line":8277},[84,19281,1886],{"class":477},[84,19283,19284],{"class":86,"line":8301},[84,19285,19286],{"class":328},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[84,19288,19289],{"class":86,"line":8306},[84,19290,1905],{"class":477},[84,19292,19293,19295,19297],{"class":86,"line":8312},[84,19294,5693],{"class":473},[84,19296,5986],{"class":90},[84,19298,2305],{"class":477},[84,19300,19301],{"class":86,"line":8339},[84,19302,1886],{"class":477},[84,19304,19305],{"class":86,"line":8344},[84,19306,19307],{"class":328},"    \u002F\u002F1.括号法\n",[84,19309,19310],{"class":86,"line":8350},[84,19311,19312],{"class":328},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[84,19314,19315],{"class":86,"line":8362},[84,19316,19317],{"class":328},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[84,19319,19320],{"class":86,"line":8374},[84,19321,19322],{"class":328},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[84,19324,19325],{"class":86,"line":8386},[84,19326,19327],{"class":328},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[84,19329,19330],{"class":86,"line":10045},[84,19331,2729],{"emptyLinePlaceholder":403},[84,19333,19334],{"class":86,"line":10070},[84,19335,19336],{"class":328},"    \u002F\u002F注意事项\n",[84,19338,19339],{"class":86,"line":10093},[84,19340,19341],{"class":328},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[84,19343,19344],{"class":86,"line":10117},[84,19345,19346],{"class":328},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[84,19348,19349],{"class":86,"line":10122},[84,19350,19351],{"class":328},"    \u002F\u002F Person p4();\n",[84,19353,19354],{"class":86,"line":10127},[84,19355,2729],{"emptyLinePlaceholder":403},[84,19357,19358],{"class":86,"line":10132},[84,19359,19360],{"class":328},"    \u002F\u002F2.显示法\n",[84,19362,19363],{"class":86,"line":10141},[84,19364,19365],{"class":477},"    Person p1;\n",[84,19367,19368,19371,19373,19376,19378,19380],{"class":86,"line":10146},[84,19369,19370],{"class":477},"    Person p2",[84,19372,523],{"class":473},[84,19374,19375],{"class":90},"Person",[84,19377,478],{"class":477},[84,19379,919],{"class":94},[84,19381,3048],{"class":477},[84,19383,19384,19387,19389,19391],{"class":86,"line":10152},[84,19385,19386],{"class":477},"    Person p3",[84,19388,523],{"class":473},[84,19390,19375],{"class":90},[84,19392,19393],{"class":477},"(p2);\n",[84,19395,19396],{"class":86,"line":10173},[84,19397,19398],{"class":328},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[84,19400,19401],{"class":86,"line":10179},[84,19402,2729],{"emptyLinePlaceholder":403},[84,19404,19405],{"class":86,"line":10193},[84,19406,19407],{"class":328},"    \u002F\u002F 注意事项2\n",[84,19409,19410],{"class":86,"line":10199},[84,19411,19412],{"class":328},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[84,19414,19415],{"class":86,"line":10226},[84,19416,19417],{"class":328},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[84,19419,19420],{"class":86,"line":10235},[84,19421,2729],{"emptyLinePlaceholder":403},[84,19423,19424],{"class":86,"line":10241},[84,19425,19426],{"class":328},"    \u002F\u002F3.隐士转换法\n",[84,19428,19429,19432,19434,19436,19438],{"class":86,"line":10249},[84,19430,19431],{"class":477},"    Person p4",[84,19433,523],{"class":473},[84,19435,919],{"class":94},[84,19437,532],{"class":477},[84,19439,19440],{"class":328},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[84,19442,19443,19446,19448,19451],{"class":86,"line":10254},[84,19444,19445],{"class":477},"    Person p5",[84,19447,523],{"class":473},[84,19449,19450],{"class":477},"p4;",[84,19452,19453],{"class":328}," \u002F\u002F 这里会调用拷贝构造函数\n",[84,19455,19456],{"class":86,"line":16933},[84,19457,1905],{"class":477},[84,19459,19460,19462,19464],{"class":86,"line":16939},[84,19461,481],{"class":473},[84,19463,2302],{"class":90},[84,19465,2305],{"class":477},[84,19467,19468],{"class":86,"line":16962},[84,19469,1886],{"class":477},[84,19471,19472,19474],{"class":86,"line":16968},[84,19473,5962],{"class":90},[84,19475,5965],{"class":477},[84,19477,19478,19480],{"class":86,"line":16991},[84,19479,6031],{"class":90},[84,19481,5965],{"class":477},[84,19483,19484,19486,19488],{"class":86,"line":17005},[84,19485,4419],{"class":473},[84,19487,4422],{"class":94},[84,19489,1634],{"class":477},[84,19491,19492],{"class":86,"line":17025},[84,19493,1905],{"class":477},[35,19495,19496,19499],{},[624,19497,19498],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[23,19501,19503],{"id":19502},"_823拷贝构造函数","8.2.3拷贝构造函数",[35,19505,19506],{},"C++中拷贝构造函数调用时机通常有三种情况",[1480,19508,19509,19512,19515],{},[31,19510,19511],{},"使用一个已经创建完毕的对象来初始化一个新对象",[31,19513,19514],{},"值传递的方式给函数参数传值",[31,19516,19517],{},"以值方式返回局部对象",[75,19519,19521],{"className":464,"code":19520,"language":466,"meta":66,"style":66},"#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",[81,19522,19523,19529,19539,19543,19548,19552,19557,19562,19567,19573,19577,19581,19587,19591,19604,19608,19613,19625,19629,19637,19650,19654,19658,19674,19678,19687,19700,19704,19710,19714,19726,19730,19736,19740,19744,19752,19756,19769,19777,19795,19799,19804,19809,19824,19828,19841,19845,19853,19857,19861,19869,19873,19878,19887,19891,19895,19920,19930,19934,19942,19946,19957,19982,19986,19990,19994,20002,20006,20011,20016,20023,20028,20033,20038,20043,20047,20052,20056,20061,20065,20070,20075,20079,20083,20088,20093,20101],{"__ignoreMap":66},[84,19524,19525,19527],{"class":86,"line":87},[84,19526,2279],{"class":473},[84,19528,2282],{"class":104},[84,19530,19531,19533,19535,19537],{"class":86,"line":98},[84,19532,2287],{"class":473},[84,19534,2290],{"class":473},[84,19536,2293],{"class":90},[84,19538,1634],{"class":477},[84,19540,19541],{"class":86,"line":70},[84,19542,2729],{"emptyLinePlaceholder":403},[84,19544,19545],{"class":86,"line":120},[84,19546,19547],{"class":328},"\u002F\u002F拷贝构造函数调用时机\n",[84,19549,19550],{"class":86,"line":131},[84,19551,2729],{"emptyLinePlaceholder":403},[84,19553,19554],{"class":86,"line":145},[84,19555,19556],{"class":328},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[84,19558,19559],{"class":86,"line":156},[84,19560,19561],{"class":328},"\u002F\u002F2.值传递的方式给函数参数传值\n",[84,19563,19564],{"class":86,"line":164},[84,19565,19566],{"class":328},"\u002F\u002F3.以值方式返回局部对象\n",[84,19568,19569,19571],{"class":86,"line":175},[84,19570,15023],{"class":473},[84,19572,15500],{"class":90},[84,19574,19575],{"class":86,"line":185},[84,19576,1886],{"class":477},[84,19578,19579],{"class":86,"line":195},[84,19580,15045],{"class":473},[84,19582,19583,19585],{"class":86,"line":206},[84,19584,18848],{"class":90},[84,19586,2305],{"class":477},[84,19588,19589],{"class":86,"line":217},[84,19590,2359],{"class":477},[84,19592,19593,19595,19597,19600,19602],{"class":86,"line":227},[84,19594,9998],{"class":477},[84,19596,1517],{"class":473},[84,19598,19599],{"class":104}," \"Person的默认构造函数调用\"",[84,19601,1785],{"class":473},[84,19603,9169],{"class":477},[84,19605,19606],{"class":86,"line":238},[84,19607,2516],{"class":477},[84,19609,19610],{"class":86,"line":249},[84,19611,19612],{"class":328},"    \u002F\u002F有参构造\n",[84,19614,19615,19617,19619,19621,19623],{"class":86,"line":262},[84,19616,18848],{"class":90},[84,19618,478],{"class":477},[84,19620,481],{"class":473},[84,19622,16018],{"class":5545},[84,19624,484],{"class":477},[84,19626,19627],{"class":86,"line":273},[84,19628,2359],{"class":477},[84,19630,19631,19633,19635],{"class":86,"line":283},[84,19632,16072],{"class":477},[84,19634,523],{"class":473},[84,19636,8126],{"class":477},[84,19638,19639,19641,19643,19646,19648],{"class":86,"line":294},[84,19640,9998],{"class":477},[84,19642,1517],{"class":473},[84,19644,19645],{"class":104}," \"Person的有参构造函数调用\"",[84,19647,1785],{"class":473},[84,19649,9169],{"class":477},[84,19651,19652],{"class":86,"line":2028},[84,19653,2516],{"class":477},[84,19655,19656],{"class":86,"line":2057},[84,19657,19203],{"class":328},[84,19659,19660,19662,19664,19666,19668,19670,19672],{"class":86,"line":2062},[84,19661,18848],{"class":90},[84,19663,478],{"class":477},[84,19665,7121],{"class":473},[84,19667,15898],{"class":90},[84,19669,10913],{"class":473},[84,19671,35],{"class":5545},[84,19673,484],{"class":477},[84,19675,19676],{"class":86,"line":2079},[84,19677,2359],{"class":477},[84,19679,19680,19682,19684],{"class":86,"line":2084},[84,19681,16072],{"class":477},[84,19683,523],{"class":473},[84,19685,19686],{"class":477}," p.m_Age;\n",[84,19688,19689,19691,19693,19696,19698],{"class":86,"line":2089},[84,19690,9998],{"class":477},[84,19692,1517],{"class":473},[84,19694,19695],{"class":104}," \"Person的拷贝构造函数调用\"",[84,19697,1785],{"class":473},[84,19699,9169],{"class":477},[84,19701,19702],{"class":86,"line":2094},[84,19703,2516],{"class":477},[84,19705,19706,19708],{"class":86,"line":2108},[84,19707,18881],{"class":90},[84,19709,2305],{"class":477},[84,19711,19712],{"class":86,"line":2113},[84,19713,2359],{"class":477},[84,19715,19716,19718,19720,19722,19724],{"class":86,"line":2906},[84,19717,9998],{"class":477},[84,19719,1517],{"class":473},[84,19721,18896],{"class":104},[84,19723,1785],{"class":473},[84,19725,9169],{"class":477},[84,19727,19728],{"class":86,"line":2920},[84,19729,2516],{"class":477},[84,19731,19732,19734],{"class":86,"line":2928},[84,19733,2314],{"class":473},[84,19735,15995],{"class":477},[84,19737,19738],{"class":86,"line":2933},[84,19739,4324],{"class":477},[84,19741,19742],{"class":86,"line":2939},[84,19743,19556],{"class":328},[84,19745,19746,19748,19750],{"class":86,"line":2945},[84,19747,5693],{"class":473},[84,19749,5917],{"class":90},[84,19751,2305],{"class":477},[84,19753,19754],{"class":86,"line":2950},[84,19755,1886],{"class":477},[84,19757,19758,19761,19763,19765,19767],{"class":86,"line":8277},[84,19759,19760],{"class":477},"    Person ",[84,19762,7459],{"class":90},[84,19764,478],{"class":477},[84,19766,1173],{"class":94},[84,19768,3048],{"class":477},[84,19770,19771,19773,19775],{"class":86,"line":8301},[84,19772,19760],{"class":477},[84,19774,7362],{"class":90},[84,19776,17844],{"class":477},[84,19778,19779,19781,19783,19786,19788,19791,19793],{"class":86,"line":8306},[84,19780,1891],{"class":477},[84,19782,1517],{"class":473},[84,19784,19785],{"class":104},"\"P2的年龄为：\"",[84,19787,1517],{"class":473},[84,19789,19790],{"class":477},"p2.m_Age",[84,19792,1517],{"class":473},[84,19794,1539],{"class":477},[84,19796,19797],{"class":86,"line":8312},[84,19798,1905],{"class":477},[84,19800,19801],{"class":86,"line":8339},[84,19802,19803],{"class":328},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[84,19805,19806],{"class":86,"line":8344},[84,19807,19808],{"class":328},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[84,19810,19811,19813,19816,19818,19820,19822],{"class":86,"line":8350},[84,19812,5693],{"class":473},[84,19814,19815],{"class":90}," doWork",[84,19817,478],{"class":477},[84,19819,19375],{"class":90},[84,19821,7154],{"class":5545},[84,19823,484],{"class":477},[84,19825,19826],{"class":86,"line":8362},[84,19827,1886],{"class":477},[84,19829,19830,19832,19834,19837,19839],{"class":86,"line":8374},[84,19831,6858],{"class":477},[84,19833,1517],{"class":473},[84,19835,19836],{"class":104}," \"doWork函数调用\"",[84,19838,1785],{"class":473},[84,19840,9169],{"class":477},[84,19842,19843],{"class":86,"line":8386},[84,19844,1905],{"class":477},[84,19846,19847,19849,19851],{"class":86,"line":10045},[84,19848,5693],{"class":473},[84,19850,5986],{"class":90},[84,19852,2305],{"class":477},[84,19854,19855],{"class":86,"line":10070},[84,19856,1886],{"class":477},[84,19858,19859],{"class":86,"line":10093},[84,19860,15642],{"class":477},[84,19862,19863,19866],{"class":86,"line":10117},[84,19864,19865],{"class":90},"    doWork",[84,19867,19868],{"class":477},"(p);\n",[84,19870,19871],{"class":86,"line":10122},[84,19872,1905],{"class":477},[84,19874,19875],{"class":86,"line":10127},[84,19876,19877],{"class":328},"\u002F\u002F 3.以值方式返回局部对象\n",[84,19879,19880,19882,19885],{"class":86,"line":10132},[84,19881,19375],{"class":90},[84,19883,19884],{"class":90}," doWork2",[84,19886,2305],{"class":477},[84,19888,19889],{"class":86,"line":10141},[84,19890,1886],{"class":477},[84,19892,19893],{"class":86,"line":10146},[84,19894,19365],{"class":477},[84,19896,19897,19899,19901,19903,19905,19907,19909,19911,19913,19915,19917],{"class":86,"line":10152},[84,19898,1891],{"class":477},[84,19900,1517],{"class":473},[84,19902,478],{"class":477},[84,19904,481],{"class":473},[84,19906,6847],{"class":473},[84,19908,902],{"class":477},[84,19910,826],{"class":473},[84,19912,7459],{"class":477},[84,19914,1517],{"class":473},[84,19916,1582],{"class":477},[84,19918,19919],{"class":328},"\u002F\u002F打印p1的地址\n",[84,19921,19922,19924,19927],{"class":86,"line":10173},[84,19923,4419],{"class":473},[84,19925,19926],{"class":477}," p1;",[84,19928,19929],{"class":328},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[84,19931,19932],{"class":86,"line":10179},[84,19933,1905],{"class":477},[84,19935,19936,19938,19940],{"class":86,"line":10193},[84,19937,5693],{"class":473},[84,19939,6058],{"class":90},[84,19941,2305],{"class":477},[84,19943,19944],{"class":86,"line":10199},[84,19945,1886],{"class":477},[84,19947,19948,19951,19953,19955],{"class":86,"line":10226},[84,19949,19950],{"class":477},"    Person p ",[84,19952,523],{"class":473},[84,19954,19884],{"class":90},[84,19956,5965],{"class":477},[84,19958,19959,19961,19963,19965,19967,19969,19971,19973,19975,19977,19979],{"class":86,"line":10235},[84,19960,1891],{"class":477},[84,19962,1517],{"class":473},[84,19964,478],{"class":477},[84,19966,481],{"class":473},[84,19968,6847],{"class":473},[84,19970,902],{"class":477},[84,19972,826],{"class":473},[84,19974,35],{"class":477},[84,19976,1517],{"class":473},[84,19978,1582],{"class":477},[84,19980,19981],{"class":328},"\u002F\u002F打印p的地址\n",[84,19983,19984],{"class":86,"line":10241},[84,19985,1905],{"class":477},[84,19987,19988],{"class":86,"line":10249},[84,19989,2729],{"emptyLinePlaceholder":403},[84,19991,19992],{"class":86,"line":10254},[84,19993,2729],{"emptyLinePlaceholder":403},[84,19995,19996,19998,20000],{"class":86,"line":16933},[84,19997,481],{"class":473},[84,19999,2302],{"class":90},[84,20001,2305],{"class":477},[84,20003,20004],{"class":86,"line":16939},[84,20005,1886],{"class":477},[84,20007,20008],{"class":86,"line":16962},[84,20009,20010],{"class":328},"    \u002F\u002F test01();\n",[84,20012,20013],{"class":86,"line":16968},[84,20014,20015],{"class":328},"    \u002F\u002F test02();\n",[84,20017,20018,20021],{"class":86,"line":16991},[84,20019,20020],{"class":90},"    test03",[84,20022,5965],{"class":477},[84,20024,20025],{"class":86,"line":17005},[84,20026,20027],{"class":328},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[84,20029,20030],{"class":86,"line":17025},[84,20031,20032],{"class":328},"\u002F\u002F 输出结果如下：\n",[84,20034,20035],{"class":86,"line":17031},[84,20036,20037],{"class":328},"\u002F\u002F Person的默认构造函数调用\n",[84,20039,20040],{"class":86,"line":17042},[84,20041,20042],{"class":328},"\u002F\u002F 0x7fffffffceec\n",[84,20044,20045],{"class":86,"line":17065},[84,20046,20042],{"class":328},[84,20048,20049],{"class":86,"line":17087},[84,20050,20051],{"class":328},"\u002F\u002F Person的析构函数调用\n",[84,20053,20054],{"class":86,"line":17092},[84,20055,2729],{"emptyLinePlaceholder":403},[84,20057,20058],{"class":86,"line":17098},[84,20059,20060],{"class":328},"\u002F\u002F 之前的输出结果如下：\n",[84,20062,20063],{"class":86,"line":17112},[84,20064,20037],{"class":328},[84,20066,20067],{"class":86,"line":17125},[84,20068,20069],{"class":328},"\u002F\u002F 地址\n",[84,20071,20072],{"class":86,"line":17130},[84,20073,20074],{"class":328},"\u002F\u002F Person的拷贝构造函数调用\n",[84,20076,20077],{"class":86,"line":17144},[84,20078,20051],{"class":328},[84,20080,20081],{"class":86,"line":17149},[84,20082,20069],{"class":328},[84,20084,20085],{"class":86,"line":17155},[84,20086,20087],{"class":328},"\u002F\u002F (这两次输出的地址也是不同的) \n",[84,20089,20090],{"class":86,"line":17160},[84,20091,20092],{"class":328},"\u002F\u002F Person的析构函数调用     \n",[84,20094,20095,20097,20099],{"class":86,"line":17174},[84,20096,4419],{"class":473},[84,20098,4422],{"class":94},[84,20100,1634],{"class":477},[84,20102,20103],{"class":86,"line":17179},[84,20104,1905],{"class":477},[35,20106,20107],{},"简化版理解",[75,20109,20111],{"className":464,"code":20110,"language":466,"meta":66,"style":66},"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",[81,20112,20113,20121,20125,20131,20144,20155,20159,20171,20184,20192,20196,20212,20225,20234,20238,20243,20249,20262,20266,20270,20277,20281,20285,20290,20298,20302,20318,20331,20344,20348,20353,20361,20365,20369,20374,20379,20395,20403,20410,20416,20420,20424,20429,20437,20441,20445,20468,20475,20479,20483,20491,20495,20505,20527,20531,20535,20539,20547,20551,20556,20561,20567,20571,20581,20585,20593],{"__ignoreMap":66},[84,20114,20115,20117,20119],{"class":86,"line":87},[84,20116,15023],{"class":473},[84,20118,15898],{"class":90},[84,20120,15901],{"class":477},[84,20122,20123],{"class":86,"line":98},[84,20124,15045],{"class":473},[84,20126,20127,20129],{"class":86,"line":70},[84,20128,18848],{"class":90},[84,20130,11182],{"class":477},[84,20132,20133,20135,20137,20140,20142],{"class":86,"line":120},[84,20134,9998],{"class":477},[84,20136,1517],{"class":473},[84,20138,20139],{"class":104}," \"无参构造函数!\"",[84,20141,1785],{"class":473},[84,20143,9169],{"class":477},[84,20145,20146,20149,20151,20153],{"class":86,"line":131},[84,20147,20148],{"class":477},"        mAge ",[84,20150,523],{"class":473},[84,20152,4422],{"class":94},[84,20154,1634],{"class":477},[84,20156,20157],{"class":86,"line":145},[84,20158,2516],{"class":477},[84,20160,20161,20163,20165,20167,20169],{"class":86,"line":156},[84,20162,18848],{"class":90},[84,20164,478],{"class":477},[84,20166,481],{"class":473},[84,20168,16018],{"class":5545},[84,20170,12771],{"class":477},[84,20172,20173,20175,20177,20180,20182],{"class":86,"line":164},[84,20174,9998],{"class":477},[84,20176,1517],{"class":473},[84,20178,20179],{"class":104}," \"有参构造函数!\"",[84,20181,1785],{"class":473},[84,20183,9169],{"class":477},[84,20185,20186,20188,20190],{"class":86,"line":175},[84,20187,20148],{"class":477},[84,20189,523],{"class":473},[84,20191,8126],{"class":477},[84,20193,20194],{"class":86,"line":185},[84,20195,2516],{"class":477},[84,20197,20198,20200,20202,20204,20206,20208,20210],{"class":86,"line":195},[84,20199,18848],{"class":90},[84,20201,478],{"class":477},[84,20203,7121],{"class":473},[84,20205,15898],{"class":90},[84,20207,826],{"class":473},[84,20209,7154],{"class":5545},[84,20211,12771],{"class":477},[84,20213,20214,20216,20218,20221,20223],{"class":86,"line":206},[84,20215,9998],{"class":477},[84,20217,1517],{"class":473},[84,20219,20220],{"class":104}," \"拷贝构造函数!\"",[84,20222,1785],{"class":473},[84,20224,9169],{"class":477},[84,20226,20227,20229,20231],{"class":86,"line":217},[84,20228,20148],{"class":477},[84,20230,523],{"class":473},[84,20232,20233],{"class":477}," p.mAge;\n",[84,20235,20236],{"class":86,"line":227},[84,20237,2516],{"class":477},[84,20239,20240],{"class":86,"line":238},[84,20241,20242],{"class":328},"    \u002F\u002F析构函数在释放内存之前调用\n",[84,20244,20245,20247],{"class":86,"line":249},[84,20246,18881],{"class":90},[84,20248,11182],{"class":477},[84,20250,20251,20253,20255,20258,20260],{"class":86,"line":262},[84,20252,9998],{"class":477},[84,20254,1517],{"class":473},[84,20256,20257],{"class":104}," \"析构函数!\"",[84,20259,1785],{"class":473},[84,20261,9169],{"class":477},[84,20263,20264],{"class":86,"line":273},[84,20265,2516],{"class":477},[84,20267,20268],{"class":86,"line":283},[84,20269,15045],{"class":473},[84,20271,20272,20274],{"class":86,"line":294},[84,20273,2314],{"class":473},[84,20275,20276],{"class":477}," mAge;\n",[84,20278,20279],{"class":86,"line":2028},[84,20280,4324],{"class":477},[84,20282,20283],{"class":86,"line":2057},[84,20284,2729],{"emptyLinePlaceholder":403},[84,20286,20287],{"class":86,"line":2062},[84,20288,20289],{"class":328},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[84,20291,20292,20294,20296],{"class":86,"line":2079},[84,20293,5693],{"class":473},[84,20295,5917],{"class":90},[84,20297,11182],{"class":477},[84,20299,20300],{"class":86,"line":2084},[84,20301,2729],{"emptyLinePlaceholder":403},[84,20303,20304,20306,20309,20311,20313,20315],{"class":86,"line":2089},[84,20305,19760],{"class":477},[84,20307,20308],{"class":90},"man",[84,20310,478],{"class":477},[84,20312,784],{"class":94},[84,20314,6295],{"class":477},[84,20316,20317],{"class":328}," \u002F\u002Fp对象已经创建完毕\n",[84,20319,20320,20322,20325,20328],{"class":86,"line":2094},[84,20321,19760],{"class":477},[84,20323,20324],{"class":90},"newman",[84,20326,20327],{"class":477},"(man);",[84,20329,20330],{"class":328}," \u002F\u002F调用拷贝构造函数\n",[84,20332,20333,20336,20338,20341],{"class":86,"line":2108},[84,20334,20335],{"class":477},"    Person newman2 ",[84,20337,523],{"class":473},[84,20339,20340],{"class":477}," man;",[84,20342,20343],{"class":328}," \u002F\u002F拷贝构造\n",[84,20345,20346],{"class":86,"line":2113},[84,20347,2729],{"emptyLinePlaceholder":403},[84,20349,20350],{"class":86,"line":2906},[84,20351,20352],{"class":328},"    \u002F\u002FPerson newman3;\n",[84,20354,20355,20358],{"class":86,"line":2920},[84,20356,20357],{"class":328},"    \u002F\u002Fnewman3 = man;",[84,20359,20360],{"class":328}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[84,20362,20363],{"class":86,"line":2928},[84,20364,1905],{"class":477},[84,20366,20367],{"class":86,"line":2933},[84,20368,2729],{"emptyLinePlaceholder":403},[84,20370,20371],{"class":86,"line":2939},[84,20372,20373],{"class":328},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[84,20375,20376],{"class":86,"line":2945},[84,20377,20378],{"class":328},"\u002F\u002F相当于Person p1 = p;\n",[84,20380,20381,20383,20385,20387,20389,20392],{"class":86,"line":2950},[84,20382,5693],{"class":473},[84,20384,19815],{"class":90},[84,20386,478],{"class":477},[84,20388,19375],{"class":90},[84,20390,20391],{"class":5545}," p1",[84,20393,20394],{"class":477},") {}\n",[84,20396,20397,20399,20401],{"class":86,"line":8277},[84,20398,5693],{"class":473},[84,20400,5986],{"class":90},[84,20402,11182],{"class":477},[84,20404,20405,20407],{"class":86,"line":8301},[84,20406,18933],{"class":477},[84,20408,20409],{"class":328}," \u002F\u002F无参构造函数\n",[84,20411,20412,20414],{"class":86,"line":8306},[84,20413,19865],{"class":90},[84,20415,19868],{"class":477},[84,20417,20418],{"class":86,"line":8312},[84,20419,1905],{"class":477},[84,20421,20422],{"class":86,"line":8339},[84,20423,2729],{"emptyLinePlaceholder":403},[84,20425,20426],{"class":86,"line":8344},[84,20427,20428],{"class":328},"\u002F\u002F3. 以值方式返回局部对象\n",[84,20430,20431,20433,20435],{"class":86,"line":8350},[84,20432,19375],{"class":90},[84,20434,19884],{"class":90},[84,20436,2305],{"class":477},[84,20438,20439],{"class":86,"line":8362},[84,20440,1886],{"class":477},[84,20442,20443],{"class":86,"line":8374},[84,20444,19365],{"class":477},[84,20446,20447,20449,20451,20453,20455,20457,20459,20461,20464,20466],{"class":86,"line":8386},[84,20448,6858],{"class":477},[84,20450,1517],{"class":473},[84,20452,1991],{"class":477},[84,20454,481],{"class":473},[84,20456,6847],{"class":473},[84,20458,902],{"class":477},[84,20460,826],{"class":473},[84,20462,20463],{"class":477},"p1 ",[84,20465,1517],{"class":473},[84,20467,9169],{"class":477},[84,20469,20470,20472],{"class":86,"line":10045},[84,20471,4419],{"class":473},[84,20473,20474],{"class":477}," p1;\n",[84,20476,20477],{"class":86,"line":10070},[84,20478,1905],{"class":477},[84,20480,20481],{"class":86,"line":10093},[84,20482,2729],{"emptyLinePlaceholder":403},[84,20484,20485,20487,20489],{"class":86,"line":10117},[84,20486,5693],{"class":473},[84,20488,6058],{"class":90},[84,20490,2305],{"class":477},[84,20492,20493],{"class":86,"line":10122},[84,20494,1886],{"class":477},[84,20496,20497,20499,20501,20503],{"class":86,"line":10127},[84,20498,19950],{"class":477},[84,20500,523],{"class":473},[84,20502,19884],{"class":90},[84,20504,5965],{"class":477},[84,20506,20507,20509,20511,20513,20515,20517,20519,20521,20523,20525],{"class":86,"line":10132},[84,20508,6858],{"class":477},[84,20510,1517],{"class":473},[84,20512,1991],{"class":477},[84,20514,481],{"class":473},[84,20516,6847],{"class":473},[84,20518,902],{"class":477},[84,20520,826],{"class":473},[84,20522,11777],{"class":477},[84,20524,1517],{"class":473},[84,20526,9169],{"class":477},[84,20528,20529],{"class":86,"line":10141},[84,20530,1905],{"class":477},[84,20532,20533],{"class":86,"line":10146},[84,20534,2729],{"emptyLinePlaceholder":403},[84,20536,20537],{"class":86,"line":10152},[84,20538,2729],{"emptyLinePlaceholder":403},[84,20540,20541,20543,20545],{"class":86,"line":10173},[84,20542,481],{"class":473},[84,20544,2302],{"class":90},[84,20546,11182],{"class":477},[84,20548,20549],{"class":86,"line":10179},[84,20550,2729],{"emptyLinePlaceholder":403},[84,20552,20553],{"class":86,"line":10193},[84,20554,20555],{"class":328},"    \u002F\u002Ftest01();\n",[84,20557,20558],{"class":86,"line":10199},[84,20559,20560],{"class":328},"    \u002F\u002Ftest02();\n",[84,20562,20563,20565],{"class":86,"line":10226},[84,20564,20020],{"class":90},[84,20566,5965],{"class":477},[84,20568,20569],{"class":86,"line":10235},[84,20570,2729],{"emptyLinePlaceholder":403},[84,20572,20573,20575,20577,20579],{"class":86,"line":10241},[84,20574,2632],{"class":90},[84,20576,478],{"class":477},[84,20578,2637],{"class":104},[84,20580,3048],{"class":477},[84,20582,20583],{"class":86,"line":10249},[84,20584,2729],{"emptyLinePlaceholder":403},[84,20586,20587,20589,20591],{"class":86,"line":10254},[84,20588,4419],{"class":473},[84,20590,4422],{"class":94},[84,20592,1634],{"class":477},[84,20594,20595],{"class":86,"line":16933},[84,20596,1905],{"class":477},[23,20598,20600],{"id":20599},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[35,20602,20603],{},"默认情况下，c++编译器至少给一个类添加3个函数",[35,20605,20606],{},"1．默认构造函数(无参，函数体为空)",[35,20608,20609],{},"2．默认析构函数(无参，函数体为空)",[35,20611,20612],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[35,20614,20615],{},"构造函数调用规则如下：",[1480,20617,20618,20621],{},[31,20619,20620],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[31,20622,20623],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[75,20625,20627],{"className":464,"code":20626,"language":466,"meta":66,"style":66},"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",[81,20628,20629,20637,20641,20646,20652,20664,20668,20673,20685,20694,20706,20710,20714,20730,20739,20751,20755,20759,20765,20777,20781,20785,20791,20795,20799,20807,20811,20823,20828,20836,20840,20858,20862,20866,20874,20878,20883,20891,20906,20919,20923,20928,20935,20951,20964,20968,20972,20980,20984,20990,20994,21004,21008,21016],{"__ignoreMap":66},[84,20630,20631,20633,20635],{"class":86,"line":87},[84,20632,15023],{"class":473},[84,20634,15898],{"class":90},[84,20636,15901],{"class":477},[84,20638,20639],{"class":86,"line":98},[84,20640,15045],{"class":473},[84,20642,20643],{"class":86,"line":70},[84,20644,20645],{"class":328},"    \u002F\u002F无参（默认）构造函数\n",[84,20647,20648,20650],{"class":86,"line":120},[84,20649,18848],{"class":90},[84,20651,11182],{"class":477},[84,20653,20654,20656,20658,20660,20662],{"class":86,"line":131},[84,20655,9998],{"class":477},[84,20657,1517],{"class":473},[84,20659,20139],{"class":104},[84,20661,1785],{"class":473},[84,20663,9169],{"class":477},[84,20665,20666],{"class":86,"line":145},[84,20667,2516],{"class":477},[84,20669,20670],{"class":86,"line":156},[84,20671,20672],{"class":328},"    \u002F\u002F有参构造函数\n",[84,20674,20675,20677,20679,20681,20683],{"class":86,"line":164},[84,20676,18848],{"class":90},[84,20678,478],{"class":477},[84,20680,481],{"class":473},[84,20682,1739],{"class":5545},[84,20684,12771],{"class":477},[84,20686,20687,20690,20692],{"class":86,"line":175},[84,20688,20689],{"class":477},"        age ",[84,20691,523],{"class":473},[84,20693,1773],{"class":477},[84,20695,20696,20698,20700,20702,20704],{"class":86,"line":185},[84,20697,9998],{"class":477},[84,20699,1517],{"class":473},[84,20701,20179],{"class":104},[84,20703,1785],{"class":473},[84,20705,9169],{"class":477},[84,20707,20708],{"class":86,"line":195},[84,20709,2516],{"class":477},[84,20711,20712],{"class":86,"line":206},[84,20713,19203],{"class":328},[84,20715,20716,20718,20720,20722,20724,20726,20728],{"class":86,"line":217},[84,20717,18848],{"class":90},[84,20719,478],{"class":477},[84,20721,7121],{"class":473},[84,20723,15898],{"class":90},[84,20725,826],{"class":473},[84,20727,7154],{"class":5545},[84,20729,12771],{"class":477},[84,20731,20732,20734,20736],{"class":86,"line":227},[84,20733,20689],{"class":477},[84,20735,523],{"class":473},[84,20737,20738],{"class":477}," p.age;\n",[84,20740,20741,20743,20745,20747,20749],{"class":86,"line":238},[84,20742,9998],{"class":477},[84,20744,1517],{"class":473},[84,20746,20220],{"class":104},[84,20748,1785],{"class":473},[84,20750,9169],{"class":477},[84,20752,20753],{"class":86,"line":249},[84,20754,2516],{"class":477},[84,20756,20757],{"class":86,"line":262},[84,20758,18876],{"class":328},[84,20760,20761,20763],{"class":86,"line":273},[84,20762,18881],{"class":90},[84,20764,11182],{"class":477},[84,20766,20767,20769,20771,20773,20775],{"class":86,"line":283},[84,20768,9998],{"class":477},[84,20770,1517],{"class":473},[84,20772,20257],{"class":104},[84,20774,1785],{"class":473},[84,20776,9169],{"class":477},[84,20778,20779],{"class":86,"line":294},[84,20780,2516],{"class":477},[84,20782,20783],{"class":86,"line":2028},[84,20784,15045],{"class":473},[84,20786,20787,20789],{"class":86,"line":2057},[84,20788,2314],{"class":473},[84,20790,8126],{"class":477},[84,20792,20793],{"class":86,"line":2062},[84,20794,4324],{"class":477},[84,20796,20797],{"class":86,"line":2079},[84,20798,2729],{"emptyLinePlaceholder":403},[84,20800,20801,20803,20805],{"class":86,"line":2084},[84,20802,5693],{"class":473},[84,20804,5917],{"class":90},[84,20806,2305],{"class":477},[84,20808,20809],{"class":86,"line":2089},[84,20810,1886],{"class":477},[84,20812,20813,20815,20817,20819,20821],{"class":86,"line":2094},[84,20814,19760],{"class":477},[84,20816,7459],{"class":90},[84,20818,478],{"class":477},[84,20820,1123],{"class":94},[84,20822,3048],{"class":477},[84,20824,20825],{"class":86,"line":2108},[84,20826,20827],{"class":328},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[84,20829,20830,20832,20834],{"class":86,"line":2113},[84,20831,19760],{"class":477},[84,20833,7362],{"class":90},[84,20835,17844],{"class":477},[84,20837,20838],{"class":86,"line":2906},[84,20839,2729],{"emptyLinePlaceholder":403},[84,20841,20842,20844,20846,20849,20851,20854,20856],{"class":86,"line":2920},[84,20843,6858],{"class":477},[84,20845,1517],{"class":473},[84,20847,20848],{"class":104}," \"p2的年龄为： \"",[84,20850,1785],{"class":473},[84,20852,20853],{"class":477}," p2.age ",[84,20855,1517],{"class":473},[84,20857,9169],{"class":477},[84,20859,20860],{"class":86,"line":2928},[84,20861,1905],{"class":477},[84,20863,20864],{"class":86,"line":2933},[84,20865,2729],{"emptyLinePlaceholder":403},[84,20867,20868,20870,20872],{"class":86,"line":2939},[84,20869,5693],{"class":473},[84,20871,5986],{"class":90},[84,20873,2305],{"class":477},[84,20875,20876],{"class":86,"line":2945},[84,20877,1886],{"class":477},[84,20879,20880],{"class":86,"line":2950},[84,20881,20882],{"class":328},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[84,20884,20885,20888],{"class":86,"line":8277},[84,20886,20887],{"class":477},"    Person p1;",[84,20889,20890],{"class":328}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[84,20892,20893,20895,20897,20899,20901,20903],{"class":86,"line":8301},[84,20894,19760],{"class":477},[84,20896,7362],{"class":90},[84,20898,478],{"class":477},[84,20900,919],{"class":94},[84,20902,6295],{"class":477},[84,20904,20905],{"class":328}," \u002F\u002F用户提供的有参\n",[84,20907,20908,20910,20913,20916],{"class":86,"line":8306},[84,20909,19760],{"class":477},[84,20911,20912],{"class":90},"p3",[84,20914,20915],{"class":477},"(p2);",[84,20917,20918],{"class":328}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[84,20920,20921],{"class":86,"line":8312},[84,20922,2729],{"emptyLinePlaceholder":403},[84,20924,20925],{"class":86,"line":8339},[84,20926,20927],{"class":328},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[84,20929,20930,20933],{"class":86,"line":8344},[84,20931,20932],{"class":477},"    Person p4;",[84,20934,20890],{"class":328},[84,20936,20937,20939,20942,20944,20946,20948],{"class":86,"line":8350},[84,20938,19760],{"class":477},[84,20940,20941],{"class":90},"p5",[84,20943,478],{"class":477},[84,20945,919],{"class":94},[84,20947,6295],{"class":477},[84,20949,20950],{"class":328}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[84,20952,20953,20955,20958,20961],{"class":86,"line":8362},[84,20954,19760],{"class":477},[84,20956,20957],{"class":90},"p6",[84,20959,20960],{"class":477},"(p5);",[84,20962,20963],{"class":328}," \u002F\u002F用户自己提供拷贝构造\n",[84,20965,20966],{"class":86,"line":8374},[84,20967,1905],{"class":477},[84,20969,20970],{"class":86,"line":8386},[84,20971,2729],{"emptyLinePlaceholder":403},[84,20973,20974,20976,20978],{"class":86,"line":10045},[84,20975,481],{"class":473},[84,20977,2302],{"class":90},[84,20979,11182],{"class":477},[84,20981,20982],{"class":86,"line":10070},[84,20983,2729],{"emptyLinePlaceholder":403},[84,20985,20986,20988],{"class":86,"line":10093},[84,20987,5962],{"class":90},[84,20989,5965],{"class":477},[84,20991,20992],{"class":86,"line":10117},[84,20993,2729],{"emptyLinePlaceholder":403},[84,20995,20996,20998,21000,21002],{"class":86,"line":10122},[84,20997,2632],{"class":90},[84,20999,478],{"class":477},[84,21001,2637],{"class":104},[84,21003,3048],{"class":477},[84,21005,21006],{"class":86,"line":10127},[84,21007,2729],{"emptyLinePlaceholder":403},[84,21009,21010,21012,21014],{"class":86,"line":10132},[84,21011,4419],{"class":473},[84,21013,4422],{"class":94},[84,21015,1634],{"class":477},[84,21017,21018],{"class":86,"line":10141},[84,21019,1905],{"class":477},[23,21021,21023],{"id":21022},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[35,21025,21026],{},"浅拷贝：简单的赋值拷贝操作",[35,21028,21029],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[75,21031,21033],{"className":464,"code":21032,"language":466,"meta":66,"style":66},"#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",[81,21034,21035,21041,21051,21057,21061,21065,21070,21076,21080,21093,21097,21101,21108,21112,21122,21137,21150,21154,21159,21164,21180,21184,21197,21202,21207,21212,21221,21226,21241,21245,21249,21253,21259,21263,21268,21283,21287,21298,21312,21316,21325,21329,21335,21347,21351,21359,21363,21380,21411,21419,21447,21451,21455,21463,21467,21473],{"__ignoreMap":66},[84,21036,21037,21039],{"class":86,"line":87},[84,21038,2279],{"class":473},[84,21040,2282],{"class":104},[84,21042,21043,21045,21047,21049],{"class":86,"line":98},[84,21044,2287],{"class":473},[84,21046,2290],{"class":473},[84,21048,2293],{"class":90},[84,21050,1634],{"class":477},[84,21052,21053,21055],{"class":86,"line":70},[84,21054,15023],{"class":473},[84,21056,15500],{"class":90},[84,21058,21059],{"class":86,"line":120},[84,21060,1886],{"class":477},[84,21062,21063],{"class":86,"line":131},[84,21064,15045],{"class":473},[84,21066,21067],{"class":86,"line":145},[84,21068,21069],{"class":328},"    \u002F\u002F默认构造函数\n",[84,21071,21072,21074],{"class":86,"line":156},[84,21073,18848],{"class":90},[84,21075,2305],{"class":477},[84,21077,21078],{"class":86,"line":164},[84,21079,2359],{"class":477},[84,21081,21082,21084,21086,21089,21091],{"class":86,"line":175},[84,21083,3780],{"class":477},[84,21085,1517],{"class":473},[84,21087,21088],{"class":104},"\"默认构造函数\"",[84,21090,1517],{"class":473},[84,21092,1539],{"class":477},[84,21094,21095],{"class":86,"line":185},[84,21096,2516],{"class":477},[84,21098,21099],{"class":86,"line":195},[84,21100,20672],{"class":328},[84,21102,21103,21105],{"class":86,"line":206},[84,21104,18881],{"class":90},[84,21106,21107],{"class":477},"(int age,int height)\n",[84,21109,21110],{"class":86,"line":217},[84,21111,2359],{"class":477},[84,21113,21114,21117,21119],{"class":86,"line":227},[84,21115,21116],{"class":477},"        m_Age",[84,21118,523],{"class":473},[84,21120,21121],{"class":477},"age;\n",[84,21123,21124,21127,21129,21131,21134],{"class":86,"line":238},[84,21125,21126],{"class":477},"        m_Height",[84,21128,12046],{"class":473},[84,21130,2711],{"class":473},[84,21132,21133],{"class":477},"(height);",[84,21135,21136],{"class":328},"\u002F\u002F放到堆区\n",[84,21138,21139,21141,21143,21146,21148],{"class":86,"line":249},[84,21140,3780],{"class":477},[84,21142,1517],{"class":473},[84,21144,21145],{"class":104},"\"有参构造函数\"",[84,21147,1517],{"class":473},[84,21149,1539],{"class":477},[84,21151,21152],{"class":86,"line":262},[84,21153,2516],{"class":477},[84,21155,21156],{"class":86,"line":273},[84,21157,21158],{"class":328},"    \u002F\u002F深拷贝解决上述问题\n",[84,21160,21161],{"class":86,"line":283},[84,21162,21163],{"class":328},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[84,21165,21166,21168,21170,21172,21174,21176,21178],{"class":86,"line":294},[84,21167,18848],{"class":90},[84,21169,478],{"class":477},[84,21171,7121],{"class":473},[84,21173,15898],{"class":90},[84,21175,10913],{"class":473},[84,21177,35],{"class":5545},[84,21179,484],{"class":477},[84,21181,21182],{"class":86,"line":2028},[84,21183,2359],{"class":477},[84,21185,21186,21188,21190,21193,21195],{"class":86,"line":2057},[84,21187,3780],{"class":477},[84,21189,1517],{"class":473},[84,21191,21192],{"class":104},"\"拷贝构造函数\"",[84,21194,1517],{"class":473},[84,21196,1539],{"class":477},[84,21198,21199],{"class":86,"line":2062},[84,21200,21201],{"class":328},"        \u002F\u002F编译器默认的写如下注释部分\n",[84,21203,21204],{"class":86,"line":2079},[84,21205,21206],{"class":328},"        \u002F\u002Fm_Age=p.m_Age;\n",[84,21208,21209],{"class":86,"line":2084},[84,21210,21211],{"class":328},"        \u002F\u002Fm_Height=p.m_Height;\n",[84,21213,21214,21216,21218],{"class":86,"line":2089},[84,21215,21116],{"class":477},[84,21217,523],{"class":473},[84,21219,21220],{"class":477},"p.m_Age;\n",[84,21222,21223],{"class":86,"line":2094},[84,21224,21225],{"class":328},"        \u002F\u002F深拷贝操作\n",[84,21227,21228,21230,21232,21234,21236,21238],{"class":86,"line":2108},[84,21229,21126],{"class":477},[84,21231,12046],{"class":473},[84,21233,2711],{"class":473},[84,21235,478],{"class":477},[84,21237,928],{"class":473},[84,21239,21240],{"class":477},"p.m_Height);\n",[84,21242,21243],{"class":86,"line":2113},[84,21244,2516],{"class":477},[84,21246,21247],{"class":86,"line":2906},[84,21248,2729],{"emptyLinePlaceholder":403},[84,21250,21251],{"class":86,"line":2920},[84,21252,18876],{"class":328},[84,21254,21255,21257],{"class":86,"line":2928},[84,21256,18881],{"class":90},[84,21258,2305],{"class":477},[84,21260,21261],{"class":86,"line":2933},[84,21262,2359],{"class":477},[84,21264,21265],{"class":86,"line":2939},[84,21266,21267],{"class":328},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[84,21269,21270,21272,21275,21278,21281],{"class":86,"line":2945},[84,21271,2826],{"class":473},[84,21273,21274],{"class":477},"(m_Height ",[84,21276,21277],{"class":473},"!=",[84,21279,21280],{"class":94}," NULL",[84,21282,484],{"class":477},[84,21284,21285],{"class":86,"line":2950},[84,21286,2839],{"class":477},[84,21288,21289,21292,21295],{"class":86,"line":8277},[84,21290,21291],{"class":473},"            delete",[84,21293,21294],{"class":477}," m_Height;",[84,21296,21297],{"class":328}," \u002F\u002F释放堆区内存\n",[84,21299,21300,21303,21305,21307,21309],{"class":86,"line":8301},[84,21301,21302],{"class":477},"            m_Height",[84,21304,523],{"class":473},[84,21306,2721],{"class":94},[84,21308,532],{"class":477},[84,21310,21311],{"class":328}," \u002F\u002F防止野指针\n",[84,21313,21314],{"class":86,"line":8306},[84,21315,2858],{"class":477},[84,21317,21318,21320,21322],{"class":86,"line":8312},[84,21319,3780],{"class":477},[84,21321,1517],{"class":473},[84,21323,21324],{"class":104},"\"Person的析构函数调用\"\n",[84,21326,21327],{"class":86,"line":8339},[84,21328,2516],{"class":477},[84,21330,21331,21333],{"class":86,"line":8344},[84,21332,2314],{"class":473},[84,21334,15995],{"class":477},[84,21336,21337,21339,21341,21344],{"class":86,"line":8350},[84,21338,2314],{"class":473},[84,21340,6847],{"class":473},[84,21342,21343],{"class":477},"m_Height;",[84,21345,21346],{"class":328}," \u002F\u002F定义一个指针，指向身高\n",[84,21348,21349],{"class":86,"line":8362},[84,21350,4324],{"class":477},[84,21352,21353,21355,21357],{"class":86,"line":8374},[84,21354,5693],{"class":473},[84,21356,5917],{"class":90},[84,21358,2305],{"class":477},[84,21360,21361],{"class":86,"line":8386},[84,21362,1886],{"class":477},[84,21364,21365,21367,21369,21371,21373,21375,21378],{"class":86,"line":10045},[84,21366,19760],{"class":477},[84,21368,7459],{"class":90},[84,21370,478],{"class":477},[84,21372,1123],{"class":94},[84,21374,851],{"class":477},[84,21376,21377],{"class":94},"160",[84,21379,3048],{"class":477},[84,21381,21382,21384,21386,21389,21391,21394,21396,21399,21401,21404,21406,21408],{"class":86,"line":10070},[84,21383,1891],{"class":477},[84,21385,1517],{"class":473},[84,21387,21388],{"class":104},"\"p1的年龄为:\"",[84,21390,1517],{"class":473},[84,21392,21393],{"class":477},"p1.m_Age",[84,21395,1517],{"class":473},[84,21397,21398],{"class":104},"\"身高为：\"",[84,21400,6748],{"class":473},[84,21402,21403],{"class":477},"p1.m_Height",[84,21405,1517],{"class":473},[84,21407,1582],{"class":477},[84,21409,21410],{"class":328},"  \u002F\u002F18\n",[84,21412,21413,21415,21417],{"class":86,"line":10093},[84,21414,19760],{"class":477},[84,21416,7362],{"class":90},[84,21418,17844],{"class":477},[84,21420,21421,21423,21425,21428,21430,21432,21434,21436,21438,21441,21443,21445],{"class":86,"line":10117},[84,21422,1891],{"class":477},[84,21424,1517],{"class":473},[84,21426,21427],{"class":104},"\"p2的年龄为：\"",[84,21429,1517],{"class":473},[84,21431,19790],{"class":477},[84,21433,1517],{"class":473},[84,21435,21398],{"class":104},[84,21437,6748],{"class":473},[84,21439,21440],{"class":477},"p2.m_Height",[84,21442,1517],{"class":473},[84,21444,1582],{"class":477},[84,21446,21410],{"class":328},[84,21448,21449],{"class":86,"line":10122},[84,21450,13539],{"class":477},[84,21452,21453],{"class":86,"line":10127},[84,21454,1905],{"class":477},[84,21456,21457,21459,21461],{"class":86,"line":10132},[84,21458,481],{"class":473},[84,21460,2302],{"class":90},[84,21462,2305],{"class":477},[84,21464,21465],{"class":86,"line":10141},[84,21466,1886],{"class":477},[84,21468,21469,21471],{"class":86,"line":10146},[84,21470,5962],{"class":90},[84,21472,5965],{"class":477},[84,21474,21475],{"class":86,"line":10152},[84,21476,1905],{"class":477},[35,21478,21479],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[35,21481,21482],{},"浅拷贝带来的问题是堆区的内存重复释放",[35,21484,21485],{},[64,21486],{"alt":66,"src":21487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[35,21489,21490],{},"浅拷贝问题要使用深拷贝来解决",[35,21492,21493],{},[64,21494],{"alt":66,"src":21495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[35,21497,21498],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[23,21500,21502],{"id":21501},"_826初始化列表","8.2.6初始化列表",[35,21504,21505],{},"作用：初始化属性",[35,21507,5510],{},[75,21509,21512],{"className":21510,"code":21511,"language":5516},[5514],"构造函数():属性1(值1),属性2(值2).....{}\n",[81,21513,21511],{"__ignoreMap":66},[35,21515,21516],{},"例子",[75,21518,21520],{"className":464,"code":21519,"language":466,"meta":66,"style":66},"#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",[81,21521,21522,21528,21538,21544,21548,21553,21557,21562,21567,21572,21577,21582,21587,21591,21596,21601,21644,21653,21671,21689,21707,21711,21715,21722,21729,21736,21740,21744,21752,21756,21760,21780,21789,21793,21797,21807,21811,21819],{"__ignoreMap":66},[84,21523,21524,21526],{"class":86,"line":87},[84,21525,2279],{"class":473},[84,21527,2282],{"class":104},[84,21529,21530,21532,21534,21536],{"class":86,"line":98},[84,21531,2287],{"class":473},[84,21533,2290],{"class":473},[84,21535,2293],{"class":90},[84,21537,1634],{"class":477},[84,21539,21540,21542],{"class":86,"line":70},[84,21541,15023],{"class":473},[84,21543,15500],{"class":90},[84,21545,21546],{"class":86,"line":120},[84,21547,1886],{"class":477},[84,21549,21550],{"class":86,"line":131},[84,21551,21552],{"class":473},"    public:\n",[84,21554,21555],{"class":86,"line":145},[84,21556,2729],{"emptyLinePlaceholder":403},[84,21558,21559],{"class":86,"line":156},[84,21560,21561],{"class":328},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[84,21563,21564],{"class":86,"line":164},[84,21565,21566],{"class":328},"    \u002F\u002FPerson(int a, int b, int c) {\n",[84,21568,21569],{"class":86,"line":175},[84,21570,21571],{"class":328},"    \u002F\u002F  m_A = a;\n",[84,21573,21574],{"class":86,"line":185},[84,21575,21576],{"class":328},"    \u002F\u002F  m_B = b;\n",[84,21578,21579],{"class":86,"line":195},[84,21580,21581],{"class":328},"    \u002F\u002F  m_C = c;\n",[84,21583,21584],{"class":86,"line":206},[84,21585,21586],{"class":328},"    \u002F\u002F}\n",[84,21588,21589],{"class":86,"line":217},[84,21590,2729],{"emptyLinePlaceholder":403},[84,21592,21593],{"class":86,"line":227},[84,21594,21595],{"class":328},"    \u002F\u002F初始化列表方式初始化\n",[84,21597,21598],{"class":86,"line":238},[84,21599,21600],{"class":328},"    \u002F\u002F使用有参构造函数\n",[84,21602,21603,21605,21607,21609,21611,21613,21615,21617,21619,21621,21623,21626,21629,21632,21635,21638,21641],{"class":86,"line":249},[84,21604,18848],{"class":90},[84,21606,478],{"class":477},[84,21608,481],{"class":473},[84,21610,1739],{"class":5545},[84,21612,12764],{"class":477},[84,21614,481],{"class":473},[84,21616,3162],{"class":5545},[84,21618,12764],{"class":477},[84,21620,481],{"class":473},[84,21622,3178],{"class":5545},[84,21624,21625],{"class":477},") :",[84,21627,21628],{"class":90},"m_A",[84,21630,21631],{"class":477},"(a), ",[84,21633,21634],{"class":90},"m_B",[84,21636,21637],{"class":477},"(b), ",[84,21639,21640],{"class":90},"m_C",[84,21642,21643],{"class":477},"(c) {}\n",[84,21645,21646,21648,21651],{"class":86,"line":262},[84,21647,15238],{"class":473},[84,21649,21650],{"class":90}," PrintPerson",[84,21652,11182],{"class":477},[84,21654,21655,21657,21659,21662,21664,21667,21669],{"class":86,"line":273},[84,21656,9998],{"class":477},[84,21658,1517],{"class":473},[84,21660,21661],{"class":104}," \"mA:\"",[84,21663,1785],{"class":473},[84,21665,21666],{"class":477}," m_A ",[84,21668,1517],{"class":473},[84,21670,9169],{"class":477},[84,21672,21673,21675,21677,21680,21682,21685,21687],{"class":86,"line":283},[84,21674,9998],{"class":477},[84,21676,1517],{"class":473},[84,21678,21679],{"class":104}," \"mB:\"",[84,21681,1785],{"class":473},[84,21683,21684],{"class":477}," m_B ",[84,21686,1517],{"class":473},[84,21688,9169],{"class":477},[84,21690,21691,21693,21695,21698,21700,21703,21705],{"class":86,"line":294},[84,21692,9998],{"class":477},[84,21694,1517],{"class":473},[84,21696,21697],{"class":104}," \"mC:\"",[84,21699,1785],{"class":473},[84,21701,21702],{"class":477}," m_C ",[84,21704,1517],{"class":473},[84,21706,9169],{"class":477},[84,21708,21709],{"class":86,"line":2028},[84,21710,2516],{"class":477},[84,21712,21713],{"class":86,"line":2057},[84,21714,15551],{"class":473},[84,21716,21717,21719],{"class":86,"line":2062},[84,21718,2314],{"class":473},[84,21720,21721],{"class":477}," m_A;\n",[84,21723,21724,21726],{"class":86,"line":2079},[84,21725,2314],{"class":473},[84,21727,21728],{"class":477}," m_B;\n",[84,21730,21731,21733],{"class":86,"line":2084},[84,21732,2314],{"class":473},[84,21734,21735],{"class":477}," m_C;\n",[84,21737,21738],{"class":86,"line":2089},[84,21739,4324],{"class":477},[84,21741,21742],{"class":86,"line":2094},[84,21743,2729],{"emptyLinePlaceholder":403},[84,21745,21746,21748,21750],{"class":86,"line":2108},[84,21747,481],{"class":473},[84,21749,2302],{"class":90},[84,21751,6307],{"class":477},[84,21753,21754],{"class":86,"line":2113},[84,21755,1886],{"class":477},[84,21757,21758],{"class":86,"line":2906},[84,21759,2729],{"emptyLinePlaceholder":403},[84,21761,21762,21764,21766,21768,21770,21772,21774,21776,21778],{"class":86,"line":2920},[84,21763,19760],{"class":477},[84,21765,35],{"class":90},[84,21767,478],{"class":477},[84,21769,692],{"class":94},[84,21771,12764],{"class":477},[84,21773,553],{"class":94},[84,21775,12764],{"class":477},[84,21777,547],{"class":94},[84,21779,3048],{"class":477},[84,21781,21782,21784,21787],{"class":86,"line":2928},[84,21783,16195],{"class":477},[84,21785,21786],{"class":90},"PrintPerson",[84,21788,5965],{"class":477},[84,21790,21791],{"class":86,"line":2933},[84,21792,2729],{"emptyLinePlaceholder":403},[84,21794,21795],{"class":86,"line":2939},[84,21796,2729],{"emptyLinePlaceholder":403},[84,21798,21799,21801,21803,21805],{"class":86,"line":2945},[84,21800,2632],{"class":90},[84,21802,478],{"class":477},[84,21804,2637],{"class":104},[84,21806,3048],{"class":477},[84,21808,21809],{"class":86,"line":2950},[84,21810,2729],{"emptyLinePlaceholder":403},[84,21812,21813,21815,21817],{"class":86,"line":8277},[84,21814,4419],{"class":473},[84,21816,4422],{"class":94},[84,21818,1634],{"class":477},[84,21820,21821],{"class":86,"line":8301},[84,21822,1905],{"class":477},[35,21824,21825,21826,21829,21830],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[624,21827,21828],{},"参数名就是定义的对象属性","，",[624,21831,21832],{},"属性后面的值为有参构造函数的形参",[75,21834,21836],{"className":464,"code":21835,"language":466,"meta":66,"style":66},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[81,21837,21838],{"__ignoreMap":66},[84,21839,21840,21842,21844,21846,21849,21851,21854,21856,21859,21861,21864,21866,21869,21871],{"class":86,"line":87},[84,21841,19375],{"class":90},[84,21843,478],{"class":477},[84,21845,481],{"class":473},[84,21847,21848],{"class":477}," a.",[84,21850,481],{"class":473},[84,21852,21853],{"class":477}," b,",[84,21855,481],{"class":473},[84,21857,21858],{"class":477}," b):",[84,21860,21628],{"class":90},[84,21862,21863],{"class":477},"(a),",[84,21865,21634],{"class":90},[84,21867,21868],{"class":477},"(c),",[84,21870,21640],{"class":90},[84,21872,21873],{"class":477},"(b) {}\n",[23,21875,21877],{"id":21876},"_827类对象作为类成员","8.2.7类对象作为类成员",[35,21879,21880],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[35,21882,14962],{},[75,21884,21886],{"className":464,"code":21885,"language":466,"meta":66,"style":66},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[81,21887,21888,21893,21898,21902,21907,21911],{"__ignoreMap":66},[84,21889,21890],{"class":86,"line":87},[84,21891,21892],{"class":477},"A{};\n",[84,21894,21895],{"class":86,"line":98},[84,21896,21897],{"class":477},"B\n",[84,21899,21900],{"class":86,"line":70},[84,21901,1886],{"class":477},[84,21903,21904],{"class":86,"line":120},[84,21905,21906],{"class":477},"    A a;\n",[84,21908,21909],{"class":86,"line":131},[84,21910,1905],{"class":477},[84,21912,21913],{"class":86,"line":145},[84,21914,21915],{"class":328},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[35,21917,21918],{},"案例",[75,21920,21922],{"className":464,"code":21921,"language":466,"meta":66,"style":66},"\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",[81,21923,21924,21929,21936,21940,21945,21950,21964,21968,21978,21989,21993,22000,22004,22017,22021,22026,22031,22035,22041,22045,22049,22053,22084,22088,22099,22103,22109,22113,22126,22130,22134,22138,22143,22148,22152,22160,22164,22181,22200,22204,22212,22216,22222],{"__ignoreMap":66},[84,21925,21926],{"class":86,"line":87},[84,21927,21928],{"class":328},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[84,21930,21931,21933],{"class":86,"line":98},[84,21932,15023],{"class":473},[84,21934,21935],{"class":90}," Phone\n",[84,21937,21938],{"class":86,"line":70},[84,21939,1886],{"class":477},[84,21941,21942],{"class":86,"line":120},[84,21943,21944],{"class":477},"public：\n",[84,21946,21947],{"class":86,"line":131},[84,21948,21949],{"class":328},"    \u002F\u002F 赋值(构造函数)\n",[84,21951,21952,21955,21957,21959,21962],{"class":86,"line":145},[84,21953,21954],{"class":90},"    Phone",[84,21956,478],{"class":477},[84,21958,15246],{"class":90},[84,21960,21961],{"class":5545}," pName",[84,21963,484],{"class":477},[84,21965,21966],{"class":86,"line":156},[84,21967,2359],{"class":477},[84,21969,21970,21973,21975],{"class":86,"line":164},[84,21971,21972],{"class":477},"        m_pName",[84,21974,523],{"class":473},[84,21976,21977],{"class":477},"pName;\n",[84,21979,21980,21982,21984,21987],{"class":86,"line":175},[84,21981,3780],{"class":477},[84,21983,1517],{"class":473},[84,21985,21986],{"class":104},"\"Phone的构造函数调用\"",[84,21988,1634],{"class":477},[84,21990,21991],{"class":86,"line":185},[84,21992,2516],{"class":477},[84,21994,21995,21998],{"class":86,"line":195},[84,21996,21997],{"class":90},"    ~Phone",[84,21999,2305],{"class":477},[84,22001,22002],{"class":86,"line":206},[84,22003,2359],{"class":477},[84,22005,22006,22008,22010,22013,22015],{"class":86,"line":217},[84,22007,3780],{"class":477},[84,22009,1517],{"class":473},[84,22011,22012],{"class":104},"\"Phone析构函数调用\"",[84,22014,1517],{"class":473},[84,22016,1539],{"class":477},[84,22018,22019],{"class":86,"line":227},[84,22020,2516],{"class":477},[84,22022,22023],{"class":86,"line":238},[84,22024,22025],{"class":328},"    \u002F\u002F\n",[84,22027,22028],{"class":86,"line":249},[84,22029,22030],{"class":477},"    string m_PName;\n",[84,22032,22033],{"class":86,"line":262},[84,22034,4324],{"class":477},[84,22036,22037,22039],{"class":86,"line":273},[84,22038,15023],{"class":473},[84,22040,15500],{"class":90},[84,22042,22043],{"class":86,"line":283},[84,22044,1886],{"class":477},[84,22046,22047],{"class":86,"line":294},[84,22048,15045],{"class":473},[84,22050,22051],{"class":86,"line":2028},[84,22052,17323],{"class":328},[84,22054,22055,22057,22059,22061,22063,22065,22067,22070,22073,22075,22078,22081],{"class":86,"line":2057},[84,22056,18848],{"class":90},[84,22058,478],{"class":477},[84,22060,15246],{"class":90},[84,22062,15249],{"class":5545},[84,22064,851],{"class":477},[84,22066,15246],{"class":90},[84,22068,22069],{"class":5545}," pname",[84,22071,22072],{"class":477},"):",[84,22074,15339],{"class":90},[84,22076,22077],{"class":477},"(name),m_phone.",[84,22079,22080],{"class":90},"m_PName",[84,22082,22083],{"class":477},"(pname) \n",[84,22085,22086],{"class":86,"line":2062},[84,22087,2359],{"class":477},[84,22089,22090,22092,22094,22097],{"class":86,"line":2079},[84,22091,3780],{"class":477},[84,22093,1517],{"class":473},[84,22095,22096],{"class":104},"\"Person的构造函数调用\"",[84,22098,1634],{"class":477},[84,22100,22101],{"class":86,"line":2084},[84,22102,2516],{"class":477},[84,22104,22105,22107],{"class":86,"line":2089},[84,22106,18881],{"class":90},[84,22108,2305],{"class":477},[84,22110,22111],{"class":86,"line":2094},[84,22112,2359],{"class":477},[84,22114,22115,22117,22119,22122,22124],{"class":86,"line":2108},[84,22116,3780],{"class":477},[84,22118,1517],{"class":473},[84,22120,22121],{"class":104},"\"Person析构函数调用\"",[84,22123,1517],{"class":473},[84,22125,1539],{"class":477},[84,22127,22128],{"class":86,"line":2113},[84,22129,2516],{"class":477},[84,22131,22132],{"class":86,"line":2906},[84,22133,8109],{"class":328},[84,22135,22136],{"class":86,"line":2920},[84,22137,15221],{"class":477},[84,22139,22140],{"class":86,"line":2928},[84,22141,22142],{"class":328},"    \u002F\u002F手机\n",[84,22144,22145],{"class":86,"line":2933},[84,22146,22147],{"class":477},"    Phone m_Phone;\n",[84,22149,22150],{"class":86,"line":2939},[84,22151,4324],{"class":477},[84,22153,22154,22156,22158],{"class":86,"line":2945},[84,22155,5693],{"class":473},[84,22157,5917],{"class":90},[84,22159,2305],{"class":477},[84,22161,22162],{"class":86,"line":2950},[84,22163,1886],{"class":477},[84,22165,22166,22168,22170,22172,22174,22176,22179],{"class":86,"line":8277},[84,22167,19760],{"class":477},[84,22169,35],{"class":90},[84,22171,478],{"class":477},[84,22173,8245],{"class":104},[84,22175,851],{"class":477},[84,22177,22178],{"class":104},"\"安卓\"",[84,22180,3048],{"class":477},[84,22182,22183,22185,22187,22190,22192,22195,22197],{"class":86,"line":8301},[84,22184,1891],{"class":477},[84,22186,1517],{"class":473},[84,22188,22189],{"class":477},"p.Name",[84,22191,1517],{"class":473},[84,22193,22194],{"class":104},"\"拿着：\"",[84,22196,1517],{"class":473},[84,22198,22199],{"class":477},"p.m_phone.m_PName;\n",[84,22201,22202],{"class":86,"line":8306},[84,22203,1905],{"class":477},[84,22205,22206,22208,22210],{"class":86,"line":8312},[84,22207,481],{"class":473},[84,22209,2302],{"class":90},[84,22211,2305],{"class":477},[84,22213,22214],{"class":86,"line":8339},[84,22215,1886],{"class":477},[84,22217,22218,22220],{"class":86,"line":8344},[84,22219,5962],{"class":90},[84,22221,5965],{"class":477},[84,22223,22224],{"class":86,"line":8350},[84,22225,1905],{"class":477},[35,22227,9354],{},[75,22229,22231],{"className":464,"code":22230,"language":466,"meta":66,"style":66},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[81,22232,22233,22238],{"__ignoreMap":66},[84,22234,22235],{"class":86,"line":87},[84,22236,22237],{"class":328},"    \u002F\u002F不需要写这个：\n",[84,22239,22240],{"class":86,"line":98},[84,22241,22242],{"class":328},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[35,22244,22245],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[75,22247,22249],{"className":464,"code":22248,"language":466,"meta":66,"style":66},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[81,22250,22251],{"__ignoreMap":66},[84,22252,22253,22255,22258,22260,22263,22266],{"class":86,"line":87},[84,22254,19375],{"class":90},[84,22256,22257],{"class":477},"(string name.string pname):",[84,22259,15339],{"class":90},[84,22261,22262],{"class":477},"(name),",[84,22264,22265],{"class":90},"m_phone",[84,22267,22268],{"class":477},"(pname) {}\n",[35,22270,22271,22272,523,22275],{},"采用的是隐式转换法，实际为如下：\n",[81,22273,22274],{},"m_phone(pname)",[81,22276,22277],{},"Phone m_phone=pname",[35,22279,22280,22283],{},[624,22281,22282],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[35,22285,22286],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[23,22288,22290],{"id":22289},"_828静态对象","8.2.8静态对象",[35,22292,22293],{},"静态对象在成员对象前static，称为静态对象",[35,22295,22296],{},"静态对象分为两类：",[28,22298,22299],{},[31,22300,22301],{},"静态成员变量",[1480,22303,22304,22307,22310],{},[31,22305,22306],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[31,22308,22309],{},"②在编译阶段分配内存",[31,22311,22312],{},"③类内声明，类外初始化",[28,22314,22315],{"start":98},[31,22316,22317],{},"静态成员函数",[1480,22319,22320,22323],{},[31,22321,22322],{},"①所有对象共享同一个函数",[31,22324,22325],{},"②静态成员函数只能访问静态成员变量",[22327,22328,22330],"h4",{"id":22329},"_8281静态成员变量","8.2.8.1静态成员变量",[75,22332,22334],{"className":464,"code":22333,"language":466,"meta":66,"style":66},"#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",[81,22335,22336,22342,22352,22358,22362,22366,22371,22376,22381,22389,22393,22397,22401,22409,22413,22417,22422,22435,22439,22447,22451,22457],{"__ignoreMap":66},[84,22337,22338,22340],{"class":86,"line":87},[84,22339,2279],{"class":473},[84,22341,2282],{"class":104},[84,22343,22344,22346,22348,22350],{"class":86,"line":98},[84,22345,2287],{"class":473},[84,22347,2290],{"class":473},[84,22349,2293],{"class":90},[84,22351,1634],{"class":477},[84,22353,22354,22356],{"class":86,"line":70},[84,22355,15023],{"class":473},[84,22357,15500],{"class":90},[84,22359,22360],{"class":86,"line":120},[84,22361,1886],{"class":477},[84,22363,22364],{"class":86,"line":131},[84,22365,15045],{"class":473},[84,22367,22368],{"class":86,"line":145},[84,22369,22370],{"class":328},"    \u002F\u002F非静态成员变量\n",[84,22372,22373],{"class":86,"line":156},[84,22374,22375],{"class":328},"    \u002F\u002F int m_A;\n",[84,22377,22378],{"class":86,"line":164},[84,22379,22380],{"class":328},"    \u002F\u002F定义静态成员变量\n",[84,22382,22383,22385,22387],{"class":86,"line":175},[84,22384,11349],{"class":473},[84,22386,2711],{"class":473},[84,22388,21721],{"class":477},[84,22390,22391],{"class":86,"line":185},[84,22392,2729],{"emptyLinePlaceholder":403},[84,22394,22395],{"class":86,"line":195},[84,22396,2729],{"emptyLinePlaceholder":403},[84,22398,22399],{"class":86,"line":206},[84,22400,4324],{"class":477},[84,22402,22403,22405,22407],{"class":86,"line":217},[84,22404,5693],{"class":473},[84,22406,5917],{"class":90},[84,22408,2305],{"class":477},[84,22410,22411],{"class":86,"line":227},[84,22412,1886],{"class":477},[84,22414,22415],{"class":86,"line":238},[84,22416,15642],{"class":477},[84,22418,22419],{"class":86,"line":249},[84,22420,22421],{"class":328},"    \u002F\u002F输出类成员变量这块内存\n",[84,22423,22424,22426,22428,22431,22433],{"class":86,"line":262},[84,22425,1891],{"class":477},[84,22427,1517],{"class":473},[84,22429,22430],{"class":477},"p.m_A",[84,22432,1517],{"class":473},[84,22434,1539],{"class":477},[84,22436,22437],{"class":86,"line":273},[84,22438,1905],{"class":477},[84,22440,22441,22443,22445],{"class":86,"line":283},[84,22442,481],{"class":473},[84,22444,2302],{"class":90},[84,22446,2305],{"class":477},[84,22448,22449],{"class":86,"line":294},[84,22450,1886],{"class":477},[84,22452,22453,22455],{"class":86,"line":2028},[84,22454,5962],{"class":90},[84,22456,2305],{"class":477},[84,22458,22459],{"class":86,"line":2057},[84,22460,1905],{"class":477},[35,22462,22463],{},"此时输出是报错的：无法解析外部命令",[35,22465,22466],{},"解决这一问题：必须用到类内声明，类外初始化操作",[75,22468,22470],{"className":464,"code":22469,"language":466,"meta":66,"style":66},"#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",[81,22471,22472,22478,22488,22494,22498,22502,22507,22515,22519,22524,22539,22547,22551,22555,22560,22565,22577,22582,22593,22598,22603,22616,22620,22628,22632,22638],{"__ignoreMap":66},[84,22473,22474,22476],{"class":86,"line":87},[84,22475,2279],{"class":473},[84,22477,2282],{"class":104},[84,22479,22480,22482,22484,22486],{"class":86,"line":98},[84,22481,2287],{"class":473},[84,22483,2290],{"class":473},[84,22485,2293],{"class":90},[84,22487,1634],{"class":477},[84,22489,22490,22492],{"class":86,"line":70},[84,22491,15023],{"class":473},[84,22493,15500],{"class":90},[84,22495,22496],{"class":86,"line":120},[84,22497,1886],{"class":477},[84,22499,22500],{"class":86,"line":131},[84,22501,15045],{"class":473},[84,22503,22504],{"class":86,"line":145},[84,22505,22506],{"class":328},"    \u002F\u002F类内声明\n",[84,22508,22509,22511,22513],{"class":86,"line":156},[84,22510,11349],{"class":473},[84,22512,2711],{"class":473},[84,22514,21721],{"class":477},[84,22516,22517],{"class":86,"line":164},[84,22518,4324],{"class":477},[84,22520,22521],{"class":86,"line":175},[84,22522,22523],{"class":328},"\u002F\u002F类外初始化\n",[84,22525,22526,22528,22530,22533,22535,22537],{"class":86,"line":185},[84,22527,481],{"class":473},[84,22529,15898],{"class":90},[84,22531,22532],{"class":477},"::m_A",[84,22534,523],{"class":473},[84,22536,919],{"class":94},[84,22538,1634],{"class":477},[84,22540,22541,22543,22545],{"class":86,"line":195},[84,22542,5693],{"class":473},[84,22544,5917],{"class":90},[84,22546,2305],{"class":477},[84,22548,22549],{"class":86,"line":206},[84,22550,1886],{"class":477},[84,22552,22553],{"class":86,"line":217},[84,22554,15642],{"class":477},[84,22556,22557],{"class":86,"line":227},[84,22558,22559],{"class":328},"    \u002F\u002F访问变量的原内存空间\n",[84,22561,22562],{"class":86,"line":238},[84,22563,22564],{"class":328},"    \u002F\u002F100\n",[84,22566,22567,22569,22571,22573,22575],{"class":86,"line":249},[84,22568,1891],{"class":477},[84,22570,1517],{"class":473},[84,22572,22430],{"class":477},[84,22574,1517],{"class":473},[84,22576,1539],{"class":477},[84,22578,22579],{"class":86,"line":262},[84,22580,22581],{"class":477},"    Person p2;\n",[84,22583,22584,22587,22589,22591],{"class":86,"line":273},[84,22585,22586],{"class":477},"    p2.m_A",[84,22588,523],{"class":473},[84,22590,2052],{"class":94},[84,22592,1634],{"class":477},[84,22594,22595],{"class":86,"line":283},[84,22596,22597],{"class":328},"    \u002F\u002F继续访问这片空间\n",[84,22599,22600],{"class":86,"line":294},[84,22601,22602],{"class":328},"    \u002F\u002F200\n",[84,22604,22605,22607,22609,22612,22614],{"class":86,"line":2028},[84,22606,1891],{"class":477},[84,22608,1517],{"class":473},[84,22610,22611],{"class":477},"p2.m_A",[84,22613,1517],{"class":473},[84,22615,1539],{"class":477},[84,22617,22618],{"class":86,"line":2057},[84,22619,1905],{"class":477},[84,22621,22622,22624,22626],{"class":86,"line":2062},[84,22623,481],{"class":473},[84,22625,2302],{"class":90},[84,22627,2305],{"class":477},[84,22629,22630],{"class":86,"line":2079},[84,22631,1886],{"class":477},[84,22633,22634,22636],{"class":86,"line":2084},[84,22635,5962],{"class":90},[84,22637,5965],{"class":477},[84,22639,22640],{"class":86,"line":2089},[84,22641,1905],{"class":477},[35,22643,22644],{},[624,22645,22646],{},"静态变量的访问",[75,22648,22650],{"className":464,"code":22649,"language":466,"meta":66,"style":66},"#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",[81,22651,22652,22658,22668,22674,22678,22682,22686,22694,22698,22703,22711,22715,22719,22733,22748,22756,22760,22765,22770,22775,22780,22792,22797,22802,22816,22833,22837,22845,22849,22855],{"__ignoreMap":66},[84,22653,22654,22656],{"class":86,"line":87},[84,22655,2279],{"class":473},[84,22657,2282],{"class":104},[84,22659,22660,22662,22664,22666],{"class":86,"line":98},[84,22661,2287],{"class":473},[84,22663,2290],{"class":473},[84,22665,2293],{"class":90},[84,22667,1634],{"class":477},[84,22669,22670,22672],{"class":86,"line":70},[84,22671,15023],{"class":473},[84,22673,15500],{"class":90},[84,22675,22676],{"class":86,"line":120},[84,22677,1886],{"class":477},[84,22679,22680],{"class":86,"line":131},[84,22681,15045],{"class":473},[84,22683,22684],{"class":86,"line":145},[84,22685,22506],{"class":328},[84,22687,22688,22690,22692],{"class":86,"line":156},[84,22689,11349],{"class":473},[84,22691,2711],{"class":473},[84,22693,21721],{"class":477},[84,22695,22696],{"class":86,"line":164},[84,22697,15551],{"class":473},[84,22699,22700],{"class":86,"line":175},[84,22701,22702],{"class":328},"    \u002F\u002F静态成员变量也是有访问权限的\n",[84,22704,22705,22707,22709],{"class":86,"line":185},[84,22706,11349],{"class":473},[84,22708,2711],{"class":473},[84,22710,21728],{"class":477},[84,22712,22713],{"class":86,"line":195},[84,22714,4324],{"class":477},[84,22716,22717],{"class":86,"line":206},[84,22718,22523],{"class":328},[84,22720,22721,22723,22725,22727,22729,22731],{"class":86,"line":217},[84,22722,481],{"class":473},[84,22724,15898],{"class":90},[84,22726,22532],{"class":477},[84,22728,523],{"class":473},[84,22730,919],{"class":94},[84,22732,1634],{"class":477},[84,22734,22735,22737,22739,22742,22744,22746],{"class":86,"line":227},[84,22736,481],{"class":473},[84,22738,15898],{"class":90},[84,22740,22741],{"class":477},"::m_B",[84,22743,523],{"class":473},[84,22745,1173],{"class":94},[84,22747,1634],{"class":477},[84,22749,22750,22752,22754],{"class":86,"line":238},[84,22751,5693],{"class":473},[84,22753,5986],{"class":90},[84,22755,2305],{"class":477},[84,22757,22758],{"class":86,"line":249},[84,22759,1886],{"class":477},[84,22761,22762],{"class":86,"line":262},[84,22763,22764],{"class":328},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[84,22766,22767],{"class":86,"line":273},[84,22768,22769],{"class":328},"    \u002F\u002F静态成员变量有两种访问方式：\n",[84,22771,22772],{"class":86,"line":283},[84,22773,22774],{"class":328},"    \u002F\u002F1.通过对象进行访问\n",[84,22776,22777],{"class":86,"line":294},[84,22778,22779],{"class":477},"    Person p;  \n",[84,22781,22782,22784,22786,22788,22790],{"class":86,"line":2028},[84,22783,1891],{"class":477},[84,22785,1517],{"class":473},[84,22787,22430],{"class":477},[84,22789,1517],{"class":473},[84,22791,1539],{"class":477},[84,22793,22794],{"class":86,"line":2057},[84,22795,22796],{"class":328},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[84,22798,22799],{"class":86,"line":2062},[84,22800,22801],{"class":328},"    \u002F\u002F2.通过类名进行访问\n",[84,22803,22804,22806,22808,22810,22812,22814],{"class":86,"line":2079},[84,22805,1891],{"class":477},[84,22807,1517],{"class":473},[84,22809,19375],{"class":90},[84,22811,22532],{"class":477},[84,22813,1517],{"class":473},[84,22815,1539],{"class":477},[84,22817,22818,22820,22822,22824,22826,22828,22830],{"class":86,"line":2084},[84,22819,1891],{"class":477},[84,22821,1517],{"class":473},[84,22823,19375],{"class":90},[84,22825,22741],{"class":477},[84,22827,1517],{"class":473},[84,22829,1582],{"class":477},[84,22831,22832],{"class":328}," \u002F\u002F没有访问权限，报错\n",[84,22834,22835],{"class":86,"line":2089},[84,22836,1905],{"class":477},[84,22838,22839,22841,22843],{"class":86,"line":2094},[84,22840,481],{"class":473},[84,22842,2302],{"class":90},[84,22844,2305],{"class":477},[84,22846,22847],{"class":86,"line":2108},[84,22848,1886],{"class":477},[84,22850,22851,22853],{"class":86,"line":2113},[84,22852,6031],{"class":90},[84,22854,5965],{"class":477},[84,22856,22857],{"class":86,"line":2906},[84,22858,1905],{"class":477},[22327,22860,22862],{"id":22861},"_8282静态成员函数","8.2.8.2静态成员函数",[35,22864,22865],{},"1.静态成员函数定义与访问",[75,22867,22869],{"className":464,"code":22868,"language":466,"meta":66,"style":66},"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",[81,22870,22871,22877,22881,22885,22890,22901,22905,22919,22923,22927,22935,22939,22944,22949,22953,22961,22966,22976],{"__ignoreMap":66},[84,22872,22873,22875],{"class":86,"line":87},[84,22874,15023],{"class":473},[84,22876,15500],{"class":90},[84,22878,22879],{"class":86,"line":98},[84,22880,1886],{"class":477},[84,22882,22883],{"class":86,"line":70},[84,22884,15045],{"class":473},[84,22886,22887],{"class":86,"line":120},[84,22888,22889],{"class":328},"    \u002F\u002F在公共权限下定义静态成员函数\n",[84,22891,22892,22894,22897,22899],{"class":86,"line":131},[84,22893,11349],{"class":473},[84,22895,22896],{"class":473}," void",[84,22898,11714],{"class":90},[84,22900,2305],{"class":477},[84,22902,22903],{"class":86,"line":145},[84,22904,2359],{"class":477},[84,22906,22907,22910,22912,22915,22917],{"class":86,"line":156},[84,22908,22909],{"class":477},"        coout",[84,22911,1517],{"class":473},[84,22913,22914],{"class":104},"\"静态成员函数的调用\"",[84,22916,1517],{"class":473},[84,22918,1539],{"class":477},[84,22920,22921],{"class":86,"line":164},[84,22922,2516],{"class":477},[84,22924,22925],{"class":86,"line":175},[84,22926,4324],{"class":477},[84,22928,22929,22931,22933],{"class":86,"line":185},[84,22930,5693],{"class":473},[84,22932,5917],{"class":90},[84,22934,2305],{"class":477},[84,22936,22937],{"class":86,"line":195},[84,22938,1886],{"class":477},[84,22940,22941],{"class":86,"line":206},[84,22942,22943],{"class":328},"    \u002F\u002F静态成员函数的调用方式:\n",[84,22945,22946],{"class":86,"line":217},[84,22947,22948],{"class":328},"    \u002F\u002F1.通过对象访问\n",[84,22950,22951],{"class":86,"line":227},[84,22952,15642],{"class":477},[84,22954,22955,22957,22959],{"class":86,"line":238},[84,22956,16195],{"class":477},[84,22958,11880],{"class":90},[84,22960,5965],{"class":477},[84,22962,22963],{"class":86,"line":249},[84,22964,22965],{"class":328},"    \u002F\u002F2.通过类名访问\n",[84,22967,22968,22970,22972,22974],{"class":86,"line":262},[84,22969,18848],{"class":90},[84,22971,18061],{"class":477},[84,22973,11880],{"class":90},[84,22975,5965],{"class":477},[84,22977,22978],{"class":86,"line":273},[84,22979,1905],{"class":477},[28,22981,22982],{"start":98},[31,22983,22984],{},"静态成员函数只能访问静态成员变量",[75,22986,22988],{"className":464,"code":22987,"language":466,"meta":66,"style":66},"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",[81,22989,22990,22996,23000,23004,23008,23018,23022,23036,23041,23053,23057,23068,23078,23082,23086,23090,23100,23104,23117,23121,23125,23129,23133,23147,23155,23159,23163,23167,23171,23179,23183,23193,23198,23202,23210,23214,23220],{"__ignoreMap":66},[84,22991,22992,22994],{"class":86,"line":87},[84,22993,15023],{"class":473},[84,22995,15500],{"class":90},[84,22997,22998],{"class":86,"line":98},[84,22999,1886],{"class":477},[84,23001,23002],{"class":86,"line":70},[84,23003,15045],{"class":473},[84,23005,23006],{"class":86,"line":120},[84,23007,22889],{"class":328},[84,23009,23010,23012,23014,23016],{"class":86,"line":131},[84,23011,11349],{"class":473},[84,23013,22896],{"class":473},[84,23015,11714],{"class":90},[84,23017,2305],{"class":477},[84,23019,23020],{"class":86,"line":145},[84,23021,2359],{"class":477},[84,23023,23024,23027,23029,23031,23033],{"class":86,"line":156},[84,23025,23026],{"class":477},"        m_A",[84,23028,523],{"class":473},[84,23030,784],{"class":94},[84,23032,532],{"class":477},[84,23034,23035],{"class":328}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[84,23037,23038],{"class":86,"line":164},[84,23039,23040],{"class":328},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[84,23042,23043,23045,23047,23049,23051],{"class":86,"line":175},[84,23044,22909],{"class":477},[84,23046,1517],{"class":473},[84,23048,22914],{"class":104},[84,23050,1517],{"class":473},[84,23052,1539],{"class":477},[84,23054,23055],{"class":86,"line":185},[84,23056,2516],{"class":477},[84,23058,23059,23061,23063,23065],{"class":86,"line":195},[84,23060,11349],{"class":473},[84,23062,2711],{"class":473},[84,23064,15777],{"class":477},[84,23066,23067],{"class":328}," \u002F\u002F静态成员变量\n",[84,23069,23070,23072,23075],{"class":86,"line":206},[84,23071,2314],{"class":473},[84,23073,23074],{"class":477}," m_B;",[84,23076,23077],{"class":328}," \u002F\u002F非静态成员变量\n",[84,23079,23080],{"class":86,"line":217},[84,23081,2729],{"emptyLinePlaceholder":403},[84,23083,23084],{"class":86,"line":227},[84,23085,15551],{"class":473},[84,23087,23088],{"class":86,"line":238},[84,23089,22702],{"class":328},[84,23091,23092,23094,23096,23098],{"class":86,"line":249},[84,23093,11349],{"class":473},[84,23095,22896],{"class":473},[84,23097,13947],{"class":90},[84,23099,2305],{"class":477},[84,23101,23102],{"class":86,"line":262},[84,23103,2359],{"class":477},[84,23105,23106,23108,23110,23113,23115],{"class":86,"line":273},[84,23107,3780],{"class":477},[84,23109,1517],{"class":473},[84,23111,23112],{"class":104},"\"这是私有权限下的静态函数调用\"",[84,23114,1517],{"class":473},[84,23116,1539],{"class":477},[84,23118,23119],{"class":86,"line":283},[84,23120,2516],{"class":477},[84,23122,23123],{"class":86,"line":294},[84,23124,2729],{"emptyLinePlaceholder":403},[84,23126,23127],{"class":86,"line":2028},[84,23128,2729],{"emptyLinePlaceholder":403},[84,23130,23131],{"class":86,"line":2057},[84,23132,4324],{"class":477},[84,23134,23135,23137,23139,23141,23143,23145],{"class":86,"line":2062},[84,23136,481],{"class":473},[84,23138,15898],{"class":90},[84,23140,22532],{"class":477},[84,23142,523],{"class":473},[84,23144,666],{"class":94},[84,23146,1634],{"class":477},[84,23148,23149,23151,23153],{"class":86,"line":2079},[84,23150,5693],{"class":473},[84,23152,5917],{"class":90},[84,23154,2305],{"class":477},[84,23156,23157],{"class":86,"line":2084},[84,23158,1886],{"class":477},[84,23160,23161],{"class":86,"line":2089},[84,23162,22943],{"class":328},[84,23164,23165],{"class":86,"line":2094},[84,23166,22948],{"class":328},[84,23168,23169],{"class":86,"line":2108},[84,23170,15642],{"class":477},[84,23172,23173,23175,23177],{"class":86,"line":2113},[84,23174,16195],{"class":477},[84,23176,11880],{"class":90},[84,23178,5965],{"class":477},[84,23180,23181],{"class":86,"line":2906},[84,23182,22965],{"class":328},[84,23184,23185,23187,23189,23191],{"class":86,"line":2920},[84,23186,18848],{"class":90},[84,23188,18061],{"class":477},[84,23190,11880],{"class":90},[84,23192,5965],{"class":477},[84,23194,23195],{"class":86,"line":2928},[84,23196,23197],{"class":328},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[84,23199,23200],{"class":86,"line":2933},[84,23201,1905],{"class":477},[84,23203,23204,23206,23208],{"class":86,"line":2939},[84,23205,481],{"class":473},[84,23207,2302],{"class":90},[84,23209,2305],{"class":477},[84,23211,23212],{"class":86,"line":2945},[84,23213,1886],{"class":477},[84,23215,23216,23218],{"class":86,"line":2950},[84,23217,5962],{"class":90},[84,23219,5965],{"class":477},[84,23221,23222],{"class":86,"line":8277},[84,23223,1905],{"class":477},[23,23225,23227],{"id":23226},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22327,23229,23231],{"id":23230},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[35,23233,23234],{},"在c++中，类内的成员变量和成员函数分开存储",[35,23236,23237],{},"只有非静态成员变量才属于类的对象上",[23239,23240,23242],"h5",{"id":23241},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[75,23244,23246],{"className":464,"code":23245,"language":466,"meta":66,"style":66},"#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",[81,23247,23248,23255,23265,23271,23275,23279,23283,23291,23295,23299,23322,23326,23334,23338,23344],{"__ignoreMap":66},[84,23249,23250,23252],{"class":86,"line":87},[84,23251,2279],{"class":473},[84,23253,23254],{"class":104},"\u003Ciostraem>\n",[84,23256,23257,23259,23261,23263],{"class":86,"line":98},[84,23258,2287],{"class":473},[84,23260,2290],{"class":473},[84,23262,2293],{"class":90},[84,23264,1634],{"class":477},[84,23266,23267,23269],{"class":86,"line":70},[84,23268,15023],{"class":473},[84,23270,15500],{"class":90},[84,23272,23273],{"class":86,"line":120},[84,23274,1886],{"class":477},[84,23276,23277],{"class":86,"line":131},[84,23278,2729],{"emptyLinePlaceholder":403},[84,23280,23281],{"class":86,"line":145},[84,23282,4324],{"class":477},[84,23284,23285,23287,23289],{"class":86,"line":156},[84,23286,5693],{"class":473},[84,23288,5917],{"class":90},[84,23290,2305],{"class":477},[84,23292,23293],{"class":86,"line":164},[84,23294,1886],{"class":477},[84,23296,23297],{"class":86,"line":175},[84,23298,15642],{"class":477},[84,23300,23301,23303,23305,23308,23310,23313,23315,23317,23319],{"class":86,"line":185},[84,23302,1891],{"class":477},[84,23304,1517],{"class":473},[84,23306,23307],{"class":104},"\"size of p=\"",[84,23309,1517],{"class":473},[84,23311,23312],{"class":90},"sizeoif",[84,23314,6868],{"class":477},[84,23316,1517],{"class":473},[84,23318,1582],{"class":477},[84,23320,23321],{"class":328}," \u002F\u002F查看这个空类的占用的内存空间\n",[84,23323,23324],{"class":86,"line":195},[84,23325,1905],{"class":477},[84,23327,23328,23330,23332],{"class":86,"line":206},[84,23329,481],{"class":473},[84,23331,2302],{"class":90},[84,23333,2305],{"class":477},[84,23335,23336],{"class":86,"line":217},[84,23337,1886],{"class":477},[84,23339,23340,23342],{"class":86,"line":227},[84,23341,5962],{"class":90},[84,23343,5965],{"class":477},[84,23345,23346],{"class":86,"line":238},[84,23347,1905],{"class":477},[35,23349,23350],{},"输出结果为：size of p=1",[35,23352,23353],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[35,23355,23356],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23239,23358,23360],{"id":23359},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[75,23362,23364],{"className":464,"code":23363,"language":466,"meta":66,"style":66},"#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",[81,23365,23366,23372,23382,23390,23394,23403,23407,23415,23419,23423,23442,23446,23450,23458,23462,23468],{"__ignoreMap":66},[84,23367,23368,23370],{"class":86,"line":87},[84,23369,2279],{"class":473},[84,23371,2282],{"class":104},[84,23373,23374,23376,23378,23380],{"class":86,"line":98},[84,23375,2287],{"class":473},[84,23377,2290],{"class":473},[84,23379,2293],{"class":90},[84,23381,1634],{"class":477},[84,23383,23384,23386,23388],{"class":86,"line":70},[84,23385,15023],{"class":473},[84,23387,15898],{"class":90},[84,23389,3003],{"class":477},[84,23391,23392],{"class":86,"line":120},[84,23393,1886],{"class":477},[84,23395,23396,23398,23400],{"class":86,"line":131},[84,23397,2314],{"class":473},[84,23399,15777],{"class":477},[84,23401,23402],{"class":328},"\u002F\u002F非静态成员变量\n",[84,23404,23405],{"class":86,"line":145},[84,23406,4324],{"class":477},[84,23408,23409,23411,23413],{"class":86,"line":156},[84,23410,5693],{"class":473},[84,23412,5917],{"class":90},[84,23414,2305],{"class":477},[84,23416,23417],{"class":86,"line":164},[84,23418,1886],{"class":477},[84,23420,23421],{"class":86,"line":175},[84,23422,15642],{"class":477},[84,23424,23425,23427,23429,23431,23433,23435,23437,23439],{"class":86,"line":185},[84,23426,1891],{"class":477},[84,23428,1517],{"class":473},[84,23430,23307],{"class":104},[84,23432,1713],{"class":473},[84,23434,6868],{"class":477},[84,23436,1517],{"class":473},[84,23438,1582],{"class":477},[84,23440,23441],{"class":328}," \u002F\u002F查看不是空对象时占用多少内存\n",[84,23443,23444],{"class":86,"line":195},[84,23445,2729],{"emptyLinePlaceholder":403},[84,23447,23448],{"class":86,"line":206},[84,23449,1905],{"class":477},[84,23451,23452,23454,23456],{"class":86,"line":217},[84,23453,481],{"class":473},[84,23455,2302],{"class":90},[84,23457,2305],{"class":477},[84,23459,23460],{"class":86,"line":227},[84,23461,1886],{"class":477},[84,23463,23464,23466],{"class":86,"line":238},[84,23465,5962],{"class":90},[84,23467,5965],{"class":477},[84,23469,23470],{"class":86,"line":249},[84,23471,1905],{"class":477},[35,23473,23474],{},"输出结果：size of p=4",[35,23476,23477],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[28,23479,23480],{},[31,23481,23482],{},"如果加上非静态成员变量，Person类修改如下",[75,23484,23486],{"className":464,"code":23485,"language":466,"meta":66,"style":66},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[81,23487,23488,23494,23498,23504,23512,23516,23521],{"__ignoreMap":66},[84,23489,23490,23492],{"class":86,"line":87},[84,23491,15023],{"class":473},[84,23493,15500],{"class":90},[84,23495,23496],{"class":86,"line":98},[84,23497,1886],{"class":477},[84,23499,23500,23502],{"class":86,"line":70},[84,23501,2314],{"class":473},[84,23503,21721],{"class":477},[84,23505,23506,23508,23510],{"class":86,"line":120},[84,23507,11349],{"class":473},[84,23509,2711],{"class":473},[84,23511,21728],{"class":477},[84,23513,23514],{"class":86,"line":131},[84,23515,4324],{"class":477},[84,23517,23518],{"class":86,"line":145},[84,23519,23520],{"class":328},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[84,23522,23523,23525,23527,23529,23531,23533],{"class":86,"line":156},[84,23524,481],{"class":473},[84,23526,15898],{"class":90},[84,23528,22741],{"class":477},[84,23530,523],{"class":473},[84,23532,666],{"class":94},[84,23534,1634],{"class":477},[35,23536,23537],{},"输出结果：4",[35,23539,23540],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[28,23542,23543],{"start":98},[31,23544,23545],{},"加上非静态成员函数",[75,23547,23549],{"className":464,"code":23548,"language":466,"meta":66,"style":66},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[81,23550,23551,23558,23562,23568,23576,23580,23584,23588],{"__ignoreMap":66},[84,23552,23553,23555],{"class":86,"line":87},[84,23554,15023],{"class":473},[84,23556,23557],{"class":90},"  Person\n",[84,23559,23560],{"class":86,"line":98},[84,23561,1886],{"class":477},[84,23563,23564,23566],{"class":86,"line":70},[84,23565,2314],{"class":473},[84,23567,21721],{"class":477},[84,23569,23570,23572,23574],{"class":86,"line":120},[84,23571,15238],{"class":473},[84,23573,11714],{"class":90},[84,23575,2305],{"class":477},[84,23577,23578],{"class":86,"line":131},[84,23579,2359],{"class":477},[84,23581,23582],{"class":86,"line":145},[84,23583,2729],{"emptyLinePlaceholder":403},[84,23585,23586],{"class":86,"line":156},[84,23587,2516],{"class":477},[84,23589,23590],{"class":86,"line":164},[84,23591,4324],{"class":477},[35,23593,23594],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[28,23596,23597],{"start":70},[31,23598,23599],{},"加上静态成员函数",[75,23601,23603],{"className":464,"code":23602,"language":466,"meta":66,"style":66},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[81,23604,23605,23611,23615,23621,23629,23633,23637,23641,23652,23656,23660,23664],{"__ignoreMap":66},[84,23606,23607,23609],{"class":86,"line":87},[84,23608,15023],{"class":473},[84,23610,23557],{"class":90},[84,23612,23613],{"class":86,"line":98},[84,23614,1886],{"class":477},[84,23616,23617,23619],{"class":86,"line":70},[84,23618,2314],{"class":473},[84,23620,21721],{"class":477},[84,23622,23623,23625,23627],{"class":86,"line":120},[84,23624,15238],{"class":473},[84,23626,11714],{"class":90},[84,23628,2305],{"class":477},[84,23630,23631],{"class":86,"line":131},[84,23632,2359],{"class":477},[84,23634,23635],{"class":86,"line":145},[84,23636,2729],{"emptyLinePlaceholder":403},[84,23638,23639],{"class":86,"line":156},[84,23640,2516],{"class":477},[84,23642,23643,23645,23647,23650],{"class":86,"line":164},[84,23644,11349],{"class":473},[84,23646,22896],{"class":473},[84,23648,23649],{"class":90}," func1",[84,23651,2305],{"class":477},[84,23653,23654],{"class":86,"line":175},[84,23655,2359],{"class":477},[84,23657,23658],{"class":86,"line":185},[84,23659,2729],{"emptyLinePlaceholder":403},[84,23661,23662],{"class":86,"line":195},[84,23663,2516],{"class":477},[84,23665,23666],{"class":86,"line":206},[84,23667,4324],{"class":477},[35,23669,23537],{},[35,23671,23672],{},"解释：静态成员函数也不属于类上",[389,23674,8003],{},{"title":66,"searchDepth":98,"depth":98,"links":23676},[23677,23683],{"id":14974,"depth":98,"text":14975,"children":23678},[23679,23680,23681,23682],{"id":14978,"depth":70,"text":14979},{"id":15703,"depth":70,"text":15704},{"id":15875,"depth":70,"text":15876},{"id":16334,"depth":70,"text":16335},{"id":18706,"depth":98,"text":18707,"children":23684},[23685,23686,23687,23688,23689,23690,23691,23692,23693],{"id":18718,"depth":70,"text":18719},{"id":19011,"depth":70,"text":19012},{"id":19502,"depth":70,"text":19503},{"id":20599,"depth":70,"text":20600},{"id":21022,"depth":70,"text":21023},{"id":21501,"depth":70,"text":21502},{"id":21876,"depth":70,"text":21877},{"id":22289,"depth":70,"text":22290},{"id":23226,"depth":70,"text":23227},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14939,"description":23694},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23701,"title":466,"body":23702,"description":400,"extension":401,"meta":23706,"navigation":403,"path":23708,"seo":23709,"stem":23710,"__hash__":23711},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23703,"toc":23704},[],{"title":66,"searchDepth":98,"depth":98,"links":23705},[],{"category":23707},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":466,"description":400},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23713,"title":23714,"body":23715,"description":66,"extension":401,"meta":24305,"navigation":403,"path":24306,"seo":24307,"stem":24308,"__hash__":24309},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23716,"toc":24287},[23717,23720,23724,23727,23730,23733,23751,23756,23759,23762,23765,23768,23773,23776,23781,23784,23787,23791,23794,23797,23803,23806,23824,23828,23832,23835,23840,23843,23847,23850,23863,23866,23870,23873,23876,23879,23904,23907,23916,23927,23942,23974,23978,23985,23993,23997,24000,24003,24008,24012,24015,24018,24023,24026,24030,24033,24036,24041,24044,24048,24053,24057,24124,24128,24131,24134,24137,24140,24143,24149,24170,24173,24187,24195,24199,24202,24205,24210,24213,24218,24223,24226,24229,24234,24239,24242,24247,24252,24255,24260,24265,24268,24271,24276,24279,24284],[10,23718,23714],{"id":23719},"_1强化学习基本认识",[14,23721,23723],{"id":23722},"_11什么是强化学习","1.1.什么是强化学习",[35,23725,23726],{},"强化学习有两部分组成：智能体和环境；",[35,23728,23729],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[35,23731,23732],{},"强化学习与监督学习的区别:",[28,23734,23735,23738,23741,23744],{},[31,23736,23737],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[31,23739,23740],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[31,23742,23743],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[31,23745,23746,23747,23750],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[624,23748,23749],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[35,23752,23753],{},[64,23754],{"alt":66,"src":23755},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[35,23757,23758],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[35,23760,23761],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[35,23763,23764],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[35,23766,23767],{},"获取奖励",[35,23769,23770],{},[64,23771],{"alt":66,"src":23772},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[35,23774,23775],{},"强化学习可以分成标准强化学习和深度强化学习",[35,23777,23778],{},[64,23779],{"alt":66,"src":23780},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[35,23782,23783],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[35,23785,23786],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23788,23790],{"id":23789},"_12强化学习应用场景","1.2.强化学习应用场景",[35,23792,23793],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[35,23795,23796],{},"具身智能中的应用",[35,23798,23799,23802],{},[624,23800,23801],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[35,23804,23805],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[35,23807,23808,23809,23812,23813,23816,23817,23820,23821],{},"机器人是",[624,23810,23811],{},"躯体","，深度学习是",[624,23814,23815],{},"神经元****网络","，VLA是",[624,23818,23819],{},"通用的行为逻辑","，而强化学习是",[624,23822,23823],{},"教练",[14,23825,23827],{"id":23826},"_13序列决策","1.3.序列决策",[23,23829,23831],{"id":23830},"_131智能体与环境","1.3.1.智能体与环境",[35,23833,23834],{},"强化学习研究的问题是智能体agent与环境交互的问题",[35,23836,23837],{},[64,23838],{"alt":66,"src":23839},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[35,23841,23842],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[23,23844,23846],{"id":23845},"_132奖励","1.3.2.奖励",[35,23848,23849],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[35,23851,23852,23853,23862],{},"取某个策略的表现如何。强化学习的目的就是",[624,23854,23855,23856,23861],{},"最大化",[624,23857,23858],{},[624,23859,23860],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[35,23864,23865],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[23,23867,23869],{"id":23868},"_133序列决策","1.3.3.序列决策",[35,23871,23872],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[35,23874,23875],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[35,23877,23878],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[35,23880,23881,23885,23886,23888,23889,23891,23892,23894,23895,14124,23898,14124,23901],{},[23882,23883,23884],"em",{},"Ht"," = ",[23882,23887,1069],{},"1*, a",[23882,23890,692],{},", r",[23882,23893,692],{},", . . . ,* ",[23882,23896,23897],{},"ot",[23882,23899,23900],{},", at ,",[23882,23902,23903],{},"rt",[35,23905,23906],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[35,23908,23909,23885,23912,1991,23914,902],{},[23882,23910,23911],{},"st",[23882,23913,529],{},[23882,23915,23884],{},[35,23917,23918,23919,23922,23923,23926],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[624,23920,23921],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[624,23924,23925],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[35,23928,23929,23930,23933,23934,23937,23938,23941],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[624,23931,23932],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[624,23935,23936],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23882,23939,23940],{},"S, A, T, R, Ω, O, γ",")。",[35,23943,23944,23945,23947,23948,23950,23951,478,23953,23956,23957,23959,23960,478,23963,23966,23967,23969,23970,23973],{},"其中 ",[23882,23946,1162],{}," 表示状态空间，为隐变量，",[23882,23949,707],{}," 为动作空间，",[23882,23952,1187],{},[23882,23954,23955],{},"s ′ |s, a",") 为状态转移概率，",[23882,23958,1137],{}," 为奖励函数，",[23882,23961,23962],{},"Ω",[23882,23964,23965],{},"o|s, a",") 为观测概率，",[23882,23968,1063],{}," 为观测空间，",[23882,23971,23972],{},"γ"," 为折扣因子。",[14,23975,23977],{"id":23976},"_14动作空间","1.4.动作空间",[35,23979,23980,23981,23984],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[624,23982,23983],{},"动作空间"," ，动作空间分为:",[28,23986,23987,23990],{},[31,23988,23989],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[31,23991,23992],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23994,23996],{"id":23995},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[35,23998,23999],{},"由策略、价值函数、模型三部分组成",[35,24001,24002],{},"这三者组成马尔可夫决策过程",[35,24004,24005],{},[64,24006],{"alt":66,"src":24007},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[23,24009,24011],{"id":24010},"_151策略","1.5.1.策略",[35,24013,24014],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[35,24016,24017],{},"策略可分为两种：",[35,24019,24020],{},[64,24021],{"alt":66,"src":24022},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[35,24024,24025],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[23,24027,24029],{"id":24028},"_152价值函数","1.5.2.价值函数",[35,24031,24032],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[35,24034,24035],{},"价值函数中有一个折扣因子，类似于存款利息",[35,24037,24038],{},[64,24039],{"alt":66,"src":24040},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[35,24042,24043],{},"进入某个状态采取的最优动作可以通过Q函数得到",[23,24045,24047],{"id":24046},"_153模型","1.5.3.模型",[35,24049,24050],{},[64,24051],{"alt":66,"src":24052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24054,24056],{"id":24055},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[612,24058,24059,24070],{},[615,24060,24061],{},[618,24062,24063,24067],{},[621,24064,24066],{"align":24065},"left","类型",[621,24068,24069],{"align":24065},"特点",[659,24071,24072,24082,24092,24102,24114],{},[618,24073,24074,24079],{},[664,24075,24076],{"align":24065},[624,24077,24078],{},"基于价值的智能体",[664,24080,24081],{"align":24065},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[618,24083,24084,24089],{},[664,24085,24086],{"align":24065},[624,24087,24088],{},"基于策略的智能体",[664,24090,24091],{"align":24065},"直接学习策略，没有学习价值函数",[618,24093,24094,24099],{},[664,24095,24096],{"align":24065},[624,24097,24098],{},"演员-评论员智能体",[664,24100,24101],{"align":24065},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[618,24103,24104,24109],{},[664,24105,24106],{"align":24065},[624,24107,24108],{},"有模型强化学习智能体",[664,24110,24111],{"align":24065},[64,24112],{"alt":66,"src":24113},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[618,24115,24116,24121],{},[664,24117,24118],{"align":24065},[624,24119,24120],{},"免模型强化学习智能体",[664,24122,24123],{"align":24065},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24125,24127],{"id":24126},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[35,24129,24130],{},"学习和规划是序列决策的两个基本问题",[35,24132,24133],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[35,24135,24136],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[35,24138,24139],{},"强化学习用到的库：Gym",[35,24141,24142],{},"Gym可以检验强化学习算法的优劣",[35,24144,24145,24148],{},[624,24146,24147],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[75,24150,24154],{"className":24151,"code":24152,"language":24153,"meta":66,"style":66},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[81,24155,24156],{"__ignoreMap":66},[84,24157,24158,24161,24164,24167],{"class":86,"line":87},[84,24159,24160],{"class":90},"pip",[84,24162,24163],{"class":104}," install",[84,24165,24166],{"class":104}," gym==",[84,24168,24169],{"class":94},"0.25.2\n",[35,24171,24172],{},"显示图形界面需要",[75,24174,24176],{"className":24151,"code":24175,"language":24153,"meta":66,"style":66},"pip install pygame\n",[81,24177,24178],{"__ignoreMap":66},[84,24179,24180,24182,24184],{"class":86,"line":87},[84,24181,24160],{"class":90},[84,24183,24163],{"class":104},[84,24185,24186],{"class":104}," pygame\n",[35,24188,24189,24190],{},"有关Gym库的相关文档介绍：",[39,24191,24194],{"href":24192,"rel":24193},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[43],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24196,24198],{"id":24197},"_18一些补充基础概念","1.8.一些补充基础概念",[35,24200,24201],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[35,24203,24204],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[35,24206,24207],{},[64,24208],{"alt":66,"src":24209},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[35,24211,24212],{},"折扣率需要自己来设定",[35,24214,24215],{},[64,24216],{"alt":66,"src":24217},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[28,24219,24220],{},[31,24221,24222],{},"状态转移函数：",[35,24224,24225],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[35,24227,24228],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[35,24230,24231],{},[64,24232],{"alt":66,"src":24233},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[28,24235,24236],{"start":98},[31,24237,24238],{},"动作价值函数：",[35,24240,24241],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[35,24243,24244],{},[64,24245],{"alt":66,"src":24246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[28,24248,24249],{"start":70},[31,24250,24251],{},"最优动作价值函数：",[35,24253,24254],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[35,24256,24257],{},[64,24258],{"alt":66,"src":24259},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[28,24261,24262],{"start":120},[31,24263,24264],{},"状态价值函数:",[35,24266,24267],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[35,24269,24270],{},"它衡量的是“一个具体动作”的长期价值",[35,24272,24273],{},[64,24274],{"alt":66,"src":24275},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[35,24277,24278],{},"几个价值函数之间的比较：",[35,24280,24281],{},[64,24282],{"alt":66,"src":24283},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[389,24285,24286],{},"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":66,"searchDepth":98,"depth":98,"links":24288},[24289,24290,24291,24296,24297,24302,24303,24304],{"id":23722,"depth":98,"text":23723},{"id":23789,"depth":98,"text":23790},{"id":23826,"depth":98,"text":23827,"children":24292},[24293,24294,24295],{"id":23830,"depth":70,"text":23831},{"id":23845,"depth":70,"text":23846},{"id":23868,"depth":70,"text":23869},{"id":23976,"depth":98,"text":23977},{"id":23995,"depth":98,"text":23996,"children":24298},[24299,24300,24301],{"id":24010,"depth":70,"text":24011},{"id":24028,"depth":70,"text":24029},{"id":24046,"depth":70,"text":24047},{"id":24055,"depth":98,"text":24056},{"id":24126,"depth":98,"text":24127},{"id":24197,"depth":98,"text":24198},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23714,"description":66},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24311,"title":24312,"body":24313,"description":24320,"extension":401,"meta":24331,"navigation":403,"path":24332,"seo":24333,"stem":24334,"__hash__":24335},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24314,"toc":24329},[24315,24318,24321,24326],[10,24316,24312],{"id":24317},"_2马尔可夫决策过程",[35,24319,24320],{},"这是强化学习的基本框架",[35,24322,24323],{},[64,24324],{"alt":66,"src":24325},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[35,24327,24328],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":66,"searchDepth":98,"depth":98,"links":24330},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24312,"description":24320},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24337,"title":24338,"body":24339,"description":66,"extension":401,"meta":24455,"navigation":403,"path":24456,"seo":24457,"stem":24458,"__hash__":24459},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24340,"toc":24450},[24341,24344,24348,24351,24356,24361,24364,24369,24372,24377,24380,24384,24389,24392,24397,24402,24407,24410,24414,24419,24422,24427,24432,24437,24442,24445],[10,24342,24338],{"id":24343},"_3动作价值函数",[14,24345,24347],{"id":24346},"_31dqn","3.1.DQN",[35,24349,24350],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[35,24352,24353],{},[64,24354],{"alt":66,"src":24355},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[35,24357,24358],{},[64,24359],{"alt":66,"src":24360},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[35,24362,24363],{},"DQN算法的描述：",[35,24365,24366],{},[64,24367],{"alt":66,"src":24368},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[35,24370,24371],{},"这里的Dense指的是全连接层",[35,24373,24374],{},[64,24375],{"alt":66,"src":24376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[35,24378,24379],{},"当前观测的状态为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算法",[14,24381,24383],{"id":24382},"_32dqn的举例","3.2.DQN的举例",[35,24385,24386],{},[64,24387],{"alt":66,"src":24388},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[35,24390,24391],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[35,24393,24394],{},[64,24395],{"alt":66,"src":24396},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[35,24398,24399],{},[64,24400],{"alt":66,"src":24401},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[35,24403,24404],{},[64,24405],{"alt":66,"src":24406},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[35,24408,24409],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24411,24413],{"id":24412},"_33td算法","3.3.TD算法",[35,24415,24416],{},[64,24417],{"alt":66,"src":24418},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[35,24420,24421],{},"强化学习TD算法公式的粗略解释：",[35,24423,24424],{},[64,24425],{"alt":66,"src":24426},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[35,24428,24429],{},[64,24430],{"alt":66,"src":24431},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[35,24433,24434],{},[64,24435],{"alt":66,"src":24436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[35,24438,24439],{},[64,24440],{"alt":66,"src":24441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[35,24443,24444],{},"TD算法总结：",[35,24446,24447],{},[64,24448],{"alt":66,"src":24449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":66,"searchDepth":98,"depth":98,"links":24451},[24452,24453,24454],{"id":24346,"depth":98,"text":24347},{"id":24382,"depth":98,"text":24383},{"id":24412,"depth":98,"text":24413},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24338,"description":66},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24461,"title":24462,"body":24463,"description":66,"extension":401,"meta":24696,"navigation":403,"path":24697,"seo":24698,"stem":24699,"__hash__":24700},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24464,"toc":24692},[24465,24468,24472,24475,24478,24483,24488,24491,24496,24501,24504,24509,24512,24517,24520,24525,24528,24533,24536,24541,24546,24549,24554,24557,24560,24565,24568,24573,24578,24582,24585,24588,24593,24598,24601,24606,24611,24614,24619,24622,24625,24630,24633,24638,24641,24646,24651,24654,24659,24664,24667,24672,24675,24680,24683],[10,24466,24462],{"id":24467},"_4策略学习",[14,24469,24471],{"id":24470},"_41概念描述","4.1.概念描述",[35,24473,24474],{},"用神经网络（策略网络）近似策略函数",[35,24476,24477],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[35,24479,24480],{},[64,24481],{"alt":66,"src":24482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[35,24484,24485],{},[64,24486],{"alt":66,"src":24487},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[35,24489,24490],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[35,24492,24493],{},[64,24494],{"alt":66,"src":24495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[35,24497,24498],{},[64,24499],{"alt":66,"src":24500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[35,24502,24503],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[35,24505,24506],{},[64,24507],{"alt":66,"src":24508},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[35,24510,24511],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[35,24513,24514],{},[64,24515],{"alt":66,"src":24516},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[35,24518,24519],{},"改进theta要用到策略梯度算法",[35,24521,24522],{},[64,24523],{"alt":66,"src":24524},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[35,24526,24527],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[35,24529,24530],{},[64,24531],{"alt":66,"src":24532},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[35,24534,24535],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[35,24537,24538],{},[64,24539],{"alt":66,"src":24540},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[35,24542,24543],{},[64,24544],{"alt":66,"src":24545},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[35,24547,24548],{},"梯度公式总结：",[35,24550,24551],{},[64,24552],{"alt":66,"src":24553},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[35,24555,24556],{},"两个公式的分别应用场景：",[35,24558,24559],{},"对于离散的动作：",[35,24561,24562],{},[64,24563],{"alt":66,"src":24564},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[35,24566,24567],{},"对于连续的动作：",[35,24569,24570],{},[64,24571],{"alt":66,"src":24572},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[35,24574,24575],{},[64,24576],{"alt":66,"src":24577},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24579,24581],{"id":24580},"_42概率梯度算法总结","4.2.概率梯度算法总结",[35,24583,24584],{},"使用蒙特卡洛来近似计算策略梯度",[35,24586,24587],{},"蒙特卡洛法的解释如下：",[35,24589,24590],{},[64,24591],{"alt":66,"src":24592},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[35,24594,24595],{},[64,24596],{"alt":66,"src":24597},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[35,24599,24600],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[28,24602,24603],{},[31,24604,24605],{},"方法一：reinforce算法",[35,24607,24608],{},[64,24609],{"alt":66,"src":24610},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[35,24612,24613],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[28,24615,24616],{"start":98},[31,24617,24618],{},"方法二：actor-critic算法",[35,24620,24621],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[35,24623,24624],{},"两个网络的构建：",[35,24626,24627],{},[64,24628],{"alt":66,"src":24629},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[35,24631,24632],{},"actor网路：",[35,24634,24635],{},[64,24636],{"alt":66,"src":24637},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[35,24639,24640],{},"critic网络",[35,24642,24643],{},[64,24644],{"alt":66,"src":24645},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[28,24647,24648],{"start":70},[31,24649,24650],{},"网络的训练",[35,24652,24653],{},"网络描述",[35,24655,24656],{},[64,24657],{"alt":66,"src":24658},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[35,24660,24661],{},[64,24662],{"alt":66,"src":24663},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[35,24665,24666],{},"TD算法更新梯度：",[35,24668,24669],{},[64,24670],{"alt":66,"src":24671},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[35,24673,24674],{},"策略网络更新梯度：",[35,24676,24677],{},[64,24678],{"alt":66,"src":24679},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[35,24681,24682],{},"训练整个流程的具体描述：",[35,24684,24685,24688,24689],{},[64,24686],{"alt":66,"src":24687},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[64,24690],{"alt":66,"src":24691},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":66,"searchDepth":98,"depth":98,"links":24693},[24694,24695],{"id":24470,"depth":98,"text":24471},{"id":24580,"depth":98,"text":24581},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24462,"description":66},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24702,"title":24703,"body":24704,"description":24711,"extension":401,"meta":24761,"navigation":403,"path":24762,"seo":24763,"stem":24764,"__hash__":24765},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24705,"toc":24757},[24706,24709,24712,24716,24719,24724,24728,24731,24736,24739,24744,24749,24752],[10,24707,24703],{"id":24708},"_5alphago算法",[35,24710,24711],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24713,24715],{"id":24714},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[35,24717,24718],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[35,24720,24721],{},[64,24722],{"alt":66,"src":24723},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24725,24727],{"id":24726},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[35,24729,24730],{},"采用强化学习的方式训练策略网络",[35,24732,24733],{},[64,24734],{"alt":66,"src":24735},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[35,24737,24738],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[35,24740,24741],{},[64,24742],{"alt":66,"src":24743},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[35,24745,24746],{},[64,24747],{"alt":66,"src":24748},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[35,24750,24751],{},"强化学习训练策略网络的总结：",[35,24753,24754],{},[64,24755],{"alt":66,"src":24756},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":66,"searchDepth":98,"depth":98,"links":24758},[24759,24760],{"id":24714,"depth":98,"text":24715},{"id":24726,"depth":98,"text":24727},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24703,"description":24711},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24767,"title":24768,"body":24769,"description":24776,"extension":401,"meta":24779,"navigation":403,"path":24780,"seo":24781,"stem":24782,"__hash__":24783},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24770,"toc":24777},[24771,24774],[10,24772,24768],{"id":24773},"_6价值网络",[35,24775,24776],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":66,"searchDepth":98,"depth":98,"links":24778},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24768,"description":24776},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24785,"title":24786,"body":24787,"description":24791,"extension":401,"meta":24792,"navigation":403,"path":24793,"seo":24794,"stem":24795,"__hash__":24796},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24788,"toc":24789},[],{"title":66,"searchDepth":98,"depth":98,"links":24790},[],"记录自己的强化学习笔记。",{"category":23707},"\u002Fwiki\u002F2025-12-04",{"title":24786,"description":24791},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24798,"title":24799,"body":24800,"description":400,"extension":401,"meta":24839,"navigation":403,"path":24840,"seo":24841,"stem":24842,"__hash__":24843},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24801,"toc":24837},[24802,24805,24808,24814,24817,24823,24826,24831,24834],[10,24803,24799],{"id":24804},"_1-项目概览与官方资源",[35,24806,24807],{},"官方文档：",[35,24809,24810],{},[39,24811,24812],{"href":24812,"rel":24813},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[43],[35,24815,24816],{},"官方代码仓库：",[35,24818,24819],{},[39,24820,24821],{"href":24821,"rel":24822},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[43],[35,24824,24825],{},"复现大体流程：",[35,24827,24828],{},[64,24829],{"alt":66,"src":24830},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[35,24832,24833],{},"本教程的目标是打通这条链路：",[35,24835,24836],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":66,"searchDepth":98,"depth":98,"links":24838},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24799,"description":400},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24845,"title":24846,"body":24847,"description":400,"extension":401,"meta":24963,"navigation":403,"path":24964,"seo":24965,"stem":24966,"__hash__":24967},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24848,"toc":24958},[24849,24852,24856,24859,24866,24870,24873,24882,24892,24896,24926,24929,24955],[10,24850,24846],{"id":24851},"_2-环境准备与设备连接",[14,24853,24855],{"id":24854},"_21-系统与环境","2.1 系统与环境",[35,24857,24858],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[35,24860,24861,24862,24865],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[81,24863,24864],{},"lerobot"," 依赖。",[14,24867,24869],{"id":24868},"_22-机械臂串口识别","2.2 机械臂串口识别",[35,24871,24872],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[75,24874,24876],{"className":24151,"code":24875,"language":24153,"meta":66,"style":66},"lerobot-find-out\n",[81,24877,24878],{"__ignoreMap":66},[84,24879,24880],{"class":86,"line":87},[84,24881,24875],{"class":90},[35,24883,24884,24885,687,24888,24891],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[81,24886,24887],{},"\u002Fdev\u002FttyACM0",[81,24889,24890],{},"\u002Fdev\u002FttyACM1","）。",[14,24893,24895],{"id":24894},"_23-串口授权","2.3 串口授权",[75,24897,24899],{"className":24151,"code":24898,"language":24153,"meta":66,"style":66},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[81,24900,24901,24915],{"__ignoreMap":66},[84,24902,24903,24906,24909,24912],{"class":86,"line":87},[84,24904,24905],{"class":90},"sudo",[84,24907,24908],{"class":104}," chmod",[84,24910,24911],{"class":94}," 666",[84,24913,24914],{"class":104}," \u002Fdev\u002FttyACM0\n",[84,24916,24917,24919,24921,24923],{"class":86,"line":98},[84,24918,24905],{"class":90},[84,24920,24908],{"class":104},[84,24922,24911],{"class":94},[84,24924,24925],{"class":104}," \u002Fdev\u002FttyACM1\n",[35,24927,24928],{},"说明：",[1480,24930,24931,24936,24942,24952],{},[31,24932,24933,24935],{},[81,24934,24905],{},"：以 root 权限执行命令。",[31,24937,24938,24941],{},[81,24939,24940],{},"chmod","：修改设备节点权限。",[31,24943,24944,24947,24948,24951],{},[81,24945,24946],{},"666","：",[81,24949,24950],{},"rw-rw-rw-","，所有用户可读写。",[31,24953,24954],{},"串口号必须替换为你机器上的真实端口。",[389,24956,24957],{},"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":66,"searchDepth":98,"depth":98,"links":24959},[24960,24961,24962],{"id":24854,"depth":98,"text":24855},{"id":24868,"depth":98,"text":24869},{"id":24894,"depth":98,"text":24895},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24846,"description":400},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24969,"title":24970,"body":24971,"description":400,"extension":401,"meta":25131,"navigation":403,"path":25132,"seo":25133,"stem":25134,"__hash__":25135},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24972,"toc":25127},[24973,24977,24981,24987,24990,25046,25049,25053,25056,25124],[10,24974,24976],{"id":24975},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24978,24980],{"id":24979},"_31-配置电机-id","3.1 配置电机 ID",[35,24982,24983,24984,24986],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[81,24985,692],{},"，需要改成机械臂链路里不冲突的编号。",[35,24988,24989],{},"方式一：用 LeRobot 命令逐步写入。",[75,24991,24993],{"className":24151,"code":24992,"language":24153,"meta":66,"style":66},"# 主臂舵机配置 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",[81,24994,24995,25000,25007,25014,25019,25023,25028,25034,25041],{"__ignoreMap":66},[84,24996,24997],{"class":86,"line":87},[84,24998,24999],{"class":328},"# 主臂舵机配置 ID\n",[84,25001,25002,25005],{"class":86,"line":98},[84,25003,25004],{"class":90},"lerobot-setup-motors",[84,25006,95],{"class":94},[84,25008,25009,25012],{"class":86,"line":70},[84,25010,25011],{"class":94},"  --teleop.type=so101_leader",[84,25013,95],{"class":94},[84,25015,25016],{"class":86,"line":120},[84,25017,25018],{"class":94},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[84,25020,25021],{"class":86,"line":131},[84,25022,2729],{"emptyLinePlaceholder":403},[84,25024,25025],{"class":86,"line":145},[84,25026,25027],{"class":328},"# 从臂舵机配置 ID\n",[84,25029,25030,25032],{"class":86,"line":156},[84,25031,25004],{"class":90},[84,25033,95],{"class":94},[84,25035,25036,25039],{"class":86,"line":164},[84,25037,25038],{"class":94},"  --robot.type=so101_follower",[84,25040,95],{"class":94},[84,25042,25043],{"class":86,"line":175},[84,25044,25045],{"class":94},"  --robot.port=\u002Fdev\u002FttyACM1\n",[35,25047,25048],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25050,25052],{"id":25051},"_32-机械臂校准","3.2 机械臂校准",[35,25054,25055],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[75,25057,25059],{"className":24151,"code":25058,"language":24153,"meta":66,"style":66},"# 主臂校准\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",[81,25060,25061,25066,25073,25079,25086,25091,25095,25100,25106,25112,25119],{"__ignoreMap":66},[84,25062,25063],{"class":86,"line":87},[84,25064,25065],{"class":328},"# 主臂校准\n",[84,25067,25068,25071],{"class":86,"line":98},[84,25069,25070],{"class":90},"lerobot-calibrate",[84,25072,95],{"class":94},[84,25074,25075,25077],{"class":86,"line":70},[84,25076,25011],{"class":94},[84,25078,95],{"class":94},[84,25080,25081,25084],{"class":86,"line":120},[84,25082,25083],{"class":94},"  --teleop.port=\u002Fdev\u002FttyACM0",[84,25085,95],{"class":94},[84,25087,25088],{"class":86,"line":131},[84,25089,25090],{"class":94},"  --teleop.id=my_awesome_leader_arm\n",[84,25092,25093],{"class":86,"line":145},[84,25094,2729],{"emptyLinePlaceholder":403},[84,25096,25097],{"class":86,"line":156},[84,25098,25099],{"class":328},"# 从臂校准\n",[84,25101,25102,25104],{"class":86,"line":164},[84,25103,25070],{"class":90},[84,25105,95],{"class":94},[84,25107,25108,25110],{"class":86,"line":175},[84,25109,25038],{"class":94},[84,25111,95],{"class":94},[84,25113,25114,25117],{"class":86,"line":185},[84,25115,25116],{"class":94},"  --robot.port=\u002Fdev\u002FttyACM1",[84,25118,95],{"class":94},[84,25120,25121],{"class":86,"line":195},[84,25122,25123],{"class":94},"  --robot.id=my_awesome_follower_arm\n",[389,25125,25126],{},"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":66,"searchDepth":98,"depth":98,"links":25128},[25129,25130],{"id":24979,"depth":98,"text":24980},{"id":25051,"depth":98,"text":25052},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24970,"description":400},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25137,"title":25138,"body":25139,"description":400,"extension":401,"meta":25330,"navigation":403,"path":25331,"seo":25332,"stem":25333,"__hash__":25334},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25140,"toc":25326},[25141,25144,25148,25195,25199,25212,25275,25278,25323],[10,25142,25138],{"id":25143},"_4-遥操与相机接入",[14,25145,25147],{"id":25146},"_41-不带相机遥操","4.1 不带相机遥操",[75,25149,25151],{"className":24151,"code":25150,"language":24153,"meta":66,"style":66},"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",[81,25152,25153,25160,25166,25172,25179,25185,25191],{"__ignoreMap":66},[84,25154,25155,25158],{"class":86,"line":87},[84,25156,25157],{"class":90},"lerobot-teleoperate",[84,25159,95],{"class":94},[84,25161,25162,25164],{"class":86,"line":98},[84,25163,25038],{"class":94},[84,25165,95],{"class":94},[84,25167,25168,25170],{"class":86,"line":70},[84,25169,25116],{"class":94},[84,25171,95],{"class":94},[84,25173,25174,25177],{"class":86,"line":120},[84,25175,25176],{"class":94},"  --robot.id=my_awesome_follower_arm",[84,25178,95],{"class":94},[84,25180,25181,25183],{"class":86,"line":131},[84,25182,25011],{"class":94},[84,25184,95],{"class":94},[84,25186,25187,25189],{"class":86,"line":145},[84,25188,25083],{"class":94},[84,25190,95],{"class":94},[84,25192,25193],{"class":86,"line":156},[84,25194,25090],{"class":94},[14,25196,25198],{"id":25197},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[75,25200,25202],{"className":24151,"code":25201,"language":24153,"meta":66,"style":66},"lerobot-find-cameras opencv\n",[81,25203,25204],{"__ignoreMap":66},[84,25205,25206,25209],{"class":86,"line":87},[84,25207,25208],{"class":90},"lerobot-find-cameras",[84,25210,25211],{"class":104}," opencv\n",[75,25213,25215],{"className":24151,"code":25214,"language":24153,"meta":66,"style":66},"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",[81,25216,25217,25223,25229,25235,25241,25251,25257,25263,25270],{"__ignoreMap":66},[84,25218,25219,25221],{"class":86,"line":87},[84,25220,25157],{"class":90},[84,25222,95],{"class":94},[84,25224,25225,25227],{"class":86,"line":98},[84,25226,25038],{"class":94},[84,25228,95],{"class":94},[84,25230,25231,25233],{"class":86,"line":70},[84,25232,25116],{"class":94},[84,25234,95],{"class":94},[84,25236,25237,25239],{"class":86,"line":120},[84,25238,25176],{"class":94},[84,25240,95],{"class":94},[84,25242,25243,25246,25249],{"class":86,"line":131},[84,25244,25245],{"class":94},"  --robot.cameras=",[84,25247,25248],{"class":104},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[84,25250,95],{"class":94},[84,25252,25253,25255],{"class":86,"line":145},[84,25254,25011],{"class":94},[84,25256,95],{"class":94},[84,25258,25259,25261],{"class":86,"line":156},[84,25260,25083],{"class":94},[84,25262,95],{"class":94},[84,25264,25265,25268],{"class":86,"line":164},[84,25266,25267],{"class":94},"  --teleop.id=my_awesome_leader_arm",[84,25269,95],{"class":94},[84,25271,25272],{"class":86,"line":175},[84,25273,25274],{"class":94},"  --display_data=true\n",[35,25276,25277],{},"相机参数说明：",[1480,25279,25280,25286,25292,25301,25311,25317],{},[31,25281,25282,25285],{},[81,25283,25284],{},"front","：相机名称。",[31,25287,25288,25291],{},[81,25289,25290],{},"type: opencv","：相机驱动类型。",[31,25293,25294,25297,25298,24891],{},[81,25295,25296],{},"index_or_path","：设备编号或设备路径（如 ",[81,25299,25300],{},"\u002Fdev\u002Fvideo4",[31,25302,25303,25306,25307,25310],{},[81,25304,25305],{},"width"," \u002F ",[81,25308,25309],{},"height","：图像分辨率。",[31,25312,25313,25316],{},[81,25314,25315],{},"fps","：采样帧率。",[31,25318,25319,25322],{},[81,25320,25321],{},"--display_data=true","：启用实时可视化。",[389,25324,25325],{},"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":66,"searchDepth":98,"depth":98,"links":25327},[25328,25329],{"id":25146,"depth":98,"text":25147},{"id":25197,"depth":98,"text":25198},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25138,"description":400},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25336,"title":25337,"body":25338,"description":400,"extension":401,"meta":25510,"navigation":403,"path":25511,"seo":25512,"stem":25513,"__hash__":25514},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25339,"toc":25505},[25340,25344,25348,25353,25358,25361,25403,25409,25413,25462,25467,25471,25474,25482,25487,25492,25497,25502],[10,25341,25343],{"id":25342},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25345,25347],{"id":25346},"_51-生成访问令牌","5.1 生成访问令牌",[35,25349,25350],{},[64,25351],{"alt":66,"src":25352},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[35,25354,25355],{},[64,25356],{"alt":66,"src":25357},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[35,25359,25360],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[75,25362,25364],{"className":24151,"code":25363,"language":24153,"meta":66,"style":66},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[81,25365,25366,25379],{"__ignoreMap":66},[84,25367,25368,25371,25374,25376],{"class":86,"line":87},[84,25369,25370],{"class":473},"export",[84,25372,25373],{"class":477}," HF_TOKEN",[84,25375,523],{"class":473},[84,25377,25378],{"class":104},"\"your_huggingface_token\"\n",[84,25380,25381,25384,25387,25390,25393,25395,25398,25400],{"class":86,"line":98},[84,25382,25383],{"class":90},"hf",[84,25385,25386],{"class":104}," auth",[84,25388,25389],{"class":104}," login",[84,25391,25392],{"class":94}," --token",[84,25394,10053],{"class":104},[84,25396,25397],{"class":477},"$HF_TOKEN",[84,25399,725],{"class":104},[84,25401,25402],{"class":94}," --add-to-git-credential\n",[35,25404,25405,25408],{},[81,25406,25407],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25410,25412],{"id":25411},"_52-验证登录","5.2 验证登录",[75,25414,25416],{"className":24151,"code":25415,"language":24153,"meta":66,"style":66},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[81,25417,25418,25449],{"__ignoreMap":66},[84,25419,25420,25423,25425,25428,25430,25432,25435,25438,25441,25444,25447],{"class":86,"line":87},[84,25421,25422],{"class":477},"HF_USER",[84,25424,523],{"class":473},[84,25426,25427],{"class":477},"$(",[84,25429,25383],{"class":90},[84,25431,25386],{"class":104},[84,25433,25434],{"class":104}," whoami",[84,25436,25437],{"class":473}," |",[84,25439,25440],{"class":90}," head",[84,25442,25443],{"class":94}," -n",[84,25445,25446],{"class":94}," 1",[84,25448,484],{"class":477},[84,25450,25451,25454,25456,25459],{"class":86,"line":98},[84,25452,25453],{"class":94},"echo",[84,25455,10053],{"class":104},[84,25457,25458],{"class":477},"$HF_USER",[84,25460,25461],{"class":104},"\"\n",[35,25463,25464],{},[64,25465],{"alt":66,"src":25466},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25468,25470],{"id":25469},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[35,25472,25473],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1480,25475,25476,25479],{},[31,25477,25478],{},"Dataset Repo（用于上传演示数据）",[31,25480,25481],{},"Model Repo（用于上传训练后的 ACT 权重）",[35,25483,25484],{},[64,25485],{"alt":66,"src":25486},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[35,25488,25489],{},[64,25490],{"alt":66,"src":25491},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[35,25493,25494],{},[64,25495],{"alt":66,"src":25496},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[35,25498,25499],{},[64,25500],{"alt":66,"src":25501},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[389,25503,25504],{},"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":66,"searchDepth":98,"depth":98,"links":25506},[25507,25508,25509],{"id":25346,"depth":98,"text":25347},{"id":25411,"depth":98,"text":25412},{"id":25469,"depth":98,"text":25470},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25337,"description":400},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25516,"title":25517,"body":25518,"description":400,"extension":401,"meta":25715,"navigation":403,"path":25716,"seo":25717,"stem":25718,"__hash__":25719},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25519,"toc":25710},[25520,25524,25528,25624,25632,25637,25641,25657,25660,25664,25707],[10,25521,25523],{"id":25522},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25525,25527],{"id":25526},"_61-录制示教数据","6.1 录制示教数据",[75,25529,25531],{"className":24151,"code":25530,"language":24153,"meta":66,"style":66},"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",[81,25532,25533,25540,25546,25552,25558,25567,25573,25579,25585,25592,25602,25609,25619],{"__ignoreMap":66},[84,25534,25535,25538],{"class":86,"line":87},[84,25536,25537],{"class":90},"lerobot-record",[84,25539,95],{"class":94},[84,25541,25542,25544],{"class":86,"line":98},[84,25543,25038],{"class":94},[84,25545,95],{"class":94},[84,25547,25548,25550],{"class":86,"line":70},[84,25549,25116],{"class":94},[84,25551,95],{"class":94},[84,25553,25554,25556],{"class":86,"line":120},[84,25555,25176],{"class":94},[84,25557,95],{"class":94},[84,25559,25560,25562,25565],{"class":86,"line":131},[84,25561,25245],{"class":94},[84,25563,25564],{"class":104},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[84,25566,95],{"class":94},[84,25568,25569,25571],{"class":86,"line":145},[84,25570,25011],{"class":94},[84,25572,95],{"class":94},[84,25574,25575,25577],{"class":86,"line":156},[84,25576,25083],{"class":94},[84,25578,95],{"class":94},[84,25580,25581,25583],{"class":86,"line":164},[84,25582,25267],{"class":94},[84,25584,95],{"class":94},[84,25586,25587,25590],{"class":86,"line":175},[84,25588,25589],{"class":94},"  --display_data=true",[84,25591,95],{"class":94},[84,25593,25594,25597,25600],{"class":86,"line":185},[84,25595,25596],{"class":94},"  --dataset.repo_id=",[84,25598,25599],{"class":104},"\"Embodied-AI-6\u002Fso101_test\"",[84,25601,95],{"class":94},[84,25603,25604,25607],{"class":86,"line":195},[84,25605,25606],{"class":94},"  --dataset.num_episodes=10",[84,25608,95],{"class":94},[84,25610,25611,25614,25617],{"class":86,"line":206},[84,25612,25613],{"class":94},"  --dataset.single_task=",[84,25615,25616],{"class":104},"\"Grab the green cube\"",[84,25618,95],{"class":94},[84,25620,25621],{"class":86,"line":217},[84,25622,25623],{"class":94},"  --resume=true\n",[1480,25625,25626],{},[31,25627,25628,25631],{},[81,25629,25630],{},"--resume=true","：已有同一数据集时继续追加 episode。",[35,25633,25634],{},[64,25635],{"alt":66,"src":25636},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25638,25640],{"id":25639},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[75,25642,25644],{"className":24151,"code":25643,"language":24153,"meta":66,"style":66},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[81,25645,25646],{"__ignoreMap":66},[84,25647,25648,25651,25654],{"class":86,"line":87},[84,25649,25650],{"class":90},"rm",[84,25652,25653],{"class":94}," -rf",[84,25655,25656],{"class":104}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[35,25658,25659],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25661,25663],{"id":25662},"_63-回放指定-episode","6.3 回放指定 episode",[75,25665,25667],{"className":24151,"code":25666,"language":24153,"meta":66,"style":66},"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",[81,25668,25669,25676,25682,25688,25694,25702],{"__ignoreMap":66},[84,25670,25671,25674],{"class":86,"line":87},[84,25672,25673],{"class":90},"lerobot-replay",[84,25675,95],{"class":94},[84,25677,25678,25680],{"class":86,"line":98},[84,25679,25038],{"class":94},[84,25681,95],{"class":94},[84,25683,25684,25686],{"class":86,"line":70},[84,25685,25116],{"class":94},[84,25687,95],{"class":94},[84,25689,25690,25692],{"class":86,"line":120},[84,25691,25176],{"class":94},[84,25693,95],{"class":94},[84,25695,25696,25698,25700],{"class":86,"line":131},[84,25697,25596],{"class":94},[84,25699,25599],{"class":104},[84,25701,95],{"class":94},[84,25703,25704],{"class":86,"line":145},[84,25705,25706],{"class":94},"  --dataset.episode=0\n",[389,25708,25709],{},"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":66,"searchDepth":98,"depth":98,"links":25711},[25712,25713,25714],{"id":25526,"depth":98,"text":25527},{"id":25639,"depth":98,"text":25640},{"id":25662,"depth":98,"text":25663},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25517,"description":400},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25721,"title":25722,"body":25723,"description":400,"extension":401,"meta":25851,"navigation":403,"path":25852,"seo":25853,"stem":25854,"__hash__":25855},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25724,"toc":25849},[25725,25729,25792,25795,25842,25847],[10,25726,25728],{"id":25727},"_7-act-模型训练","7. ACT 模型训练",[75,25730,25732],{"className":24151,"code":25731,"language":24153,"meta":66,"style":66},"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",[81,25733,25734,25741,25749,25756,25763,25770,25777,25784],{"__ignoreMap":66},[84,25735,25736,25739],{"class":86,"line":87},[84,25737,25738],{"class":90},"lerobot-train",[84,25740,95],{"class":94},[84,25742,25743,25745,25747],{"class":86,"line":98},[84,25744,25596],{"class":94},[84,25746,25599],{"class":104},[84,25748,95],{"class":94},[84,25750,25751,25754],{"class":86,"line":70},[84,25752,25753],{"class":94},"  --policy.type=act",[84,25755,95],{"class":94},[84,25757,25758,25761],{"class":86,"line":120},[84,25759,25760],{"class":94},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[84,25762,95],{"class":94},[84,25764,25765,25768],{"class":86,"line":131},[84,25766,25767],{"class":94},"  --job_name=act_so101_test",[84,25769,95],{"class":94},[84,25771,25772,25775],{"class":86,"line":145},[84,25773,25774],{"class":94},"  --policy.device=cuda",[84,25776,95],{"class":94},[84,25778,25779,25782],{"class":86,"line":156},[84,25780,25781],{"class":94},"  --wandb.enable=false",[84,25783,95],{"class":94},[84,25785,25786,25789],{"class":86,"line":164},[84,25787,25788],{"class":94},"  --policy.repo_id=",[84,25790,25791],{"class":104},"\"Embodied-AI-6\u002Flerobot_new\"\n",[35,25793,25794],{},"参数说明：",[1480,25796,25797,25803,25809,25815,25821,25830,25836],{},[31,25798,25799,25802],{},[81,25800,25801],{},"--dataset.repo_id","：训练数据集仓库。",[31,25804,25805,25808],{},[81,25806,25807],{},"--policy.type=act","：策略模型类型为 ACT。",[31,25810,25811,25814],{},[81,25812,25813],{},"--output_dir","：本地训练输出目录。",[31,25816,25817,25820],{},[81,25818,25819],{},"--job_name","：训练任务名称。",[31,25822,25823,25826,25827,24891],{},[81,25824,25825],{},"--policy.device","：训练设备（如 ",[81,25828,25829],{},"cuda",[31,25831,25832,25835],{},[81,25833,25834],{},"--wandb.enable","：是否启用 WandB 可视化。",[31,25837,25838,25841],{},[81,25839,25840],{},"--policy.repo_id","：训练后模型推送目标仓库。",[35,25843,25844],{},[64,25845],{"alt":66,"src":25846},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[389,25848,25709],{},{"title":66,"searchDepth":98,"depth":98,"links":25850},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25722,"description":400},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25857,"title":25858,"body":25859,"description":400,"extension":401,"meta":25946,"navigation":403,"path":25947,"seo":25948,"stem":25949,"__hash__":25950},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25860,"toc":25944},[25861,25864,25867,25934,25942],[10,25862,25858],{"id":25863},"_8-策略部署与自动采集",[35,25865,25866],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[75,25868,25870],{"className":24151,"code":25869,"language":24153,"meta":66,"style":66},"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",[81,25871,25872,25878,25884,25890,25898,25904,25911,25919,25927],{"__ignoreMap":66},[84,25873,25874,25876],{"class":86,"line":87},[84,25875,25537],{"class":90},[84,25877,95],{"class":94},[84,25879,25880,25882],{"class":86,"line":98},[84,25881,25038],{"class":94},[84,25883,95],{"class":94},[84,25885,25886,25888],{"class":86,"line":70},[84,25887,25116],{"class":94},[84,25889,95],{"class":94},[84,25891,25892,25894,25896],{"class":86,"line":120},[84,25893,25245],{"class":94},[84,25895,25564],{"class":104},[84,25897,95],{"class":94},[84,25899,25900,25902],{"class":86,"line":131},[84,25901,25176],{"class":94},[84,25903,95],{"class":94},[84,25905,25906,25909],{"class":86,"line":145},[84,25907,25908],{"class":94},"  --display_data=false",[84,25910,95],{"class":94},[84,25912,25913,25915,25917],{"class":86,"line":156},[84,25914,25596],{"class":94},[84,25916,25599],{"class":104},[84,25918,95],{"class":94},[84,25920,25921,25923,25925],{"class":86,"line":164},[84,25922,25613],{"class":94},[84,25924,25616],{"class":104},[84,25926,95],{"class":94},[84,25928,25929,25932],{"class":86,"line":175},[84,25930,25931],{"class":94},"  --policy.path=",[84,25933,25791],{"class":104},[1480,25935,25936],{},[31,25937,25938,25941],{},[81,25939,25940],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[389,25943,25709],{},{"title":66,"searchDepth":98,"depth":98,"links":25945},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25858,"description":400},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25952,"title":25953,"body":25954,"description":400,"extension":401,"meta":25983,"navigation":403,"path":25984,"seo":25985,"stem":25986,"__hash__":25987},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25955,"toc":25981},[25956,25960,25963,25969,25972,25978],[10,25957,25959],{"id":25958},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[35,25961,25962],{},"项目地址：",[35,25964,25965],{},[39,25966,25967],{"href":25967,"rel":25968},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[43],[35,25970,25971],{},"参考教程：",[35,25973,25974],{},[39,25975,25976],{"href":25976,"rel":25977},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[43],[35,25979,25980],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":66,"searchDepth":98,"depth":98,"links":25982},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25953,"description":400},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25989,"title":25990,"body":25991,"description":25995,"extension":401,"meta":25996,"navigation":403,"path":25997,"seo":25998,"stem":25999,"__hash__":26000},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25992,"toc":25993},[],{"title":66,"searchDepth":98,"depth":98,"links":25994},[],"act复现",{"category":23707},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25990,"description":25995},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26002,"title":26003,"body":26004,"description":66,"extension":401,"meta":26306,"navigation":403,"path":26307,"seo":26308,"stem":26309,"__hash__":26310},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26005,"toc":26298},[26006,26009,26013,26023,26030,26037,26040,26047,26050,26053,26057,26069,26073,26119,26122,26125,26128,26131,26134,26138,26176,26182,26186,26240,26245,26248,26251,26256,26259,26264,26267,26270,26274,26277,26280,26284],[10,26007,26003],{"id":26008},"_1简介",[23,26010,26012],{"id":26011},"_11什么是-docker","1.1什么是 Docker？",[35,26014,26015,26016,26019,26020],{},"Docker 是一个开源的 ",[624,26017,26018],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[624,26021,26022],{},"一次构建，到处运行。",[35,26024,26025,26026,26029],{},"“ ",[624,26027,26028],{},"一次构建，到处运行"," ”也就是说：",[28,26031,26032],{},[31,26033,26034],{},[624,26035,26036],{},"之前：",[35,26038,26039],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[28,26041,26042],{},[31,26043,26044],{},[624,26045,26046],{},"使用docker后：",[35,26048,26049],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[35,26051,26052],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[23,26054,26056],{"id":26055},"_12它是怎么工作的","1.2.它是怎么工作的？",[1480,26058,26059,26062],{},[31,26060,26061],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[31,26063,26064,26065,26068],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[624,26066,26067],{},"无论在哪运行都一样稳定"," 。",[23,26070,26072],{"id":26071},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[612,26074,26075,26085],{},[615,26076,26077],{},[618,26078,26079,26082],{},[621,26080,26081],{"align":24065},"概念",[621,26083,26084],{"align":24065},"解释",[659,26086,26087,26095,26103,26111],{},[618,26088,26089,26092],{},[664,26090,26091],{"align":24065},"镜像",[664,26093,26094],{"align":24065},"Image，运行容器的模板，像是一个应用快照",[618,26096,26097,26100],{},[664,26098,26099],{"align":24065},"容器",[664,26101,26102],{"align":24065},"Container，运行中的镜像实例，有自己的文件系统、网络等",[618,26104,26105,26108],{},[664,26106,26107],{"align":24065},"Dockerfile",[664,26109,26110],{"align":24065},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[618,26112,26113,26116],{},[664,26114,26115],{"align":24065},"仓库",[664,26117,26118],{"align":24065},"Registry，存放镜像的地方，比如 Docker Hub",[35,26120,26121],{},"抽象化理解:",[35,26123,26124],{},"Docker镜像≈C++类",[35,26126,26127],{},"Docker容器≈C++类实例(即对象)",[35,26129,26130],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[35,26132,26133],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[23,26135,26137],{"id":26136},"_14类比理解","1.4.类比理解",[612,26139,26140,26150],{},[615,26141,26142],{},[618,26143,26144,26147],{},[621,26145,26146],{"align":24065},"传统部署",[621,26148,26149],{"align":24065},"Docker部署",[659,26151,26152,26160,26168],{},[618,26153,26154,26157],{},[664,26155,26156],{"align":24065},"手动安装依赖、调试版本不一致问题",[664,26158,26159],{"align":24065},"一次打包环境和代码",[618,26161,26162,26165],{},[664,26163,26164],{"align":24065},"程序“裸奔”跑在系统上",[664,26166,26167],{"align":24065},"程序“穿着容器”隔离运行",[618,26169,26170,26173],{},[664,26171,26172],{"align":24065},"容易“在我电脑上能跑”",[664,26174,26175],{"align":24065},"保证“无论在哪都能跑”",[35,26177,26178,26179],{},"就像快递包裹： ",[624,26180,26181],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[23,26183,26185],{"id":26184},"_15docker-的核心优势","1.5.Docker 的核心优势",[612,26187,26188,26198],{},[615,26189,26190],{},[618,26191,26192,26195],{},[621,26193,26194],{"align":24065},"优势",[621,26196,26197],{"align":24065},"说明",[659,26199,26200,26208,26216,26224,26232],{},[618,26201,26202,26205],{},[664,26203,26204],{"align":24065},"轻量级",[664,26206,26207],{"align":24065},"基于系统内核共享，启动速度快，占资源少",[618,26209,26210,26213],{},[664,26211,26212],{"align":24065},"跨平台",[664,26214,26215],{"align":24065},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[618,26217,26218,26221],{},[664,26219,26220],{"align":24065},"易于迁移部署",[664,26222,26223],{"align":24065},"应用和环境一起封装，不怕依赖不一致",[618,26225,26226,26229],{},[664,26227,26228],{"align":24065},"易于版本控制",[664,26230,26231],{"align":24065},"镜像版本可控，支持回滚",[618,26233,26234,26237],{},[664,26235,26236],{"align":24065},"生态丰富",[664,26238,26239],{"align":24065},"Docker Hub 上有成千上万的现成镜像可用",[28,26241,26242],{},[31,26243,26244],{},"在Linux上可以几乎实现无性能损失。",[35,26246,26247],{},"docker里的发行版和本机共用Linux内核。",[35,26249,26250],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[28,26252,26253],{},[31,26254,26255],{},"可以快速部署在绝大多数Linux发行版",[35,26257,26258],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[28,26260,26261],{},[31,26262,26263],{},"配置环境简单",[35,26265,26266],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[35,26268,26269],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[28,26271,26272],{},[31,26273,26236],{},[35,26275,26276],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[35,26278,26279],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[23,26281,26283],{"id":26282},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1480,26285,26286,26289,26292,26295],{},[31,26287,26288],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[31,26290,26291],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[31,26293,26294],{},"微服务架构：每个服务一个容器，灵活组合",[31,26296,26297],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":66,"searchDepth":98,"depth":98,"links":26299},[26300,26301,26302,26303,26304,26305],{"id":26011,"depth":70,"text":26012},{"id":26055,"depth":70,"text":26056},{"id":26071,"depth":70,"text":26072},{"id":26136,"depth":70,"text":26137},{"id":26184,"depth":70,"text":26185},{"id":26282,"depth":70,"text":26283},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26003,"description":66},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26312,"title":26313,"body":26314,"description":66,"extension":401,"meta":27047,"navigation":403,"path":27048,"seo":27049,"stem":27050,"__hash__":27051},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26315,"toc":27042},[26316,26319,26323,26326,26329,26335,26341,26345,26354,26357,26414,26417,26468,26471,26554,26557,26594,26598,26609,26622,26629,26632,26712,26715,26765,26768,26791,26795,26802,26805,26821,26827,26830,26846,26852,26855,26871,26885,26891,26911,26917,26920,26932,26938,26941,26955,26961,26964,26984,26989,26992,26995,26999,27002,27005,27008,27015,27018,27021,27024,27029,27034,27039],[10,26317,26313],{"id":26318},"_2安装docker",[23,26320,26322],{"id":26321},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[35,26324,26325],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[35,26327,26328],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[35,26330,26331],{},[39,26332,26333],{"href":26333,"rel":26334},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[43],[35,26336,26337],{},[39,26338,26339],{"href":26339,"rel":26340},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[43],[22327,26342,26344],{"id":26343},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[35,26346,26347,26348,26353],{},"以下内容根据 ",[39,26349,26352],{"href":26350,"rel":26351},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[43],"官方文档"," 修改而来。",[35,26355,26356],{},"如果你过去安装过 docker，先删掉：",[75,26358,26360],{"className":24151,"code":26359,"language":24153,"meta":66,"style":66},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[81,26361,26362],{"__ignoreMap":66},[84,26363,26364,26366,26369,26372,26375,26378,26381,26384,26387,26390,26393,26396,26399,26402,26405,26408,26411],{"class":86,"line":87},[84,26365,3354],{"class":473},[84,26367,26368],{"class":477}," pkg ",[84,26370,26371],{"class":473},"in",[84,26373,26374],{"class":104}," docker.io",[84,26376,26377],{"class":104}," docker-doc",[84,26379,26380],{"class":104}," docker-compose",[84,26382,26383],{"class":104}," docker-compose-v2",[84,26385,26386],{"class":104}," podman-docker",[84,26388,26389],{"class":104}," containerd",[84,26391,26392],{"class":104}," runc",[84,26394,26395],{"class":477},"; ",[84,26397,26398],{"class":473},"do",[84,26400,26401],{"class":90}," sudo",[84,26403,26404],{"class":104}," apt-get",[84,26406,26407],{"class":104}," remove",[84,26409,26410],{"class":477}," $pkg; ",[84,26412,26413],{"class":473},"done\n",[35,26415,26416],{},"首先安装依赖和GPG：",[75,26418,26422],{"className":26419,"code":26420,"language":26421,"meta":66,"style":66},"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",[81,26423,26424,26429,26434,26439,26444,26449,26454,26458,26463],{"__ignoreMap":66},[84,26425,26426],{"class":86,"line":87},[84,26427,26428],{},"# Add Docker's official GPG key:\n",[84,26430,26431],{"class":86,"line":98},[84,26432,26433],{},"sudo apt-get update\n",[84,26435,26436],{"class":86,"line":70},[84,26437,26438],{},"sudo apt-get install ca-certificates curl\n",[84,26440,26441],{"class":86,"line":120},[84,26442,26443],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[84,26445,26446],{"class":86,"line":131},[84,26447,26448],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[84,26450,26451],{"class":86,"line":145},[84,26452,26453],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[84,26455,26456],{"class":86,"line":156},[84,26457,2729],{"emptyLinePlaceholder":403},[84,26459,26460],{"class":86,"line":164},[84,26461,26462],{},"# 如果上面这行报错就弄下面这行\n",[84,26464,26465],{"class":86,"line":175},[84,26466,26467],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[35,26469,26470],{},"信任 Docker 的 GPG 公钥并添加仓库：",[75,26472,26474],{"className":24151,"code":26473,"language":24153,"meta":66,"style":66},"# 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",[81,26475,26476,26481,26487,26504,26537],{"__ignoreMap":66},[84,26477,26478],{"class":86,"line":87},[84,26479,26480],{"class":328},"# Add the repository to Apt sources:\n",[84,26482,26483,26485],{"class":86,"line":98},[84,26484,25453],{"class":94},[84,26486,95],{"class":94},[84,26488,26489,26492,26495,26498,26501],{"class":86,"line":70},[84,26490,26491],{"class":104},"  \"deb [arch=$(",[84,26493,26494],{"class":90},"dpkg",[84,26496,26497],{"class":94}," --print-architecture",[84,26499,26500],{"class":104},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[84,26502,26503],{"class":94},"\\\n",[84,26505,26506,26509,26511,26513,26516,26519,26521,26523,26526,26528,26530,26533,26535],{"class":86,"line":120},[84,26507,26508],{"class":104},"  \"",[84,26510,25427],{"class":477},[84,26512,1031],{"class":94},[84,26514,26515],{"class":104}," \u002Fetc\u002Fos-release",[84,26517,26518],{"class":477}," && ",[84,26520,25453],{"class":94},[84,26522,10053],{"class":104},[84,26524,26525],{"class":477},"$VERSION_CODENAME",[84,26527,725],{"class":104},[84,26529,902],{"class":477},[84,26531,26532],{"class":104},"\" stable\"",[84,26534,25437],{"class":473},[84,26536,95],{"class":94},[84,26538,26539,26542,26545,26548,26551],{"class":86,"line":131},[84,26540,26541],{"class":90},"  sudo",[84,26543,26544],{"class":104}," tee",[84,26546,26547],{"class":104}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[84,26549,26550],{"class":473}," >",[84,26552,26553],{"class":104}," \u002Fdev\u002Fnull\n",[35,26555,26556],{},"最后安装",[75,26558,26560],{"className":24151,"code":26559,"language":24153,"meta":66,"style":66},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[81,26561,26562,26571],{"__ignoreMap":66},[84,26563,26564,26566,26568],{"class":86,"line":87},[84,26565,24905],{"class":90},[84,26567,26404],{"class":104},[84,26569,26570],{"class":104}," update\n",[84,26572,26573,26575,26577,26579,26582,26585,26588,26591],{"class":86,"line":98},[84,26574,24905],{"class":90},[84,26576,26404],{"class":104},[84,26578,24163],{"class":104},[84,26580,26581],{"class":104}," docker-ce",[84,26583,26584],{"class":104}," docker-ce-cli",[84,26586,26587],{"class":104}," containerd.io",[84,26589,26590],{"class":104}," docker-buildx-plugin",[84,26592,26593],{"class":104}," docker-compose-plugin\n",[22327,26595,26597],{"id":26596},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[35,26599,26600,26601,26604,26605,26608],{},"查看自己自己包管理工具版本（dnf是 ",[624,26602,26603],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[624,26606,26607],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[75,26610,26612],{"className":24151,"code":26611,"language":24153,"meta":66,"style":66},"dnf --version\n",[81,26613,26614],{"__ignoreMap":66},[84,26615,26616,26619],{"class":86,"line":87},[84,26617,26618],{"class":90},"dnf",[84,26620,26621],{"class":94}," --version\n",[35,26623,26347,26624,26628],{},[39,26625,26352],{"href":26626,"rel":26627},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[43]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[35,26630,26631],{},"如果你之前安装过 docker，请先删掉",[75,26633,26635],{"className":24151,"code":26634,"language":24153,"meta":66,"style":66},"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",[81,26636,26637,26651,26658,26665,26672,26679,26686,26693,26700,26707],{"__ignoreMap":66},[84,26638,26639,26641,26644,26646,26649],{"class":86,"line":87},[84,26640,24905],{"class":90},[84,26642,26643],{"class":104}," dnf",[84,26645,26407],{"class":104},[84,26647,26648],{"class":104}," docker",[84,26650,95],{"class":94},[84,26652,26653,26656],{"class":86,"line":98},[84,26654,26655],{"class":104},"                  docker-client",[84,26657,95],{"class":94},[84,26659,26660,26663],{"class":86,"line":70},[84,26661,26662],{"class":104},"                  docker-client-latest",[84,26664,95],{"class":94},[84,26666,26667,26670],{"class":86,"line":120},[84,26668,26669],{"class":104},"                  docker-common",[84,26671,95],{"class":94},[84,26673,26674,26677],{"class":86,"line":131},[84,26675,26676],{"class":104},"                  docker-latest",[84,26678,95],{"class":94},[84,26680,26681,26684],{"class":86,"line":145},[84,26682,26683],{"class":104},"                  docker-latest-logrotate",[84,26685,95],{"class":94},[84,26687,26688,26691],{"class":86,"line":156},[84,26689,26690],{"class":104},"                  docker-logrotate",[84,26692,95],{"class":94},[84,26694,26695,26698],{"class":86,"line":164},[84,26696,26697],{"class":104},"                  docker-selinux",[84,26699,95],{"class":94},[84,26701,26702,26705],{"class":86,"line":175},[84,26703,26704],{"class":104},"                  docker-engine-selinux",[84,26706,95],{"class":94},[84,26708,26709],{"class":86,"line":185},[84,26710,26711],{"class":104},"                  docker-engine\n",[35,26713,26714],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[75,26716,26718],{"className":24151,"code":26717,"language":24153,"meta":66,"style":66},"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",[81,26719,26720,26734,26749],{"__ignoreMap":66},[84,26721,26722,26724,26726,26729,26731],{"class":86,"line":87},[84,26723,24905],{"class":90},[84,26725,26643],{"class":104},[84,26727,26728],{"class":94}," -y",[84,26730,24163],{"class":104},[84,26732,26733],{"class":104}," dnf-plugins-core\n",[84,26735,26736,26738,26740,26743,26746],{"class":86,"line":98},[84,26737,24905],{"class":90},[84,26739,26643],{"class":104},[84,26741,26742],{"class":104}," config-manager",[84,26744,26745],{"class":104}," addrepo",[84,26747,26748],{"class":94}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[84,26750,26751,26753,26756,26759,26762],{"class":86,"line":70},[84,26752,24905],{"class":90},[84,26754,26755],{"class":104}," sed",[84,26757,26758],{"class":94}," -i",[84,26760,26761],{"class":104}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[84,26763,26764],{"class":104}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[35,26766,26767],{},"最后安装：",[75,26769,26771],{"className":24151,"code":26770,"language":24153,"meta":66,"style":66},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[81,26772,26773],{"__ignoreMap":66},[84,26774,26775,26777,26779,26781,26783,26785,26787,26789],{"class":86,"line":87},[84,26776,24905],{"class":90},[84,26778,26643],{"class":104},[84,26780,24163],{"class":104},[84,26782,26581],{"class":104},[84,26784,26584],{"class":104},[84,26786,26587],{"class":104},[84,26788,26590],{"class":104},[84,26790,26593],{"class":104},[23,26792,26794],{"id":26793},"_22配置环境","2.2.配置环境",[22327,26796,26798,26801],{"id":26797},"_221检查-docker-服务状态",[624,26799,26800],{},"2.2.1.检查 Docker 服务状态"," ：",[35,26803,26804],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[75,26806,26808],{"className":24151,"code":26807,"language":24153,"meta":66,"style":66},"systemctl status docker\n",[81,26809,26810],{"__ignoreMap":66},[84,26811,26812,26815,26818],{"class":86,"line":87},[84,26813,26814],{"class":90},"systemctl",[84,26816,26817],{"class":104}," status",[84,26819,26820],{"class":104}," docker\n",[22327,26822,26824,26801],{"id":26823},"_222启动-docker-服务",[624,26825,26826],{},"2.2.2.启动 Docker 服务",[35,26828,26829],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[75,26831,26833],{"className":24151,"code":26832,"language":24153,"meta":66,"style":66},"sudo systemctl start docker\n",[81,26834,26835],{"__ignoreMap":66},[84,26836,26837,26839,26842,26844],{"class":86,"line":87},[84,26838,24905],{"class":90},[84,26840,26841],{"class":104}," systemctl",[84,26843,4513],{"class":104},[84,26845,26820],{"class":104},[22327,26847,26849,26801],{"id":26848},"_223设置-docker-开机自启",[624,26850,26851],{},"2.2.3.设置 Docker 开机自启",[35,26853,26854],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[75,26856,26858],{"className":24151,"code":26857,"language":24153,"meta":66,"style":66},"sudo systemctl enable docker\n",[81,26859,26860],{"__ignoreMap":66},[84,26861,26862,26864,26866,26869],{"class":86,"line":87},[84,26863,24905],{"class":90},[84,26865,26841],{"class":104},[84,26867,26868],{"class":104}," enable",[84,26870,26820],{"class":104},[22327,26872,26874,14124,26877,14124,26882,26801],{"id":26873},"_224将用户添加到-docker-组",[624,26875,26876],{},"2.2.4.将用户添加到",[624,26878,26879],{},[81,26880,26881],{},"docker",[624,26883,26884],{},"组",[35,26886,26887,26888,26890],{},"使用以下命令将当前用户添加到 ",[81,26889,26881],{}," 组：",[75,26892,26894],{"className":24151,"code":26893,"language":24153,"meta":66,"style":66},"sudo usermod -aG docker $USER\n",[81,26895,26896],{"__ignoreMap":66},[84,26897,26898,26900,26903,26906,26908],{"class":86,"line":87},[84,26899,24905],{"class":90},[84,26901,26902],{"class":104}," usermod",[84,26904,26905],{"class":94}," -aG",[84,26907,26648],{"class":104},[84,26909,26910],{"class":477}," $USER\n",[22327,26912,26914,26801],{"id":26913},"_225退出并重新登录",[624,26915,26916],{},"2.2.5.退出并重新登录",[35,26918,26919],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[75,26921,26923],{"className":24151,"code":26922,"language":24153,"meta":66,"style":66},"newgrp docker\n",[81,26924,26925],{"__ignoreMap":66},[84,26926,26927,26930],{"class":86,"line":87},[84,26928,26929],{"class":90},"newgrp",[84,26931,26820],{"class":104},[22327,26933,26935,26801],{"id":26934},"_226重新启动-docker-服务如果需要",[624,26936,26937],{},"2.2.6.重新启动 Docker 服务（如果需要）",[35,26939,26940],{},"确保 Docker 服务正在运行，可以使用以下命令：",[75,26942,26943],{"className":24151,"code":26832,"language":24153,"meta":66,"style":66},[81,26944,26945],{"__ignoreMap":66},[84,26946,26947,26949,26951,26953],{"class":86,"line":87},[84,26948,24905],{"class":90},[84,26950,26841],{"class":104},[84,26952,4513],{"class":104},[84,26954,26820],{"class":104},[22327,26956,26958,26801],{"id":26957},"_227重启电脑后检查-docker-服务状态",[624,26959,26960],{},"2.2.7.重启电脑后检查 Docker 服务状态",[35,26962,26963],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[75,26965,26967],{"className":24151,"code":26966,"language":24153,"meta":66,"style":66},"sudo reboot\nsystemctl status docker\n",[81,26968,26969,26976],{"__ignoreMap":66},[84,26970,26971,26973],{"class":86,"line":87},[84,26972,24905],{"class":90},[84,26974,26975],{"class":104}," reboot\n",[84,26977,26978,26980,26982],{"class":86,"line":98},[84,26979,26814],{"class":90},[84,26981,26817],{"class":104},[84,26983,26820],{"class":104},[35,26985,26986],{},[64,26987],{"alt":66,"src":26988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[35,26990,26991],{},"第三行显示enabled说明开机自启动成功",[35,26993,26994],{},"按q退出",[23,26996,26998],{"id":26997},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[35,27000,27001],{},"优先使用linux来使用docker是比较好的",[35,27003,27004],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[35,27006,27007],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[35,27009,27010,27011],{},"官方下载安装:",[39,27012,27013],{"href":27013,"rel":27014},"https:\u002F\u002Fwww.docker.com\u002F",[43],[35,27016,27017],{},"Windows的Docker显卡直通与USB直通:",[35,27019,27020],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[35,27022,27023],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[35,27025,27026],{},[64,27027],{"alt":66,"src":27028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[35,27030,27031],{},[64,27032],{"alt":66,"src":27033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[35,27035,27036],{},[64,27037],{"alt":66,"src":27038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[389,27040,27041],{},"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":66,"searchDepth":98,"depth":98,"links":27043},[27044,27045,27046],{"id":26321,"depth":70,"text":26322},{"id":26793,"depth":70,"text":26794},{"id":26997,"depth":70,"text":26998},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26313,"description":66},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27053,"title":27054,"body":27055,"description":27062,"extension":401,"meta":27754,"navigation":403,"path":27755,"seo":27756,"stem":27757,"__hash__":27758},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27056,"toc":27748},[27057,27060,27063,27067,27072,27077,27080,27108,27113,27122,27125,27130,27134,27141,27146,27152,27156,27159,27163,27168,27259,27264,27282,27287,27308,27313,27329,27333,27338,27367,27372,27418,27423,27467,27475,27492,27497,27513,27518,27532,27535,27538,27541,27544,27573,27576,27581,27585,27588,27591,27597,27600,27603,27606,27668,27675,27680,27683,27701,27705,27708,27725,27728,27731,27745],[10,27058,27054],{"id":27059},"_3docker直通",[35,27061,27062],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[23,27064,27066],{"id":27065},"_31usb直通","3.1.USB直通",[35,27068,27069],{},[64,27070],{"alt":66,"src":27071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[28,27073,27074],{},[31,27075,27076],{},"方法一(不是很推荐新手)：",[35,27078,27079],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[75,27081,27083],{"className":24151,"code":27082,"language":24153,"meta":66,"style":66},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[81,27084,27085,27093,27098],{"__ignoreMap":66},[84,27086,27087,27090],{"class":86,"line":87},[84,27088,27089],{"class":90},"ls",[84,27091,27092],{"class":104}," \u002Fdev\n",[84,27094,27095],{"class":86,"line":98},[84,27096,27097],{"class":328},"#例如\n",[84,27099,27100,27103,27105],{"class":86,"line":70},[84,27101,27102],{"class":477},"--device",[84,27104,523],{"class":473},[84,27106,27107],{"class":104},"\u002Fdev\u002Ftty_USB0\n",[28,27109,27110],{"start":98},[31,27111,27112],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[75,27114,27116],{"className":24151,"code":27115,"language":24153,"meta":66,"style":66},"--privileged\n",[81,27117,27118],{"__ignoreMap":66},[84,27119,27120],{"class":86,"line":87},[84,27121,27115],{"class":90},[35,27123,27124],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[35,27126,27127],{},[64,27128],{"alt":66,"src":27129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[23,27131,27133],{"id":27132},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[35,27135,27136,27137,27140],{},"NVIDIA Container Toolkit使用户 ",[624,27138,27139],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[35,27142,27143],{},[64,27144],{"alt":66,"src":27145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[35,27147,27148],{},[39,27149,27150],{"href":27150,"rel":27151},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[43],[22327,27153,27155],{"id":27154},"_321安装","3.2.1.安装",[35,27157,27158],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23239,27160,27162],{"id":27161},"_3211ubuntu","3.2.1.1.Ubuntu",[28,27164,27165],{},[31,27166,27167],{},"配置存储库 并更新",[75,27169,27171],{"className":24151,"code":27170,"language":24153,"meta":66,"style":66},"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",[81,27172,27173,27202,27221,27233,27245,27251],{"__ignoreMap":66},[84,27174,27175,27178,27181,27184,27186,27188,27191,27194,27197,27200],{"class":86,"line":87},[84,27176,27177],{"class":90},"curl",[84,27179,27180],{"class":94}," -fsSL",[84,27182,27183],{"class":104}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[84,27185,25437],{"class":473},[84,27187,26401],{"class":90},[84,27189,27190],{"class":104}," gpg",[84,27192,27193],{"class":94}," --dearmor",[84,27195,27196],{"class":94}," -o",[84,27198,27199],{"class":104}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[84,27201,95],{"class":94},[84,27203,27204,27207,27209,27211,27214,27217,27219],{"class":86,"line":98},[84,27205,27206],{"class":477},"  && ",[84,27208,27177],{"class":90},[84,27210,352],{"class":94},[84,27212,27213],{"class":94}," -L",[84,27215,27216],{"class":104}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[84,27218,25437],{"class":473},[84,27220,95],{"class":94},[84,27222,27223,27226,27229,27231],{"class":86,"line":70},[84,27224,27225],{"class":90},"    sed",[84,27227,27228],{"class":104}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[84,27230,25437],{"class":473},[84,27232,95],{"class":94},[84,27234,27235,27238,27240,27243],{"class":86,"line":120},[84,27236,27237],{"class":90},"    sudo",[84,27239,26544],{"class":104},[84,27241,27242],{"class":104}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[84,27244,95],{"class":94},[84,27246,27247,27249],{"class":86,"line":131},[84,27248,27206],{"class":477},[84,27250,26503],{"class":94},[84,27252,27253,27255,27257],{"class":86,"line":145},[84,27254,27237],{"class":90},[84,27256,26404],{"class":104},[84,27258,26570],{"class":104},[28,27260,27261],{"start":98},[31,27262,27263],{},"安装nvidia-docker2",[75,27265,27267],{"className":24151,"code":27266,"language":24153,"meta":66,"style":66},"sudo apt-get install -y nvidia-docker2\n",[81,27268,27269],{"__ignoreMap":66},[84,27270,27271,27273,27275,27277,27279],{"class":86,"line":87},[84,27272,24905],{"class":90},[84,27274,26404],{"class":104},[84,27276,24163],{"class":104},[84,27278,26728],{"class":94},[84,27280,27281],{"class":104}," nvidia-docker2\n",[28,27283,27284],{"start":70},[31,27285,27286],{},"使用nvidia-ctk命令配置container runtime",[75,27288,27290],{"className":24151,"code":27289,"language":24153,"meta":66,"style":66},"sudo nvidia-ctk runtime configure --runtime=docker\n",[81,27291,27292],{"__ignoreMap":66},[84,27293,27294,27296,27299,27302,27305],{"class":86,"line":87},[84,27295,24905],{"class":90},[84,27297,27298],{"class":104}," nvidia-ctk",[84,27300,27301],{"class":104}," runtime",[84,27303,27304],{"class":104}," configure",[84,27306,27307],{"class":94}," --runtime=docker\n",[28,27309,27310],{"start":120},[31,27311,27312],{},"重启docker服务:",[75,27314,27316],{"className":24151,"code":27315,"language":24153,"meta":66,"style":66},"sudo systemctl restart docker\n",[81,27317,27318],{"__ignoreMap":66},[84,27319,27320,27322,27324,27327],{"class":86,"line":87},[84,27321,24905],{"class":90},[84,27323,26841],{"class":104},[84,27325,27326],{"class":104}," restart",[84,27328,26820],{"class":104},[23239,27330,27332],{"id":27331},"_3212fedora","3.2.1.2.Fedora",[28,27334,27335],{},[31,27336,27337],{},"配置存储库",[75,27339,27341],{"className":24151,"code":27340,"language":24153,"meta":66,"style":66},"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",[81,27342,27343,27358],{"__ignoreMap":66},[84,27344,27345,27347,27349,27351,27354,27356],{"class":86,"line":87},[84,27346,27177],{"class":90},[84,27348,352],{"class":94},[84,27350,27213],{"class":94},[84,27352,27353],{"class":104}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[84,27355,25437],{"class":473},[84,27357,95],{"class":94},[84,27359,27360,27362,27364],{"class":86,"line":98},[84,27361,24905],{"class":90},[84,27363,26544],{"class":104},[84,27365,27366],{"class":104}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[28,27368,27369],{"start":98},[31,27370,27371],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[75,27373,27375],{"className":24151,"code":27374,"language":24153,"meta":66,"style":66},"# 如果是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",[81,27376,27377,27382,27396,27400,27405],{"__ignoreMap":66},[84,27378,27379],{"class":86,"line":87},[84,27380,27381],{"class":328},"# 如果是RHEL或者Rocky（DNF4）\n",[84,27383,27384,27386,27388,27390,27393],{"class":86,"line":98},[84,27385,24905],{"class":90},[84,27387,26643],{"class":104},[84,27389,26742],{"class":104},[84,27391,27392],{"class":94}," --add-repo",[84,27394,27395],{"class":104}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[84,27397,27398],{"class":86,"line":70},[84,27399,2729],{"emptyLinePlaceholder":403},[84,27401,27402],{"class":86,"line":120},[84,27403,27404],{"class":328},"# 如果是Feodra41+（DNF5）\n",[84,27406,27407,27409,27411,27413,27415],{"class":86,"line":131},[84,27408,24905],{"class":90},[84,27410,26643],{"class":104},[84,27412,26742],{"class":104},[84,27414,26745],{"class":104},[84,27416,27417],{"class":94}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[28,27419,27420],{"start":70},[31,27421,27422],{},"安装NVIDIA Container Toolki包",[75,27424,27426],{"className":24151,"code":27425,"language":24153,"meta":66,"style":66},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[81,27427,27428,27433,27446,27450,27455],{"__ignoreMap":66},[84,27429,27430],{"class":86,"line":87},[84,27431,27432],{"class":328},"# 如果是RHEL或者Rocky\n",[84,27434,27435,27437,27439,27441,27443],{"class":86,"line":98},[84,27436,24905],{"class":90},[84,27438,26643],{"class":104},[84,27440,24163],{"class":104},[84,27442,26728],{"class":94},[84,27444,27445],{"class":104}," nvidia-container-toolkit\n",[84,27447,27448],{"class":86,"line":70},[84,27449,2729],{"emptyLinePlaceholder":403},[84,27451,27452],{"class":86,"line":120},[84,27453,27454],{"class":328},"# 如果是Fedora\n",[84,27456,27457,27459,27461,27463,27465],{"class":86,"line":131},[84,27458,24905],{"class":90},[84,27460,26643],{"class":104},[84,27462,24163],{"class":104},[84,27464,26728],{"class":94},[84,27466,27445],{"class":104},[28,27468,27469],{"start":120},[31,27470,27471,27472,27474],{},"安装nvidia-docker2 ： 在Fedora上使用",[81,27473,26618],{},"进行安装",[75,27476,27478],{"className":24151,"code":27477,"language":24153,"meta":66,"style":66},"sudo dnf install -y nvidia-docker2\n",[81,27479,27480],{"__ignoreMap":66},[84,27481,27482,27484,27486,27488,27490],{"class":86,"line":87},[84,27483,24905],{"class":90},[84,27485,26643],{"class":104},[84,27487,24163],{"class":104},[84,27489,26728],{"class":94},[84,27491,27281],{"class":104},[28,27493,27494],{"start":131},[31,27495,27496],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[75,27498,27499],{"className":24151,"code":27289,"language":24153,"meta":66,"style":66},[81,27500,27501],{"__ignoreMap":66},[84,27502,27503,27505,27507,27509,27511],{"class":86,"line":87},[84,27504,24905],{"class":90},[84,27506,27298],{"class":104},[84,27508,27301],{"class":104},[84,27510,27304],{"class":104},[84,27512,27307],{"class":94},[28,27514,27515],{"start":145},[31,27516,27517],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[75,27519,27520],{"className":24151,"code":27315,"language":24153,"meta":66,"style":66},[81,27521,27522],{"__ignoreMap":66},[84,27523,27524,27526,27528,27530],{"class":86,"line":87},[84,27525,24905],{"class":90},[84,27527,26841],{"class":104},[84,27529,27326],{"class":104},[84,27531,26820],{"class":104},[35,27533,27534],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[35,27536,27537],{},"方法：",[35,27539,27540],{},"1️⃣nvidia-smi",[35,27542,27543],{},"2️⃣运行nvidia cuda 容器进行测试",[75,27545,27547],{"className":24151,"code":27546,"language":24153,"meta":66,"style":66},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[81,27548,27549],{"__ignoreMap":66},[84,27550,27551,27553,27555,27558,27561,27564,27567,27570],{"class":86,"line":87},[84,27552,24905],{"class":90},[84,27554,26648],{"class":104},[84,27556,27557],{"class":104}," run",[84,27559,27560],{"class":94}," --rm",[84,27562,27563],{"class":94}," --gpus",[84,27565,27566],{"class":104}," all",[84,27568,27569],{"class":104}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[84,27571,27572],{"class":104}," nvidia-smi\n",[35,27574,27575],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[35,27577,27578],{},[64,27579],{"alt":66,"src":27580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[23,27582,27584],{"id":27583},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[35,27586,27587],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[35,27589,27590],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[35,27592,27593],{},[39,27594,27595],{"href":27595,"rel":27596},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[43],[35,27598,27599],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[35,27601,27602],{},"我们只需要找到对应的Docker镜像当底包即可。",[35,27604,27605],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[612,27607,27608,27624],{},[615,27609,27610],{},[618,27611,27612,27615,27618,27621],{},[621,27613,27614],{"align":24065},"镜像类型",[621,27616,27617],{"align":24065},"适用场景",[621,27619,27620],{"align":24065},"示例标签",[621,27622,27623],{"align":24065},"大小",[659,27625,27626,27640,27654],{},[618,27627,27628,27631,27634,27637],{},[664,27629,27630],{"align":24065},"base",[664,27632,27633],{"align":24065},"仅需 CUDA 运行时库",[664,27635,27636],{"align":24065},"12.4.0-base-ubuntu22.04",[664,27638,27639],{"align":24065},"~240MB",[618,27641,27642,27645,27648,27651],{},[664,27643,27644],{"align":24065},"runtime",[664,27646,27647],{"align":24065},"部署编译后的应用（含数学库）",[664,27649,27650],{"align":24065},"12.4.0-runtime-ubuntu22.04",[664,27652,27653],{"align":24065},"~2GB",[618,27655,27656,27659,27662,27665],{},[664,27657,27658],{"align":24065},"devel",[664,27660,27661],{"align":24065},"开发环境（含编译工具）",[664,27663,27664],{"align":24065},"12.4.0-devel-ubuntu22.04",[664,27666,27667],{"align":24065},"~3GB",[35,27669,27670,27671,27674],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[81,27672,27673],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[35,27676,27677],{},[64,27678],{"alt":66,"src":27679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[35,27681,27682],{},"在dockerfile里就可以开头这么写：",[75,27684,27686],{"className":24151,"code":27685,"language":24153,"meta":66,"style":66},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[81,27687,27688,27693],{"__ignoreMap":66},[84,27689,27690],{"class":86,"line":87},[84,27691,27692],{"class":328},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[84,27694,27695,27698],{"class":86,"line":98},[84,27696,27697],{"class":90},"FROM",[84,27699,27700],{"class":104}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[23,27702,27704],{"id":27703},"_34配置以太网","3.4.配置以太网",[35,27706,27707],{},"指定网络模式",[75,27709,27711],{"className":24151,"code":27710,"language":24153,"meta":66,"style":66},"--net=host \\\n",[81,27712,27713],{"__ignoreMap":66},[84,27714,27715,27718,27720,27723],{"class":86,"line":87},[84,27716,27717],{"class":477},"--net",[84,27719,523],{"class":473},[84,27721,27722],{"class":104},"host",[84,27724,95],{"class":90},[35,27726,27727],{},"启动参数里加上这行即可。具体在下方",[35,27729,27730],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1480,27732,27733,27736,27739,27742],{},[31,27734,27735],{},"--net=bridge:默认选项，表示连接到默认的网桥",[31,27737,27738],{},"--net=host:容器使用宿主机的网络",[31,27740,27741],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[31,27743,27744],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[389,27746,27747],{},"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":66,"searchDepth":98,"depth":98,"links":27749},[27750,27751,27752,27753],{"id":27065,"depth":70,"text":27066},{"id":27132,"depth":70,"text":27133},{"id":27583,"depth":70,"text":27584},{"id":27703,"depth":70,"text":27704},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27054,"description":27062},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27760,"title":27761,"body":27762,"description":27769,"extension":401,"meta":27775,"navigation":403,"path":27776,"seo":27777,"stem":27778,"__hash__":27779},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27763,"toc":27773},[27764,27767,27770],[10,27765,27761],{"id":27766},"_4dockerhub换源",[35,27768,27769],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[35,27771,27772],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":66,"searchDepth":98,"depth":98,"links":27774},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27761,"description":27769},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27781,"title":27782,"body":27783,"description":66,"extension":401,"meta":28795,"navigation":403,"path":28796,"seo":28797,"stem":28798,"__hash__":28799},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27784,"toc":28790},[27785,27788,27792,27798,27802,27805,28145,28148,28151,28154,28159,28164,28167,28170,28173,28176,28195,28198,28209,28215,28397,28407,28423,28686,28688,28713,28728,28737,28787],[10,27786,27782],{"id":27787},"_5docker命令学习",[23,27789,27791],{"id":27790},"_51参考文档","5.1.参考文档",[35,27793,27794],{},[39,27795,27796],{"href":27796,"rel":27797},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[43],[23,27799,27801],{"id":27800},"_52常用命令","5.2.常用命令",[35,27803,27804],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[612,27806,27807,27820],{},[615,27808,27809],{},[618,27810,27811,27814,27817],{},[621,27812,27813],{"align":24065},"命令",[621,27815,27816],{"align":24065},"描述",[621,27818,27819],{"align":24065},"示例",[659,27821,27822,27833,27844,27855,27866,27877,27888,27899,27909,27920,27931,27942,27952,27963,27974,27985,27995,28005,28015,28025,28036,28047,28058,28069,28080,28091,28101,28112,28123,28134],{},[618,27823,27824,27827,27830],{},[664,27825,27826],{"align":24065},"docker run",[664,27828,27829],{"align":24065},"创建并启动一个新的容器。",[664,27831,27832],{"align":24065},"docker run -it ubuntu bash",[618,27834,27835,27838,27841],{},[664,27836,27837],{"align":24065},"docker build",[664,27839,27840],{"align":24065},"通过指定的 Dockerfile 创建一个新的镜像。",[664,27842,27843],{"align":24065},"docker build -t myimage .",[618,27845,27846,27849,27852],{},[664,27847,27848],{"align":24065},"docker pull",[664,27850,27851],{"align":24065},"从 Docker 仓库拉取镜像。",[664,27853,27854],{"align":24065},"docker pull ubuntu",[618,27856,27857,27860,27863],{},[664,27858,27859],{"align":24065},"docker push",[664,27861,27862],{"align":24065},"将本地镜像推送到 Docker 仓库。",[664,27864,27865],{"align":24065},"docker push myimage",[618,27867,27868,27871,27874],{},[664,27869,27870],{"align":24065},"docker stop",[664,27872,27873],{"align":24065},"停止一个正在运行的容器。",[664,27875,27876],{"align":24065},"docker stop container_id",[618,27878,27879,27882,27885],{},[664,27880,27881],{"align":24065},"docker start",[664,27883,27884],{"align":24065},"启动一个已经存在的容器。",[664,27886,27887],{"align":24065},"docker start container_id",[618,27889,27890,27893,27896],{},[664,27891,27892],{"align":24065},"docker restart",[664,27894,27895],{"align":24065},"重新启动容器。",[664,27897,27898],{"align":24065},"docker restart container_id",[618,27900,27901,27904,27907],{},[664,27902,27903],{"align":24065},"docker ps",[664,27905,27906],{"align":24065},"列出当前正在运行的容器。",[664,27908,27903],{"align":24065},[618,27910,27911,27914,27917],{},[664,27912,27913],{"align":24065},"docker rm",[664,27915,27916],{"align":24065},"删除一个或多个停止的容器。",[664,27918,27919],{"align":24065},"docker rm container_id",[618,27921,27922,27925,27928],{},[664,27923,27924],{"align":24065},"docker exec",[664,27926,27927],{"align":24065},"在一个正在运行的容器中执行命令。",[664,27929,27930],{"align":24065},"docker exec -it container_id bash",[618,27932,27933,27936,27939],{},[664,27934,27935],{"align":24065},"docker logs",[664,27937,27938],{"align":24065},"查看容器的日志输出。",[664,27940,27941],{"align":24065},"docker logs container_id",[618,27943,27944,27947,27950],{},[664,27945,27946],{"align":24065},"docker images",[664,27948,27949],{"align":24065},"列出本地所有镜像。",[664,27951,27946],{"align":24065},[618,27953,27954,27957,27960],{},[664,27955,27956],{"align":24065},"docker rmi",[664,27958,27959],{"align":24065},"删除一个或多个镜像。",[664,27961,27962],{"align":24065},"docker rmi myimage",[618,27964,27965,27968,27971],{},[664,27966,27967],{"align":24065},"docker network",[664,27969,27970],{"align":24065},"管理 Docker 网络。",[664,27972,27973],{"align":24065},"docker network ls",[618,27975,27976,27979,27982],{},[664,27977,27978],{"align":24065},"docker volume",[664,27980,27981],{"align":24065},"管理 Docker 数据卷。",[664,27983,27984],{"align":24065},"docker volume ls",[618,27986,27987,27990,27993],{},[664,27988,27989],{"align":24065},"docker-compose up",[664,27991,27992],{"align":24065},"启动 docker-compose.yml 中定义的所有服务。",[664,27994,27989],{"align":24065},[618,27996,27997,28000,28003],{},[664,27998,27999],{"align":24065},"docker-compose down",[664,28001,28002],{"align":24065},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[664,28004,27999],{"align":24065},[618,28006,28007,28010,28013],{},[664,28008,28009],{"align":24065},"docker info",[664,28011,28012],{"align":24065},"显示 Docker 系统的详细信息。",[664,28014,28009],{"align":24065},[618,28016,28017,28020,28023],{},[664,28018,28019],{"align":24065},"docker stats",[664,28021,28022],{"align":24065},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[664,28024,28019],{"align":24065},[618,28026,28027,28030,28033],{},[664,28028,28029],{"align":24065},"docker inspect",[664,28031,28032],{"align":24065},"查看容器或镜像的详细信息（JSON 格式）。",[664,28034,28035],{"align":24065},"docker inspect container_id",[618,28037,28038,28041,28044],{},[664,28039,28040],{"align":24065},"docker save",[664,28042,28043],{"align":24065},"将一个镜像保存为 tar 文件。",[664,28045,28046],{"align":24065},"docker save -o myimage.tar myimage",[618,28048,28049,28052,28055],{},[664,28050,28051],{"align":24065},"docker load",[664,28053,28054],{"align":24065},"从 tar 文件中加载镜像。",[664,28056,28057],{"align":24065},"docker load -i myimage.tar",[618,28059,28060,28063,28066],{},[664,28061,28062],{"align":24065},"docker tag",[664,28064,28065],{"align":24065},"为镜像添加标签（tag）。",[664,28067,28068],{"align":24065},"docker tag myimage myimage:v1",[618,28070,28071,28074,28077],{},[664,28072,28073],{"align":24065},"docker buildx build",[664,28075,28076],{"align":24065},"使用 Buildx 构建多架构镜像。",[664,28078,28079],{"align":24065},"docker buildx build -t myimage .",[618,28081,28082,28085,28088],{},[664,28083,28084],{"align":24065},"docker buildx create",[664,28086,28087],{"align":24065},"创建一个新的 Buildx 构建实例。",[664,28089,28090],{"align":24065},"docker buildx create –use",[618,28092,28093,28096,28099],{},[664,28094,28095],{"align":24065},"docker buildx ls",[664,28097,28098],{"align":24065},"列出所有可用的 Buildx 构建实例。",[664,28100,28095],{"align":24065},[618,28102,28103,28106,28109],{},[664,28104,28105],{"align":24065},"docker buildx use",[664,28107,28108],{"align":24065},"设置当前的 Buildx 构建实例。",[664,28110,28111],{"align":24065},"docker buildx use mybuilder",[618,28113,28114,28117,28120],{},[664,28115,28116],{"align":24065},"docker buildx bake",[664,28118,28119],{"align":24065},"使用 Bake 文件批量构建镜像。",[664,28121,28122],{"align":24065},"docker buildx bake -f bake.hcl",[618,28124,28125,28128,28131],{},[664,28126,28127],{"align":24065},"docker buildx build –push",[664,28129,28130],{"align":24065},"构建镜像并推送到镜像仓库。",[664,28132,28133],{"align":24065},"docker buildx build –push -t myimage .",[618,28135,28136,28139,28142],{},[664,28137,28138],{"align":24065},"docker buildx build –platform",[664,28140,28141],{"align":24065},"构建镜像并为多个平台生成支持。",[664,28143,28144],{"align":24065},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[35,28146,28147],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[35,28149,28150],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[35,28152,28153],{},"docker images 可以查看已经下载的镜像",[35,28155,28156],{},[64,28157],{"alt":66,"src":28158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[35,28160,28161],{},[624,28162,28163],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[35,28165,28166],{},"docker rmi $(docker images -q) 删除所有的镜像",[35,28168,28169],{},"docker container logs 查看容器日志",[35,28171,28172],{},"docker top 查看容器里的进程",[35,28174,28175],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[75,28177,28179],{"className":24151,"code":28178,"language":24153,"meta":66,"style":66},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[81,28180,28181],{"__ignoreMap":66},[84,28182,28183,28186,28189,28192],{"class":86,"line":87},[84,28184,28185],{"class":90},"如：docker",[84,28187,28188],{"class":104}," cp",[84,28190,28191],{"class":104}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[84,28193,28194],{"class":104}," \u002Fmydata\u002Fnginx\n",[35,28196,28197],{},"docker run时在启动容器的时候会有几个常用的选项：",[1480,28199,28200,28203,28206],{},[31,28201,28202],{},"-d选项：表示后台运行",[31,28204,28205],{},"-P选项：随机端口映射",[31,28207,28208],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[23,28210,28212],{"id":28211},"_53run命令的参数非常重要",[624,28213,28214],{},"5.3.run命令的参数（非常重要）",[612,28216,28217,28230],{},[615,28218,28219],{},[618,28220,28221,28224,28227],{},[621,28222,28223],{"align":24065},"参数\u002F配置",[621,28225,28226],{"align":24065},"功能说明",[621,28228,28229],{"align":24065},"重要性与参考依据",[659,28231,28232,28243,28254,28265,28276,28287,28298,28309,28320,28331,28342,28353,28364,28375,28386],{},[618,28233,28234,28237,28240],{},[664,28235,28236],{"align":24065},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[664,28238,28239],{"align":24065},"指定容器名称，便于后续管理",[664,28241,28242],{"align":24065},"替代随机生成的容器名。",[618,28244,28245,28248,28251],{},[664,28246,28247],{"align":24065},"–gpus all",[664,28249,28250],{"align":24065},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[664,28252,28253],{"align":24065},"用于CUDA加速等GPU依赖任务。",[618,28255,28256,28259,28262],{},[664,28257,28258],{"align":24065},"-e NVIDIA_DRIVER_CAPABILITIES=all",[664,28260,28261],{"align":24065},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[664,28263,28264],{"align":24065},"确保容器内GPU功能完整67。",[618,28266,28267,28270,28273],{},[664,28268,28269],{"align":24065},"-dit",[664,28271,28272],{"align":24065},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[664,28274,28275],{"align":24065},"允许容器在后台运行并支持交互操作。",[618,28277,28278,28281,28284],{},[664,28279,28280],{"align":24065},"–privileged",[664,28282,28283],{"align":24065},"赋予容器完全主机权限（可访问设备、内核模块等）",[664,28285,28286],{"align":24065},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[618,28288,28289,28292,28295],{},[664,28290,28291],{"align":24065},"–net=host",[664,28293,28294],{"align":24065},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[664,28296,28297],{"align":24065},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[618,28299,28300,28303,28306],{},[664,28301,28302],{"align":24065},"–group-add audio–group-add video–group-add dialout",[664,28304,28305],{"align":24065},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[664,28307,28308],{"align":24065},"避免权限问题（如避免无法调用摄像头、麦克风）。",[618,28310,28311,28314,28317],{},[664,28312,28313],{"align":24065},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[664,28315,28316],{"align":24065},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[664,28318,28319],{"align":24065},"支持容器内运行图形界面应用（如OpenCV可视化）。",[618,28321,28322,28325,28328],{},[664,28323,28324],{"align":24065},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[664,28326,28327],{"align":24065},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[664,28329,28330],{"align":24065},"实现容器内图形显示。",[618,28332,28333,28336,28339],{},[664,28334,28335],{"align":24065},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[664,28337,28338],{"align":24065},"挂载X11认证文件（只读）",[664,28340,28341],{"align":24065},"确保容器有权连接宿主机显示服务。",[618,28343,28344,28347,28350],{},[664,28345,28346],{"align":24065},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[664,28348,28349],{"align":24065},"挂载Wayland显示协议相关目录",[664,28351,28352],{"align":24065},"支持Wayland协议的图形显示。",[618,28354,28355,28358,28361],{},[664,28356,28357],{"align":24065},"–ulimit nofile=1024:524288",[664,28359,28360],{"align":24065},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[664,28362,28363],{"align":24065},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[618,28365,28366,28369,28372],{},[664,28367,28368],{"align":24065},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[664,28370,28371],{"align":24065},"挂载宿主机用户目录到容器内同名路径",[664,28373,28374],{"align":24065},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[618,28376,28377,28380,28383],{},[664,28378,28379],{"align":24065},"-w \u002Fhome\u002Ftungchiahui",[664,28381,28382],{"align":24065},"设置容器启动后的默认工作目录",[664,28384,28385],{"align":24065},"直接进入项目路径，方便执行命令2324。",[618,28387,28388,28391,28394],{},[664,28389,28390],{"align":24065},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[664,28392,28393],{"align":24065},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[664,28395,28396],{"align":24065},"提供预配置的深度学习与机器人开发环境。",[35,28398,28399,28400,28402,28403,28406],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[81,28401,24905],{},"加不加",[81,28404,28405],{},"sudo -E","都无所谓。",[35,28408,28409,28410,28412,28413,28415,28416,28419,28420,28422],{},"用户已经被加到docker组了，不用",[81,28411,24905],{},"也行跑，其次，",[81,28414,24905],{},"运行的话，你的",[81,28417,28418],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[81,28421,28418],{},"更不可能变了。",[75,28424,28426],{"className":24151,"code":28425,"language":24153,"meta":66,"style":66},"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",[81,28427,28428,28441,28451,28461,28473,28480,28487,28494,28504,28513,28522,28536,28548,28560,28569,28579,28588,28603,28636,28663,28674,28681],{"__ignoreMap":66},[84,28429,28430,28432,28434,28436,28439],{"class":86,"line":87},[84,28431,24905],{"class":90},[84,28433,26648],{"class":104},[84,28435,27557],{"class":104},[84,28437,28438],{"class":94}," --name=ros_opencv_cuda",[84,28440,95],{"class":94},[84,28442,28443,28446,28449],{"class":86,"line":98},[84,28444,28445],{"class":477},"--gpus ",[84,28447,28448],{"class":104},"all",[84,28450,95],{"class":94},[84,28452,28453,28456,28459],{"class":86,"line":70},[84,28454,28455],{"class":477},"-e ",[84,28457,28458],{"class":104},"NVIDIA_DRIVER_CAPABILITIES=all",[84,28460,95],{"class":94},[84,28462,28463,28465,28468,28471],{"class":86,"line":120},[84,28464,28455],{"class":477},[84,28466,28467],{"class":104},"DISPLAY=",[84,28469,28470],{"class":477},"$DISPLAY ",[84,28472,26503],{"class":94},[84,28474,28475,28478],{"class":86,"line":131},[84,28476,28477],{"class":477},"-dit ",[84,28479,26503],{"class":94},[84,28481,28482,28485],{"class":86,"line":145},[84,28483,28484],{"class":477},"--privileged ",[84,28486,26503],{"class":94},[84,28488,28489,28492],{"class":86,"line":156},[84,28490,28491],{"class":477},"--net=host ",[84,28493,26503],{"class":94},[84,28495,28496,28499,28502],{"class":86,"line":164},[84,28497,28498],{"class":477},"--group-add ",[84,28500,28501],{"class":104},"audio",[84,28503,95],{"class":94},[84,28505,28506,28508,28511],{"class":86,"line":175},[84,28507,28498],{"class":477},[84,28509,28510],{"class":104},"video",[84,28512,95],{"class":94},[84,28514,28515,28517,28520],{"class":86,"line":185},[84,28516,28498],{"class":477},[84,28518,28519],{"class":104},"dialout",[84,28521,95],{"class":94},[84,28523,28524,28526,28529,28531,28534],{"class":86,"line":195},[84,28525,28455],{"class":477},[84,28527,28528],{"class":104},"XAUTHORITY=",[84,28530,28418],{"class":477},[84,28532,28533],{"class":104},"\u002F.Xauthority",[84,28535,95],{"class":94},[84,28537,28538,28540,28543,28546],{"class":86,"line":206},[84,28539,28455],{"class":477},[84,28541,28542],{"class":104},"WAYLAND_DISPLAY=",[84,28544,28545],{"class":477},"$WAYLAND_DISPLAY ",[84,28547,26503],{"class":94},[84,28549,28550,28552,28555,28558],{"class":86,"line":217},[84,28551,28455],{"class":477},[84,28553,28554],{"class":104},"XDG_RUNTIME_DIR=",[84,28556,28557],{"class":477},"$XDG_RUNTIME_DIR ",[84,28559,26503],{"class":94},[84,28561,28562,28564,28567],{"class":86,"line":227},[84,28563,28455],{"class":477},[84,28565,28566],{"class":104},"QT_QPA_PLATFORM=xcb",[84,28568,95],{"class":94},[84,28570,28571,28574,28577],{"class":86,"line":238},[84,28572,28573],{"class":477},"-v ",[84,28575,28576],{"class":104},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[84,28578,95],{"class":94},[84,28580,28581,28583,28586],{"class":86,"line":249},[84,28582,28573],{"class":477},[84,28584,28585],{"class":104},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[84,28587,95],{"class":94},[84,28589,28590,28593,28596,28598,28601],{"class":86,"line":262},[84,28591,28592],{"class":477},"-v $HOME",[84,28594,28595],{"class":104},"\u002F.Xauthority:",[84,28597,28418],{"class":477},[84,28599,28600],{"class":104},"\u002F.Xauthority:ro",[84,28602,95],{"class":94},[84,28604,28605,28607,28610,28612,28615,28618,28620,28623,28625,28627,28629,28631,28634],{"class":86,"line":273},[84,28606,28573],{"class":477},[84,28608,28609],{"class":104},"\u002Frun\u002Fuser\u002F",[84,28611,25427],{"class":477},[84,28613,28614],{"class":90},"id",[84,28616,28617],{"class":94}," -u",[84,28619,902],{"class":477},[84,28621,28622],{"class":104},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[84,28624,25427],{"class":477},[84,28626,28614],{"class":90},[84,28628,28617],{"class":94},[84,28630,902],{"class":477},[84,28632,28633],{"class":104},"\u002Fwayland-0",[84,28635,95],{"class":94},[84,28637,28638,28640,28642,28644,28646,28648,28650,28653,28655,28657,28659,28661],{"class":86,"line":283},[84,28639,28573],{"class":477},[84,28641,28609],{"class":104},[84,28643,25427],{"class":477},[84,28645,28614],{"class":90},[84,28647,28617],{"class":94},[84,28649,902],{"class":477},[84,28651,28652],{"class":104},":\u002Frun\u002Fuser\u002F",[84,28654,25427],{"class":477},[84,28656,28614],{"class":90},[84,28658,28617],{"class":94},[84,28660,14043],{"class":477},[84,28662,26503],{"class":94},[84,28664,28665,28667,28669,28672],{"class":86,"line":294},[84,28666,28592],{"class":477},[84,28668,1332],{"class":104},[84,28670,28671],{"class":477},"$HOME ",[84,28673,26503],{"class":94},[84,28675,28676,28679],{"class":86,"line":2028},[84,28677,28678],{"class":477},"-w $HOME ",[84,28680,26503],{"class":94},[84,28682,28683],{"class":86,"line":2057},[84,28684,28685],{"class":477},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[35,28687,9354],{},[28,28689,28690,28698,28701,28704],{},[31,28691,28692,14124,28694,28697],{},[81,28693,28458],{},[81,28695,28696],{},"--gpus all","没有英伟达显卡请注释。",[31,28699,28700],{},"--name后面请自己为容器起名。",[31,28702,28703],{},"最后一行仓库名称请你自己找对应的镜像填上。",[31,28705,28706,28707,28712],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23882,28708,28709],{},[624,28710,28711],{},"请不要加","。",[75,28714,28716],{"className":24151,"code":28715,"language":24153,"meta":66,"style":66},"--ulimit nofile=1024:524288 \\\n",[81,28717,28718],{"__ignoreMap":66},[84,28719,28720,28723,28726],{"class":86,"line":87},[84,28721,28722],{"class":90},"--ulimit",[84,28724,28725],{"class":104}," nofile=1024:524288",[84,28727,95],{"class":94},[35,28729,28730,28731,28736],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23882,28732,28733],{},[624,28734,28735],{},"不建议","**.**",[75,28738,28740],{"className":24151,"code":28739,"language":24153,"meta":66,"style":66},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[81,28741,28742,28769,28778],{"__ignoreMap":66},[84,28743,28744,28747,28750,28752,28754,28756,28758,28760,28762,28765,28767],{"class":86,"line":87},[84,28745,28746],{"class":90},"--user",[84,28748,28749],{"class":477}," $(",[84,28751,28614],{"class":90},[84,28753,28617],{"class":94},[84,28755,902],{"class":477},[84,28757,1332],{"class":104},[84,28759,25427],{"class":477},[84,28761,28614],{"class":90},[84,28763,28764],{"class":94}," -g",[84,28766,14043],{"class":477},[84,28768,26503],{"class":94},[84,28770,28771,28773,28776],{"class":86,"line":98},[84,28772,28573],{"class":477},[84,28774,28775],{"class":104},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[84,28777,95],{"class":94},[84,28779,28780,28782,28785],{"class":86,"line":70},[84,28781,28573],{"class":477},[84,28783,28784],{"class":104},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[84,28786,95],{"class":94},[389,28788,28789],{},"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":66,"searchDepth":98,"depth":98,"links":28791},[28792,28793,28794],{"id":27790,"depth":70,"text":27791},{"id":27800,"depth":70,"text":27801},{"id":28211,"depth":70,"text":28214},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27782,"description":66},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28801,"title":28802,"body":28803,"description":66,"extension":401,"meta":30426,"navigation":403,"path":30427,"seo":30428,"stem":30429,"__hash__":30430},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28804,"toc":30421},[28805,28808,28812,28815,29037,29041,29045,29048,29154,29159,29162,29167,29170,29175,29178,29183,29186,29198,29201,29206,29213,29241,29248,29324,29329,29332,29355,29357,29432,29437,29440,29444,29452,29457,29462,29466,29477,29483,29486,29489,29513,29516,29519,29547,29550,29553,30018,30021,30026,30031,30035,30058,30063,30067,30071,30074,30077,30080,30107,30110,30113,30131,30134,30137,30159,30167,30172,30177,30181,30184,30187,30190,30193,30238,30241,30259,30262,30267,30270,30291,30294,30350,30353,30358,30362,30365,30372,30375,30378,30383,30386,30402,30405,30418],[10,28806,28802],{"id":28807},"_6手动创建docker镜像",[23,28809,28811],{"id":28810},"_61dockerfile","6.1.DockerFile",[35,28813,28814],{},"常用命令：",[612,28816,28817,28828],{},[615,28818,28819],{},[618,28820,28821,28824,28826],{},[621,28822,28823],{"align":24065},"指令",[621,28825,26197],{"align":24065},[621,28827,27819],{"align":24065},[659,28829,28830,28840,28856,28867,28878,28889,28900,28911,28922,28936,28950,28961,28975,28986,28997,29011,29026],{},[618,28831,28832,28834,28837],{},[664,28833,27697],{"align":24065},[664,28835,28836],{"align":24065},"指定基础镜像，是 Dockerfile 的起点",[664,28838,28839],{"align":24065},"FROM ubuntu:22.04",[618,28841,28842,28845,28848],{},[664,28843,28844],{"align":24065},"LABEL",[664,28846,28847],{"align":24065},"添加元数据（如作者、版本等）",[664,28849,28850,28851,28855],{"align":24065},"LABEL maintainer=”",[39,28852,28854],{"href":28853},"mailto:you@example.com","you@example.com","”",[618,28857,28858,28861,28864],{},[664,28859,28860],{"align":24065},"ENV",[664,28862,28863],{"align":24065},"设置环境变量",[664,28865,28866],{"align":24065},"ENV PORT=8080",[618,28868,28869,28872,28875],{},[664,28870,28871],{"align":24065},"ARG",[664,28873,28874],{"align":24065},"构建参数，只在构建期间可用",[664,28876,28877],{"align":24065},"ARG VERSION=1.0",[618,28879,28880,28883,28886],{},[664,28881,28882],{"align":24065},"RUN",[664,28884,28885],{"align":24065},"构建镜像时运行命令",[664,28887,28888],{"align":24065},"RUN apt-get update && apt-get install -y curl",[618,28890,28891,28894,28897],{},[664,28892,28893],{"align":24065},"COPY",[664,28895,28896],{"align":24065},"复制文件到镜像中",[664,28898,28899],{"align":24065},"COPY . \u002Fapp",[618,28901,28902,28905,28908],{},[664,28903,28904],{"align":24065},"ADD",[664,28906,28907],{"align":24065},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[664,28909,28910],{"align":24065},"ADD archive.tar.gz \u002Fdata\u002F",[618,28912,28913,28916,28919],{},[664,28914,28915],{"align":24065},"WORKDIR",[664,28917,28918],{"align":24065},"设置工作目录",[664,28920,28921],{"align":24065},"WORKDIR \u002Fopt",[618,28923,28924,28927,28930],{},[664,28925,28926],{"align":24065},"CMD",[664,28928,28929],{"align":24065},"设置容器启动时默认命令（可被 docker run 覆盖）",[664,28931,28932,28933],{"align":24065},"CMD ",[84,28934,28935],{},"“node”, “index.js”",[618,28937,28938,28941,28944],{},[664,28939,28940],{"align":24065},"ENTRYPOINT",[664,28942,28943],{"align":24065},"设置容器启动时固定命令（通常用于 CLI 工具等）",[664,28945,28946,28947],{"align":24065},"ENTRYPOINT ",[84,28948,28949],{},"“python3”",[618,28951,28952,28955,28958],{},[664,28953,28954],{"align":24065},"EXPOSE",[664,28956,28957],{"align":24065},"声明镜像内服务监听的端口（不会自动映射）",[664,28959,28960],{"align":24065},"EXPOSE 80",[618,28962,28963,28966,28969],{},[664,28964,28965],{"align":24065},"VOLUME",[664,28967,28968],{"align":24065},"声明数据卷挂载点",[664,28970,28971,28972],{"align":24065},"VOLUME ",[84,28973,28974],{},"“\u002Fdata”",[618,28976,28977,28980,28983],{},[664,28978,28979],{"align":24065},"USER",[664,28981,28982],{"align":24065},"设置后续命令执行的用户",[664,28984,28985],{"align":24065},"USER appuser",[618,28987,28988,28991,28994],{},[664,28989,28990],{"align":24065},"ONBUILD",[664,28992,28993],{"align":24065},"当镜像作为其他镜像基础镜像时触发的构建指令",[664,28995,28996],{"align":24065},"ONBUILD COPY . \u002Fsrc",[618,28998,28999,29002,29005],{},[664,29000,29001],{"align":24065},"SHELL",[664,29003,29004],{"align":24065},"更改默认 shell，比如将 sh -c 改为 bash -c",[664,29006,29007,29008],{"align":24065},"SHELL ",[84,29009,29010],{},"“\u002Fbin\u002Fbash”, “-c”",[618,29012,29013,29016,29019],{},[664,29014,29015],{"align":24065},"HEALTHCHECK",[664,29017,29018],{"align":24065},"定义容器运行时的健康检查命令",[664,29020,29021,29022],{"align":24065},"`HEALTHCHECK CMD curl –fail ",[39,29023,29024],{"href":29024,"rel":29025},"http:\u002F\u002Flocalhost:8080",[43],[618,29027,29028,29031,29034],{},[664,29029,29030],{"align":24065},"STOPSIGNAL",[664,29032,29033],{"align":24065},"容器停止时发送的信号",[664,29035,29036],{"align":24065},"STOPSIGNAL SIGKILL",[23,29038,29040],{"id":29039},"_62自己创建容器","6.2.自己创建容器",[22327,29042,29044],{"id":29043},"_621手动创建","6.2.1.手动创建",[35,29046,29047],{},"在x86电脑上编译x86的：",[75,29049,29051],{"className":24151,"code":29050,"language":24153,"meta":66,"style":66},"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",[81,29052,29053,29069,29073,29086,29090,29103,29107,29120,29124,29137,29141],{"__ignoreMap":66},[84,29054,29055,29057,29060,29063,29066],{"class":86,"line":87},[84,29056,26881],{"class":90},[84,29058,29059],{"class":104}," build",[84,29061,29062],{"class":94}," -t",[84,29064,29065],{"class":104}," ros-melodic-cuda118-cudnn8-bionic:latest",[84,29067,29068],{"class":104}," .\n",[84,29070,29071],{"class":86,"line":98},[84,29072,2729],{"emptyLinePlaceholder":403},[84,29074,29075,29077,29079,29081,29084],{"class":86,"line":70},[84,29076,26881],{"class":90},[84,29078,29059],{"class":104},[84,29080,29062],{"class":94},[84,29082,29083],{"class":104}," ros-noetic-focal:latest",[84,29085,29068],{"class":104},[84,29087,29088],{"class":86,"line":120},[84,29089,2729],{"emptyLinePlaceholder":403},[84,29091,29092,29094,29096,29098,29101],{"class":86,"line":131},[84,29093,26881],{"class":90},[84,29095,29059],{"class":104},[84,29097,29062],{"class":94},[84,29099,29100],{"class":104}," ros-humble-jammy:latest",[84,29102,29068],{"class":104},[84,29104,29105],{"class":86,"line":145},[84,29106,2729],{"emptyLinePlaceholder":403},[84,29108,29109,29111,29113,29115,29118],{"class":86,"line":156},[84,29110,26881],{"class":90},[84,29112,29059],{"class":104},[84,29114,29062],{"class":94},[84,29116,29117],{"class":104}," ros-jazzy-noble:latest",[84,29119,29068],{"class":104},[84,29121,29122],{"class":86,"line":164},[84,29123,2729],{"emptyLinePlaceholder":403},[84,29125,29126,29128,29130,29132,29135],{"class":86,"line":175},[84,29127,26881],{"class":90},[84,29129,29059],{"class":104},[84,29131,29062],{"class":94},[84,29133,29134],{"class":104}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[84,29136,29068],{"class":104},[84,29138,29139],{"class":86,"line":185},[84,29140,2729],{"emptyLinePlaceholder":403},[84,29142,29143,29145,29147,29149,29152],{"class":86,"line":195},[84,29144,26881],{"class":90},[84,29146,29059],{"class":104},[84,29148,29062],{"class":94},[84,29150,29151],{"class":104}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[84,29153,29068],{"class":104},[35,29155,29156],{},[64,29157],{"alt":66,"src":29158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[35,29160,29161],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[35,29163,29164],{},[64,29165],{"alt":66,"src":29166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[35,29168,29169],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[28,29171,29172],{},[31,29173,29174],{},"创建 Docker Hub 账户",[35,29176,29177],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[28,29179,29180],{"start":98},[31,29181,29182],{},"登录 Docker Hub",[35,29184,29185],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[75,29187,29189],{"className":24151,"code":29188,"language":24153,"meta":66,"style":66},"docker login\n",[81,29190,29191],{"__ignoreMap":66},[84,29192,29193,29195],{"class":86,"line":87},[84,29194,26881],{"class":90},[84,29196,29197],{"class":104}," login\n",[35,29199,29200],{},"输入你的 Docker Hub 用户名和密码进行验证。",[28,29202,29203],{},[31,29204,29205],{},"为你的镜像打标签",[35,29207,29208,29209,29212],{},"Docker Hub 使用 ",[81,29210,29211],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[75,29214,29216],{"className":24151,"code":29215,"language":24153,"meta":66,"style":66},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[81,29217,29218],{"__ignoreMap":66},[84,29219,29220,29222,29225,29227,29230,29233,29236,29238],{"class":86,"line":87},[84,29221,26881],{"class":90},[84,29223,29224],{"class":104}," tag",[84,29226,29117],{"class":104},[84,29228,29229],{"class":473}," \u003C",[84,29231,29232],{"class":104},"你的用户",[84,29234,29235],{"class":477},"名",[84,29237,1433],{"class":473},[84,29239,29240],{"class":104},"\u002Fros-jazzy-noble:latest\n",[35,29242,29243,29244,29247],{},"例如，如果你的 Docker Hub 用户名是 ",[81,29245,29246],{},"tungchiahui","，你应该执行：",[75,29249,29251],{"className":24151,"code":29250,"language":24153,"meta":66,"style":66},"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",[81,29252,29253,29264,29268,29279,29283,29294,29298,29309,29313],{"__ignoreMap":66},[84,29254,29255,29257,29259,29261],{"class":86,"line":87},[84,29256,26881],{"class":90},[84,29258,29224],{"class":104},[84,29260,29083],{"class":104},[84,29262,29263],{"class":104}," tungchiahui\u002Fros-noetic-focal:latest\n",[84,29265,29266],{"class":86,"line":98},[84,29267,2729],{"emptyLinePlaceholder":403},[84,29269,29270,29272,29274,29276],{"class":86,"line":70},[84,29271,26881],{"class":90},[84,29273,29224],{"class":104},[84,29275,29100],{"class":104},[84,29277,29278],{"class":104}," tungchiahui\u002Fros-humble-jammy:latest\n",[84,29280,29281],{"class":86,"line":120},[84,29282,2729],{"emptyLinePlaceholder":403},[84,29284,29285,29287,29289,29291],{"class":86,"line":131},[84,29286,26881],{"class":90},[84,29288,29224],{"class":104},[84,29290,29117],{"class":104},[84,29292,29293],{"class":104}," tungchiahui\u002Fros-jazzy-noble:latest\n",[84,29295,29296],{"class":86,"line":145},[84,29297,2729],{"emptyLinePlaceholder":403},[84,29299,29300,29302,29304,29306],{"class":86,"line":156},[84,29301,26881],{"class":90},[84,29303,29224],{"class":104},[84,29305,29134],{"class":104},[84,29307,29308],{"class":104}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[84,29310,29311],{"class":86,"line":164},[84,29312,2729],{"emptyLinePlaceholder":403},[84,29314,29315,29317,29319,29321],{"class":86,"line":175},[84,29316,26881],{"class":90},[84,29318,29224],{"class":104},[84,29320,29151],{"class":104},[84,29322,29323],{"class":104}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[28,29325,29326],{"start":98},[31,29327,29328],{},"推送镜像到 Docker Hub",[35,29330,29331],{},"使用以下命令将镜像推送到 Docker Hub：",[75,29333,29335],{"className":24151,"code":29334,"language":24153,"meta":66,"style":66},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[81,29336,29337],{"__ignoreMap":66},[84,29338,29339,29341,29344,29346,29348,29350,29352],{"class":86,"line":87},[84,29340,26881],{"class":90},[84,29342,29343],{"class":104}," push",[84,29345,29229],{"class":473},[84,29347,29232],{"class":104},[84,29349,29235],{"class":477},[84,29351,1433],{"class":473},[84,29353,29354],{"class":104},"\u002Fros-noetic-jazzy-noble:latest\n",[35,29356,14962],{},[75,29358,29360],{"className":24151,"code":29359,"language":24153,"meta":66,"style":66},"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",[81,29361,29362,29370,29374,29382,29386,29394,29398,29407,29411,29419,29423],{"__ignoreMap":66},[84,29363,29364,29366,29368],{"class":86,"line":87},[84,29365,26881],{"class":90},[84,29367,29343],{"class":104},[84,29369,29263],{"class":104},[84,29371,29372],{"class":86,"line":98},[84,29373,2729],{"emptyLinePlaceholder":403},[84,29375,29376,29378,29380],{"class":86,"line":70},[84,29377,26881],{"class":90},[84,29379,29343],{"class":104},[84,29381,29278],{"class":104},[84,29383,29384],{"class":86,"line":120},[84,29385,2729],{"emptyLinePlaceholder":403},[84,29387,29388,29390,29392],{"class":86,"line":131},[84,29389,26881],{"class":90},[84,29391,29343],{"class":104},[84,29393,29293],{"class":104},[84,29395,29396],{"class":86,"line":145},[84,29397,2729],{"emptyLinePlaceholder":403},[84,29399,29400,29402,29404],{"class":86,"line":156},[84,29401,26881],{"class":90},[84,29403,29343],{"class":104},[84,29405,29406],{"class":104}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[84,29408,29409],{"class":86,"line":164},[84,29410,2729],{"emptyLinePlaceholder":403},[84,29412,29413,29415,29417],{"class":86,"line":175},[84,29414,26881],{"class":90},[84,29416,29343],{"class":104},[84,29418,29323],{"class":104},[84,29420,29421],{"class":86,"line":185},[84,29422,2729],{"emptyLinePlaceholder":403},[84,29424,29425,29427,29429],{"class":86,"line":195},[84,29426,26881],{"class":90},[84,29428,29343],{"class":104},[84,29430,29431],{"class":104}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[28,29433,29434],{"start":70},[31,29435,29436],{},"验证推送成功",[35,29438,29439],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[35,29441,29442],{},[624,29443,4113],{},[1480,29445,29446,29449],{},[31,29447,29448],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[31,29450,29451],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[35,29453,29454],{},[64,29455],{"alt":66,"src":29456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[35,29458,29459],{},[64,29460],{"alt":66,"src":29461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22327,29463,29465],{"id":29464},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[35,29467,29468,29469,29472,29473,29476],{},"如果您想在 ",[624,29470,29471],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[624,29474,29475],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[35,29478,29479,29480],{},"1. ",[624,29481,29482],{},"启用 Docker 跨平台构建",[35,29484,29485],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[35,29487,29488],{},"第一步：启用 buildx（只需执行一次）",[75,29490,29492],{"className":24151,"code":29491,"language":24153,"meta":66,"style":66},"docker buildx create --name multiarch_builder --use\n",[81,29493,29494],{"__ignoreMap":66},[84,29495,29496,29498,29501,29504,29507,29510],{"class":86,"line":87},[84,29497,26881],{"class":90},[84,29499,29500],{"class":104}," buildx",[84,29502,29503],{"class":104}," create",[84,29505,29506],{"class":94}," --name",[84,29508,29509],{"class":104}," multiarch_builder",[84,29511,29512],{"class":94}," --use\n",[35,29514,29515],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[35,29517,29518],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[75,29520,29522],{"className":24151,"code":29521,"language":24153,"meta":66,"style":66},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[81,29523,29524],{"__ignoreMap":66},[84,29525,29526,29528,29530,29532,29535,29538,29541,29544],{"class":86,"line":87},[84,29527,26881],{"class":90},[84,29529,27557],{"class":104},[84,29531,27560],{"class":94},[84,29533,29534],{"class":94}," --privileged",[84,29536,29537],{"class":104}," multiarch\u002Fqemu-user-static",[84,29539,29540],{"class":94}," --reset",[84,29542,29543],{"class":94}," -p",[84,29545,29546],{"class":104}," yes\n",[35,29548,29549],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[35,29551,29552],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[75,29554,29556],{"className":24151,"code":29555,"language":24153,"meta":66,"style":66},"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",[81,29557,29558,29600,29604,29609,29619,29629,29638,29644,29648,29652,29662,29670,29679,29685,29689,29693,29703,29711,29720,29726,29730,29734,29744,29752,29761,29767,29771,29775,29785,29793,29802,29808,29812,29816,29826,29834,29843,29849,29853,29857,29867,29875,29884,29890,29894,29898,29908,29916,29925,29931,29935,29939,29949,29957,29966,29972,29976,29980,29991,29999,30008,30014],{"__ignoreMap":66},[84,29559,29560,29562,29564,29566,29569,29572,29574,29576,29579,29581,29583,29585,29587,29590,29593,29595,29598],{"class":86,"line":87},[84,29561,26881],{"class":90},[84,29563,29500],{"class":104},[84,29565,29059],{"class":104},[84,29567,29568],{"class":94}," --platform",[84,29570,29571],{"class":104}," linux\u002Famd64,linux\u002Farm64",[84,29573,29062],{"class":94},[84,29575,29229],{"class":473},[84,29577,29578],{"class":104},"你的镜像",[84,29580,29235],{"class":477},[84,29582,1433],{"class":473},[84,29584,1332],{"class":104},[84,29586,1383],{"class":473},[84,29588,29589],{"class":104},"标",[84,29591,29592],{"class":477},"签",[84,29594,1433],{"class":473},[84,29596,29597],{"class":94}," --push",[84,29599,29068],{"class":104},[84,29601,29602],{"class":86,"line":98},[84,29603,2729],{"emptyLinePlaceholder":403},[84,29605,29606],{"class":86,"line":70},[84,29607,29608],{"class":328},"# 例子：\n",[84,29610,29611,29613,29615,29617],{"class":86,"line":120},[84,29612,26881],{"class":90},[84,29614,29500],{"class":104},[84,29616,29059],{"class":104},[84,29618,95],{"class":94},[84,29620,29621,29624,29627],{"class":86,"line":131},[84,29622,29623],{"class":477},"--platform ",[84,29625,29626],{"class":104},"linux\u002Famd64,linux\u002Farm64",[84,29628,95],{"class":94},[84,29630,29631,29633,29636],{"class":86,"line":145},[84,29632,29062],{"class":94},[84,29634,29635],{"class":104}," tungchiahui\u002Fros:noetic-focal",[84,29637,95],{"class":94},[84,29639,29640,29642],{"class":86,"line":156},[84,29641,29597],{"class":94},[84,29643,95],{"class":94},[84,29645,29646],{"class":86,"line":164},[84,29647,29068],{"class":104},[84,29649,29650],{"class":86,"line":175},[84,29651,2729],{"emptyLinePlaceholder":403},[84,29653,29654,29656,29658,29660],{"class":86,"line":185},[84,29655,26881],{"class":90},[84,29657,29500],{"class":104},[84,29659,29059],{"class":104},[84,29661,95],{"class":94},[84,29663,29664,29666,29668],{"class":86,"line":195},[84,29665,29623],{"class":477},[84,29667,29626],{"class":104},[84,29669,95],{"class":94},[84,29671,29672,29674,29677],{"class":86,"line":206},[84,29673,29062],{"class":94},[84,29675,29676],{"class":104}," tungchiahui\u002Fros:humble-jammy",[84,29678,95],{"class":94},[84,29680,29681,29683],{"class":86,"line":217},[84,29682,29597],{"class":94},[84,29684,95],{"class":94},[84,29686,29687],{"class":86,"line":227},[84,29688,29068],{"class":104},[84,29690,29691],{"class":86,"line":238},[84,29692,2729],{"emptyLinePlaceholder":403},[84,29694,29695,29697,29699,29701],{"class":86,"line":249},[84,29696,26881],{"class":90},[84,29698,29500],{"class":104},[84,29700,29059],{"class":104},[84,29702,95],{"class":94},[84,29704,29705,29707,29709],{"class":86,"line":262},[84,29706,29623],{"class":477},[84,29708,29626],{"class":104},[84,29710,95],{"class":94},[84,29712,29713,29715,29718],{"class":86,"line":273},[84,29714,29062],{"class":94},[84,29716,29717],{"class":104}," tungchiahui\u002Fros:jazzy-noble",[84,29719,95],{"class":94},[84,29721,29722,29724],{"class":86,"line":283},[84,29723,29597],{"class":94},[84,29725,95],{"class":94},[84,29727,29728],{"class":86,"line":294},[84,29729,29068],{"class":104},[84,29731,29732],{"class":86,"line":2028},[84,29733,2729],{"emptyLinePlaceholder":403},[84,29735,29736,29738,29740,29742],{"class":86,"line":2057},[84,29737,26648],{"class":90},[84,29739,29500],{"class":104},[84,29741,29059],{"class":104},[84,29743,95],{"class":94},[84,29745,29746,29748,29750],{"class":86,"line":2062},[84,29747,29623],{"class":477},[84,29749,29626],{"class":104},[84,29751,95],{"class":94},[84,29753,29754,29756,29759],{"class":86,"line":2079},[84,29755,29062],{"class":94},[84,29757,29758],{"class":104}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[84,29760,95],{"class":94},[84,29762,29763,29765],{"class":86,"line":2084},[84,29764,29597],{"class":94},[84,29766,95],{"class":94},[84,29768,29769],{"class":86,"line":2089},[84,29770,29068],{"class":104},[84,29772,29773],{"class":86,"line":2094},[84,29774,2729],{"emptyLinePlaceholder":403},[84,29776,29777,29779,29781,29783],{"class":86,"line":2108},[84,29778,26881],{"class":90},[84,29780,29500],{"class":104},[84,29782,29059],{"class":104},[84,29784,95],{"class":94},[84,29786,29787,29789,29791],{"class":86,"line":2113},[84,29788,29623],{"class":477},[84,29790,29626],{"class":104},[84,29792,95],{"class":94},[84,29794,29795,29797,29800],{"class":86,"line":2906},[84,29796,29062],{"class":94},[84,29798,29799],{"class":104}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[84,29801,95],{"class":94},[84,29803,29804,29806],{"class":86,"line":2920},[84,29805,29597],{"class":94},[84,29807,95],{"class":94},[84,29809,29810],{"class":86,"line":2928},[84,29811,29068],{"class":104},[84,29813,29814],{"class":86,"line":2933},[84,29815,2729],{"emptyLinePlaceholder":403},[84,29817,29818,29820,29822,29824],{"class":86,"line":2939},[84,29819,26648],{"class":90},[84,29821,29500],{"class":104},[84,29823,29059],{"class":104},[84,29825,95],{"class":94},[84,29827,29828,29830,29832],{"class":86,"line":2945},[84,29829,29623],{"class":477},[84,29831,29626],{"class":104},[84,29833,95],{"class":94},[84,29835,29836,29838,29841],{"class":86,"line":2950},[84,29837,29062],{"class":94},[84,29839,29840],{"class":104}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[84,29842,95],{"class":94},[84,29844,29845,29847],{"class":86,"line":8277},[84,29846,29597],{"class":94},[84,29848,95],{"class":94},[84,29850,29851],{"class":86,"line":8301},[84,29852,29068],{"class":104},[84,29854,29855],{"class":86,"line":8306},[84,29856,2729],{"emptyLinePlaceholder":403},[84,29858,29859,29861,29863,29865],{"class":86,"line":8312},[84,29860,26881],{"class":90},[84,29862,29500],{"class":104},[84,29864,29059],{"class":104},[84,29866,95],{"class":94},[84,29868,29869,29871,29873],{"class":86,"line":8339},[84,29870,29623],{"class":477},[84,29872,29626],{"class":104},[84,29874,95],{"class":94},[84,29876,29877,29879,29882],{"class":86,"line":8344},[84,29878,29062],{"class":94},[84,29880,29881],{"class":104}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[84,29883,95],{"class":94},[84,29885,29886,29888],{"class":86,"line":8350},[84,29887,29597],{"class":94},[84,29889,95],{"class":94},[84,29891,29892],{"class":86,"line":8362},[84,29893,29068],{"class":104},[84,29895,29896],{"class":86,"line":8374},[84,29897,2729],{"emptyLinePlaceholder":403},[84,29899,29900,29902,29904,29906],{"class":86,"line":8386},[84,29901,26881],{"class":90},[84,29903,29500],{"class":104},[84,29905,29059],{"class":104},[84,29907,95],{"class":94},[84,29909,29910,29912,29914],{"class":86,"line":10045},[84,29911,29623],{"class":477},[84,29913,29626],{"class":104},[84,29915,95],{"class":94},[84,29917,29918,29920,29923],{"class":86,"line":10070},[84,29919,29062],{"class":94},[84,29921,29922],{"class":104}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[84,29924,95],{"class":94},[84,29926,29927,29929],{"class":86,"line":10093},[84,29928,29597],{"class":94},[84,29930,95],{"class":94},[84,29932,29933],{"class":86,"line":10117},[84,29934,29068],{"class":104},[84,29936,29937],{"class":86,"line":10122},[84,29938,2729],{"emptyLinePlaceholder":403},[84,29940,29941,29943,29945,29947],{"class":86,"line":10127},[84,29942,26648],{"class":90},[84,29944,29500],{"class":104},[84,29946,29059],{"class":104},[84,29948,95],{"class":94},[84,29950,29951,29953,29955],{"class":86,"line":10132},[84,29952,29623],{"class":477},[84,29954,29626],{"class":104},[84,29956,95],{"class":94},[84,29958,29959,29961,29964],{"class":86,"line":10141},[84,29960,29062],{"class":94},[84,29962,29963],{"class":104}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[84,29965,95],{"class":94},[84,29967,29968,29970],{"class":86,"line":10146},[84,29969,29597],{"class":94},[84,29971,95],{"class":94},[84,29973,29974],{"class":86,"line":10152},[84,29975,29068],{"class":104},[84,29977,29978],{"class":86,"line":10173},[84,29979,2729],{"emptyLinePlaceholder":403},[84,29981,29982,29985,29987,29989],{"class":86,"line":10179},[84,29983,29984],{"class":90},"  docker",[84,29986,29500],{"class":104},[84,29988,29059],{"class":104},[84,29990,95],{"class":94},[84,29992,29993,29995,29997],{"class":86,"line":10193},[84,29994,29623],{"class":477},[84,29996,29626],{"class":104},[84,29998,95],{"class":94},[84,30000,30001,30003,30006],{"class":86,"line":10199},[84,30002,29062],{"class":94},[84,30004,30005],{"class":104}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[84,30007,95],{"class":94},[84,30009,30010,30012],{"class":86,"line":10226},[84,30011,29597],{"class":94},[84,30013,95],{"class":94},[84,30015,30016],{"class":86,"line":10235},[84,30017,29068],{"class":104},[35,30019,30020],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[35,30022,30023],{},[64,30024],{"alt":66,"src":30025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[35,30027,30028],{},[64,30029],{"alt":66,"src":30030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22327,30032,30034],{"id":30033},"_623清除构建缓存","6.2.3.清除构建缓存",[75,30036,30038],{"className":24151,"code":30037,"language":24153,"meta":66,"style":66},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[81,30039,30040,30045],{"__ignoreMap":66},[84,30041,30042],{"class":86,"line":87},[84,30043,30044],{"class":328},"# 清理BuildKit构建缓存\n",[84,30046,30047,30049,30052,30055],{"class":86,"line":98},[84,30048,26881],{"class":90},[84,30050,30051],{"class":104}," builder",[84,30053,30054],{"class":104}," prune",[84,30056,30057],{"class":94}," -f\n",[35,30059,30060],{},[64,30061],{"alt":66,"src":30062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[23,30064,30066],{"id":30065},"_63补充","6.3.补充",[22327,30068,30070],{"id":30069},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[35,30072,30073],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[35,30075,30076],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[35,30078,30079],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[75,30081,30083],{"className":24151,"code":30082,"language":24153,"meta":66,"style":66},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[81,30084,30085,30092],{"__ignoreMap":66},[84,30086,30087,30089],{"class":86,"line":87},[84,30088,27697],{"class":90},[84,30090,30091],{"class":104}," nginx\n",[84,30093,30094,30096,30099,30102,30104],{"class":86,"line":98},[84,30095,28882],{"class":90},[84,30097,30098],{"class":104}," echo",[84,30100,30101],{"class":104}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[84,30103,26550],{"class":473},[84,30105,30106],{"class":104}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[35,30108,30109],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[35,30111,30112],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[75,30114,30116],{"className":24151,"code":30115,"language":24153,"meta":66,"style":66},"docker build -t nginx:tuling .\n",[81,30117,30118],{"__ignoreMap":66},[84,30119,30120,30122,30124,30126,30129],{"class":86,"line":87},[84,30121,26881],{"class":90},[84,30123,29059],{"class":104},[84,30125,29062],{"class":94},[84,30127,30128],{"class":104}," nginx:tuling",[84,30130,29068],{"class":104},[35,30132,30133],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[35,30135,30136],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[75,30138,30140],{"className":24151,"code":30139,"language":24153,"meta":66,"style":66},"docker run -d -p 92:80 nginx:tuling\n",[81,30141,30142],{"__ignoreMap":66},[84,30143,30144,30146,30148,30151,30153,30156],{"class":86,"line":87},[84,30145,26881],{"class":90},[84,30147,27557],{"class":104},[84,30149,30150],{"class":94}," -d",[84,30152,29543],{"class":94},[84,30154,30155],{"class":104}," 92:80",[84,30157,30158],{"class":104}," nginx:tuling\n",[35,30160,30161,30162],{},"4、访问 ",[39,30163,30166],{"href":30164,"rel":30165},"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",[43],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[35,30168,30169],{},[64,30170],{"alt":66,"src":30171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[35,30173,30174],{},[64,30175],{"alt":66,"src":30176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22327,30178,30180],{"id":30179},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[35,30182,30183],{},"只需要知道大体流程即可",[35,30185,30186],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[35,30188,30189],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[35,30191,30192],{},"2、在Dockerfile中添加以下内容",[75,30194,30196],{"className":26419,"code":30195,"language":26421,"meta":66,"style":66},"# 基于哪个镜像\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",[81,30197,30198,30203,30208,30213,30218,30223,30228,30233],{"__ignoreMap":66},[84,30199,30200],{"class":86,"line":87},[84,30201,30202],{},"# 基于哪个镜像\n",[84,30204,30205],{"class":86,"line":98},[84,30206,30207],{},"From java:8\n",[84,30209,30210],{"class":86,"line":70},[84,30211,30212],{},"# 复制文件到容器\n",[84,30214,30215],{"class":86,"line":120},[84,30216,30217],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[84,30219,30220],{"class":86,"line":131},[84,30221,30222],{},"# 声明需要暴露的端口\n",[84,30224,30225],{"class":86,"line":145},[84,30226,30227],{},"EXPOSE 8877\n",[84,30229,30230],{"class":86,"line":156},[84,30231,30232],{},"# 配置容器启动后执行的命令\n",[84,30234,30235],{"class":86,"line":164},[84,30236,30237],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[35,30239,30240],{},"3、使用docker build命令构建镜像",[75,30242,30244],{"className":24151,"code":30243,"language":24153,"meta":66,"style":66},"docker build -t tulingmall-member:0.0.5 .\n",[81,30245,30246],{"__ignoreMap":66},[84,30247,30248,30250,30252,30254,30257],{"class":86,"line":87},[84,30249,26881],{"class":90},[84,30251,29059],{"class":104},[84,30253,29062],{"class":94},[84,30255,30256],{"class":104}," tulingmall-member:0.0.5",[84,30258,29068],{"class":104},[35,30260,30261],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[35,30263,30264],{},[64,30265],{"alt":66,"src":30266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[35,30268,30269],{},"4、启动镜像，加-d可在后台启动",[75,30271,30273],{"className":24151,"code":30272,"language":24153,"meta":66,"style":66},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[81,30274,30275],{"__ignoreMap":66},[84,30276,30277,30279,30281,30283,30285,30288],{"class":86,"line":87},[84,30278,26881],{"class":90},[84,30280,27557],{"class":104},[84,30282,30150],{"class":94},[84,30284,29543],{"class":94},[84,30286,30287],{"class":104}," 8877:8877",[84,30289,30290],{"class":104}," tulingmall-member:0.0.5\n",[35,30292,30293],{},"加上JVM参数：",[75,30295,30297],{"className":24151,"code":30296,"language":24153,"meta":66,"style":66},"# --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",[81,30298,30299,30304,30319,30329,30338,30345],{"__ignoreMap":66},[84,30300,30301],{"class":86,"line":87},[84,30302,30303],{"class":328},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[84,30305,30306,30308,30310,30313,30315,30317],{"class":86,"line":98},[84,30307,26881],{"class":90},[84,30309,27557],{"class":104},[84,30311,30312],{"class":94},"  -d",[84,30314,29543],{"class":94},[84,30316,30287],{"class":104},[84,30318,95],{"class":94},[84,30320,30321,30323,30326],{"class":86,"line":70},[84,30322,28455],{"class":477},[84,30324,30325],{"class":104},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[84,30327,30328],{"class":94},"  \\\n",[84,30330,30331,30333,30336],{"class":86,"line":120},[84,30332,28455],{"class":477},[84,30334,30335],{"class":104},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[84,30337,30328],{"class":94},[84,30339,30340,30343],{"class":86,"line":131},[84,30341,30342],{"class":477},"--cap-add=SYS_PTRACE  ",[84,30344,26503],{"class":94},[84,30346,30347],{"class":86,"line":145},[84,30348,30349],{"class":477},"tulingmall-member:0.0.5\n",[35,30351,30352],{},"5、访问会员服务接口",[35,30354,30355],{},[64,30356],{"alt":66,"src":30357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22327,30359,30361],{"id":30360},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[35,30363,30364],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[35,30366,30367,30368],{},"阿里云docker镜像仓库：",[39,30369,30370],{"href":30370,"rel":30371},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[43],[35,30373,30374],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[35,30376,30377],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[35,30379,30380],{},[64,30381],{"alt":66,"src":30382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[35,30384,30385],{},"要把镜像推送到镜像仓库",[75,30387,30389],{"className":24151,"code":30388,"language":24153,"meta":66,"style":66},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[81,30390,30391],{"__ignoreMap":66},[84,30392,30393,30395,30397,30399],{"class":86,"line":87},[84,30394,26881],{"class":90},[84,30396,29224],{"class":104},[84,30398,30256],{"class":104},[84,30400,30401],{"class":104}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[35,30403,30404],{},"最后将镜像推送到远程仓库",[75,30406,30408],{"className":24151,"code":30407,"language":24153,"meta":66,"style":66},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[81,30409,30410],{"__ignoreMap":66},[84,30411,30412,30414,30416],{"class":86,"line":87},[84,30413,26881],{"class":90},[84,30415,29343],{"class":104},[84,30417,30401],{"class":104},[389,30419,30420],{},"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":66,"searchDepth":98,"depth":98,"links":30422},[30423,30424,30425],{"id":28810,"depth":70,"text":28811},{"id":29039,"depth":70,"text":29040},{"id":30065,"depth":70,"text":30066},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28802,"description":66},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30432,"title":30433,"body":30434,"description":66,"extension":401,"meta":30577,"navigation":403,"path":30578,"seo":30579,"stem":30580,"__hash__":30581},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30435,"toc":30575},[30436,30439,30444,30449,30452,30457,30462,30465,30470,30475,30478,30483,30486,30489,30492,30495,30498,30501,30521,30543,30546,30549,30569,30572],[10,30437,30433],{"id":30438},"_7vscode远程开发",[28,30440,30441],{},[31,30442,30443],{},"插件1：微软Docker工具",[35,30445,30446],{},[64,30447],{"alt":66,"src":30448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[35,30450,30451],{},"docker扩展插件已经进化为container tools了，请安装container tools",[35,30453,30454],{},[64,30455],{"alt":66,"src":30456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[28,30458,30459],{"start":98},[31,30460,30461],{},"插件2：微软Docker远程开发工具",[35,30463,30464],{},"下面这是远程开发的插件。",[35,30466,30467],{},[64,30468],{"alt":66,"src":30469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[35,30471,30472],{},[64,30473],{"alt":66,"src":30474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[35,30476,30477],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[35,30479,30480],{},[64,30481],{"alt":66,"src":30482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[35,30484,30485],{},"安装完拓展之后，vscode进行链接：",[35,30487,30488],{},"1.按ctrl+shift+p",[35,30490,30491],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[35,30493,30494],{},"3.选择目前运行的容器",[35,30496,30497],{},"4.VS Code 会在新窗口中打开并连接到容器",[35,30499,30500],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[75,30502,30504],{"className":24151,"code":30503,"language":24153,"meta":66,"style":66},"docker run -v 主机目录:容器目录 image-name\n",[81,30505,30506],{"__ignoreMap":66},[84,30507,30508,30510,30512,30515,30518],{"class":86,"line":87},[84,30509,26881],{"class":90},[84,30511,27557],{"class":104},[84,30513,30514],{"class":94}," -v",[84,30516,30517],{"class":104}," 主机目录:容器目录",[84,30519,30520],{"class":104}," image-name\n",[75,30522,30524],{"className":24151,"code":30523,"language":24153,"meta":66,"style":66},"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",[81,30525,30526],{"__ignoreMap":66},[84,30527,30528,30530,30532,30535,30537,30540],{"class":86,"line":87},[84,30529,26881],{"class":90},[84,30531,27557],{"class":104},[84,30533,30534],{"class":94}," -it",[84,30536,30514],{"class":94},[84,30538,30539],{"class":104}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[84,30541,30542],{"class":104}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[35,30544,30545],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[35,30547,30548],{},"查看挂载情况：",[75,30550,30552],{"className":24151,"code":30551,"language":24153,"meta":66,"style":66},"mount | grep -i project\n",[81,30553,30554],{"__ignoreMap":66},[84,30555,30556,30559,30561,30564,30566],{"class":86,"line":87},[84,30557,30558],{"class":90},"mount",[84,30560,25437],{"class":473},[84,30562,30563],{"class":90}," grep",[84,30565,26758],{"class":94},[84,30567,30568],{"class":104}," project\n",[35,30570,30571],{},"也可以通过ls来进行查看",[389,30573,30574],{},"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":66,"searchDepth":98,"depth":98,"links":30576},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30433,"description":66},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30583,"title":30584,"body":30585,"description":400,"extension":401,"meta":30589,"navigation":403,"path":30591,"seo":30592,"stem":30593,"__hash__":30594},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30586,"toc":30587},[],{"title":66,"searchDepth":98,"depth":98,"links":30588},[],{"category":30590},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30584,"description":400},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30596,"title":30597,"body":30598,"description":400,"extension":401,"meta":30602,"navigation":403,"path":30603,"seo":30604,"stem":30605,"__hash__":30606},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30599,"toc":30600},[],{"title":66,"searchDepth":98,"depth":98,"links":30601},[],{"category":30590},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30597,"description":400},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30608,"title":30609,"body":30610,"description":400,"extension":401,"meta":30903,"navigation":403,"path":30904,"seo":30905,"stem":30906,"__hash__":30907},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30611,"toc":30901},[30612,30615,30623,30638,30643,30694,30697,30703,30890,30895,30898],[10,30613,30609],{"id":30614},"_1验证深度学习环境",[35,30616,30617,30618],{},"关于环境的安装，看",[39,30619,30622],{"href":30620,"rel":30621},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[43],"Pytorch-->深度学习",[35,30624,30625,30626,30629,30630,30633,30634,30637],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[81,30627,30628],{},"pytorch-cuda=12.4"," 是一个“ ",[624,30631,30632],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[624,30635,30636],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[35,30639,30640],{},[64,30641],{"alt":66,"src":30642},"\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",[75,30644,30646],{"className":24151,"code":30645,"language":24153,"meta":66,"style":66},"# 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",[81,30647,30648,30653],{"__ignoreMap":66},[84,30649,30650],{"class":86,"line":87},[84,30651,30652],{"class":328},"# CUDA 12.4\n",[84,30654,30655,30658,30660,30663,30666,30669,30672,30675,30677,30680,30683,30686,30689,30691],{"class":86,"line":98},[84,30656,30657],{"class":90},"conda",[84,30659,24163],{"class":104},[84,30661,30662],{"class":104}," pytorch==",[84,30664,30665],{"class":94},"2.5.1",[84,30667,30668],{"class":104}," torchvision==",[84,30670,30671],{"class":94},"0.20.1",[84,30673,30674],{"class":104}," torchaudio==",[84,30676,30665],{"class":94},[84,30678,30679],{"class":104}," pytorch-cuda=",[84,30681,30682],{"class":94},"12.4",[84,30684,30685],{"class":94}," -c",[84,30687,30688],{"class":104}," pytorch",[84,30690,30685],{"class":94},[84,30692,30693],{"class":104}," nvidia\n",[35,30695,30696],{},"）：",[35,30698,30699],{},[39,30700,30701],{"href":30701,"rel":30702},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[43],[75,30704,30708],{"className":30705,"code":30706,"language":30707,"meta":66,"style":66},"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",[81,30709,30710,30715,30723,30728,30738,30754,30759,30769,30806,30813,30825,30841,30846,30856,30868,30878],{"__ignoreMap":66},[84,30711,30712],{"class":86,"line":87},[84,30713,30714],{"class":328},"# 对深度学习环境进行测试\n",[84,30716,30717,30720],{"class":86,"line":98},[84,30718,30719],{"class":473},"import",[84,30721,30722],{"class":477}," torch\n",[84,30724,30725],{"class":86,"line":70},[84,30726,30727],{"class":328},"# 查看cuda是否被激活\n",[84,30729,30730,30733,30735],{"class":86,"line":120},[84,30731,30732],{"class":477},"flag",[84,30734,523],{"class":473},[84,30736,30737],{"class":477},"torch.cuda.is_available()\n",[84,30739,30740,30743,30745,30748,30751],{"class":86,"line":131},[84,30741,30742],{"class":94},"print",[84,30744,478],{"class":477},[84,30746,30747],{"class":104},"\"cuda:\"",[84,30749,30750],{"class":477},", flag)   ",[84,30752,30753],{"class":328},"#返回true的话说明被激活\n",[84,30755,30756],{"class":86,"line":145},[84,30757,30758],{"class":328},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[84,30760,30761,30764,30766],{"class":86,"line":156},[84,30762,30763],{"class":477},"ngpu",[84,30765,523],{"class":473},[84,30767,30768],{"class":94},"1\n",[84,30770,30771,30774,30776,30779,30782,30784,30787,30790,30793,30795,30797,30799,30801,30804],{"class":86,"line":164},[84,30772,30773],{"class":477},"device",[84,30775,523],{"class":473},[84,30777,30778],{"class":477},"torch.device(",[84,30780,30781],{"class":104},"\"cuda:0\"",[84,30783,2034],{"class":473},[84,30785,30786],{"class":477},"(torch.cuda.is_available() ",[84,30788,30789],{"class":473},"and",[84,30791,30792],{"class":477}," ngpu",[84,30794,1433],{"class":473},[84,30796,666],{"class":94},[84,30798,14043],{"class":477},[84,30800,2031],{"class":473},[84,30802,30803],{"class":104}," \"cpu\"",[84,30805,484],{"class":477},[84,30807,30808,30810],{"class":86,"line":175},[84,30809,30742],{"class":94},[84,30811,30812],{"class":477},"(device)\n",[84,30814,30815,30817,30820,30822],{"class":86,"line":185},[84,30816,30742],{"class":94},[84,30818,30819],{"class":477},"(torch.cuda.get_device_name(",[84,30821,666],{"class":94},[84,30823,30824],{"class":477},"))\n",[84,30826,30827,30829,30832,30834,30836,30838],{"class":86,"line":195},[84,30828,30742],{"class":94},[84,30830,30831],{"class":477},"(torch.rand(",[84,30833,547],{"class":94},[84,30835,851],{"class":477},[84,30837,547],{"class":94},[84,30839,30840],{"class":477},").cuda())\n",[84,30842,30843],{"class":86,"line":206},[84,30844,30845],{"class":328},"# 查看cuda和cudnn的版本\n",[84,30847,30848,30851,30853],{"class":86,"line":217},[84,30849,30850],{"class":477},"cuda_version",[84,30852,523],{"class":473},[84,30854,30855],{"class":477},"torch.version.cuda\n",[84,30857,30858,30860,30862,30865],{"class":86,"line":227},[84,30859,30742],{"class":94},[84,30861,478],{"class":477},[84,30863,30864],{"class":104},"\"cuda version\"",[84,30866,30867],{"class":477},",cuda_version)\n",[84,30869,30870,30873,30875],{"class":86,"line":238},[84,30871,30872],{"class":477},"cudnn_version",[84,30874,523],{"class":473},[84,30876,30877],{"class":477},"torch.backends.cudnn.version()\n",[84,30879,30880,30882,30884,30887],{"class":86,"line":249},[84,30881,30742],{"class":94},[84,30883,478],{"class":477},[84,30885,30886],{"class":104},"\"cudnn version\"",[84,30888,30889],{"class":477},",cudnn_version)\n",[35,30891,30892],{},[64,30893],{"alt":66,"src":30894},"\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",[35,30896,30897],{},"cuda:0 指的是一块显卡",[389,30899,30900],{},"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":66,"searchDepth":98,"depth":98,"links":30902},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30609,"description":400},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30909,"title":30910,"body":30911,"description":400,"extension":401,"meta":50715,"navigation":403,"path":50716,"seo":50717,"stem":50718,"__hash__":50719},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30912,"toc":50709},[30913,30916,30920,30924,30927,30932,30937,30940,30945,30950,30955,30958,30962,30967,30971,30976,30979,30984,30987,30990,30993,30996,31001,31004,31009,31014,31019,31024,31027,31031,31034,31039,31643,31648,31651,31656,31659,31662,32126,32129,32132,32135,32138,34189,34192,34197,34202,34997,35000,35005,35783,35787,37446,37450,38164,38168,38172,38177,38182,38187,38190,38195,38200,38205,38210,38215,38219,38224,39506,39511,39514,39517,39520,39675,39678,39681,40897,40902,41597,41601,41605,41610,41615,41618,41623,41628,41633,41638,41643,41648,41653,41658,41663,41668,41673,41678,41683,41688,41693,41698,41703,41708,41713,41718,41723,41728,41733,41738,41743,41748,41753,41758,41763,41768,41772,41776,41779,43257,43261,44908,44912,45606,45610,45613,45616,46160,46163,46167,46170,47567,47571,47574,48152,49939,49943,49946,50706],[10,30914,30910],{"id":30915},"_2经典神经网络",[23,30917,30919],{"id":30918},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22327,30921,30923],{"id":30922},"_211原理介绍","2.1.1.原理介绍",[35,30925,30926],{},"LeNet-5",[28,30928,30929],{},[31,30930,30931],{},"原理",[35,30933,30934],{},[64,30935],{"alt":66,"src":30936},"\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",[35,30938,30939],{},"B是batch批次；C是channel通道",[28,30941,30942],{"start":98},[31,30943,30944],{},"网络参数详细",[35,30946,30947],{},[64,30948],{"alt":66,"src":30949},"\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",[35,30951,30952],{},[64,30953],{"alt":66,"src":30954},"\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",[35,30956,30957],{},"AlexNet",[28,30959,30960],{},[31,30961,30931],{},[35,30963,30964],{},[64,30965],{"alt":66,"src":30966},"\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",[28,30968,30969],{"start":98},[31,30970,30944],{},[35,30972,30973],{},[64,30974],{"alt":66,"src":30975},"\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",[35,30977,30978],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[35,30980,30981],{},[64,30982],{"alt":66,"src":30983},"\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",[35,30985,30986],{},"数据处理中的图像增强操作:",[35,30988,30989],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[35,30991,30992],{},"①增加数据量，保证训练数据充足；②防止过拟合",[35,30994,30995],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[35,30997,30998],{},[64,30999],{"alt":66,"src":31000},"\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",[35,31002,31003],{},"提升网络精确度的方法：LRN正则化",[35,31005,31006],{},[64,31007],{"alt":66,"src":31008},"\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",[35,31010,31011],{},[64,31012],{"alt":66,"src":31013},"\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",[28,31015,31016],{"start":70},[31,31017,31018],{},"AlexNet的总结",[35,31020,31021],{},[64,31022],{"alt":66,"src":31023},"\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",[35,31025,31026],{},"比LeNet模型要深一丢丢",[22327,31028,31030],{"id":31029},"_212代码实现","2.1.2.代码实现",[35,31032,31033],{},"（1）LeNet",[28,31035,31036],{},[31,31037,31038],{},"模型搭建",[75,31040,31042],{"className":30705,"code":31041,"language":30707,"meta":66,"style":66},"# 导入库\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",[81,31043,31044,31049,31055,31060,31073,31078,31090,31094,31114,31119,31124,31135,31140,31159,31163,31168,31217,31229,31234,31263,31298,31325,31330,31342,31347,31367,31386,31405,31409,31414,31424,31441,31452,31467,31478,31489,31504,31519,31530,31537,31541,31555,31560,31583,31588,31593,31598,31602,31607,31612,31622],{"__ignoreMap":66},[84,31045,31046],{"class":86,"line":87},[84,31047,31048],{"class":328},"# 导入库\n",[84,31050,31051,31053],{"class":86,"line":98},[84,31052,30719],{"class":473},[84,31054,30722],{"class":477},[84,31056,31057],{"class":86,"line":70},[84,31058,31059],{"class":328},"# 导入神经网络层\n",[84,31061,31062,31065,31068,31070],{"class":86,"line":120},[84,31063,31064],{"class":473},"from",[84,31066,31067],{"class":477}," torch ",[84,31069,30719],{"class":473},[84,31071,31072],{"class":477}," nn\n",[84,31074,31075],{"class":86,"line":131},[84,31076,31077],{"class":328},"# 导入展示神经网络参数的包\n",[84,31079,31080,31082,31085,31087],{"class":86,"line":145},[84,31081,31064],{"class":473},[84,31083,31084],{"class":477}," torchsummary ",[84,31086,30719],{"class":473},[84,31088,31089],{"class":477}," summary\n",[84,31091,31092],{"class":86,"line":156},[84,31093,2729],{"emptyLinePlaceholder":403},[84,31095,31096,31098,31101,31103,31106,31108,31111],{"class":86,"line":164},[84,31097,15023],{"class":473},[84,31099,31100],{"class":90}," LeNet",[84,31102,478],{"class":477},[84,31104,31105],{"class":90},"nn",[84,31107,1031],{"class":477},[84,31109,31110],{"class":90},"Module",[84,31112,31113],{"class":477},"):\n",[84,31115,31116],{"class":86,"line":175},[84,31117,31118],{"class":328},"    # 模型初始化:\n",[84,31120,31121],{"class":86,"line":185},[84,31122,31123],{"class":328},"    # 定义一些网络层和激活函数\n",[84,31125,31126,31129,31132],{"class":86,"line":195},[84,31127,31128],{"class":473},"    def",[84,31130,31131],{"class":94}," __init__",[84,31133,31134],{"class":477},"(self):\n",[84,31136,31137],{"class":86,"line":206},[84,31138,31139],{"class":328},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[84,31141,31142,31145,31148,31151,31154,31157],{"class":86,"line":217},[84,31143,31144],{"class":94},"        super",[84,31146,31147],{"class":477},"(LeNet,",[84,31149,31150],{"class":94},"self",[84,31152,31153],{"class":477},").",[84,31155,31156],{"class":94},"__init__",[84,31158,2305],{"class":477},[84,31160,31161],{"class":86,"line":227},[84,31162,2729],{"emptyLinePlaceholder":403},[84,31164,31165],{"class":86,"line":238},[84,31166,31167],{"class":328},"        # 定义网络层\n",[84,31169,31170,31173,31176,31178,31181,31184,31186,31188,31190,31193,31195,31197,31199,31202,31204,31206,31208,31211,31213,31215],{"class":86,"line":249},[84,31171,31172],{"class":94},"        self",[84,31174,31175],{"class":477},".c1",[84,31177,523],{"class":473},[84,31179,31180],{"class":477},"nn.Conv2d(",[84,31182,31183],{"class":5545},"in_channels",[84,31185,523],{"class":473},[84,31187,692],{"class":94},[84,31189,851],{"class":477},[84,31191,31192],{"class":5545},"out_channels",[84,31194,523],{"class":473},[84,31196,817],{"class":94},[84,31198,851],{"class":477},[84,31200,31201],{"class":5545},"kernel_size",[84,31203,523],{"class":473},[84,31205,792],{"class":94},[84,31207,851],{"class":477},[84,31209,31210],{"class":5545},"padding",[84,31212,523],{"class":473},[84,31214,553],{"class":94},[84,31216,484],{"class":477},[84,31218,31219,31221,31224,31226],{"class":86,"line":262},[84,31220,31172],{"class":94},[84,31222,31223],{"class":477},".sig",[84,31225,523],{"class":473},[84,31227,31228],{"class":477},"nn.Sigmoid()\n",[84,31230,31231],{"class":86,"line":273},[84,31232,31233],{"class":328},"        # 定义池化\n",[84,31235,31236,31238,31241,31243,31246,31248,31250,31252,31254,31257,31259,31261],{"class":86,"line":283},[84,31237,31172],{"class":94},[84,31239,31240],{"class":477},".s2",[84,31242,523],{"class":473},[84,31244,31245],{"class":477},"nn.AvgPool2d(",[84,31247,31201],{"class":5545},[84,31249,523],{"class":473},[84,31251,553],{"class":94},[84,31253,851],{"class":477},[84,31255,31256],{"class":5545},"stride",[84,31258,523],{"class":473},[84,31260,553],{"class":94},[84,31262,484],{"class":477},[84,31264,31265,31267,31270,31272,31274,31276,31278,31280,31282,31284,31286,31288,31290,31292,31294,31296],{"class":86,"line":294},[84,31266,31172],{"class":94},[84,31268,31269],{"class":477},".c3",[84,31271,523],{"class":473},[84,31273,31180],{"class":477},[84,31275,31183],{"class":5545},[84,31277,523],{"class":473},[84,31279,817],{"class":94},[84,31281,851],{"class":477},[84,31283,31192],{"class":5545},[84,31285,523],{"class":473},[84,31287,1074],{"class":94},[84,31289,851],{"class":477},[84,31291,31201],{"class":5545},[84,31293,523],{"class":473},[84,31295,792],{"class":94},[84,31297,484],{"class":477},[84,31299,31300,31302,31305,31307,31309,31311,31313,31315,31317,31319,31321,31323],{"class":86,"line":2028},[84,31301,31172],{"class":94},[84,31303,31304],{"class":477},".s4",[84,31306,523],{"class":473},[84,31308,31245],{"class":477},[84,31310,31201],{"class":5545},[84,31312,523],{"class":473},[84,31314,553],{"class":94},[84,31316,851],{"class":477},[84,31318,31256],{"class":5545},[84,31320,523],{"class":473},[84,31322,553],{"class":94},[84,31324,484],{"class":477},[84,31326,31327],{"class":86,"line":2057},[84,31328,31329],{"class":328},"        # 定义平展层\n",[84,31331,31332,31334,31337,31339],{"class":86,"line":2062},[84,31333,31172],{"class":94},[84,31335,31336],{"class":477},".flatten",[84,31338,523],{"class":473},[84,31340,31341],{"class":477},"nn.Flatten()\n",[84,31343,31344],{"class":86,"line":2079},[84,31345,31346],{"class":328},"        # 定义全连接层\n",[84,31348,31349,31351,31354,31356,31359,31361,31363,31365],{"class":86,"line":2084},[84,31350,31172],{"class":94},[84,31352,31353],{"class":477},".f5",[84,31355,523],{"class":473},[84,31357,31358],{"class":477},"nn.Linear(",[84,31360,4316],{"class":94},[84,31362,851],{"class":477},[84,31364,1290],{"class":94},[84,31366,484],{"class":477},[84,31368,31369,31371,31374,31376,31378,31380,31382,31384],{"class":86,"line":2089},[84,31370,31172],{"class":94},[84,31372,31373],{"class":477},".f6",[84,31375,523],{"class":473},[84,31377,31358],{"class":477},[84,31379,1290],{"class":94},[84,31381,851],{"class":477},[84,31383,1184],{"class":94},[84,31385,484],{"class":477},[84,31387,31388,31390,31393,31395,31397,31399,31401,31403],{"class":86,"line":2094},[84,31389,31172],{"class":94},[84,31391,31392],{"class":477},".f7",[84,31394,523],{"class":473},[84,31396,31358],{"class":477},[84,31398,1184],{"class":94},[84,31400,851],{"class":477},[84,31402,919],{"class":94},[84,31404,484],{"class":477},[84,31406,31407],{"class":86,"line":2108},[84,31408,2729],{"emptyLinePlaceholder":403},[84,31410,31411],{"class":86,"line":2113},[84,31412,31413],{"class":328},"    # 写工具->写前向传播\n",[84,31415,31416,31418,31421],{"class":86,"line":2906},[84,31417,31128],{"class":473},[84,31419,31420],{"class":90}," forward",[84,31422,31423],{"class":477},"(self,x):\n",[84,31425,31426,31429,31431,31433,31436,31438],{"class":86,"line":2920},[84,31427,31428],{"class":477},"        x",[84,31430,523],{"class":473},[84,31432,31150],{"class":94},[84,31434,31435],{"class":477},".sig(",[84,31437,31150],{"class":94},[84,31439,31440],{"class":477},".c1(x))\n",[84,31442,31443,31445,31447,31449],{"class":86,"line":2928},[84,31444,31428],{"class":477},[84,31446,523],{"class":473},[84,31448,31150],{"class":94},[84,31450,31451],{"class":477},".s2(x)\n",[84,31453,31454,31456,31458,31460,31462,31464],{"class":86,"line":2933},[84,31455,31428],{"class":477},[84,31457,523],{"class":473},[84,31459,31150],{"class":94},[84,31461,31435],{"class":477},[84,31463,31150],{"class":94},[84,31465,31466],{"class":477},".c3(x))\n",[84,31468,31469,31471,31473,31475],{"class":86,"line":2939},[84,31470,31428],{"class":477},[84,31472,523],{"class":473},[84,31474,31150],{"class":94},[84,31476,31477],{"class":477},".s4(x)\n",[84,31479,31480,31482,31484,31486],{"class":86,"line":2945},[84,31481,31428],{"class":477},[84,31483,523],{"class":473},[84,31485,31150],{"class":94},[84,31487,31488],{"class":477},".flatten(x)\n",[84,31490,31491,31493,31495,31497,31499,31501],{"class":86,"line":2950},[84,31492,31428],{"class":477},[84,31494,523],{"class":473},[84,31496,31150],{"class":94},[84,31498,31435],{"class":477},[84,31500,31150],{"class":94},[84,31502,31503],{"class":477},".f5(x))\n",[84,31505,31506,31508,31510,31512,31514,31516],{"class":86,"line":8277},[84,31507,31428],{"class":477},[84,31509,523],{"class":473},[84,31511,31150],{"class":94},[84,31513,31435],{"class":477},[84,31515,31150],{"class":94},[84,31517,31518],{"class":477},".f6(x))\n",[84,31520,31521,31523,31525,31527],{"class":86,"line":8301},[84,31522,31428],{"class":477},[84,31524,523],{"class":473},[84,31526,31150],{"class":94},[84,31528,31529],{"class":477},".f7(x)\n",[84,31531,31532,31534],{"class":86,"line":8306},[84,31533,15081],{"class":473},[84,31535,31536],{"class":477}," x\n",[84,31538,31539],{"class":86,"line":8312},[84,31540,2729],{"emptyLinePlaceholder":403},[84,31542,31543,31545,31548,31550,31553],{"class":86,"line":8339},[84,31544,1871],{"class":473},[84,31546,31547],{"class":94}," __name__",[84,31549,3278],{"class":473},[84,31551,31552],{"class":104},"\"__main__\"",[84,31554,4068],{"class":477},[84,31556,31557],{"class":86,"line":8344},[84,31558,31559],{"class":328},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[84,31561,31562,31565,31567,31569,31572,31574,31577,31579,31581],{"class":86,"line":8350},[84,31563,31564],{"class":477},"    device",[84,31566,523],{"class":473},[84,31568,30778],{"class":477},[84,31570,31571],{"class":104},"\"cuda\"",[84,31573,2034],{"class":473},[84,31575,31576],{"class":477}," torch.cuda.is_available() ",[84,31578,2031],{"class":473},[84,31580,30803],{"class":104},[84,31582,484],{"class":477},[84,31584,31585],{"class":86,"line":8362},[84,31586,31587],{"class":328},"    # 如果就是想指定用cpu用下方代码:\n",[84,31589,31590],{"class":86,"line":8374},[84,31591,31592],{"class":328},"    # device=\"cpu\"\n",[84,31594,31595],{"class":86,"line":8386},[84,31596,31597],{"class":328},"    # print(device)\n",[84,31599,31600],{"class":86,"line":10045},[84,31601,2729],{"emptyLinePlaceholder":403},[84,31603,31604],{"class":86,"line":10070},[84,31605,31606],{"class":328},"    # 实例化模型\n",[84,31608,31609],{"class":86,"line":10093},[84,31610,31611],{"class":328},"    # 将模型放到设备中去运行\n",[84,31613,31614,31617,31619],{"class":86,"line":10117},[84,31615,31616],{"class":477},"    model",[84,31618,523],{"class":473},[84,31620,31621],{"class":477},"LeNet().to(device)\n",[84,31623,31624,31627,31630,31632,31634,31636,31638,31640],{"class":86,"line":10122},[84,31625,31626],{"class":94},"    print",[84,31628,31629],{"class":477},"(summary(model,(",[84,31631,692],{"class":94},[84,31633,851],{"class":477},[84,31635,1374],{"class":94},[84,31637,851],{"class":477},[84,31639,1374],{"class":94},[84,31641,31642],{"class":477},")))\n",[35,31644,31645],{},[64,31646],{"alt":66,"src":31647},"\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",[35,31649,31650],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[28,31652,31653],{"start":98},[31,31654,31655],{},"训练",[35,31657,31658],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[35,31660,31661],{},"在训练之前可以将数据展示看一下",[75,31663,31665],{"className":30705,"code":31664,"language":30707,"meta":66,"style":66},"# 建立画图的函数，用于展示数据\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",[81,31666,31667,31672,31677,31689,31701,31714,31719,31731,31736,31748,31753,31765,31769,31773,31794,31806,31811,31832,31843,31847,31852,31870,31881,31886,31897,31902,31913,31917,31922,31937,31950,31955,31960,31973,31986,31999,32004,32008,32013,32033,32050,32070,32083,32096,32106,32121],{"__ignoreMap":66},[84,31668,31669],{"class":86,"line":87},[84,31670,31671],{"class":328},"# 建立画图的函数，用于展示数据\n",[84,31673,31674],{"class":86,"line":98},[84,31675,31676],{"class":328},"# torchvision中包含很多内置的数据集\n",[84,31678,31679,31681,31684,31686],{"class":86,"line":70},[84,31680,31064],{"class":473},[84,31682,31683],{"class":477}," sklearn.externals.array_api_compat.torch ",[84,31685,30719],{"class":473},[84,31687,31688],{"class":477}," squeeze\n",[84,31690,31691,31693,31696,31698],{"class":86,"line":120},[84,31692,31064],{"class":473},[84,31694,31695],{"class":477}," torchvision.datasets ",[84,31697,30719],{"class":473},[84,31699,31700],{"class":477}," FashionMNIST\n",[84,31702,31703,31705,31708,31711],{"class":86,"line":131},[84,31704,30719],{"class":473},[84,31706,31707],{"class":477}," numpy ",[84,31709,31710],{"class":473},"as",[84,31712,31713],{"class":477}," np\n",[84,31715,31716],{"class":86,"line":145},[84,31717,31718],{"class":328},"# 引入处理数据集的包\n",[84,31720,31721,31723,31726,31728],{"class":86,"line":156},[84,31722,31064],{"class":473},[84,31724,31725],{"class":477}," torchvision ",[84,31727,30719],{"class":473},[84,31729,31730],{"class":477}," transforms\n",[84,31732,31733],{"class":86,"line":164},[84,31734,31735],{"class":328},"# 从torch库中引入数据处理的包\n",[84,31737,31738,31740,31743,31745],{"class":86,"line":175},[84,31739,30719],{"class":473},[84,31741,31742],{"class":477}," torch.utils.data ",[84,31744,31710],{"class":473},[84,31746,31747],{"class":477}," Data\n",[84,31749,31750],{"class":86,"line":185},[84,31751,31752],{"class":328},"# 导入画图的库\n",[84,31754,31755,31757,31760,31762],{"class":86,"line":195},[84,31756,30719],{"class":473},[84,31758,31759],{"class":477}," matplotlib.pyplot ",[84,31761,31710],{"class":473},[84,31763,31764],{"class":477}," plt\n",[84,31766,31767],{"class":86,"line":206},[84,31768,2729],{"emptyLinePlaceholder":403},[84,31770,31771],{"class":86,"line":217},[84,31772,2729],{"emptyLinePlaceholder":403},[84,31774,31775,31778,31780,31783,31786,31788,31791],{"class":86,"line":227},[84,31776,31777],{"class":477},"train_data",[84,31779,523],{"class":473},[84,31781,31782],{"class":477},"FashionMNIST(",[84,31784,31785],{"class":5545},"root",[84,31787,523],{"class":473},[84,31789,31790],{"class":104},"'.\u002Fdata'",[84,31792,31793],{"class":477},",\n",[84,31795,31796,31799,31801,31804],{"class":86,"line":238},[84,31797,31798],{"class":5545},"                        train",[84,31800,523],{"class":473},[84,31802,31803],{"class":94},"True",[84,31805,31793],{"class":477},[84,31807,31808],{"class":86,"line":249},[84,31809,31810],{"class":328},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[84,31812,31813,31816,31818,31821,31824,31826,31829],{"class":86,"line":262},[84,31814,31815],{"class":5545},"                        transform",[84,31817,523],{"class":473},[84,31819,31820],{"class":477},"transforms.Compose([transforms.Resize(",[84,31822,31823],{"class":5545},"size",[84,31825,523],{"class":473},[84,31827,31828],{"class":94},"224",[84,31830,31831],{"class":477},"),transforms.ToTensor()]),\n",[84,31833,31834,31837,31839,31841],{"class":86,"line":273},[84,31835,31836],{"class":5545},"                        download",[84,31838,523],{"class":473},[84,31840,31803],{"class":94},[84,31842,484],{"class":477},[84,31844,31845],{"class":86,"line":283},[84,31846,2729],{"emptyLinePlaceholder":403},[84,31848,31849],{"class":86,"line":294},[84,31850,31851],{"class":328},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[84,31853,31854,31857,31859,31862,31865,31867],{"class":86,"line":2028},[84,31855,31856],{"class":477},"train_loader",[84,31858,523],{"class":473},[84,31860,31861],{"class":477},"Data.DataLoader(",[84,31863,31864],{"class":5545},"dataset",[84,31866,523],{"class":473},[84,31868,31869],{"class":477},"train_data,\n",[84,31871,31872,31875,31877,31879],{"class":86,"line":2057},[84,31873,31874],{"class":5545},"                             batch_size",[84,31876,523],{"class":473},[84,31878,678],{"class":94},[84,31880,31793],{"class":477},[84,31882,31883],{"class":86,"line":2062},[84,31884,31885],{"class":328},"                             # 数据是否打乱\n",[84,31887,31888,31891,31893,31895],{"class":86,"line":2079},[84,31889,31890],{"class":5545},"                             shuffle",[84,31892,523],{"class":473},[84,31894,31803],{"class":94},[84,31896,31793],{"class":477},[84,31898,31899],{"class":86,"line":2084},[84,31900,31901],{"class":328},"                             # 规定加载数据的进程\n",[84,31903,31904,31907,31909,31911],{"class":86,"line":2089},[84,31905,31906],{"class":5545},"                             num_workers",[84,31908,523],{"class":473},[84,31910,666],{"class":94},[84,31912,484],{"class":477},[84,31914,31915],{"class":86,"line":2094},[84,31916,2729],{"emptyLinePlaceholder":403},[84,31918,31919],{"class":86,"line":2108},[84,31920,31921],{"class":328},"# 获得一个batch的数据\n",[84,31923,31924,31926,31929,31931,31934],{"class":86,"line":2113},[84,31925,3354],{"class":473},[84,31927,31928],{"class":477}," step,(b_x,b_y) ",[84,31930,26371],{"class":473},[84,31932,31933],{"class":94}," enumerate",[84,31935,31936],{"class":477},"(train_loader):\n",[84,31938,31939,31941,31944,31946,31948],{"class":86,"line":2906},[84,31940,3430],{"class":473},[84,31942,31943],{"class":477}," step ",[84,31945,1433],{"class":473},[84,31947,4422],{"class":94},[84,31949,4068],{"class":477},[84,31951,31952],{"class":86,"line":2920},[84,31953,31954],{"class":473},"        break\n",[84,31956,31957],{"class":86,"line":2928},[84,31958,31959],{"class":328},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[84,31961,31962,31965,31967,31970],{"class":86,"line":2933},[84,31963,31964],{"class":477},"batch_x",[84,31966,523],{"class":473},[84,31968,31969],{"class":477},"b_x.squeeze().numpy()  ",[84,31971,31972],{"class":328},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[84,31974,31975,31978,31980,31983],{"class":86,"line":2939},[84,31976,31977],{"class":477},"batch_y",[84,31979,523],{"class":473},[84,31981,31982],{"class":477},"b_y.numpy()   ",[84,31984,31985],{"class":328},"#将张量转换成功numpy数组\n",[84,31987,31988,31991,31993,31996],{"class":86,"line":2945},[84,31989,31990],{"class":477},"class_label",[84,31992,523],{"class":473},[84,31994,31995],{"class":477},"train_data.classes  ",[84,31997,31998],{"class":328},"#训练集标签\n",[84,32000,32001],{"class":86,"line":2950},[84,32002,32003],{"class":328},"# print(class_label)\n",[84,32005,32006],{"class":86,"line":8277},[84,32007,2729],{"emptyLinePlaceholder":403},[84,32009,32010],{"class":86,"line":8301},[84,32011,32012],{"class":328},"# 可视化一个batch的图像\n",[84,32014,32015,32018,32021,32023,32025,32027,32029,32031],{"class":86,"line":8306},[84,32016,32017],{"class":477},"plt.figure(",[84,32019,32020],{"class":5545},"figsize",[84,32022,523],{"class":473},[84,32024,478],{"class":477},[84,32026,971],{"class":94},[84,32028,851],{"class":477},[84,32030,792],{"class":94},[84,32032,30824],{"class":477},[84,32034,32035,32037,32040,32042,32045,32047],{"class":86,"line":8312},[84,32036,3354],{"class":473},[84,32038,32039],{"class":477}," ii ",[84,32041,26371],{"class":473},[84,32043,32044],{"class":477}," np.arange(",[84,32046,7687],{"class":94},[84,32048,32049],{"class":477},"(batch_y)):\n",[84,32051,32052,32055,32057,32059,32061,32064,32066,32068],{"class":86,"line":8339},[84,32053,32054],{"class":477},"    plt.subplot(",[84,32056,140],{"class":94},[84,32058,851],{"class":477},[84,32060,1074],{"class":94},[84,32062,32063],{"class":477},",ii ",[84,32065,954],{"class":473},[84,32067,25446],{"class":94},[84,32069,484],{"class":477},[84,32071,32072,32075,32078,32080],{"class":86,"line":8344},[84,32073,32074],{"class":477},"    plt.imshow(batch_x[ii,:,:],",[84,32076,32077],{"class":5545},"cmap",[84,32079,523],{"class":473},[84,32081,32082],{"class":477},"plt.cm.gray)\n",[84,32084,32085,32088,32090,32092,32094],{"class":86,"line":8350},[84,32086,32087],{"class":477},"    plt.title(class_label[batch_y[ii]],",[84,32089,31823],{"class":5545},[84,32091,523],{"class":473},[84,32093,919],{"class":94},[84,32095,484],{"class":477},[84,32097,32098,32101,32104],{"class":86,"line":8362},[84,32099,32100],{"class":477},"    plt.axis(",[84,32102,32103],{"class":104},"\"off\"",[84,32105,484],{"class":477},[84,32107,32108,32111,32114,32116,32119],{"class":86,"line":8374},[84,32109,32110],{"class":477},"    plt.subplots_adjust(",[84,32112,32113],{"class":5545},"wspace",[84,32115,523],{"class":473},[84,32117,32118],{"class":94},"0.05",[84,32120,484],{"class":477},[84,32122,32123],{"class":86,"line":8386},[84,32124,32125],{"class":477},"plt.show()\n",[35,32127,32128],{},"用matplotlib进行展示的过程可以后续再补",[35,32130,32131],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[35,32133,32134],{},"训练次数就是按照批次过整个训练集数据的次数",[35,32136,32137],{},"模型训练：",[75,32139,32141],{"className":30705,"code":32140,"language":30707,"meta":66,"style":66},"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",[81,32142,32143,32150,32157,32161,32173,32179,32190,32200,32210,32220,32230,32235,32247,32257,32261,32265,32270,32281,32294,32305,32322,32333,32372,32388,32400,32411,32416,32427,32443,32454,32465,32476,32483,32487,32492,32497,32501,32506,32516,32537,32541,32545,32550,32555,32560,32580,32584,32589,32599,32603,32608,32617,32622,32627,32632,32642,32646,32650,32655,32660,32670,32675,32685,32690,32699,32704,32713,32718,32727,32731,32736,32746,32750,32754,32759,32774,32802,32817,32821,32826,32831,32840,32845,32854,32859,32868,32873,32882,32887,32896,32901,32910,32915,32928,32933,32943,32948,32958,32964,32970,32976,32982,32993,32999,33019,33025,33036,33042,33048,33054,33060,33066,33072,33078,33098,33104,33120,33126,33140,33146,33161,33167,33176,33182,33191,33197,33203,33212,33218,33229,33235,33254,33260,33271,33277,33297,33313,33319,33333,33339,33345,33356,33362,33368,33378,33384,33395,33401,33411,33416,33422,33471,33518,33523,33529,33548,33554,33574,33580,33586,33596,33601,33607,33623,33668,33674,33680,33686,33697,33703,33709,33715,33733,33747,33756,33765,33774,33783,33789,33795,33803,33808,33814,33825,33831,33851,33857,33863,33869,33886,33892,33898,33904,33910,33916,33943,33967,33973,33979,33985,33996,34007,34013,34030,34053,34076,34082,34087,34096,34106,34112,34117,34123,34136,34142,34153,34164,34183],{"__ignoreMap":66},[84,32144,32145,32147],{"class":86,"line":87},[84,32146,30719],{"class":473},[84,32148,32149],{"class":477}," copy\n",[84,32151,32152,32154],{"class":86,"line":98},[84,32153,30719],{"class":473},[84,32155,32156],{"class":477}," time\n",[84,32158,32159],{"class":86,"line":70},[84,32160,2729],{"emptyLinePlaceholder":403},[84,32162,32163,32165,32168,32170],{"class":86,"line":120},[84,32164,30719],{"class":473},[84,32166,32167],{"class":477}," pandas ",[84,32169,31710],{"class":473},[84,32171,32172],{"class":477}," pd\n",[84,32174,32175,32177],{"class":86,"line":131},[84,32176,30719],{"class":473},[84,32178,30722],{"class":477},[84,32180,32181,32183,32185,32187],{"class":86,"line":145},[84,32182,31064],{"class":473},[84,32184,31742],{"class":477},[84,32186,30719],{"class":473},[84,32188,32189],{"class":477}," Dataset\n",[84,32191,32192,32194,32196,32198],{"class":86,"line":156},[84,32193,31064],{"class":473},[84,32195,31695],{"class":477},[84,32197,30719],{"class":473},[84,32199,31700],{"class":477},[84,32201,32202,32204,32206,32208],{"class":86,"line":164},[84,32203,31064],{"class":473},[84,32205,31725],{"class":477},[84,32207,30719],{"class":473},[84,32209,31730],{"class":477},[84,32211,32212,32214,32216,32218],{"class":86,"line":175},[84,32213,30719],{"class":473},[84,32215,31742],{"class":477},[84,32217,31710],{"class":473},[84,32219,31747],{"class":477},[84,32221,32222,32224,32226,32228],{"class":86,"line":185},[84,32223,30719],{"class":473},[84,32225,31759],{"class":477},[84,32227,31710],{"class":473},[84,32229,31764],{"class":477},[84,32231,32232],{"class":86,"line":195},[84,32233,32234],{"class":328},"# 导入模型\n",[84,32236,32237,32239,32242,32244],{"class":86,"line":206},[84,32238,31064],{"class":473},[84,32240,32241],{"class":477}," model ",[84,32243,30719],{"class":473},[84,32245,32246],{"class":477}," LeNet\n",[84,32248,32249,32251,32253,32255],{"class":86,"line":217},[84,32250,31064],{"class":473},[84,32252,31067],{"class":477},[84,32254,30719],{"class":473},[84,32256,31072],{"class":477},[84,32258,32259],{"class":86,"line":227},[84,32260,2729],{"emptyLinePlaceholder":403},[84,32262,32263],{"class":86,"line":238},[84,32264,2729],{"emptyLinePlaceholder":403},[84,32266,32267],{"class":86,"line":249},[84,32268,32269],{"class":328},"# 处理训练集与验证集函数--->划分数据集\n",[84,32271,32272,32275,32278],{"class":86,"line":262},[84,32273,32274],{"class":473},"def",[84,32276,32277],{"class":90}," train_val_data_process",[84,32279,32280],{"class":477},"():\n",[84,32282,32283,32286,32288,32290,32292],{"class":86,"line":273},[84,32284,32285],{"class":477},"    train_data",[84,32287,523],{"class":473},[84,32289,31782],{"class":477},[84,32291,31790],{"class":104},[84,32293,31793],{"class":477},[84,32295,32296,32299,32301,32303],{"class":86,"line":283},[84,32297,32298],{"class":5545},"                            train",[84,32300,523],{"class":473},[84,32302,31803],{"class":94},[84,32304,31793],{"class":477},[84,32306,32307,32310,32312,32314,32316,32318,32320],{"class":86,"line":294},[84,32308,32309],{"class":5545},"                            transform",[84,32311,523],{"class":473},[84,32313,31820],{"class":477},[84,32315,31823],{"class":5545},[84,32317,523],{"class":473},[84,32319,1374],{"class":94},[84,32321,31831],{"class":477},[84,32323,32324,32327,32329,32331],{"class":86,"line":2028},[84,32325,32326],{"class":5545},"                            download",[84,32328,523],{"class":473},[84,32330,31803],{"class":94},[84,32332,484],{"class":477},[84,32334,32335,32338,32340,32343,32346,32348,32351,32353,32355,32358,32360,32362,32365,32367,32369],{"class":86,"line":2057},[84,32336,32337],{"class":477},"    train_data,val_data",[84,32339,523],{"class":473},[84,32341,32342],{"class":477},"Data.random_split(train_data,[",[84,32344,32345],{"class":94},"round",[84,32347,478],{"class":477},[84,32349,32350],{"class":94},"0.8",[84,32352,928],{"class":473},[84,32354,7687],{"class":94},[84,32356,32357],{"class":477},"(train_data)),",[84,32359,32345],{"class":94},[84,32361,478],{"class":477},[84,32363,32364],{"class":94},"0.2",[84,32366,928],{"class":473},[84,32368,7687],{"class":94},[84,32370,32371],{"class":477},"(train_data))])\n",[84,32373,32374,32377,32379,32382,32384,32386],{"class":86,"line":2062},[84,32375,32376],{"class":477},"    train_dataloader ",[84,32378,523],{"class":473},[84,32380,32381],{"class":477}," Data.DataLoader(",[84,32383,31864],{"class":5545},[84,32385,523],{"class":473},[84,32387,31869],{"class":477},[84,32389,32390,32393,32395,32398],{"class":86,"line":2079},[84,32391,32392],{"class":5545},"                                       batch_size",[84,32394,523],{"class":473},[84,32396,32397],{"class":94},"128",[84,32399,31793],{"class":477},[84,32401,32402,32405,32407,32409],{"class":86,"line":2084},[84,32403,32404],{"class":5545},"                                       shuffle",[84,32406,523],{"class":473},[84,32408,31803],{"class":94},[84,32410,31793],{"class":477},[84,32412,32413],{"class":86,"line":2089},[84,32414,32415],{"class":328},"                                       # 规定8个进程\n",[84,32417,32418,32421,32423,32425],{"class":86,"line":2094},[84,32419,32420],{"class":5545},"                                       num_workers",[84,32422,523],{"class":473},[84,32424,868],{"class":94},[84,32426,484],{"class":477},[84,32428,32429,32432,32434,32436,32438,32440],{"class":86,"line":2108},[84,32430,32431],{"class":477},"    val_dataloader",[84,32433,523],{"class":473},[84,32435,31861],{"class":477},[84,32437,31864],{"class":5545},[84,32439,523],{"class":473},[84,32441,32442],{"class":477},"val_data,\n",[84,32444,32445,32448,32450,32452],{"class":86,"line":2113},[84,32446,32447],{"class":5545},"                                   batch_size",[84,32449,523],{"class":473},[84,32451,32397],{"class":94},[84,32453,31793],{"class":477},[84,32455,32456,32459,32461,32463],{"class":86,"line":2906},[84,32457,32458],{"class":5545},"                                   shuffle",[84,32460,523],{"class":473},[84,32462,31803],{"class":94},[84,32464,31793],{"class":477},[84,32466,32467,32470,32472,32474],{"class":86,"line":2920},[84,32468,32469],{"class":5545},"                                   num_workers",[84,32471,523],{"class":473},[84,32473,868],{"class":94},[84,32475,484],{"class":477},[84,32477,32478,32480],{"class":86,"line":2928},[84,32479,4419],{"class":473},[84,32481,32482],{"class":477}," train_dataloader,val_dataloader\n",[84,32484,32485],{"class":86,"line":2933},[84,32486,2729],{"emptyLinePlaceholder":403},[84,32488,32489],{"class":86,"line":2939},[84,32490,32491],{"class":328},"# 验证是否出错\n",[84,32493,32494],{"class":86,"line":2945},[84,32495,32496],{"class":328},"# train_val_data_process()\n",[84,32498,32499],{"class":86,"line":2950},[84,32500,2729],{"emptyLinePlaceholder":403},[84,32502,32503],{"class":86,"line":8277},[84,32504,32505],{"class":328},"# 定义模型训练函数\n",[84,32507,32508,32510,32513],{"class":86,"line":8301},[84,32509,32274],{"class":473},[84,32511,32512],{"class":90}," train_model_process",[84,32514,32515],{"class":477},"(model,train_dataloader,val_dataloader,num_epochs):\n",[84,32517,32518,32520,32522,32524,32526,32528,32530,32532,32535],{"class":86,"line":8306},[84,32519,31564],{"class":477},[84,32521,523],{"class":473},[84,32523,30778],{"class":477},[84,32525,31571],{"class":104},[84,32527,2034],{"class":473},[84,32529,31576],{"class":477},[84,32531,2031],{"class":473},[84,32533,32534],{"class":104}," 'cpu'",[84,32536,484],{"class":477},[84,32538,32539],{"class":86,"line":8312},[84,32540,2729],{"emptyLinePlaceholder":403},[84,32542,32543],{"class":86,"line":8339},[84,32544,2729],{"emptyLinePlaceholder":403},[84,32546,32547],{"class":86,"line":8344},[84,32548,32549],{"class":328},"    # 定义优化器\n",[84,32551,32552],{"class":86,"line":8350},[84,32553,32554],{"class":328},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[84,32556,32557],{"class":86,"line":8362},[84,32558,32559],{"class":328},"    # lr为学习率\n",[84,32561,32562,32565,32567,32570,32573,32575,32578],{"class":86,"line":8374},[84,32563,32564],{"class":477},"    optimizer",[84,32566,523],{"class":473},[84,32568,32569],{"class":477},"torch.optim.Adam(model.parameters(),",[84,32571,32572],{"class":5545},"lr",[84,32574,523],{"class":473},[84,32576,32577],{"class":94},"0.001",[84,32579,484],{"class":477},[84,32581,32582],{"class":86,"line":8386},[84,32583,2729],{"emptyLinePlaceholder":403},[84,32585,32586],{"class":86,"line":10045},[84,32587,32588],{"class":328},"    # 定义损失函数使用交叉熵损失函数\n",[84,32590,32591,32594,32596],{"class":86,"line":10070},[84,32592,32593],{"class":477},"    criterion",[84,32595,523],{"class":473},[84,32597,32598],{"class":477},"nn.CrossEntropyLoss()\n",[84,32600,32601],{"class":86,"line":10093},[84,32602,2729],{"emptyLinePlaceholder":403},[84,32604,32605],{"class":86,"line":10117},[84,32606,32607],{"class":328},"    # 将模型放到GPU中进行训练\n",[84,32609,32610,32612,32614],{"class":86,"line":10122},[84,32611,31616],{"class":477},[84,32613,523],{"class":473},[84,32615,32616],{"class":477},"model.to(device)\n",[84,32618,32619],{"class":86,"line":10127},[84,32620,32621],{"class":328},"    # 复制当前模型的参数\n",[84,32623,32624],{"class":86,"line":10132},[84,32625,32626],{"class":328},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[84,32628,32629],{"class":86,"line":10141},[84,32630,32631],{"class":328},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[84,32633,32634,32637,32639],{"class":86,"line":10146},[84,32635,32636],{"class":477},"    best_model_wts",[84,32638,523],{"class":473},[84,32640,32641],{"class":477},"copy.deepcopy(model.state_dict())\n",[84,32643,32644],{"class":86,"line":10152},[84,32645,2729],{"emptyLinePlaceholder":403},[84,32647,32648],{"class":86,"line":10173},[84,32649,2729],{"emptyLinePlaceholder":403},[84,32651,32652],{"class":86,"line":10179},[84,32653,32654],{"class":328},"    # 初始化参数\n",[84,32656,32657],{"class":86,"line":10193},[84,32658,32659],{"class":328},"    # 最高准确度\n",[84,32661,32662,32665,32667],{"class":86,"line":10199},[84,32663,32664],{"class":477},"    best_acc",[84,32666,523],{"class":473},[84,32668,32669],{"class":94},"0.0\n",[84,32671,32672],{"class":86,"line":10226},[84,32673,32674],{"class":328},"    # 训练集损失列表\n",[84,32676,32677,32680,32682],{"class":86,"line":10235},[84,32678,32679],{"class":477},"    train_loss_all",[84,32681,523],{"class":473},[84,32683,32684],{"class":477},"[]\n",[84,32686,32687],{"class":86,"line":10241},[84,32688,32689],{"class":328},"    # 验证集函数列表\n",[84,32691,32692,32695,32697],{"class":86,"line":10249},[84,32693,32694],{"class":477},"    val_loss_all",[84,32696,523],{"class":473},[84,32698,32684],{"class":477},[84,32700,32701],{"class":86,"line":10254},[84,32702,32703],{"class":328},"    # 训练集准确度列表\n",[84,32705,32706,32709,32711],{"class":86,"line":16933},[84,32707,32708],{"class":477},"    train_acc_all",[84,32710,523],{"class":473},[84,32712,32684],{"class":477},[84,32714,32715],{"class":86,"line":16939},[84,32716,32717],{"class":328},"    # 验证集准确度列表\n",[84,32719,32720,32723,32725],{"class":86,"line":16962},[84,32721,32722],{"class":477},"    val_acc_all",[84,32724,523],{"class":473},[84,32726,32684],{"class":477},[84,32728,32729],{"class":86,"line":16968},[84,32730,2729],{"emptyLinePlaceholder":403},[84,32732,32733],{"class":86,"line":16991},[84,32734,32735],{"class":328},"    # 保存当前时间--->方便看每轮训练的时间\n",[84,32737,32738,32741,32743],{"class":86,"line":17005},[84,32739,32740],{"class":477},"    since",[84,32742,523],{"class":473},[84,32744,32745],{"class":477},"time.time()\n",[84,32747,32748],{"class":86,"line":17025},[84,32749,2729],{"emptyLinePlaceholder":403},[84,32751,32752],{"class":86,"line":17031},[84,32753,2729],{"emptyLinePlaceholder":403},[84,32755,32756],{"class":86,"line":17042},[84,32757,32758],{"class":328},"    # 准备工作完成--->开始训练模型\n",[84,32760,32761,32763,32766,32768,32771],{"class":86,"line":17065},[84,32762,3530],{"class":473},[84,32764,32765],{"class":477}," epoch ",[84,32767,26371],{"class":473},[84,32769,32770],{"class":94}," range",[84,32772,32773],{"class":477},"(num_epochs):\n",[84,32775,32776,32779,32781,32784,32787,32789,32791,32793,32796,32798,32800],{"class":86,"line":17087},[84,32777,32778],{"class":94},"        print",[84,32780,478],{"class":477},[84,32782,32783],{"class":104},"\"Epoch ",[84,32785,32786],{"class":94},"{}",[84,32788,1057],{"class":104},[84,32790,32786],{"class":94},[84,32792,725],{"class":104},[84,32794,32795],{"class":477},".format(epoch,num_epochs",[84,32797,1005],{"class":473},[84,32799,692],{"class":94},[84,32801,30824],{"class":477},[84,32803,32804,32806,32808,32811,32813,32815],{"class":86,"line":17092},[84,32805,32778],{"class":94},[84,32807,478],{"class":477},[84,32809,32810],{"class":104},"\"-\"",[84,32812,928],{"class":473},[84,32814,919],{"class":94},[84,32816,484],{"class":477},[84,32818,32819],{"class":86,"line":17098},[84,32820,2729],{"emptyLinePlaceholder":403},[84,32822,32823],{"class":86,"line":17112},[84,32824,32825],{"class":328},"        # 初始化参数\n",[84,32827,32828],{"class":86,"line":17125},[84,32829,32830],{"class":328},"        # 训练集损失函数\n",[84,32832,32833,32836,32838],{"class":86,"line":17130},[84,32834,32835],{"class":477},"        train_loss",[84,32837,523],{"class":473},[84,32839,32669],{"class":94},[84,32841,32842],{"class":86,"line":17144},[84,32843,32844],{"class":328},"        # 训练集准确度\n",[84,32846,32847,32850,32852],{"class":86,"line":17149},[84,32848,32849],{"class":477},"        train_corrects",[84,32851,523],{"class":473},[84,32853,3414],{"class":94},[84,32855,32856],{"class":86,"line":17155},[84,32857,32858],{"class":328},"        # 验证集损失函数\n",[84,32860,32861,32864,32866],{"class":86,"line":17160},[84,32862,32863],{"class":477},"        val_loss",[84,32865,523],{"class":473},[84,32867,32669],{"class":94},[84,32869,32870],{"class":86,"line":17174},[84,32871,32872],{"class":328},"        # 验证集准确度\n",[84,32874,32875,32878,32880],{"class":86,"line":17179},[84,32876,32877],{"class":477},"        val_corrects",[84,32879,523],{"class":473},[84,32881,3414],{"class":94},[84,32883,32884],{"class":86,"line":17184},[84,32885,32886],{"class":328},"        # 训练集样本数量\n",[84,32888,32889,32892,32894],{"class":86,"line":17198},[84,32890,32891],{"class":477},"        train_num",[84,32893,523],{"class":473},[84,32895,3414],{"class":94},[84,32897,32898],{"class":86,"line":17210},[84,32899,32900],{"class":328},"        # 验证集样本数量\n",[84,32902,32903,32906,32908],{"class":86,"line":17215},[84,32904,32905],{"class":477},"        val_num",[84,32907,523],{"class":473},[84,32909,3414],{"class":94},[84,32911,32912],{"class":86,"line":17228},[84,32913,32914],{"class":328},"        # 将数据放到设备,并开始训练\n",[84,32916,32917,32919,32921,32923,32925],{"class":86,"line":17233},[84,32918,3732],{"class":473},[84,32920,31928],{"class":477},[84,32922,26371],{"class":473},[84,32924,31933],{"class":94},[84,32926,32927],{"class":477},"(train_dataloader):\n",[84,32929,32930],{"class":86,"line":17238},[84,32931,32932],{"class":328},"            # 将特征放入到训练设备\n",[84,32934,32935,32938,32940],{"class":86,"line":17243},[84,32936,32937],{"class":477},"            b_x",[84,32939,523],{"class":473},[84,32941,32942],{"class":477},"b_x.to(device)\n",[84,32944,32945],{"class":86,"line":17256},[84,32946,32947],{"class":328},"            # 将标签放入到训练设备当中\n",[84,32949,32950,32953,32955],{"class":86,"line":17261},[84,32951,32952],{"class":477},"            b_y",[84,32954,523],{"class":473},[84,32956,32957],{"class":477},"b_y.to(device)\n",[84,32959,32961],{"class":86,"line":32960},98,[84,32962,32963],{"class":328},"            # 设置模型为训练模式\n",[84,32965,32967],{"class":86,"line":32966},99,[84,32968,32969],{"class":477},"            model.train()\n",[84,32971,32973],{"class":86,"line":32972},100,[84,32974,32975],{"class":328},"            # 将数据放到模型当中,开始前向传播\n",[84,32977,32979],{"class":86,"line":32978},101,[84,32980,32981],{"class":328},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[84,32983,32985,32988,32990],{"class":86,"line":32984},102,[84,32986,32987],{"class":477},"            output",[84,32989,523],{"class":473},[84,32991,32992],{"class":477},"model(b_x)\n",[84,32994,32996],{"class":86,"line":32995},103,[84,32997,32998],{"class":328},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[84,33000,33002,33005,33007,33010,33013,33015,33017],{"class":86,"line":33001},104,[84,33003,33004],{"class":477},"            pre_lab",[84,33006,523],{"class":473},[84,33008,33009],{"class":477},"torch.argmax(output,",[84,33011,33012],{"class":5545},"dim",[84,33014,523],{"class":473},[84,33016,692],{"class":94},[84,33018,484],{"class":477},[84,33020,33022],{"class":86,"line":33021},105,[84,33023,33024],{"class":328},"            # 计算每一个batch的损失函数\n",[84,33026,33028,33031,33033],{"class":86,"line":33027},106,[84,33029,33030],{"class":477},"            loss",[84,33032,523],{"class":473},[84,33034,33035],{"class":477},"criterion(output,b_y)\n",[84,33037,33039],{"class":86,"line":33038},107,[84,33040,33041],{"class":328},"            # 将梯度初始化为0\n",[84,33043,33045],{"class":86,"line":33044},108,[84,33046,33047],{"class":477},"            optimizer.zero_grad()\n",[84,33049,33051],{"class":86,"line":33050},109,[84,33052,33053],{"class":328},"            # 梯度置为0后再进行反向传播\n",[84,33055,33057],{"class":86,"line":33056},110,[84,33058,33059],{"class":477},"            loss.backward()\n",[84,33061,33063],{"class":86,"line":33062},111,[84,33064,33065],{"class":328},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[84,33067,33069],{"class":86,"line":33068},112,[84,33070,33071],{"class":477},"            optimizer.step()\n",[84,33073,33075],{"class":86,"line":33074},113,[84,33076,33077],{"class":328},"            # loss.item()指的是batch的平均损失\n",[84,33079,33081,33084,33086,33089,33091,33094,33096],{"class":86,"line":33080},114,[84,33082,33083],{"class":477},"            train_loss",[84,33085,9806],{"class":473},[84,33087,33088],{"class":477},"loss.item()",[84,33090,928],{"class":473},[84,33092,33093],{"class":477},"b_x.size(",[84,33095,666],{"class":94},[84,33097,484],{"class":477},[84,33099,33101],{"class":86,"line":33100},115,[84,33102,33103],{"class":328},"            # 计算每个批次中正确预测的数量\n",[84,33105,33107,33110,33112,33115,33117],{"class":86,"line":33106},116,[84,33108,33109],{"class":477},"            train_corrects",[84,33111,9806],{"class":473},[84,33113,33114],{"class":477},"torch.sum(pre_lab",[84,33116,3278],{"class":473},[84,33118,33119],{"class":477},"b_y.data)\n",[84,33121,33123],{"class":86,"line":33122},117,[84,33124,33125],{"class":328},"            # 计算目前为止一共处理了多少样本\n",[84,33127,33129,33132,33134,33136,33138],{"class":86,"line":33128},118,[84,33130,33131],{"class":477},"            train_num",[84,33133,9806],{"class":473},[84,33135,33093],{"class":477},[84,33137,666],{"class":94},[84,33139,484],{"class":477},[84,33141,33143],{"class":86,"line":33142},119,[84,33144,33145],{"class":328},"        # 验证数据\n",[84,33147,33149,33151,33154,33156,33158],{"class":86,"line":33148},120,[84,33150,3732],{"class":473},[84,33152,33153],{"class":477}," step ,(b_x,b_y) ",[84,33155,26371],{"class":473},[84,33157,31933],{"class":94},[84,33159,33160],{"class":477},"(val_dataloader):\n",[84,33162,33164],{"class":86,"line":33163},121,[84,33165,33166],{"class":328},"            # 将特征放到验证设备当中\n",[84,33168,33170,33172,33174],{"class":86,"line":33169},122,[84,33171,32937],{"class":477},[84,33173,523],{"class":473},[84,33175,32942],{"class":477},[84,33177,33179],{"class":86,"line":33178},123,[84,33180,33181],{"class":328},"            # 将标签放到放到训练设备当中\n",[84,33183,33185,33187,33189],{"class":86,"line":33184},124,[84,33186,32952],{"class":477},[84,33188,523],{"class":473},[84,33190,32957],{"class":477},[84,33192,33194],{"class":86,"line":33193},125,[84,33195,33196],{"class":328},"            # 开启验证模式，设置模型为评估模式\n",[84,33198,33200],{"class":86,"line":33199},126,[84,33201,33202],{"class":477},"            model.eval()\n",[84,33204,33206,33209],{"class":86,"line":33205},127,[84,33207,33208],{"class":473},"            with",[84,33210,33211],{"class":477}," torch.no_grad():\n",[84,33213,33215],{"class":86,"line":33214},128,[84,33216,33217],{"class":328},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[84,33219,33221,33224,33226],{"class":86,"line":33220},129,[84,33222,33223],{"class":477},"                output ",[84,33225,523],{"class":473},[84,33227,33228],{"class":477}," model(b_x)\n",[84,33230,33232],{"class":86,"line":33231},130,[84,33233,33234],{"class":328},"                # 查找每一行中最大值对应的下标\n",[84,33236,33238,33241,33243,33246,33248,33250,33252],{"class":86,"line":33237},131,[84,33239,33240],{"class":477},"                pre_lab ",[84,33242,523],{"class":473},[84,33244,33245],{"class":477}," torch.argmax(output, ",[84,33247,33012],{"class":5545},[84,33249,523],{"class":473},[84,33251,692],{"class":94},[84,33253,484],{"class":477},[84,33255,33257],{"class":86,"line":33256},132,[84,33258,33259],{"class":328},"                # 计算验证集上的当前 batch 损失\n",[84,33261,33263,33266,33268],{"class":86,"line":33262},133,[84,33264,33265],{"class":477},"                val_batch_loss ",[84,33267,523],{"class":473},[84,33269,33270],{"class":477}," criterion(output, b_y)\n",[84,33272,33274],{"class":86,"line":33273},134,[84,33275,33276],{"class":328},"                # 对损失函数进行累加（按样本数加权）\n",[84,33278,33280,33283,33285,33288,33290,33293,33295],{"class":86,"line":33279},135,[84,33281,33282],{"class":477},"                val_loss ",[84,33284,9806],{"class":473},[84,33286,33287],{"class":477}," val_batch_loss.item() ",[84,33289,928],{"class":473},[84,33291,33292],{"class":477}," b_x.size(",[84,33294,666],{"class":94},[84,33296,484],{"class":477},[84,33298,33300,33303,33305,33308,33310],{"class":86,"line":33299},136,[84,33301,33302],{"class":477},"                val_corrects ",[84,33304,9806],{"class":473},[84,33306,33307],{"class":477}," torch.sum(pre_lab ",[84,33309,3278],{"class":473},[84,33311,33312],{"class":477}," b_y.data)\n",[84,33314,33316],{"class":86,"line":33315},137,[84,33317,33318],{"class":328},"                # 当前用于验证的样本数量\n",[84,33320,33322,33325,33327,33329,33331],{"class":86,"line":33321},138,[84,33323,33324],{"class":477},"            val_num ",[84,33326,9806],{"class":473},[84,33328,33292],{"class":477},[84,33330,666],{"class":94},[84,33332,484],{"class":477},[84,33334,33336],{"class":86,"line":33335},139,[84,33337,33338],{"class":328},"        # 计算并保存每一次迭代的loss值和准确率\n",[84,33340,33342],{"class":86,"line":33341},140,[84,33343,33344],{"class":328},"        # 计算并保存训练集的loss值\n",[84,33346,33348,33351,33353],{"class":86,"line":33347},141,[84,33349,33350],{"class":477},"        train_loss_all.append(train_loss",[84,33352,1057],{"class":473},[84,33354,33355],{"class":477},"train_num)\n",[84,33357,33359],{"class":86,"line":33358},142,[84,33360,33361],{"class":328},"        # 取双精度\n",[84,33363,33365],{"class":86,"line":33364},143,[84,33366,33367],{"class":328},"        # 计算并保存训练集的准确率\n",[84,33369,33371,33374,33376],{"class":86,"line":33370},144,[84,33372,33373],{"class":477},"        train_acc_all.append(train_corrects.double().item()",[84,33375,1057],{"class":473},[84,33377,33355],{"class":477},[84,33379,33381],{"class":86,"line":33380},145,[84,33382,33383],{"class":328},"        # 计算并保存验证集的loss值\n",[84,33385,33387,33390,33392],{"class":86,"line":33386},146,[84,33388,33389],{"class":477},"        val_loss_all.append(val_loss",[84,33391,1057],{"class":473},[84,33393,33394],{"class":477},"val_num)\n",[84,33396,33398],{"class":86,"line":33397},147,[84,33399,33400],{"class":328},"        # 计算并保存验证集的准确率\n",[84,33402,33404,33407,33409],{"class":86,"line":33403},148,[84,33405,33406],{"class":477},"        val_acc_all.append(val_corrects.double().item()",[84,33408,1057],{"class":473},[84,33410,33394],{"class":477},[84,33412,33414],{"class":86,"line":33413},149,[84,33415,2729],{"emptyLinePlaceholder":403},[84,33417,33419],{"class":86,"line":33418},150,[84,33420,33421],{"class":328},"        # 打印训练一轮的loss值和准确率\n",[84,33423,33425,33427,33429,33431,33433,33436,33438,33441,33443,33446,33448,33450,33452,33454,33457,33459,33461,33464,33466,33468],{"class":86,"line":33424},151,[84,33426,32778],{"class":94},[84,33428,478],{"class":477},[84,33430,3921],{"class":104},[84,33432,32786],{"class":94},[84,33434,33435],{"class":104},"train loss:",[84,33437,1369],{"class":94},[84,33439,33440],{"class":473},":.4f",[84,33442,1419],{"class":94},[84,33444,33445],{"class":104}," train acc:",[84,33447,1369],{"class":94},[84,33449,33440],{"class":473},[84,33451,1419],{"class":94},[84,33453,3921],{"class":104},[84,33455,33456],{"class":477},".format(epoch,train_loss_all[",[84,33458,1005],{"class":473},[84,33460,692],{"class":94},[84,33462,33463],{"class":477},"],train_acc_all[",[84,33465,1005],{"class":473},[84,33467,692],{"class":94},[84,33469,33470],{"class":477},"]))\n",[84,33472,33474,33476,33478,33480,33482,33485,33487,33489,33491,33494,33496,33498,33500,33502,33505,33507,33509,33512,33514,33516],{"class":86,"line":33473},152,[84,33475,32778],{"class":94},[84,33477,478],{"class":477},[84,33479,3921],{"class":104},[84,33481,32786],{"class":94},[84,33483,33484],{"class":104},"val loss:",[84,33486,1369],{"class":94},[84,33488,33440],{"class":473},[84,33490,1419],{"class":94},[84,33492,33493],{"class":104}," val acc:",[84,33495,1369],{"class":94},[84,33497,33440],{"class":473},[84,33499,1419],{"class":94},[84,33501,3921],{"class":104},[84,33503,33504],{"class":477},".format(epoch,val_loss_all[",[84,33506,1005],{"class":473},[84,33508,692],{"class":94},[84,33510,33511],{"class":477},"],val_acc_all[",[84,33513,1005],{"class":473},[84,33515,692],{"class":94},[84,33517,33470],{"class":477},[84,33519,33521],{"class":86,"line":33520},153,[84,33522,2729],{"emptyLinePlaceholder":403},[84,33524,33526],{"class":86,"line":33525},154,[84,33527,33528],{"class":328},"        # 判断准确度--->保存最优模型\n",[84,33530,33532,33534,33537,33539,33541,33543,33545],{"class":86,"line":33531},155,[84,33533,2826],{"class":473},[84,33535,33536],{"class":477}," val_acc_all[",[84,33538,1005],{"class":473},[84,33540,692],{"class":94},[84,33542,1413],{"class":477},[84,33544,1433],{"class":473},[84,33546,33547],{"class":477},"best_acc:\n",[84,33549,33551],{"class":86,"line":33550},156,[84,33552,33553],{"class":328},"            # 保存当前模型准确度\n",[84,33555,33557,33560,33562,33564,33567,33569,33571],{"class":86,"line":33556},157,[84,33558,33559],{"class":477},"            best_acc:",[84,33561,517],{"class":94},[84,33563,523],{"class":473},[84,33565,33566],{"class":477},"val_acc_all[",[84,33568,1005],{"class":473},[84,33570,692],{"class":94},[84,33572,33573],{"class":477},"]\n",[84,33575,33577],{"class":86,"line":33576},158,[84,33578,33579],{"class":328},"            # 保存当前的准确度\n",[84,33581,33583],{"class":86,"line":33582},159,[84,33584,33585],{"class":328},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[84,33587,33589,33592,33594],{"class":86,"line":33588},160,[84,33590,33591],{"class":477},"            best_model_wts",[84,33593,523],{"class":473},[84,33595,32641],{"class":477},[84,33597,33599],{"class":86,"line":33598},161,[84,33600,2729],{"emptyLinePlaceholder":403},[84,33602,33604],{"class":86,"line":33603},162,[84,33605,33606],{"class":328},"        # 计算耗时\n",[84,33608,33610,33613,33615,33618,33620],{"class":86,"line":33609},163,[84,33611,33612],{"class":477},"        time_use",[84,33614,523],{"class":473},[84,33616,33617],{"class":477},"time.time()",[84,33619,1005],{"class":473},[84,33621,33622],{"class":477},"since\n",[84,33624,33626,33628,33630,33633,33635,33638,33640,33642,33644,33646,33648,33651,33654,33657,33659,33662,33664,33666],{"class":86,"line":33625},164,[84,33627,32778],{"class":94},[84,33629,478],{"class":477},[84,33631,33632],{"class":104},"'训练和验证耗费的时间",[84,33634,1369],{"class":94},[84,33636,33637],{"class":473},":.0f",[84,33639,1419],{"class":94},[84,33641,1017],{"class":104},[84,33643,1369],{"class":94},[84,33645,33637],{"class":473},[84,33647,1419],{"class":94},[84,33649,33650],{"class":104},"s'",[84,33652,33653],{"class":477},".format(time_use",[84,33655,33656],{"class":473},"\u002F\u002F",[84,33658,1380],{"class":94},[84,33660,33661],{"class":477},",time_use",[84,33663,801],{"class":473},[84,33665,1380],{"class":94},[84,33667,30824],{"class":477},[84,33669,33671],{"class":86,"line":33670},165,[84,33672,33673],{"class":328},"    # 选择最优参数\n",[84,33675,33677],{"class":86,"line":33676},166,[84,33678,33679],{"class":328},"    # 加载最高准确率下的模型参数\n",[84,33681,33683],{"class":86,"line":33682},167,[84,33684,33685],{"class":328},"    # model.load_state_dict(best_model_wts)\n",[84,33687,33689,33692,33695],{"class":86,"line":33688},168,[84,33690,33691],{"class":477},"    torch.save(model.state_dict(best_model_wts), ",[84,33693,33694],{"class":104},"'.\u002Fbest_model.pth'",[84,33696,484],{"class":477},[84,33698,33700],{"class":86,"line":33699},169,[84,33701,33702],{"class":328},"    # 或者写成\n",[84,33704,33706],{"class":86,"line":33705},170,[84,33707,33708],{"class":328},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[84,33710,33712],{"class":86,"line":33711},171,[84,33713,33714],{"class":328},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[84,33716,33718,33721,33723,33726,33729,33731],{"class":86,"line":33717},172,[84,33719,33720],{"class":477},"    train_process",[84,33722,523],{"class":473},[84,33724,33725],{"class":477},"pd.DataFrame(",[84,33727,33728],{"class":5545},"data",[84,33730,523],{"class":473},[84,33732,1886],{"class":477},[84,33734,33736,33739,33741,33744],{"class":86,"line":33735},173,[84,33737,33738],{"class":104},"        \"epoch\"",[84,33740,1332],{"class":477},[84,33742,33743],{"class":94},"range",[84,33745,33746],{"class":477},"(num_epochs),\n",[84,33748,33750,33753],{"class":86,"line":33749},174,[84,33751,33752],{"class":104},"        \"train_loss_all\"",[84,33754,33755],{"class":477},":train_loss_all,\n",[84,33757,33759,33762],{"class":86,"line":33758},175,[84,33760,33761],{"class":104},"        \"val_loss_all\"",[84,33763,33764],{"class":477},":val_loss_all,\n",[84,33766,33768,33771],{"class":86,"line":33767},176,[84,33769,33770],{"class":104},"        \"train_acc_all\"",[84,33772,33773],{"class":477},":train_acc_all,\n",[84,33775,33777,33780],{"class":86,"line":33776},177,[84,33778,33779],{"class":104},"        \"val_acc_all\"",[84,33781,33782],{"class":477},":val_acc_all\n",[84,33784,33786],{"class":86,"line":33785},178,[84,33787,33788],{"class":477},"    })\n",[84,33790,33792],{"class":86,"line":33791},179,[84,33793,33794],{"class":328},"    # 返回训练保存的过程\n",[84,33796,33798,33800],{"class":86,"line":33797},180,[84,33799,4419],{"class":473},[84,33801,33802],{"class":477}," train_process\n",[84,33804,33806],{"class":86,"line":33805},181,[84,33807,2729],{"emptyLinePlaceholder":403},[84,33809,33811],{"class":86,"line":33810},182,[84,33812,33813],{"class":328},"# 将loss值和精度按照图片的形式展示出来\n",[84,33815,33817,33819,33822],{"class":86,"line":33816},183,[84,33818,32274],{"class":473},[84,33820,33821],{"class":90}," matplot_acc_loss",[84,33823,33824],{"class":477},"(train_process):\n",[84,33826,33828],{"class":86,"line":33827},184,[84,33829,33830],{"class":328},"    # 设置图的大小\n",[84,33832,33834,33837,33839,33841,33843,33845,33847,33849],{"class":86,"line":33833},185,[84,33835,33836],{"class":477},"    plt.figure(",[84,33838,32020],{"class":5545},[84,33840,523],{"class":473},[84,33842,478],{"class":477},[84,33844,971],{"class":94},[84,33846,851],{"class":477},[84,33848,140],{"class":94},[84,33850,30824],{"class":477},[84,33852,33854],{"class":86,"line":33853},186,[84,33855,33856],{"class":328},"    # 设置图中有几张图\n",[84,33858,33860],{"class":86,"line":33859},187,[84,33861,33862],{"class":328},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[84,33864,33866],{"class":86,"line":33865},188,[84,33867,33868],{"class":328},"    # ①loss图\n",[84,33870,33872,33874,33876,33878,33880,33882,33884],{"class":86,"line":33871},189,[84,33873,32054],{"class":477},[84,33875,692],{"class":94},[84,33877,851],{"class":477},[84,33879,553],{"class":94},[84,33881,851],{"class":477},[84,33883,692],{"class":94},[84,33885,484],{"class":477},[84,33887,33889],{"class":86,"line":33888},190,[84,33890,33891],{"class":328},"    # 补充:\n",[84,33893,33895],{"class":86,"line":33894},191,[84,33896,33897],{"class":328},"    # plt.subplot(nrows, ncols, index)\n",[84,33899,33901],{"class":86,"line":33900},192,[84,33902,33903],{"class":328},"    # nrows：行数\n",[84,33905,33907],{"class":86,"line":33906},193,[84,33908,33909],{"class":328},"    # ncols：列数\n",[84,33911,33913],{"class":86,"line":33912},194,[84,33914,33915],{"class":328},"    # index：目前选中第几个子图（从1开始）\n",[84,33917,33919,33922,33925,33928,33931,33933,33936,33938,33941],{"class":86,"line":33918},195,[84,33920,33921],{"class":477},"    plt.plot(train_process[",[84,33923,33924],{"class":104},"\"epoch\"",[84,33926,33927],{"class":477},"],train_process.train_loss_all,",[84,33929,33930],{"class":104},"'ro-'",[84,33932,851],{"class":477},[84,33934,33935],{"class":5545},"label",[84,33937,523],{"class":473},[84,33939,33940],{"class":104},"'train loss'",[84,33942,484],{"class":477},[84,33944,33946,33948,33950,33953,33956,33958,33960,33962,33965],{"class":86,"line":33945},196,[84,33947,33921],{"class":477},[84,33949,33924],{"class":104},[84,33951,33952],{"class":477},"],train_process.val_loss_all,",[84,33954,33955],{"class":104},"'bs--'",[84,33957,851],{"class":477},[84,33959,33935],{"class":5545},[84,33961,523],{"class":473},[84,33963,33964],{"class":104},"'val loss'",[84,33966,484],{"class":477},[84,33968,33970],{"class":86,"line":33969},197,[84,33971,33972],{"class":328},"    # 添加一个图例\n",[84,33974,33976],{"class":86,"line":33975},198,[84,33977,33978],{"class":477},"    plt.legend()\n",[84,33980,33982],{"class":86,"line":33981},199,[84,33983,33984],{"class":328},"    # 给轴添加标签\n",[84,33986,33988,33991,33994],{"class":86,"line":33987},200,[84,33989,33990],{"class":477},"    plt.xlabel(",[84,33992,33993],{"class":104},"'epoch'",[84,33995,484],{"class":477},[84,33997,33999,34002,34005],{"class":86,"line":33998},201,[84,34000,34001],{"class":477},"    plt.ylabel(",[84,34003,34004],{"class":104},"'loss'",[84,34006,484],{"class":477},[84,34008,34010],{"class":86,"line":34009},202,[84,34011,34012],{"class":328},"    # ②准确度图\n",[84,34014,34016,34018,34020,34022,34024,34026,34028],{"class":86,"line":34015},203,[84,34017,32054],{"class":477},[84,34019,692],{"class":94},[84,34021,851],{"class":477},[84,34023,553],{"class":94},[84,34025,851],{"class":477},[84,34027,553],{"class":94},[84,34029,484],{"class":477},[84,34031,34033,34035,34037,34040,34042,34044,34046,34048,34051],{"class":86,"line":34032},204,[84,34034,33921],{"class":477},[84,34036,33924],{"class":104},[84,34038,34039],{"class":477},"],train_process.train_acc_all,",[84,34041,33930],{"class":104},[84,34043,851],{"class":477},[84,34045,33935],{"class":5545},[84,34047,523],{"class":473},[84,34049,34050],{"class":104},"'train acc'",[84,34052,484],{"class":477},[84,34054,34056,34058,34060,34063,34065,34067,34069,34071,34074],{"class":86,"line":34055},205,[84,34057,33921],{"class":477},[84,34059,33924],{"class":104},[84,34061,34062],{"class":477},"],train_process.val_acc_all,",[84,34064,33955],{"class":104},[84,34066,851],{"class":477},[84,34068,33935],{"class":5545},[84,34070,523],{"class":473},[84,34072,34073],{"class":104},"'val acc'",[84,34075,484],{"class":477},[84,34077,34079],{"class":86,"line":34078},206,[84,34080,34081],{"class":328},"    # 添加图例\n",[84,34083,34085],{"class":86,"line":34084},207,[84,34086,33978],{"class":477},[84,34088,34090,34092,34094],{"class":86,"line":34089},208,[84,34091,33990],{"class":477},[84,34093,33924],{"class":104},[84,34095,484],{"class":477},[84,34097,34099,34101,34104],{"class":86,"line":34098},209,[84,34100,34001],{"class":477},[84,34102,34103],{"class":104},"\"acc\"",[84,34105,484],{"class":477},[84,34107,34109],{"class":86,"line":34108},210,[84,34110,34111],{"class":477},"    plt.show()\n",[84,34113,34115],{"class":86,"line":34114},211,[84,34116,2729],{"emptyLinePlaceholder":403},[84,34118,34120],{"class":86,"line":34119},212,[84,34121,34122],{"class":328},"# 正式开始训练:\n",[84,34124,34126,34128,34130,34132,34134],{"class":86,"line":34125},213,[84,34127,1871],{"class":473},[84,34129,31547],{"class":94},[84,34131,3278],{"class":473},[84,34133,31552],{"class":104},[84,34135,4068],{"class":477},[84,34137,34139],{"class":86,"line":34138},214,[84,34140,34141],{"class":328},"    # 将模型实例化\n",[84,34143,34145,34148,34150],{"class":86,"line":34144},215,[84,34146,34147],{"class":477},"    LeNet",[84,34149,523],{"class":473},[84,34151,34152],{"class":477},"LeNet()\n",[84,34154,34156,34159,34161],{"class":86,"line":34155},216,[84,34157,34158],{"class":477},"    train_dataloader,val_dataloader",[84,34160,523],{"class":473},[84,34162,34163],{"class":477},"train_val_data_process()\n",[84,34165,34167,34169,34171,34174,34177,34179,34181],{"class":86,"line":34166},217,[84,34168,33720],{"class":477},[84,34170,523],{"class":473},[84,34172,34173],{"class":477},"train_model_process(LeNet,train_dataloader,val_dataloader,",[84,34175,34176],{"class":5545},"num_epochs",[84,34178,523],{"class":473},[84,34180,1173],{"class":94},[84,34182,484],{"class":477},[84,34184,34186],{"class":86,"line":34185},218,[84,34187,34188],{"class":477},"    matplot_acc_loss(train_process)\n",[35,34190,34191],{},"画图的补充点学习：",[35,34193,34194],{},[64,34195],{"alt":66,"src":34196},"\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",[28,34198,34199],{"start":70},[31,34200,34201],{},"测试",[75,34203,34205],{"className":30705,"code":34204,"language":30707,"meta":66,"style":66},"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",[81,34206,34207,34213,34223,34235,34245,34250,34260,34270,34274,34279,34288,34305,34317,34334,34345,34361,34366,34377,34388,34399,34406,34410,34415,34425,34430,34447,34455,34459,34464,34473,34482,34486,34491,34496,34501,34508,34513,34525,34535,34545,34550,34554,34559,34568,34573,34589,34594,34599,34604,34618,34623,34637,34641,34646,34661,34666,34678,34682,34687,34699,34704,34712,34717,34722,34732,34737,34746,34751,34756,34760,34765,34770,34786,34794,34799,34804,34863,34869,34874,34885,34893,34901,34905,34910,34914,34919,34927,34932,34948,34953,34963,34973],{"__ignoreMap":66},[84,34208,34209,34211],{"class":86,"line":87},[84,34210,30719],{"class":473},[84,34212,30722],{"class":477},[84,34214,34215,34217,34219,34221],{"class":86,"line":98},[84,34216,30719],{"class":473},[84,34218,31742],{"class":477},[84,34220,31710],{"class":473},[84,34222,31747],{"class":477},[84,34224,34225,34227,34230,34232],{"class":86,"line":70},[84,34226,31064],{"class":473},[84,34228,34229],{"class":477}," jupyter_client.consoleapp ",[84,34231,30719],{"class":473},[84,34233,34234],{"class":477}," classes\n",[84,34236,34237,34239,34241,34243],{"class":86,"line":120},[84,34238,31064],{"class":473},[84,34240,31725],{"class":477},[84,34242,30719],{"class":473},[84,34244,31730],{"class":477},[84,34246,34247],{"class":86,"line":131},[84,34248,34249],{"class":328},"# 导入数据集\n",[84,34251,34252,34254,34256,34258],{"class":86,"line":145},[84,34253,31064],{"class":473},[84,34255,31695],{"class":477},[84,34257,30719],{"class":473},[84,34259,31700],{"class":477},[84,34261,34262,34264,34266,34268],{"class":86,"line":156},[84,34263,31064],{"class":473},[84,34265,32241],{"class":477},[84,34267,30719],{"class":473},[84,34269,32246],{"class":477},[84,34271,34272],{"class":86,"line":164},[84,34273,2729],{"emptyLinePlaceholder":403},[84,34275,34276],{"class":86,"line":175},[84,34277,34278],{"class":328},"# 测试数据处理\n",[84,34280,34281,34283,34286],{"class":86,"line":185},[84,34282,32274],{"class":473},[84,34284,34285],{"class":90}," test_data_process",[84,34287,32280],{"class":477},[84,34289,34290,34293,34295,34297,34299,34301,34303],{"class":86,"line":195},[84,34291,34292],{"class":477},"    test_data",[84,34294,523],{"class":473},[84,34296,31782],{"class":477},[84,34298,31785],{"class":5545},[84,34300,523],{"class":473},[84,34302,31790],{"class":104},[84,34304,31793],{"class":477},[84,34306,34307,34310,34312,34315],{"class":86,"line":206},[84,34308,34309],{"class":5545},"                           train",[84,34311,523],{"class":473},[84,34313,34314],{"class":94},"False",[84,34316,31793],{"class":477},[84,34318,34319,34322,34324,34326,34328,34330,34332],{"class":86,"line":217},[84,34320,34321],{"class":5545},"                           transform",[84,34323,523],{"class":473},[84,34325,31820],{"class":477},[84,34327,31823],{"class":5545},[84,34329,523],{"class":473},[84,34331,1374],{"class":94},[84,34333,31831],{"class":477},[84,34335,34336,34339,34341,34343],{"class":86,"line":227},[84,34337,34338],{"class":5545},"                           download",[84,34340,523],{"class":473},[84,34342,31803],{"class":94},[84,34344,484],{"class":477},[84,34346,34347,34350,34352,34354,34356,34358],{"class":86,"line":238},[84,34348,34349],{"class":477},"    test_dataloader",[84,34351,523],{"class":473},[84,34353,31861],{"class":477},[84,34355,31864],{"class":5545},[84,34357,523],{"class":473},[84,34359,34360],{"class":477},"test_data,\n",[84,34362,34363],{"class":86,"line":249},[84,34364,34365],{"class":328},"                                    # 这里是一张一张进行测试\n",[84,34367,34368,34371,34373,34375],{"class":86,"line":262},[84,34369,34370],{"class":5545},"                                    batch_size",[84,34372,523],{"class":473},[84,34374,692],{"class":94},[84,34376,31793],{"class":477},[84,34378,34379,34382,34384,34386],{"class":86,"line":273},[84,34380,34381],{"class":5545},"                                    shuffle",[84,34383,523],{"class":473},[84,34385,31803],{"class":94},[84,34387,31793],{"class":477},[84,34389,34390,34393,34395,34397],{"class":86,"line":283},[84,34391,34392],{"class":5545},"                                    num_workers",[84,34394,523],{"class":473},[84,34396,666],{"class":94},[84,34398,484],{"class":477},[84,34400,34401,34403],{"class":86,"line":294},[84,34402,4419],{"class":473},[84,34404,34405],{"class":477}," test_dataloader\n",[84,34407,34408],{"class":86,"line":2028},[84,34409,2729],{"emptyLinePlaceholder":403},[84,34411,34412],{"class":86,"line":2057},[84,34413,34414],{"class":328},"# 定义模型测试函数\n",[84,34416,34417,34419,34422],{"class":86,"line":2062},[84,34418,32274],{"class":473},[84,34420,34421],{"class":90}," test_model_process",[84,34423,34424],{"class":477},"(model,test_dataloader):\n",[84,34426,34427],{"class":86,"line":2079},[84,34428,34429],{"class":328},"    # 将模型放到设备当中，先进行判断\n",[84,34431,34432,34434,34436,34438,34440,34442,34444],{"class":86,"line":2084},[84,34433,31564],{"class":477},[84,34435,523],{"class":473},[84,34437,31571],{"class":104},[84,34439,2034],{"class":473},[84,34441,31576],{"class":477},[84,34443,2031],{"class":473},[84,34445,34446],{"class":104}," \"cpu\"\n",[84,34448,34449,34451,34453],{"class":86,"line":2089},[84,34450,31616],{"class":477},[84,34452,523],{"class":473},[84,34454,32616],{"class":477},[84,34456,34457],{"class":86,"line":2094},[84,34458,2729],{"emptyLinePlaceholder":403},[84,34460,34461],{"class":86,"line":2108},[84,34462,34463],{"class":328},"    # 设置初始化参数\n",[84,34465,34466,34469,34471],{"class":86,"line":2113},[84,34467,34468],{"class":477},"    test_corrects",[84,34470,523],{"class":473},[84,34472,32669],{"class":94},[84,34474,34475,34478,34480],{"class":86,"line":2906},[84,34476,34477],{"class":477},"    test_num",[84,34479,523],{"class":473},[84,34481,3414],{"class":94},[84,34483,34484],{"class":86,"line":2920},[84,34485,2729],{"emptyLinePlaceholder":403},[84,34487,34488],{"class":86,"line":2928},[84,34489,34490],{"class":328},"    # 进行模型测试\n",[84,34492,34493],{"class":86,"line":2933},[84,34494,34495],{"class":328},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[84,34497,34498],{"class":86,"line":2939},[84,34499,34500],{"class":328},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[84,34502,34503,34506],{"class":86,"line":2945},[84,34504,34505],{"class":473},"    with",[84,34507,33211],{"class":477},[84,34509,34510],{"class":86,"line":2950},[84,34511,34512],{"class":328},"        # 从数据中进行\n",[84,34514,34515,34517,34520,34522],{"class":86,"line":8277},[84,34516,3732],{"class":473},[84,34518,34519],{"class":477}," test_data_x,test_data_y ",[84,34521,26371],{"class":473},[84,34523,34524],{"class":477}," test_dataloader:\n",[84,34526,34527,34530,34532],{"class":86,"line":8301},[84,34528,34529],{"class":477},"            test_data_x",[84,34531,523],{"class":473},[84,34533,34534],{"class":477},"test_data_x.to(device)\n",[84,34536,34537,34540,34542],{"class":86,"line":8306},[84,34538,34539],{"class":477},"            test_data_y",[84,34541,523],{"class":473},[84,34543,34544],{"class":477},"test_data_y.to(device)\n",[84,34546,34547],{"class":86,"line":8312},[84,34548,34549],{"class":328},"            # 设置为验证模式\n",[84,34551,34552],{"class":86,"line":8339},[84,34553,33202],{"class":477},[84,34555,34556],{"class":86,"line":8344},[84,34557,34558],{"class":328},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[84,34560,34561,34563,34565],{"class":86,"line":8350},[84,34562,32987],{"class":477},[84,34564,523],{"class":473},[84,34566,34567],{"class":477},"model(test_data_x)\n",[84,34569,34570],{"class":86,"line":8362},[84,34571,34572],{"class":328},"            # 查找每一行中最大值对应的下标\n",[84,34574,34575,34577,34579,34581,34583,34585,34587],{"class":86,"line":8374},[84,34576,33004],{"class":477},[84,34578,523],{"class":473},[84,34580,33009],{"class":477},[84,34582,33012],{"class":5545},[84,34584,523],{"class":473},[84,34586,692],{"class":94},[84,34588,484],{"class":477},[84,34590,34591],{"class":86,"line":8386},[84,34592,34593],{"class":328},"            # 计算正确率\n",[84,34595,34596],{"class":86,"line":10045},[84,34597,34598],{"class":328},"            # .data表示是一个不带梯度信息的tensor\n",[84,34600,34601],{"class":86,"line":10070},[84,34602,34603],{"class":328},"            # 如果预测正确，则准确度test_corrects加1\n",[84,34605,34606,34609,34611,34613,34615],{"class":86,"line":10093},[84,34607,34608],{"class":477},"            test_corrects",[84,34610,9806],{"class":473},[84,34612,33114],{"class":477},[84,34614,3278],{"class":473},[84,34616,34617],{"class":477},"test_data_y.data)\n",[84,34619,34620],{"class":86,"line":10117},[84,34621,34622],{"class":328},"            # 将所有的测试样本进行累计\n",[84,34624,34625,34628,34630,34633,34635],{"class":86,"line":10122},[84,34626,34627],{"class":477},"            test_num",[84,34629,9806],{"class":473},[84,34631,34632],{"class":477},"test_data_x.size(",[84,34634,666],{"class":94},[84,34636,484],{"class":477},[84,34638,34639],{"class":86,"line":10127},[84,34640,2729],{"emptyLinePlaceholder":403},[84,34642,34643],{"class":86,"line":10132},[84,34644,34645],{"class":328},"        # 计算准确度\n",[84,34647,34648,34651,34653,34656,34658],{"class":86,"line":10141},[84,34649,34650],{"class":477},"        test_acc",[84,34652,523],{"class":473},[84,34654,34655],{"class":477},"test_corrects.double().item()",[84,34657,1057],{"class":473},[84,34659,34660],{"class":477},"test_num\n",[84,34662,34663],{"class":86,"line":10146},[84,34664,34665],{"class":328},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[84,34667,34668,34670,34672,34675],{"class":86,"line":10152},[84,34669,32778],{"class":94},[84,34671,478],{"class":477},[84,34673,34674],{"class":104},"\"测试的准确率：\"",[84,34676,34677],{"class":477},",test_acc)\n",[84,34679,34680],{"class":86,"line":10173},[84,34681,2729],{"emptyLinePlaceholder":403},[84,34683,34684],{"class":86,"line":10179},[84,34685,34686],{"class":328},"# 实现模型的测试功能\n",[84,34688,34689,34691,34693,34695,34697],{"class":86,"line":10193},[84,34690,1871],{"class":473},[84,34692,31547],{"class":94},[84,34694,3278],{"class":473},[84,34696,31552],{"class":104},[84,34698,4068],{"class":477},[84,34700,34701],{"class":86,"line":10199},[84,34702,34703],{"class":328},"    # 加载模型\n",[84,34705,34706,34708,34710],{"class":86,"line":10226},[84,34707,31616],{"class":477},[84,34709,523],{"class":473},[84,34711,34152],{"class":477},[84,34713,34714],{"class":86,"line":10235},[84,34715,34716],{"class":328},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[84,34718,34719],{"class":86,"line":10241},[84,34720,34721],{"class":328},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[84,34723,34724,34727,34730],{"class":86,"line":10249},[84,34725,34726],{"class":477},"    model.load_state_dict(torch.load(",[84,34728,34729],{"class":104},"'best_model.pth'",[84,34731,30824],{"class":477},[84,34733,34734],{"class":86,"line":10254},[84,34735,34736],{"class":328},"    # 数据加载\n",[84,34738,34739,34741,34743],{"class":86,"line":16933},[84,34740,34349],{"class":477},[84,34742,523],{"class":473},[84,34744,34745],{"class":477},"test_data_process()\n",[84,34747,34748],{"class":86,"line":16939},[84,34749,34750],{"class":328},"    # 加载模型测试的函数\n",[84,34752,34753],{"class":86,"line":16962},[84,34754,34755],{"class":477},"    test_model_process(model,test_dataloader)\n",[84,34757,34758],{"class":86,"line":16968},[84,34759,2729],{"emptyLinePlaceholder":403},[84,34761,34762],{"class":86,"line":16991},[84,34763,34764],{"class":328},"    # 验证集推理实现：\n",[84,34766,34767],{"class":86,"line":17005},[84,34768,34769],{"class":328},"    # 加载数据加载的更详细一些\n",[84,34771,34772,34774,34776,34778,34780,34782,34784],{"class":86,"line":17025},[84,34773,31564],{"class":477},[84,34775,523],{"class":473},[84,34777,31571],{"class":104},[84,34779,2034],{"class":473},[84,34781,31576],{"class":477},[84,34783,2031],{"class":473},[84,34785,34446],{"class":104},[84,34787,34788,34790,34792],{"class":86,"line":17031},[84,34789,31616],{"class":477},[84,34791,523],{"class":473},[84,34793,32616],{"class":477},[84,34795,34796],{"class":86,"line":17042},[84,34797,34798],{"class":328},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[84,34800,34801],{"class":86,"line":17065},[84,34802,34803],{"class":328},"    # 顺序不可改变\n",[84,34805,34806,34809,34811,34813,34816,34818,34821,34823,34826,34828,34831,34833,34836,34838,34841,34843,34846,34848,34851,34853,34856,34858,34861],{"class":86,"line":17087},[84,34807,34808],{"class":477},"    classes",[84,34810,523],{"class":473},[84,34812,1363],{"class":477},[84,34814,34815],{"class":104},"'T-shirt\u002Ftop'",[84,34817,851],{"class":477},[84,34819,34820],{"class":104},"'Trouser'",[84,34822,851],{"class":477},[84,34824,34825],{"class":104},"'Pullover'",[84,34827,851],{"class":477},[84,34829,34830],{"class":104},"'Dress'",[84,34832,851],{"class":477},[84,34834,34835],{"class":104},"'Coat'",[84,34837,851],{"class":477},[84,34839,34840],{"class":104},"'Sandal'",[84,34842,851],{"class":477},[84,34844,34845],{"class":104},"'Shirt'",[84,34847,851],{"class":477},[84,34849,34850],{"class":104},"'Sneaker'",[84,34852,851],{"class":477},[84,34854,34855],{"class":104},"'Bag'",[84,34857,851],{"class":477},[84,34859,34860],{"class":104},"'Ankle boot'",[84,34862,33573],{"class":477},[84,34864,34865,34867],{"class":86,"line":17092},[84,34866,34505],{"class":473},[84,34868,33211],{"class":477},[84,34870,34871],{"class":86,"line":17098},[84,34872,34873],{"class":328},"        # 将数据和标签都放到设备当中\n",[84,34875,34876,34878,34881,34883],{"class":86,"line":17112},[84,34877,3732],{"class":473},[84,34879,34880],{"class":477}," b_x,b_y ",[84,34882,26371],{"class":473},[84,34884,34524],{"class":477},[84,34886,34887,34889,34891],{"class":86,"line":17125},[84,34888,32937],{"class":477},[84,34890,523],{"class":473},[84,34892,32942],{"class":477},[84,34894,34895,34897,34899],{"class":86,"line":17130},[84,34896,32952],{"class":477},[84,34898,523],{"class":473},[84,34900,32957],{"class":477},[84,34902,34903],{"class":86,"line":17144},[84,34904,2729],{"emptyLinePlaceholder":403},[84,34906,34907],{"class":86,"line":17149},[84,34908,34909],{"class":328},"            # 设置模型为验证模式\n",[84,34911,34912],{"class":86,"line":17155},[84,34913,33202],{"class":477},[84,34915,34916],{"class":86,"line":17160},[84,34917,34918],{"class":328},"            # 模型推理结果\n",[84,34920,34921,34923,34925],{"class":86,"line":17174},[84,34922,32987],{"class":477},[84,34924,523],{"class":473},[84,34926,32992],{"class":477},[84,34928,34929],{"class":86,"line":17179},[84,34930,34931],{"class":328},"            # 获取最大下标，最大下标就是类别号\n",[84,34933,34934,34936,34938,34940,34942,34944,34946],{"class":86,"line":17184},[84,34935,33004],{"class":477},[84,34937,523],{"class":473},[84,34939,33009],{"class":477},[84,34941,33012],{"class":5545},[84,34943,523],{"class":473},[84,34945,692],{"class":94},[84,34947,484],{"class":477},[84,34949,34950],{"class":86,"line":17198},[84,34951,34952],{"class":328},"            # 取出张量中的数值\n",[84,34954,34955,34958,34960],{"class":86,"line":17210},[84,34956,34957],{"class":477},"            result",[84,34959,523],{"class":473},[84,34961,34962],{"class":477},"pre_lab.item()\n",[84,34964,34965,34968,34970],{"class":86,"line":17215},[84,34966,34967],{"class":477},"            label",[84,34969,523],{"class":473},[84,34971,34972],{"class":477},"b_y.item()\n",[84,34974,34975,34978,34980,34983,34986,34989,34991,34994],{"class":86,"line":17228},[84,34976,34977],{"class":94},"            print",[84,34979,478],{"class":477},[84,34981,34982],{"class":104},"\"预测值：\"",[84,34984,34985],{"class":477},",classes[result],",[84,34987,34988],{"class":104},"\"------\"",[84,34990,851],{"class":477},[84,34992,34993],{"class":104},"\"真实值：\"",[84,34995,34996],{"class":477},",classes[label])\n",[35,34998,34999],{},"（2）AlexNet",[28,35001,35002],{},[31,35003,35004],{},"神经网络构建",[75,35006,35008],{"className":30705,"code":35007,"language":30707,"meta":66,"style":66},"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",[81,35009,35010,35016,35026,35036,35048,35052,35069,35077,35092,35104,35146,35173,35216,35242,35286,35329,35372,35399,35403,35413,35418,35446,35465,35484,35488,35493,35501,35516,35526,35540,35550,35565,35580,35595,35606,35610,35615,35625,35640,35645,35659,35674,35686,35691,35702,35707,35713,35718,35730,35750,35755,35764],{"__ignoreMap":66},[84,35011,35012,35014],{"class":86,"line":87},[84,35013,30719],{"class":473},[84,35015,30722],{"class":477},[84,35017,35018,35020,35022,35024],{"class":86,"line":98},[84,35019,31064],{"class":473},[84,35021,31067],{"class":477},[84,35023,30719],{"class":473},[84,35025,31072],{"class":477},[84,35027,35028,35030,35032,35034],{"class":86,"line":70},[84,35029,31064],{"class":473},[84,35031,31084],{"class":477},[84,35033,30719],{"class":473},[84,35035,31089],{"class":477},[84,35037,35038,35040,35043,35045],{"class":86,"line":120},[84,35039,30719],{"class":473},[84,35041,35042],{"class":477}," torch.nn.functional ",[84,35044,31710],{"class":473},[84,35046,35047],{"class":477}," F\n",[84,35049,35050],{"class":86,"line":131},[84,35051,2729],{"emptyLinePlaceholder":403},[84,35053,35054,35056,35059,35061,35063,35065,35067],{"class":86,"line":145},[84,35055,15023],{"class":473},[84,35057,35058],{"class":90}," AlexNet",[84,35060,478],{"class":477},[84,35062,31105],{"class":90},[84,35064,1031],{"class":477},[84,35066,31110],{"class":90},[84,35068,31113],{"class":477},[84,35070,35071,35073,35075],{"class":86,"line":156},[84,35072,31128],{"class":473},[84,35074,31131],{"class":94},[84,35076,31134],{"class":477},[84,35078,35079,35081,35084,35086,35088,35090],{"class":86,"line":164},[84,35080,31144],{"class":94},[84,35082,35083],{"class":477},"(AlexNet,",[84,35085,31150],{"class":94},[84,35087,31153],{"class":477},[84,35089,31156],{"class":94},[84,35091,2305],{"class":477},[84,35093,35094,35096,35099,35101],{"class":86,"line":175},[84,35095,31172],{"class":94},[84,35097,35098],{"class":477},".ReLu",[84,35100,523],{"class":473},[84,35102,35103],{"class":477},"nn.ReLU()\n",[84,35105,35106,35108,35110,35112,35114,35116,35118,35120,35122,35124,35126,35128,35130,35132,35134,35136,35138,35140,35142,35144],{"class":86,"line":185},[84,35107,31172],{"class":94},[84,35109,31175],{"class":477},[84,35111,523],{"class":473},[84,35113,31180],{"class":477},[84,35115,31183],{"class":5545},[84,35117,523],{"class":473},[84,35119,692],{"class":94},[84,35121,851],{"class":477},[84,35123,31192],{"class":5545},[84,35125,523],{"class":473},[84,35127,684],{"class":94},[84,35129,851],{"class":477},[84,35131,31201],{"class":5545},[84,35133,523],{"class":473},[84,35135,945],{"class":94},[84,35137,851],{"class":477},[84,35139,31256],{"class":5545},[84,35141,523],{"class":473},[84,35143,140],{"class":94},[84,35145,484],{"class":477},[84,35147,35148,35150,35152,35154,35157,35159,35161,35163,35165,35167,35169,35171],{"class":86,"line":195},[84,35149,31172],{"class":94},[84,35151,31240],{"class":477},[84,35153,523],{"class":473},[84,35155,35156],{"class":477},"nn.MaxPool2d(",[84,35158,31201],{"class":5545},[84,35160,523],{"class":473},[84,35162,547],{"class":94},[84,35164,851],{"class":477},[84,35166,31256],{"class":5545},[84,35168,523],{"class":473},[84,35170,553],{"class":94},[84,35172,484],{"class":477},[84,35174,35175,35177,35179,35181,35183,35185,35187,35189,35191,35193,35195,35198,35200,35202,35204,35206,35208,35210,35212,35214],{"class":86,"line":206},[84,35176,31172],{"class":94},[84,35178,31269],{"class":477},[84,35180,523],{"class":473},[84,35182,31180],{"class":477},[84,35184,31183],{"class":5545},[84,35186,523],{"class":473},[84,35188,684],{"class":94},[84,35190,851],{"class":477},[84,35192,31192],{"class":5545},[84,35194,523],{"class":473},[84,35196,35197],{"class":94},"256",[84,35199,851],{"class":477},[84,35201,31201],{"class":5545},[84,35203,523],{"class":473},[84,35205,792],{"class":94},[84,35207,851],{"class":477},[84,35209,31210],{"class":5545},[84,35211,523],{"class":473},[84,35213,553],{"class":94},[84,35215,484],{"class":477},[84,35217,35218,35220,35222,35224,35226,35228,35230,35232,35234,35236,35238,35240],{"class":86,"line":217},[84,35219,31172],{"class":94},[84,35221,31304],{"class":477},[84,35223,523],{"class":473},[84,35225,35156],{"class":477},[84,35227,31201],{"class":5545},[84,35229,523],{"class":473},[84,35231,547],{"class":94},[84,35233,851],{"class":477},[84,35235,31256],{"class":5545},[84,35237,523],{"class":473},[84,35239,553],{"class":94},[84,35241,484],{"class":477},[84,35243,35244,35246,35249,35251,35253,35255,35257,35259,35261,35263,35265,35268,35270,35272,35274,35276,35278,35280,35282,35284],{"class":86,"line":227},[84,35245,31172],{"class":94},[84,35247,35248],{"class":477},".c5",[84,35250,523],{"class":473},[84,35252,31180],{"class":477},[84,35254,31183],{"class":5545},[84,35256,523],{"class":473},[84,35258,35197],{"class":94},[84,35260,851],{"class":477},[84,35262,31192],{"class":5545},[84,35264,523],{"class":473},[84,35266,35267],{"class":94},"384",[84,35269,851],{"class":477},[84,35271,31201],{"class":5545},[84,35273,523],{"class":473},[84,35275,547],{"class":94},[84,35277,851],{"class":477},[84,35279,31210],{"class":5545},[84,35281,523],{"class":473},[84,35283,692],{"class":94},[84,35285,484],{"class":477},[84,35287,35288,35290,35293,35295,35297,35299,35301,35303,35305,35307,35309,35311,35313,35315,35317,35319,35321,35323,35325,35327],{"class":86,"line":238},[84,35289,31172],{"class":94},[84,35291,35292],{"class":477},".c6",[84,35294,523],{"class":473},[84,35296,31180],{"class":477},[84,35298,31183],{"class":5545},[84,35300,523],{"class":473},[84,35302,35267],{"class":94},[84,35304,851],{"class":477},[84,35306,31192],{"class":5545},[84,35308,523],{"class":473},[84,35310,35267],{"class":94},[84,35312,851],{"class":477},[84,35314,31201],{"class":5545},[84,35316,523],{"class":473},[84,35318,547],{"class":94},[84,35320,851],{"class":477},[84,35322,31210],{"class":5545},[84,35324,523],{"class":473},[84,35326,692],{"class":94},[84,35328,484],{"class":477},[84,35330,35331,35333,35336,35338,35340,35342,35344,35346,35348,35350,35352,35354,35356,35358,35360,35362,35364,35366,35368,35370],{"class":86,"line":249},[84,35332,31172],{"class":94},[84,35334,35335],{"class":477},".c7",[84,35337,523],{"class":473},[84,35339,31180],{"class":477},[84,35341,31183],{"class":5545},[84,35343,523],{"class":473},[84,35345,35267],{"class":94},[84,35347,851],{"class":477},[84,35349,31192],{"class":5545},[84,35351,523],{"class":473},[84,35353,35197],{"class":94},[84,35355,851],{"class":477},[84,35357,31201],{"class":5545},[84,35359,523],{"class":473},[84,35361,547],{"class":94},[84,35363,851],{"class":477},[84,35365,31210],{"class":5545},[84,35367,523],{"class":473},[84,35369,692],{"class":94},[84,35371,484],{"class":477},[84,35373,35374,35376,35379,35381,35383,35385,35387,35389,35391,35393,35395,35397],{"class":86,"line":262},[84,35375,31172],{"class":94},[84,35377,35378],{"class":477},".s8",[84,35380,523],{"class":473},[84,35382,35156],{"class":477},[84,35384,31201],{"class":5545},[84,35386,523],{"class":473},[84,35388,547],{"class":94},[84,35390,851],{"class":477},[84,35392,31256],{"class":5545},[84,35394,523],{"class":473},[84,35396,553],{"class":94},[84,35398,484],{"class":477},[84,35400,35401],{"class":86,"line":273},[84,35402,31329],{"class":328},[84,35404,35405,35407,35409,35411],{"class":86,"line":283},[84,35406,31172],{"class":94},[84,35408,31336],{"class":477},[84,35410,523],{"class":473},[84,35412,31341],{"class":477},[84,35414,35415],{"class":86,"line":294},[84,35416,35417],{"class":328},"       # 定义全连接层\n",[84,35419,35420,35422,35425,35427,35429,35431,35433,35435,35437,35439,35441,35444],{"class":86,"line":2028},[84,35421,31172],{"class":94},[84,35423,35424],{"class":477},".f1",[84,35426,523],{"class":473},[84,35428,31358],{"class":477},[84,35430,817],{"class":94},[84,35432,928],{"class":473},[84,35434,817],{"class":94},[84,35436,928],{"class":473},[84,35438,35197],{"class":94},[84,35440,851],{"class":477},[84,35442,35443],{"class":94},"4096",[84,35445,484],{"class":477},[84,35447,35448,35450,35453,35455,35457,35459,35461,35463],{"class":86,"line":2057},[84,35449,31172],{"class":94},[84,35451,35452],{"class":477},".f2",[84,35454,523],{"class":473},[84,35456,31358],{"class":477},[84,35458,35443],{"class":94},[84,35460,851],{"class":477},[84,35462,35443],{"class":94},[84,35464,484],{"class":477},[84,35466,35467,35469,35472,35474,35476,35478,35480,35482],{"class":86,"line":2062},[84,35468,31172],{"class":94},[84,35470,35471],{"class":477},".f3",[84,35473,523],{"class":473},[84,35475,31358],{"class":477},[84,35477,35443],{"class":94},[84,35479,851],{"class":477},[84,35481,919],{"class":94},[84,35483,484],{"class":477},[84,35485,35486],{"class":86,"line":2079},[84,35487,2729],{"emptyLinePlaceholder":403},[84,35489,35490],{"class":86,"line":2084},[84,35491,35492],{"class":328},"    # 定义前向传播\n",[84,35494,35495,35497,35499],{"class":86,"line":2089},[84,35496,31128],{"class":473},[84,35498,31420],{"class":90},[84,35500,31423],{"class":477},[84,35502,35503,35505,35507,35509,35512,35514],{"class":86,"line":2094},[84,35504,31428],{"class":477},[84,35506,523],{"class":473},[84,35508,31150],{"class":94},[84,35510,35511],{"class":477},".ReLu(",[84,35513,31150],{"class":94},[84,35515,31440],{"class":477},[84,35517,35518,35520,35522,35524],{"class":86,"line":2108},[84,35519,31428],{"class":477},[84,35521,523],{"class":473},[84,35523,31150],{"class":94},[84,35525,31451],{"class":477},[84,35527,35528,35530,35532,35534,35536,35538],{"class":86,"line":2113},[84,35529,31428],{"class":477},[84,35531,523],{"class":473},[84,35533,31150],{"class":94},[84,35535,35511],{"class":477},[84,35537,31150],{"class":94},[84,35539,31466],{"class":477},[84,35541,35542,35544,35546,35548],{"class":86,"line":2906},[84,35543,31428],{"class":477},[84,35545,523],{"class":473},[84,35547,31150],{"class":94},[84,35549,31477],{"class":477},[84,35551,35552,35554,35556,35558,35560,35562],{"class":86,"line":2920},[84,35553,31428],{"class":477},[84,35555,523],{"class":473},[84,35557,31150],{"class":94},[84,35559,35511],{"class":477},[84,35561,31150],{"class":94},[84,35563,35564],{"class":477},".c5(x))\n",[84,35566,35567,35569,35571,35573,35575,35577],{"class":86,"line":2928},[84,35568,31428],{"class":477},[84,35570,523],{"class":473},[84,35572,31150],{"class":94},[84,35574,35511],{"class":477},[84,35576,31150],{"class":94},[84,35578,35579],{"class":477},".c6(x))\n",[84,35581,35582,35584,35586,35588,35590,35592],{"class":86,"line":2933},[84,35583,31428],{"class":477},[84,35585,523],{"class":473},[84,35587,31150],{"class":94},[84,35589,35511],{"class":477},[84,35591,31150],{"class":94},[84,35593,35594],{"class":477},".c7(x))\n",[84,35596,35597,35599,35601,35603],{"class":86,"line":2939},[84,35598,31428],{"class":477},[84,35600,523],{"class":473},[84,35602,31150],{"class":94},[84,35604,35605],{"class":477},".s8(x)\n",[84,35607,35608],{"class":86,"line":2945},[84,35609,2729],{"emptyLinePlaceholder":403},[84,35611,35612],{"class":86,"line":2950},[84,35613,35614],{"class":328},"        # 展平加线性全连接层\n",[84,35616,35617,35619,35621,35623],{"class":86,"line":8277},[84,35618,31428],{"class":477},[84,35620,523],{"class":473},[84,35622,31150],{"class":94},[84,35624,31488],{"class":477},[84,35626,35627,35629,35631,35633,35635,35637],{"class":86,"line":8301},[84,35628,31428],{"class":477},[84,35630,523],{"class":473},[84,35632,31150],{"class":94},[84,35634,35511],{"class":477},[84,35636,31150],{"class":94},[84,35638,35639],{"class":477},".f1(x))\n",[84,35641,35642],{"class":86,"line":8306},[84,35643,35644],{"class":328},"        # 还需要dropout对神经元随机进行失活\n",[84,35646,35647,35649,35651,35654,35657],{"class":86,"line":8312},[84,35648,31428],{"class":477},[84,35650,523],{"class":473},[84,35652,35653],{"class":477},"F.dropout(x,",[84,35655,35656],{"class":94},"0.5",[84,35658,484],{"class":477},[84,35660,35661,35663,35665,35667,35669,35671],{"class":86,"line":8339},[84,35662,31428],{"class":477},[84,35664,523],{"class":473},[84,35666,31150],{"class":94},[84,35668,35511],{"class":477},[84,35670,31150],{"class":94},[84,35672,35673],{"class":477},".f2(x))\n",[84,35675,35676,35678,35680,35682,35684],{"class":86,"line":8344},[84,35677,31428],{"class":477},[84,35679,523],{"class":473},[84,35681,35653],{"class":477},[84,35683,35656],{"class":94},[84,35685,484],{"class":477},[84,35687,35688],{"class":86,"line":8350},[84,35689,35690],{"class":328},"        # 直接输出\n",[84,35692,35693,35695,35697,35699],{"class":86,"line":8362},[84,35694,31428],{"class":477},[84,35696,523],{"class":473},[84,35698,31150],{"class":94},[84,35700,35701],{"class":477},".f3(x)\n",[84,35703,35704],{"class":86,"line":8374},[84,35705,35706],{"class":328},"        # 前向传播输出\n",[84,35708,35709,35711],{"class":86,"line":8386},[84,35710,15081],{"class":473},[84,35712,31536],{"class":477},[84,35714,35715],{"class":86,"line":10045},[84,35716,35717],{"class":328},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[84,35719,35720,35722,35724,35726,35728],{"class":86,"line":10070},[84,35721,1871],{"class":473},[84,35723,31547],{"class":94},[84,35725,3278],{"class":473},[84,35727,31552],{"class":104},[84,35729,4068],{"class":477},[84,35731,35732,35734,35736,35738,35740,35742,35744,35746,35748],{"class":86,"line":10093},[84,35733,31564],{"class":477},[84,35735,523],{"class":473},[84,35737,30778],{"class":477},[84,35739,31571],{"class":104},[84,35741,2034],{"class":473},[84,35743,31576],{"class":477},[84,35745,2031],{"class":473},[84,35747,30803],{"class":104},[84,35749,484],{"class":477},[84,35751,35752],{"class":86,"line":10117},[84,35753,35754],{"class":328},"    # 模型实例化，然后将实例化的模型放到设备中\n",[84,35756,35757,35759,35761],{"class":86,"line":10122},[84,35758,31616],{"class":477},[84,35760,523],{"class":473},[84,35762,35763],{"class":477},"AlexNet().to(device)\n",[84,35765,35766,35768,35770,35772,35774,35777,35779,35781],{"class":86,"line":10127},[84,35767,31626],{"class":94},[84,35769,31629],{"class":477},[84,35771,692],{"class":94},[84,35773,851],{"class":477},[84,35775,35776],{"class":94},"227",[84,35778,851],{"class":477},[84,35780,35776],{"class":94},[84,35782,31642],{"class":477},[28,35784,35785],{"start":98},[31,35786,31655],{},[75,35788,35790],{"className":30705,"code":35789,"language":30707,"meta":66,"style":66},"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",[81,35791,35792,35798,35804,35814,35820,35830,35840,35850,35860,35870,35874,35885,35895,35899,35903,35907,35915,35927,35937,35953,35963,35995,36009,36019,36029,36033,36043,36057,36067,36077,36087,36093,36097,36101,36105,36109,36113,36121,36141,36145,36149,36153,36157,36161,36177,36181,36185,36193,36197,36201,36209,36213,36217,36221,36229,36233,36237,36241,36245,36253,36257,36265,36269,36277,36281,36289,36293,36301,36305,36309,36317,36321,36325,36329,36341,36365,36379,36383,36387,36391,36399,36403,36411,36415,36423,36427,36435,36439,36447,36451,36459,36463,36475,36479,36487,36491,36499,36503,36507,36511,36515,36523,36527,36543,36547,36555,36559,36563,36567,36571,36575,36579,36583,36599,36603,36615,36619,36631,36635,36647,36651,36659,36663,36671,36675,36679,36684,36690,36694,36703,36707,36724,36728,36737,36741,36759,36772,36777,36790,36794,36798,36806,36810,36814,36822,36826,36834,36838,36846,36850,36854,36896,36938,36942,36946,36962,36966,36982,36986,36990,36998,37002,37006,37018,37056,37061,37066,37075,37079,37093,37103,37109,37115,37121,37127,37131,37135,37141,37145,37149,37157,37161,37179,37183,37187,37191,37207,37211,37215,37219,37223,37227,37247,37267,37271,37275,37279,37287,37295,37299,37315,37335,37355,37359,37363,37371,37379,37383,37387,37391,37403,37407,37417,37425,37442],{"__ignoreMap":66},[84,35793,35794,35796],{"class":86,"line":87},[84,35795,30719],{"class":473},[84,35797,32149],{"class":477},[84,35799,35800,35802],{"class":86,"line":98},[84,35801,30719],{"class":473},[84,35803,32156],{"class":477},[84,35805,35806,35808,35810,35812],{"class":86,"line":70},[84,35807,30719],{"class":473},[84,35809,32167],{"class":477},[84,35811,31710],{"class":473},[84,35813,32172],{"class":477},[84,35815,35816,35818],{"class":86,"line":120},[84,35817,30719],{"class":473},[84,35819,30722],{"class":477},[84,35821,35822,35824,35826,35828],{"class":86,"line":131},[84,35823,31064],{"class":473},[84,35825,31742],{"class":477},[84,35827,30719],{"class":473},[84,35829,32189],{"class":477},[84,35831,35832,35834,35836,35838],{"class":86,"line":145},[84,35833,31064],{"class":473},[84,35835,31695],{"class":477},[84,35837,30719],{"class":473},[84,35839,31700],{"class":477},[84,35841,35842,35844,35846,35848],{"class":86,"line":156},[84,35843,31064],{"class":473},[84,35845,31725],{"class":477},[84,35847,30719],{"class":473},[84,35849,31730],{"class":477},[84,35851,35852,35854,35856,35858],{"class":86,"line":164},[84,35853,30719],{"class":473},[84,35855,31742],{"class":477},[84,35857,31710],{"class":473},[84,35859,31747],{"class":477},[84,35861,35862,35864,35866,35868],{"class":86,"line":175},[84,35863,30719],{"class":473},[84,35865,31759],{"class":477},[84,35867,31710],{"class":473},[84,35869,31764],{"class":477},[84,35871,35872],{"class":86,"line":185},[84,35873,32234],{"class":328},[84,35875,35876,35878,35880,35882],{"class":86,"line":195},[84,35877,31064],{"class":473},[84,35879,32241],{"class":477},[84,35881,30719],{"class":473},[84,35883,35884],{"class":477}," AlexNet\n",[84,35886,35887,35889,35891,35893],{"class":86,"line":206},[84,35888,31064],{"class":473},[84,35890,31067],{"class":477},[84,35892,30719],{"class":473},[84,35894,31072],{"class":477},[84,35896,35897],{"class":86,"line":217},[84,35898,2729],{"emptyLinePlaceholder":403},[84,35900,35901],{"class":86,"line":227},[84,35902,2729],{"emptyLinePlaceholder":403},[84,35904,35905],{"class":86,"line":238},[84,35906,32269],{"class":328},[84,35908,35909,35911,35913],{"class":86,"line":249},[84,35910,32274],{"class":473},[84,35912,32277],{"class":90},[84,35914,32280],{"class":477},[84,35916,35917,35919,35921,35923,35925],{"class":86,"line":262},[84,35918,32285],{"class":477},[84,35920,523],{"class":473},[84,35922,31782],{"class":477},[84,35924,31790],{"class":104},[84,35926,31793],{"class":477},[84,35928,35929,35931,35933,35935],{"class":86,"line":273},[84,35930,32298],{"class":5545},[84,35932,523],{"class":473},[84,35934,31803],{"class":94},[84,35936,31793],{"class":477},[84,35938,35939,35941,35943,35945,35947,35949,35951],{"class":86,"line":283},[84,35940,32309],{"class":5545},[84,35942,523],{"class":473},[84,35944,31820],{"class":477},[84,35946,31823],{"class":5545},[84,35948,523],{"class":473},[84,35950,35776],{"class":94},[84,35952,31831],{"class":477},[84,35954,35955,35957,35959,35961],{"class":86,"line":294},[84,35956,32326],{"class":5545},[84,35958,523],{"class":473},[84,35960,31803],{"class":94},[84,35962,484],{"class":477},[84,35964,35965,35967,35969,35971,35973,35975,35977,35979,35981,35983,35985,35987,35989,35991,35993],{"class":86,"line":2028},[84,35966,32337],{"class":477},[84,35968,523],{"class":473},[84,35970,32342],{"class":477},[84,35972,32345],{"class":94},[84,35974,478],{"class":477},[84,35976,32350],{"class":94},[84,35978,928],{"class":473},[84,35980,7687],{"class":94},[84,35982,32357],{"class":477},[84,35984,32345],{"class":94},[84,35986,478],{"class":477},[84,35988,32364],{"class":94},[84,35990,928],{"class":473},[84,35992,7687],{"class":94},[84,35994,32371],{"class":477},[84,35996,35997,35999,36001,36003,36005,36007],{"class":86,"line":2057},[84,35998,32376],{"class":477},[84,36000,523],{"class":473},[84,36002,32381],{"class":477},[84,36004,31864],{"class":5545},[84,36006,523],{"class":473},[84,36008,31869],{"class":477},[84,36010,36011,36013,36015,36017],{"class":86,"line":2062},[84,36012,32392],{"class":5545},[84,36014,523],{"class":473},[84,36016,32397],{"class":94},[84,36018,31793],{"class":477},[84,36020,36021,36023,36025,36027],{"class":86,"line":2079},[84,36022,32404],{"class":5545},[84,36024,523],{"class":473},[84,36026,31803],{"class":94},[84,36028,31793],{"class":477},[84,36030,36031],{"class":86,"line":2084},[84,36032,32415],{"class":328},[84,36034,36035,36037,36039,36041],{"class":86,"line":2089},[84,36036,32420],{"class":5545},[84,36038,523],{"class":473},[84,36040,868],{"class":94},[84,36042,484],{"class":477},[84,36044,36045,36047,36049,36051,36053,36055],{"class":86,"line":2094},[84,36046,32431],{"class":477},[84,36048,523],{"class":473},[84,36050,31861],{"class":477},[84,36052,31864],{"class":5545},[84,36054,523],{"class":473},[84,36056,32442],{"class":477},[84,36058,36059,36061,36063,36065],{"class":86,"line":2108},[84,36060,32447],{"class":5545},[84,36062,523],{"class":473},[84,36064,32397],{"class":94},[84,36066,31793],{"class":477},[84,36068,36069,36071,36073,36075],{"class":86,"line":2113},[84,36070,32458],{"class":5545},[84,36072,523],{"class":473},[84,36074,31803],{"class":94},[84,36076,31793],{"class":477},[84,36078,36079,36081,36083,36085],{"class":86,"line":2906},[84,36080,32469],{"class":5545},[84,36082,523],{"class":473},[84,36084,868],{"class":94},[84,36086,484],{"class":477},[84,36088,36089,36091],{"class":86,"line":2920},[84,36090,4419],{"class":473},[84,36092,32482],{"class":477},[84,36094,36095],{"class":86,"line":2928},[84,36096,2729],{"emptyLinePlaceholder":403},[84,36098,36099],{"class":86,"line":2933},[84,36100,32491],{"class":328},[84,36102,36103],{"class":86,"line":2939},[84,36104,32496],{"class":328},[84,36106,36107],{"class":86,"line":2945},[84,36108,2729],{"emptyLinePlaceholder":403},[84,36110,36111],{"class":86,"line":2950},[84,36112,32505],{"class":328},[84,36114,36115,36117,36119],{"class":86,"line":8277},[84,36116,32274],{"class":473},[84,36118,32512],{"class":90},[84,36120,32515],{"class":477},[84,36122,36123,36125,36127,36129,36131,36133,36135,36137,36139],{"class":86,"line":8301},[84,36124,31564],{"class":477},[84,36126,523],{"class":473},[84,36128,30778],{"class":477},[84,36130,31571],{"class":104},[84,36132,2034],{"class":473},[84,36134,31576],{"class":477},[84,36136,2031],{"class":473},[84,36138,32534],{"class":104},[84,36140,484],{"class":477},[84,36142,36143],{"class":86,"line":8306},[84,36144,2729],{"emptyLinePlaceholder":403},[84,36146,36147],{"class":86,"line":8312},[84,36148,2729],{"emptyLinePlaceholder":403},[84,36150,36151],{"class":86,"line":8339},[84,36152,32549],{"class":328},[84,36154,36155],{"class":86,"line":8344},[84,36156,32554],{"class":328},[84,36158,36159],{"class":86,"line":8350},[84,36160,32559],{"class":328},[84,36162,36163,36165,36167,36169,36171,36173,36175],{"class":86,"line":8362},[84,36164,32564],{"class":477},[84,36166,523],{"class":473},[84,36168,32569],{"class":477},[84,36170,32572],{"class":5545},[84,36172,523],{"class":473},[84,36174,32577],{"class":94},[84,36176,484],{"class":477},[84,36178,36179],{"class":86,"line":8374},[84,36180,2729],{"emptyLinePlaceholder":403},[84,36182,36183],{"class":86,"line":8386},[84,36184,32588],{"class":328},[84,36186,36187,36189,36191],{"class":86,"line":10045},[84,36188,32593],{"class":477},[84,36190,523],{"class":473},[84,36192,32598],{"class":477},[84,36194,36195],{"class":86,"line":10070},[84,36196,2729],{"emptyLinePlaceholder":403},[84,36198,36199],{"class":86,"line":10093},[84,36200,32607],{"class":328},[84,36202,36203,36205,36207],{"class":86,"line":10117},[84,36204,31616],{"class":477},[84,36206,523],{"class":473},[84,36208,32616],{"class":477},[84,36210,36211],{"class":86,"line":10122},[84,36212,32621],{"class":328},[84,36214,36215],{"class":86,"line":10127},[84,36216,32626],{"class":328},[84,36218,36219],{"class":86,"line":10132},[84,36220,32631],{"class":328},[84,36222,36223,36225,36227],{"class":86,"line":10141},[84,36224,32636],{"class":477},[84,36226,523],{"class":473},[84,36228,32641],{"class":477},[84,36230,36231],{"class":86,"line":10146},[84,36232,2729],{"emptyLinePlaceholder":403},[84,36234,36235],{"class":86,"line":10152},[84,36236,2729],{"emptyLinePlaceholder":403},[84,36238,36239],{"class":86,"line":10173},[84,36240,32654],{"class":328},[84,36242,36243],{"class":86,"line":10179},[84,36244,32659],{"class":328},[84,36246,36247,36249,36251],{"class":86,"line":10193},[84,36248,32664],{"class":477},[84,36250,523],{"class":473},[84,36252,32669],{"class":94},[84,36254,36255],{"class":86,"line":10199},[84,36256,32674],{"class":328},[84,36258,36259,36261,36263],{"class":86,"line":10226},[84,36260,32679],{"class":477},[84,36262,523],{"class":473},[84,36264,32684],{"class":477},[84,36266,36267],{"class":86,"line":10235},[84,36268,32689],{"class":328},[84,36270,36271,36273,36275],{"class":86,"line":10241},[84,36272,32694],{"class":477},[84,36274,523],{"class":473},[84,36276,32684],{"class":477},[84,36278,36279],{"class":86,"line":10249},[84,36280,32703],{"class":328},[84,36282,36283,36285,36287],{"class":86,"line":10254},[84,36284,32708],{"class":477},[84,36286,523],{"class":473},[84,36288,32684],{"class":477},[84,36290,36291],{"class":86,"line":16933},[84,36292,32717],{"class":328},[84,36294,36295,36297,36299],{"class":86,"line":16939},[84,36296,32722],{"class":477},[84,36298,523],{"class":473},[84,36300,32684],{"class":477},[84,36302,36303],{"class":86,"line":16962},[84,36304,2729],{"emptyLinePlaceholder":403},[84,36306,36307],{"class":86,"line":16968},[84,36308,32735],{"class":328},[84,36310,36311,36313,36315],{"class":86,"line":16991},[84,36312,32740],{"class":477},[84,36314,523],{"class":473},[84,36316,32745],{"class":477},[84,36318,36319],{"class":86,"line":17005},[84,36320,2729],{"emptyLinePlaceholder":403},[84,36322,36323],{"class":86,"line":17025},[84,36324,2729],{"emptyLinePlaceholder":403},[84,36326,36327],{"class":86,"line":17031},[84,36328,32758],{"class":328},[84,36330,36331,36333,36335,36337,36339],{"class":86,"line":17042},[84,36332,3530],{"class":473},[84,36334,32765],{"class":477},[84,36336,26371],{"class":473},[84,36338,32770],{"class":94},[84,36340,32773],{"class":477},[84,36342,36343,36345,36347,36349,36351,36353,36355,36357,36359,36361,36363],{"class":86,"line":17065},[84,36344,32778],{"class":94},[84,36346,478],{"class":477},[84,36348,32783],{"class":104},[84,36350,32786],{"class":94},[84,36352,1057],{"class":104},[84,36354,32786],{"class":94},[84,36356,725],{"class":104},[84,36358,32795],{"class":477},[84,36360,1005],{"class":473},[84,36362,692],{"class":94},[84,36364,30824],{"class":477},[84,36366,36367,36369,36371,36373,36375,36377],{"class":86,"line":17087},[84,36368,32778],{"class":94},[84,36370,478],{"class":477},[84,36372,32810],{"class":104},[84,36374,928],{"class":473},[84,36376,919],{"class":94},[84,36378,484],{"class":477},[84,36380,36381],{"class":86,"line":17092},[84,36382,2729],{"emptyLinePlaceholder":403},[84,36384,36385],{"class":86,"line":17098},[84,36386,32825],{"class":328},[84,36388,36389],{"class":86,"line":17112},[84,36390,32830],{"class":328},[84,36392,36393,36395,36397],{"class":86,"line":17125},[84,36394,32835],{"class":477},[84,36396,523],{"class":473},[84,36398,32669],{"class":94},[84,36400,36401],{"class":86,"line":17130},[84,36402,32844],{"class":328},[84,36404,36405,36407,36409],{"class":86,"line":17144},[84,36406,32849],{"class":477},[84,36408,523],{"class":473},[84,36410,3414],{"class":94},[84,36412,36413],{"class":86,"line":17149},[84,36414,32858],{"class":328},[84,36416,36417,36419,36421],{"class":86,"line":17155},[84,36418,32863],{"class":477},[84,36420,523],{"class":473},[84,36422,32669],{"class":94},[84,36424,36425],{"class":86,"line":17160},[84,36426,32872],{"class":328},[84,36428,36429,36431,36433],{"class":86,"line":17174},[84,36430,32877],{"class":477},[84,36432,523],{"class":473},[84,36434,3414],{"class":94},[84,36436,36437],{"class":86,"line":17179},[84,36438,32886],{"class":328},[84,36440,36441,36443,36445],{"class":86,"line":17184},[84,36442,32891],{"class":477},[84,36444,523],{"class":473},[84,36446,3414],{"class":94},[84,36448,36449],{"class":86,"line":17198},[84,36450,32900],{"class":328},[84,36452,36453,36455,36457],{"class":86,"line":17210},[84,36454,32905],{"class":477},[84,36456,523],{"class":473},[84,36458,3414],{"class":94},[84,36460,36461],{"class":86,"line":17215},[84,36462,32914],{"class":328},[84,36464,36465,36467,36469,36471,36473],{"class":86,"line":17228},[84,36466,3732],{"class":473},[84,36468,31928],{"class":477},[84,36470,26371],{"class":473},[84,36472,31933],{"class":94},[84,36474,32927],{"class":477},[84,36476,36477],{"class":86,"line":17233},[84,36478,32932],{"class":328},[84,36480,36481,36483,36485],{"class":86,"line":17238},[84,36482,32937],{"class":477},[84,36484,523],{"class":473},[84,36486,32942],{"class":477},[84,36488,36489],{"class":86,"line":17243},[84,36490,32947],{"class":328},[84,36492,36493,36495,36497],{"class":86,"line":17256},[84,36494,32952],{"class":477},[84,36496,523],{"class":473},[84,36498,32957],{"class":477},[84,36500,36501],{"class":86,"line":17261},[84,36502,32963],{"class":328},[84,36504,36505],{"class":86,"line":32960},[84,36506,32969],{"class":477},[84,36508,36509],{"class":86,"line":32966},[84,36510,32975],{"class":328},[84,36512,36513],{"class":86,"line":32972},[84,36514,32981],{"class":328},[84,36516,36517,36519,36521],{"class":86,"line":32978},[84,36518,32987],{"class":477},[84,36520,523],{"class":473},[84,36522,32992],{"class":477},[84,36524,36525],{"class":86,"line":32984},[84,36526,32998],{"class":328},[84,36528,36529,36531,36533,36535,36537,36539,36541],{"class":86,"line":32995},[84,36530,33004],{"class":477},[84,36532,523],{"class":473},[84,36534,33009],{"class":477},[84,36536,33012],{"class":5545},[84,36538,523],{"class":473},[84,36540,692],{"class":94},[84,36542,484],{"class":477},[84,36544,36545],{"class":86,"line":33001},[84,36546,33024],{"class":328},[84,36548,36549,36551,36553],{"class":86,"line":33021},[84,36550,33030],{"class":477},[84,36552,523],{"class":473},[84,36554,33035],{"class":477},[84,36556,36557],{"class":86,"line":33027},[84,36558,33041],{"class":328},[84,36560,36561],{"class":86,"line":33038},[84,36562,33047],{"class":477},[84,36564,36565],{"class":86,"line":33044},[84,36566,33053],{"class":328},[84,36568,36569],{"class":86,"line":33050},[84,36570,33059],{"class":477},[84,36572,36573],{"class":86,"line":33056},[84,36574,33065],{"class":328},[84,36576,36577],{"class":86,"line":33062},[84,36578,33071],{"class":477},[84,36580,36581],{"class":86,"line":33068},[84,36582,33077],{"class":328},[84,36584,36585,36587,36589,36591,36593,36595,36597],{"class":86,"line":33074},[84,36586,33083],{"class":477},[84,36588,9806],{"class":473},[84,36590,33088],{"class":477},[84,36592,928],{"class":473},[84,36594,33093],{"class":477},[84,36596,666],{"class":94},[84,36598,484],{"class":477},[84,36600,36601],{"class":86,"line":33080},[84,36602,33103],{"class":328},[84,36604,36605,36607,36609,36611,36613],{"class":86,"line":33100},[84,36606,33109],{"class":477},[84,36608,9806],{"class":473},[84,36610,33114],{"class":477},[84,36612,3278],{"class":473},[84,36614,33119],{"class":477},[84,36616,36617],{"class":86,"line":33106},[84,36618,33125],{"class":328},[84,36620,36621,36623,36625,36627,36629],{"class":86,"line":33122},[84,36622,33131],{"class":477},[84,36624,9806],{"class":473},[84,36626,33093],{"class":477},[84,36628,666],{"class":94},[84,36630,484],{"class":477},[84,36632,36633],{"class":86,"line":33128},[84,36634,33145],{"class":328},[84,36636,36637,36639,36641,36643,36645],{"class":86,"line":33142},[84,36638,3732],{"class":473},[84,36640,33153],{"class":477},[84,36642,26371],{"class":473},[84,36644,31933],{"class":94},[84,36646,33160],{"class":477},[84,36648,36649],{"class":86,"line":33148},[84,36650,33166],{"class":328},[84,36652,36653,36655,36657],{"class":86,"line":33163},[84,36654,32937],{"class":477},[84,36656,523],{"class":473},[84,36658,32942],{"class":477},[84,36660,36661],{"class":86,"line":33169},[84,36662,33181],{"class":328},[84,36664,36665,36667,36669],{"class":86,"line":33178},[84,36666,32952],{"class":477},[84,36668,523],{"class":473},[84,36670,32957],{"class":477},[84,36672,36673],{"class":86,"line":33184},[84,36674,33196],{"class":328},[84,36676,36677],{"class":86,"line":33193},[84,36678,33202],{"class":477},[84,36680,36681],{"class":86,"line":33199},[84,36682,36683],{"class":328},"            # 验证时不计算梯度以节省内存\u002F计算\n",[84,36685,36686,36688],{"class":86,"line":33205},[84,36687,33208],{"class":473},[84,36689,33211],{"class":477},[84,36691,36692],{"class":86,"line":33214},[84,36693,33217],{"class":328},[84,36695,36696,36699,36701],{"class":86,"line":33220},[84,36697,36698],{"class":477},"                output",[84,36700,523],{"class":473},[84,36702,32992],{"class":477},[84,36704,36705],{"class":86,"line":33231},[84,36706,33234],{"class":328},[84,36708,36709,36712,36714,36716,36718,36720,36722],{"class":86,"line":33237},[84,36710,36711],{"class":477},"                pre_lab",[84,36713,523],{"class":473},[84,36715,33009],{"class":477},[84,36717,33012],{"class":5545},[84,36719,523],{"class":473},[84,36721,692],{"class":94},[84,36723,484],{"class":477},[84,36725,36726],{"class":86,"line":33256},[84,36727,33259],{"class":328},[84,36729,36730,36733,36735],{"class":86,"line":33262},[84,36731,36732],{"class":477},"                val_batch_loss",[84,36734,523],{"class":473},[84,36736,33035],{"class":477},[84,36738,36739],{"class":86,"line":33273},[84,36740,33276],{"class":328},[84,36742,36743,36746,36748,36751,36753,36755,36757],{"class":86,"line":33279},[84,36744,36745],{"class":477},"                val_loss",[84,36747,9806],{"class":473},[84,36749,36750],{"class":477},"val_batch_loss.item()",[84,36752,928],{"class":473},[84,36754,33093],{"class":477},[84,36756,666],{"class":94},[84,36758,484],{"class":477},[84,36760,36761,36764,36766,36768,36770],{"class":86,"line":33299},[84,36762,36763],{"class":477},"                val_corrects",[84,36765,9806],{"class":473},[84,36767,33114],{"class":477},[84,36769,3278],{"class":473},[84,36771,33119],{"class":477},[84,36773,36774],{"class":86,"line":33315},[84,36775,36776],{"class":328},"            # 当前用于验证的样本数量\n",[84,36778,36779,36782,36784,36786,36788],{"class":86,"line":33321},[84,36780,36781],{"class":477},"            val_num",[84,36783,9806],{"class":473},[84,36785,33093],{"class":477},[84,36787,666],{"class":94},[84,36789,484],{"class":477},[84,36791,36792],{"class":86,"line":33335},[84,36793,33338],{"class":328},[84,36795,36796],{"class":86,"line":33341},[84,36797,33344],{"class":328},[84,36799,36800,36802,36804],{"class":86,"line":33347},[84,36801,33350],{"class":477},[84,36803,1057],{"class":473},[84,36805,33355],{"class":477},[84,36807,36808],{"class":86,"line":33358},[84,36809,33361],{"class":328},[84,36811,36812],{"class":86,"line":33364},[84,36813,33367],{"class":328},[84,36815,36816,36818,36820],{"class":86,"line":33370},[84,36817,33373],{"class":477},[84,36819,1057],{"class":473},[84,36821,33355],{"class":477},[84,36823,36824],{"class":86,"line":33380},[84,36825,33383],{"class":328},[84,36827,36828,36830,36832],{"class":86,"line":33386},[84,36829,33389],{"class":477},[84,36831,1057],{"class":473},[84,36833,33394],{"class":477},[84,36835,36836],{"class":86,"line":33397},[84,36837,33400],{"class":328},[84,36839,36840,36842,36844],{"class":86,"line":33403},[84,36841,33406],{"class":477},[84,36843,1057],{"class":473},[84,36845,33394],{"class":477},[84,36847,36848],{"class":86,"line":33413},[84,36849,2729],{"emptyLinePlaceholder":403},[84,36851,36852],{"class":86,"line":33418},[84,36853,33421],{"class":328},[84,36855,36856,36858,36860,36862,36864,36866,36868,36870,36872,36874,36876,36878,36880,36882,36884,36886,36888,36890,36892,36894],{"class":86,"line":33424},[84,36857,32778],{"class":94},[84,36859,478],{"class":477},[84,36861,3921],{"class":104},[84,36863,32786],{"class":94},[84,36865,33435],{"class":104},[84,36867,1369],{"class":94},[84,36869,33440],{"class":473},[84,36871,1419],{"class":94},[84,36873,33445],{"class":104},[84,36875,1369],{"class":94},[84,36877,33440],{"class":473},[84,36879,1419],{"class":94},[84,36881,3921],{"class":104},[84,36883,33456],{"class":477},[84,36885,1005],{"class":473},[84,36887,692],{"class":94},[84,36889,33463],{"class":477},[84,36891,1005],{"class":473},[84,36893,692],{"class":94},[84,36895,33470],{"class":477},[84,36897,36898,36900,36902,36904,36906,36908,36910,36912,36914,36916,36918,36920,36922,36924,36926,36928,36930,36932,36934,36936],{"class":86,"line":33473},[84,36899,32778],{"class":94},[84,36901,478],{"class":477},[84,36903,3921],{"class":104},[84,36905,32786],{"class":94},[84,36907,33484],{"class":104},[84,36909,1369],{"class":94},[84,36911,33440],{"class":473},[84,36913,1419],{"class":94},[84,36915,33493],{"class":104},[84,36917,1369],{"class":94},[84,36919,33440],{"class":473},[84,36921,1419],{"class":94},[84,36923,3921],{"class":104},[84,36925,33504],{"class":477},[84,36927,1005],{"class":473},[84,36929,692],{"class":94},[84,36931,33511],{"class":477},[84,36933,1005],{"class":473},[84,36935,692],{"class":94},[84,36937,33470],{"class":477},[84,36939,36940],{"class":86,"line":33520},[84,36941,2729],{"emptyLinePlaceholder":403},[84,36943,36944],{"class":86,"line":33525},[84,36945,33528],{"class":328},[84,36947,36948,36950,36952,36954,36956,36958,36960],{"class":86,"line":33531},[84,36949,2826],{"class":473},[84,36951,33536],{"class":477},[84,36953,1005],{"class":473},[84,36955,692],{"class":94},[84,36957,1413],{"class":477},[84,36959,1433],{"class":473},[84,36961,33547],{"class":477},[84,36963,36964],{"class":86,"line":33550},[84,36965,33553],{"class":328},[84,36967,36968,36970,36972,36974,36976,36978,36980],{"class":86,"line":33556},[84,36969,33559],{"class":477},[84,36971,517],{"class":94},[84,36973,523],{"class":473},[84,36975,33566],{"class":477},[84,36977,1005],{"class":473},[84,36979,692],{"class":94},[84,36981,33573],{"class":477},[84,36983,36984],{"class":86,"line":33576},[84,36985,33579],{"class":328},[84,36987,36988],{"class":86,"line":33582},[84,36989,33585],{"class":328},[84,36991,36992,36994,36996],{"class":86,"line":33588},[84,36993,33591],{"class":477},[84,36995,523],{"class":473},[84,36997,32641],{"class":477},[84,36999,37000],{"class":86,"line":33598},[84,37001,2729],{"emptyLinePlaceholder":403},[84,37003,37004],{"class":86,"line":33603},[84,37005,33606],{"class":328},[84,37007,37008,37010,37012,37014,37016],{"class":86,"line":33609},[84,37009,33612],{"class":477},[84,37011,523],{"class":473},[84,37013,33617],{"class":477},[84,37015,1005],{"class":473},[84,37017,33622],{"class":477},[84,37019,37020,37022,37024,37026,37028,37030,37032,37034,37036,37038,37040,37042,37044,37046,37048,37050,37052,37054],{"class":86,"line":33625},[84,37021,32778],{"class":94},[84,37023,478],{"class":477},[84,37025,33632],{"class":104},[84,37027,1369],{"class":94},[84,37029,33637],{"class":473},[84,37031,1419],{"class":94},[84,37033,1017],{"class":104},[84,37035,1369],{"class":94},[84,37037,33637],{"class":473},[84,37039,1419],{"class":94},[84,37041,33650],{"class":104},[84,37043,33653],{"class":477},[84,37045,33656],{"class":473},[84,37047,1380],{"class":94},[84,37049,33661],{"class":477},[84,37051,801],{"class":473},[84,37053,1380],{"class":94},[84,37055,30824],{"class":477},[84,37057,37058],{"class":86,"line":33670},[84,37059,37060],{"class":328},"    # 选择最优参数并保存\n",[84,37062,37063],{"class":86,"line":33676},[84,37064,37065],{"class":328},"    # 保存最佳模型权重字典\n",[84,37067,37068,37071,37073],{"class":86,"line":33682},[84,37069,37070],{"class":477},"    torch.save(best_model_wts,",[84,37072,33694],{"class":104},[84,37074,484],{"class":477},[84,37076,37077],{"class":86,"line":33688},[84,37078,33714],{"class":328},[84,37080,37081,37083,37085,37087,37089,37091],{"class":86,"line":33699},[84,37082,33720],{"class":477},[84,37084,523],{"class":473},[84,37086,33725],{"class":477},[84,37088,33728],{"class":5545},[84,37090,523],{"class":473},[84,37092,1886],{"class":477},[84,37094,37095,37097,37099,37101],{"class":86,"line":33705},[84,37096,33738],{"class":104},[84,37098,1332],{"class":477},[84,37100,33743],{"class":94},[84,37102,33746],{"class":477},[84,37104,37105,37107],{"class":86,"line":33711},[84,37106,33752],{"class":104},[84,37108,33755],{"class":477},[84,37110,37111,37113],{"class":86,"line":33717},[84,37112,33761],{"class":104},[84,37114,33764],{"class":477},[84,37116,37117,37119],{"class":86,"line":33735},[84,37118,33770],{"class":104},[84,37120,33773],{"class":477},[84,37122,37123,37125],{"class":86,"line":33749},[84,37124,33779],{"class":104},[84,37126,33782],{"class":477},[84,37128,37129],{"class":86,"line":33758},[84,37130,33788],{"class":477},[84,37132,37133],{"class":86,"line":33767},[84,37134,33794],{"class":328},[84,37136,37137,37139],{"class":86,"line":33776},[84,37138,4419],{"class":473},[84,37140,33802],{"class":477},[84,37142,37143],{"class":86,"line":33785},[84,37144,2729],{"emptyLinePlaceholder":403},[84,37146,37147],{"class":86,"line":33791},[84,37148,33813],{"class":328},[84,37150,37151,37153,37155],{"class":86,"line":33797},[84,37152,32274],{"class":473},[84,37154,33821],{"class":90},[84,37156,33824],{"class":477},[84,37158,37159],{"class":86,"line":33805},[84,37160,33830],{"class":328},[84,37162,37163,37165,37167,37169,37171,37173,37175,37177],{"class":86,"line":33810},[84,37164,33836],{"class":477},[84,37166,32020],{"class":5545},[84,37168,523],{"class":473},[84,37170,478],{"class":477},[84,37172,971],{"class":94},[84,37174,851],{"class":477},[84,37176,140],{"class":94},[84,37178,30824],{"class":477},[84,37180,37181],{"class":86,"line":33816},[84,37182,33856],{"class":328},[84,37184,37185],{"class":86,"line":33827},[84,37186,33862],{"class":328},[84,37188,37189],{"class":86,"line":33833},[84,37190,33868],{"class":328},[84,37192,37193,37195,37197,37199,37201,37203,37205],{"class":86,"line":33853},[84,37194,32054],{"class":477},[84,37196,692],{"class":94},[84,37198,851],{"class":477},[84,37200,553],{"class":94},[84,37202,851],{"class":477},[84,37204,692],{"class":94},[84,37206,484],{"class":477},[84,37208,37209],{"class":86,"line":33859},[84,37210,33891],{"class":328},[84,37212,37213],{"class":86,"line":33865},[84,37214,33897],{"class":328},[84,37216,37217],{"class":86,"line":33871},[84,37218,33903],{"class":328},[84,37220,37221],{"class":86,"line":33888},[84,37222,33909],{"class":328},[84,37224,37225],{"class":86,"line":33894},[84,37226,33915],{"class":328},[84,37228,37229,37231,37233,37235,37237,37239,37241,37243,37245],{"class":86,"line":33900},[84,37230,33921],{"class":477},[84,37232,33924],{"class":104},[84,37234,33927],{"class":477},[84,37236,33930],{"class":104},[84,37238,851],{"class":477},[84,37240,33935],{"class":5545},[84,37242,523],{"class":473},[84,37244,33940],{"class":104},[84,37246,484],{"class":477},[84,37248,37249,37251,37253,37255,37257,37259,37261,37263,37265],{"class":86,"line":33906},[84,37250,33921],{"class":477},[84,37252,33924],{"class":104},[84,37254,33952],{"class":477},[84,37256,33955],{"class":104},[84,37258,851],{"class":477},[84,37260,33935],{"class":5545},[84,37262,523],{"class":473},[84,37264,33964],{"class":104},[84,37266,484],{"class":477},[84,37268,37269],{"class":86,"line":33912},[84,37270,33972],{"class":328},[84,37272,37273],{"class":86,"line":33918},[84,37274,33978],{"class":477},[84,37276,37277],{"class":86,"line":33945},[84,37278,33984],{"class":328},[84,37280,37281,37283,37285],{"class":86,"line":33969},[84,37282,33990],{"class":477},[84,37284,33993],{"class":104},[84,37286,484],{"class":477},[84,37288,37289,37291,37293],{"class":86,"line":33975},[84,37290,34001],{"class":477},[84,37292,34004],{"class":104},[84,37294,484],{"class":477},[84,37296,37297],{"class":86,"line":33981},[84,37298,34012],{"class":328},[84,37300,37301,37303,37305,37307,37309,37311,37313],{"class":86,"line":33987},[84,37302,32054],{"class":477},[84,37304,692],{"class":94},[84,37306,851],{"class":477},[84,37308,553],{"class":94},[84,37310,851],{"class":477},[84,37312,553],{"class":94},[84,37314,484],{"class":477},[84,37316,37317,37319,37321,37323,37325,37327,37329,37331,37333],{"class":86,"line":33998},[84,37318,33921],{"class":477},[84,37320,33924],{"class":104},[84,37322,34039],{"class":477},[84,37324,33930],{"class":104},[84,37326,851],{"class":477},[84,37328,33935],{"class":5545},[84,37330,523],{"class":473},[84,37332,34050],{"class":104},[84,37334,484],{"class":477},[84,37336,37337,37339,37341,37343,37345,37347,37349,37351,37353],{"class":86,"line":34009},[84,37338,33921],{"class":477},[84,37340,33924],{"class":104},[84,37342,34062],{"class":477},[84,37344,33955],{"class":104},[84,37346,851],{"class":477},[84,37348,33935],{"class":5545},[84,37350,523],{"class":473},[84,37352,34073],{"class":104},[84,37354,484],{"class":477},[84,37356,37357],{"class":86,"line":34015},[84,37358,34081],{"class":328},[84,37360,37361],{"class":86,"line":34032},[84,37362,33978],{"class":477},[84,37364,37365,37367,37369],{"class":86,"line":34055},[84,37366,33990],{"class":477},[84,37368,33924],{"class":104},[84,37370,484],{"class":477},[84,37372,37373,37375,37377],{"class":86,"line":34078},[84,37374,34001],{"class":477},[84,37376,34103],{"class":104},[84,37378,484],{"class":477},[84,37380,37381],{"class":86,"line":34084},[84,37382,34111],{"class":477},[84,37384,37385],{"class":86,"line":34089},[84,37386,2729],{"emptyLinePlaceholder":403},[84,37388,37389],{"class":86,"line":34098},[84,37390,34122],{"class":328},[84,37392,37393,37395,37397,37399,37401],{"class":86,"line":34108},[84,37394,1871],{"class":473},[84,37396,31547],{"class":94},[84,37398,3278],{"class":473},[84,37400,31552],{"class":104},[84,37402,4068],{"class":477},[84,37404,37405],{"class":86,"line":34114},[84,37406,34141],{"class":328},[84,37408,37409,37412,37414],{"class":86,"line":34119},[84,37410,37411],{"class":477},"    AlexNet",[84,37413,523],{"class":473},[84,37415,37416],{"class":477},"AlexNet()\n",[84,37418,37419,37421,37423],{"class":86,"line":34125},[84,37420,34158],{"class":477},[84,37422,523],{"class":473},[84,37424,34163],{"class":477},[84,37426,37427,37429,37431,37434,37436,37438,37440],{"class":86,"line":34138},[84,37428,33720],{"class":477},[84,37430,523],{"class":473},[84,37432,37433],{"class":477},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[84,37435,34176],{"class":5545},[84,37437,523],{"class":473},[84,37439,1173],{"class":94},[84,37441,484],{"class":477},[84,37443,37444],{"class":86,"line":34144},[84,37445,34188],{"class":477},[28,37447,37448],{"start":70},[31,37449,34201],{},[75,37451,37453],{"className":30705,"code":37452,"language":30707,"meta":66,"style":66},"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",[81,37454,37455,37461,37471,37481,37491,37495,37505,37515,37526,37530,37534,37538,37546,37562,37572,37588,37598,37612,37616,37626,37636,37646,37652,37656,37660,37668,37672,37688,37696,37700,37704,37712,37720,37724,37728,37732,37736,37742,37746,37756,37764,37772,37776,37780,37784,37792,37796,37812,37816,37820,37824,37836,37840,37852,37856,37860,37872,37876,37886,37890,37894,37906,37910,37918,37922,37926,37934,37938,37946,37950,37954,37958,37962,37966,37982,37990,37994,37998,38046,38052,38056,38066,38074,38082,38086,38090,38094,38098,38106,38110,38126,38130,38138,38146],{"__ignoreMap":66},[84,37456,37457,37459],{"class":86,"line":87},[84,37458,30719],{"class":473},[84,37460,30722],{"class":477},[84,37462,37463,37465,37467,37469],{"class":86,"line":98},[84,37464,30719],{"class":473},[84,37466,31742],{"class":477},[84,37468,31710],{"class":473},[84,37470,31747],{"class":477},[84,37472,37473,37475,37477,37479],{"class":86,"line":70},[84,37474,31064],{"class":473},[84,37476,34229],{"class":477},[84,37478,30719],{"class":473},[84,37480,34234],{"class":477},[84,37482,37483,37485,37487,37489],{"class":86,"line":120},[84,37484,31064],{"class":473},[84,37486,31725],{"class":477},[84,37488,30719],{"class":473},[84,37490,31730],{"class":477},[84,37492,37493],{"class":86,"line":131},[84,37494,34249],{"class":328},[84,37496,37497,37499,37501,37503],{"class":86,"line":145},[84,37498,31064],{"class":473},[84,37500,31695],{"class":477},[84,37502,30719],{"class":473},[84,37504,31700],{"class":477},[84,37506,37507,37509,37511,37513],{"class":86,"line":156},[84,37508,31064],{"class":473},[84,37510,32241],{"class":477},[84,37512,30719],{"class":473},[84,37514,35884],{"class":477},[84,37516,37517,37519,37522,37524],{"class":86,"line":164},[84,37518,31064],{"class":473},[84,37520,37521],{"class":477}," 练习.AlexNet.model ",[84,37523,30719],{"class":473},[84,37525,35884],{"class":477},[84,37527,37528],{"class":86,"line":175},[84,37529,2729],{"emptyLinePlaceholder":403},[84,37531,37532],{"class":86,"line":185},[84,37533,2729],{"emptyLinePlaceholder":403},[84,37535,37536],{"class":86,"line":195},[84,37537,34278],{"class":328},[84,37539,37540,37542,37544],{"class":86,"line":206},[84,37541,32274],{"class":473},[84,37543,34285],{"class":90},[84,37545,32280],{"class":477},[84,37547,37548,37550,37552,37554,37556,37558,37560],{"class":86,"line":217},[84,37549,34292],{"class":477},[84,37551,523],{"class":473},[84,37553,31782],{"class":477},[84,37555,31785],{"class":5545},[84,37557,523],{"class":473},[84,37559,31790],{"class":104},[84,37561,31793],{"class":477},[84,37563,37564,37566,37568,37570],{"class":86,"line":227},[84,37565,34309],{"class":5545},[84,37567,523],{"class":473},[84,37569,34314],{"class":94},[84,37571,31793],{"class":477},[84,37573,37574,37576,37578,37580,37582,37584,37586],{"class":86,"line":238},[84,37575,34321],{"class":5545},[84,37577,523],{"class":473},[84,37579,31820],{"class":477},[84,37581,31823],{"class":5545},[84,37583,523],{"class":473},[84,37585,35776],{"class":94},[84,37587,31831],{"class":477},[84,37589,37590,37592,37594,37596],{"class":86,"line":249},[84,37591,34338],{"class":5545},[84,37593,523],{"class":473},[84,37595,31803],{"class":94},[84,37597,484],{"class":477},[84,37599,37600,37602,37604,37606,37608,37610],{"class":86,"line":262},[84,37601,34349],{"class":477},[84,37603,523],{"class":473},[84,37605,31861],{"class":477},[84,37607,31864],{"class":5545},[84,37609,523],{"class":473},[84,37611,34360],{"class":477},[84,37613,37614],{"class":86,"line":273},[84,37615,34365],{"class":328},[84,37617,37618,37620,37622,37624],{"class":86,"line":283},[84,37619,34370],{"class":5545},[84,37621,523],{"class":473},[84,37623,692],{"class":94},[84,37625,31793],{"class":477},[84,37627,37628,37630,37632,37634],{"class":86,"line":294},[84,37629,34381],{"class":5545},[84,37631,523],{"class":473},[84,37633,31803],{"class":94},[84,37635,31793],{"class":477},[84,37637,37638,37640,37642,37644],{"class":86,"line":2028},[84,37639,34392],{"class":5545},[84,37641,523],{"class":473},[84,37643,666],{"class":94},[84,37645,484],{"class":477},[84,37647,37648,37650],{"class":86,"line":2057},[84,37649,4419],{"class":473},[84,37651,34405],{"class":477},[84,37653,37654],{"class":86,"line":2062},[84,37655,2729],{"emptyLinePlaceholder":403},[84,37657,37658],{"class":86,"line":2079},[84,37659,34414],{"class":328},[84,37661,37662,37664,37666],{"class":86,"line":2084},[84,37663,32274],{"class":473},[84,37665,34421],{"class":90},[84,37667,34424],{"class":477},[84,37669,37670],{"class":86,"line":2089},[84,37671,34429],{"class":328},[84,37673,37674,37676,37678,37680,37682,37684,37686],{"class":86,"line":2094},[84,37675,31564],{"class":477},[84,37677,523],{"class":473},[84,37679,31571],{"class":104},[84,37681,2034],{"class":473},[84,37683,31576],{"class":477},[84,37685,2031],{"class":473},[84,37687,34446],{"class":104},[84,37689,37690,37692,37694],{"class":86,"line":2108},[84,37691,31616],{"class":477},[84,37693,523],{"class":473},[84,37695,32616],{"class":477},[84,37697,37698],{"class":86,"line":2113},[84,37699,2729],{"emptyLinePlaceholder":403},[84,37701,37702],{"class":86,"line":2906},[84,37703,34463],{"class":328},[84,37705,37706,37708,37710],{"class":86,"line":2920},[84,37707,34468],{"class":477},[84,37709,523],{"class":473},[84,37711,32669],{"class":94},[84,37713,37714,37716,37718],{"class":86,"line":2928},[84,37715,34477],{"class":477},[84,37717,523],{"class":473},[84,37719,3414],{"class":94},[84,37721,37722],{"class":86,"line":2933},[84,37723,2729],{"emptyLinePlaceholder":403},[84,37725,37726],{"class":86,"line":2939},[84,37727,34490],{"class":328},[84,37729,37730],{"class":86,"line":2945},[84,37731,34495],{"class":328},[84,37733,37734],{"class":86,"line":2950},[84,37735,34500],{"class":328},[84,37737,37738,37740],{"class":86,"line":8277},[84,37739,34505],{"class":473},[84,37741,33211],{"class":477},[84,37743,37744],{"class":86,"line":8301},[84,37745,34512],{"class":328},[84,37747,37748,37750,37752,37754],{"class":86,"line":8306},[84,37749,3732],{"class":473},[84,37751,34519],{"class":477},[84,37753,26371],{"class":473},[84,37755,34524],{"class":477},[84,37757,37758,37760,37762],{"class":86,"line":8312},[84,37759,34529],{"class":477},[84,37761,523],{"class":473},[84,37763,34534],{"class":477},[84,37765,37766,37768,37770],{"class":86,"line":8339},[84,37767,34539],{"class":477},[84,37769,523],{"class":473},[84,37771,34544],{"class":477},[84,37773,37774],{"class":86,"line":8344},[84,37775,34549],{"class":328},[84,37777,37778],{"class":86,"line":8350},[84,37779,33202],{"class":477},[84,37781,37782],{"class":86,"line":8362},[84,37783,34558],{"class":328},[84,37785,37786,37788,37790],{"class":86,"line":8374},[84,37787,32987],{"class":477},[84,37789,523],{"class":473},[84,37791,34567],{"class":477},[84,37793,37794],{"class":86,"line":8386},[84,37795,34572],{"class":328},[84,37797,37798,37800,37802,37804,37806,37808,37810],{"class":86,"line":10045},[84,37799,33004],{"class":477},[84,37801,523],{"class":473},[84,37803,33009],{"class":477},[84,37805,33012],{"class":5545},[84,37807,523],{"class":473},[84,37809,692],{"class":94},[84,37811,484],{"class":477},[84,37813,37814],{"class":86,"line":10070},[84,37815,34593],{"class":328},[84,37817,37818],{"class":86,"line":10093},[84,37819,34598],{"class":328},[84,37821,37822],{"class":86,"line":10117},[84,37823,34603],{"class":328},[84,37825,37826,37828,37830,37832,37834],{"class":86,"line":10122},[84,37827,34608],{"class":477},[84,37829,9806],{"class":473},[84,37831,33114],{"class":477},[84,37833,3278],{"class":473},[84,37835,34617],{"class":477},[84,37837,37838],{"class":86,"line":10127},[84,37839,34622],{"class":328},[84,37841,37842,37844,37846,37848,37850],{"class":86,"line":10132},[84,37843,34627],{"class":477},[84,37845,9806],{"class":473},[84,37847,34632],{"class":477},[84,37849,666],{"class":94},[84,37851,484],{"class":477},[84,37853,37854],{"class":86,"line":10141},[84,37855,2729],{"emptyLinePlaceholder":403},[84,37857,37858],{"class":86,"line":10146},[84,37859,34645],{"class":328},[84,37861,37862,37864,37866,37868,37870],{"class":86,"line":10152},[84,37863,34650],{"class":477},[84,37865,523],{"class":473},[84,37867,34655],{"class":477},[84,37869,1057],{"class":473},[84,37871,34660],{"class":477},[84,37873,37874],{"class":86,"line":10173},[84,37875,34665],{"class":328},[84,37877,37878,37880,37882,37884],{"class":86,"line":10179},[84,37879,32778],{"class":94},[84,37881,478],{"class":477},[84,37883,34674],{"class":104},[84,37885,34677],{"class":477},[84,37887,37888],{"class":86,"line":10193},[84,37889,2729],{"emptyLinePlaceholder":403},[84,37891,37892],{"class":86,"line":10199},[84,37893,34686],{"class":328},[84,37895,37896,37898,37900,37902,37904],{"class":86,"line":10226},[84,37897,1871],{"class":473},[84,37899,31547],{"class":94},[84,37901,3278],{"class":473},[84,37903,31552],{"class":104},[84,37905,4068],{"class":477},[84,37907,37908],{"class":86,"line":10235},[84,37909,34703],{"class":328},[84,37911,37912,37914,37916],{"class":86,"line":10241},[84,37913,31616],{"class":477},[84,37915,523],{"class":473},[84,37917,37416],{"class":477},[84,37919,37920],{"class":86,"line":10249},[84,37921,34716],{"class":328},[84,37923,37924],{"class":86,"line":10254},[84,37925,34721],{"class":328},[84,37927,37928,37930,37932],{"class":86,"line":16933},[84,37929,34726],{"class":477},[84,37931,34729],{"class":104},[84,37933,30824],{"class":477},[84,37935,37936],{"class":86,"line":16939},[84,37937,34736],{"class":328},[84,37939,37940,37942,37944],{"class":86,"line":16962},[84,37941,34349],{"class":477},[84,37943,523],{"class":473},[84,37945,34745],{"class":477},[84,37947,37948],{"class":86,"line":16968},[84,37949,34750],{"class":328},[84,37951,37952],{"class":86,"line":16991},[84,37953,34755],{"class":477},[84,37955,37956],{"class":86,"line":17005},[84,37957,2729],{"emptyLinePlaceholder":403},[84,37959,37960],{"class":86,"line":17025},[84,37961,34764],{"class":328},[84,37963,37964],{"class":86,"line":17031},[84,37965,34769],{"class":328},[84,37967,37968,37970,37972,37974,37976,37978,37980],{"class":86,"line":17042},[84,37969,31564],{"class":477},[84,37971,523],{"class":473},[84,37973,31571],{"class":104},[84,37975,2034],{"class":473},[84,37977,31576],{"class":477},[84,37979,2031],{"class":473},[84,37981,34446],{"class":104},[84,37983,37984,37986,37988],{"class":86,"line":17065},[84,37985,31616],{"class":477},[84,37987,523],{"class":473},[84,37989,32616],{"class":477},[84,37991,37992],{"class":86,"line":17087},[84,37993,34798],{"class":328},[84,37995,37996],{"class":86,"line":17092},[84,37997,34803],{"class":328},[84,37999,38000,38002,38004,38006,38008,38010,38012,38014,38016,38018,38020,38022,38024,38026,38028,38030,38032,38034,38036,38038,38040,38042,38044],{"class":86,"line":17098},[84,38001,34808],{"class":477},[84,38003,523],{"class":473},[84,38005,1363],{"class":477},[84,38007,34815],{"class":104},[84,38009,851],{"class":477},[84,38011,34820],{"class":104},[84,38013,851],{"class":477},[84,38015,34825],{"class":104},[84,38017,851],{"class":477},[84,38019,34830],{"class":104},[84,38021,851],{"class":477},[84,38023,34835],{"class":104},[84,38025,851],{"class":477},[84,38027,34840],{"class":104},[84,38029,851],{"class":477},[84,38031,34845],{"class":104},[84,38033,851],{"class":477},[84,38035,34850],{"class":104},[84,38037,851],{"class":477},[84,38039,34855],{"class":104},[84,38041,851],{"class":477},[84,38043,34860],{"class":104},[84,38045,33573],{"class":477},[84,38047,38048,38050],{"class":86,"line":17112},[84,38049,34505],{"class":473},[84,38051,33211],{"class":477},[84,38053,38054],{"class":86,"line":17125},[84,38055,34873],{"class":328},[84,38057,38058,38060,38062,38064],{"class":86,"line":17130},[84,38059,3732],{"class":473},[84,38061,34880],{"class":477},[84,38063,26371],{"class":473},[84,38065,34524],{"class":477},[84,38067,38068,38070,38072],{"class":86,"line":17144},[84,38069,32937],{"class":477},[84,38071,523],{"class":473},[84,38073,32942],{"class":477},[84,38075,38076,38078,38080],{"class":86,"line":17149},[84,38077,32952],{"class":477},[84,38079,523],{"class":473},[84,38081,32957],{"class":477},[84,38083,38084],{"class":86,"line":17155},[84,38085,2729],{"emptyLinePlaceholder":403},[84,38087,38088],{"class":86,"line":17160},[84,38089,34909],{"class":328},[84,38091,38092],{"class":86,"line":17174},[84,38093,33202],{"class":477},[84,38095,38096],{"class":86,"line":17179},[84,38097,34918],{"class":328},[84,38099,38100,38102,38104],{"class":86,"line":17184},[84,38101,32987],{"class":477},[84,38103,523],{"class":473},[84,38105,32992],{"class":477},[84,38107,38108],{"class":86,"line":17198},[84,38109,34931],{"class":328},[84,38111,38112,38114,38116,38118,38120,38122,38124],{"class":86,"line":17210},[84,38113,33004],{"class":477},[84,38115,523],{"class":473},[84,38117,33009],{"class":477},[84,38119,33012],{"class":5545},[84,38121,523],{"class":473},[84,38123,692],{"class":94},[84,38125,484],{"class":477},[84,38127,38128],{"class":86,"line":17215},[84,38129,34952],{"class":328},[84,38131,38132,38134,38136],{"class":86,"line":17228},[84,38133,34957],{"class":477},[84,38135,523],{"class":473},[84,38137,34962],{"class":477},[84,38139,38140,38142,38144],{"class":86,"line":17233},[84,38141,34967],{"class":477},[84,38143,523],{"class":473},[84,38145,34972],{"class":477},[84,38147,38148,38150,38152,38154,38156,38158,38160,38162],{"class":86,"line":17238},[84,38149,34977],{"class":94},[84,38151,478],{"class":477},[84,38153,34982],{"class":104},[84,38155,34985],{"class":477},[84,38157,34988],{"class":104},[84,38159,851],{"class":477},[84,38161,34993],{"class":104},[84,38163,34996],{"class":477},[23,38165,38167],{"id":38166},"_22vgg","2.2.VGG",[22327,38169,38171],{"id":38170},"_221原理","2.2.1.原理",[35,38173,38174],{},[64,38175],{"alt":66,"src":38176},"\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",[35,38178,38179],{},[64,38180],{"alt":66,"src":38181},"\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",[35,38183,38184],{},[64,38185],{"alt":66,"src":38186},"\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",[35,38188,38189],{},"参数详细描述：",[35,38191,38192],{},[64,38193],{"alt":66,"src":38194},"\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",[35,38196,38197],{},[64,38198],{"alt":66,"src":38199},"\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",[35,38201,38202],{},[64,38203],{"alt":66,"src":38204},"\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",[35,38206,38207],{},[64,38208],{"alt":66,"src":38209},"\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",[35,38211,38212],{},[64,38213],{"alt":66,"src":38214},"\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",[22327,38216,38218],{"id":38217},"_222代码实现","2.2.2.代码实现",[28,38220,38221],{},[31,38222,38223],{},"网络搭建",[75,38225,38227],{"className":30705,"code":38226,"language":30707,"meta":66,"style":66},"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",[81,38228,38229,38235,38247,38257,38267,38271,38288,38296,38315,38320,38325,38337,38375,38380,38416,38420,38449,38454,38459,38470,38506,38510,38546,38550,38578,38582,38587,38598,38634,38638,38674,38678,38714,38718,38746,38750,38755,38766,38803,38807,38843,38847,38883,38887,38915,38919,38924,38935,38971,38975,39011,39015,39051,39055,39083,39087,39092,39103,39108,39113,39118,39139,39143,39155,39159,39171,39175,39179,39184,39189,39204,39209,39219,39224,39239,39244,39263,39268,39277,39282,39292,39297,39302,39316,39321,39335,39343,39347,39351,39359,39370,39381,39392,39403,39414,39425,39431,39435,39440,39453,39473,39479,39488],{"__ignoreMap":66},[84,38230,38231,38233],{"class":86,"line":87},[84,38232,30719],{"class":473},[84,38234,30722],{"class":477},[84,38236,38237,38239,38242,38244],{"class":86,"line":98},[84,38238,31064],{"class":473},[84,38240,38241],{"class":477}," sympy.core.sympify ",[84,38243,30719],{"class":473},[84,38245,38246],{"class":477}," kernS\n",[84,38248,38249,38251,38253,38255],{"class":86,"line":70},[84,38250,31064],{"class":473},[84,38252,31067],{"class":477},[84,38254,30719],{"class":473},[84,38256,31072],{"class":477},[84,38258,38259,38261,38263,38265],{"class":86,"line":120},[84,38260,31064],{"class":473},[84,38262,31084],{"class":477},[84,38264,30719],{"class":473},[84,38266,31089],{"class":477},[84,38268,38269],{"class":86,"line":131},[84,38270,2729],{"emptyLinePlaceholder":403},[84,38272,38273,38275,38278,38280,38282,38284,38286],{"class":86,"line":145},[84,38274,15023],{"class":473},[84,38276,38277],{"class":90}," VGG16",[84,38279,478],{"class":477},[84,38281,31105],{"class":90},[84,38283,1031],{"class":477},[84,38285,31110],{"class":90},[84,38287,31113],{"class":477},[84,38289,38290,38292,38294],{"class":86,"line":156},[84,38291,31128],{"class":473},[84,38293,31131],{"class":94},[84,38295,31134],{"class":477},[84,38297,38298,38300,38302,38305,38307,38309,38311,38313],{"class":86,"line":164},[84,38299,31144],{"class":94},[84,38301,478],{"class":477},[84,38303,38304],{"class":94},"VGG16",[84,38306,12764],{"class":477},[84,38308,31150],{"class":94},[84,38310,31153],{"class":477},[84,38312,31156],{"class":94},[84,38314,2305],{"class":477},[84,38316,38317],{"class":86,"line":175},[84,38318,38319],{"class":328},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[84,38321,38322],{"class":86,"line":185},[84,38323,38324],{"class":328},"        # 这里用的是灰度图\n",[84,38326,38327,38329,38332,38334],{"class":86,"line":195},[84,38328,31172],{"class":94},[84,38330,38331],{"class":477},".block1",[84,38333,523],{"class":473},[84,38335,38336],{"class":477},"nn.Sequential(\n",[84,38338,38339,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372],{"class":86,"line":206},[84,38340,38341],{"class":477},"            nn.Conv2d(",[84,38343,31183],{"class":5545},[84,38345,523],{"class":473},[84,38347,692],{"class":94},[84,38349,851],{"class":477},[84,38351,31192],{"class":5545},[84,38353,523],{"class":473},[84,38355,678],{"class":94},[84,38357,851],{"class":477},[84,38359,31201],{"class":5545},[84,38361,523],{"class":473},[84,38363,547],{"class":94},[84,38365,851],{"class":477},[84,38367,31210],{"class":5545},[84,38369,523],{"class":473},[84,38371,692],{"class":94},[84,38373,38374],{"class":477},"),\n",[84,38376,38377],{"class":86,"line":217},[84,38378,38379],{"class":477},"            nn.ReLU(),\n",[84,38381,38382,38384,38386,38388,38390,38392,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414],{"class":86,"line":227},[84,38383,38341],{"class":477},[84,38385,31183],{"class":5545},[84,38387,523],{"class":473},[84,38389,678],{"class":94},[84,38391,851],{"class":477},[84,38393,31192],{"class":5545},[84,38395,523],{"class":473},[84,38397,678],{"class":94},[84,38399,851],{"class":477},[84,38401,31201],{"class":5545},[84,38403,523],{"class":473},[84,38405,547],{"class":94},[84,38407,851],{"class":477},[84,38409,31210],{"class":5545},[84,38411,523],{"class":473},[84,38413,692],{"class":94},[84,38415,38374],{"class":477},[84,38417,38418],{"class":86,"line":238},[84,38419,38379],{"class":477},[84,38421,38422,38425,38427,38429,38431,38433,38435,38437,38439,38441,38443,38445,38447],{"class":86,"line":249},[84,38423,38424],{"class":477},"            nn.MaxPool2d(",[84,38426,31201],{"class":5545},[84,38428,523],{"class":473},[84,38430,553],{"class":94},[84,38432,851],{"class":477},[84,38434,31256],{"class":5545},[84,38436,523],{"class":473},[84,38438,553],{"class":94},[84,38440,851],{"class":477},[84,38442,31210],{"class":5545},[84,38444,523],{"class":473},[84,38446,666],{"class":94},[84,38448,484],{"class":477},[84,38450,38451],{"class":86,"line":262},[84,38452,38453],{"class":477},"        )\n",[84,38455,38456],{"class":86,"line":273},[84,38457,38458],{"class":328},"        # 第二层\n",[84,38460,38461,38463,38466,38468],{"class":86,"line":283},[84,38462,31172],{"class":94},[84,38464,38465],{"class":477},".block2",[84,38467,523],{"class":473},[84,38469,38336],{"class":477},[84,38471,38472,38474,38476,38478,38480,38482,38484,38486,38488,38490,38492,38494,38496,38498,38500,38502,38504],{"class":86,"line":294},[84,38473,38341],{"class":477},[84,38475,31183],{"class":5545},[84,38477,523],{"class":473},[84,38479,678],{"class":94},[84,38481,851],{"class":477},[84,38483,31192],{"class":5545},[84,38485,523],{"class":473},[84,38487,32397],{"class":94},[84,38489,851],{"class":477},[84,38491,31201],{"class":5545},[84,38493,523],{"class":473},[84,38495,547],{"class":94},[84,38497,851],{"class":477},[84,38499,31210],{"class":5545},[84,38501,523],{"class":473},[84,38503,692],{"class":94},[84,38505,38374],{"class":477},[84,38507,38508],{"class":86,"line":2028},[84,38509,38379],{"class":477},[84,38511,38512,38514,38516,38518,38520,38522,38524,38526,38528,38530,38532,38534,38536,38538,38540,38542,38544],{"class":86,"line":2057},[84,38513,38341],{"class":477},[84,38515,31183],{"class":5545},[84,38517,523],{"class":473},[84,38519,32397],{"class":94},[84,38521,851],{"class":477},[84,38523,31192],{"class":5545},[84,38525,523],{"class":473},[84,38527,32397],{"class":94},[84,38529,851],{"class":477},[84,38531,31201],{"class":5545},[84,38533,523],{"class":473},[84,38535,547],{"class":94},[84,38537,851],{"class":477},[84,38539,31210],{"class":5545},[84,38541,523],{"class":473},[84,38543,692],{"class":94},[84,38545,38374],{"class":477},[84,38547,38548],{"class":86,"line":2062},[84,38549,38379],{"class":477},[84,38551,38552,38554,38556,38558,38560,38562,38564,38566,38568,38570,38572,38574,38576],{"class":86,"line":2079},[84,38553,38424],{"class":477},[84,38555,31201],{"class":5545},[84,38557,523],{"class":473},[84,38559,553],{"class":94},[84,38561,851],{"class":477},[84,38563,31256],{"class":5545},[84,38565,523],{"class":473},[84,38567,553],{"class":94},[84,38569,851],{"class":477},[84,38571,31210],{"class":5545},[84,38573,523],{"class":473},[84,38575,666],{"class":94},[84,38577,484],{"class":477},[84,38579,38580],{"class":86,"line":2084},[84,38581,38453],{"class":477},[84,38583,38584],{"class":86,"line":2089},[84,38585,38586],{"class":328},"        # 第三层\n",[84,38588,38589,38591,38594,38596],{"class":86,"line":2094},[84,38590,31172],{"class":94},[84,38592,38593],{"class":477},".block3",[84,38595,523],{"class":473},[84,38597,38336],{"class":477},[84,38599,38600,38602,38604,38606,38608,38610,38612,38614,38616,38618,38620,38622,38624,38626,38628,38630,38632],{"class":86,"line":2108},[84,38601,38341],{"class":477},[84,38603,31183],{"class":5545},[84,38605,523],{"class":473},[84,38607,32397],{"class":94},[84,38609,851],{"class":477},[84,38611,31192],{"class":5545},[84,38613,523],{"class":473},[84,38615,35197],{"class":94},[84,38617,851],{"class":477},[84,38619,31201],{"class":5545},[84,38621,523],{"class":473},[84,38623,547],{"class":94},[84,38625,851],{"class":477},[84,38627,31210],{"class":5545},[84,38629,523],{"class":473},[84,38631,692],{"class":94},[84,38633,38374],{"class":477},[84,38635,38636],{"class":86,"line":2113},[84,38637,38379],{"class":477},[84,38639,38640,38642,38644,38646,38648,38650,38652,38654,38656,38658,38660,38662,38664,38666,38668,38670,38672],{"class":86,"line":2906},[84,38641,38341],{"class":477},[84,38643,31183],{"class":5545},[84,38645,523],{"class":473},[84,38647,35197],{"class":94},[84,38649,851],{"class":477},[84,38651,31192],{"class":5545},[84,38653,523],{"class":473},[84,38655,35197],{"class":94},[84,38657,851],{"class":477},[84,38659,31201],{"class":5545},[84,38661,523],{"class":473},[84,38663,547],{"class":94},[84,38665,851],{"class":477},[84,38667,31210],{"class":5545},[84,38669,523],{"class":473},[84,38671,692],{"class":94},[84,38673,38374],{"class":477},[84,38675,38676],{"class":86,"line":2920},[84,38677,38379],{"class":477},[84,38679,38680,38682,38684,38686,38688,38690,38692,38694,38696,38698,38700,38702,38704,38706,38708,38710,38712],{"class":86,"line":2928},[84,38681,38341],{"class":477},[84,38683,31183],{"class":5545},[84,38685,523],{"class":473},[84,38687,35197],{"class":94},[84,38689,851],{"class":477},[84,38691,31192],{"class":5545},[84,38693,523],{"class":473},[84,38695,35197],{"class":94},[84,38697,851],{"class":477},[84,38699,31201],{"class":5545},[84,38701,523],{"class":473},[84,38703,547],{"class":94},[84,38705,851],{"class":477},[84,38707,31210],{"class":5545},[84,38709,523],{"class":473},[84,38711,692],{"class":94},[84,38713,38374],{"class":477},[84,38715,38716],{"class":86,"line":2933},[84,38717,38379],{"class":477},[84,38719,38720,38722,38724,38726,38728,38730,38732,38734,38736,38738,38740,38742,38744],{"class":86,"line":2939},[84,38721,38424],{"class":477},[84,38723,31201],{"class":5545},[84,38725,523],{"class":473},[84,38727,553],{"class":94},[84,38729,851],{"class":477},[84,38731,31256],{"class":5545},[84,38733,523],{"class":473},[84,38735,553],{"class":94},[84,38737,851],{"class":477},[84,38739,31210],{"class":5545},[84,38741,523],{"class":473},[84,38743,666],{"class":94},[84,38745,484],{"class":477},[84,38747,38748],{"class":86,"line":2945},[84,38749,38453],{"class":477},[84,38751,38752],{"class":86,"line":2950},[84,38753,38754],{"class":328},"        # 第四层\n",[84,38756,38757,38759,38762,38764],{"class":86,"line":8277},[84,38758,31172],{"class":94},[84,38760,38761],{"class":477},".block4",[84,38763,523],{"class":473},[84,38765,38336],{"class":477},[84,38767,38768,38770,38772,38774,38776,38778,38780,38782,38785,38787,38789,38791,38793,38795,38797,38799,38801],{"class":86,"line":8301},[84,38769,38341],{"class":477},[84,38771,31183],{"class":5545},[84,38773,523],{"class":473},[84,38775,35197],{"class":94},[84,38777,851],{"class":477},[84,38779,31192],{"class":5545},[84,38781,523],{"class":473},[84,38783,38784],{"class":94},"512",[84,38786,851],{"class":477},[84,38788,31201],{"class":5545},[84,38790,523],{"class":473},[84,38792,547],{"class":94},[84,38794,851],{"class":477},[84,38796,31210],{"class":5545},[84,38798,523],{"class":473},[84,38800,692],{"class":94},[84,38802,38374],{"class":477},[84,38804,38805],{"class":86,"line":8306},[84,38806,38379],{"class":477},[84,38808,38809,38811,38813,38815,38817,38819,38821,38823,38825,38827,38829,38831,38833,38835,38837,38839,38841],{"class":86,"line":8312},[84,38810,38341],{"class":477},[84,38812,31183],{"class":5545},[84,38814,523],{"class":473},[84,38816,38784],{"class":94},[84,38818,851],{"class":477},[84,38820,31192],{"class":5545},[84,38822,523],{"class":473},[84,38824,38784],{"class":94},[84,38826,851],{"class":477},[84,38828,31201],{"class":5545},[84,38830,523],{"class":473},[84,38832,547],{"class":94},[84,38834,851],{"class":477},[84,38836,31210],{"class":5545},[84,38838,523],{"class":473},[84,38840,692],{"class":94},[84,38842,38374],{"class":477},[84,38844,38845],{"class":86,"line":8339},[84,38846,38379],{"class":477},[84,38848,38849,38851,38853,38855,38857,38859,38861,38863,38865,38867,38869,38871,38873,38875,38877,38879,38881],{"class":86,"line":8344},[84,38850,38341],{"class":477},[84,38852,31183],{"class":5545},[84,38854,523],{"class":473},[84,38856,38784],{"class":94},[84,38858,851],{"class":477},[84,38860,31192],{"class":5545},[84,38862,523],{"class":473},[84,38864,38784],{"class":94},[84,38866,851],{"class":477},[84,38868,31201],{"class":5545},[84,38870,523],{"class":473},[84,38872,547],{"class":94},[84,38874,851],{"class":477},[84,38876,31210],{"class":5545},[84,38878,523],{"class":473},[84,38880,692],{"class":94},[84,38882,38374],{"class":477},[84,38884,38885],{"class":86,"line":8350},[84,38886,38379],{"class":477},[84,38888,38889,38891,38893,38895,38897,38899,38901,38903,38905,38907,38909,38911,38913],{"class":86,"line":8362},[84,38890,38424],{"class":477},[84,38892,31201],{"class":5545},[84,38894,523],{"class":473},[84,38896,553],{"class":94},[84,38898,851],{"class":477},[84,38900,31256],{"class":5545},[84,38902,523],{"class":473},[84,38904,553],{"class":94},[84,38906,851],{"class":477},[84,38908,31210],{"class":5545},[84,38910,523],{"class":473},[84,38912,666],{"class":94},[84,38914,484],{"class":477},[84,38916,38917],{"class":86,"line":8374},[84,38918,38453],{"class":477},[84,38920,38921],{"class":86,"line":8386},[84,38922,38923],{"class":328},"        # 第五层\n",[84,38925,38926,38928,38931,38933],{"class":86,"line":10045},[84,38927,31172],{"class":94},[84,38929,38930],{"class":477},".block5",[84,38932,523],{"class":473},[84,38934,38336],{"class":477},[84,38936,38937,38939,38941,38943,38945,38947,38949,38951,38953,38955,38957,38959,38961,38963,38965,38967,38969],{"class":86,"line":10070},[84,38938,38341],{"class":477},[84,38940,31183],{"class":5545},[84,38942,523],{"class":473},[84,38944,38784],{"class":94},[84,38946,851],{"class":477},[84,38948,31192],{"class":5545},[84,38950,523],{"class":473},[84,38952,38784],{"class":94},[84,38954,851],{"class":477},[84,38956,31201],{"class":5545},[84,38958,523],{"class":473},[84,38960,547],{"class":94},[84,38962,851],{"class":477},[84,38964,31210],{"class":5545},[84,38966,523],{"class":473},[84,38968,692],{"class":94},[84,38970,38374],{"class":477},[84,38972,38973],{"class":86,"line":10093},[84,38974,38379],{"class":477},[84,38976,38977,38979,38981,38983,38985,38987,38989,38991,38993,38995,38997,38999,39001,39003,39005,39007,39009],{"class":86,"line":10117},[84,38978,38341],{"class":477},[84,38980,31183],{"class":5545},[84,38982,523],{"class":473},[84,38984,38784],{"class":94},[84,38986,851],{"class":477},[84,38988,31192],{"class":5545},[84,38990,523],{"class":473},[84,38992,38784],{"class":94},[84,38994,851],{"class":477},[84,38996,31201],{"class":5545},[84,38998,523],{"class":473},[84,39000,547],{"class":94},[84,39002,851],{"class":477},[84,39004,31210],{"class":5545},[84,39006,523],{"class":473},[84,39008,692],{"class":94},[84,39010,38374],{"class":477},[84,39012,39013],{"class":86,"line":10122},[84,39014,38379],{"class":477},[84,39016,39017,39019,39021,39023,39025,39027,39029,39031,39033,39035,39037,39039,39041,39043,39045,39047,39049],{"class":86,"line":10127},[84,39018,38341],{"class":477},[84,39020,31183],{"class":5545},[84,39022,523],{"class":473},[84,39024,38784],{"class":94},[84,39026,851],{"class":477},[84,39028,31192],{"class":5545},[84,39030,523],{"class":473},[84,39032,38784],{"class":94},[84,39034,851],{"class":477},[84,39036,31201],{"class":5545},[84,39038,523],{"class":473},[84,39040,547],{"class":94},[84,39042,851],{"class":477},[84,39044,31210],{"class":5545},[84,39046,523],{"class":473},[84,39048,692],{"class":94},[84,39050,38374],{"class":477},[84,39052,39053],{"class":86,"line":10132},[84,39054,38379],{"class":477},[84,39056,39057,39059,39061,39063,39065,39067,39069,39071,39073,39075,39077,39079,39081],{"class":86,"line":10141},[84,39058,38424],{"class":477},[84,39060,31201],{"class":5545},[84,39062,523],{"class":473},[84,39064,553],{"class":94},[84,39066,851],{"class":477},[84,39068,31256],{"class":5545},[84,39070,523],{"class":473},[84,39072,553],{"class":94},[84,39074,851],{"class":477},[84,39076,31210],{"class":5545},[84,39078,523],{"class":473},[84,39080,666],{"class":94},[84,39082,484],{"class":477},[84,39084,39085],{"class":86,"line":10146},[84,39086,38453],{"class":477},[84,39088,39089],{"class":86,"line":10152},[84,39090,39091],{"class":328},"        # 全连接层\n",[84,39093,39094,39096,39099,39101],{"class":86,"line":10173},[84,39095,31172],{"class":94},[84,39097,39098],{"class":477},".block6",[84,39100,523],{"class":473},[84,39102,38336],{"class":477},[84,39104,39105],{"class":86,"line":10179},[84,39106,39107],{"class":328},"            # 平展操作\n",[84,39109,39110],{"class":86,"line":10193},[84,39111,39112],{"class":328},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[84,39114,39115],{"class":86,"line":10199},[84,39116,39117],{"class":477},"            nn.Flatten(),\n",[84,39119,39120,39123,39125,39127,39129,39131,39133,39135,39137],{"class":86,"line":10226},[84,39121,39122],{"class":477},"            nn.Linear(",[84,39124,842],{"class":94},[84,39126,928],{"class":473},[84,39128,842],{"class":94},[84,39130,928],{"class":473},[84,39132,38784],{"class":94},[84,39134,851],{"class":477},[84,39136,35197],{"class":94},[84,39138,38374],{"class":477},[84,39140,39141],{"class":86,"line":10235},[84,39142,38379],{"class":477},[84,39144,39145,39147,39149,39151,39153],{"class":86,"line":10241},[84,39146,39122],{"class":477},[84,39148,35197],{"class":94},[84,39150,851],{"class":477},[84,39152,32397],{"class":94},[84,39154,38374],{"class":477},[84,39156,39157],{"class":86,"line":10249},[84,39158,38379],{"class":477},[84,39160,39161,39163,39165,39167,39169],{"class":86,"line":10254},[84,39162,39122],{"class":477},[84,39164,32397],{"class":94},[84,39166,851],{"class":477},[84,39168,919],{"class":94},[84,39170,484],{"class":477},[84,39172,39173],{"class":86,"line":16933},[84,39174,38453],{"class":477},[84,39176,39177],{"class":86,"line":16939},[84,39178,2729],{"emptyLinePlaceholder":403},[84,39180,39181],{"class":86,"line":16962},[84,39182,39183],{"class":328},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[84,39185,39186],{"class":86,"line":16968},[84,39187,39188],{"class":328},"        # 循环遍历模型\n",[84,39190,39191,39193,39196,39198,39201],{"class":86,"line":16991},[84,39192,3732],{"class":473},[84,39194,39195],{"class":477}," m ",[84,39197,26371],{"class":473},[84,39199,39200],{"class":94}," self",[84,39202,39203],{"class":477},".modules():\n",[84,39205,39206],{"class":86,"line":17005},[84,39207,39208],{"class":328},"            # print(m)\n",[84,39210,39211,39213,39216],{"class":86,"line":17025},[84,39212,4971],{"class":473},[84,39214,39215],{"class":94}," isinstance",[84,39217,39218],{"class":477},"(m,nn.Conv2d):\n",[84,39220,39221],{"class":86,"line":17031},[84,39222,39223],{"class":328},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[84,39225,39226,39229,39232,39234,39237],{"class":86,"line":17042},[84,39227,39228],{"class":477},"                nn.init.kaiming_normal_(m.weight,",[84,39230,39231],{"class":5545},"nonlinearity",[84,39233,523],{"class":473},[84,39235,39236],{"class":104},"'relu'",[84,39238,484],{"class":477},[84,39240,39241],{"class":86,"line":17065},[84,39242,39243],{"class":328},"                # 判断b参数是否存在\n",[84,39245,39246,39249,39252,39255,39258,39261],{"class":86,"line":17087},[84,39247,39248],{"class":473},"                if",[84,39250,39251],{"class":477}," m.bias ",[84,39253,39254],{"class":473},"is",[84,39256,39257],{"class":473}," not",[84,39259,39260],{"class":94}," None",[84,39262,4068],{"class":477},[84,39264,39265],{"class":86,"line":17092},[84,39266,39267],{"class":328},"                    # 如果参数不存在的化初始化b=0\n",[84,39269,39270,39273,39275],{"class":86,"line":17098},[84,39271,39272],{"class":477},"                    nn.init.constant_(m.bias,",[84,39274,666],{"class":94},[84,39276,484],{"class":477},[84,39278,39279],{"class":86,"line":17112},[84,39280,39281],{"class":328},"            # 全连接层初始化\n",[84,39283,39284,39287,39289],{"class":86,"line":17125},[84,39285,39286],{"class":473},"            elif",[84,39288,39215],{"class":94},[84,39290,39291],{"class":477},"(m,nn.Linear):\n",[84,39293,39294],{"class":86,"line":17130},[84,39295,39296],{"class":328},"                # 这个初始化方法是利用的是正太分布的方式\n",[84,39298,39299],{"class":86,"line":17144},[84,39300,39301],{"class":328},"                # 均值为0，方差为0.01\n",[84,39303,39304,39307,39309,39311,39314],{"class":86,"line":17149},[84,39305,39306],{"class":477},"                nn.init.normal_(m.weight,",[84,39308,666],{"class":94},[84,39310,851],{"class":477},[84,39312,39313],{"class":94},"0.01",[84,39315,484],{"class":477},[84,39317,39318],{"class":86,"line":17155},[84,39319,39320],{"class":328},"                # 初始化b参数\n",[84,39322,39323,39325,39327,39329,39331,39333],{"class":86,"line":17160},[84,39324,39248],{"class":473},[84,39326,39251],{"class":477},[84,39328,39254],{"class":473},[84,39330,39257],{"class":473},[84,39332,39260],{"class":94},[84,39334,4068],{"class":477},[84,39336,39337,39339,39341],{"class":86,"line":17174},[84,39338,39272],{"class":477},[84,39340,666],{"class":94},[84,39342,484],{"class":477},[84,39344,39345],{"class":86,"line":17179},[84,39346,2729],{"emptyLinePlaceholder":403},[84,39348,39349],{"class":86,"line":17184},[84,39350,35492],{"class":328},[84,39352,39353,39355,39357],{"class":86,"line":17198},[84,39354,31128],{"class":473},[84,39356,31420],{"class":90},[84,39358,31423],{"class":477},[84,39360,39361,39363,39365,39367],{"class":86,"line":17210},[84,39362,31428],{"class":477},[84,39364,523],{"class":473},[84,39366,31150],{"class":94},[84,39368,39369],{"class":477},".block1(x)\n",[84,39371,39372,39374,39376,39378],{"class":86,"line":17215},[84,39373,31428],{"class":477},[84,39375,523],{"class":473},[84,39377,31150],{"class":94},[84,39379,39380],{"class":477},".block2(x)\n",[84,39382,39383,39385,39387,39389],{"class":86,"line":17228},[84,39384,31428],{"class":477},[84,39386,523],{"class":473},[84,39388,31150],{"class":94},[84,39390,39391],{"class":477},".block3(x)\n",[84,39393,39394,39396,39398,39400],{"class":86,"line":17233},[84,39395,31428],{"class":477},[84,39397,523],{"class":473},[84,39399,31150],{"class":94},[84,39401,39402],{"class":477},".block4(x)\n",[84,39404,39405,39407,39409,39411],{"class":86,"line":17238},[84,39406,31428],{"class":477},[84,39408,523],{"class":473},[84,39410,31150],{"class":94},[84,39412,39413],{"class":477},".block5(x)\n",[84,39415,39416,39418,39420,39422],{"class":86,"line":17243},[84,39417,31428],{"class":477},[84,39419,523],{"class":473},[84,39421,31150],{"class":94},[84,39423,39424],{"class":477},".block6(x)\n",[84,39426,39427,39429],{"class":86,"line":17256},[84,39428,15081],{"class":473},[84,39430,31536],{"class":477},[84,39432,39433],{"class":86,"line":17261},[84,39434,2729],{"emptyLinePlaceholder":403},[84,39436,39437],{"class":86,"line":32960},[84,39438,39439],{"class":328},"# 验证模型\n",[84,39441,39442,39444,39446,39448,39451],{"class":86,"line":32966},[84,39443,1871],{"class":473},[84,39445,31547],{"class":94},[84,39447,3278],{"class":473},[84,39449,39450],{"class":104},"'__main__'",[84,39452,4068],{"class":477},[84,39454,39455,39457,39459,39461,39463,39465,39467,39469,39471],{"class":86,"line":32972},[84,39456,31564],{"class":477},[84,39458,523],{"class":473},[84,39460,30778],{"class":477},[84,39462,31571],{"class":104},[84,39464,2034],{"class":473},[84,39466,31576],{"class":477},[84,39468,2031],{"class":473},[84,39470,30803],{"class":104},[84,39472,484],{"class":477},[84,39474,39475,39477],{"class":86,"line":32978},[84,39476,31626],{"class":94},[84,39478,30812],{"class":477},[84,39480,39481,39483,39485],{"class":86,"line":32984},[84,39482,31616],{"class":477},[84,39484,523],{"class":473},[84,39486,39487],{"class":477},"VGG16().to(device)\n",[84,39489,39490,39492,39494,39496,39498,39500,39502,39504],{"class":86,"line":32995},[84,39491,31626],{"class":94},[84,39493,31629],{"class":477},[84,39495,692],{"class":94},[84,39497,851],{"class":477},[84,39499,31828],{"class":94},[84,39501,851],{"class":477},[84,39503,31828],{"class":94},[84,39505,31642],{"class":477},[28,39507,39508],{"start":98},[31,39509,39510],{},"训练代码",[35,39512,39513],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[35,39515,39516],{},"解决方式:",[35,39518,39519],{},"①权重初始化",[75,39521,39523],{"className":30705,"code":39522,"language":30707,"meta":66,"style":66},"# 权重初始化,保证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",[81,39524,39525,39530,39535,39547,39552,39560,39565,39578,39583,39597,39602,39611,39616,39625,39630,39635,39648,39653,39667],{"__ignoreMap":66},[84,39526,39527],{"class":86,"line":87},[84,39528,39529],{"class":328},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[84,39531,39532],{"class":86,"line":98},[84,39533,39534],{"class":328},"# 循环遍历模型\n",[84,39536,39537,39539,39541,39543,39545],{"class":86,"line":70},[84,39538,3354],{"class":473},[84,39540,39195],{"class":477},[84,39542,26371],{"class":473},[84,39544,39200],{"class":94},[84,39546,39203],{"class":477},[84,39548,39549],{"class":86,"line":120},[84,39550,39551],{"class":328},"    # print(m)\n",[84,39553,39554,39556,39558],{"class":86,"line":131},[84,39555,3430],{"class":473},[84,39557,39215],{"class":94},[84,39559,39218],{"class":477},[84,39561,39562],{"class":86,"line":145},[84,39563,39564],{"class":328},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[84,39566,39567,39570,39572,39574,39576],{"class":86,"line":156},[84,39568,39569],{"class":477},"        nn.init.kaiming_normal_(m.weight,",[84,39571,39231],{"class":5545},[84,39573,523],{"class":473},[84,39575,39236],{"class":104},[84,39577,484],{"class":477},[84,39579,39580],{"class":86,"line":164},[84,39581,39582],{"class":328},"        # 判断b参数是否存在\n",[84,39584,39585,39587,39589,39591,39593,39595],{"class":86,"line":175},[84,39586,2826],{"class":473},[84,39588,39251],{"class":477},[84,39590,39254],{"class":473},[84,39592,39257],{"class":473},[84,39594,39260],{"class":94},[84,39596,4068],{"class":477},[84,39598,39599],{"class":86,"line":185},[84,39600,39601],{"class":328},"            # 如果参数不存在的化初始化b=0\n",[84,39603,39604,39607,39609],{"class":86,"line":195},[84,39605,39606],{"class":477},"            nn.init.constant_(m.bias,",[84,39608,666],{"class":94},[84,39610,484],{"class":477},[84,39612,39613],{"class":86,"line":206},[84,39614,39615],{"class":328},"    # 全连接层初始化\n",[84,39617,39618,39621,39623],{"class":86,"line":217},[84,39619,39620],{"class":473},"    elif",[84,39622,39215],{"class":94},[84,39624,39291],{"class":477},[84,39626,39627],{"class":86,"line":227},[84,39628,39629],{"class":328},"        # 这个初始化方法是利用的是正太分布的方式\n",[84,39631,39632],{"class":86,"line":238},[84,39633,39634],{"class":328},"        # 均值为0，方差为0.01\n",[84,39636,39637,39640,39642,39644,39646],{"class":86,"line":249},[84,39638,39639],{"class":477},"        nn.init.normal_(m.weight,",[84,39641,666],{"class":94},[84,39643,851],{"class":477},[84,39645,39313],{"class":94},[84,39647,484],{"class":477},[84,39649,39650],{"class":86,"line":262},[84,39651,39652],{"class":328},"        # 初始化b参数\n",[84,39654,39655,39657,39659,39661,39663,39665],{"class":86,"line":273},[84,39656,2826],{"class":473},[84,39658,39251],{"class":477},[84,39660,39254],{"class":473},[84,39662,39257],{"class":473},[84,39664,39260],{"class":94},[84,39666,4068],{"class":477},[84,39668,39669,39671,39673],{"class":86,"line":283},[84,39670,39606],{"class":477},[84,39672,666],{"class":94},[84,39674,484],{"class":477},[35,39676,39677],{},"②尽可能地增加批次",[35,39679,39680],{},"训练完整代码：",[75,39682,39683],{"className":30705,"code":38226,"language":30707,"meta":66,"style":66},[81,39684,39685,39691,39701,39711,39721,39725,39741,39749,39767,39771,39775,39785,39821,39825,39861,39865,39893,39897,39901,39911,39947,39951,39987,39991,40019,40023,40027,40037,40073,40077,40113,40117,40153,40157,40185,40189,40193,40203,40239,40243,40279,40283,40319,40323,40351,40355,40359,40369,40405,40409,40445,40449,40485,40489,40517,40521,40525,40535,40539,40543,40547,40567,40571,40583,40587,40599,40603,40607,40611,40615,40627,40631,40639,40643,40655,40659,40673,40677,40685,40689,40697,40701,40705,40717,40721,40735,40743,40747,40751,40759,40769,40779,40789,40799,40809,40819,40825,40829,40833,40845,40865,40871,40879],{"__ignoreMap":66},[84,39686,39687,39689],{"class":86,"line":87},[84,39688,30719],{"class":473},[84,39690,30722],{"class":477},[84,39692,39693,39695,39697,39699],{"class":86,"line":98},[84,39694,31064],{"class":473},[84,39696,38241],{"class":477},[84,39698,30719],{"class":473},[84,39700,38246],{"class":477},[84,39702,39703,39705,39707,39709],{"class":86,"line":70},[84,39704,31064],{"class":473},[84,39706,31067],{"class":477},[84,39708,30719],{"class":473},[84,39710,31072],{"class":477},[84,39712,39713,39715,39717,39719],{"class":86,"line":120},[84,39714,31064],{"class":473},[84,39716,31084],{"class":477},[84,39718,30719],{"class":473},[84,39720,31089],{"class":477},[84,39722,39723],{"class":86,"line":131},[84,39724,2729],{"emptyLinePlaceholder":403},[84,39726,39727,39729,39731,39733,39735,39737,39739],{"class":86,"line":145},[84,39728,15023],{"class":473},[84,39730,38277],{"class":90},[84,39732,478],{"class":477},[84,39734,31105],{"class":90},[84,39736,1031],{"class":477},[84,39738,31110],{"class":90},[84,39740,31113],{"class":477},[84,39742,39743,39745,39747],{"class":86,"line":156},[84,39744,31128],{"class":473},[84,39746,31131],{"class":94},[84,39748,31134],{"class":477},[84,39750,39751,39753,39755,39757,39759,39761,39763,39765],{"class":86,"line":164},[84,39752,31144],{"class":94},[84,39754,478],{"class":477},[84,39756,38304],{"class":94},[84,39758,12764],{"class":477},[84,39760,31150],{"class":94},[84,39762,31153],{"class":477},[84,39764,31156],{"class":94},[84,39766,2305],{"class":477},[84,39768,39769],{"class":86,"line":175},[84,39770,38319],{"class":328},[84,39772,39773],{"class":86,"line":185},[84,39774,38324],{"class":328},[84,39776,39777,39779,39781,39783],{"class":86,"line":195},[84,39778,31172],{"class":94},[84,39780,38331],{"class":477},[84,39782,523],{"class":473},[84,39784,38336],{"class":477},[84,39786,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819],{"class":86,"line":206},[84,39788,38341],{"class":477},[84,39790,31183],{"class":5545},[84,39792,523],{"class":473},[84,39794,692],{"class":94},[84,39796,851],{"class":477},[84,39798,31192],{"class":5545},[84,39800,523],{"class":473},[84,39802,678],{"class":94},[84,39804,851],{"class":477},[84,39806,31201],{"class":5545},[84,39808,523],{"class":473},[84,39810,547],{"class":94},[84,39812,851],{"class":477},[84,39814,31210],{"class":5545},[84,39816,523],{"class":473},[84,39818,692],{"class":94},[84,39820,38374],{"class":477},[84,39822,39823],{"class":86,"line":217},[84,39824,38379],{"class":477},[84,39826,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857,39859],{"class":86,"line":227},[84,39828,38341],{"class":477},[84,39830,31183],{"class":5545},[84,39832,523],{"class":473},[84,39834,678],{"class":94},[84,39836,851],{"class":477},[84,39838,31192],{"class":5545},[84,39840,523],{"class":473},[84,39842,678],{"class":94},[84,39844,851],{"class":477},[84,39846,31201],{"class":5545},[84,39848,523],{"class":473},[84,39850,547],{"class":94},[84,39852,851],{"class":477},[84,39854,31210],{"class":5545},[84,39856,523],{"class":473},[84,39858,692],{"class":94},[84,39860,38374],{"class":477},[84,39862,39863],{"class":86,"line":238},[84,39864,38379],{"class":477},[84,39866,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891],{"class":86,"line":249},[84,39868,38424],{"class":477},[84,39870,31201],{"class":5545},[84,39872,523],{"class":473},[84,39874,553],{"class":94},[84,39876,851],{"class":477},[84,39878,31256],{"class":5545},[84,39880,523],{"class":473},[84,39882,553],{"class":94},[84,39884,851],{"class":477},[84,39886,31210],{"class":5545},[84,39888,523],{"class":473},[84,39890,666],{"class":94},[84,39892,484],{"class":477},[84,39894,39895],{"class":86,"line":262},[84,39896,38453],{"class":477},[84,39898,39899],{"class":86,"line":273},[84,39900,38458],{"class":328},[84,39902,39903,39905,39907,39909],{"class":86,"line":283},[84,39904,31172],{"class":94},[84,39906,38465],{"class":477},[84,39908,523],{"class":473},[84,39910,38336],{"class":477},[84,39912,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945],{"class":86,"line":294},[84,39914,38341],{"class":477},[84,39916,31183],{"class":5545},[84,39918,523],{"class":473},[84,39920,678],{"class":94},[84,39922,851],{"class":477},[84,39924,31192],{"class":5545},[84,39926,523],{"class":473},[84,39928,32397],{"class":94},[84,39930,851],{"class":477},[84,39932,31201],{"class":5545},[84,39934,523],{"class":473},[84,39936,547],{"class":94},[84,39938,851],{"class":477},[84,39940,31210],{"class":5545},[84,39942,523],{"class":473},[84,39944,692],{"class":94},[84,39946,38374],{"class":477},[84,39948,39949],{"class":86,"line":2028},[84,39950,38379],{"class":477},[84,39952,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985],{"class":86,"line":2057},[84,39954,38341],{"class":477},[84,39956,31183],{"class":5545},[84,39958,523],{"class":473},[84,39960,32397],{"class":94},[84,39962,851],{"class":477},[84,39964,31192],{"class":5545},[84,39966,523],{"class":473},[84,39968,32397],{"class":94},[84,39970,851],{"class":477},[84,39972,31201],{"class":5545},[84,39974,523],{"class":473},[84,39976,547],{"class":94},[84,39978,851],{"class":477},[84,39980,31210],{"class":5545},[84,39982,523],{"class":473},[84,39984,692],{"class":94},[84,39986,38374],{"class":477},[84,39988,39989],{"class":86,"line":2062},[84,39990,38379],{"class":477},[84,39992,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017],{"class":86,"line":2079},[84,39994,38424],{"class":477},[84,39996,31201],{"class":5545},[84,39998,523],{"class":473},[84,40000,553],{"class":94},[84,40002,851],{"class":477},[84,40004,31256],{"class":5545},[84,40006,523],{"class":473},[84,40008,553],{"class":94},[84,40010,851],{"class":477},[84,40012,31210],{"class":5545},[84,40014,523],{"class":473},[84,40016,666],{"class":94},[84,40018,484],{"class":477},[84,40020,40021],{"class":86,"line":2084},[84,40022,38453],{"class":477},[84,40024,40025],{"class":86,"line":2089},[84,40026,38586],{"class":328},[84,40028,40029,40031,40033,40035],{"class":86,"line":2094},[84,40030,31172],{"class":94},[84,40032,38593],{"class":477},[84,40034,523],{"class":473},[84,40036,38336],{"class":477},[84,40038,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071],{"class":86,"line":2108},[84,40040,38341],{"class":477},[84,40042,31183],{"class":5545},[84,40044,523],{"class":473},[84,40046,32397],{"class":94},[84,40048,851],{"class":477},[84,40050,31192],{"class":5545},[84,40052,523],{"class":473},[84,40054,35197],{"class":94},[84,40056,851],{"class":477},[84,40058,31201],{"class":5545},[84,40060,523],{"class":473},[84,40062,547],{"class":94},[84,40064,851],{"class":477},[84,40066,31210],{"class":5545},[84,40068,523],{"class":473},[84,40070,692],{"class":94},[84,40072,38374],{"class":477},[84,40074,40075],{"class":86,"line":2113},[84,40076,38379],{"class":477},[84,40078,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111],{"class":86,"line":2906},[84,40080,38341],{"class":477},[84,40082,31183],{"class":5545},[84,40084,523],{"class":473},[84,40086,35197],{"class":94},[84,40088,851],{"class":477},[84,40090,31192],{"class":5545},[84,40092,523],{"class":473},[84,40094,35197],{"class":94},[84,40096,851],{"class":477},[84,40098,31201],{"class":5545},[84,40100,523],{"class":473},[84,40102,547],{"class":94},[84,40104,851],{"class":477},[84,40106,31210],{"class":5545},[84,40108,523],{"class":473},[84,40110,692],{"class":94},[84,40112,38374],{"class":477},[84,40114,40115],{"class":86,"line":2920},[84,40116,38379],{"class":477},[84,40118,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151],{"class":86,"line":2928},[84,40120,38341],{"class":477},[84,40122,31183],{"class":5545},[84,40124,523],{"class":473},[84,40126,35197],{"class":94},[84,40128,851],{"class":477},[84,40130,31192],{"class":5545},[84,40132,523],{"class":473},[84,40134,35197],{"class":94},[84,40136,851],{"class":477},[84,40138,31201],{"class":5545},[84,40140,523],{"class":473},[84,40142,547],{"class":94},[84,40144,851],{"class":477},[84,40146,31210],{"class":5545},[84,40148,523],{"class":473},[84,40150,692],{"class":94},[84,40152,38374],{"class":477},[84,40154,40155],{"class":86,"line":2933},[84,40156,38379],{"class":477},[84,40158,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183],{"class":86,"line":2939},[84,40160,38424],{"class":477},[84,40162,31201],{"class":5545},[84,40164,523],{"class":473},[84,40166,553],{"class":94},[84,40168,851],{"class":477},[84,40170,31256],{"class":5545},[84,40172,523],{"class":473},[84,40174,553],{"class":94},[84,40176,851],{"class":477},[84,40178,31210],{"class":5545},[84,40180,523],{"class":473},[84,40182,666],{"class":94},[84,40184,484],{"class":477},[84,40186,40187],{"class":86,"line":2945},[84,40188,38453],{"class":477},[84,40190,40191],{"class":86,"line":2950},[84,40192,38754],{"class":328},[84,40194,40195,40197,40199,40201],{"class":86,"line":8277},[84,40196,31172],{"class":94},[84,40198,38761],{"class":477},[84,40200,523],{"class":473},[84,40202,38336],{"class":477},[84,40204,40205,40207,40209,40211,40213,40215,40217,40219,40221,40223,40225,40227,40229,40231,40233,40235,40237],{"class":86,"line":8301},[84,40206,38341],{"class":477},[84,40208,31183],{"class":5545},[84,40210,523],{"class":473},[84,40212,35197],{"class":94},[84,40214,851],{"class":477},[84,40216,31192],{"class":5545},[84,40218,523],{"class":473},[84,40220,38784],{"class":94},[84,40222,851],{"class":477},[84,40224,31201],{"class":5545},[84,40226,523],{"class":473},[84,40228,547],{"class":94},[84,40230,851],{"class":477},[84,40232,31210],{"class":5545},[84,40234,523],{"class":473},[84,40236,692],{"class":94},[84,40238,38374],{"class":477},[84,40240,40241],{"class":86,"line":8306},[84,40242,38379],{"class":477},[84,40244,40245,40247,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277],{"class":86,"line":8312},[84,40246,38341],{"class":477},[84,40248,31183],{"class":5545},[84,40250,523],{"class":473},[84,40252,38784],{"class":94},[84,40254,851],{"class":477},[84,40256,31192],{"class":5545},[84,40258,523],{"class":473},[84,40260,38784],{"class":94},[84,40262,851],{"class":477},[84,40264,31201],{"class":5545},[84,40266,523],{"class":473},[84,40268,547],{"class":94},[84,40270,851],{"class":477},[84,40272,31210],{"class":5545},[84,40274,523],{"class":473},[84,40276,692],{"class":94},[84,40278,38374],{"class":477},[84,40280,40281],{"class":86,"line":8339},[84,40282,38379],{"class":477},[84,40284,40285,40287,40289,40291,40293,40295,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317],{"class":86,"line":8344},[84,40286,38341],{"class":477},[84,40288,31183],{"class":5545},[84,40290,523],{"class":473},[84,40292,38784],{"class":94},[84,40294,851],{"class":477},[84,40296,31192],{"class":5545},[84,40298,523],{"class":473},[84,40300,38784],{"class":94},[84,40302,851],{"class":477},[84,40304,31201],{"class":5545},[84,40306,523],{"class":473},[84,40308,547],{"class":94},[84,40310,851],{"class":477},[84,40312,31210],{"class":5545},[84,40314,523],{"class":473},[84,40316,692],{"class":94},[84,40318,38374],{"class":477},[84,40320,40321],{"class":86,"line":8350},[84,40322,38379],{"class":477},[84,40324,40325,40327,40329,40331,40333,40335,40337,40339,40341,40343,40345,40347,40349],{"class":86,"line":8362},[84,40326,38424],{"class":477},[84,40328,31201],{"class":5545},[84,40330,523],{"class":473},[84,40332,553],{"class":94},[84,40334,851],{"class":477},[84,40336,31256],{"class":5545},[84,40338,523],{"class":473},[84,40340,553],{"class":94},[84,40342,851],{"class":477},[84,40344,31210],{"class":5545},[84,40346,523],{"class":473},[84,40348,666],{"class":94},[84,40350,484],{"class":477},[84,40352,40353],{"class":86,"line":8374},[84,40354,38453],{"class":477},[84,40356,40357],{"class":86,"line":8386},[84,40358,38923],{"class":328},[84,40360,40361,40363,40365,40367],{"class":86,"line":10045},[84,40362,31172],{"class":94},[84,40364,38930],{"class":477},[84,40366,523],{"class":473},[84,40368,38336],{"class":477},[84,40370,40371,40373,40375,40377,40379,40381,40383,40385,40387,40389,40391,40393,40395,40397,40399,40401,40403],{"class":86,"line":10070},[84,40372,38341],{"class":477},[84,40374,31183],{"class":5545},[84,40376,523],{"class":473},[84,40378,38784],{"class":94},[84,40380,851],{"class":477},[84,40382,31192],{"class":5545},[84,40384,523],{"class":473},[84,40386,38784],{"class":94},[84,40388,851],{"class":477},[84,40390,31201],{"class":5545},[84,40392,523],{"class":473},[84,40394,547],{"class":94},[84,40396,851],{"class":477},[84,40398,31210],{"class":5545},[84,40400,523],{"class":473},[84,40402,692],{"class":94},[84,40404,38374],{"class":477},[84,40406,40407],{"class":86,"line":10093},[84,40408,38379],{"class":477},[84,40410,40411,40413,40415,40417,40419,40421,40423,40425,40427,40429,40431,40433,40435,40437,40439,40441,40443],{"class":86,"line":10117},[84,40412,38341],{"class":477},[84,40414,31183],{"class":5545},[84,40416,523],{"class":473},[84,40418,38784],{"class":94},[84,40420,851],{"class":477},[84,40422,31192],{"class":5545},[84,40424,523],{"class":473},[84,40426,38784],{"class":94},[84,40428,851],{"class":477},[84,40430,31201],{"class":5545},[84,40432,523],{"class":473},[84,40434,547],{"class":94},[84,40436,851],{"class":477},[84,40438,31210],{"class":5545},[84,40440,523],{"class":473},[84,40442,692],{"class":94},[84,40444,38374],{"class":477},[84,40446,40447],{"class":86,"line":10122},[84,40448,38379],{"class":477},[84,40450,40451,40453,40455,40457,40459,40461,40463,40465,40467,40469,40471,40473,40475,40477,40479,40481,40483],{"class":86,"line":10127},[84,40452,38341],{"class":477},[84,40454,31183],{"class":5545},[84,40456,523],{"class":473},[84,40458,38784],{"class":94},[84,40460,851],{"class":477},[84,40462,31192],{"class":5545},[84,40464,523],{"class":473},[84,40466,38784],{"class":94},[84,40468,851],{"class":477},[84,40470,31201],{"class":5545},[84,40472,523],{"class":473},[84,40474,547],{"class":94},[84,40476,851],{"class":477},[84,40478,31210],{"class":5545},[84,40480,523],{"class":473},[84,40482,692],{"class":94},[84,40484,38374],{"class":477},[84,40486,40487],{"class":86,"line":10132},[84,40488,38379],{"class":477},[84,40490,40491,40493,40495,40497,40499,40501,40503,40505,40507,40509,40511,40513,40515],{"class":86,"line":10141},[84,40492,38424],{"class":477},[84,40494,31201],{"class":5545},[84,40496,523],{"class":473},[84,40498,553],{"class":94},[84,40500,851],{"class":477},[84,40502,31256],{"class":5545},[84,40504,523],{"class":473},[84,40506,553],{"class":94},[84,40508,851],{"class":477},[84,40510,31210],{"class":5545},[84,40512,523],{"class":473},[84,40514,666],{"class":94},[84,40516,484],{"class":477},[84,40518,40519],{"class":86,"line":10146},[84,40520,38453],{"class":477},[84,40522,40523],{"class":86,"line":10152},[84,40524,39091],{"class":328},[84,40526,40527,40529,40531,40533],{"class":86,"line":10173},[84,40528,31172],{"class":94},[84,40530,39098],{"class":477},[84,40532,523],{"class":473},[84,40534,38336],{"class":477},[84,40536,40537],{"class":86,"line":10179},[84,40538,39107],{"class":328},[84,40540,40541],{"class":86,"line":10193},[84,40542,39112],{"class":328},[84,40544,40545],{"class":86,"line":10199},[84,40546,39117],{"class":477},[84,40548,40549,40551,40553,40555,40557,40559,40561,40563,40565],{"class":86,"line":10226},[84,40550,39122],{"class":477},[84,40552,842],{"class":94},[84,40554,928],{"class":473},[84,40556,842],{"class":94},[84,40558,928],{"class":473},[84,40560,38784],{"class":94},[84,40562,851],{"class":477},[84,40564,35197],{"class":94},[84,40566,38374],{"class":477},[84,40568,40569],{"class":86,"line":10235},[84,40570,38379],{"class":477},[84,40572,40573,40575,40577,40579,40581],{"class":86,"line":10241},[84,40574,39122],{"class":477},[84,40576,35197],{"class":94},[84,40578,851],{"class":477},[84,40580,32397],{"class":94},[84,40582,38374],{"class":477},[84,40584,40585],{"class":86,"line":10249},[84,40586,38379],{"class":477},[84,40588,40589,40591,40593,40595,40597],{"class":86,"line":10254},[84,40590,39122],{"class":477},[84,40592,32397],{"class":94},[84,40594,851],{"class":477},[84,40596,919],{"class":94},[84,40598,484],{"class":477},[84,40600,40601],{"class":86,"line":16933},[84,40602,38453],{"class":477},[84,40604,40605],{"class":86,"line":16939},[84,40606,2729],{"emptyLinePlaceholder":403},[84,40608,40609],{"class":86,"line":16962},[84,40610,39183],{"class":328},[84,40612,40613],{"class":86,"line":16968},[84,40614,39188],{"class":328},[84,40616,40617,40619,40621,40623,40625],{"class":86,"line":16991},[84,40618,3732],{"class":473},[84,40620,39195],{"class":477},[84,40622,26371],{"class":473},[84,40624,39200],{"class":94},[84,40626,39203],{"class":477},[84,40628,40629],{"class":86,"line":17005},[84,40630,39208],{"class":328},[84,40632,40633,40635,40637],{"class":86,"line":17025},[84,40634,4971],{"class":473},[84,40636,39215],{"class":94},[84,40638,39218],{"class":477},[84,40640,40641],{"class":86,"line":17031},[84,40642,39223],{"class":328},[84,40644,40645,40647,40649,40651,40653],{"class":86,"line":17042},[84,40646,39228],{"class":477},[84,40648,39231],{"class":5545},[84,40650,523],{"class":473},[84,40652,39236],{"class":104},[84,40654,484],{"class":477},[84,40656,40657],{"class":86,"line":17065},[84,40658,39243],{"class":328},[84,40660,40661,40663,40665,40667,40669,40671],{"class":86,"line":17087},[84,40662,39248],{"class":473},[84,40664,39251],{"class":477},[84,40666,39254],{"class":473},[84,40668,39257],{"class":473},[84,40670,39260],{"class":94},[84,40672,4068],{"class":477},[84,40674,40675],{"class":86,"line":17092},[84,40676,39267],{"class":328},[84,40678,40679,40681,40683],{"class":86,"line":17098},[84,40680,39272],{"class":477},[84,40682,666],{"class":94},[84,40684,484],{"class":477},[84,40686,40687],{"class":86,"line":17112},[84,40688,39281],{"class":328},[84,40690,40691,40693,40695],{"class":86,"line":17125},[84,40692,39286],{"class":473},[84,40694,39215],{"class":94},[84,40696,39291],{"class":477},[84,40698,40699],{"class":86,"line":17130},[84,40700,39296],{"class":328},[84,40702,40703],{"class":86,"line":17144},[84,40704,39301],{"class":328},[84,40706,40707,40709,40711,40713,40715],{"class":86,"line":17149},[84,40708,39306],{"class":477},[84,40710,666],{"class":94},[84,40712,851],{"class":477},[84,40714,39313],{"class":94},[84,40716,484],{"class":477},[84,40718,40719],{"class":86,"line":17155},[84,40720,39320],{"class":328},[84,40722,40723,40725,40727,40729,40731,40733],{"class":86,"line":17160},[84,40724,39248],{"class":473},[84,40726,39251],{"class":477},[84,40728,39254],{"class":473},[84,40730,39257],{"class":473},[84,40732,39260],{"class":94},[84,40734,4068],{"class":477},[84,40736,40737,40739,40741],{"class":86,"line":17174},[84,40738,39272],{"class":477},[84,40740,666],{"class":94},[84,40742,484],{"class":477},[84,40744,40745],{"class":86,"line":17179},[84,40746,2729],{"emptyLinePlaceholder":403},[84,40748,40749],{"class":86,"line":17184},[84,40750,35492],{"class":328},[84,40752,40753,40755,40757],{"class":86,"line":17198},[84,40754,31128],{"class":473},[84,40756,31420],{"class":90},[84,40758,31423],{"class":477},[84,40760,40761,40763,40765,40767],{"class":86,"line":17210},[84,40762,31428],{"class":477},[84,40764,523],{"class":473},[84,40766,31150],{"class":94},[84,40768,39369],{"class":477},[84,40770,40771,40773,40775,40777],{"class":86,"line":17215},[84,40772,31428],{"class":477},[84,40774,523],{"class":473},[84,40776,31150],{"class":94},[84,40778,39380],{"class":477},[84,40780,40781,40783,40785,40787],{"class":86,"line":17228},[84,40782,31428],{"class":477},[84,40784,523],{"class":473},[84,40786,31150],{"class":94},[84,40788,39391],{"class":477},[84,40790,40791,40793,40795,40797],{"class":86,"line":17233},[84,40792,31428],{"class":477},[84,40794,523],{"class":473},[84,40796,31150],{"class":94},[84,40798,39402],{"class":477},[84,40800,40801,40803,40805,40807],{"class":86,"line":17238},[84,40802,31428],{"class":477},[84,40804,523],{"class":473},[84,40806,31150],{"class":94},[84,40808,39413],{"class":477},[84,40810,40811,40813,40815,40817],{"class":86,"line":17243},[84,40812,31428],{"class":477},[84,40814,523],{"class":473},[84,40816,31150],{"class":94},[84,40818,39424],{"class":477},[84,40820,40821,40823],{"class":86,"line":17256},[84,40822,15081],{"class":473},[84,40824,31536],{"class":477},[84,40826,40827],{"class":86,"line":17261},[84,40828,2729],{"emptyLinePlaceholder":403},[84,40830,40831],{"class":86,"line":32960},[84,40832,39439],{"class":328},[84,40834,40835,40837,40839,40841,40843],{"class":86,"line":32966},[84,40836,1871],{"class":473},[84,40838,31547],{"class":94},[84,40840,3278],{"class":473},[84,40842,39450],{"class":104},[84,40844,4068],{"class":477},[84,40846,40847,40849,40851,40853,40855,40857,40859,40861,40863],{"class":86,"line":32972},[84,40848,31564],{"class":477},[84,40850,523],{"class":473},[84,40852,30778],{"class":477},[84,40854,31571],{"class":104},[84,40856,2034],{"class":473},[84,40858,31576],{"class":477},[84,40860,2031],{"class":473},[84,40862,30803],{"class":104},[84,40864,484],{"class":477},[84,40866,40867,40869],{"class":86,"line":32978},[84,40868,31626],{"class":94},[84,40870,30812],{"class":477},[84,40872,40873,40875,40877],{"class":86,"line":32984},[84,40874,31616],{"class":477},[84,40876,523],{"class":473},[84,40878,39487],{"class":477},[84,40880,40881,40883,40885,40887,40889,40891,40893,40895],{"class":86,"line":32995},[84,40882,31626],{"class":94},[84,40884,31629],{"class":477},[84,40886,692],{"class":94},[84,40888,851],{"class":477},[84,40890,31828],{"class":94},[84,40892,851],{"class":477},[84,40894,31828],{"class":94},[84,40896,31642],{"class":477},[28,40898,40899],{"start":70},[31,40900,40901],{},"测试代码",[75,40903,40905],{"className":30705,"code":40904,"language":30707,"meta":66,"style":66},"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",[81,40906,40907,40913,40923,40933,40937,40947,40958,40962,40966,40970,40978,40994,41004,41020,41030,41044,41048,41058,41068,41078,41084,41088,41092,41100,41104,41120,41128,41132,41136,41144,41152,41156,41160,41164,41168,41174,41178,41188,41196,41204,41208,41212,41216,41224,41228,41244,41248,41252,41256,41268,41272,41284,41288,41292,41304,41308,41318,41322,41326,41338,41342,41351,41355,41359,41367,41371,41379,41383,41387,41391,41395,41399,41415,41423,41427,41431,41479,41485,41489,41499,41507,41515,41519,41523,41527,41531,41539,41543,41559,41563,41571,41579],{"__ignoreMap":66},[84,40908,40909,40911],{"class":86,"line":87},[84,40910,30719],{"class":473},[84,40912,30722],{"class":477},[84,40914,40915,40917,40919,40921],{"class":86,"line":98},[84,40916,30719],{"class":473},[84,40918,31742],{"class":477},[84,40920,31710],{"class":473},[84,40922,31747],{"class":477},[84,40924,40925,40927,40929,40931],{"class":86,"line":70},[84,40926,31064],{"class":473},[84,40928,31725],{"class":477},[84,40930,30719],{"class":473},[84,40932,31730],{"class":477},[84,40934,40935],{"class":86,"line":120},[84,40936,34249],{"class":328},[84,40938,40939,40941,40943,40945],{"class":86,"line":131},[84,40940,31064],{"class":473},[84,40942,31695],{"class":477},[84,40944,30719],{"class":473},[84,40946,31700],{"class":477},[84,40948,40949,40951,40953,40955],{"class":86,"line":145},[84,40950,31064],{"class":473},[84,40952,32241],{"class":477},[84,40954,30719],{"class":473},[84,40956,40957],{"class":94}," VGG16\n",[84,40959,40960],{"class":86,"line":156},[84,40961,2729],{"emptyLinePlaceholder":403},[84,40963,40964],{"class":86,"line":164},[84,40965,2729],{"emptyLinePlaceholder":403},[84,40967,40968],{"class":86,"line":175},[84,40969,34278],{"class":328},[84,40971,40972,40974,40976],{"class":86,"line":185},[84,40973,32274],{"class":473},[84,40975,34285],{"class":90},[84,40977,32280],{"class":477},[84,40979,40980,40982,40984,40986,40988,40990,40992],{"class":86,"line":195},[84,40981,34292],{"class":477},[84,40983,523],{"class":473},[84,40985,31782],{"class":477},[84,40987,31785],{"class":5545},[84,40989,523],{"class":473},[84,40991,31790],{"class":104},[84,40993,31793],{"class":477},[84,40995,40996,40998,41000,41002],{"class":86,"line":206},[84,40997,34309],{"class":5545},[84,40999,523],{"class":473},[84,41001,34314],{"class":94},[84,41003,31793],{"class":477},[84,41005,41006,41008,41010,41012,41014,41016,41018],{"class":86,"line":217},[84,41007,34321],{"class":5545},[84,41009,523],{"class":473},[84,41011,31820],{"class":477},[84,41013,31823],{"class":5545},[84,41015,523],{"class":473},[84,41017,31828],{"class":94},[84,41019,31831],{"class":477},[84,41021,41022,41024,41026,41028],{"class":86,"line":227},[84,41023,34338],{"class":5545},[84,41025,523],{"class":473},[84,41027,31803],{"class":94},[84,41029,484],{"class":477},[84,41031,41032,41034,41036,41038,41040,41042],{"class":86,"line":238},[84,41033,34349],{"class":477},[84,41035,523],{"class":473},[84,41037,31861],{"class":477},[84,41039,31864],{"class":5545},[84,41041,523],{"class":473},[84,41043,34360],{"class":477},[84,41045,41046],{"class":86,"line":249},[84,41047,34365],{"class":328},[84,41049,41050,41052,41054,41056],{"class":86,"line":262},[84,41051,34370],{"class":5545},[84,41053,523],{"class":473},[84,41055,692],{"class":94},[84,41057,31793],{"class":477},[84,41059,41060,41062,41064,41066],{"class":86,"line":273},[84,41061,34381],{"class":5545},[84,41063,523],{"class":473},[84,41065,31803],{"class":94},[84,41067,31793],{"class":477},[84,41069,41070,41072,41074,41076],{"class":86,"line":283},[84,41071,34392],{"class":5545},[84,41073,523],{"class":473},[84,41075,666],{"class":94},[84,41077,484],{"class":477},[84,41079,41080,41082],{"class":86,"line":294},[84,41081,4419],{"class":473},[84,41083,34405],{"class":477},[84,41085,41086],{"class":86,"line":2028},[84,41087,2729],{"emptyLinePlaceholder":403},[84,41089,41090],{"class":86,"line":2057},[84,41091,34414],{"class":328},[84,41093,41094,41096,41098],{"class":86,"line":2062},[84,41095,32274],{"class":473},[84,41097,34421],{"class":90},[84,41099,34424],{"class":477},[84,41101,41102],{"class":86,"line":2079},[84,41103,34429],{"class":328},[84,41105,41106,41108,41110,41112,41114,41116,41118],{"class":86,"line":2084},[84,41107,31564],{"class":477},[84,41109,523],{"class":473},[84,41111,31571],{"class":104},[84,41113,2034],{"class":473},[84,41115,31576],{"class":477},[84,41117,2031],{"class":473},[84,41119,34446],{"class":104},[84,41121,41122,41124,41126],{"class":86,"line":2089},[84,41123,31616],{"class":477},[84,41125,523],{"class":473},[84,41127,32616],{"class":477},[84,41129,41130],{"class":86,"line":2094},[84,41131,2729],{"emptyLinePlaceholder":403},[84,41133,41134],{"class":86,"line":2108},[84,41135,34463],{"class":328},[84,41137,41138,41140,41142],{"class":86,"line":2113},[84,41139,34468],{"class":477},[84,41141,523],{"class":473},[84,41143,32669],{"class":94},[84,41145,41146,41148,41150],{"class":86,"line":2906},[84,41147,34477],{"class":477},[84,41149,523],{"class":473},[84,41151,3414],{"class":94},[84,41153,41154],{"class":86,"line":2920},[84,41155,2729],{"emptyLinePlaceholder":403},[84,41157,41158],{"class":86,"line":2928},[84,41159,34490],{"class":328},[84,41161,41162],{"class":86,"line":2933},[84,41163,34495],{"class":328},[84,41165,41166],{"class":86,"line":2939},[84,41167,34500],{"class":328},[84,41169,41170,41172],{"class":86,"line":2945},[84,41171,34505],{"class":473},[84,41173,33211],{"class":477},[84,41175,41176],{"class":86,"line":2950},[84,41177,34512],{"class":328},[84,41179,41180,41182,41184,41186],{"class":86,"line":8277},[84,41181,3732],{"class":473},[84,41183,34519],{"class":477},[84,41185,26371],{"class":473},[84,41187,34524],{"class":477},[84,41189,41190,41192,41194],{"class":86,"line":8301},[84,41191,34529],{"class":477},[84,41193,523],{"class":473},[84,41195,34534],{"class":477},[84,41197,41198,41200,41202],{"class":86,"line":8306},[84,41199,34539],{"class":477},[84,41201,523],{"class":473},[84,41203,34544],{"class":477},[84,41205,41206],{"class":86,"line":8312},[84,41207,34549],{"class":328},[84,41209,41210],{"class":86,"line":8339},[84,41211,33202],{"class":477},[84,41213,41214],{"class":86,"line":8344},[84,41215,34558],{"class":328},[84,41217,41218,41220,41222],{"class":86,"line":8350},[84,41219,32987],{"class":477},[84,41221,523],{"class":473},[84,41223,34567],{"class":477},[84,41225,41226],{"class":86,"line":8362},[84,41227,34572],{"class":328},[84,41229,41230,41232,41234,41236,41238,41240,41242],{"class":86,"line":8374},[84,41231,33004],{"class":477},[84,41233,523],{"class":473},[84,41235,33009],{"class":477},[84,41237,33012],{"class":5545},[84,41239,523],{"class":473},[84,41241,692],{"class":94},[84,41243,484],{"class":477},[84,41245,41246],{"class":86,"line":8386},[84,41247,34593],{"class":328},[84,41249,41250],{"class":86,"line":10045},[84,41251,34598],{"class":328},[84,41253,41254],{"class":86,"line":10070},[84,41255,34603],{"class":328},[84,41257,41258,41260,41262,41264,41266],{"class":86,"line":10093},[84,41259,34608],{"class":477},[84,41261,9806],{"class":473},[84,41263,33114],{"class":477},[84,41265,3278],{"class":473},[84,41267,34617],{"class":477},[84,41269,41270],{"class":86,"line":10117},[84,41271,34622],{"class":328},[84,41273,41274,41276,41278,41280,41282],{"class":86,"line":10122},[84,41275,34627],{"class":477},[84,41277,9806],{"class":473},[84,41279,34632],{"class":477},[84,41281,666],{"class":94},[84,41283,484],{"class":477},[84,41285,41286],{"class":86,"line":10127},[84,41287,2729],{"emptyLinePlaceholder":403},[84,41289,41290],{"class":86,"line":10132},[84,41291,34645],{"class":328},[84,41293,41294,41296,41298,41300,41302],{"class":86,"line":10141},[84,41295,34650],{"class":477},[84,41297,523],{"class":473},[84,41299,34655],{"class":477},[84,41301,1057],{"class":473},[84,41303,34660],{"class":477},[84,41305,41306],{"class":86,"line":10146},[84,41307,34665],{"class":328},[84,41309,41310,41312,41314,41316],{"class":86,"line":10152},[84,41311,32778],{"class":94},[84,41313,478],{"class":477},[84,41315,34674],{"class":104},[84,41317,34677],{"class":477},[84,41319,41320],{"class":86,"line":10173},[84,41321,2729],{"emptyLinePlaceholder":403},[84,41323,41324],{"class":86,"line":10179},[84,41325,34686],{"class":328},[84,41327,41328,41330,41332,41334,41336],{"class":86,"line":10193},[84,41329,1871],{"class":473},[84,41331,31547],{"class":94},[84,41333,3278],{"class":473},[84,41335,31552],{"class":104},[84,41337,4068],{"class":477},[84,41339,41340],{"class":86,"line":10199},[84,41341,34703],{"class":328},[84,41343,41344,41346,41348],{"class":86,"line":10226},[84,41345,31616],{"class":477},[84,41347,523],{"class":473},[84,41349,41350],{"class":477},"VGG16()\n",[84,41352,41353],{"class":86,"line":10235},[84,41354,34716],{"class":328},[84,41356,41357],{"class":86,"line":10241},[84,41358,34721],{"class":328},[84,41360,41361,41363,41365],{"class":86,"line":10249},[84,41362,34726],{"class":477},[84,41364,34729],{"class":104},[84,41366,30824],{"class":477},[84,41368,41369],{"class":86,"line":10254},[84,41370,34736],{"class":328},[84,41372,41373,41375,41377],{"class":86,"line":16933},[84,41374,34349],{"class":477},[84,41376,523],{"class":473},[84,41378,34745],{"class":477},[84,41380,41381],{"class":86,"line":16939},[84,41382,34750],{"class":328},[84,41384,41385],{"class":86,"line":16962},[84,41386,34755],{"class":477},[84,41388,41389],{"class":86,"line":16968},[84,41390,2729],{"emptyLinePlaceholder":403},[84,41392,41393],{"class":86,"line":16991},[84,41394,34764],{"class":328},[84,41396,41397],{"class":86,"line":17005},[84,41398,34769],{"class":328},[84,41400,41401,41403,41405,41407,41409,41411,41413],{"class":86,"line":17025},[84,41402,31564],{"class":477},[84,41404,523],{"class":473},[84,41406,31571],{"class":104},[84,41408,2034],{"class":473},[84,41410,31576],{"class":477},[84,41412,2031],{"class":473},[84,41414,34446],{"class":104},[84,41416,41417,41419,41421],{"class":86,"line":17031},[84,41418,31616],{"class":477},[84,41420,523],{"class":473},[84,41422,32616],{"class":477},[84,41424,41425],{"class":86,"line":17042},[84,41426,34798],{"class":328},[84,41428,41429],{"class":86,"line":17065},[84,41430,34803],{"class":328},[84,41432,41433,41435,41437,41439,41441,41443,41445,41447,41449,41451,41453,41455,41457,41459,41461,41463,41465,41467,41469,41471,41473,41475,41477],{"class":86,"line":17087},[84,41434,34808],{"class":477},[84,41436,523],{"class":473},[84,41438,1363],{"class":477},[84,41440,34815],{"class":104},[84,41442,851],{"class":477},[84,41444,34820],{"class":104},[84,41446,851],{"class":477},[84,41448,34825],{"class":104},[84,41450,851],{"class":477},[84,41452,34830],{"class":104},[84,41454,851],{"class":477},[84,41456,34835],{"class":104},[84,41458,851],{"class":477},[84,41460,34840],{"class":104},[84,41462,851],{"class":477},[84,41464,34845],{"class":104},[84,41466,851],{"class":477},[84,41468,34850],{"class":104},[84,41470,851],{"class":477},[84,41472,34855],{"class":104},[84,41474,851],{"class":477},[84,41476,34860],{"class":104},[84,41478,33573],{"class":477},[84,41480,41481,41483],{"class":86,"line":17092},[84,41482,34505],{"class":473},[84,41484,33211],{"class":477},[84,41486,41487],{"class":86,"line":17098},[84,41488,34873],{"class":328},[84,41490,41491,41493,41495,41497],{"class":86,"line":17112},[84,41492,3732],{"class":473},[84,41494,34880],{"class":477},[84,41496,26371],{"class":473},[84,41498,34524],{"class":477},[84,41500,41501,41503,41505],{"class":86,"line":17125},[84,41502,32937],{"class":477},[84,41504,523],{"class":473},[84,41506,32942],{"class":477},[84,41508,41509,41511,41513],{"class":86,"line":17130},[84,41510,32952],{"class":477},[84,41512,523],{"class":473},[84,41514,32957],{"class":477},[84,41516,41517],{"class":86,"line":17144},[84,41518,2729],{"emptyLinePlaceholder":403},[84,41520,41521],{"class":86,"line":17149},[84,41522,34909],{"class":328},[84,41524,41525],{"class":86,"line":17155},[84,41526,33202],{"class":477},[84,41528,41529],{"class":86,"line":17160},[84,41530,34918],{"class":328},[84,41532,41533,41535,41537],{"class":86,"line":17174},[84,41534,32987],{"class":477},[84,41536,523],{"class":473},[84,41538,32992],{"class":477},[84,41540,41541],{"class":86,"line":17179},[84,41542,34931],{"class":328},[84,41544,41545,41547,41549,41551,41553,41555,41557],{"class":86,"line":17184},[84,41546,33004],{"class":477},[84,41548,523],{"class":473},[84,41550,33009],{"class":477},[84,41552,33012],{"class":5545},[84,41554,523],{"class":473},[84,41556,692],{"class":94},[84,41558,484],{"class":477},[84,41560,41561],{"class":86,"line":17198},[84,41562,34952],{"class":328},[84,41564,41565,41567,41569],{"class":86,"line":17210},[84,41566,34957],{"class":477},[84,41568,523],{"class":473},[84,41570,34962],{"class":477},[84,41572,41573,41575,41577],{"class":86,"line":17215},[84,41574,34967],{"class":477},[84,41576,523],{"class":473},[84,41578,34972],{"class":477},[84,41580,41581,41583,41585,41587,41589,41591,41593,41595],{"class":86,"line":17228},[84,41582,34977],{"class":94},[84,41584,478],{"class":477},[84,41586,34982],{"class":104},[84,41588,34985],{"class":477},[84,41590,34988],{"class":104},[84,41592,851],{"class":477},[84,41594,34993],{"class":104},[84,41596,34996],{"class":477},[23,41598,41600],{"id":41599},"_23googlenet","2.3.GoogLeNet",[22327,41602,41604],{"id":41603},"_231原理","2.3.1.原理",[28,41606,41607],{},[31,41608,41609],{},"网络结构",[35,41611,41612],{},[64,41613],{"alt":66,"src":41614},"\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",[35,41616,41617],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[35,41619,41620],{},[64,41621],{"alt":66,"src":41622},"\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",[35,41624,41625],{},[64,41626],{"alt":66,"src":41627},"\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",[35,41629,41630],{},[64,41631],{"alt":66,"src":41632},"\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",[28,41634,41635],{"start":98},[31,41636,41637],{},"1x1卷积的优点",[35,41639,41640],{},[64,41641],{"alt":66,"src":41642},"\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",[28,41644,41645],{"start":70},[31,41646,41647],{},"全局平均池化层优点",[35,41649,41650],{},[64,41651],{"alt":66,"src":41652},"\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",[35,41654,41655],{},[64,41656],{"alt":66,"src":41657},"\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",[28,41659,41660],{"start":120},[31,41661,41662],{},"参数详细描述",[35,41664,41665],{},[64,41666],{"alt":66,"src":41667},"\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",[35,41669,41670],{},[64,41671],{"alt":66,"src":41672},"\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",[35,41674,41675],{},[64,41676],{"alt":66,"src":41677},"\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",[35,41679,41680],{},[64,41681],{"alt":66,"src":41682},"\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",[35,41684,41685],{},[64,41686],{"alt":66,"src":41687},"\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",[35,41689,41690],{},[64,41691],{"alt":66,"src":41692},"\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",[35,41694,41695],{},[64,41696],{"alt":66,"src":41697},"\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",[35,41699,41700],{},[64,41701],{"alt":66,"src":41702},"\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",[35,41704,41705],{},[64,41706],{"alt":66,"src":41707},"\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",[35,41709,41710],{},[64,41711],{"alt":66,"src":41712},"\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",[35,41714,41715],{},[64,41716],{"alt":66,"src":41717},"\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",[35,41719,41720],{},[64,41721],{"alt":66,"src":41722},"\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",[35,41724,41725],{},[64,41726],{"alt":66,"src":41727},"\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",[35,41729,41730],{},[64,41731],{"alt":66,"src":41732},"\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",[35,41734,41735],{},[64,41736],{"alt":66,"src":41737},"\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",[35,41739,41740],{},[64,41741],{"alt":66,"src":41742},"\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",[35,41744,41745],{},[64,41746],{"alt":66,"src":41747},"\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",[35,41749,41750],{},[64,41751],{"alt":66,"src":41752},"\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",[35,41754,41755],{},[64,41756],{"alt":66,"src":41757},"\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",[35,41759,41760],{},[64,41761],{"alt":66,"src":41762},"\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",[35,41764,41765],{},[64,41766],{"alt":66,"src":41767},"\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",[22327,41769,41771],{"id":41770},"_232代码实现","2.3.2.代码实现",[28,41773,41774],{},[31,41775,31038],{},[35,41777,41778],{},"根据原理一步一步搭建即可",[75,41780,41782],{"className":30705,"code":41781,"language":30707,"meta":66,"style":66},"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",[81,41783,41784,41790,41800,41810,41814,41831,41840,41855,41865,41870,41903,41908,41945,41992,41997,42033,42080,42085,42090,42125,42157,42161,42169,42185,42209,42234,42255,42260,42275,42279,42283,42288,42305,42310,42319,42334,42345,42389,42393,42421,42425,42436,42464,42468,42505,42509,42537,42541,42552,42588,42620,42648,42652,42663,42697,42729,42761,42794,42828,42856,42860,42871,42904,42936,42950,42954,42967,42971,42976,42988,42996,43018,43023,43028,43033,43038,43043,43048,43062,43070,43079,43092,43107,43116,43120,43128,43139,43150,43161,43172,43183,43189,43193,43198,43210,43230,43239],{"__ignoreMap":66},[84,41785,41786,41788],{"class":86,"line":87},[84,41787,30719],{"class":473},[84,41789,30722],{"class":477},[84,41791,41792,41794,41796,41798],{"class":86,"line":98},[84,41793,31064],{"class":473},[84,41795,31067],{"class":477},[84,41797,30719],{"class":473},[84,41799,31072],{"class":477},[84,41801,41802,41804,41806,41808],{"class":86,"line":70},[84,41803,31064],{"class":473},[84,41805,31084],{"class":477},[84,41807,30719],{"class":473},[84,41809,31089],{"class":477},[84,41811,41812],{"class":86,"line":120},[84,41813,2729],{"emptyLinePlaceholder":403},[84,41815,41816,41818,41821,41823,41825,41827,41829],{"class":86,"line":131},[84,41817,15023],{"class":473},[84,41819,41820],{"class":90}," Inception",[84,41822,478],{"class":477},[84,41824,31105],{"class":90},[84,41826,1031],{"class":477},[84,41828,31110],{"class":90},[84,41830,31113],{"class":477},[84,41832,41833,41835,41837],{"class":86,"line":145},[84,41834,31128],{"class":473},[84,41836,31131],{"class":94},[84,41838,41839],{"class":477},"(self,in_channels,c1,c2,c3,c4):\n",[84,41841,41842,41844,41847,41849,41851,41853],{"class":86,"line":156},[84,41843,31144],{"class":94},[84,41845,41846],{"class":477},"(Inception,",[84,41848,31150],{"class":94},[84,41850,31153],{"class":477},[84,41852,31156],{"class":94},[84,41854,2305],{"class":477},[84,41856,41857,41859,41861,41863],{"class":86,"line":164},[84,41858,31172],{"class":94},[84,41860,35098],{"class":477},[84,41862,523],{"class":473},[84,41864,35103],{"class":477},[84,41866,41867],{"class":86,"line":175},[84,41868,41869],{"class":328},"        # 路线1：定义1*1卷积\n",[84,41871,41872,41874,41877,41879,41881,41883,41885,41888,41890,41892,41895,41897,41899,41901],{"class":86,"line":185},[84,41873,31172],{"class":94},[84,41875,41876],{"class":477},".p1_1",[84,41878,523],{"class":473},[84,41880,31180],{"class":477},[84,41882,31183],{"class":5545},[84,41884,523],{"class":473},[84,41886,41887],{"class":477},"in_channels,",[84,41889,31192],{"class":5545},[84,41891,523],{"class":473},[84,41893,41894],{"class":477},"c1,",[84,41896,31201],{"class":5545},[84,41898,523],{"class":473},[84,41900,692],{"class":94},[84,41902,484],{"class":477},[84,41904,41905],{"class":86,"line":195},[84,41906,41907],{"class":328},"        # 路线2：定义1*1卷积和3*3\n",[84,41909,41910,41912,41915,41917,41919,41921,41923,41925,41927,41929,41932,41934,41937,41939,41941,41943],{"class":86,"line":206},[84,41911,31172],{"class":94},[84,41913,41914],{"class":477},".p2_1",[84,41916,523],{"class":473},[84,41918,31180],{"class":477},[84,41920,31183],{"class":5545},[84,41922,523],{"class":473},[84,41924,41887],{"class":477},[84,41926,31192],{"class":5545},[84,41928,523],{"class":473},[84,41930,41931],{"class":477},"c2[",[84,41933,666],{"class":94},[84,41935,41936],{"class":477},"],",[84,41938,31201],{"class":5545},[84,41940,523],{"class":473},[84,41942,692],{"class":94},[84,41944,484],{"class":477},[84,41946,41947,41949,41952,41954,41956,41958,41960,41962,41964,41966,41968,41970,41972,41974,41976,41978,41980,41982,41984,41986,41988,41990],{"class":86,"line":217},[84,41948,31172],{"class":94},[84,41950,41951],{"class":477},".p2_2",[84,41953,523],{"class":473},[84,41955,31180],{"class":477},[84,41957,31183],{"class":5545},[84,41959,523],{"class":473},[84,41961,41931],{"class":477},[84,41963,666],{"class":94},[84,41965,41936],{"class":477},[84,41967,31192],{"class":5545},[84,41969,523],{"class":473},[84,41971,41931],{"class":477},[84,41973,692],{"class":94},[84,41975,41936],{"class":477},[84,41977,31201],{"class":5545},[84,41979,523],{"class":473},[84,41981,547],{"class":94},[84,41983,851],{"class":477},[84,41985,31210],{"class":5545},[84,41987,523],{"class":473},[84,41989,692],{"class":94},[84,41991,484],{"class":477},[84,41993,41994],{"class":86,"line":227},[84,41995,41996],{"class":328},"        # 路线3：定义1*1卷积和5*5\n",[84,41998,41999,42001,42004,42006,42008,42010,42012,42014,42016,42018,42021,42023,42025,42027,42029,42031],{"class":86,"line":238},[84,42000,31172],{"class":94},[84,42002,42003],{"class":477},".p3_1",[84,42005,523],{"class":473},[84,42007,31180],{"class":477},[84,42009,31183],{"class":5545},[84,42011,523],{"class":473},[84,42013,41887],{"class":477},[84,42015,31192],{"class":5545},[84,42017,523],{"class":473},[84,42019,42020],{"class":477},"c3[",[84,42022,666],{"class":94},[84,42024,41936],{"class":477},[84,42026,31201],{"class":5545},[84,42028,523],{"class":473},[84,42030,692],{"class":94},[84,42032,484],{"class":477},[84,42034,42035,42037,42040,42042,42044,42046,42048,42050,42052,42054,42056,42058,42060,42062,42064,42066,42068,42070,42072,42074,42076,42078],{"class":86,"line":249},[84,42036,31172],{"class":94},[84,42038,42039],{"class":477},".p3_2",[84,42041,523],{"class":473},[84,42043,31180],{"class":477},[84,42045,31183],{"class":5545},[84,42047,523],{"class":473},[84,42049,42020],{"class":477},[84,42051,666],{"class":94},[84,42053,41936],{"class":477},[84,42055,31192],{"class":5545},[84,42057,523],{"class":473},[84,42059,42020],{"class":477},[84,42061,692],{"class":94},[84,42063,41936],{"class":477},[84,42065,31201],{"class":5545},[84,42067,523],{"class":473},[84,42069,792],{"class":94},[84,42071,851],{"class":477},[84,42073,31210],{"class":5545},[84,42075,523],{"class":473},[84,42077,553],{"class":94},[84,42079,484],{"class":477},[84,42081,42082],{"class":86,"line":262},[84,42083,42084],{"class":328},"        # 路线4：定义3*3最大池化和1*1卷积\n",[84,42086,42087],{"class":86,"line":273},[84,42088,42089],{"class":328},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[84,42091,42092,42094,42097,42099,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123],{"class":86,"line":283},[84,42093,31172],{"class":94},[84,42095,42096],{"class":477},".p4_1",[84,42098,523],{"class":473},[84,42100,35156],{"class":477},[84,42102,31201],{"class":5545},[84,42104,523],{"class":473},[84,42106,547],{"class":94},[84,42108,851],{"class":477},[84,42110,31256],{"class":5545},[84,42112,523],{"class":473},[84,42114,692],{"class":94},[84,42116,851],{"class":477},[84,42118,31210],{"class":5545},[84,42120,523],{"class":473},[84,42122,692],{"class":94},[84,42124,484],{"class":477},[84,42126,42127,42129,42132,42134,42136,42138,42140,42142,42144,42146,42149,42151,42153,42155],{"class":86,"line":294},[84,42128,31172],{"class":94},[84,42130,42131],{"class":477},".p4_2",[84,42133,523],{"class":473},[84,42135,31180],{"class":477},[84,42137,31183],{"class":5545},[84,42139,523],{"class":473},[84,42141,41887],{"class":477},[84,42143,31192],{"class":5545},[84,42145,523],{"class":473},[84,42147,42148],{"class":477},"c4,",[84,42150,31201],{"class":5545},[84,42152,523],{"class":473},[84,42154,692],{"class":94},[84,42156,484],{"class":477},[84,42158,42159],{"class":86,"line":2028},[84,42160,2729],{"emptyLinePlaceholder":403},[84,42162,42163,42165,42167],{"class":86,"line":2057},[84,42164,31128],{"class":473},[84,42166,31420],{"class":90},[84,42168,31423],{"class":477},[84,42170,42171,42174,42176,42178,42180,42182],{"class":86,"line":2062},[84,42172,42173],{"class":477},"        p1",[84,42175,523],{"class":473},[84,42177,31150],{"class":94},[84,42179,35511],{"class":477},[84,42181,31150],{"class":94},[84,42183,42184],{"class":477},".p1_1(x))\n",[84,42186,42187,42189,42191,42193,42195,42197,42200,42202,42204,42206],{"class":86,"line":2079},[84,42188,7414],{"class":477},[84,42190,523],{"class":473},[84,42192,31150],{"class":94},[84,42194,35511],{"class":477},[84,42196,31150],{"class":94},[84,42198,42199],{"class":477},".p2_2(",[84,42201,31150],{"class":94},[84,42203,35511],{"class":477},[84,42205,31150],{"class":94},[84,42207,42208],{"class":477},".p2_1(x))))\n",[84,42210,42211,42214,42216,42218,42220,42222,42225,42227,42229,42231],{"class":86,"line":2084},[84,42212,42213],{"class":477},"        p3",[84,42215,523],{"class":473},[84,42217,31150],{"class":94},[84,42219,35511],{"class":477},[84,42221,31150],{"class":94},[84,42223,42224],{"class":477},".p3_2(",[84,42226,31150],{"class":94},[84,42228,35511],{"class":477},[84,42230,31150],{"class":94},[84,42232,42233],{"class":477},".p3_1(x))))\n",[84,42235,42236,42239,42241,42243,42245,42247,42250,42252],{"class":86,"line":2089},[84,42237,42238],{"class":477},"        p4",[84,42240,523],{"class":473},[84,42242,31150],{"class":94},[84,42244,35511],{"class":477},[84,42246,31150],{"class":94},[84,42248,42249],{"class":477},".p4_2(",[84,42251,31150],{"class":94},[84,42253,42254],{"class":477},".p4_1(x)))\n",[84,42256,42257],{"class":86,"line":2094},[84,42258,42259],{"class":328},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[84,42261,42262,42264,42267,42269,42271,42273],{"class":86,"line":2108},[84,42263,15081],{"class":473},[84,42265,42266],{"class":477}," torch.cat((p1,p2,p3,p4),",[84,42268,33012],{"class":5545},[84,42270,523],{"class":473},[84,42272,692],{"class":94},[84,42274,484],{"class":477},[84,42276,42277],{"class":86,"line":2113},[84,42278,2729],{"emptyLinePlaceholder":403},[84,42280,42281],{"class":86,"line":2906},[84,42282,2729],{"emptyLinePlaceholder":403},[84,42284,42285],{"class":86,"line":2920},[84,42286,42287],{"class":328},"# 搭建GoogLeNet网络\n",[84,42289,42290,42292,42295,42297,42299,42301,42303],{"class":86,"line":2928},[84,42291,15023],{"class":473},[84,42293,42294],{"class":90}," GoogLeNet",[84,42296,478],{"class":477},[84,42298,31105],{"class":90},[84,42300,1031],{"class":477},[84,42302,31110],{"class":90},[84,42304,31113],{"class":477},[84,42306,42307],{"class":86,"line":2933},[84,42308,42309],{"class":328},"    # 必须把Inception导入到里边\n",[84,42311,42312,42314,42316],{"class":86,"line":2939},[84,42313,31128],{"class":473},[84,42315,31131],{"class":94},[84,42317,42318],{"class":477},"(self,Inception):\n",[84,42320,42321,42323,42326,42328,42330,42332],{"class":86,"line":2945},[84,42322,31144],{"class":94},[84,42324,42325],{"class":477},"(GoogLeNet,",[84,42327,31150],{"class":94},[84,42329,31153],{"class":477},[84,42331,31156],{"class":94},[84,42333,2305],{"class":477},[84,42335,42336,42338,42341,42343],{"class":86,"line":2950},[84,42337,31172],{"class":94},[84,42339,42340],{"class":477},".b1",[84,42342,523],{"class":473},[84,42344,38336],{"class":477},[84,42346,42347,42349,42351,42353,42355,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385,42387],{"class":86,"line":8277},[84,42348,38341],{"class":477},[84,42350,31183],{"class":5545},[84,42352,523],{"class":473},[84,42354,692],{"class":94},[84,42356,851],{"class":477},[84,42358,31192],{"class":5545},[84,42360,523],{"class":473},[84,42362,678],{"class":94},[84,42364,851],{"class":477},[84,42366,31201],{"class":5545},[84,42368,523],{"class":473},[84,42370,842],{"class":94},[84,42372,851],{"class":477},[84,42374,31256],{"class":5545},[84,42376,523],{"class":473},[84,42378,553],{"class":94},[84,42380,851],{"class":477},[84,42382,31210],{"class":5545},[84,42384,523],{"class":473},[84,42386,547],{"class":94},[84,42388,38374],{"class":477},[84,42390,42391],{"class":86,"line":8301},[84,42392,38379],{"class":477},[84,42394,42395,42397,42399,42401,42403,42405,42407,42409,42411,42413,42415,42417,42419],{"class":86,"line":8306},[84,42396,38424],{"class":477},[84,42398,31201],{"class":5545},[84,42400,523],{"class":473},[84,42402,547],{"class":94},[84,42404,851],{"class":477},[84,42406,31256],{"class":5545},[84,42408,523],{"class":473},[84,42410,553],{"class":94},[84,42412,851],{"class":477},[84,42414,31210],{"class":5545},[84,42416,523],{"class":473},[84,42418,692],{"class":94},[84,42420,484],{"class":477},[84,42422,42423],{"class":86,"line":8312},[84,42424,38453],{"class":477},[84,42426,42427,42429,42432,42434],{"class":86,"line":8339},[84,42428,31172],{"class":94},[84,42430,42431],{"class":477},".b2",[84,42433,523],{"class":473},[84,42435,38336],{"class":477},[84,42437,42438,42440,42442,42444,42446,42448,42450,42452,42454,42456,42458,42460,42462],{"class":86,"line":8344},[84,42439,38341],{"class":477},[84,42441,31183],{"class":5545},[84,42443,523],{"class":473},[84,42445,678],{"class":94},[84,42447,851],{"class":477},[84,42449,31192],{"class":5545},[84,42451,523],{"class":473},[84,42453,678],{"class":94},[84,42455,851],{"class":477},[84,42457,31201],{"class":5545},[84,42459,523],{"class":473},[84,42461,692],{"class":94},[84,42463,38374],{"class":477},[84,42465,42466],{"class":86,"line":8350},[84,42467,38379],{"class":477},[84,42469,42470,42472,42474,42476,42478,42480,42482,42484,42487,42489,42491,42493,42495,42497,42499,42501,42503],{"class":86,"line":8362},[84,42471,38341],{"class":477},[84,42473,31183],{"class":5545},[84,42475,523],{"class":473},[84,42477,678],{"class":94},[84,42479,851],{"class":477},[84,42481,31192],{"class":5545},[84,42483,523],{"class":473},[84,42485,42486],{"class":94},"192",[84,42488,851],{"class":477},[84,42490,31201],{"class":5545},[84,42492,523],{"class":473},[84,42494,547],{"class":94},[84,42496,851],{"class":477},[84,42498,31210],{"class":5545},[84,42500,523],{"class":473},[84,42502,692],{"class":94},[84,42504,38374],{"class":477},[84,42506,42507],{"class":86,"line":8374},[84,42508,38379],{"class":477},[84,42510,42511,42513,42515,42517,42519,42521,42523,42525,42527,42529,42531,42533,42535],{"class":86,"line":8386},[84,42512,38424],{"class":477},[84,42514,31201],{"class":5545},[84,42516,523],{"class":473},[84,42518,547],{"class":94},[84,42520,851],{"class":477},[84,42522,31256],{"class":5545},[84,42524,523],{"class":473},[84,42526,553],{"class":94},[84,42528,851],{"class":477},[84,42530,31210],{"class":5545},[84,42532,523],{"class":473},[84,42534,692],{"class":94},[84,42536,484],{"class":477},[84,42538,42539],{"class":86,"line":10045},[84,42540,38453],{"class":477},[84,42542,42543,42545,42548,42550],{"class":86,"line":10070},[84,42544,31172],{"class":94},[84,42546,42547],{"class":477},".b3",[84,42549,523],{"class":473},[84,42551,38336],{"class":477},[84,42553,42554,42557,42559,42561,42563,42566,42568,42570,42572,42575,42577,42579,42581,42584,42586],{"class":86,"line":10093},[84,42555,42556],{"class":477},"            Inception(",[84,42558,42486],{"class":94},[84,42560,851],{"class":477},[84,42562,678],{"class":94},[84,42564,42565],{"class":477},",(",[84,42567,684],{"class":94},[84,42569,851],{"class":477},[84,42571,32397],{"class":94},[84,42573,42574],{"class":477},"),(",[84,42576,1074],{"class":94},[84,42578,851],{"class":477},[84,42580,672],{"class":94},[84,42582,42583],{"class":477},"),",[84,42585,672],{"class":94},[84,42587,38374],{"class":477},[84,42589,42590,42592,42594,42596,42598,42600,42602,42604,42606,42608,42610,42612,42614,42616,42618],{"class":86,"line":10117},[84,42591,42556],{"class":477},[84,42593,35197],{"class":94},[84,42595,851],{"class":477},[84,42597,32397],{"class":94},[84,42599,42565],{"class":477},[84,42601,32397],{"class":94},[84,42603,851],{"class":477},[84,42605,42486],{"class":94},[84,42607,42574],{"class":477},[84,42609,672],{"class":94},[84,42611,851],{"class":477},[84,42613,684],{"class":94},[84,42615,42583],{"class":477},[84,42617,678],{"class":94},[84,42619,38374],{"class":477},[84,42621,42622,42624,42626,42628,42630,42632,42634,42636,42638,42640,42642,42644,42646],{"class":86,"line":10122},[84,42623,38424],{"class":477},[84,42625,31201],{"class":5545},[84,42627,523],{"class":473},[84,42629,547],{"class":94},[84,42631,851],{"class":477},[84,42633,31256],{"class":5545},[84,42635,523],{"class":473},[84,42637,553],{"class":94},[84,42639,851],{"class":477},[84,42641,31210],{"class":5545},[84,42643,523],{"class":473},[84,42645,692],{"class":94},[84,42647,484],{"class":477},[84,42649,42650],{"class":86,"line":10127},[84,42651,38453],{"class":477},[84,42653,42654,42656,42659,42661],{"class":86,"line":10132},[84,42655,31172],{"class":94},[84,42657,42658],{"class":477},".b4",[84,42660,523],{"class":473},[84,42662,38336],{"class":477},[84,42664,42665,42667,42670,42672,42674,42676,42678,42680,42683,42685,42687,42689,42691,42693,42695],{"class":86,"line":10141},[84,42666,42556],{"class":477},[84,42668,42669],{"class":94},"480",[84,42671,851],{"class":477},[84,42673,42486],{"class":94},[84,42675,42565],{"class":477},[84,42677,684],{"class":94},[84,42679,851],{"class":477},[84,42681,42682],{"class":94},"208",[84,42684,42574],{"class":477},[84,42686,1074],{"class":94},[84,42688,851],{"class":477},[84,42690,1080],{"class":94},[84,42692,42583],{"class":477},[84,42694,678],{"class":94},[84,42696,38374],{"class":477},[84,42698,42699,42701,42703,42705,42707,42709,42711,42713,42715,42717,42719,42721,42723,42725,42727],{"class":86,"line":10146},[84,42700,42556],{"class":477},[84,42702,38784],{"class":94},[84,42704,851],{"class":477},[84,42706,21377],{"class":94},[84,42708,42565],{"class":477},[84,42710,1091],{"class":94},[84,42712,851],{"class":477},[84,42714,31828],{"class":94},[84,42716,42574],{"class":477},[84,42718,1273],{"class":94},[84,42720,851],{"class":477},[84,42722,678],{"class":94},[84,42724,42583],{"class":477},[84,42726,678],{"class":94},[84,42728,38374],{"class":477},[84,42730,42731,42733,42735,42737,42739,42741,42743,42745,42747,42749,42751,42753,42755,42757,42759],{"class":86,"line":10152},[84,42732,42556],{"class":477},[84,42734,38784],{"class":94},[84,42736,851],{"class":477},[84,42738,32397],{"class":94},[84,42740,42565],{"class":477},[84,42742,32397],{"class":94},[84,42744,851],{"class":477},[84,42746,35197],{"class":94},[84,42748,42574],{"class":477},[84,42750,1273],{"class":94},[84,42752,851],{"class":477},[84,42754,678],{"class":94},[84,42756,42583],{"class":477},[84,42758,678],{"class":94},[84,42760,38374],{"class":477},[84,42762,42763,42765,42767,42769,42771,42773,42775,42777,42780,42782,42784,42786,42788,42790,42792],{"class":86,"line":10173},[84,42764,42556],{"class":477},[84,42766,38784],{"class":94},[84,42768,851],{"class":477},[84,42770,1091],{"class":94},[84,42772,42565],{"class":477},[84,42774,32397],{"class":94},[84,42776,851],{"class":477},[84,42778,42779],{"class":94},"288",[84,42781,42574],{"class":477},[84,42783,672],{"class":94},[84,42785,851],{"class":477},[84,42787,678],{"class":94},[84,42789,42583],{"class":477},[84,42791,678],{"class":94},[84,42793,38374],{"class":477},[84,42795,42796,42798,42801,42803,42805,42807,42809,42811,42814,42816,42818,42820,42822,42824,42826],{"class":86,"line":10179},[84,42797,42556],{"class":477},[84,42799,42800],{"class":94},"528",[84,42802,851],{"class":477},[84,42804,35197],{"class":94},[84,42806,42565],{"class":477},[84,42808,21377],{"class":94},[84,42810,851],{"class":477},[84,42812,42813],{"class":94},"320",[84,42815,42574],{"class":477},[84,42817,672],{"class":94},[84,42819,851],{"class":477},[84,42821,32397],{"class":94},[84,42823,42583],{"class":477},[84,42825,32397],{"class":94},[84,42827,38374],{"class":477},[84,42829,42830,42832,42834,42836,42838,42840,42842,42844,42846,42848,42850,42852,42854],{"class":86,"line":10193},[84,42831,38424],{"class":477},[84,42833,31201],{"class":5545},[84,42835,523],{"class":473},[84,42837,547],{"class":94},[84,42839,851],{"class":477},[84,42841,31256],{"class":5545},[84,42843,523],{"class":473},[84,42845,553],{"class":94},[84,42847,851],{"class":477},[84,42849,31210],{"class":5545},[84,42851,523],{"class":473},[84,42853,692],{"class":94},[84,42855,484],{"class":477},[84,42857,42858],{"class":86,"line":10199},[84,42859,38453],{"class":477},[84,42861,42862,42864,42867,42869],{"class":86,"line":10226},[84,42863,31172],{"class":94},[84,42865,42866],{"class":477},".b5",[84,42868,523],{"class":473},[84,42870,38336],{"class":477},[84,42872,42873,42875,42878,42880,42882,42884,42886,42888,42890,42892,42894,42896,42898,42900,42902],{"class":86,"line":10235},[84,42874,42556],{"class":477},[84,42876,42877],{"class":94},"832",[84,42879,851],{"class":477},[84,42881,35197],{"class":94},[84,42883,42565],{"class":477},[84,42885,21377],{"class":94},[84,42887,851],{"class":477},[84,42889,42813],{"class":94},[84,42891,42574],{"class":477},[84,42893,672],{"class":94},[84,42895,851],{"class":477},[84,42897,32397],{"class":94},[84,42899,42583],{"class":477},[84,42901,32397],{"class":94},[84,42903,38374],{"class":477},[84,42905,42906,42908,42910,42912,42914,42916,42918,42920,42922,42924,42926,42928,42930,42932,42934],{"class":86,"line":10241},[84,42907,42556],{"class":477},[84,42909,42877],{"class":94},[84,42911,851],{"class":477},[84,42913,35267],{"class":94},[84,42915,42565],{"class":477},[84,42917,42486],{"class":94},[84,42919,851],{"class":477},[84,42921,35267],{"class":94},[84,42923,42574],{"class":477},[84,42925,1080],{"class":94},[84,42927,851],{"class":477},[84,42929,32397],{"class":94},[84,42931,42583],{"class":477},[84,42933,32397],{"class":94},[84,42935,38374],{"class":477},[84,42937,42938,42941,42943,42945,42947],{"class":86,"line":10249},[84,42939,42940],{"class":477},"            nn.AdaptiveAvgPool2d((",[84,42942,692],{"class":94},[84,42944,851],{"class":477},[84,42946,692],{"class":94},[84,42948,42949],{"class":477},")),\n",[84,42951,42952],{"class":86,"line":10254},[84,42953,39117],{"class":477},[84,42955,42956,42958,42961,42963,42965],{"class":86,"line":16933},[84,42957,39122],{"class":477},[84,42959,42960],{"class":94},"1024",[84,42962,851],{"class":477},[84,42964,919],{"class":94},[84,42966,484],{"class":477},[84,42968,42969],{"class":86,"line":16939},[84,42970,38453],{"class":477},[84,42972,42973],{"class":86,"line":16962},[84,42974,42975],{"class":328},"        # 对模型参数初始化\n",[84,42977,42978,42980,42982,42984,42986],{"class":86,"line":16968},[84,42979,3732],{"class":473},[84,42981,39195],{"class":477},[84,42983,26371],{"class":473},[84,42985,39200],{"class":94},[84,42987,39203],{"class":477},[84,42989,42990,42992,42994],{"class":86,"line":16991},[84,42991,4971],{"class":473},[84,42993,39215],{"class":94},[84,42995,39218],{"class":477},[84,42997,42998,43000,43003,43005,43008,43010,43012,43014,43016],{"class":86,"line":17005},[84,42999,39228],{"class":477},[84,43001,43002],{"class":5545},"mode",[84,43004,523],{"class":473},[84,43006,43007],{"class":104},"'fan_out'",[84,43009,851],{"class":477},[84,43011,39231],{"class":5545},[84,43013,523],{"class":473},[84,43015,39236],{"class":104},[84,43017,484],{"class":477},[84,43019,43020],{"class":86,"line":17025},[84,43021,43022],{"class":328},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[84,43024,43025],{"class":86,"line":17031},[84,43026,43027],{"class":328},"                # ② mode = 'fan_out'决定使用的fan值：\n",[84,43029,43030],{"class":86,"line":17042},[84,43031,43032],{"class":328},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[84,43034,43035],{"class":86,"line":17065},[84,43036,43037],{"class":328},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[84,43039,43040],{"class":86,"line":17087},[84,43041,43042],{"class":328},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[84,43044,43045],{"class":86,"line":17092},[84,43046,43047],{"class":328},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[84,43049,43050,43052,43054,43056,43058,43060],{"class":86,"line":17098},[84,43051,39248],{"class":473},[84,43053,39251],{"class":477},[84,43055,39254],{"class":473},[84,43057,39257],{"class":473},[84,43059,39260],{"class":94},[84,43061,4068],{"class":477},[84,43063,43064,43066,43068],{"class":86,"line":17112},[84,43065,39272],{"class":477},[84,43067,666],{"class":94},[84,43069,484],{"class":477},[84,43071,43072,43075,43077],{"class":86,"line":17125},[84,43073,43074],{"class":473},"                elif",[84,43076,39215],{"class":94},[84,43078,39291],{"class":477},[84,43080,43081,43084,43086,43088,43090],{"class":86,"line":17130},[84,43082,43083],{"class":477},"                    nn.init.normal_(m.weight,",[84,43085,666],{"class":94},[84,43087,851],{"class":477},[84,43089,39313],{"class":94},[84,43091,484],{"class":477},[84,43093,43094,43097,43099,43101,43103,43105],{"class":86,"line":17144},[84,43095,43096],{"class":473},"                    if",[84,43098,39251],{"class":477},[84,43100,39254],{"class":473},[84,43102,39257],{"class":473},[84,43104,39260],{"class":94},[84,43106,4068],{"class":477},[84,43108,43109,43112,43114],{"class":86,"line":17149},[84,43110,43111],{"class":477},"                        nn.init.constant_(m.bias,",[84,43113,666],{"class":94},[84,43115,484],{"class":477},[84,43117,43118],{"class":86,"line":17155},[84,43119,35492],{"class":328},[84,43121,43122,43124,43126],{"class":86,"line":17160},[84,43123,31128],{"class":473},[84,43125,31420],{"class":90},[84,43127,31423],{"class":477},[84,43129,43130,43132,43134,43136],{"class":86,"line":17174},[84,43131,31428],{"class":477},[84,43133,523],{"class":473},[84,43135,31150],{"class":94},[84,43137,43138],{"class":477},".b1(x)\n",[84,43140,43141,43143,43145,43147],{"class":86,"line":17179},[84,43142,31428],{"class":477},[84,43144,523],{"class":473},[84,43146,31150],{"class":94},[84,43148,43149],{"class":477},".b2(x)\n",[84,43151,43152,43154,43156,43158],{"class":86,"line":17184},[84,43153,31428],{"class":477},[84,43155,523],{"class":473},[84,43157,31150],{"class":94},[84,43159,43160],{"class":477},".b3(x)\n",[84,43162,43163,43165,43167,43169],{"class":86,"line":17198},[84,43164,31428],{"class":477},[84,43166,523],{"class":473},[84,43168,31150],{"class":94},[84,43170,43171],{"class":477},".b4(x)\n",[84,43173,43174,43176,43178,43180],{"class":86,"line":17210},[84,43175,31428],{"class":477},[84,43177,523],{"class":473},[84,43179,31150],{"class":94},[84,43181,43182],{"class":477},".b5(x)\n",[84,43184,43185,43187],{"class":86,"line":17215},[84,43186,15081],{"class":473},[84,43188,31536],{"class":477},[84,43190,43191],{"class":86,"line":17228},[84,43192,2729],{"emptyLinePlaceholder":403},[84,43194,43195],{"class":86,"line":17233},[84,43196,43197],{"class":328},"# 模型展示\n",[84,43199,43200,43202,43204,43206,43208],{"class":86,"line":17238},[84,43201,1871],{"class":473},[84,43203,31547],{"class":94},[84,43205,3278],{"class":473},[84,43207,31552],{"class":104},[84,43209,4068],{"class":477},[84,43211,43212,43214,43216,43218,43220,43222,43224,43226,43228],{"class":86,"line":17243},[84,43213,31564],{"class":477},[84,43215,523],{"class":473},[84,43217,30778],{"class":477},[84,43219,31571],{"class":104},[84,43221,2034],{"class":473},[84,43223,31576],{"class":477},[84,43225,2031],{"class":473},[84,43227,30803],{"class":104},[84,43229,484],{"class":477},[84,43231,43232,43234,43236],{"class":86,"line":17256},[84,43233,31616],{"class":477},[84,43235,523],{"class":473},[84,43237,43238],{"class":477},"GoogLeNet(Inception).to(device)\n",[84,43240,43241,43243,43245,43247,43249,43251,43253,43255],{"class":86,"line":17261},[84,43242,31626],{"class":94},[84,43244,31629],{"class":477},[84,43246,692],{"class":94},[84,43248,851],{"class":477},[84,43250,31828],{"class":94},[84,43252,851],{"class":477},[84,43254,31828],{"class":94},[84,43256,31642],{"class":477},[28,43258,43259],{"start":98},[31,43260,39510],{},[75,43262,43264],{"className":30705,"code":43263,"language":30707,"meta":66,"style":66},"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",[81,43265,43266,43272,43278,43288,43294,43304,43314,43324,43334,43344,43348,43359,43369,43373,43377,43381,43389,43401,43411,43427,43437,43469,43483,43493,43503,43507,43517,43531,43541,43551,43561,43567,43571,43575,43579,43583,43587,43595,43615,43619,43623,43627,43631,43635,43651,43655,43659,43667,43671,43675,43683,43687,43691,43695,43703,43707,43711,43715,43719,43727,43731,43739,43743,43751,43755,43763,43767,43775,43779,43783,43791,43795,43799,43803,43815,43839,43853,43857,43861,43865,43873,43877,43885,43889,43897,43901,43909,43913,43921,43925,43933,43937,43949,43953,43961,43965,43973,43977,43981,43985,43989,43997,44001,44017,44021,44029,44033,44037,44041,44045,44049,44053,44057,44073,44077,44089,44093,44105,44109,44121,44125,44133,44137,44145,44149,44153,44157,44163,44167,44175,44179,44195,44199,44207,44211,44227,44239,44243,44255,44259,44263,44271,44275,44279,44287,44291,44299,44303,44311,44315,44319,44361,44403,44407,44411,44427,44431,44447,44451,44455,44463,44467,44471,44483,44521,44525,44529,44537,44541,44555,44565,44571,44577,44583,44589,44593,44597,44603,44607,44611,44619,44623,44641,44645,44649,44653,44669,44673,44677,44681,44685,44689,44709,44729,44733,44737,44741,44749,44757,44761,44777,44797,44817,44821,44825,44833,44841,44845,44849,44853,44865,44869,44879,44887,44904],{"__ignoreMap":66},[84,43267,43268,43270],{"class":86,"line":87},[84,43269,30719],{"class":473},[84,43271,32149],{"class":477},[84,43273,43274,43276],{"class":86,"line":98},[84,43275,30719],{"class":473},[84,43277,32156],{"class":477},[84,43279,43280,43282,43284,43286],{"class":86,"line":70},[84,43281,30719],{"class":473},[84,43283,32167],{"class":477},[84,43285,31710],{"class":473},[84,43287,32172],{"class":477},[84,43289,43290,43292],{"class":86,"line":120},[84,43291,30719],{"class":473},[84,43293,30722],{"class":477},[84,43295,43296,43298,43300,43302],{"class":86,"line":131},[84,43297,31064],{"class":473},[84,43299,31742],{"class":477},[84,43301,30719],{"class":473},[84,43303,32189],{"class":477},[84,43305,43306,43308,43310,43312],{"class":86,"line":145},[84,43307,31064],{"class":473},[84,43309,31695],{"class":477},[84,43311,30719],{"class":473},[84,43313,31700],{"class":477},[84,43315,43316,43318,43320,43322],{"class":86,"line":156},[84,43317,31064],{"class":473},[84,43319,31725],{"class":477},[84,43321,30719],{"class":473},[84,43323,31730],{"class":477},[84,43325,43326,43328,43330,43332],{"class":86,"line":164},[84,43327,30719],{"class":473},[84,43329,31742],{"class":477},[84,43331,31710],{"class":473},[84,43333,31747],{"class":477},[84,43335,43336,43338,43340,43342],{"class":86,"line":175},[84,43337,30719],{"class":473},[84,43339,31759],{"class":477},[84,43341,31710],{"class":473},[84,43343,31764],{"class":477},[84,43345,43346],{"class":86,"line":185},[84,43347,32234],{"class":328},[84,43349,43350,43352,43354,43356],{"class":86,"line":195},[84,43351,31064],{"class":473},[84,43353,32241],{"class":477},[84,43355,30719],{"class":473},[84,43357,43358],{"class":477}," GoogLeNet, Inception\n",[84,43360,43361,43363,43365,43367],{"class":86,"line":206},[84,43362,31064],{"class":473},[84,43364,31067],{"class":477},[84,43366,30719],{"class":473},[84,43368,31072],{"class":477},[84,43370,43371],{"class":86,"line":217},[84,43372,2729],{"emptyLinePlaceholder":403},[84,43374,43375],{"class":86,"line":227},[84,43376,2729],{"emptyLinePlaceholder":403},[84,43378,43379],{"class":86,"line":238},[84,43380,32269],{"class":328},[84,43382,43383,43385,43387],{"class":86,"line":249},[84,43384,32274],{"class":473},[84,43386,32277],{"class":90},[84,43388,32280],{"class":477},[84,43390,43391,43393,43395,43397,43399],{"class":86,"line":262},[84,43392,32285],{"class":477},[84,43394,523],{"class":473},[84,43396,31782],{"class":477},[84,43398,31790],{"class":104},[84,43400,31793],{"class":477},[84,43402,43403,43405,43407,43409],{"class":86,"line":273},[84,43404,32298],{"class":5545},[84,43406,523],{"class":473},[84,43408,31803],{"class":94},[84,43410,31793],{"class":477},[84,43412,43413,43415,43417,43419,43421,43423,43425],{"class":86,"line":283},[84,43414,32309],{"class":5545},[84,43416,523],{"class":473},[84,43418,31820],{"class":477},[84,43420,31823],{"class":5545},[84,43422,523],{"class":473},[84,43424,35776],{"class":94},[84,43426,31831],{"class":477},[84,43428,43429,43431,43433,43435],{"class":86,"line":294},[84,43430,32326],{"class":5545},[84,43432,523],{"class":473},[84,43434,31803],{"class":94},[84,43436,484],{"class":477},[84,43438,43439,43441,43443,43445,43447,43449,43451,43453,43455,43457,43459,43461,43463,43465,43467],{"class":86,"line":2028},[84,43440,32337],{"class":477},[84,43442,523],{"class":473},[84,43444,32342],{"class":477},[84,43446,32345],{"class":94},[84,43448,478],{"class":477},[84,43450,32350],{"class":94},[84,43452,928],{"class":473},[84,43454,7687],{"class":94},[84,43456,32357],{"class":477},[84,43458,32345],{"class":94},[84,43460,478],{"class":477},[84,43462,32364],{"class":94},[84,43464,928],{"class":473},[84,43466,7687],{"class":94},[84,43468,32371],{"class":477},[84,43470,43471,43473,43475,43477,43479,43481],{"class":86,"line":2057},[84,43472,32376],{"class":477},[84,43474,523],{"class":473},[84,43476,32381],{"class":477},[84,43478,31864],{"class":5545},[84,43480,523],{"class":473},[84,43482,31869],{"class":477},[84,43484,43485,43487,43489,43491],{"class":86,"line":2062},[84,43486,32392],{"class":5545},[84,43488,523],{"class":473},[84,43490,672],{"class":94},[84,43492,31793],{"class":477},[84,43494,43495,43497,43499,43501],{"class":86,"line":2079},[84,43496,32404],{"class":5545},[84,43498,523],{"class":473},[84,43500,31803],{"class":94},[84,43502,31793],{"class":477},[84,43504,43505],{"class":86,"line":2084},[84,43506,32415],{"class":328},[84,43508,43509,43511,43513,43515],{"class":86,"line":2089},[84,43510,32420],{"class":5545},[84,43512,523],{"class":473},[84,43514,868],{"class":94},[84,43516,484],{"class":477},[84,43518,43519,43521,43523,43525,43527,43529],{"class":86,"line":2094},[84,43520,32431],{"class":477},[84,43522,523],{"class":473},[84,43524,31861],{"class":477},[84,43526,31864],{"class":5545},[84,43528,523],{"class":473},[84,43530,32442],{"class":477},[84,43532,43533,43535,43537,43539],{"class":86,"line":2108},[84,43534,32447],{"class":5545},[84,43536,523],{"class":473},[84,43538,672],{"class":94},[84,43540,31793],{"class":477},[84,43542,43543,43545,43547,43549],{"class":86,"line":2113},[84,43544,32458],{"class":5545},[84,43546,523],{"class":473},[84,43548,31803],{"class":94},[84,43550,31793],{"class":477},[84,43552,43553,43555,43557,43559],{"class":86,"line":2906},[84,43554,32469],{"class":5545},[84,43556,523],{"class":473},[84,43558,868],{"class":94},[84,43560,484],{"class":477},[84,43562,43563,43565],{"class":86,"line":2920},[84,43564,4419],{"class":473},[84,43566,32482],{"class":477},[84,43568,43569],{"class":86,"line":2928},[84,43570,2729],{"emptyLinePlaceholder":403},[84,43572,43573],{"class":86,"line":2933},[84,43574,32491],{"class":328},[84,43576,43577],{"class":86,"line":2939},[84,43578,32496],{"class":328},[84,43580,43581],{"class":86,"line":2945},[84,43582,2729],{"emptyLinePlaceholder":403},[84,43584,43585],{"class":86,"line":2950},[84,43586,32505],{"class":328},[84,43588,43589,43591,43593],{"class":86,"line":8277},[84,43590,32274],{"class":473},[84,43592,32512],{"class":90},[84,43594,32515],{"class":477},[84,43596,43597,43599,43601,43603,43605,43607,43609,43611,43613],{"class":86,"line":8301},[84,43598,31564],{"class":477},[84,43600,523],{"class":473},[84,43602,30778],{"class":477},[84,43604,31571],{"class":104},[84,43606,2034],{"class":473},[84,43608,31576],{"class":477},[84,43610,2031],{"class":473},[84,43612,32534],{"class":104},[84,43614,484],{"class":477},[84,43616,43617],{"class":86,"line":8306},[84,43618,2729],{"emptyLinePlaceholder":403},[84,43620,43621],{"class":86,"line":8312},[84,43622,2729],{"emptyLinePlaceholder":403},[84,43624,43625],{"class":86,"line":8339},[84,43626,32549],{"class":328},[84,43628,43629],{"class":86,"line":8344},[84,43630,32554],{"class":328},[84,43632,43633],{"class":86,"line":8350},[84,43634,32559],{"class":328},[84,43636,43637,43639,43641,43643,43645,43647,43649],{"class":86,"line":8362},[84,43638,32564],{"class":477},[84,43640,523],{"class":473},[84,43642,32569],{"class":477},[84,43644,32572],{"class":5545},[84,43646,523],{"class":473},[84,43648,32577],{"class":94},[84,43650,484],{"class":477},[84,43652,43653],{"class":86,"line":8374},[84,43654,2729],{"emptyLinePlaceholder":403},[84,43656,43657],{"class":86,"line":8386},[84,43658,32588],{"class":328},[84,43660,43661,43663,43665],{"class":86,"line":10045},[84,43662,32593],{"class":477},[84,43664,523],{"class":473},[84,43666,32598],{"class":477},[84,43668,43669],{"class":86,"line":10070},[84,43670,2729],{"emptyLinePlaceholder":403},[84,43672,43673],{"class":86,"line":10093},[84,43674,32607],{"class":328},[84,43676,43677,43679,43681],{"class":86,"line":10117},[84,43678,31616],{"class":477},[84,43680,523],{"class":473},[84,43682,32616],{"class":477},[84,43684,43685],{"class":86,"line":10122},[84,43686,32621],{"class":328},[84,43688,43689],{"class":86,"line":10127},[84,43690,32626],{"class":328},[84,43692,43693],{"class":86,"line":10132},[84,43694,32631],{"class":328},[84,43696,43697,43699,43701],{"class":86,"line":10141},[84,43698,32636],{"class":477},[84,43700,523],{"class":473},[84,43702,32641],{"class":477},[84,43704,43705],{"class":86,"line":10146},[84,43706,2729],{"emptyLinePlaceholder":403},[84,43708,43709],{"class":86,"line":10152},[84,43710,2729],{"emptyLinePlaceholder":403},[84,43712,43713],{"class":86,"line":10173},[84,43714,32654],{"class":328},[84,43716,43717],{"class":86,"line":10179},[84,43718,32659],{"class":328},[84,43720,43721,43723,43725],{"class":86,"line":10193},[84,43722,32664],{"class":477},[84,43724,523],{"class":473},[84,43726,32669],{"class":94},[84,43728,43729],{"class":86,"line":10199},[84,43730,32674],{"class":328},[84,43732,43733,43735,43737],{"class":86,"line":10226},[84,43734,32679],{"class":477},[84,43736,523],{"class":473},[84,43738,32684],{"class":477},[84,43740,43741],{"class":86,"line":10235},[84,43742,32689],{"class":328},[84,43744,43745,43747,43749],{"class":86,"line":10241},[84,43746,32694],{"class":477},[84,43748,523],{"class":473},[84,43750,32684],{"class":477},[84,43752,43753],{"class":86,"line":10249},[84,43754,32703],{"class":328},[84,43756,43757,43759,43761],{"class":86,"line":10254},[84,43758,32708],{"class":477},[84,43760,523],{"class":473},[84,43762,32684],{"class":477},[84,43764,43765],{"class":86,"line":16933},[84,43766,32717],{"class":328},[84,43768,43769,43771,43773],{"class":86,"line":16939},[84,43770,32722],{"class":477},[84,43772,523],{"class":473},[84,43774,32684],{"class":477},[84,43776,43777],{"class":86,"line":16962},[84,43778,2729],{"emptyLinePlaceholder":403},[84,43780,43781],{"class":86,"line":16968},[84,43782,32735],{"class":328},[84,43784,43785,43787,43789],{"class":86,"line":16991},[84,43786,32740],{"class":477},[84,43788,523],{"class":473},[84,43790,32745],{"class":477},[84,43792,43793],{"class":86,"line":17005},[84,43794,2729],{"emptyLinePlaceholder":403},[84,43796,43797],{"class":86,"line":17025},[84,43798,2729],{"emptyLinePlaceholder":403},[84,43800,43801],{"class":86,"line":17031},[84,43802,32758],{"class":328},[84,43804,43805,43807,43809,43811,43813],{"class":86,"line":17042},[84,43806,3530],{"class":473},[84,43808,32765],{"class":477},[84,43810,26371],{"class":473},[84,43812,32770],{"class":94},[84,43814,32773],{"class":477},[84,43816,43817,43819,43821,43823,43825,43827,43829,43831,43833,43835,43837],{"class":86,"line":17065},[84,43818,32778],{"class":94},[84,43820,478],{"class":477},[84,43822,32783],{"class":104},[84,43824,32786],{"class":94},[84,43826,1057],{"class":104},[84,43828,32786],{"class":94},[84,43830,725],{"class":104},[84,43832,32795],{"class":477},[84,43834,1005],{"class":473},[84,43836,692],{"class":94},[84,43838,30824],{"class":477},[84,43840,43841,43843,43845,43847,43849,43851],{"class":86,"line":17087},[84,43842,32778],{"class":94},[84,43844,478],{"class":477},[84,43846,32810],{"class":104},[84,43848,928],{"class":473},[84,43850,919],{"class":94},[84,43852,484],{"class":477},[84,43854,43855],{"class":86,"line":17092},[84,43856,2729],{"emptyLinePlaceholder":403},[84,43858,43859],{"class":86,"line":17098},[84,43860,32825],{"class":328},[84,43862,43863],{"class":86,"line":17112},[84,43864,32830],{"class":328},[84,43866,43867,43869,43871],{"class":86,"line":17125},[84,43868,32835],{"class":477},[84,43870,523],{"class":473},[84,43872,32669],{"class":94},[84,43874,43875],{"class":86,"line":17130},[84,43876,32844],{"class":328},[84,43878,43879,43881,43883],{"class":86,"line":17144},[84,43880,32849],{"class":477},[84,43882,523],{"class":473},[84,43884,3414],{"class":94},[84,43886,43887],{"class":86,"line":17149},[84,43888,32858],{"class":328},[84,43890,43891,43893,43895],{"class":86,"line":17155},[84,43892,32863],{"class":477},[84,43894,523],{"class":473},[84,43896,32669],{"class":94},[84,43898,43899],{"class":86,"line":17160},[84,43900,32872],{"class":328},[84,43902,43903,43905,43907],{"class":86,"line":17174},[84,43904,32877],{"class":477},[84,43906,523],{"class":473},[84,43908,3414],{"class":94},[84,43910,43911],{"class":86,"line":17179},[84,43912,32886],{"class":328},[84,43914,43915,43917,43919],{"class":86,"line":17184},[84,43916,32891],{"class":477},[84,43918,523],{"class":473},[84,43920,3414],{"class":94},[84,43922,43923],{"class":86,"line":17198},[84,43924,32900],{"class":328},[84,43926,43927,43929,43931],{"class":86,"line":17210},[84,43928,32905],{"class":477},[84,43930,523],{"class":473},[84,43932,3414],{"class":94},[84,43934,43935],{"class":86,"line":17215},[84,43936,32914],{"class":328},[84,43938,43939,43941,43943,43945,43947],{"class":86,"line":17228},[84,43940,3732],{"class":473},[84,43942,31928],{"class":477},[84,43944,26371],{"class":473},[84,43946,31933],{"class":94},[84,43948,32927],{"class":477},[84,43950,43951],{"class":86,"line":17233},[84,43952,32932],{"class":328},[84,43954,43955,43957,43959],{"class":86,"line":17238},[84,43956,32937],{"class":477},[84,43958,523],{"class":473},[84,43960,32942],{"class":477},[84,43962,43963],{"class":86,"line":17243},[84,43964,32947],{"class":328},[84,43966,43967,43969,43971],{"class":86,"line":17256},[84,43968,32952],{"class":477},[84,43970,523],{"class":473},[84,43972,32957],{"class":477},[84,43974,43975],{"class":86,"line":17261},[84,43976,32963],{"class":328},[84,43978,43979],{"class":86,"line":32960},[84,43980,32969],{"class":477},[84,43982,43983],{"class":86,"line":32966},[84,43984,32975],{"class":328},[84,43986,43987],{"class":86,"line":32972},[84,43988,32981],{"class":328},[84,43990,43991,43993,43995],{"class":86,"line":32978},[84,43992,32987],{"class":477},[84,43994,523],{"class":473},[84,43996,32992],{"class":477},[84,43998,43999],{"class":86,"line":32984},[84,44000,32998],{"class":328},[84,44002,44003,44005,44007,44009,44011,44013,44015],{"class":86,"line":32995},[84,44004,33004],{"class":477},[84,44006,523],{"class":473},[84,44008,33009],{"class":477},[84,44010,33012],{"class":5545},[84,44012,523],{"class":473},[84,44014,692],{"class":94},[84,44016,484],{"class":477},[84,44018,44019],{"class":86,"line":33001},[84,44020,33024],{"class":328},[84,44022,44023,44025,44027],{"class":86,"line":33021},[84,44024,33030],{"class":477},[84,44026,523],{"class":473},[84,44028,33035],{"class":477},[84,44030,44031],{"class":86,"line":33027},[84,44032,33041],{"class":328},[84,44034,44035],{"class":86,"line":33038},[84,44036,33047],{"class":477},[84,44038,44039],{"class":86,"line":33044},[84,44040,33053],{"class":328},[84,44042,44043],{"class":86,"line":33050},[84,44044,33059],{"class":477},[84,44046,44047],{"class":86,"line":33056},[84,44048,33065],{"class":328},[84,44050,44051],{"class":86,"line":33062},[84,44052,33071],{"class":477},[84,44054,44055],{"class":86,"line":33068},[84,44056,33077],{"class":328},[84,44058,44059,44061,44063,44065,44067,44069,44071],{"class":86,"line":33074},[84,44060,33083],{"class":477},[84,44062,9806],{"class":473},[84,44064,33088],{"class":477},[84,44066,928],{"class":473},[84,44068,33093],{"class":477},[84,44070,666],{"class":94},[84,44072,484],{"class":477},[84,44074,44075],{"class":86,"line":33080},[84,44076,33103],{"class":328},[84,44078,44079,44081,44083,44085,44087],{"class":86,"line":33100},[84,44080,33109],{"class":477},[84,44082,9806],{"class":473},[84,44084,33114],{"class":477},[84,44086,3278],{"class":473},[84,44088,33119],{"class":477},[84,44090,44091],{"class":86,"line":33106},[84,44092,33125],{"class":328},[84,44094,44095,44097,44099,44101,44103],{"class":86,"line":33122},[84,44096,33131],{"class":477},[84,44098,9806],{"class":473},[84,44100,33093],{"class":477},[84,44102,666],{"class":94},[84,44104,484],{"class":477},[84,44106,44107],{"class":86,"line":33128},[84,44108,33145],{"class":328},[84,44110,44111,44113,44115,44117,44119],{"class":86,"line":33142},[84,44112,3732],{"class":473},[84,44114,33153],{"class":477},[84,44116,26371],{"class":473},[84,44118,31933],{"class":94},[84,44120,33160],{"class":477},[84,44122,44123],{"class":86,"line":33148},[84,44124,33166],{"class":328},[84,44126,44127,44129,44131],{"class":86,"line":33163},[84,44128,32937],{"class":477},[84,44130,523],{"class":473},[84,44132,32942],{"class":477},[84,44134,44135],{"class":86,"line":33169},[84,44136,33181],{"class":328},[84,44138,44139,44141,44143],{"class":86,"line":33178},[84,44140,32952],{"class":477},[84,44142,523],{"class":473},[84,44144,32957],{"class":477},[84,44146,44147],{"class":86,"line":33184},[84,44148,33196],{"class":328},[84,44150,44151],{"class":86,"line":33193},[84,44152,33202],{"class":477},[84,44154,44155],{"class":86,"line":33199},[84,44156,36683],{"class":328},[84,44158,44159,44161],{"class":86,"line":33205},[84,44160,33208],{"class":473},[84,44162,33211],{"class":477},[84,44164,44165],{"class":86,"line":33214},[84,44166,33217],{"class":328},[84,44168,44169,44171,44173],{"class":86,"line":33220},[84,44170,36698],{"class":477},[84,44172,523],{"class":473},[84,44174,32992],{"class":477},[84,44176,44177],{"class":86,"line":33231},[84,44178,33234],{"class":328},[84,44180,44181,44183,44185,44187,44189,44191,44193],{"class":86,"line":33237},[84,44182,36711],{"class":477},[84,44184,523],{"class":473},[84,44186,33009],{"class":477},[84,44188,33012],{"class":5545},[84,44190,523],{"class":473},[84,44192,692],{"class":94},[84,44194,484],{"class":477},[84,44196,44197],{"class":86,"line":33256},[84,44198,33259],{"class":328},[84,44200,44201,44203,44205],{"class":86,"line":33262},[84,44202,36732],{"class":477},[84,44204,523],{"class":473},[84,44206,33035],{"class":477},[84,44208,44209],{"class":86,"line":33273},[84,44210,33276],{"class":328},[84,44212,44213,44215,44217,44219,44221,44223,44225],{"class":86,"line":33279},[84,44214,36745],{"class":477},[84,44216,9806],{"class":473},[84,44218,36750],{"class":477},[84,44220,928],{"class":473},[84,44222,33093],{"class":477},[84,44224,666],{"class":94},[84,44226,484],{"class":477},[84,44228,44229,44231,44233,44235,44237],{"class":86,"line":33299},[84,44230,36763],{"class":477},[84,44232,9806],{"class":473},[84,44234,33114],{"class":477},[84,44236,3278],{"class":473},[84,44238,33119],{"class":477},[84,44240,44241],{"class":86,"line":33315},[84,44242,36776],{"class":328},[84,44244,44245,44247,44249,44251,44253],{"class":86,"line":33321},[84,44246,36781],{"class":477},[84,44248,9806],{"class":473},[84,44250,33093],{"class":477},[84,44252,666],{"class":94},[84,44254,484],{"class":477},[84,44256,44257],{"class":86,"line":33335},[84,44258,33338],{"class":328},[84,44260,44261],{"class":86,"line":33341},[84,44262,33344],{"class":328},[84,44264,44265,44267,44269],{"class":86,"line":33347},[84,44266,33350],{"class":477},[84,44268,1057],{"class":473},[84,44270,33355],{"class":477},[84,44272,44273],{"class":86,"line":33358},[84,44274,33361],{"class":328},[84,44276,44277],{"class":86,"line":33364},[84,44278,33367],{"class":328},[84,44280,44281,44283,44285],{"class":86,"line":33370},[84,44282,33373],{"class":477},[84,44284,1057],{"class":473},[84,44286,33355],{"class":477},[84,44288,44289],{"class":86,"line":33380},[84,44290,33383],{"class":328},[84,44292,44293,44295,44297],{"class":86,"line":33386},[84,44294,33389],{"class":477},[84,44296,1057],{"class":473},[84,44298,33394],{"class":477},[84,44300,44301],{"class":86,"line":33397},[84,44302,33400],{"class":328},[84,44304,44305,44307,44309],{"class":86,"line":33403},[84,44306,33406],{"class":477},[84,44308,1057],{"class":473},[84,44310,33394],{"class":477},[84,44312,44313],{"class":86,"line":33413},[84,44314,2729],{"emptyLinePlaceholder":403},[84,44316,44317],{"class":86,"line":33418},[84,44318,33421],{"class":328},[84,44320,44321,44323,44325,44327,44329,44331,44333,44335,44337,44339,44341,44343,44345,44347,44349,44351,44353,44355,44357,44359],{"class":86,"line":33424},[84,44322,32778],{"class":94},[84,44324,478],{"class":477},[84,44326,3921],{"class":104},[84,44328,32786],{"class":94},[84,44330,33435],{"class":104},[84,44332,1369],{"class":94},[84,44334,33440],{"class":473},[84,44336,1419],{"class":94},[84,44338,33445],{"class":104},[84,44340,1369],{"class":94},[84,44342,33440],{"class":473},[84,44344,1419],{"class":94},[84,44346,3921],{"class":104},[84,44348,33456],{"class":477},[84,44350,1005],{"class":473},[84,44352,692],{"class":94},[84,44354,33463],{"class":477},[84,44356,1005],{"class":473},[84,44358,692],{"class":94},[84,44360,33470],{"class":477},[84,44362,44363,44365,44367,44369,44371,44373,44375,44377,44379,44381,44383,44385,44387,44389,44391,44393,44395,44397,44399,44401],{"class":86,"line":33473},[84,44364,32778],{"class":94},[84,44366,478],{"class":477},[84,44368,3921],{"class":104},[84,44370,32786],{"class":94},[84,44372,33484],{"class":104},[84,44374,1369],{"class":94},[84,44376,33440],{"class":473},[84,44378,1419],{"class":94},[84,44380,33493],{"class":104},[84,44382,1369],{"class":94},[84,44384,33440],{"class":473},[84,44386,1419],{"class":94},[84,44388,3921],{"class":104},[84,44390,33504],{"class":477},[84,44392,1005],{"class":473},[84,44394,692],{"class":94},[84,44396,33511],{"class":477},[84,44398,1005],{"class":473},[84,44400,692],{"class":94},[84,44402,33470],{"class":477},[84,44404,44405],{"class":86,"line":33520},[84,44406,2729],{"emptyLinePlaceholder":403},[84,44408,44409],{"class":86,"line":33525},[84,44410,33528],{"class":328},[84,44412,44413,44415,44417,44419,44421,44423,44425],{"class":86,"line":33531},[84,44414,2826],{"class":473},[84,44416,33536],{"class":477},[84,44418,1005],{"class":473},[84,44420,692],{"class":94},[84,44422,1413],{"class":477},[84,44424,1433],{"class":473},[84,44426,33547],{"class":477},[84,44428,44429],{"class":86,"line":33550},[84,44430,33553],{"class":328},[84,44432,44433,44435,44437,44439,44441,44443,44445],{"class":86,"line":33556},[84,44434,33559],{"class":477},[84,44436,517],{"class":94},[84,44438,523],{"class":473},[84,44440,33566],{"class":477},[84,44442,1005],{"class":473},[84,44444,692],{"class":94},[84,44446,33573],{"class":477},[84,44448,44449],{"class":86,"line":33576},[84,44450,33579],{"class":328},[84,44452,44453],{"class":86,"line":33582},[84,44454,33585],{"class":328},[84,44456,44457,44459,44461],{"class":86,"line":33588},[84,44458,33591],{"class":477},[84,44460,523],{"class":473},[84,44462,32641],{"class":477},[84,44464,44465],{"class":86,"line":33598},[84,44466,2729],{"emptyLinePlaceholder":403},[84,44468,44469],{"class":86,"line":33603},[84,44470,33606],{"class":328},[84,44472,44473,44475,44477,44479,44481],{"class":86,"line":33609},[84,44474,33612],{"class":477},[84,44476,523],{"class":473},[84,44478,33617],{"class":477},[84,44480,1005],{"class":473},[84,44482,33622],{"class":477},[84,44484,44485,44487,44489,44491,44493,44495,44497,44499,44501,44503,44505,44507,44509,44511,44513,44515,44517,44519],{"class":86,"line":33625},[84,44486,32778],{"class":94},[84,44488,478],{"class":477},[84,44490,33632],{"class":104},[84,44492,1369],{"class":94},[84,44494,33637],{"class":473},[84,44496,1419],{"class":94},[84,44498,1017],{"class":104},[84,44500,1369],{"class":94},[84,44502,33637],{"class":473},[84,44504,1419],{"class":94},[84,44506,33650],{"class":104},[84,44508,33653],{"class":477},[84,44510,33656],{"class":473},[84,44512,1380],{"class":94},[84,44514,33661],{"class":477},[84,44516,801],{"class":473},[84,44518,1380],{"class":94},[84,44520,30824],{"class":477},[84,44522,44523],{"class":86,"line":33670},[84,44524,37060],{"class":328},[84,44526,44527],{"class":86,"line":33676},[84,44528,37065],{"class":328},[84,44530,44531,44533,44535],{"class":86,"line":33682},[84,44532,37070],{"class":477},[84,44534,33694],{"class":104},[84,44536,484],{"class":477},[84,44538,44539],{"class":86,"line":33688},[84,44540,33714],{"class":328},[84,44542,44543,44545,44547,44549,44551,44553],{"class":86,"line":33699},[84,44544,33720],{"class":477},[84,44546,523],{"class":473},[84,44548,33725],{"class":477},[84,44550,33728],{"class":5545},[84,44552,523],{"class":473},[84,44554,1886],{"class":477},[84,44556,44557,44559,44561,44563],{"class":86,"line":33705},[84,44558,33738],{"class":104},[84,44560,1332],{"class":477},[84,44562,33743],{"class":94},[84,44564,33746],{"class":477},[84,44566,44567,44569],{"class":86,"line":33711},[84,44568,33752],{"class":104},[84,44570,33755],{"class":477},[84,44572,44573,44575],{"class":86,"line":33717},[84,44574,33761],{"class":104},[84,44576,33764],{"class":477},[84,44578,44579,44581],{"class":86,"line":33735},[84,44580,33770],{"class":104},[84,44582,33773],{"class":477},[84,44584,44585,44587],{"class":86,"line":33749},[84,44586,33779],{"class":104},[84,44588,33782],{"class":477},[84,44590,44591],{"class":86,"line":33758},[84,44592,33788],{"class":477},[84,44594,44595],{"class":86,"line":33767},[84,44596,33794],{"class":328},[84,44598,44599,44601],{"class":86,"line":33776},[84,44600,4419],{"class":473},[84,44602,33802],{"class":477},[84,44604,44605],{"class":86,"line":33785},[84,44606,2729],{"emptyLinePlaceholder":403},[84,44608,44609],{"class":86,"line":33791},[84,44610,33813],{"class":328},[84,44612,44613,44615,44617],{"class":86,"line":33797},[84,44614,32274],{"class":473},[84,44616,33821],{"class":90},[84,44618,33824],{"class":477},[84,44620,44621],{"class":86,"line":33805},[84,44622,33830],{"class":328},[84,44624,44625,44627,44629,44631,44633,44635,44637,44639],{"class":86,"line":33810},[84,44626,33836],{"class":477},[84,44628,32020],{"class":5545},[84,44630,523],{"class":473},[84,44632,478],{"class":477},[84,44634,971],{"class":94},[84,44636,851],{"class":477},[84,44638,140],{"class":94},[84,44640,30824],{"class":477},[84,44642,44643],{"class":86,"line":33816},[84,44644,33856],{"class":328},[84,44646,44647],{"class":86,"line":33827},[84,44648,33862],{"class":328},[84,44650,44651],{"class":86,"line":33833},[84,44652,33868],{"class":328},[84,44654,44655,44657,44659,44661,44663,44665,44667],{"class":86,"line":33853},[84,44656,32054],{"class":477},[84,44658,692],{"class":94},[84,44660,851],{"class":477},[84,44662,553],{"class":94},[84,44664,851],{"class":477},[84,44666,692],{"class":94},[84,44668,484],{"class":477},[84,44670,44671],{"class":86,"line":33859},[84,44672,33891],{"class":328},[84,44674,44675],{"class":86,"line":33865},[84,44676,33897],{"class":328},[84,44678,44679],{"class":86,"line":33871},[84,44680,33903],{"class":328},[84,44682,44683],{"class":86,"line":33888},[84,44684,33909],{"class":328},[84,44686,44687],{"class":86,"line":33894},[84,44688,33915],{"class":328},[84,44690,44691,44693,44695,44697,44699,44701,44703,44705,44707],{"class":86,"line":33900},[84,44692,33921],{"class":477},[84,44694,33924],{"class":104},[84,44696,33927],{"class":477},[84,44698,33930],{"class":104},[84,44700,851],{"class":477},[84,44702,33935],{"class":5545},[84,44704,523],{"class":473},[84,44706,33940],{"class":104},[84,44708,484],{"class":477},[84,44710,44711,44713,44715,44717,44719,44721,44723,44725,44727],{"class":86,"line":33906},[84,44712,33921],{"class":477},[84,44714,33924],{"class":104},[84,44716,33952],{"class":477},[84,44718,33955],{"class":104},[84,44720,851],{"class":477},[84,44722,33935],{"class":5545},[84,44724,523],{"class":473},[84,44726,33964],{"class":104},[84,44728,484],{"class":477},[84,44730,44731],{"class":86,"line":33912},[84,44732,33972],{"class":328},[84,44734,44735],{"class":86,"line":33918},[84,44736,33978],{"class":477},[84,44738,44739],{"class":86,"line":33945},[84,44740,33984],{"class":328},[84,44742,44743,44745,44747],{"class":86,"line":33969},[84,44744,33990],{"class":477},[84,44746,33993],{"class":104},[84,44748,484],{"class":477},[84,44750,44751,44753,44755],{"class":86,"line":33975},[84,44752,34001],{"class":477},[84,44754,34004],{"class":104},[84,44756,484],{"class":477},[84,44758,44759],{"class":86,"line":33981},[84,44760,34012],{"class":328},[84,44762,44763,44765,44767,44769,44771,44773,44775],{"class":86,"line":33987},[84,44764,32054],{"class":477},[84,44766,692],{"class":94},[84,44768,851],{"class":477},[84,44770,553],{"class":94},[84,44772,851],{"class":477},[84,44774,553],{"class":94},[84,44776,484],{"class":477},[84,44778,44779,44781,44783,44785,44787,44789,44791,44793,44795],{"class":86,"line":33998},[84,44780,33921],{"class":477},[84,44782,33924],{"class":104},[84,44784,34039],{"class":477},[84,44786,33930],{"class":104},[84,44788,851],{"class":477},[84,44790,33935],{"class":5545},[84,44792,523],{"class":473},[84,44794,34050],{"class":104},[84,44796,484],{"class":477},[84,44798,44799,44801,44803,44805,44807,44809,44811,44813,44815],{"class":86,"line":34009},[84,44800,33921],{"class":477},[84,44802,33924],{"class":104},[84,44804,34062],{"class":477},[84,44806,33955],{"class":104},[84,44808,851],{"class":477},[84,44810,33935],{"class":5545},[84,44812,523],{"class":473},[84,44814,34073],{"class":104},[84,44816,484],{"class":477},[84,44818,44819],{"class":86,"line":34015},[84,44820,34081],{"class":328},[84,44822,44823],{"class":86,"line":34032},[84,44824,33978],{"class":477},[84,44826,44827,44829,44831],{"class":86,"line":34055},[84,44828,33990],{"class":477},[84,44830,33924],{"class":104},[84,44832,484],{"class":477},[84,44834,44835,44837,44839],{"class":86,"line":34078},[84,44836,34001],{"class":477},[84,44838,34103],{"class":104},[84,44840,484],{"class":477},[84,44842,44843],{"class":86,"line":34084},[84,44844,34111],{"class":477},[84,44846,44847],{"class":86,"line":34089},[84,44848,2729],{"emptyLinePlaceholder":403},[84,44850,44851],{"class":86,"line":34098},[84,44852,34122],{"class":328},[84,44854,44855,44857,44859,44861,44863],{"class":86,"line":34108},[84,44856,1871],{"class":473},[84,44858,31547],{"class":94},[84,44860,3278],{"class":473},[84,44862,31552],{"class":104},[84,44864,4068],{"class":477},[84,44866,44867],{"class":86,"line":34114},[84,44868,34141],{"class":328},[84,44870,44871,44874,44876],{"class":86,"line":34119},[84,44872,44873],{"class":477},"    GoogLeNet",[84,44875,523],{"class":473},[84,44877,44878],{"class":477},"GoogLeNet(Inception)\n",[84,44880,44881,44883,44885],{"class":86,"line":34125},[84,44882,34158],{"class":477},[84,44884,523],{"class":473},[84,44886,34163],{"class":477},[84,44888,44889,44891,44893,44896,44898,44900,44902],{"class":86,"line":34138},[84,44890,33720],{"class":477},[84,44892,523],{"class":473},[84,44894,44895],{"class":477},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[84,44897,34176],{"class":5545},[84,44899,523],{"class":473},[84,44901,1424],{"class":94},[84,44903,484],{"class":477},[84,44905,44906],{"class":86,"line":34144},[84,44907,34188],{"class":477},[28,44909,44910],{"start":70},[31,44911,40901],{},[75,44913,44915],{"className":30705,"code":44914,"language":30707,"meta":66,"style":66},"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",[81,44916,44917,44923,44933,44943,44947,44957,44968,44972,44976,44980,44988,45004,45014,45030,45040,45054,45058,45068,45078,45088,45094,45098,45102,45110,45114,45130,45138,45142,45146,45154,45162,45166,45170,45174,45178,45184,45188,45198,45206,45214,45218,45222,45226,45234,45238,45254,45258,45262,45266,45278,45282,45294,45298,45302,45314,45318,45328,45332,45336,45348,45352,45360,45364,45368,45376,45380,45388,45392,45396,45400,45404,45408,45424,45432,45436,45440,45488,45494,45498,45508,45516,45524,45528,45532,45536,45540,45548,45552,45568,45572,45580,45588],{"__ignoreMap":66},[84,44918,44919,44921],{"class":86,"line":87},[84,44920,30719],{"class":473},[84,44922,30722],{"class":477},[84,44924,44925,44927,44929,44931],{"class":86,"line":98},[84,44926,30719],{"class":473},[84,44928,31742],{"class":477},[84,44930,31710],{"class":473},[84,44932,31747],{"class":477},[84,44934,44935,44937,44939,44941],{"class":86,"line":70},[84,44936,31064],{"class":473},[84,44938,31725],{"class":477},[84,44940,30719],{"class":473},[84,44942,31730],{"class":477},[84,44944,44945],{"class":86,"line":120},[84,44946,34249],{"class":328},[84,44948,44949,44951,44953,44955],{"class":86,"line":131},[84,44950,31064],{"class":473},[84,44952,31695],{"class":477},[84,44954,30719],{"class":473},[84,44956,31700],{"class":477},[84,44958,44959,44961,44963,44965],{"class":86,"line":145},[84,44960,31064],{"class":473},[84,44962,32241],{"class":477},[84,44964,30719],{"class":473},[84,44966,44967],{"class":477}," GoogLeNet,Inception\n",[84,44969,44970],{"class":86,"line":156},[84,44971,2729],{"emptyLinePlaceholder":403},[84,44973,44974],{"class":86,"line":164},[84,44975,2729],{"emptyLinePlaceholder":403},[84,44977,44978],{"class":86,"line":175},[84,44979,34278],{"class":328},[84,44981,44982,44984,44986],{"class":86,"line":185},[84,44983,32274],{"class":473},[84,44985,34285],{"class":90},[84,44987,32280],{"class":477},[84,44989,44990,44992,44994,44996,44998,45000,45002],{"class":86,"line":195},[84,44991,34292],{"class":477},[84,44993,523],{"class":473},[84,44995,31782],{"class":477},[84,44997,31785],{"class":5545},[84,44999,523],{"class":473},[84,45001,31790],{"class":104},[84,45003,31793],{"class":477},[84,45005,45006,45008,45010,45012],{"class":86,"line":206},[84,45007,34309],{"class":5545},[84,45009,523],{"class":473},[84,45011,34314],{"class":94},[84,45013,31793],{"class":477},[84,45015,45016,45018,45020,45022,45024,45026,45028],{"class":86,"line":217},[84,45017,34321],{"class":5545},[84,45019,523],{"class":473},[84,45021,31820],{"class":477},[84,45023,31823],{"class":5545},[84,45025,523],{"class":473},[84,45027,35776],{"class":94},[84,45029,31831],{"class":477},[84,45031,45032,45034,45036,45038],{"class":86,"line":227},[84,45033,34338],{"class":5545},[84,45035,523],{"class":473},[84,45037,31803],{"class":94},[84,45039,484],{"class":477},[84,45041,45042,45044,45046,45048,45050,45052],{"class":86,"line":238},[84,45043,34349],{"class":477},[84,45045,523],{"class":473},[84,45047,31861],{"class":477},[84,45049,31864],{"class":5545},[84,45051,523],{"class":473},[84,45053,34360],{"class":477},[84,45055,45056],{"class":86,"line":249},[84,45057,34365],{"class":328},[84,45059,45060,45062,45064,45066],{"class":86,"line":262},[84,45061,34370],{"class":5545},[84,45063,523],{"class":473},[84,45065,692],{"class":94},[84,45067,31793],{"class":477},[84,45069,45070,45072,45074,45076],{"class":86,"line":273},[84,45071,34381],{"class":5545},[84,45073,523],{"class":473},[84,45075,31803],{"class":94},[84,45077,31793],{"class":477},[84,45079,45080,45082,45084,45086],{"class":86,"line":283},[84,45081,34392],{"class":5545},[84,45083,523],{"class":473},[84,45085,666],{"class":94},[84,45087,484],{"class":477},[84,45089,45090,45092],{"class":86,"line":294},[84,45091,4419],{"class":473},[84,45093,34405],{"class":477},[84,45095,45096],{"class":86,"line":2028},[84,45097,2729],{"emptyLinePlaceholder":403},[84,45099,45100],{"class":86,"line":2057},[84,45101,34414],{"class":328},[84,45103,45104,45106,45108],{"class":86,"line":2062},[84,45105,32274],{"class":473},[84,45107,34421],{"class":90},[84,45109,34424],{"class":477},[84,45111,45112],{"class":86,"line":2079},[84,45113,34429],{"class":328},[84,45115,45116,45118,45120,45122,45124,45126,45128],{"class":86,"line":2084},[84,45117,31564],{"class":477},[84,45119,523],{"class":473},[84,45121,31571],{"class":104},[84,45123,2034],{"class":473},[84,45125,31576],{"class":477},[84,45127,2031],{"class":473},[84,45129,34446],{"class":104},[84,45131,45132,45134,45136],{"class":86,"line":2089},[84,45133,31616],{"class":477},[84,45135,523],{"class":473},[84,45137,32616],{"class":477},[84,45139,45140],{"class":86,"line":2094},[84,45141,2729],{"emptyLinePlaceholder":403},[84,45143,45144],{"class":86,"line":2108},[84,45145,34463],{"class":328},[84,45147,45148,45150,45152],{"class":86,"line":2113},[84,45149,34468],{"class":477},[84,45151,523],{"class":473},[84,45153,32669],{"class":94},[84,45155,45156,45158,45160],{"class":86,"line":2906},[84,45157,34477],{"class":477},[84,45159,523],{"class":473},[84,45161,3414],{"class":94},[84,45163,45164],{"class":86,"line":2920},[84,45165,2729],{"emptyLinePlaceholder":403},[84,45167,45168],{"class":86,"line":2928},[84,45169,34490],{"class":328},[84,45171,45172],{"class":86,"line":2933},[84,45173,34495],{"class":328},[84,45175,45176],{"class":86,"line":2939},[84,45177,34500],{"class":328},[84,45179,45180,45182],{"class":86,"line":2945},[84,45181,34505],{"class":473},[84,45183,33211],{"class":477},[84,45185,45186],{"class":86,"line":2950},[84,45187,34512],{"class":328},[84,45189,45190,45192,45194,45196],{"class":86,"line":8277},[84,45191,3732],{"class":473},[84,45193,34519],{"class":477},[84,45195,26371],{"class":473},[84,45197,34524],{"class":477},[84,45199,45200,45202,45204],{"class":86,"line":8301},[84,45201,34529],{"class":477},[84,45203,523],{"class":473},[84,45205,34534],{"class":477},[84,45207,45208,45210,45212],{"class":86,"line":8306},[84,45209,34539],{"class":477},[84,45211,523],{"class":473},[84,45213,34544],{"class":477},[84,45215,45216],{"class":86,"line":8312},[84,45217,34549],{"class":328},[84,45219,45220],{"class":86,"line":8339},[84,45221,33202],{"class":477},[84,45223,45224],{"class":86,"line":8344},[84,45225,34558],{"class":328},[84,45227,45228,45230,45232],{"class":86,"line":8350},[84,45229,32987],{"class":477},[84,45231,523],{"class":473},[84,45233,34567],{"class":477},[84,45235,45236],{"class":86,"line":8362},[84,45237,34572],{"class":328},[84,45239,45240,45242,45244,45246,45248,45250,45252],{"class":86,"line":8374},[84,45241,33004],{"class":477},[84,45243,523],{"class":473},[84,45245,33009],{"class":477},[84,45247,33012],{"class":5545},[84,45249,523],{"class":473},[84,45251,692],{"class":94},[84,45253,484],{"class":477},[84,45255,45256],{"class":86,"line":8386},[84,45257,34593],{"class":328},[84,45259,45260],{"class":86,"line":10045},[84,45261,34598],{"class":328},[84,45263,45264],{"class":86,"line":10070},[84,45265,34603],{"class":328},[84,45267,45268,45270,45272,45274,45276],{"class":86,"line":10093},[84,45269,34608],{"class":477},[84,45271,9806],{"class":473},[84,45273,33114],{"class":477},[84,45275,3278],{"class":473},[84,45277,34617],{"class":477},[84,45279,45280],{"class":86,"line":10117},[84,45281,34622],{"class":328},[84,45283,45284,45286,45288,45290,45292],{"class":86,"line":10122},[84,45285,34627],{"class":477},[84,45287,9806],{"class":473},[84,45289,34632],{"class":477},[84,45291,666],{"class":94},[84,45293,484],{"class":477},[84,45295,45296],{"class":86,"line":10127},[84,45297,2729],{"emptyLinePlaceholder":403},[84,45299,45300],{"class":86,"line":10132},[84,45301,34645],{"class":328},[84,45303,45304,45306,45308,45310,45312],{"class":86,"line":10141},[84,45305,34650],{"class":477},[84,45307,523],{"class":473},[84,45309,34655],{"class":477},[84,45311,1057],{"class":473},[84,45313,34660],{"class":477},[84,45315,45316],{"class":86,"line":10146},[84,45317,34665],{"class":328},[84,45319,45320,45322,45324,45326],{"class":86,"line":10152},[84,45321,32778],{"class":94},[84,45323,478],{"class":477},[84,45325,34674],{"class":104},[84,45327,34677],{"class":477},[84,45329,45330],{"class":86,"line":10173},[84,45331,2729],{"emptyLinePlaceholder":403},[84,45333,45334],{"class":86,"line":10179},[84,45335,34686],{"class":328},[84,45337,45338,45340,45342,45344,45346],{"class":86,"line":10193},[84,45339,1871],{"class":473},[84,45341,31547],{"class":94},[84,45343,3278],{"class":473},[84,45345,31552],{"class":104},[84,45347,4068],{"class":477},[84,45349,45350],{"class":86,"line":10199},[84,45351,34703],{"class":328},[84,45353,45354,45356,45358],{"class":86,"line":10226},[84,45355,31616],{"class":477},[84,45357,523],{"class":473},[84,45359,44878],{"class":477},[84,45361,45362],{"class":86,"line":10235},[84,45363,34716],{"class":328},[84,45365,45366],{"class":86,"line":10241},[84,45367,34721],{"class":328},[84,45369,45370,45372,45374],{"class":86,"line":10249},[84,45371,34726],{"class":477},[84,45373,34729],{"class":104},[84,45375,30824],{"class":477},[84,45377,45378],{"class":86,"line":10254},[84,45379,34736],{"class":328},[84,45381,45382,45384,45386],{"class":86,"line":16933},[84,45383,34349],{"class":477},[84,45385,523],{"class":473},[84,45387,34745],{"class":477},[84,45389,45390],{"class":86,"line":16939},[84,45391,34750],{"class":328},[84,45393,45394],{"class":86,"line":16962},[84,45395,34755],{"class":477},[84,45397,45398],{"class":86,"line":16968},[84,45399,2729],{"emptyLinePlaceholder":403},[84,45401,45402],{"class":86,"line":16991},[84,45403,34764],{"class":328},[84,45405,45406],{"class":86,"line":17005},[84,45407,34769],{"class":328},[84,45409,45410,45412,45414,45416,45418,45420,45422],{"class":86,"line":17025},[84,45411,31564],{"class":477},[84,45413,523],{"class":473},[84,45415,31571],{"class":104},[84,45417,2034],{"class":473},[84,45419,31576],{"class":477},[84,45421,2031],{"class":473},[84,45423,34446],{"class":104},[84,45425,45426,45428,45430],{"class":86,"line":17031},[84,45427,31616],{"class":477},[84,45429,523],{"class":473},[84,45431,32616],{"class":477},[84,45433,45434],{"class":86,"line":17042},[84,45435,34798],{"class":328},[84,45437,45438],{"class":86,"line":17065},[84,45439,34803],{"class":328},[84,45441,45442,45444,45446,45448,45450,45452,45454,45456,45458,45460,45462,45464,45466,45468,45470,45472,45474,45476,45478,45480,45482,45484,45486],{"class":86,"line":17087},[84,45443,34808],{"class":477},[84,45445,523],{"class":473},[84,45447,1363],{"class":477},[84,45449,34815],{"class":104},[84,45451,851],{"class":477},[84,45453,34820],{"class":104},[84,45455,851],{"class":477},[84,45457,34825],{"class":104},[84,45459,851],{"class":477},[84,45461,34830],{"class":104},[84,45463,851],{"class":477},[84,45465,34835],{"class":104},[84,45467,851],{"class":477},[84,45469,34840],{"class":104},[84,45471,851],{"class":477},[84,45473,34845],{"class":104},[84,45475,851],{"class":477},[84,45477,34850],{"class":104},[84,45479,851],{"class":477},[84,45481,34855],{"class":104},[84,45483,851],{"class":477},[84,45485,34860],{"class":104},[84,45487,33573],{"class":477},[84,45489,45490,45492],{"class":86,"line":17092},[84,45491,34505],{"class":473},[84,45493,33211],{"class":477},[84,45495,45496],{"class":86,"line":17098},[84,45497,34873],{"class":328},[84,45499,45500,45502,45504,45506],{"class":86,"line":17112},[84,45501,3732],{"class":473},[84,45503,34880],{"class":477},[84,45505,26371],{"class":473},[84,45507,34524],{"class":477},[84,45509,45510,45512,45514],{"class":86,"line":17125},[84,45511,32937],{"class":477},[84,45513,523],{"class":473},[84,45515,32942],{"class":477},[84,45517,45518,45520,45522],{"class":86,"line":17130},[84,45519,32952],{"class":477},[84,45521,523],{"class":473},[84,45523,32957],{"class":477},[84,45525,45526],{"class":86,"line":17144},[84,45527,2729],{"emptyLinePlaceholder":403},[84,45529,45530],{"class":86,"line":17149},[84,45531,34909],{"class":328},[84,45533,45534],{"class":86,"line":17155},[84,45535,33202],{"class":477},[84,45537,45538],{"class":86,"line":17160},[84,45539,34918],{"class":328},[84,45541,45542,45544,45546],{"class":86,"line":17174},[84,45543,32987],{"class":477},[84,45545,523],{"class":473},[84,45547,32992],{"class":477},[84,45549,45550],{"class":86,"line":17179},[84,45551,34931],{"class":328},[84,45553,45554,45556,45558,45560,45562,45564,45566],{"class":86,"line":17184},[84,45555,33004],{"class":477},[84,45557,523],{"class":473},[84,45559,33009],{"class":477},[84,45561,33012],{"class":5545},[84,45563,523],{"class":473},[84,45565,692],{"class":94},[84,45567,484],{"class":477},[84,45569,45570],{"class":86,"line":17198},[84,45571,34952],{"class":328},[84,45573,45574,45576,45578],{"class":86,"line":17210},[84,45575,34957],{"class":477},[84,45577,523],{"class":473},[84,45579,34962],{"class":477},[84,45581,45582,45584,45586],{"class":86,"line":17215},[84,45583,34967],{"class":477},[84,45585,523],{"class":473},[84,45587,34972],{"class":477},[84,45589,45590,45592,45594,45596,45598,45600,45602,45604],{"class":86,"line":17228},[84,45591,34977],{"class":94},[84,45593,478],{"class":477},[84,45595,34982],{"class":104},[84,45597,34985],{"class":477},[84,45599,34988],{"class":104},[84,45601,851],{"class":477},[84,45603,34993],{"class":104},[84,45605,34996],{"class":477},[23,45607,45609],{"id":45608},"_24训练自己的数据集","2.4.训练自己的数据集",[35,45611,45612],{},"猫狗分类任务",[35,45614,45615],{},"划分数据集和验证集",[75,45617,45619],{"className":30705,"code":45618,"language":30707,"meta":66,"style":66},"# 创建脚本，用于划分数据集和验证集\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",[81,45620,45621,45626,45633,45638,45649,45656,45660,45670,45684,45693,45697,45702,45712,45732,45736,45741,45751,45762,45775,45779,45784,45793,45803,45814,45818,45823,45833,45837,45842,45847,45852,45857,45862,45866,45876,45903,45916,45928,45955,45960,45965,45979,45984,45996,46011,46026,46034,46038,46043,46049,46061,46074,46079,46084,46089,46139,46145,46149],{"__ignoreMap":66},[84,45622,45623],{"class":86,"line":87},[84,45624,45625],{"class":328},"# 创建脚本，用于划分数据集和验证集\n",[84,45627,45628,45630],{"class":86,"line":98},[84,45629,30719],{"class":473},[84,45631,45632],{"class":477}," os\n",[84,45634,45635],{"class":86,"line":70},[84,45636,45637],{"class":328},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[84,45639,45640,45642,45645,45647],{"class":86,"line":120},[84,45641,31064],{"class":473},[84,45643,45644],{"class":477}," shutil ",[84,45646,30719],{"class":473},[84,45648,32149],{"class":477},[84,45650,45651,45653],{"class":86,"line":131},[84,45652,30719],{"class":473},[84,45654,45655],{"class":477}," random\n",[84,45657,45658],{"class":86,"line":145},[84,45659,2729],{"emptyLinePlaceholder":403},[84,45661,45662,45664,45667],{"class":86,"line":156},[84,45663,32274],{"class":473},[84,45665,45666],{"class":90}," mkfile",[84,45668,45669],{"class":477},"(file):\n",[84,45671,45672,45674,45676,45679,45682],{"class":86,"line":164},[84,45673,3430],{"class":473},[84,45675,39257],{"class":473},[84,45677,45678],{"class":477}," os.path.exists(",[84,45680,45681],{"class":5545},"file",[84,45683,31113],{"class":477},[84,45685,45686,45689,45691],{"class":86,"line":175},[84,45687,45688],{"class":477},"        os.makedirs(",[84,45690,45681],{"class":5545},[84,45692,484],{"class":477},[84,45694,45695],{"class":86,"line":185},[84,45696,2729],{"emptyLinePlaceholder":403},[84,45698,45699],{"class":86,"line":195},[84,45700,45701],{"class":328},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[84,45703,45704,45707,45709],{"class":86,"line":206},[84,45705,45706],{"class":477},"file_path",[84,45708,523],{"class":473},[84,45710,45711],{"class":104},"'data_cat_dog'\n",[84,45713,45714,45717,45719,45722,45724,45727,45729],{"class":86,"line":217},[84,45715,45716],{"class":477},"flower_class",[84,45718,523],{"class":473},[84,45720,45721],{"class":477},"[cla ",[84,45723,3354],{"class":473},[84,45725,45726],{"class":477}," cla ",[84,45728,26371],{"class":473},[84,45730,45731],{"class":477}," os.listdir(file_path)]\n",[84,45733,45734],{"class":86,"line":227},[84,45735,2729],{"emptyLinePlaceholder":403},[84,45737,45738],{"class":86,"line":238},[84,45739,45740],{"class":328},"# 创建训练集train文件夹\n",[84,45742,45743,45746,45749],{"class":86,"line":249},[84,45744,45745],{"class":477},"mkfile(",[84,45747,45748],{"class":104},"'data\u002Ftrain'",[84,45750,484],{"class":477},[84,45752,45753,45755,45757,45759],{"class":86,"line":262},[84,45754,3354],{"class":473},[84,45756,45726],{"class":477},[84,45758,26371],{"class":473},[84,45760,45761],{"class":477}," flower_class:\n",[84,45763,45764,45767,45770,45772],{"class":86,"line":273},[84,45765,45766],{"class":477},"    mkfile(",[84,45768,45769],{"class":104},"'data\u002Ftrain\u002F'",[84,45771,954],{"class":473},[84,45773,45774],{"class":477},"cla)\n",[84,45776,45777],{"class":86,"line":283},[84,45778,2729],{"emptyLinePlaceholder":403},[84,45780,45781],{"class":86,"line":294},[84,45782,45783],{"class":328},"# 创建验证集val文件夹\n",[84,45785,45786,45788,45791],{"class":86,"line":2028},[84,45787,45745],{"class":477},[84,45789,45790],{"class":104},"'data\u002Ftest'",[84,45792,484],{"class":477},[84,45794,45795,45797,45799,45801],{"class":86,"line":2057},[84,45796,3354],{"class":473},[84,45798,45726],{"class":477},[84,45800,26371],{"class":473},[84,45802,45761],{"class":477},[84,45804,45805,45807,45810,45812],{"class":86,"line":2062},[84,45806,45766],{"class":477},[84,45808,45809],{"class":104},"'data\u002Ftest\u002F'",[84,45811,954],{"class":473},[84,45813,45774],{"class":477},[84,45815,45816],{"class":86,"line":2079},[84,45817,2729],{"emptyLinePlaceholder":403},[84,45819,45820],{"class":86,"line":2084},[84,45821,45822],{"class":328},"# 划分比例，训练集：测试集=9：1\n",[84,45824,45825,45828,45830],{"class":86,"line":2089},[84,45826,45827],{"class":477},"split_rate",[84,45829,523],{"class":473},[84,45831,45832],{"class":94},"0.1\n",[84,45834,45835],{"class":86,"line":2094},[84,45836,2729],{"emptyLinePlaceholder":403},[84,45838,45839],{"class":86,"line":2108},[84,45840,45841],{"class":328},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[84,45843,45844],{"class":86,"line":2113},[84,45845,45846],{"class":328},"# cla_path：当前类别的原始图片路径\n",[84,45848,45849],{"class":86,"line":2906},[84,45850,45851],{"class":328},"# images：当前类别下所有图片的文件名列表\n",[84,45853,45854],{"class":86,"line":2920},[84,45855,45856],{"class":328},"# num：该类别图片总数\n",[84,45858,45859],{"class":86,"line":2928},[84,45860,45861],{"class":328},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[84,45863,45864],{"class":86,"line":2933},[84,45865,2729],{"emptyLinePlaceholder":403},[84,45867,45868,45870,45872,45874],{"class":86,"line":2939},[84,45869,3354],{"class":473},[84,45871,45726],{"class":477},[84,45873,26371],{"class":473},[84,45875,45761],{"class":477},[84,45877,45878,45881,45883,45886,45888,45891,45894,45896,45898,45900],{"class":86,"line":2945},[84,45879,45880],{"class":477},"    cla_path ",[84,45882,523],{"class":473},[84,45884,45885],{"class":477}," file_path ",[84,45887,954],{"class":473},[84,45889,45890],{"class":104}," '\u002F'",[84,45892,45893],{"class":473}," +",[84,45895,45726],{"class":477},[84,45897,954],{"class":473},[84,45899,45890],{"class":104},[84,45901,45902],{"class":328},"  # 某一类别的子目录\n",[84,45904,45905,45908,45910,45913],{"class":86,"line":2950},[84,45906,45907],{"class":477},"    images ",[84,45909,523],{"class":473},[84,45911,45912],{"class":477}," os.listdir(cla_path)  ",[84,45914,45915],{"class":328},"# iamges 列表存储了该目录下所有图像的名称\n",[84,45917,45918,45921,45923,45925],{"class":86,"line":8277},[84,45919,45920],{"class":477},"    num ",[84,45922,523],{"class":473},[84,45924,7660],{"class":94},[84,45926,45927],{"class":477},"(images)\n",[84,45929,45930,45933,45935,45938,45940,45942,45944,45947,45949,45952],{"class":86,"line":8301},[84,45931,45932],{"class":477},"    eval_index ",[84,45934,523],{"class":473},[84,45936,45937],{"class":477}," random.sample(images, ",[84,45939,966],{"class":5545},[84,45941,523],{"class":473},[84,45943,481],{"class":94},[84,45945,45946],{"class":477},"(num ",[84,45948,928],{"class":473},[84,45950,45951],{"class":477}," split_rate))  ",[84,45953,45954],{"class":328},"# 从images列表中随机抽取 k 个图像名称\n",[84,45956,45957],{"class":86,"line":8306},[84,45958,45959],{"class":328},"    # 遍历该类别下的所有图片\n",[84,45961,45962],{"class":86,"line":8312},[84,45963,45964],{"class":328},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[84,45966,45967,45969,45972,45974,45976],{"class":86,"line":8339},[84,45968,3530],{"class":473},[84,45970,45971],{"class":477}," index, image ",[84,45973,26371],{"class":473},[84,45975,31933],{"class":94},[84,45977,45978],{"class":477},"(images):\n",[84,45980,45981],{"class":86,"line":8344},[84,45982,45983],{"class":328},"        # eval_index 中保存验证集val的图像名称\n",[84,45985,45986,45988,45991,45993],{"class":86,"line":8350},[84,45987,2826],{"class":473},[84,45989,45990],{"class":477}," image ",[84,45992,26371],{"class":473},[84,45994,45995],{"class":477}," eval_index:\n",[84,45997,45998,46001,46003,46006,46008],{"class":86,"line":8362},[84,45999,46000],{"class":477},"            image_path ",[84,46002,523],{"class":473},[84,46004,46005],{"class":477}," cla_path ",[84,46007,954],{"class":473},[84,46009,46010],{"class":477}," image\n",[84,46012,46013,46016,46018,46021,46023],{"class":86,"line":8374},[84,46014,46015],{"class":477},"            new_path ",[84,46017,523],{"class":473},[84,46019,46020],{"class":104}," 'data\u002Ftest\u002F'",[84,46022,45893],{"class":473},[84,46024,46025],{"class":477}," cla\n",[84,46027,46028,46031],{"class":86,"line":8386},[84,46029,46030],{"class":477},"            copy(image_path, new_path)  ",[84,46032,46033],{"class":328},"# 将选中的图像复制到新路径\n",[84,46035,46036],{"class":86,"line":10045},[84,46037,2729],{"emptyLinePlaceholder":403},[84,46039,46040],{"class":86,"line":10070},[84,46041,46042],{"class":328},"        # 其余的图像保存在训练集train中\n",[84,46044,46045,46047],{"class":86,"line":10093},[84,46046,2863],{"class":473},[84,46048,4068],{"class":477},[84,46050,46051,46053,46055,46057,46059],{"class":86,"line":10117},[84,46052,46000],{"class":477},[84,46054,523],{"class":473},[84,46056,46005],{"class":477},[84,46058,954],{"class":473},[84,46060,46010],{"class":477},[84,46062,46063,46065,46067,46070,46072],{"class":86,"line":10122},[84,46064,46015],{"class":477},[84,46066,523],{"class":473},[84,46068,46069],{"class":104}," 'data\u002Ftrain\u002F'",[84,46071,45893],{"class":473},[84,46073,46025],{"class":477},[84,46075,46076],{"class":86,"line":10127},[84,46077,46078],{"class":477},"            copy(image_path, new_path)\n",[84,46080,46081],{"class":86,"line":10132},[84,46082,46083],{"class":328},"            # 打印进度条信息\n",[84,46085,46086],{"class":86,"line":10141},[84,46087,46088],{"class":328},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[84,46090,46091,46093,46095,46097,46100,46102,46104,46107,46109,46111,46113,46116,46119,46121,46123,46126,46129,46131,46133,46136],{"class":86,"line":10146},[84,46092,32778],{"class":94},[84,46094,478],{"class":477},[84,46096,725],{"class":104},[84,46098,46099],{"class":94},"\\r",[84,46101,1363],{"class":104},[84,46103,32786],{"class":94},[84,46105,46106],{"class":104},"] processing [",[84,46108,32786],{"class":94},[84,46110,1057],{"class":104},[84,46112,32786],{"class":94},[84,46114,46115],{"class":104},"]\"",[84,46117,46118],{"class":477},".format(cla, index ",[84,46120,954],{"class":473},[84,46122,25446],{"class":94},[84,46124,46125],{"class":477},", num), ",[84,46127,46128],{"class":5545},"end",[84,46130,523],{"class":473},[84,46132,7981],{"class":104},[84,46134,46135],{"class":477},")  ",[84,46137,46138],{"class":328},"# processing bar\n",[84,46140,46141,46143],{"class":86,"line":10152},[84,46142,31626],{"class":94},[84,46144,2305],{"class":477},[84,46146,46147],{"class":86,"line":10173},[84,46148,2729],{"emptyLinePlaceholder":403},[84,46150,46151,46153,46155,46158],{"class":86,"line":10179},[84,46152,30742],{"class":94},[84,46154,478],{"class":477},[84,46156,46157],{"class":104},"\"processing done!\"",[84,46159,484],{"class":477},[35,46161,46162],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22327,46164,46166],{"id":46165},"_242模型代码","2.4.2.模型代码",[35,46168,46169],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[75,46171,46173],{"className":30705,"code":46172,"language":30707,"meta":66,"style":66},"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",[81,46174,46175,46181,46191,46201,46205,46221,46229,46243,46253,46257,46287,46291,46325,46371,46375,46409,46455,46459,46463,46497,46527,46531,46539,46553,46575,46597,46615,46619,46633,46637,46641,46657,46661,46669,46683,46693,46737,46741,46769,46773,46783,46811,46815,46851,46855,46883,46887,46897,46929,46961,46989,46993,47003,47035,47067,47099,47131,47163,47191,47195,47205,47237,47269,47281,47285,47297,47301,47305,47317,47325,47345,47349,47353,47357,47361,47365,47369,47383,47391,47399,47411,47425,47433,47437,47445,47455,47465,47475,47485,47495,47501,47505,47509,47521,47541,47549],{"__ignoreMap":66},[84,46176,46177,46179],{"class":86,"line":87},[84,46178,30719],{"class":473},[84,46180,30722],{"class":477},[84,46182,46183,46185,46187,46189],{"class":86,"line":98},[84,46184,31064],{"class":473},[84,46186,31067],{"class":477},[84,46188,30719],{"class":473},[84,46190,31072],{"class":477},[84,46192,46193,46195,46197,46199],{"class":86,"line":70},[84,46194,31064],{"class":473},[84,46196,31084],{"class":477},[84,46198,30719],{"class":473},[84,46200,31089],{"class":477},[84,46202,46203],{"class":86,"line":120},[84,46204,2729],{"emptyLinePlaceholder":403},[84,46206,46207,46209,46211,46213,46215,46217,46219],{"class":86,"line":131},[84,46208,15023],{"class":473},[84,46210,41820],{"class":90},[84,46212,478],{"class":477},[84,46214,31105],{"class":90},[84,46216,1031],{"class":477},[84,46218,31110],{"class":90},[84,46220,31113],{"class":477},[84,46222,46223,46225,46227],{"class":86,"line":145},[84,46224,31128],{"class":473},[84,46226,31131],{"class":94},[84,46228,41839],{"class":477},[84,46230,46231,46233,46235,46237,46239,46241],{"class":86,"line":156},[84,46232,31144],{"class":94},[84,46234,41846],{"class":477},[84,46236,31150],{"class":94},[84,46238,31153],{"class":477},[84,46240,31156],{"class":94},[84,46242,2305],{"class":477},[84,46244,46245,46247,46249,46251],{"class":86,"line":164},[84,46246,31172],{"class":94},[84,46248,35098],{"class":477},[84,46250,523],{"class":473},[84,46252,35103],{"class":477},[84,46254,46255],{"class":86,"line":175},[84,46256,41869],{"class":328},[84,46258,46259,46261,46263,46265,46267,46269,46271,46273,46275,46277,46279,46281,46283,46285],{"class":86,"line":185},[84,46260,31172],{"class":94},[84,46262,41876],{"class":477},[84,46264,523],{"class":473},[84,46266,31180],{"class":477},[84,46268,31183],{"class":5545},[84,46270,523],{"class":473},[84,46272,41887],{"class":477},[84,46274,31192],{"class":5545},[84,46276,523],{"class":473},[84,46278,41894],{"class":477},[84,46280,31201],{"class":5545},[84,46282,523],{"class":473},[84,46284,692],{"class":94},[84,46286,484],{"class":477},[84,46288,46289],{"class":86,"line":195},[84,46290,41907],{"class":328},[84,46292,46293,46295,46297,46299,46301,46303,46305,46307,46309,46311,46313,46315,46317,46319,46321,46323],{"class":86,"line":206},[84,46294,31172],{"class":94},[84,46296,41914],{"class":477},[84,46298,523],{"class":473},[84,46300,31180],{"class":477},[84,46302,31183],{"class":5545},[84,46304,523],{"class":473},[84,46306,41887],{"class":477},[84,46308,31192],{"class":5545},[84,46310,523],{"class":473},[84,46312,41931],{"class":477},[84,46314,666],{"class":94},[84,46316,41936],{"class":477},[84,46318,31201],{"class":5545},[84,46320,523],{"class":473},[84,46322,692],{"class":94},[84,46324,484],{"class":477},[84,46326,46327,46329,46331,46333,46335,46337,46339,46341,46343,46345,46347,46349,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369],{"class":86,"line":217},[84,46328,31172],{"class":94},[84,46330,41951],{"class":477},[84,46332,523],{"class":473},[84,46334,31180],{"class":477},[84,46336,31183],{"class":5545},[84,46338,523],{"class":473},[84,46340,41931],{"class":477},[84,46342,666],{"class":94},[84,46344,41936],{"class":477},[84,46346,31192],{"class":5545},[84,46348,523],{"class":473},[84,46350,41931],{"class":477},[84,46352,692],{"class":94},[84,46354,41936],{"class":477},[84,46356,31201],{"class":5545},[84,46358,523],{"class":473},[84,46360,547],{"class":94},[84,46362,851],{"class":477},[84,46364,31210],{"class":5545},[84,46366,523],{"class":473},[84,46368,692],{"class":94},[84,46370,484],{"class":477},[84,46372,46373],{"class":86,"line":227},[84,46374,41996],{"class":328},[84,46376,46377,46379,46381,46383,46385,46387,46389,46391,46393,46395,46397,46399,46401,46403,46405,46407],{"class":86,"line":238},[84,46378,31172],{"class":94},[84,46380,42003],{"class":477},[84,46382,523],{"class":473},[84,46384,31180],{"class":477},[84,46386,31183],{"class":5545},[84,46388,523],{"class":473},[84,46390,41887],{"class":477},[84,46392,31192],{"class":5545},[84,46394,523],{"class":473},[84,46396,42020],{"class":477},[84,46398,666],{"class":94},[84,46400,41936],{"class":477},[84,46402,31201],{"class":5545},[84,46404,523],{"class":473},[84,46406,692],{"class":94},[84,46408,484],{"class":477},[84,46410,46411,46413,46415,46417,46419,46421,46423,46425,46427,46429,46431,46433,46435,46437,46439,46441,46443,46445,46447,46449,46451,46453],{"class":86,"line":249},[84,46412,31172],{"class":94},[84,46414,42039],{"class":477},[84,46416,523],{"class":473},[84,46418,31180],{"class":477},[84,46420,31183],{"class":5545},[84,46422,523],{"class":473},[84,46424,42020],{"class":477},[84,46426,666],{"class":94},[84,46428,41936],{"class":477},[84,46430,31192],{"class":5545},[84,46432,523],{"class":473},[84,46434,42020],{"class":477},[84,46436,692],{"class":94},[84,46438,41936],{"class":477},[84,46440,31201],{"class":5545},[84,46442,523],{"class":473},[84,46444,792],{"class":94},[84,46446,851],{"class":477},[84,46448,31210],{"class":5545},[84,46450,523],{"class":473},[84,46452,553],{"class":94},[84,46454,484],{"class":477},[84,46456,46457],{"class":86,"line":262},[84,46458,42084],{"class":328},[84,46460,46461],{"class":86,"line":273},[84,46462,42089],{"class":328},[84,46464,46465,46467,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495],{"class":86,"line":283},[84,46466,31172],{"class":94},[84,46468,42096],{"class":477},[84,46470,523],{"class":473},[84,46472,35156],{"class":477},[84,46474,31201],{"class":5545},[84,46476,523],{"class":473},[84,46478,547],{"class":94},[84,46480,851],{"class":477},[84,46482,31256],{"class":5545},[84,46484,523],{"class":473},[84,46486,692],{"class":94},[84,46488,851],{"class":477},[84,46490,31210],{"class":5545},[84,46492,523],{"class":473},[84,46494,692],{"class":94},[84,46496,484],{"class":477},[84,46498,46499,46501,46503,46505,46507,46509,46511,46513,46515,46517,46519,46521,46523,46525],{"class":86,"line":294},[84,46500,31172],{"class":94},[84,46502,42131],{"class":477},[84,46504,523],{"class":473},[84,46506,31180],{"class":477},[84,46508,31183],{"class":5545},[84,46510,523],{"class":473},[84,46512,41887],{"class":477},[84,46514,31192],{"class":5545},[84,46516,523],{"class":473},[84,46518,42148],{"class":477},[84,46520,31201],{"class":5545},[84,46522,523],{"class":473},[84,46524,692],{"class":94},[84,46526,484],{"class":477},[84,46528,46529],{"class":86,"line":2028},[84,46530,2729],{"emptyLinePlaceholder":403},[84,46532,46533,46535,46537],{"class":86,"line":2057},[84,46534,31128],{"class":473},[84,46536,31420],{"class":90},[84,46538,31423],{"class":477},[84,46540,46541,46543,46545,46547,46549,46551],{"class":86,"line":2062},[84,46542,42173],{"class":477},[84,46544,523],{"class":473},[84,46546,31150],{"class":94},[84,46548,35511],{"class":477},[84,46550,31150],{"class":94},[84,46552,42184],{"class":477},[84,46554,46555,46557,46559,46561,46563,46565,46567,46569,46571,46573],{"class":86,"line":2079},[84,46556,7414],{"class":477},[84,46558,523],{"class":473},[84,46560,31150],{"class":94},[84,46562,35511],{"class":477},[84,46564,31150],{"class":94},[84,46566,42199],{"class":477},[84,46568,31150],{"class":94},[84,46570,35511],{"class":477},[84,46572,31150],{"class":94},[84,46574,42208],{"class":477},[84,46576,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595],{"class":86,"line":2084},[84,46578,42213],{"class":477},[84,46580,523],{"class":473},[84,46582,31150],{"class":94},[84,46584,35511],{"class":477},[84,46586,31150],{"class":94},[84,46588,42224],{"class":477},[84,46590,31150],{"class":94},[84,46592,35511],{"class":477},[84,46594,31150],{"class":94},[84,46596,42233],{"class":477},[84,46598,46599,46601,46603,46605,46607,46609,46611,46613],{"class":86,"line":2089},[84,46600,42238],{"class":477},[84,46602,523],{"class":473},[84,46604,31150],{"class":94},[84,46606,35511],{"class":477},[84,46608,31150],{"class":94},[84,46610,42249],{"class":477},[84,46612,31150],{"class":94},[84,46614,42254],{"class":477},[84,46616,46617],{"class":86,"line":2094},[84,46618,42259],{"class":328},[84,46620,46621,46623,46625,46627,46629,46631],{"class":86,"line":2108},[84,46622,15081],{"class":473},[84,46624,42266],{"class":477},[84,46626,33012],{"class":5545},[84,46628,523],{"class":473},[84,46630,692],{"class":94},[84,46632,484],{"class":477},[84,46634,46635],{"class":86,"line":2113},[84,46636,2729],{"emptyLinePlaceholder":403},[84,46638,46639],{"class":86,"line":2906},[84,46640,42287],{"class":328},[84,46642,46643,46645,46647,46649,46651,46653,46655],{"class":86,"line":2920},[84,46644,15023],{"class":473},[84,46646,42294],{"class":90},[84,46648,478],{"class":477},[84,46650,31105],{"class":90},[84,46652,1031],{"class":477},[84,46654,31110],{"class":90},[84,46656,31113],{"class":477},[84,46658,46659],{"class":86,"line":2928},[84,46660,42309],{"class":328},[84,46662,46663,46665,46667],{"class":86,"line":2933},[84,46664,31128],{"class":473},[84,46666,31131],{"class":94},[84,46668,42318],{"class":477},[84,46670,46671,46673,46675,46677,46679,46681],{"class":86,"line":2939},[84,46672,31144],{"class":94},[84,46674,42325],{"class":477},[84,46676,31150],{"class":94},[84,46678,31153],{"class":477},[84,46680,31156],{"class":94},[84,46682,2305],{"class":477},[84,46684,46685,46687,46689,46691],{"class":86,"line":2945},[84,46686,31172],{"class":94},[84,46688,42340],{"class":477},[84,46690,523],{"class":473},[84,46692,38336],{"class":477},[84,46694,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735],{"class":86,"line":2950},[84,46696,38341],{"class":477},[84,46698,31183],{"class":5545},[84,46700,523],{"class":473},[84,46702,547],{"class":94},[84,46704,851],{"class":477},[84,46706,31192],{"class":5545},[84,46708,523],{"class":473},[84,46710,678],{"class":94},[84,46712,851],{"class":477},[84,46714,31201],{"class":5545},[84,46716,523],{"class":473},[84,46718,842],{"class":94},[84,46720,851],{"class":477},[84,46722,31256],{"class":5545},[84,46724,523],{"class":473},[84,46726,553],{"class":94},[84,46728,851],{"class":477},[84,46730,31210],{"class":5545},[84,46732,523],{"class":473},[84,46734,547],{"class":94},[84,46736,38374],{"class":477},[84,46738,46739],{"class":86,"line":8277},[84,46740,38379],{"class":477},[84,46742,46743,46745,46747,46749,46751,46753,46755,46757,46759,46761,46763,46765,46767],{"class":86,"line":8301},[84,46744,38424],{"class":477},[84,46746,31201],{"class":5545},[84,46748,523],{"class":473},[84,46750,547],{"class":94},[84,46752,851],{"class":477},[84,46754,31256],{"class":5545},[84,46756,523],{"class":473},[84,46758,553],{"class":94},[84,46760,851],{"class":477},[84,46762,31210],{"class":5545},[84,46764,523],{"class":473},[84,46766,692],{"class":94},[84,46768,484],{"class":477},[84,46770,46771],{"class":86,"line":8306},[84,46772,38453],{"class":477},[84,46774,46775,46777,46779,46781],{"class":86,"line":8312},[84,46776,31172],{"class":94},[84,46778,42431],{"class":477},[84,46780,523],{"class":473},[84,46782,38336],{"class":477},[84,46784,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809],{"class":86,"line":8339},[84,46786,38341],{"class":477},[84,46788,31183],{"class":5545},[84,46790,523],{"class":473},[84,46792,678],{"class":94},[84,46794,851],{"class":477},[84,46796,31192],{"class":5545},[84,46798,523],{"class":473},[84,46800,678],{"class":94},[84,46802,851],{"class":477},[84,46804,31201],{"class":5545},[84,46806,523],{"class":473},[84,46808,692],{"class":94},[84,46810,38374],{"class":477},[84,46812,46813],{"class":86,"line":8344},[84,46814,38379],{"class":477},[84,46816,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849],{"class":86,"line":8350},[84,46818,38341],{"class":477},[84,46820,31183],{"class":5545},[84,46822,523],{"class":473},[84,46824,678],{"class":94},[84,46826,851],{"class":477},[84,46828,31192],{"class":5545},[84,46830,523],{"class":473},[84,46832,42486],{"class":94},[84,46834,851],{"class":477},[84,46836,31201],{"class":5545},[84,46838,523],{"class":473},[84,46840,547],{"class":94},[84,46842,851],{"class":477},[84,46844,31210],{"class":5545},[84,46846,523],{"class":473},[84,46848,692],{"class":94},[84,46850,38374],{"class":477},[84,46852,46853],{"class":86,"line":8362},[84,46854,38379],{"class":477},[84,46856,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881],{"class":86,"line":8374},[84,46858,38424],{"class":477},[84,46860,31201],{"class":5545},[84,46862,523],{"class":473},[84,46864,547],{"class":94},[84,46866,851],{"class":477},[84,46868,31256],{"class":5545},[84,46870,523],{"class":473},[84,46872,553],{"class":94},[84,46874,851],{"class":477},[84,46876,31210],{"class":5545},[84,46878,523],{"class":473},[84,46880,692],{"class":94},[84,46882,484],{"class":477},[84,46884,46885],{"class":86,"line":8386},[84,46886,38453],{"class":477},[84,46888,46889,46891,46893,46895],{"class":86,"line":10045},[84,46890,31172],{"class":94},[84,46892,42547],{"class":477},[84,46894,523],{"class":473},[84,46896,38336],{"class":477},[84,46898,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927],{"class":86,"line":10070},[84,46900,42556],{"class":477},[84,46902,42486],{"class":94},[84,46904,851],{"class":477},[84,46906,678],{"class":94},[84,46908,42565],{"class":477},[84,46910,684],{"class":94},[84,46912,851],{"class":477},[84,46914,32397],{"class":94},[84,46916,42574],{"class":477},[84,46918,1074],{"class":94},[84,46920,851],{"class":477},[84,46922,672],{"class":94},[84,46924,42583],{"class":477},[84,46926,672],{"class":94},[84,46928,38374],{"class":477},[84,46930,46931,46933,46935,46937,46939,46941,46943,46945,46947,46949,46951,46953,46955,46957,46959],{"class":86,"line":10093},[84,46932,42556],{"class":477},[84,46934,35197],{"class":94},[84,46936,851],{"class":477},[84,46938,32397],{"class":94},[84,46940,42565],{"class":477},[84,46942,32397],{"class":94},[84,46944,851],{"class":477},[84,46946,42486],{"class":94},[84,46948,42574],{"class":477},[84,46950,672],{"class":94},[84,46952,851],{"class":477},[84,46954,684],{"class":94},[84,46956,42583],{"class":477},[84,46958,678],{"class":94},[84,46960,38374],{"class":477},[84,46962,46963,46965,46967,46969,46971,46973,46975,46977,46979,46981,46983,46985,46987],{"class":86,"line":10117},[84,46964,38424],{"class":477},[84,46966,31201],{"class":5545},[84,46968,523],{"class":473},[84,46970,547],{"class":94},[84,46972,851],{"class":477},[84,46974,31256],{"class":5545},[84,46976,523],{"class":473},[84,46978,553],{"class":94},[84,46980,851],{"class":477},[84,46982,31210],{"class":5545},[84,46984,523],{"class":473},[84,46986,692],{"class":94},[84,46988,484],{"class":477},[84,46990,46991],{"class":86,"line":10122},[84,46992,38453],{"class":477},[84,46994,46995,46997,46999,47001],{"class":86,"line":10127},[84,46996,31172],{"class":94},[84,46998,42658],{"class":477},[84,47000,523],{"class":473},[84,47002,38336],{"class":477},[84,47004,47005,47007,47009,47011,47013,47015,47017,47019,47021,47023,47025,47027,47029,47031,47033],{"class":86,"line":10132},[84,47006,42556],{"class":477},[84,47008,42669],{"class":94},[84,47010,851],{"class":477},[84,47012,42486],{"class":94},[84,47014,42565],{"class":477},[84,47016,684],{"class":94},[84,47018,851],{"class":477},[84,47020,42682],{"class":94},[84,47022,42574],{"class":477},[84,47024,1074],{"class":94},[84,47026,851],{"class":477},[84,47028,1080],{"class":94},[84,47030,42583],{"class":477},[84,47032,678],{"class":94},[84,47034,38374],{"class":477},[84,47036,47037,47039,47041,47043,47045,47047,47049,47051,47053,47055,47057,47059,47061,47063,47065],{"class":86,"line":10141},[84,47038,42556],{"class":477},[84,47040,38784],{"class":94},[84,47042,851],{"class":477},[84,47044,21377],{"class":94},[84,47046,42565],{"class":477},[84,47048,1091],{"class":94},[84,47050,851],{"class":477},[84,47052,31828],{"class":94},[84,47054,42574],{"class":477},[84,47056,1273],{"class":94},[84,47058,851],{"class":477},[84,47060,678],{"class":94},[84,47062,42583],{"class":477},[84,47064,678],{"class":94},[84,47066,38374],{"class":477},[84,47068,47069,47071,47073,47075,47077,47079,47081,47083,47085,47087,47089,47091,47093,47095,47097],{"class":86,"line":10146},[84,47070,42556],{"class":477},[84,47072,38784],{"class":94},[84,47074,851],{"class":477},[84,47076,32397],{"class":94},[84,47078,42565],{"class":477},[84,47080,32397],{"class":94},[84,47082,851],{"class":477},[84,47084,35197],{"class":94},[84,47086,42574],{"class":477},[84,47088,1273],{"class":94},[84,47090,851],{"class":477},[84,47092,678],{"class":94},[84,47094,42583],{"class":477},[84,47096,678],{"class":94},[84,47098,38374],{"class":477},[84,47100,47101,47103,47105,47107,47109,47111,47113,47115,47117,47119,47121,47123,47125,47127,47129],{"class":86,"line":10152},[84,47102,42556],{"class":477},[84,47104,38784],{"class":94},[84,47106,851],{"class":477},[84,47108,1091],{"class":94},[84,47110,42565],{"class":477},[84,47112,32397],{"class":94},[84,47114,851],{"class":477},[84,47116,42779],{"class":94},[84,47118,42574],{"class":477},[84,47120,672],{"class":94},[84,47122,851],{"class":477},[84,47124,678],{"class":94},[84,47126,42583],{"class":477},[84,47128,678],{"class":94},[84,47130,38374],{"class":477},[84,47132,47133,47135,47137,47139,47141,47143,47145,47147,47149,47151,47153,47155,47157,47159,47161],{"class":86,"line":10173},[84,47134,42556],{"class":477},[84,47136,42800],{"class":94},[84,47138,851],{"class":477},[84,47140,35197],{"class":94},[84,47142,42565],{"class":477},[84,47144,21377],{"class":94},[84,47146,851],{"class":477},[84,47148,42813],{"class":94},[84,47150,42574],{"class":477},[84,47152,672],{"class":94},[84,47154,851],{"class":477},[84,47156,32397],{"class":94},[84,47158,42583],{"class":477},[84,47160,32397],{"class":94},[84,47162,38374],{"class":477},[84,47164,47165,47167,47169,47171,47173,47175,47177,47179,47181,47183,47185,47187,47189],{"class":86,"line":10179},[84,47166,38424],{"class":477},[84,47168,31201],{"class":5545},[84,47170,523],{"class":473},[84,47172,547],{"class":94},[84,47174,851],{"class":477},[84,47176,31256],{"class":5545},[84,47178,523],{"class":473},[84,47180,553],{"class":94},[84,47182,851],{"class":477},[84,47184,31210],{"class":5545},[84,47186,523],{"class":473},[84,47188,692],{"class":94},[84,47190,484],{"class":477},[84,47192,47193],{"class":86,"line":10193},[84,47194,38453],{"class":477},[84,47196,47197,47199,47201,47203],{"class":86,"line":10199},[84,47198,31172],{"class":94},[84,47200,42866],{"class":477},[84,47202,523],{"class":473},[84,47204,38336],{"class":477},[84,47206,47207,47209,47211,47213,47215,47217,47219,47221,47223,47225,47227,47229,47231,47233,47235],{"class":86,"line":10226},[84,47208,42556],{"class":477},[84,47210,42877],{"class":94},[84,47212,851],{"class":477},[84,47214,35197],{"class":94},[84,47216,42565],{"class":477},[84,47218,21377],{"class":94},[84,47220,851],{"class":477},[84,47222,42813],{"class":94},[84,47224,42574],{"class":477},[84,47226,672],{"class":94},[84,47228,851],{"class":477},[84,47230,32397],{"class":94},[84,47232,42583],{"class":477},[84,47234,32397],{"class":94},[84,47236,38374],{"class":477},[84,47238,47239,47241,47243,47245,47247,47249,47251,47253,47255,47257,47259,47261,47263,47265,47267],{"class":86,"line":10235},[84,47240,42556],{"class":477},[84,47242,42877],{"class":94},[84,47244,851],{"class":477},[84,47246,35267],{"class":94},[84,47248,42565],{"class":477},[84,47250,42486],{"class":94},[84,47252,851],{"class":477},[84,47254,35267],{"class":94},[84,47256,42574],{"class":477},[84,47258,1080],{"class":94},[84,47260,851],{"class":477},[84,47262,32397],{"class":94},[84,47264,42583],{"class":477},[84,47266,32397],{"class":94},[84,47268,38374],{"class":477},[84,47270,47271,47273,47275,47277,47279],{"class":86,"line":10241},[84,47272,42940],{"class":477},[84,47274,692],{"class":94},[84,47276,851],{"class":477},[84,47278,692],{"class":94},[84,47280,42949],{"class":477},[84,47282,47283],{"class":86,"line":10249},[84,47284,39117],{"class":477},[84,47286,47287,47289,47291,47293,47295],{"class":86,"line":10254},[84,47288,39122],{"class":477},[84,47290,42960],{"class":94},[84,47292,851],{"class":477},[84,47294,553],{"class":94},[84,47296,484],{"class":477},[84,47298,47299],{"class":86,"line":16933},[84,47300,38453],{"class":477},[84,47302,47303],{"class":86,"line":16939},[84,47304,42975],{"class":328},[84,47306,47307,47309,47311,47313,47315],{"class":86,"line":16962},[84,47308,3732],{"class":473},[84,47310,39195],{"class":477},[84,47312,26371],{"class":473},[84,47314,39200],{"class":94},[84,47316,39203],{"class":477},[84,47318,47319,47321,47323],{"class":86,"line":16968},[84,47320,4971],{"class":473},[84,47322,39215],{"class":94},[84,47324,39218],{"class":477},[84,47326,47327,47329,47331,47333,47335,47337,47339,47341,47343],{"class":86,"line":16991},[84,47328,39228],{"class":477},[84,47330,43002],{"class":5545},[84,47332,523],{"class":473},[84,47334,43007],{"class":104},[84,47336,851],{"class":477},[84,47338,39231],{"class":5545},[84,47340,523],{"class":473},[84,47342,39236],{"class":104},[84,47344,484],{"class":477},[84,47346,47347],{"class":86,"line":17005},[84,47348,43022],{"class":328},[84,47350,47351],{"class":86,"line":17025},[84,47352,43027],{"class":328},[84,47354,47355],{"class":86,"line":17031},[84,47356,43032],{"class":328},[84,47358,47359],{"class":86,"line":17042},[84,47360,43037],{"class":328},[84,47362,47363],{"class":86,"line":17065},[84,47364,43042],{"class":328},[84,47366,47367],{"class":86,"line":17087},[84,47368,43047],{"class":328},[84,47370,47371,47373,47375,47377,47379,47381],{"class":86,"line":17092},[84,47372,39248],{"class":473},[84,47374,39251],{"class":477},[84,47376,39254],{"class":473},[84,47378,39257],{"class":473},[84,47380,39260],{"class":94},[84,47382,4068],{"class":477},[84,47384,47385,47387,47389],{"class":86,"line":17098},[84,47386,39272],{"class":477},[84,47388,666],{"class":94},[84,47390,484],{"class":477},[84,47392,47393,47395,47397],{"class":86,"line":17112},[84,47394,43074],{"class":473},[84,47396,39215],{"class":94},[84,47398,39291],{"class":477},[84,47400,47401,47403,47405,47407,47409],{"class":86,"line":17125},[84,47402,43083],{"class":477},[84,47404,666],{"class":94},[84,47406,851],{"class":477},[84,47408,39313],{"class":94},[84,47410,484],{"class":477},[84,47412,47413,47415,47417,47419,47421,47423],{"class":86,"line":17130},[84,47414,43096],{"class":473},[84,47416,39251],{"class":477},[84,47418,39254],{"class":473},[84,47420,39257],{"class":473},[84,47422,39260],{"class":94},[84,47424,4068],{"class":477},[84,47426,47427,47429,47431],{"class":86,"line":17144},[84,47428,43111],{"class":477},[84,47430,666],{"class":94},[84,47432,484],{"class":477},[84,47434,47435],{"class":86,"line":17149},[84,47436,35492],{"class":328},[84,47438,47439,47441,47443],{"class":86,"line":17155},[84,47440,31128],{"class":473},[84,47442,31420],{"class":90},[84,47444,31423],{"class":477},[84,47446,47447,47449,47451,47453],{"class":86,"line":17160},[84,47448,31428],{"class":477},[84,47450,523],{"class":473},[84,47452,31150],{"class":94},[84,47454,43138],{"class":477},[84,47456,47457,47459,47461,47463],{"class":86,"line":17174},[84,47458,31428],{"class":477},[84,47460,523],{"class":473},[84,47462,31150],{"class":94},[84,47464,43149],{"class":477},[84,47466,47467,47469,47471,47473],{"class":86,"line":17179},[84,47468,31428],{"class":477},[84,47470,523],{"class":473},[84,47472,31150],{"class":94},[84,47474,43160],{"class":477},[84,47476,47477,47479,47481,47483],{"class":86,"line":17184},[84,47478,31428],{"class":477},[84,47480,523],{"class":473},[84,47482,31150],{"class":94},[84,47484,43171],{"class":477},[84,47486,47487,47489,47491,47493],{"class":86,"line":17198},[84,47488,31428],{"class":477},[84,47490,523],{"class":473},[84,47492,31150],{"class":94},[84,47494,43182],{"class":477},[84,47496,47497,47499],{"class":86,"line":17210},[84,47498,15081],{"class":473},[84,47500,31536],{"class":477},[84,47502,47503],{"class":86,"line":17215},[84,47504,2729],{"emptyLinePlaceholder":403},[84,47506,47507],{"class":86,"line":17228},[84,47508,43197],{"class":328},[84,47510,47511,47513,47515,47517,47519],{"class":86,"line":17233},[84,47512,1871],{"class":473},[84,47514,31547],{"class":94},[84,47516,3278],{"class":473},[84,47518,31552],{"class":104},[84,47520,4068],{"class":477},[84,47522,47523,47525,47527,47529,47531,47533,47535,47537,47539],{"class":86,"line":17238},[84,47524,31564],{"class":477},[84,47526,523],{"class":473},[84,47528,30778],{"class":477},[84,47530,31571],{"class":104},[84,47532,2034],{"class":473},[84,47534,31576],{"class":477},[84,47536,2031],{"class":473},[84,47538,30803],{"class":104},[84,47540,484],{"class":477},[84,47542,47543,47545,47547],{"class":86,"line":17243},[84,47544,31616],{"class":477},[84,47546,523],{"class":473},[84,47548,43238],{"class":477},[84,47550,47551,47553,47555,47557,47559,47561,47563,47565],{"class":86,"line":17256},[84,47552,31626],{"class":94},[84,47554,31629],{"class":477},[84,47556,692],{"class":94},[84,47558,851],{"class":477},[84,47560,31828],{"class":94},[84,47562,851],{"class":477},[84,47564,31828],{"class":94},[84,47566,31642],{"class":477},[22327,47568,47570],{"id":47569},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[35,47572,47573],{},"计算图片的均值与方差，用于训练中归一化处理操作",[75,47575,47577],{"className":30705,"code":47576,"language":30707,"meta":66,"style":66},"# 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",[81,47578,47579,47584,47597,47602,47608,47613,47623,47627,47632,47642,47646,47651,47661,47678,47682,47687,47699,47711,47742,47751,47761,47771,47775,47780,47795,47799,47804,47809,47814,47824,47829,47854,47858,47863,47878,47882,47895,47899,47904,47909,47914,47919,47924,47934,47944,47967,47975,47983,47991,47995,48007,48011,48016,48020,48024,48031,48051,48075,48082,48096,48101,48106,48110,48124,48128,48140],{"__ignoreMap":66},[84,47580,47581],{"class":86,"line":87},[84,47582,47583],{"class":328},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[84,47585,47586,47588,47591,47594],{"class":86,"line":98},[84,47587,31064],{"class":473},[84,47589,47590],{"class":94}," PIL",[84,47592,47593],{"class":473}," import",[84,47595,47596],{"class":477}," Image\n",[84,47598,47599],{"class":86,"line":70},[84,47600,47601],{"class":328},"# os 用来处理文件夹和文件路径\n",[84,47603,47604,47606],{"class":86,"line":120},[84,47605,30719],{"class":473},[84,47607,45632],{"class":477},[84,47609,47610],{"class":86,"line":131},[84,47611,47612],{"class":328},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[84,47614,47615,47617,47619,47621],{"class":86,"line":145},[84,47616,30719],{"class":473},[84,47618,31707],{"class":477},[84,47620,31710],{"class":473},[84,47622,31713],{"class":477},[84,47624,47625],{"class":86,"line":156},[84,47626,2729],{"emptyLinePlaceholder":403},[84,47628,47629],{"class":86,"line":164},[84,47630,47631],{"class":328},"# 文件夹路径，包含所有图片文件\n",[84,47633,47634,47637,47639],{"class":86,"line":175},[84,47635,47636],{"class":477},"folder_path ",[84,47638,523],{"class":473},[84,47640,47641],{"class":104}," 'data_cat_dog'\n",[84,47643,47644],{"class":86,"line":185},[84,47645,2729],{"emptyLinePlaceholder":403},[84,47647,47648],{"class":86,"line":195},[84,47649,47650],{"class":328},"# 初始化累积变量\n",[84,47652,47653,47656,47658],{"class":86,"line":206},[84,47654,47655],{"class":477},"total_pixels ",[84,47657,523],{"class":473},[84,47659,47660],{"class":94}," 0\n",[84,47662,47663,47666,47668,47671,47673,47675],{"class":86,"line":217},[84,47664,47665],{"class":477},"sum_normalized_pixel_values ",[84,47667,523],{"class":473},[84,47669,47670],{"class":477}," np.zeros(",[84,47672,547],{"class":94},[84,47674,46135],{"class":477},[84,47676,47677],{"class":328},"# 如果是RGB图像，需要三个通道的均值和方差\n",[84,47679,47680],{"class":86,"line":227},[84,47681,2729],{"emptyLinePlaceholder":403},[84,47683,47684],{"class":86,"line":238},[84,47685,47686],{"class":328},"# 遍历文件夹中的图片文件\n",[84,47688,47689,47691,47694,47696],{"class":86,"line":249},[84,47690,3354],{"class":473},[84,47692,47693],{"class":477}," root, dirs, files ",[84,47695,26371],{"class":473},[84,47697,47698],{"class":477}," os.walk(folder_path):\n",[84,47700,47701,47703,47706,47708],{"class":86,"line":262},[84,47702,3530],{"class":473},[84,47704,47705],{"class":477}," filename ",[84,47707,26371],{"class":473},[84,47709,47710],{"class":477}," files:\n",[84,47712,47713,47715,47718,47721,47723,47726,47728,47731,47733,47736,47739],{"class":86,"line":273},[84,47714,2826],{"class":473},[84,47716,47717],{"class":477}," filename.endswith((",[84,47719,47720],{"class":104},"'.jpg'",[84,47722,12764],{"class":477},[84,47724,47725],{"class":104},"'.jpeg'",[84,47727,12764],{"class":477},[84,47729,47730],{"class":104},"'.png'",[84,47732,12764],{"class":477},[84,47734,47735],{"class":104},"'.bmp'",[84,47737,47738],{"class":477},")):  ",[84,47740,47741],{"class":328},"# 可根据实际情况添加其他格式\n",[84,47743,47744,47746,47748],{"class":86,"line":283},[84,47745,46000],{"class":477},[84,47747,523],{"class":473},[84,47749,47750],{"class":477}," os.path.join(root, filename)\n",[84,47752,47753,47756,47758],{"class":86,"line":294},[84,47754,47755],{"class":477},"            image ",[84,47757,523],{"class":473},[84,47759,47760],{"class":477}," Image.open(image_path)\n",[84,47762,47763,47766,47768],{"class":86,"line":2028},[84,47764,47765],{"class":477},"            image_array ",[84,47767,523],{"class":473},[84,47769,47770],{"class":477}," np.array(image)\n",[84,47772,47773],{"class":86,"line":2057},[84,47774,2729],{"emptyLinePlaceholder":403},[84,47776,47777],{"class":86,"line":2062},[84,47778,47779],{"class":328},"            # 归一化像素值到0-1之间\n",[84,47781,47782,47785,47787,47790,47792],{"class":86,"line":2079},[84,47783,47784],{"class":477},"            normalized_image_array ",[84,47786,523],{"class":473},[84,47788,47789],{"class":477}," image_array ",[84,47791,1057],{"class":473},[84,47793,47794],{"class":94}," 255.0\n",[84,47796,47797],{"class":86,"line":2084},[84,47798,2729],{"emptyLinePlaceholder":403},[84,47800,47801],{"class":86,"line":2089},[84,47802,47803],{"class":328},"            # print(image_path)\n",[84,47805,47806],{"class":86,"line":2094},[84,47807,47808],{"class":328},"            # print(normalized_image_array.shape)\n",[84,47810,47811],{"class":86,"line":2108},[84,47812,47813],{"class":328},"            # 累积归一化后的像素值和像素数量\n",[84,47815,47816,47819,47821],{"class":86,"line":2113},[84,47817,47818],{"class":477},"            total_pixels ",[84,47820,9806],{"class":473},[84,47822,47823],{"class":477}," normalized_image_array.size\n",[84,47825,47826],{"class":86,"line":2906},[84,47827,47828],{"class":328},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[84,47830,47831,47834,47836,47839,47842,47844,47846,47848,47850,47852],{"class":86,"line":2920},[84,47832,47833],{"class":477},"            sum_normalized_pixel_values ",[84,47835,9806],{"class":473},[84,47837,47838],{"class":477}," np.sum(normalized_image_array, ",[84,47840,47841],{"class":5545},"axis",[84,47843,523],{"class":473},[84,47845,478],{"class":477},[84,47847,666],{"class":94},[84,47849,12764],{"class":477},[84,47851,692],{"class":94},[84,47853,30824],{"class":477},[84,47855,47856],{"class":86,"line":2928},[84,47857,2729],{"emptyLinePlaceholder":403},[84,47859,47860],{"class":86,"line":2933},[84,47861,47862],{"class":328},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[84,47864,47865,47868,47870,47873,47875],{"class":86,"line":2939},[84,47866,47867],{"class":477},"mean ",[84,47869,523],{"class":473},[84,47871,47872],{"class":477}," sum_normalized_pixel_values ",[84,47874,1057],{"class":473},[84,47876,47877],{"class":477}," total_pixels\n",[84,47879,47880],{"class":86,"line":2945},[84,47881,2729],{"emptyLinePlaceholder":403},[84,47883,47884,47887,47889,47891,47893],{"class":86,"line":2950},[84,47885,47886],{"class":477},"sum_squared_diff ",[84,47888,523],{"class":473},[84,47890,47670],{"class":477},[84,47892,547],{"class":94},[84,47894,484],{"class":477},[84,47896,47897],{"class":86,"line":8277},[84,47898,2729],{"emptyLinePlaceholder":403},[84,47900,47901],{"class":86,"line":8301},[84,47902,47903],{"class":328},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[84,47905,47906],{"class":86,"line":8306},[84,47907,47908],{"class":328},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[84,47910,47911],{"class":86,"line":8312},[84,47912,47913],{"class":328},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[84,47915,47916],{"class":86,"line":8339},[84,47917,47918],{"class":328},"# Image.open(image_path)：打开图片\n",[84,47920,47921],{"class":86,"line":8344},[84,47922,47923],{"class":328},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[84,47925,47926,47928,47930,47932],{"class":86,"line":8350},[84,47927,3354],{"class":473},[84,47929,47693],{"class":477},[84,47931,26371],{"class":473},[84,47933,47698],{"class":477},[84,47935,47936,47938,47940,47942],{"class":86,"line":8362},[84,47937,3530],{"class":473},[84,47939,47705],{"class":477},[84,47941,26371],{"class":473},[84,47943,47710],{"class":477},[84,47945,47946,47948,47950,47952,47954,47956,47958,47960,47962,47964],{"class":86,"line":8374},[84,47947,2826],{"class":473},[84,47949,47717],{"class":477},[84,47951,47720],{"class":104},[84,47953,12764],{"class":477},[84,47955,47725],{"class":104},[84,47957,12764],{"class":477},[84,47959,47730],{"class":104},[84,47961,12764],{"class":477},[84,47963,47735],{"class":104},[84,47965,47966],{"class":477},")):\n",[84,47968,47969,47971,47973],{"class":86,"line":8386},[84,47970,46000],{"class":477},[84,47972,523],{"class":473},[84,47974,47750],{"class":477},[84,47976,47977,47979,47981],{"class":86,"line":10045},[84,47978,47755],{"class":477},[84,47980,523],{"class":473},[84,47982,47760],{"class":477},[84,47984,47985,47987,47989],{"class":86,"line":10070},[84,47986,47765],{"class":477},[84,47988,523],{"class":473},[84,47990,47770],{"class":477},[84,47992,47993],{"class":86,"line":10093},[84,47994,47779],{"class":328},[84,47996,47997,47999,48001,48003,48005],{"class":86,"line":10117},[84,47998,47784],{"class":477},[84,48000,523],{"class":473},[84,48002,47789],{"class":477},[84,48004,1057],{"class":473},[84,48006,47794],{"class":94},[84,48008,48009],{"class":86,"line":10122},[84,48010,47808],{"class":328},[84,48012,48013],{"class":86,"line":10127},[84,48014,48015],{"class":328},"            # print(mean.shape)\n",[84,48017,48018],{"class":86,"line":10132},[84,48019,47803],{"class":328},[84,48021,48022],{"class":86,"line":10141},[84,48023,2729],{"emptyLinePlaceholder":403},[84,48025,48026,48029],{"class":86,"line":10146},[84,48027,48028],{"class":473},"            try",[84,48030,4068],{"class":477},[84,48032,48033,48036,48038,48041,48043,48046,48048],{"class":86,"line":10152},[84,48034,48035],{"class":477},"                diff ",[84,48037,523],{"class":473},[84,48039,48040],{"class":477}," (normalized_image_array ",[84,48042,1005],{"class":473},[84,48044,48045],{"class":477}," mean) ",[84,48047,10990],{"class":473},[84,48049,48050],{"class":94}," 2\n",[84,48052,48053,48056,48058,48061,48063,48065,48067,48069,48071,48073],{"class":86,"line":10173},[84,48054,48055],{"class":477},"                sum_squared_diff ",[84,48057,9806],{"class":473},[84,48059,48060],{"class":477}," np.sum(diff, ",[84,48062,47841],{"class":5545},[84,48064,523],{"class":473},[84,48066,478],{"class":477},[84,48068,666],{"class":94},[84,48070,12764],{"class":477},[84,48072,692],{"class":94},[84,48074,30824],{"class":477},[84,48076,48077,48080],{"class":86,"line":10179},[84,48078,48079],{"class":473},"            except",[84,48081,4068],{"class":477},[84,48083,48084,48087,48089,48091,48094],{"class":86,"line":10193},[84,48085,48086],{"class":94},"                print",[84,48088,478],{"class":477},[84,48090,529],{"class":473},[84,48092,48093],{"class":104},"\"捕获到自定义异常\"",[84,48095,484],{"class":477},[84,48097,48098],{"class":86,"line":10199},[84,48099,48100],{"class":328},"            # diff = (normalized_image_array - mean) ** 2\n",[84,48102,48103],{"class":86,"line":10226},[84,48104,48105],{"class":328},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[84,48107,48108],{"class":86,"line":10235},[84,48109,2729],{"emptyLinePlaceholder":403},[84,48111,48112,48115,48117,48120,48122],{"class":86,"line":10241},[84,48113,48114],{"class":477},"variance ",[84,48116,523],{"class":473},[84,48118,48119],{"class":477}," sum_squared_diff ",[84,48121,1057],{"class":473},[84,48123,47877],{"class":477},[84,48125,48126],{"class":86,"line":10249},[84,48127,2729],{"emptyLinePlaceholder":403},[84,48129,48130,48132,48134,48137],{"class":86,"line":10254},[84,48131,30742],{"class":94},[84,48133,478],{"class":477},[84,48135,48136],{"class":104},"\"Mean:\"",[84,48138,48139],{"class":477},", mean)\n",[84,48141,48142,48144,48146,48149],{"class":86,"line":16933},[84,48143,30742],{"class":94},[84,48145,478],{"class":477},[84,48147,48148],{"class":104},"\"Variance:\"",[84,48150,48151],{"class":477},", variance)\n",[75,48153,48155],{"className":30705,"code":48154,"language":30707,"meta":66,"style":66},"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",[81,48156,48157,48163,48169,48179,48185,48195,48209,48219,48229,48239,48243,48253,48263,48267,48271,48279,48284,48289,48308,48312,48317,48322,48327,48332,48373,48378,48388,48393,48406,48411,48416,48421,48426,48431,48435,48440,48445,48467,48471,48503,48517,48527,48537,48541,48551,48565,48575,48585,48595,48601,48605,48609,48613,48617,48621,48629,48649,48653,48657,48661,48665,48681,48685,48689,48697,48701,48705,48713,48717,48721,48725,48733,48737,48741,48745,48753,48757,48765,48769,48777,48781,48789,48793,48801,48805,48809,48817,48821,48825,48837,48861,48875,48879,48883,48887,48895,48899,48907,48911,48919,48923,48931,48935,48943,48947,48955,48959,48971,48975,48983,48987,48995,48999,49003,49007,49011,49019,49023,49039,49043,49051,49055,49059,49063,49067,49071,49075,49079,49095,49099,49111,49115,49127,49131,49143,49147,49155,49159,49167,49171,49175,49179,49185,49189,49197,49201,49217,49221,49229,49233,49249,49261,49265,49277,49281,49285,49293,49297,49301,49309,49313,49321,49325,49333,49337,49341,49383,49425,49429,49433,49449,49453,49469,49473,49477,49485,49489,49493,49505,49543,49547,49551,49559,49563,49577,49587,49593,49599,49605,49611,49615,49619,49625,49629,49633,49641,49645,49663,49667,49671,49675,49691,49695,49699,49703,49707,49711,49731,49751,49755,49759,49763,49771,49779,49783,49799,49819,49839,49843,49848,49857,49866,49871,49876,49881,49894,49899,49908,49917,49934],{"__ignoreMap":66},[84,48158,48159,48161],{"class":86,"line":87},[84,48160,30719],{"class":473},[84,48162,32149],{"class":477},[84,48164,48165,48167],{"class":86,"line":98},[84,48166,30719],{"class":473},[84,48168,32156],{"class":477},[84,48170,48171,48173,48175,48177],{"class":86,"line":70},[84,48172,30719],{"class":473},[84,48174,32167],{"class":477},[84,48176,31710],{"class":473},[84,48178,32172],{"class":477},[84,48180,48181,48183],{"class":86,"line":120},[84,48182,30719],{"class":473},[84,48184,30722],{"class":477},[84,48186,48187,48189,48191,48193],{"class":86,"line":131},[84,48188,31064],{"class":473},[84,48190,31742],{"class":477},[84,48192,30719],{"class":473},[84,48194,32189],{"class":477},[84,48196,48197,48199,48201,48203,48206],{"class":86,"line":145},[84,48198,31064],{"class":473},[84,48200,31695],{"class":477},[84,48202,30719],{"class":473},[84,48204,48205],{"class":477}," ImageFolder ",[84,48207,48208],{"class":328},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[84,48210,48211,48213,48215,48217],{"class":86,"line":156},[84,48212,31064],{"class":473},[84,48214,31725],{"class":477},[84,48216,30719],{"class":473},[84,48218,31730],{"class":477},[84,48220,48221,48223,48225,48227],{"class":86,"line":164},[84,48222,30719],{"class":473},[84,48224,31742],{"class":477},[84,48226,31710],{"class":473},[84,48228,31747],{"class":477},[84,48230,48231,48233,48235,48237],{"class":86,"line":175},[84,48232,30719],{"class":473},[84,48234,31759],{"class":477},[84,48236,31710],{"class":473},[84,48238,31764],{"class":477},[84,48240,48241],{"class":86,"line":185},[84,48242,32234],{"class":328},[84,48244,48245,48247,48249,48251],{"class":86,"line":195},[84,48246,31064],{"class":473},[84,48248,32241],{"class":477},[84,48250,30719],{"class":473},[84,48252,43358],{"class":477},[84,48254,48255,48257,48259,48261],{"class":86,"line":206},[84,48256,31064],{"class":473},[84,48258,31067],{"class":477},[84,48260,30719],{"class":473},[84,48262,31072],{"class":477},[84,48264,48265],{"class":86,"line":217},[84,48266,2729],{"emptyLinePlaceholder":403},[84,48268,48269],{"class":86,"line":227},[84,48270,32269],{"class":328},[84,48272,48273,48275,48277],{"class":86,"line":238},[84,48274,32274],{"class":473},[84,48276,32277],{"class":90},[84,48278,32280],{"class":477},[84,48280,48281],{"class":86,"line":249},[84,48282,48283],{"class":328},"    # 导入自己的数据集，并进行数据处理\n",[84,48285,48286],{"class":86,"line":262},[84,48287,48288],{"class":328},"    # 定义数据集的路径\n",[84,48290,48291,48294,48296,48298,48300,48302,48306],{"class":86,"line":273},[84,48292,48293],{"class":94},"    ROOT_PATH",[84,48295,523],{"class":473},[84,48297,1143],{"class":473},[84,48299,725],{"class":104},[84,48301,1031],{"class":94},[84,48303,48305],{"class":48304},"sA_wV","\u002Fdata\u002Ftrain",[84,48307,25461],{"class":104},[84,48309,48310],{"class":86,"line":283},[84,48311,2729],{"emptyLinePlaceholder":403},[84,48313,48314],{"class":86,"line":294},[84,48315,48316],{"class":328},"    # 定义归一化方法\n",[84,48318,48319],{"class":86,"line":2028},[84,48320,48321],{"class":328},"    # 这里需要先计算一下数据集的均值和方差\n",[84,48323,48324],{"class":86,"line":2057},[84,48325,48326],{"class":328},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[84,48328,48329],{"class":86,"line":2062},[84,48330,48331],{"class":328},"    # 第一个参数是均值，第二个参数是方差\n",[84,48333,48334,48337,48339,48342,48345,48347,48350,48352,48355,48358,48361,48363,48366,48368,48371],{"class":86,"line":2079},[84,48335,48336],{"class":477},"    normalize",[84,48338,523],{"class":473},[84,48340,48341],{"class":477},"transforms.Normalize([",[84,48343,48344],{"class":94},"0.162",[84,48346,851],{"class":477},[84,48348,48349],{"class":94},"0.151",[84,48351,851],{"class":477},[84,48353,48354],{"class":94},"0.138",[84,48356,48357],{"class":477},"],[",[84,48359,48360],{"class":94},"0.058",[84,48362,851],{"class":477},[84,48364,48365],{"class":94},"0.052",[84,48367,851],{"class":477},[84,48369,48370],{"class":94},"0.048",[84,48372,4986],{"class":477},[84,48374,48375],{"class":86,"line":2084},[84,48376,48377],{"class":328},"    # 定义数据集处理方法变量\n",[84,48379,48380,48383,48385],{"class":86,"line":2089},[84,48381,48382],{"class":477},"    train_transform",[84,48384,523],{"class":473},[84,48386,48387],{"class":477},"transforms.Compose([\n",[84,48389,48390],{"class":86,"line":2094},[84,48391,48392],{"class":328},"        # 调整图像大小为224*224\n",[84,48394,48395,48398,48400,48402,48404],{"class":86,"line":2108},[84,48396,48397],{"class":477},"        transforms.Resize((",[84,48399,31828],{"class":94},[84,48401,851],{"class":477},[84,48403,31828],{"class":94},[84,48405,42949],{"class":477},[84,48407,48408],{"class":86,"line":2113},[84,48409,48410],{"class":328},"        # 将图像转换为张量\n",[84,48412,48413],{"class":86,"line":2906},[84,48414,48415],{"class":477},"        transforms.ToTensor(),\n",[84,48417,48418],{"class":86,"line":2920},[84,48419,48420],{"class":477},"        normalize])\n",[84,48422,48423],{"class":86,"line":2928},[84,48424,48425],{"class":328},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[84,48427,48428],{"class":86,"line":2933},[84,48429,48430],{"class":328},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[84,48432,48433],{"class":86,"line":2939},[84,48434,2729],{"emptyLinePlaceholder":403},[84,48436,48437],{"class":86,"line":2945},[84,48438,48439],{"class":328},"    # 加载数据集\n",[84,48441,48442],{"class":86,"line":2950},[84,48443,48444],{"class":328},"    # 传入数据集路径与处理方法\n",[84,48446,48447,48449,48451,48454,48457,48459,48462,48464],{"class":86,"line":8277},[84,48448,32285],{"class":477},[84,48450,523],{"class":473},[84,48452,48453],{"class":477},"ImageFolder(",[84,48455,48456],{"class":94},"ROOT_PATH",[84,48458,851],{"class":477},[84,48460,48461],{"class":5545},"transform",[84,48463,523],{"class":473},[84,48465,48466],{"class":477},"train_transform)\n",[84,48468,48469],{"class":86,"line":8301},[84,48470,2729],{"emptyLinePlaceholder":403},[84,48472,48473,48475,48477,48479,48481,48483,48485,48487,48489,48491,48493,48495,48497,48499,48501],{"class":86,"line":8306},[84,48474,32337],{"class":477},[84,48476,523],{"class":473},[84,48478,32342],{"class":477},[84,48480,32345],{"class":94},[84,48482,478],{"class":477},[84,48484,32350],{"class":94},[84,48486,928],{"class":473},[84,48488,7687],{"class":94},[84,48490,32357],{"class":477},[84,48492,32345],{"class":94},[84,48494,478],{"class":477},[84,48496,32364],{"class":94},[84,48498,928],{"class":473},[84,48500,7687],{"class":94},[84,48502,32371],{"class":477},[84,48504,48505,48507,48509,48511,48513,48515],{"class":86,"line":8312},[84,48506,32376],{"class":477},[84,48508,523],{"class":473},[84,48510,32381],{"class":477},[84,48512,31864],{"class":5545},[84,48514,523],{"class":473},[84,48516,31869],{"class":477},[84,48518,48519,48521,48523,48525],{"class":86,"line":8339},[84,48520,32392],{"class":5545},[84,48522,523],{"class":473},[84,48524,672],{"class":94},[84,48526,31793],{"class":477},[84,48528,48529,48531,48533,48535],{"class":86,"line":8344},[84,48530,32404],{"class":5545},[84,48532,523],{"class":473},[84,48534,31803],{"class":94},[84,48536,31793],{"class":477},[84,48538,48539],{"class":86,"line":8350},[84,48540,32415],{"class":328},[84,48542,48543,48545,48547,48549],{"class":86,"line":8362},[84,48544,32420],{"class":5545},[84,48546,523],{"class":473},[84,48548,868],{"class":94},[84,48550,484],{"class":477},[84,48552,48553,48555,48557,48559,48561,48563],{"class":86,"line":8374},[84,48554,32431],{"class":477},[84,48556,523],{"class":473},[84,48558,31861],{"class":477},[84,48560,31864],{"class":5545},[84,48562,523],{"class":473},[84,48564,32442],{"class":477},[84,48566,48567,48569,48571,48573],{"class":86,"line":8386},[84,48568,32447],{"class":5545},[84,48570,523],{"class":473},[84,48572,672],{"class":94},[84,48574,31793],{"class":477},[84,48576,48577,48579,48581,48583],{"class":86,"line":10045},[84,48578,32458],{"class":5545},[84,48580,523],{"class":473},[84,48582,31803],{"class":94},[84,48584,31793],{"class":477},[84,48586,48587,48589,48591,48593],{"class":86,"line":10070},[84,48588,32469],{"class":5545},[84,48590,523],{"class":473},[84,48592,868],{"class":94},[84,48594,484],{"class":477},[84,48596,48597,48599],{"class":86,"line":10093},[84,48598,4419],{"class":473},[84,48600,32482],{"class":477},[84,48602,48603],{"class":86,"line":10117},[84,48604,2729],{"emptyLinePlaceholder":403},[84,48606,48607],{"class":86,"line":10122},[84,48608,32491],{"class":328},[84,48610,48611],{"class":86,"line":10127},[84,48612,32496],{"class":328},[84,48614,48615],{"class":86,"line":10132},[84,48616,2729],{"emptyLinePlaceholder":403},[84,48618,48619],{"class":86,"line":10141},[84,48620,32505],{"class":328},[84,48622,48623,48625,48627],{"class":86,"line":10146},[84,48624,32274],{"class":473},[84,48626,32512],{"class":90},[84,48628,32515],{"class":477},[84,48630,48631,48633,48635,48637,48639,48641,48643,48645,48647],{"class":86,"line":10152},[84,48632,31564],{"class":477},[84,48634,523],{"class":473},[84,48636,30778],{"class":477},[84,48638,31571],{"class":104},[84,48640,2034],{"class":473},[84,48642,31576],{"class":477},[84,48644,2031],{"class":473},[84,48646,32534],{"class":104},[84,48648,484],{"class":477},[84,48650,48651],{"class":86,"line":10173},[84,48652,2729],{"emptyLinePlaceholder":403},[84,48654,48655],{"class":86,"line":10179},[84,48656,32549],{"class":328},[84,48658,48659],{"class":86,"line":10193},[84,48660,32554],{"class":328},[84,48662,48663],{"class":86,"line":10199},[84,48664,32559],{"class":328},[84,48666,48667,48669,48671,48673,48675,48677,48679],{"class":86,"line":10226},[84,48668,32564],{"class":477},[84,48670,523],{"class":473},[84,48672,32569],{"class":477},[84,48674,32572],{"class":5545},[84,48676,523],{"class":473},[84,48678,32577],{"class":94},[84,48680,484],{"class":477},[84,48682,48683],{"class":86,"line":10235},[84,48684,2729],{"emptyLinePlaceholder":403},[84,48686,48687],{"class":86,"line":10241},[84,48688,32588],{"class":328},[84,48690,48691,48693,48695],{"class":86,"line":10249},[84,48692,32593],{"class":477},[84,48694,523],{"class":473},[84,48696,32598],{"class":477},[84,48698,48699],{"class":86,"line":10254},[84,48700,2729],{"emptyLinePlaceholder":403},[84,48702,48703],{"class":86,"line":16933},[84,48704,32607],{"class":328},[84,48706,48707,48709,48711],{"class":86,"line":16939},[84,48708,31616],{"class":477},[84,48710,523],{"class":473},[84,48712,32616],{"class":477},[84,48714,48715],{"class":86,"line":16962},[84,48716,32621],{"class":328},[84,48718,48719],{"class":86,"line":16968},[84,48720,32626],{"class":328},[84,48722,48723],{"class":86,"line":16991},[84,48724,32631],{"class":328},[84,48726,48727,48729,48731],{"class":86,"line":17005},[84,48728,32636],{"class":477},[84,48730,523],{"class":473},[84,48732,32641],{"class":477},[84,48734,48735],{"class":86,"line":17025},[84,48736,2729],{"emptyLinePlaceholder":403},[84,48738,48739],{"class":86,"line":17031},[84,48740,32654],{"class":328},[84,48742,48743],{"class":86,"line":17042},[84,48744,32659],{"class":328},[84,48746,48747,48749,48751],{"class":86,"line":17065},[84,48748,32664],{"class":477},[84,48750,523],{"class":473},[84,48752,32669],{"class":94},[84,48754,48755],{"class":86,"line":17087},[84,48756,32674],{"class":328},[84,48758,48759,48761,48763],{"class":86,"line":17092},[84,48760,32679],{"class":477},[84,48762,523],{"class":473},[84,48764,32684],{"class":477},[84,48766,48767],{"class":86,"line":17098},[84,48768,32689],{"class":328},[84,48770,48771,48773,48775],{"class":86,"line":17112},[84,48772,32694],{"class":477},[84,48774,523],{"class":473},[84,48776,32684],{"class":477},[84,48778,48779],{"class":86,"line":17125},[84,48780,32703],{"class":328},[84,48782,48783,48785,48787],{"class":86,"line":17130},[84,48784,32708],{"class":477},[84,48786,523],{"class":473},[84,48788,32684],{"class":477},[84,48790,48791],{"class":86,"line":17144},[84,48792,32717],{"class":328},[84,48794,48795,48797,48799],{"class":86,"line":17149},[84,48796,32722],{"class":477},[84,48798,523],{"class":473},[84,48800,32684],{"class":477},[84,48802,48803],{"class":86,"line":17155},[84,48804,2729],{"emptyLinePlaceholder":403},[84,48806,48807],{"class":86,"line":17160},[84,48808,32735],{"class":328},[84,48810,48811,48813,48815],{"class":86,"line":17174},[84,48812,32740],{"class":477},[84,48814,523],{"class":473},[84,48816,32745],{"class":477},[84,48818,48819],{"class":86,"line":17179},[84,48820,2729],{"emptyLinePlaceholder":403},[84,48822,48823],{"class":86,"line":17184},[84,48824,32758],{"class":328},[84,48826,48827,48829,48831,48833,48835],{"class":86,"line":17198},[84,48828,3530],{"class":473},[84,48830,32765],{"class":477},[84,48832,26371],{"class":473},[84,48834,32770],{"class":94},[84,48836,32773],{"class":477},[84,48838,48839,48841,48843,48845,48847,48849,48851,48853,48855,48857,48859],{"class":86,"line":17210},[84,48840,32778],{"class":94},[84,48842,478],{"class":477},[84,48844,32783],{"class":104},[84,48846,32786],{"class":94},[84,48848,1057],{"class":104},[84,48850,32786],{"class":94},[84,48852,725],{"class":104},[84,48854,32795],{"class":477},[84,48856,1005],{"class":473},[84,48858,692],{"class":94},[84,48860,30824],{"class":477},[84,48862,48863,48865,48867,48869,48871,48873],{"class":86,"line":17215},[84,48864,32778],{"class":94},[84,48866,478],{"class":477},[84,48868,32810],{"class":104},[84,48870,928],{"class":473},[84,48872,919],{"class":94},[84,48874,484],{"class":477},[84,48876,48877],{"class":86,"line":17228},[84,48878,2729],{"emptyLinePlaceholder":403},[84,48880,48881],{"class":86,"line":17233},[84,48882,32825],{"class":328},[84,48884,48885],{"class":86,"line":17238},[84,48886,32830],{"class":328},[84,48888,48889,48891,48893],{"class":86,"line":17243},[84,48890,32835],{"class":477},[84,48892,523],{"class":473},[84,48894,32669],{"class":94},[84,48896,48897],{"class":86,"line":17256},[84,48898,32844],{"class":328},[84,48900,48901,48903,48905],{"class":86,"line":17261},[84,48902,32849],{"class":477},[84,48904,523],{"class":473},[84,48906,3414],{"class":94},[84,48908,48909],{"class":86,"line":32960},[84,48910,32858],{"class":328},[84,48912,48913,48915,48917],{"class":86,"line":32966},[84,48914,32863],{"class":477},[84,48916,523],{"class":473},[84,48918,32669],{"class":94},[84,48920,48921],{"class":86,"line":32972},[84,48922,32872],{"class":328},[84,48924,48925,48927,48929],{"class":86,"line":32978},[84,48926,32877],{"class":477},[84,48928,523],{"class":473},[84,48930,3414],{"class":94},[84,48932,48933],{"class":86,"line":32984},[84,48934,32886],{"class":328},[84,48936,48937,48939,48941],{"class":86,"line":32995},[84,48938,32891],{"class":477},[84,48940,523],{"class":473},[84,48942,3414],{"class":94},[84,48944,48945],{"class":86,"line":33001},[84,48946,32900],{"class":328},[84,48948,48949,48951,48953],{"class":86,"line":33021},[84,48950,32905],{"class":477},[84,48952,523],{"class":473},[84,48954,3414],{"class":94},[84,48956,48957],{"class":86,"line":33027},[84,48958,32914],{"class":328},[84,48960,48961,48963,48965,48967,48969],{"class":86,"line":33038},[84,48962,3732],{"class":473},[84,48964,31928],{"class":477},[84,48966,26371],{"class":473},[84,48968,31933],{"class":94},[84,48970,32927],{"class":477},[84,48972,48973],{"class":86,"line":33044},[84,48974,32932],{"class":328},[84,48976,48977,48979,48981],{"class":86,"line":33050},[84,48978,32937],{"class":477},[84,48980,523],{"class":473},[84,48982,32942],{"class":477},[84,48984,48985],{"class":86,"line":33056},[84,48986,32947],{"class":328},[84,48988,48989,48991,48993],{"class":86,"line":33062},[84,48990,32952],{"class":477},[84,48992,523],{"class":473},[84,48994,32957],{"class":477},[84,48996,48997],{"class":86,"line":33068},[84,48998,32963],{"class":328},[84,49000,49001],{"class":86,"line":33074},[84,49002,32969],{"class":477},[84,49004,49005],{"class":86,"line":33080},[84,49006,32975],{"class":328},[84,49008,49009],{"class":86,"line":33100},[84,49010,32981],{"class":328},[84,49012,49013,49015,49017],{"class":86,"line":33106},[84,49014,32987],{"class":477},[84,49016,523],{"class":473},[84,49018,32992],{"class":477},[84,49020,49021],{"class":86,"line":33122},[84,49022,32998],{"class":328},[84,49024,49025,49027,49029,49031,49033,49035,49037],{"class":86,"line":33128},[84,49026,33004],{"class":477},[84,49028,523],{"class":473},[84,49030,33009],{"class":477},[84,49032,33012],{"class":5545},[84,49034,523],{"class":473},[84,49036,692],{"class":94},[84,49038,484],{"class":477},[84,49040,49041],{"class":86,"line":33142},[84,49042,33024],{"class":328},[84,49044,49045,49047,49049],{"class":86,"line":33148},[84,49046,33030],{"class":477},[84,49048,523],{"class":473},[84,49050,33035],{"class":477},[84,49052,49053],{"class":86,"line":33163},[84,49054,33041],{"class":328},[84,49056,49057],{"class":86,"line":33169},[84,49058,33047],{"class":477},[84,49060,49061],{"class":86,"line":33178},[84,49062,33053],{"class":328},[84,49064,49065],{"class":86,"line":33184},[84,49066,33059],{"class":477},[84,49068,49069],{"class":86,"line":33193},[84,49070,33065],{"class":328},[84,49072,49073],{"class":86,"line":33199},[84,49074,33071],{"class":477},[84,49076,49077],{"class":86,"line":33205},[84,49078,33077],{"class":328},[84,49080,49081,49083,49085,49087,49089,49091,49093],{"class":86,"line":33214},[84,49082,33083],{"class":477},[84,49084,9806],{"class":473},[84,49086,33088],{"class":477},[84,49088,928],{"class":473},[84,49090,33093],{"class":477},[84,49092,666],{"class":94},[84,49094,484],{"class":477},[84,49096,49097],{"class":86,"line":33220},[84,49098,33103],{"class":328},[84,49100,49101,49103,49105,49107,49109],{"class":86,"line":33231},[84,49102,33109],{"class":477},[84,49104,9806],{"class":473},[84,49106,33114],{"class":477},[84,49108,3278],{"class":473},[84,49110,33119],{"class":477},[84,49112,49113],{"class":86,"line":33237},[84,49114,33125],{"class":328},[84,49116,49117,49119,49121,49123,49125],{"class":86,"line":33256},[84,49118,33131],{"class":477},[84,49120,9806],{"class":473},[84,49122,33093],{"class":477},[84,49124,666],{"class":94},[84,49126,484],{"class":477},[84,49128,49129],{"class":86,"line":33262},[84,49130,33145],{"class":328},[84,49132,49133,49135,49137,49139,49141],{"class":86,"line":33273},[84,49134,3732],{"class":473},[84,49136,33153],{"class":477},[84,49138,26371],{"class":473},[84,49140,31933],{"class":94},[84,49142,33160],{"class":477},[84,49144,49145],{"class":86,"line":33279},[84,49146,33166],{"class":328},[84,49148,49149,49151,49153],{"class":86,"line":33299},[84,49150,32937],{"class":477},[84,49152,523],{"class":473},[84,49154,32942],{"class":477},[84,49156,49157],{"class":86,"line":33315},[84,49158,33181],{"class":328},[84,49160,49161,49163,49165],{"class":86,"line":33321},[84,49162,32952],{"class":477},[84,49164,523],{"class":473},[84,49166,32957],{"class":477},[84,49168,49169],{"class":86,"line":33335},[84,49170,33196],{"class":328},[84,49172,49173],{"class":86,"line":33341},[84,49174,33202],{"class":477},[84,49176,49177],{"class":86,"line":33347},[84,49178,36683],{"class":328},[84,49180,49181,49183],{"class":86,"line":33358},[84,49182,33208],{"class":473},[84,49184,33211],{"class":477},[84,49186,49187],{"class":86,"line":33364},[84,49188,33217],{"class":328},[84,49190,49191,49193,49195],{"class":86,"line":33370},[84,49192,36698],{"class":477},[84,49194,523],{"class":473},[84,49196,32992],{"class":477},[84,49198,49199],{"class":86,"line":33380},[84,49200,33234],{"class":328},[84,49202,49203,49205,49207,49209,49211,49213,49215],{"class":86,"line":33386},[84,49204,36711],{"class":477},[84,49206,523],{"class":473},[84,49208,33009],{"class":477},[84,49210,33012],{"class":5545},[84,49212,523],{"class":473},[84,49214,692],{"class":94},[84,49216,484],{"class":477},[84,49218,49219],{"class":86,"line":33397},[84,49220,33259],{"class":328},[84,49222,49223,49225,49227],{"class":86,"line":33403},[84,49224,36732],{"class":477},[84,49226,523],{"class":473},[84,49228,33035],{"class":477},[84,49230,49231],{"class":86,"line":33413},[84,49232,33276],{"class":328},[84,49234,49235,49237,49239,49241,49243,49245,49247],{"class":86,"line":33418},[84,49236,36745],{"class":477},[84,49238,9806],{"class":473},[84,49240,36750],{"class":477},[84,49242,928],{"class":473},[84,49244,33093],{"class":477},[84,49246,666],{"class":94},[84,49248,484],{"class":477},[84,49250,49251,49253,49255,49257,49259],{"class":86,"line":33424},[84,49252,36763],{"class":477},[84,49254,9806],{"class":473},[84,49256,33114],{"class":477},[84,49258,3278],{"class":473},[84,49260,33119],{"class":477},[84,49262,49263],{"class":86,"line":33473},[84,49264,36776],{"class":328},[84,49266,49267,49269,49271,49273,49275],{"class":86,"line":33520},[84,49268,36781],{"class":477},[84,49270,9806],{"class":473},[84,49272,33093],{"class":477},[84,49274,666],{"class":94},[84,49276,484],{"class":477},[84,49278,49279],{"class":86,"line":33525},[84,49280,33338],{"class":328},[84,49282,49283],{"class":86,"line":33531},[84,49284,33344],{"class":328},[84,49286,49287,49289,49291],{"class":86,"line":33550},[84,49288,33350],{"class":477},[84,49290,1057],{"class":473},[84,49292,33355],{"class":477},[84,49294,49295],{"class":86,"line":33556},[84,49296,33361],{"class":328},[84,49298,49299],{"class":86,"line":33576},[84,49300,33367],{"class":328},[84,49302,49303,49305,49307],{"class":86,"line":33582},[84,49304,33373],{"class":477},[84,49306,1057],{"class":473},[84,49308,33355],{"class":477},[84,49310,49311],{"class":86,"line":33588},[84,49312,33383],{"class":328},[84,49314,49315,49317,49319],{"class":86,"line":33598},[84,49316,33389],{"class":477},[84,49318,1057],{"class":473},[84,49320,33394],{"class":477},[84,49322,49323],{"class":86,"line":33603},[84,49324,33400],{"class":328},[84,49326,49327,49329,49331],{"class":86,"line":33609},[84,49328,33406],{"class":477},[84,49330,1057],{"class":473},[84,49332,33394],{"class":477},[84,49334,49335],{"class":86,"line":33625},[84,49336,2729],{"emptyLinePlaceholder":403},[84,49338,49339],{"class":86,"line":33670},[84,49340,33421],{"class":328},[84,49342,49343,49345,49347,49349,49351,49353,49355,49357,49359,49361,49363,49365,49367,49369,49371,49373,49375,49377,49379,49381],{"class":86,"line":33676},[84,49344,32778],{"class":94},[84,49346,478],{"class":477},[84,49348,3921],{"class":104},[84,49350,32786],{"class":94},[84,49352,33435],{"class":104},[84,49354,1369],{"class":94},[84,49356,33440],{"class":473},[84,49358,1419],{"class":94},[84,49360,33445],{"class":104},[84,49362,1369],{"class":94},[84,49364,33440],{"class":473},[84,49366,1419],{"class":94},[84,49368,3921],{"class":104},[84,49370,33456],{"class":477},[84,49372,1005],{"class":473},[84,49374,692],{"class":94},[84,49376,33463],{"class":477},[84,49378,1005],{"class":473},[84,49380,692],{"class":94},[84,49382,33470],{"class":477},[84,49384,49385,49387,49389,49391,49393,49395,49397,49399,49401,49403,49405,49407,49409,49411,49413,49415,49417,49419,49421,49423],{"class":86,"line":33682},[84,49386,32778],{"class":94},[84,49388,478],{"class":477},[84,49390,3921],{"class":104},[84,49392,32786],{"class":94},[84,49394,33484],{"class":104},[84,49396,1369],{"class":94},[84,49398,33440],{"class":473},[84,49400,1419],{"class":94},[84,49402,33493],{"class":104},[84,49404,1369],{"class":94},[84,49406,33440],{"class":473},[84,49408,1419],{"class":94},[84,49410,3921],{"class":104},[84,49412,33504],{"class":477},[84,49414,1005],{"class":473},[84,49416,692],{"class":94},[84,49418,33511],{"class":477},[84,49420,1005],{"class":473},[84,49422,692],{"class":94},[84,49424,33470],{"class":477},[84,49426,49427],{"class":86,"line":33688},[84,49428,2729],{"emptyLinePlaceholder":403},[84,49430,49431],{"class":86,"line":33699},[84,49432,33528],{"class":328},[84,49434,49435,49437,49439,49441,49443,49445,49447],{"class":86,"line":33705},[84,49436,2826],{"class":473},[84,49438,33536],{"class":477},[84,49440,1005],{"class":473},[84,49442,692],{"class":94},[84,49444,1413],{"class":477},[84,49446,1433],{"class":473},[84,49448,33547],{"class":477},[84,49450,49451],{"class":86,"line":33711},[84,49452,33553],{"class":328},[84,49454,49455,49457,49459,49461,49463,49465,49467],{"class":86,"line":33717},[84,49456,33559],{"class":477},[84,49458,517],{"class":94},[84,49460,523],{"class":473},[84,49462,33566],{"class":477},[84,49464,1005],{"class":473},[84,49466,692],{"class":94},[84,49468,33573],{"class":477},[84,49470,49471],{"class":86,"line":33735},[84,49472,33579],{"class":328},[84,49474,49475],{"class":86,"line":33749},[84,49476,33585],{"class":328},[84,49478,49479,49481,49483],{"class":86,"line":33758},[84,49480,33591],{"class":477},[84,49482,523],{"class":473},[84,49484,32641],{"class":477},[84,49486,49487],{"class":86,"line":33767},[84,49488,2729],{"emptyLinePlaceholder":403},[84,49490,49491],{"class":86,"line":33776},[84,49492,33606],{"class":328},[84,49494,49495,49497,49499,49501,49503],{"class":86,"line":33785},[84,49496,33612],{"class":477},[84,49498,523],{"class":473},[84,49500,33617],{"class":477},[84,49502,1005],{"class":473},[84,49504,33622],{"class":477},[84,49506,49507,49509,49511,49513,49515,49517,49519,49521,49523,49525,49527,49529,49531,49533,49535,49537,49539,49541],{"class":86,"line":33791},[84,49508,32778],{"class":94},[84,49510,478],{"class":477},[84,49512,33632],{"class":104},[84,49514,1369],{"class":94},[84,49516,33637],{"class":473},[84,49518,1419],{"class":94},[84,49520,1017],{"class":104},[84,49522,1369],{"class":94},[84,49524,33637],{"class":473},[84,49526,1419],{"class":94},[84,49528,33650],{"class":104},[84,49530,33653],{"class":477},[84,49532,33656],{"class":473},[84,49534,1380],{"class":94},[84,49536,33661],{"class":477},[84,49538,801],{"class":473},[84,49540,1380],{"class":94},[84,49542,30824],{"class":477},[84,49544,49545],{"class":86,"line":33797},[84,49546,37060],{"class":328},[84,49548,49549],{"class":86,"line":33805},[84,49550,37065],{"class":328},[84,49552,49553,49555,49557],{"class":86,"line":33810},[84,49554,37070],{"class":477},[84,49556,33694],{"class":104},[84,49558,484],{"class":477},[84,49560,49561],{"class":86,"line":33816},[84,49562,33714],{"class":328},[84,49564,49565,49567,49569,49571,49573,49575],{"class":86,"line":33827},[84,49566,33720],{"class":477},[84,49568,523],{"class":473},[84,49570,33725],{"class":477},[84,49572,33728],{"class":5545},[84,49574,523],{"class":473},[84,49576,1886],{"class":477},[84,49578,49579,49581,49583,49585],{"class":86,"line":33833},[84,49580,33738],{"class":104},[84,49582,1332],{"class":477},[84,49584,33743],{"class":94},[84,49586,33746],{"class":477},[84,49588,49589,49591],{"class":86,"line":33853},[84,49590,33752],{"class":104},[84,49592,33755],{"class":477},[84,49594,49595,49597],{"class":86,"line":33859},[84,49596,33761],{"class":104},[84,49598,33764],{"class":477},[84,49600,49601,49603],{"class":86,"line":33865},[84,49602,33770],{"class":104},[84,49604,33773],{"class":477},[84,49606,49607,49609],{"class":86,"line":33871},[84,49608,33779],{"class":104},[84,49610,33782],{"class":477},[84,49612,49613],{"class":86,"line":33888},[84,49614,33788],{"class":477},[84,49616,49617],{"class":86,"line":33894},[84,49618,33794],{"class":328},[84,49620,49621,49623],{"class":86,"line":33900},[84,49622,4419],{"class":473},[84,49624,33802],{"class":477},[84,49626,49627],{"class":86,"line":33906},[84,49628,2729],{"emptyLinePlaceholder":403},[84,49630,49631],{"class":86,"line":33912},[84,49632,33813],{"class":328},[84,49634,49635,49637,49639],{"class":86,"line":33918},[84,49636,32274],{"class":473},[84,49638,33821],{"class":90},[84,49640,33824],{"class":477},[84,49642,49643],{"class":86,"line":33945},[84,49644,33830],{"class":328},[84,49646,49647,49649,49651,49653,49655,49657,49659,49661],{"class":86,"line":33969},[84,49648,33836],{"class":477},[84,49650,32020],{"class":5545},[84,49652,523],{"class":473},[84,49654,478],{"class":477},[84,49656,971],{"class":94},[84,49658,851],{"class":477},[84,49660,140],{"class":94},[84,49662,30824],{"class":477},[84,49664,49665],{"class":86,"line":33975},[84,49666,33856],{"class":328},[84,49668,49669],{"class":86,"line":33981},[84,49670,33862],{"class":328},[84,49672,49673],{"class":86,"line":33987},[84,49674,33868],{"class":328},[84,49676,49677,49679,49681,49683,49685,49687,49689],{"class":86,"line":33998},[84,49678,32054],{"class":477},[84,49680,692],{"class":94},[84,49682,851],{"class":477},[84,49684,553],{"class":94},[84,49686,851],{"class":477},[84,49688,692],{"class":94},[84,49690,484],{"class":477},[84,49692,49693],{"class":86,"line":34009},[84,49694,33891],{"class":328},[84,49696,49697],{"class":86,"line":34015},[84,49698,33897],{"class":328},[84,49700,49701],{"class":86,"line":34032},[84,49702,33903],{"class":328},[84,49704,49705],{"class":86,"line":34055},[84,49706,33909],{"class":328},[84,49708,49709],{"class":86,"line":34078},[84,49710,33915],{"class":328},[84,49712,49713,49715,49717,49719,49721,49723,49725,49727,49729],{"class":86,"line":34084},[84,49714,33921],{"class":477},[84,49716,33924],{"class":104},[84,49718,33927],{"class":477},[84,49720,33930],{"class":104},[84,49722,851],{"class":477},[84,49724,33935],{"class":5545},[84,49726,523],{"class":473},[84,49728,33940],{"class":104},[84,49730,484],{"class":477},[84,49732,49733,49735,49737,49739,49741,49743,49745,49747,49749],{"class":86,"line":34089},[84,49734,33921],{"class":477},[84,49736,33924],{"class":104},[84,49738,33952],{"class":477},[84,49740,33955],{"class":104},[84,49742,851],{"class":477},[84,49744,33935],{"class":5545},[84,49746,523],{"class":473},[84,49748,33964],{"class":104},[84,49750,484],{"class":477},[84,49752,49753],{"class":86,"line":34098},[84,49754,33972],{"class":328},[84,49756,49757],{"class":86,"line":34108},[84,49758,33978],{"class":477},[84,49760,49761],{"class":86,"line":34114},[84,49762,33984],{"class":328},[84,49764,49765,49767,49769],{"class":86,"line":34119},[84,49766,33990],{"class":477},[84,49768,33993],{"class":104},[84,49770,484],{"class":477},[84,49772,49773,49775,49777],{"class":86,"line":34125},[84,49774,34001],{"class":477},[84,49776,34004],{"class":104},[84,49778,484],{"class":477},[84,49780,49781],{"class":86,"line":34138},[84,49782,34012],{"class":328},[84,49784,49785,49787,49789,49791,49793,49795,49797],{"class":86,"line":34144},[84,49786,32054],{"class":477},[84,49788,692],{"class":94},[84,49790,851],{"class":477},[84,49792,553],{"class":94},[84,49794,851],{"class":477},[84,49796,553],{"class":94},[84,49798,484],{"class":477},[84,49800,49801,49803,49805,49807,49809,49811,49813,49815,49817],{"class":86,"line":34155},[84,49802,33921],{"class":477},[84,49804,33924],{"class":104},[84,49806,34039],{"class":477},[84,49808,33930],{"class":104},[84,49810,851],{"class":477},[84,49812,33935],{"class":5545},[84,49814,523],{"class":473},[84,49816,34050],{"class":104},[84,49818,484],{"class":477},[84,49820,49821,49823,49825,49827,49829,49831,49833,49835,49837],{"class":86,"line":34166},[84,49822,33921],{"class":477},[84,49824,33924],{"class":104},[84,49826,34062],{"class":477},[84,49828,33955],{"class":104},[84,49830,851],{"class":477},[84,49832,33935],{"class":5545},[84,49834,523],{"class":473},[84,49836,34073],{"class":104},[84,49838,484],{"class":477},[84,49840,49841],{"class":86,"line":34185},[84,49842,34081],{"class":328},[84,49844,49846],{"class":86,"line":49845},219,[84,49847,33978],{"class":477},[84,49849,49851,49853,49855],{"class":86,"line":49850},220,[84,49852,33990],{"class":477},[84,49854,33924],{"class":104},[84,49856,484],{"class":477},[84,49858,49860,49862,49864],{"class":86,"line":49859},221,[84,49861,34001],{"class":477},[84,49863,34103],{"class":104},[84,49865,484],{"class":477},[84,49867,49869],{"class":86,"line":49868},222,[84,49870,34111],{"class":477},[84,49872,49874],{"class":86,"line":49873},223,[84,49875,2729],{"emptyLinePlaceholder":403},[84,49877,49879],{"class":86,"line":49878},224,[84,49880,34122],{"class":328},[84,49882,49884,49886,49888,49890,49892],{"class":86,"line":49883},225,[84,49885,1871],{"class":473},[84,49887,31547],{"class":94},[84,49889,3278],{"class":473},[84,49891,31552],{"class":104},[84,49893,4068],{"class":477},[84,49895,49897],{"class":86,"line":49896},226,[84,49898,34141],{"class":328},[84,49900,49902,49904,49906],{"class":86,"line":49901},227,[84,49903,44873],{"class":477},[84,49905,523],{"class":473},[84,49907,44878],{"class":477},[84,49909,49911,49913,49915],{"class":86,"line":49910},228,[84,49912,34158],{"class":477},[84,49914,523],{"class":473},[84,49916,34163],{"class":477},[84,49918,49920,49922,49924,49926,49928,49930,49932],{"class":86,"line":49919},229,[84,49921,33720],{"class":477},[84,49923,523],{"class":473},[84,49925,44895],{"class":477},[84,49927,34176],{"class":5545},[84,49929,523],{"class":473},[84,49931,1380],{"class":94},[84,49933,484],{"class":477},[84,49935,49937],{"class":86,"line":49936},230,[84,49938,34188],{"class":477},[22327,49940,49942],{"id":49941},"_242测试代码","2.4.2.测试代码",[35,49944,49945],{},"使用测试集进行测试与推理",[75,49947,49949],{"className":30705,"code":49948,"language":30707,"meta":66,"style":66},"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",[81,49950,49951,49957,49967,49977,49988,49998,50002,50006,50014,50019,50023,50040,50044,50048,50052,50056,50060,50092,50096,50104,50108,50120,50124,50128,50132,50136,50140,50144,50148,50152,50170,50184,50188,50198,50208,50218,50224,50228,50232,50240,50244,50260,50268,50272,50276,50284,50292,50296,50300,50304,50308,50314,50318,50328,50336,50344,50348,50352,50356,50364,50368,50384,50388,50392,50396,50408,50412,50424,50428,50432,50444,50448,50458,50462,50466,50478,50482,50490,50494,50498,50506,50510,50518,50522,50526,50530,50534,50538,50554,50562,50566,50570,50588,50594,50598,50608,50616,50624,50628,50632,50636,50640,50648,50652,50668,50672,50680,50688],{"__ignoreMap":66},[84,49952,49953,49955],{"class":86,"line":87},[84,49954,30719],{"class":473},[84,49956,30722],{"class":477},[84,49958,49959,49961,49963,49965],{"class":86,"line":98},[84,49960,30719],{"class":473},[84,49962,31742],{"class":477},[84,49964,31710],{"class":473},[84,49966,31747],{"class":477},[84,49968,49969,49971,49973,49975],{"class":86,"line":70},[84,49970,31064],{"class":473},[84,49972,31725],{"class":477},[84,49974,30719],{"class":473},[84,49976,31730],{"class":477},[84,49978,49979,49981,49983,49985],{"class":86,"line":120},[84,49980,31064],{"class":473},[84,49982,31695],{"class":477},[84,49984,30719],{"class":473},[84,49986,49987],{"class":477}," ImageFolder\n",[84,49989,49990,49992,49994,49996],{"class":86,"line":131},[84,49991,31064],{"class":473},[84,49993,32241],{"class":477},[84,49995,30719],{"class":473},[84,49997,44967],{"class":477},[84,49999,50000],{"class":86,"line":145},[84,50001,2729],{"emptyLinePlaceholder":403},[84,50003,50004],{"class":86,"line":156},[84,50005,34278],{"class":328},[84,50007,50008,50010,50012],{"class":86,"line":164},[84,50009,32274],{"class":473},[84,50011,34285],{"class":90},[84,50013,32280],{"class":477},[84,50015,50016],{"class":86,"line":175},[84,50017,50018],{"class":328},"   # 导入自己的数据集，并进行数据处理\n",[84,50020,50021],{"class":86,"line":185},[84,50022,48288],{"class":328},[84,50024,50025,50027,50029,50031,50033,50035,50038],{"class":86,"line":195},[84,50026,48293],{"class":94},[84,50028,523],{"class":473},[84,50030,1143],{"class":473},[84,50032,725],{"class":104},[84,50034,1031],{"class":94},[84,50036,50037],{"class":48304},"\u002Fdata\u002Ftest",[84,50039,25461],{"class":104},[84,50041,50042],{"class":86,"line":206},[84,50043,2729],{"emptyLinePlaceholder":403},[84,50045,50046],{"class":86,"line":217},[84,50047,48316],{"class":328},[84,50049,50050],{"class":86,"line":227},[84,50051,48321],{"class":328},[84,50053,50054],{"class":86,"line":238},[84,50055,48326],{"class":328},[84,50057,50058],{"class":86,"line":249},[84,50059,48331],{"class":328},[84,50061,50062,50064,50066,50068,50070,50072,50074,50076,50078,50080,50082,50084,50086,50088,50090],{"class":86,"line":262},[84,50063,48336],{"class":477},[84,50065,523],{"class":473},[84,50067,48341],{"class":477},[84,50069,48344],{"class":94},[84,50071,851],{"class":477},[84,50073,48349],{"class":94},[84,50075,851],{"class":477},[84,50077,48354],{"class":94},[84,50079,48357],{"class":477},[84,50081,48360],{"class":94},[84,50083,851],{"class":477},[84,50085,48365],{"class":94},[84,50087,851],{"class":477},[84,50089,48370],{"class":94},[84,50091,4986],{"class":477},[84,50093,50094],{"class":86,"line":273},[84,50095,48377],{"class":328},[84,50097,50098,50100,50102],{"class":86,"line":283},[84,50099,48382],{"class":477},[84,50101,523],{"class":473},[84,50103,48387],{"class":477},[84,50105,50106],{"class":86,"line":294},[84,50107,48392],{"class":328},[84,50109,50110,50112,50114,50116,50118],{"class":86,"line":2028},[84,50111,48397],{"class":477},[84,50113,31828],{"class":94},[84,50115,851],{"class":477},[84,50117,31828],{"class":94},[84,50119,42949],{"class":477},[84,50121,50122],{"class":86,"line":2057},[84,50123,48410],{"class":328},[84,50125,50126],{"class":86,"line":2062},[84,50127,48415],{"class":477},[84,50129,50130],{"class":86,"line":2079},[84,50131,48420],{"class":477},[84,50133,50134],{"class":86,"line":2084},[84,50135,48425],{"class":328},[84,50137,50138],{"class":86,"line":2089},[84,50139,48430],{"class":328},[84,50141,50142],{"class":86,"line":2094},[84,50143,2729],{"emptyLinePlaceholder":403},[84,50145,50146],{"class":86,"line":2108},[84,50147,48439],{"class":328},[84,50149,50150],{"class":86,"line":2113},[84,50151,48444],{"class":328},[84,50153,50154,50156,50158,50160,50162,50164,50166,50168],{"class":86,"line":2906},[84,50155,34292],{"class":477},[84,50157,523],{"class":473},[84,50159,48453],{"class":477},[84,50161,48456],{"class":94},[84,50163,851],{"class":477},[84,50165,48461],{"class":5545},[84,50167,523],{"class":473},[84,50169,48466],{"class":477},[84,50171,50172,50174,50176,50178,50180,50182],{"class":86,"line":2920},[84,50173,34349],{"class":477},[84,50175,523],{"class":473},[84,50177,31861],{"class":477},[84,50179,31864],{"class":5545},[84,50181,523],{"class":473},[84,50183,34360],{"class":477},[84,50185,50186],{"class":86,"line":2928},[84,50187,34365],{"class":328},[84,50189,50190,50192,50194,50196],{"class":86,"line":2933},[84,50191,34370],{"class":5545},[84,50193,523],{"class":473},[84,50195,692],{"class":94},[84,50197,31793],{"class":477},[84,50199,50200,50202,50204,50206],{"class":86,"line":2939},[84,50201,34381],{"class":5545},[84,50203,523],{"class":473},[84,50205,31803],{"class":94},[84,50207,31793],{"class":477},[84,50209,50210,50212,50214,50216],{"class":86,"line":2945},[84,50211,34392],{"class":5545},[84,50213,523],{"class":473},[84,50215,666],{"class":94},[84,50217,484],{"class":477},[84,50219,50220,50222],{"class":86,"line":2950},[84,50221,4419],{"class":473},[84,50223,34405],{"class":477},[84,50225,50226],{"class":86,"line":8277},[84,50227,2729],{"emptyLinePlaceholder":403},[84,50229,50230],{"class":86,"line":8301},[84,50231,34414],{"class":328},[84,50233,50234,50236,50238],{"class":86,"line":8306},[84,50235,32274],{"class":473},[84,50237,34421],{"class":90},[84,50239,34424],{"class":477},[84,50241,50242],{"class":86,"line":8312},[84,50243,34429],{"class":328},[84,50245,50246,50248,50250,50252,50254,50256,50258],{"class":86,"line":8339},[84,50247,31564],{"class":477},[84,50249,523],{"class":473},[84,50251,31571],{"class":104},[84,50253,2034],{"class":473},[84,50255,31576],{"class":477},[84,50257,2031],{"class":473},[84,50259,34446],{"class":104},[84,50261,50262,50264,50266],{"class":86,"line":8344},[84,50263,31616],{"class":477},[84,50265,523],{"class":473},[84,50267,32616],{"class":477},[84,50269,50270],{"class":86,"line":8350},[84,50271,2729],{"emptyLinePlaceholder":403},[84,50273,50274],{"class":86,"line":8362},[84,50275,34463],{"class":328},[84,50277,50278,50280,50282],{"class":86,"line":8374},[84,50279,34468],{"class":477},[84,50281,523],{"class":473},[84,50283,32669],{"class":94},[84,50285,50286,50288,50290],{"class":86,"line":8386},[84,50287,34477],{"class":477},[84,50289,523],{"class":473},[84,50291,3414],{"class":94},[84,50293,50294],{"class":86,"line":10045},[84,50295,2729],{"emptyLinePlaceholder":403},[84,50297,50298],{"class":86,"line":10070},[84,50299,34490],{"class":328},[84,50301,50302],{"class":86,"line":10093},[84,50303,34495],{"class":328},[84,50305,50306],{"class":86,"line":10117},[84,50307,34500],{"class":328},[84,50309,50310,50312],{"class":86,"line":10122},[84,50311,34505],{"class":473},[84,50313,33211],{"class":477},[84,50315,50316],{"class":86,"line":10127},[84,50317,34512],{"class":328},[84,50319,50320,50322,50324,50326],{"class":86,"line":10132},[84,50321,3732],{"class":473},[84,50323,34519],{"class":477},[84,50325,26371],{"class":473},[84,50327,34524],{"class":477},[84,50329,50330,50332,50334],{"class":86,"line":10141},[84,50331,34529],{"class":477},[84,50333,523],{"class":473},[84,50335,34534],{"class":477},[84,50337,50338,50340,50342],{"class":86,"line":10146},[84,50339,34539],{"class":477},[84,50341,523],{"class":473},[84,50343,34544],{"class":477},[84,50345,50346],{"class":86,"line":10152},[84,50347,34549],{"class":328},[84,50349,50350],{"class":86,"line":10173},[84,50351,33202],{"class":477},[84,50353,50354],{"class":86,"line":10179},[84,50355,34558],{"class":328},[84,50357,50358,50360,50362],{"class":86,"line":10193},[84,50359,32987],{"class":477},[84,50361,523],{"class":473},[84,50363,34567],{"class":477},[84,50365,50366],{"class":86,"line":10199},[84,50367,34572],{"class":328},[84,50369,50370,50372,50374,50376,50378,50380,50382],{"class":86,"line":10226},[84,50371,33004],{"class":477},[84,50373,523],{"class":473},[84,50375,33009],{"class":477},[84,50377,33012],{"class":5545},[84,50379,523],{"class":473},[84,50381,692],{"class":94},[84,50383,484],{"class":477},[84,50385,50386],{"class":86,"line":10235},[84,50387,34593],{"class":328},[84,50389,50390],{"class":86,"line":10241},[84,50391,34598],{"class":328},[84,50393,50394],{"class":86,"line":10249},[84,50395,34603],{"class":328},[84,50397,50398,50400,50402,50404,50406],{"class":86,"line":10254},[84,50399,34608],{"class":477},[84,50401,9806],{"class":473},[84,50403,33114],{"class":477},[84,50405,3278],{"class":473},[84,50407,34617],{"class":477},[84,50409,50410],{"class":86,"line":16933},[84,50411,34622],{"class":328},[84,50413,50414,50416,50418,50420,50422],{"class":86,"line":16939},[84,50415,34627],{"class":477},[84,50417,9806],{"class":473},[84,50419,34632],{"class":477},[84,50421,666],{"class":94},[84,50423,484],{"class":477},[84,50425,50426],{"class":86,"line":16962},[84,50427,2729],{"emptyLinePlaceholder":403},[84,50429,50430],{"class":86,"line":16968},[84,50431,34645],{"class":328},[84,50433,50434,50436,50438,50440,50442],{"class":86,"line":16991},[84,50435,34650],{"class":477},[84,50437,523],{"class":473},[84,50439,34655],{"class":477},[84,50441,1057],{"class":473},[84,50443,34660],{"class":477},[84,50445,50446],{"class":86,"line":17005},[84,50447,34665],{"class":328},[84,50449,50450,50452,50454,50456],{"class":86,"line":17025},[84,50451,32778],{"class":94},[84,50453,478],{"class":477},[84,50455,34674],{"class":104},[84,50457,34677],{"class":477},[84,50459,50460],{"class":86,"line":17031},[84,50461,2729],{"emptyLinePlaceholder":403},[84,50463,50464],{"class":86,"line":17042},[84,50465,34686],{"class":328},[84,50467,50468,50470,50472,50474,50476],{"class":86,"line":17065},[84,50469,1871],{"class":473},[84,50471,31547],{"class":94},[84,50473,3278],{"class":473},[84,50475,31552],{"class":104},[84,50477,4068],{"class":477},[84,50479,50480],{"class":86,"line":17087},[84,50481,34703],{"class":328},[84,50483,50484,50486,50488],{"class":86,"line":17092},[84,50485,31616],{"class":477},[84,50487,523],{"class":473},[84,50489,44878],{"class":477},[84,50491,50492],{"class":86,"line":17098},[84,50493,34716],{"class":328},[84,50495,50496],{"class":86,"line":17112},[84,50497,34721],{"class":328},[84,50499,50500,50502,50504],{"class":86,"line":17125},[84,50501,34726],{"class":477},[84,50503,34729],{"class":104},[84,50505,30824],{"class":477},[84,50507,50508],{"class":86,"line":17130},[84,50509,34736],{"class":328},[84,50511,50512,50514,50516],{"class":86,"line":17144},[84,50513,34349],{"class":477},[84,50515,523],{"class":473},[84,50517,34745],{"class":477},[84,50519,50520],{"class":86,"line":17149},[84,50521,34750],{"class":328},[84,50523,50524],{"class":86,"line":17155},[84,50525,34755],{"class":477},[84,50527,50528],{"class":86,"line":17160},[84,50529,2729],{"emptyLinePlaceholder":403},[84,50531,50532],{"class":86,"line":17174},[84,50533,34764],{"class":328},[84,50535,50536],{"class":86,"line":17179},[84,50537,34769],{"class":328},[84,50539,50540,50542,50544,50546,50548,50550,50552],{"class":86,"line":17184},[84,50541,31564],{"class":477},[84,50543,523],{"class":473},[84,50545,31571],{"class":104},[84,50547,2034],{"class":473},[84,50549,31576],{"class":477},[84,50551,2031],{"class":473},[84,50553,34446],{"class":104},[84,50555,50556,50558,50560],{"class":86,"line":17198},[84,50557,31616],{"class":477},[84,50559,523],{"class":473},[84,50561,32616],{"class":477},[84,50563,50564],{"class":86,"line":17210},[84,50565,34798],{"class":328},[84,50567,50568],{"class":86,"line":17215},[84,50569,34803],{"class":328},[84,50571,50572,50574,50576,50578,50581,50583,50586],{"class":86,"line":17228},[84,50573,34808],{"class":477},[84,50575,523],{"class":473},[84,50577,1363],{"class":477},[84,50579,50580],{"class":104},"'猫'",[84,50582,851],{"class":477},[84,50584,50585],{"class":104},"'狗'",[84,50587,33573],{"class":477},[84,50589,50590,50592],{"class":86,"line":17233},[84,50591,34505],{"class":473},[84,50593,33211],{"class":477},[84,50595,50596],{"class":86,"line":17238},[84,50597,34873],{"class":328},[84,50599,50600,50602,50604,50606],{"class":86,"line":17243},[84,50601,3732],{"class":473},[84,50603,34880],{"class":477},[84,50605,26371],{"class":473},[84,50607,34524],{"class":477},[84,50609,50610,50612,50614],{"class":86,"line":17256},[84,50611,32937],{"class":477},[84,50613,523],{"class":473},[84,50615,32942],{"class":477},[84,50617,50618,50620,50622],{"class":86,"line":17261},[84,50619,32952],{"class":477},[84,50621,523],{"class":473},[84,50623,32957],{"class":477},[84,50625,50626],{"class":86,"line":32960},[84,50627,2729],{"emptyLinePlaceholder":403},[84,50629,50630],{"class":86,"line":32966},[84,50631,34909],{"class":328},[84,50633,50634],{"class":86,"line":32972},[84,50635,33202],{"class":477},[84,50637,50638],{"class":86,"line":32978},[84,50639,34918],{"class":328},[84,50641,50642,50644,50646],{"class":86,"line":32984},[84,50643,32987],{"class":477},[84,50645,523],{"class":473},[84,50647,32992],{"class":477},[84,50649,50650],{"class":86,"line":32995},[84,50651,34931],{"class":328},[84,50653,50654,50656,50658,50660,50662,50664,50666],{"class":86,"line":33001},[84,50655,33004],{"class":477},[84,50657,523],{"class":473},[84,50659,33009],{"class":477},[84,50661,33012],{"class":5545},[84,50663,523],{"class":473},[84,50665,692],{"class":94},[84,50667,484],{"class":477},[84,50669,50670],{"class":86,"line":33021},[84,50671,34952],{"class":328},[84,50673,50674,50676,50678],{"class":86,"line":33027},[84,50675,34957],{"class":477},[84,50677,523],{"class":473},[84,50679,34962],{"class":477},[84,50681,50682,50684,50686],{"class":86,"line":33038},[84,50683,34967],{"class":477},[84,50685,523],{"class":473},[84,50687,34972],{"class":477},[84,50689,50690,50692,50694,50696,50698,50700,50702,50704],{"class":86,"line":33044},[84,50691,34977],{"class":94},[84,50693,478],{"class":477},[84,50695,34982],{"class":104},[84,50697,34985],{"class":477},[84,50699,34988],{"class":104},[84,50701,851],{"class":477},[84,50703,34993],{"class":104},[84,50705,34996],{"class":477},[389,50707,50708],{},"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":66,"searchDepth":98,"depth":98,"links":50710},[50711,50712,50713,50714],{"id":30918,"depth":70,"text":30919},{"id":38166,"depth":70,"text":38167},{"id":41599,"depth":70,"text":41600},{"id":45608,"depth":70,"text":45609},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30910,"description":400},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50721,"title":50722,"body":50723,"description":400,"extension":401,"meta":50730,"navigation":403,"path":50731,"seo":50732,"stem":50733,"__hash__":50734},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50724,"toc":50728},[50725],[10,50726,50722],{"id":50727},"_3yolo模型学习",{"title":66,"searchDepth":98,"depth":98,"links":50729},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50722,"description":400},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50736,"title":50737,"body":50738,"description":50745,"extension":401,"meta":50746,"navigation":403,"path":50748,"seo":50749,"stem":50750,"__hash__":50751},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50739,"toc":50743},[50740],[35,50741,50742],{},"yolo模型还未补充",{"title":66,"searchDepth":98,"depth":98,"links":50744},[],"深度学习学习",{"category":50747},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50737,"description":50745},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50753,"title":50754,"body":50755,"description":400,"extension":401,"meta":50780,"navigation":403,"path":50781,"seo":50782,"stem":50783,"__hash__":50784},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50756,"toc":50778},[50757,50760,50763,50768,50775],[10,50758,50754],{"id":50759},"_1工具",[35,50761,50762],{},"提示错误插件：有问题会提前报错",[35,50764,50765],{},[64,50766],{"alt":66,"src":50767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[35,50769,50770],{},[39,50771,50774],{"href":50772,"rel":50773},"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",[43],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[35,50776,50777],{},"alt键加上下箭头可以实现语句的移动",{"title":66,"searchDepth":98,"depth":98,"links":50779},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50754,"description":400},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50786,"title":50787,"body":50788,"description":400,"extension":401,"meta":53652,"navigation":403,"path":53653,"seo":53654,"stem":53655,"__hash__":53656},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50789,"toc":53603},[50790,50793,50797,50801,50806,50809,50814,50818,50825,50830,50837,50842,50849,50854,50858,50863,50866,50870,50875,50879,50884,50887,50890,50893,50896,50899,50902,50905,50908,50913,50918,50923,50927,50930,50933,50937,50942,50945,50953,50958,50975,50983,50988,50993,50998,51003,51008,51011,51016,51021,51025,51034,51039,51044,51048,51053,51056,51060,51065,51073,51078,51083,51086,51091,51096,51101,51104,51107,51110,51115,51120,51123,51128,51131,51136,51139,51142,51145,51150,51153,51156,51171,51176,51181,51186,51189,51192,51195,51209,51212,51217,51222,51225,51228,51231,51234,51237,51240,51243,51247,51251,51256,51260,51263,51268,51273,51276,51281,51284,51288,51293,51296,51299,51302,51305,51308,51311,51314,51317,51320,51324,51329,51334,51339,51342,51345,51349,51354,51357,51361,51364,51367,51372,51375,51378,51382,51386,51389,51394,51399,51402,51431,51436,51441,51446,51451,51455,51460,51464,51469,51472,51476,51480,51485,51489,51494,51499,51503,51508,51511,51513,51516,51521,51525,51530,51534,51538,51543,51548,51553,51558,51562,51567,51572,51577,51580,51583,51588,51591,51596,51601,51606,51611,51615,52422,52426,52769,52774,52777,52780,52783,52786,52789,52792,52795,52798,52800,52803,52805,52808,52812,52817,52820,52823,52826,52830,52835,52840,52860,52863,52867,52872,52877,52894,52898,52927,52931,52953,52955,52994,53002,53008,53012,53015,53018,53023,53028,53031,53034,53037,53042,53047,53050,53053,53056,53059,53062,53065,53068,53071,53074,53077,53080,53082,53085,53088,53091,53094,53097,53100,53103,53106,53110,53115,53118,53123,53126,53129,53132,53135,53138,53141,53144,53146,53149,53152,53155,53158,53161,53164,53168,53171,53180,53183,53188,53191,53196,53199,53202,53205,53208,53211,53214,53217,53221,53225,53228,53231,53236,53241,53246,53250,53255,53260,53263,53266,53269,53272,53275,53280,53283,53288,53290,53295,53298,53302,53307,53310,53313,53318,53322,53325,53330,53333,53336,53365,53370,53373,53376,53379,53382,53385,53389,53392,53478,53482,53485,53490,53495,53502,53505,53508,53511,53514,53517,53522,53527,53530,53533,53536,53539,53542,53545,53548,53551,53554,53556,53559,53563,53568,53573,53578,53581,53586,53591,53594,53597,53600],[10,50791,50787],{"id":50792},"_2基础语法",[14,50794,50796],{"id":50795},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[23,50798,50800],{"id":50799},"_211-js组成","2.1.1 js组成",[28,50802,50803],{},[31,50804,50805],{},"js是编程语言，html和css不是编程语言，是标记语言",[35,50807,50808],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[28,50810,50811],{"start":98},[31,50812,50813],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[23,50815,50817],{"id":50816},"_212-js书写位置","2.1.2 js书写位置",[28,50819,50820],{},[31,50821,50822],{},[624,50823,50824],{},"内部 JavaScript",[35,50826,50827],{},[64,50828],{"alt":66,"src":50829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[28,50831,50832],{"start":98},[31,50833,50834],{},[624,50835,50836],{},"外部 JavaScript",[35,50838,50839],{},[64,50840],{"alt":66,"src":50841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[28,50843,50844],{"start":70},[31,50845,50846],{},[624,50847,50848],{},"内联 JavaScript",[35,50850,50851],{},[64,50852],{"alt":66,"src":50853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[23,50855,50857],{"id":50856},"_213-javascript注释","2.1.3 JavaScript注释",[35,50859,50860],{},[64,50861],{"alt":66,"src":50862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[35,50864,50865],{},"alt+shift+a一定要记住！",[23,50867,50869],{"id":50868},"_214-javascript结束符","2.1.4 JavaScript结束符",[35,50871,50872],{},[64,50873],{"alt":66,"src":50874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[23,50876,50878],{"id":50877},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[28,50880,50881],{},[31,50882,50883],{},"输出语法：",[35,50885,50886],{},"①document.write('要出的内容')",[35,50888,50889],{},"向body内输出内容；",[35,50891,50892],{},"如果输出的内容写的是标签，也会被解析cheng",[35,50894,50895],{},"②alert('要出的内容')",[35,50897,50898],{},"页面弹出警告对话框",[35,50900,50901],{},"③console.log('控制台打印')",[35,50903,50904],{},"控制台输出语法，程序员调试使用",[35,50906,50907],{},"输入log就行，自动生成：",[35,50909,50910],{},[64,50911],{"alt":66,"src":50912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[28,50914,50915],{"start":98},[31,50916,50917],{},"输入语法：",[35,50919,50920],{},[64,50921],{"alt":66,"src":50922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[23,50924,50926],{"id":50925},"_2116-字面量","21.1.6 字面量",[35,50928,50929],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[35,50931,50932],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50934,50936],{"id":50935},"_22-变量","2.2 变量",[28,50938,50939],{},[31,50940,50941],{},"变量声明",[35,50943,50944],{},"let 变量名",[1480,50946,50947,50950],{},[31,50948,50949],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[31,50951,50952],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[28,50954,50955],{"start":98},[31,50956,50957],{},"变量赋值",[75,50959,50963],{"className":50960,"code":50961,"language":50962,"meta":66,"style":66},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[81,50964,50965,50970],{"__ignoreMap":66},[84,50966,50967],{"class":86,"line":87},[84,50968,50969],{"class":477},"let age\n",[84,50971,50972],{"class":86,"line":98},[84,50973,50974],{"class":477},"age=18\n",[28,50976,50977,50980],{"start":70},[31,50978,50979],{},"连这些（变量的初始化）：let age=18",[31,50981,50982],{},"更新变量",[35,50984,50985],{},[64,50986],{"alt":66,"src":50987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[28,50989,50990],{"start":131},[31,50991,50992],{},"声明多个变量",[35,50994,50995],{},[64,50996],{"alt":66,"src":50997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[28,50999,51000],{"start":145},[31,51001,51002],{},"变量命名规则与规范",[35,51004,51005],{},[64,51006],{"alt":66,"src":51007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[35,51009,51010],{},"遵守小驼峰！",[28,51012,51013],{"start":156},[31,51014,51015],{},"变量拓展-let和var的区别",[35,51017,51018],{},[64,51019],{"alt":66,"src":51020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51022,51024],{"id":51023},"_23-数组","2.3 数组",[75,51026,51028],{"className":50960,"code":51027,"language":50962,"meta":66,"style":66},"let arr = []\n",[81,51029,51030],{"__ignoreMap":66},[84,51031,51032],{"class":86,"line":87},[84,51033,51027],{"class":477},[35,51035,51036],{},[64,51037],{"alt":66,"src":51038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[35,51040,51041],{},[64,51042],{"alt":66,"src":51043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51045,51047],{"id":51046},"_24-常量","2.4 常量",[35,51049,51050],{},[64,51051],{"alt":66,"src":51052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[35,51054,51055],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51057,51059],{"id":51058},"_25-数据类型","2.5 数据类型",[35,51061,51062],{},[64,51063],{"alt":66,"src":51064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[28,51066,51067,51070],{},[31,51068,51069],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[31,51071,51072],{},"算数运算符：",[35,51074,51075],{},[64,51076],{"alt":66,"src":51077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[28,51079,51080],{"start":70},[31,51081,51082],{},"数字类型（Number）",[35,51084,51085],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[35,51087,51088],{},[64,51089],{"alt":66,"src":51090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[28,51092,51093],{"start":120},[31,51094,51095],{},"字符串类型（string）",[35,51097,51098],{},[64,51099],{"alt":66,"src":51100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[35,51102,51103],{},"反引号也是可以使用的",[35,51105,51106],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[35,51108,51109],{},"例如：document.write(\"我今年\"+age+\"岁\")",[28,51111,51112],{"start":131},[31,51113,51114],{},"模板字符串",[35,51116,51117],{},[64,51118],{"alt":66,"src":51119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[35,51121,51122],{},"类似于python的字符串格式化",[28,51124,51125],{"start":145},[31,51126,51127],{},"布尔类型",[35,51129,51130],{},"true 和 false",[28,51132,51133],{"start":156},[31,51134,51135],{},"未定义类型（underfined）",[35,51137,51138],{},"表示没有赋值",[35,51140,51141],{},"未定义类型是比较特殊的类型，只有一个值undefined",[35,51143,51144],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[28,51146,51147],{"start":164},[31,51148,51149],{},"null（空类型）",[35,51151,51152],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[35,51154,51155],{},"赋值了，但是内容为空",[75,51157,51159],{"className":50960,"code":51158,"language":50962,"meta":66,"style":66},"typeof null\n输出的是'object'，是一个对象数据类型\n",[81,51160,51161,51166],{"__ignoreMap":66},[84,51162,51163],{"class":86,"line":87},[84,51164,51165],{"class":477},"typeof null\n",[84,51167,51168],{"class":86,"line":98},[84,51169,51170],{"class":477},"输出的是'object'，是一个对象数据类型\n",[28,51172,51173],{"start":175},[31,51174,51175],{},"控制台检测数据类型",[35,51177,51178],{},[64,51179],{"alt":66,"src":51180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[28,51182,51183],{"start":185},[31,51184,51185],{},"类型转换",[35,51187,51188],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[35,51190,51191],{},"转换方式：隐式转换和显示转换",[35,51193,51194],{},"①隐式转换",[1480,51196,51197,51200,51203,51206],{},[31,51198,51199],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[31,51201,51202],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[31,51204,51205],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[31,51207,51208],{},"任何数据和字符串相加结果都是字符串",[35,51210,51211],{},"②显示转换",[35,51213,51214],{},[64,51215],{"alt":66,"src":51216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[35,51218,51219],{},[64,51220],{"alt":66,"src":51221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[35,51223,51224],{},"在输入的时候要用好隐式转换，简单写起来",[35,51226,51227],{},"let num = +prompt(’请输入数字：‘)",[35,51229,51230],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[35,51232,51233],{},"console.log(parseInt('12.333px'))",[35,51235,51236],{},"输出为：12",[35,51238,51239],{},"console.log(parseInt('a'a'a12.333px'))",[35,51241,51242],{},"输出：NaN",[14,51244,51246],{"id":51245},"_26-运算符","2.6 运算符",[23,51248,51250],{"id":51249},"_261-赋值运算符","2.6.1 赋值运算符",[35,51252,51253],{},[64,51254],{"alt":66,"src":51255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[23,51257,51259],{"id":51258},"_262-一元运算符","2.6.2 一元运算符",[35,51261,51262],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[35,51264,51265],{},[64,51266],{"alt":66,"src":51267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[35,51269,51270],{},[64,51271],{"alt":66,"src":51272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[35,51274,51275],{},"两者的区别：",[35,51277,51278],{},[64,51279],{"alt":66,"src":51280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[35,51282,51283],{},"前置先自加；后置后加，代码执行完之后再加",[23,51285,51287],{"id":51286},"_263-比较运算符","2.6.3 比较运算符",[35,51289,51290],{},[64,51291],{"alt":66,"src":51292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[35,51294,51295],{},"比较运算符也有隐式转换",[35,51297,51298],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[35,51300,51301],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[35,51303,51304],{},"要使用三等，开发的时候",[35,51306,51307],{},"NaN不等于任何人，包括它自己",[35,51309,51310],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[35,51312,51313],{},"7\u002F10=0.7",[35,51315,51316],{},"最后：0.5+0.2=0.7",[35,51318,51319],{},"字符串比较，比较的是字符对应的ASCII码",[23,51321,51323],{"id":51322},"_264-逻辑运算符","2.6.4 逻辑运算符",[35,51325,51326],{},[64,51327],{"alt":66,"src":51328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[35,51330,51331],{},[64,51332],{"alt":66,"src":51333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[35,51335,51336],{},[64,51337],{"alt":66,"src":51338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[35,51340,51341],{},"上述题目选D",[35,51343,51344],{},"与真2假1；或真1假2",[23,51346,51348],{"id":51347},"_265-运算符优先级","2.6.5 运算符优先级",[35,51350,51351],{},[64,51352],{"alt":66,"src":51353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[35,51355,51356],{},"先算逻辑与，后算逻辑或",[14,51358,51360],{"id":51359},"_27-语句","2.7 语句",[35,51362,51363],{},"表达式：是可以被求值的代码，会有结果给我们",[35,51365,51366],{},"语句：语句是可以被执行的代码，例如prompt()",[35,51368,51369],{},[64,51370],{"alt":66,"src":51371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[35,51373,51374],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[35,51376,51377],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[23,51379,51381],{"id":51380},"_271-分支语句","2.7.1 分支语句",[22327,51383,51385],{"id":51384},"_2711-if分支语句","2.7.1.1 if分支语句",[35,51387,51388],{},"if语句单行简单的话，可以不写{}，写在一行就行",[28,51390,51391],{},[31,51392,51393],{},"单分支语句",[35,51395,51396],{},[64,51397],{"alt":66,"src":51398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[35,51400,51401],{},"除了0，所有数字都为真",[75,51403,51405],{"className":50960,"code":51404,"language":50962,"meta":66,"style":66},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[81,51406,51407,51412,51417,51422,51426],{"__ignoreMap":66},[84,51408,51409],{"class":86,"line":87},[84,51410,51411],{"class":477},"if（0) {\n",[84,51413,51414],{"class":86,"line":98},[84,51415,51416],{"class":477},"    let a=1\n",[84,51418,51419],{"class":86,"line":70},[84,51420,51421],{"class":477},"    alert(typeof a)\n",[84,51423,51424],{"class":86,"line":120},[84,51425,1905],{"class":477},[84,51427,51428],{"class":86,"line":131},[84,51429,51430],{"class":477},"不输出，括号为假\n",[28,51432,51433],{"start":98},[31,51434,51435],{},"双分支语句",[35,51437,51438],{},[64,51439],{"alt":66,"src":51440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[28,51442,51443],{"start":70},[31,51444,51445],{},"多分支语句",[35,51447,51448],{},[64,51449],{"alt":66,"src":51450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22327,51452,51454],{"id":51453},"_2712-三元运算符","2.7.1.2 三元运算符",[35,51456,51457],{},[64,51458],{"alt":66,"src":51459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22327,51461,51463],{"id":51462},"_2713-switch语句","2.7.1.3 switch语句",[35,51465,51466],{},[64,51467],{"alt":66,"src":51468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[35,51470,51471],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[23,51473,51475],{"id":51474},"_272-循环语句","2.7.2 循环语句",[22327,51477,51479],{"id":51478},"_2721-断点演示","2.7.2.1 断点演示",[35,51481,51482],{},[64,51483],{"alt":66,"src":51484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22327,51486,51488],{"id":51487},"_2722-while循环","2.7.2.2 while循环",[35,51490,51491],{},[64,51492],{"alt":66,"src":51493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[35,51495,51496],{},[64,51497],{"alt":66,"src":51498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22327,51500,51502],{"id":51501},"_2723-for循环","2.7.2.3 for循环",[35,51504,51505],{},[64,51506],{"alt":66,"src":51507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[35,51509,51510],{},"for(;;) {",[35,51512,1419],{},[35,51514,51515],{},"表示无限循环",[35,51517,51518],{},[64,51519],{"alt":66,"src":51520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22327,51522,51524],{"id":51523},"_2724-循环的退出","2.7.2.4 循环的退出",[35,51526,51527],{},[64,51528],{"alt":66,"src":51529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51531,51533],{"id":51532},"_28-数组","2.8 数组",[23,51535,51537],{"id":51536},"_281-基础认识","2.8.1 基础认识",[35,51539,51540],{},[64,51541],{"alt":66,"src":51542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[35,51544,51545],{},[64,51546],{"alt":66,"src":51547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[35,51549,51550],{},[64,51551],{"alt":66,"src":51552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[35,51554,51555],{},[64,51556],{"alt":66,"src":51557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[23,51559,51561],{"id":51560},"_282-操作数组","2.8.2 操作数组",[35,51563,51564],{},[64,51565],{"alt":66,"src":51566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[28,51568,51569],{},[31,51570,51571],{},"添加元素",[35,51573,51574],{},[64,51575],{"alt":66,"src":51576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[35,51578,51579],{},"console.log(arr.push('green'))",[35,51581,51582],{},"输出结果：为新数组的长度",[35,51584,51585],{},[64,51586],{"alt":66,"src":51587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[35,51589,51590],{},"push用的非常多，一定要记住",[28,51592,51593],{},[31,51594,51595],{},"删除元素",[35,51597,51598],{},[64,51599],{"alt":66,"src":51600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[35,51602,51603],{},[64,51604],{"alt":66,"src":51605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[35,51607,51608],{},[64,51609],{"alt":66,"src":51610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[23,51612,51614],{"id":51613},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[75,51616,51618],{"className":50960,"code":51617,"language":50962,"meta":66,"style":66},"\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",[81,51619,51620,51635,51651,51655,51664,51682,51706,51728,51742,51750,51757,51769,51780,51784,51788,51795,51807,51822,51835,51854,51871,51886,51898,51910,51922,51926,51930,51941,51951,51963,51975,51987,51998,52002,52006,52018,52022,52036,52040,52044,52055,52069,52081,52095,52099,52108,52117,52121,52130,52134,52143,52148,52153,52166,52194,52199,52204,52229,52234,52238,52243,52248,52263,52267,52272,52302,52314,52330,52346,52360,52365,52372,52376,52381,52394,52402,52410,52414],{"__ignoreMap":66},[84,51621,51622,51625,51629,51632],{"class":86,"line":87},[84,51623,51624],{"class":477},"\u003C!",[84,51626,51628],{"class":51627},"s9eBZ","DOCTYPE",[84,51630,51631],{"class":90}," html",[84,51633,51634],{"class":477},">\n",[84,51636,51637,51639,51641,51644,51646,51649],{"class":86,"line":98},[84,51638,1383],{"class":477},[84,51640,50962],{"class":51627},[84,51642,51643],{"class":90}," lang",[84,51645,523],{"class":477},[84,51647,51648],{"class":104},"\"en\"",[84,51650,51634],{"class":477},[84,51652,51653],{"class":86,"line":70},[84,51654,2729],{"emptyLinePlaceholder":403},[84,51656,51657,51659,51662],{"class":86,"line":120},[84,51658,1383],{"class":477},[84,51660,51661],{"class":51627},"head",[84,51663,51634],{"class":477},[84,51665,51666,51669,51672,51675,51677,51680],{"class":86,"line":131},[84,51667,51668],{"class":477},"    \u003C",[84,51670,51671],{"class":51627},"meta",[84,51673,51674],{"class":90}," charset",[84,51676,523],{"class":477},[84,51678,51679],{"class":104},"\"UTF-8\"",[84,51681,51634],{"class":477},[84,51683,51684,51686,51688,51691,51693,51696,51699,51701,51704],{"class":86,"line":145},[84,51685,51668],{"class":477},[84,51687,51671],{"class":51627},[84,51689,51690],{"class":90}," http-equiv",[84,51692,523],{"class":477},[84,51694,51695],{"class":104},"\"X-UA-Compatible\"",[84,51697,51698],{"class":90}," content",[84,51700,523],{"class":477},[84,51702,51703],{"class":104},"\"IE=edge\"",[84,51705,51634],{"class":477},[84,51707,51708,51710,51712,51714,51716,51719,51721,51723,51726],{"class":86,"line":156},[84,51709,51668],{"class":477},[84,51711,51671],{"class":51627},[84,51713,15249],{"class":90},[84,51715,523],{"class":477},[84,51717,51718],{"class":104},"\"viewport\"",[84,51720,51698],{"class":90},[84,51722,523],{"class":477},[84,51724,51725],{"class":104},"\"width=device-width, initial-scale=1.0\"",[84,51727,51634],{"class":477},[84,51729,51730,51732,51735,51738,51740],{"class":86,"line":164},[84,51731,51668],{"class":477},[84,51733,51734],{"class":51627},"title",[84,51736,51737],{"class":477},">Document\u003C\u002F",[84,51739,51734],{"class":51627},[84,51741,51634],{"class":477},[84,51743,51744,51746,51748],{"class":86,"line":175},[84,51745,51668],{"class":477},[84,51747,389],{"class":51627},[84,51749,51634],{"class":477},[84,51751,51752,51755],{"class":86,"line":185},[84,51753,51754],{"class":51627},"        *",[84,51756,15901],{"class":477},[84,51758,51759,51762,51765,51767],{"class":86,"line":195},[84,51760,51761],{"class":94},"            margin",[84,51763,51764],{"class":477},": ",[84,51766,666],{"class":94},[84,51768,1634],{"class":477},[84,51770,51771,51774,51776,51778],{"class":86,"line":206},[84,51772,51773],{"class":94},"            padding",[84,51775,51764],{"class":477},[84,51777,666],{"class":94},[84,51779,1634],{"class":477},[84,51781,51782],{"class":86,"line":217},[84,51783,2858],{"class":477},[84,51785,51786],{"class":86,"line":227},[84,51787,2729],{"emptyLinePlaceholder":403},[84,51789,51790,51793],{"class":86,"line":238},[84,51791,51792],{"class":90},"        .box",[84,51794,15901],{"class":477},[84,51796,51797,51800,51802,51805],{"class":86,"line":249},[84,51798,51799],{"class":94},"            display",[84,51801,51764],{"class":477},[84,51803,51804],{"class":94},"flex",[84,51806,1634],{"class":477},[84,51808,51809,51812,51814,51817,51820],{"class":86,"line":262},[84,51810,51811],{"class":94},"            width",[84,51813,51764],{"class":477},[84,51815,51816],{"class":94},"700",[84,51818,51819],{"class":473},"px",[84,51821,1634],{"class":477},[84,51823,51824,51827,51829,51831,51833],{"class":86,"line":273},[84,51825,51826],{"class":94},"            height",[84,51828,51764],{"class":477},[84,51830,4302],{"class":94},[84,51832,51819],{"class":473},[84,51834,1634],{"class":477},[84,51836,51837,51840,51842,51844,51846,51849,51852],{"class":86,"line":283},[84,51838,51839],{"class":94},"            border-left",[84,51841,51764],{"class":477},[84,51843,692],{"class":94},[84,51845,51819],{"class":473},[84,51847,51848],{"class":94}," solid",[84,51850,51851],{"class":94}," pink",[84,51853,1634],{"class":477},[84,51855,51856,51859,51861,51863,51865,51867,51869],{"class":86,"line":294},[84,51857,51858],{"class":94},"            border-bottom",[84,51860,51764],{"class":477},[84,51862,692],{"class":94},[84,51864,51819],{"class":473},[84,51866,51848],{"class":94},[84,51868,51851],{"class":94},[84,51870,1634],{"class":477},[84,51872,51873,51875,51877,51879,51881,51884],{"class":86,"line":2028},[84,51874,51761],{"class":94},[84,51876,51764],{"class":477},[84,51878,1129],{"class":94},[84,51880,51819],{"class":473},[84,51882,51883],{"class":94}," auto",[84,51885,1634],{"class":477},[84,51887,51888,51891,51893,51896],{"class":86,"line":2057},[84,51889,51890],{"class":94},"            justify-content",[84,51892,51764],{"class":477},[84,51894,51895],{"class":94},"space-around",[84,51897,1634],{"class":477},[84,51899,51900,51903,51905,51908],{"class":86,"line":2062},[84,51901,51902],{"class":94},"            align-items",[84,51904,51764],{"class":477},[84,51906,51907],{"class":94},"flex-end",[84,51909,1634],{"class":477},[84,51911,51912,51915,51917,51920],{"class":86,"line":2079},[84,51913,51914],{"class":94},"            text-align",[84,51916,51764],{"class":477},[84,51918,51919],{"class":94},"center",[84,51921,1634],{"class":477},[84,51923,51924],{"class":86,"line":2084},[84,51925,2858],{"class":477},[84,51927,51928],{"class":86,"line":2089},[84,51929,2729],{"emptyLinePlaceholder":403},[84,51931,51932,51934,51936,51939],{"class":86,"line":2094},[84,51933,51792],{"class":90},[84,51935,1433],{"class":473},[84,51937,51938],{"class":51627},"div",[84,51940,15901],{"class":477},[84,51942,51943,51945,51947,51949],{"class":86,"line":2108},[84,51944,51799],{"class":94},[84,51946,51764],{"class":477},[84,51948,51804],{"class":94},[84,51950,1634],{"class":477},[84,51952,51953,51955,51957,51959,51961],{"class":86,"line":2113},[84,51954,51811],{"class":94},[84,51956,51764],{"class":477},[84,51958,1129],{"class":94},[84,51960,51819],{"class":473},[84,51962,1634],{"class":477},[84,51964,51965,51968,51970,51973],{"class":86,"line":2906},[84,51966,51967],{"class":94},"            background-color",[84,51969,51764],{"class":477},[84,51971,51972],{"class":94},"pink",[84,51974,1634],{"class":477},[84,51976,51977,51980,51982,51985],{"class":86,"line":2920},[84,51978,51979],{"class":94},"            flex-direction",[84,51981,51764],{"class":477},[84,51983,51984],{"class":94},"column",[84,51986,1634],{"class":477},[84,51988,51989,51991,51993,51996],{"class":86,"line":2928},[84,51990,51890],{"class":94},[84,51992,51764],{"class":477},[84,51994,51995],{"class":94},"space-between",[84,51997,1634],{"class":477},[84,51999,52000],{"class":86,"line":2933},[84,52001,2858],{"class":477},[84,52003,52004],{"class":86,"line":2939},[84,52005,2729],{"emptyLinePlaceholder":403},[84,52007,52008,52010,52013,52016],{"class":86,"line":2945},[84,52009,51792],{"class":90},[84,52011,52012],{"class":51627}," div",[84,52014,52015],{"class":51627}," span",[84,52017,15901],{"class":477},[84,52019,52020],{"class":86,"line":2950},[84,52021,2729],{"emptyLinePlaceholder":403},[84,52023,52024,52027,52029,52032,52034],{"class":86,"line":8277},[84,52025,52026],{"class":94},"            margin-top",[84,52028,51764],{"class":477},[84,52030,52031],{"class":94},"-20",[84,52033,51819],{"class":473},[84,52035,1634],{"class":477},[84,52037,52038],{"class":86,"line":8301},[84,52039,2858],{"class":477},[84,52041,52042],{"class":86,"line":8306},[84,52043,2729],{"emptyLinePlaceholder":403},[84,52045,52046,52048,52050,52053],{"class":86,"line":8312},[84,52047,51792],{"class":90},[84,52049,52012],{"class":51627},[84,52051,52052],{"class":51627}," h4",[84,52054,15901],{"class":477},[84,52056,52057,52060,52062,52065,52067],{"class":86,"line":8339},[84,52058,52059],{"class":94},"            margin-bottom",[84,52061,51764],{"class":477},[84,52063,52064],{"class":94},"-35",[84,52066,51819],{"class":473},[84,52068,1634],{"class":477},[84,52070,52071,52073,52075,52077,52079],{"class":86,"line":8344},[84,52072,51811],{"class":94},[84,52074,51764],{"class":477},[84,52076,829],{"class":94},[84,52078,51819],{"class":473},[84,52080,1634],{"class":477},[84,52082,52083,52086,52088,52091,52093],{"class":86,"line":8350},[84,52084,52085],{"class":94},"            margin-left",[84,52087,51764],{"class":477},[84,52089,52090],{"class":94},"-10",[84,52092,51819],{"class":473},[84,52094,1634],{"class":477},[84,52096,52097],{"class":86,"line":8362},[84,52098,2858],{"class":477},[84,52100,52101,52104,52106],{"class":86,"line":8374},[84,52102,52103],{"class":477},"    \u003C\u002F",[84,52105,389],{"class":51627},[84,52107,51634],{"class":477},[84,52109,52110,52113,52115],{"class":86,"line":8386},[84,52111,52112],{"class":477},"\u003C\u002F",[84,52114,51661],{"class":51627},[84,52116,51634],{"class":477},[84,52118,52119],{"class":86,"line":10045},[84,52120,2729],{"emptyLinePlaceholder":403},[84,52122,52123,52125,52128],{"class":86,"line":10070},[84,52124,1383],{"class":477},[84,52126,52127],{"class":51627},"body",[84,52129,51634],{"class":477},[84,52131,52132],{"class":86,"line":10093},[84,52133,2729],{"emptyLinePlaceholder":403},[84,52135,52136,52138,52141],{"class":86,"line":10117},[84,52137,51668],{"class":477},[84,52139,52140],{"class":51627},"script",[84,52142,51634],{"class":477},[84,52144,52145],{"class":86,"line":10122},[84,52146,52147],{"class":328},"        \u002F\u002F 1. 四次弹框效果\n",[84,52149,52150],{"class":86,"line":10127},[84,52151,52152],{"class":328},"        \u002F\u002F 声明一个新的数组\n",[84,52154,52155,52158,52161,52163],{"class":86,"line":10132},[84,52156,52157],{"class":473},"        let",[84,52159,52160],{"class":477}," arr ",[84,52162,523],{"class":473},[84,52164,52165],{"class":477}," []\n",[84,52167,52168,52170,52172,52175,52177,52179,52181,52183,52185,52188,52190,52192],{"class":86,"line":10141},[84,52169,3732],{"class":473},[84,52171,1991],{"class":477},[84,52173,52174],{"class":473},"let",[84,52176,9767],{"class":477},[84,52178,523],{"class":473},[84,52180,25446],{"class":94},[84,52182,9774],{"class":477},[84,52184,1928],{"class":473},[84,52186,52187],{"class":94}," 4",[84,52189,3543],{"class":477},[84,52191,2621],{"class":473},[84,52193,12771],{"class":477},[84,52195,52196],{"class":86,"line":10146},[84,52197,52198],{"class":328},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[84,52200,52201],{"class":86,"line":10152},[84,52202,52203],{"class":328},"            \u002F\u002F arr.push(num)\n",[84,52205,52206,52209,52212,52214,52217,52219,52222,52224,52227],{"class":86,"line":10173},[84,52207,52208],{"class":477},"            arr.",[84,52210,52211],{"class":90},"push",[84,52213,478],{"class":477},[84,52215,52216],{"class":90},"prompt",[84,52218,478],{"class":477},[84,52220,52221],{"class":104},"`请输入第${",[84,52223,914],{"class":477},[84,52225,52226],{"class":104},"}季度的数据:`",[84,52228,30824],{"class":477},[84,52230,52231],{"class":86,"line":10179},[84,52232,52233],{"class":328},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[84,52235,52236],{"class":86,"line":10193},[84,52237,2858],{"class":477},[84,52239,52240],{"class":86,"line":10199},[84,52241,52242],{"class":328},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[84,52244,52245],{"class":86,"line":10226},[84,52246,52247],{"class":328},"        \u002F\u002F 盒子开头\n",[84,52249,52250,52253,52256,52258,52261],{"class":86,"line":10235},[84,52251,52252],{"class":477},"        document.",[84,52254,52255],{"class":90},"write",[84,52257,478],{"class":477},[84,52259,52260],{"class":104},"` \u003Cdiv class=\"box\">`",[84,52262,484],{"class":477},[84,52264,52265],{"class":86,"line":10241},[84,52266,2729],{"emptyLinePlaceholder":403},[84,52268,52269],{"class":86,"line":10249},[84,52270,52271],{"class":328},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[84,52273,52274,52276,52278,52280,52282,52284,52286,52288,52290,52293,52296,52298,52300],{"class":86,"line":10254},[84,52275,3732],{"class":473},[84,52277,1991],{"class":477},[84,52279,52174],{"class":473},[84,52281,9767],{"class":477},[84,52283,523],{"class":473},[84,52285,4422],{"class":94},[84,52287,9774],{"class":477},[84,52289,1383],{"class":473},[84,52291,52292],{"class":477}," arr.",[84,52294,52295],{"class":94},"length",[84,52297,3543],{"class":477},[84,52299,2621],{"class":473},[84,52301,12771],{"class":477},[84,52303,52304,52307,52309,52311],{"class":86,"line":16933},[84,52305,52306],{"class":477},"            document.",[84,52308,52255],{"class":90},[84,52310,478],{"class":477},[84,52312,52313],{"class":104},"`\n",[84,52315,52316,52319,52321,52323,52325,52327],{"class":86,"line":16939},[84,52317,52318],{"class":104},"              \u003Cdiv style=\"height: ${",[84,52320,4209],{"class":477},[84,52322,1363],{"class":104},[84,52324,914],{"class":477},[84,52326,1413],{"class":104},[84,52328,52329],{"class":104},"}px;\">\n",[84,52331,52332,52335,52337,52339,52341,52343],{"class":86,"line":16962},[84,52333,52334],{"class":104},"                \u003Cspan>${",[84,52336,4209],{"class":477},[84,52338,1363],{"class":104},[84,52340,914],{"class":477},[84,52342,1413],{"class":104},[84,52344,52345],{"class":104},"}\u003C\u002Fspan>\n",[84,52347,52348,52351,52353,52355,52357],{"class":86,"line":16968},[84,52349,52350],{"class":104},"                \u003Ch4>第${",[84,52352,914],{"class":477},[84,52354,45893],{"class":473},[84,52356,25446],{"class":94},[84,52358,52359],{"class":104},"}季度\u003C\u002Fh4>\n",[84,52361,52362],{"class":86,"line":16991},[84,52363,52364],{"class":104},"              \u003C\u002Fdiv>          \n",[84,52366,52367,52370],{"class":86,"line":17005},[84,52368,52369],{"class":104},"            `",[84,52371,484],{"class":477},[84,52373,52374],{"class":86,"line":17025},[84,52375,2858],{"class":477},[84,52377,52378],{"class":86,"line":17031},[84,52379,52380],{"class":328},"        \u002F\u002F 盒子结尾\n",[84,52382,52383,52385,52387,52389,52392],{"class":86,"line":17042},[84,52384,52252],{"class":477},[84,52386,52255],{"class":90},[84,52388,478],{"class":477},[84,52390,52391],{"class":104},"` \u003C\u002Fdiv>`",[84,52393,484],{"class":477},[84,52395,52396,52398,52400],{"class":86,"line":17065},[84,52397,52103],{"class":477},[84,52399,52140],{"class":51627},[84,52401,51634],{"class":477},[84,52403,52404,52406,52408],{"class":86,"line":17087},[84,52405,52112],{"class":477},[84,52407,52127],{"class":51627},[84,52409,51634],{"class":477},[84,52411,52412],{"class":86,"line":17092},[84,52413,2729],{"emptyLinePlaceholder":403},[84,52415,52416,52418,52420],{"class":86,"line":17098},[84,52417,52112],{"class":477},[84,52419,50962],{"class":51627},[84,52421,51634],{"class":477},[23,52423,52425],{"id":52424},"_284-冒泡排序","2.8.4 冒泡排序",[75,52427,52429],{"className":50960,"code":52428,"language":50962,"meta":66,"style":66},"\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",[81,52430,52431,52441,52455,52459,52467,52482,52502,52514,52522,52526,52534,52542,52574,52607,52644,52649,52668,52673,52686,52701,52717,52721,52726,52730,52740,52749,52757,52761],{"__ignoreMap":66},[84,52432,52433,52435,52437,52439],{"class":86,"line":87},[84,52434,51624],{"class":477},[84,52436,51628],{"class":51627},[84,52438,51631],{"class":90},[84,52440,51634],{"class":477},[84,52442,52443,52445,52447,52449,52451,52453],{"class":86,"line":98},[84,52444,1383],{"class":477},[84,52446,50962],{"class":51627},[84,52448,51643],{"class":90},[84,52450,523],{"class":477},[84,52452,51648],{"class":104},[84,52454,51634],{"class":477},[84,52456,52457],{"class":86,"line":70},[84,52458,2729],{"emptyLinePlaceholder":403},[84,52460,52461,52463,52465],{"class":86,"line":120},[84,52462,1383],{"class":477},[84,52464,51661],{"class":51627},[84,52466,51634],{"class":477},[84,52468,52469,52472,52474,52476,52478,52480],{"class":86,"line":131},[84,52470,52471],{"class":477},"  \u003C",[84,52473,51671],{"class":51627},[84,52475,51674],{"class":90},[84,52477,523],{"class":477},[84,52479,51679],{"class":104},[84,52481,51634],{"class":477},[84,52483,52484,52486,52488,52490,52492,52494,52496,52498,52500],{"class":86,"line":145},[84,52485,52471],{"class":477},[84,52487,51671],{"class":51627},[84,52489,15249],{"class":90},[84,52491,523],{"class":477},[84,52493,51718],{"class":104},[84,52495,51698],{"class":90},[84,52497,523],{"class":477},[84,52499,51725],{"class":104},[84,52501,51634],{"class":477},[84,52503,52504,52506,52508,52510,52512],{"class":86,"line":156},[84,52505,52471],{"class":477},[84,52507,51734],{"class":51627},[84,52509,51737],{"class":477},[84,52511,51734],{"class":51627},[84,52513,51634],{"class":477},[84,52515,52516,52518,52520],{"class":86,"line":164},[84,52517,52112],{"class":477},[84,52519,51661],{"class":51627},[84,52521,51634],{"class":477},[84,52523,52524],{"class":86,"line":175},[84,52525,2729],{"emptyLinePlaceholder":403},[84,52527,52528,52530,52532],{"class":86,"line":185},[84,52529,1383],{"class":477},[84,52531,52127],{"class":51627},[84,52533,51634],{"class":477},[84,52535,52536,52538,52540],{"class":86,"line":195},[84,52537,52471],{"class":477},[84,52539,52140],{"class":51627},[84,52541,51634],{"class":477},[84,52543,52544,52547,52549,52551,52554,52556,52558,52560,52562,52564,52566,52568,52570,52572],{"class":86,"line":206},[84,52545,52546],{"class":473},"    let",[84,52548,52160],{"class":477},[84,52550,523],{"class":473},[84,52552,52553],{"class":477}," [",[84,52555,792],{"class":94},[84,52557,12764],{"class":477},[84,52559,140],{"class":94},[84,52561,12764],{"class":477},[84,52563,547],{"class":94},[84,52565,12764],{"class":477},[84,52567,553],{"class":94},[84,52569,12764],{"class":477},[84,52571,692],{"class":94},[84,52573,33573],{"class":477},[84,52575,52576,52578,52580,52582,52584,52586,52588,52590,52592,52594,52596,52599,52601,52603,52605],{"class":86,"line":217},[84,52577,3530],{"class":473},[84,52579,1991],{"class":477},[84,52581,52174],{"class":473},[84,52583,9767],{"class":477},[84,52585,523],{"class":473},[84,52587,4422],{"class":94},[84,52589,9774],{"class":477},[84,52591,1383],{"class":473},[84,52593,52292],{"class":477},[84,52595,52295],{"class":94},[84,52597,52598],{"class":473}," -",[84,52600,25446],{"class":94},[84,52602,3543],{"class":477},[84,52604,2621],{"class":473},[84,52606,12771],{"class":477},[84,52608,52609,52612,52614,52616,52618,52620,52622,52624,52626,52628,52630,52632,52634,52636,52638,52640,52642],{"class":86,"line":227},[84,52610,52611],{"class":473},"      for",[84,52613,1991],{"class":477},[84,52615,52174],{"class":473},[84,52617,9829],{"class":477},[84,52619,523],{"class":473},[84,52621,4422],{"class":94},[84,52623,9836],{"class":477},[84,52625,1383],{"class":473},[84,52627,52292],{"class":477},[84,52629,52295],{"class":94},[84,52631,52598],{"class":473},[84,52633,9767],{"class":477},[84,52635,1005],{"class":473},[84,52637,25446],{"class":94},[84,52639,9843],{"class":477},[84,52641,2621],{"class":473},[84,52643,12771],{"class":477},[84,52645,52646],{"class":86,"line":238},[84,52647,52648],{"class":328},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[84,52650,52651,52653,52656,52658,52661,52663,52665],{"class":86,"line":249},[84,52652,2826],{"class":473},[84,52654,52655],{"class":477}," (arr[j] ",[84,52657,1433],{"class":473},[84,52659,52660],{"class":477}," arr[j ",[84,52662,954],{"class":473},[84,52664,25446],{"class":94},[84,52666,52667],{"class":477},"]) {\n",[84,52669,52670],{"class":86,"line":262},[84,52671,52672],{"class":328},"          \u002F\u002F 交换两个变量\n",[84,52674,52675,52678,52681,52683],{"class":86,"line":273},[84,52676,52677],{"class":473},"          let",[84,52679,52680],{"class":477}," tmp ",[84,52682,523],{"class":473},[84,52684,52685],{"class":477}," arr[j]\n",[84,52687,52688,52691,52693,52695,52697,52699],{"class":86,"line":283},[84,52689,52690],{"class":477},"          arr[j] ",[84,52692,523],{"class":473},[84,52694,52660],{"class":477},[84,52696,954],{"class":473},[84,52698,25446],{"class":94},[84,52700,33573],{"class":477},[84,52702,52703,52706,52708,52710,52712,52714],{"class":86,"line":294},[84,52704,52705],{"class":477},"          arr[j ",[84,52707,954],{"class":473},[84,52709,25446],{"class":94},[84,52711,4772],{"class":477},[84,52713,523],{"class":473},[84,52715,52716],{"class":477}," tmp\n",[84,52718,52719],{"class":86,"line":2028},[84,52720,2858],{"class":477},[84,52722,52723],{"class":86,"line":2057},[84,52724,52725],{"class":477},"      }\n",[84,52727,52728],{"class":86,"line":2062},[84,52729,2516],{"class":477},[84,52731,52732,52735,52737],{"class":86,"line":2079},[84,52733,52734],{"class":477},"    document.",[84,52736,52255],{"class":90},[84,52738,52739],{"class":477},"(arr)\n",[84,52741,52742,52745,52747],{"class":86,"line":2084},[84,52743,52744],{"class":477},"  \u003C\u002F",[84,52746,52140],{"class":51627},[84,52748,51634],{"class":477},[84,52750,52751,52753,52755],{"class":86,"line":2089},[84,52752,52112],{"class":477},[84,52754,52127],{"class":51627},[84,52756,51634],{"class":477},[84,52758,52759],{"class":86,"line":2094},[84,52760,2729],{"emptyLinePlaceholder":403},[84,52762,52763,52765,52767],{"class":86,"line":2108},[84,52764,52112],{"class":477},[84,52766,50962],{"class":51627},[84,52768,51634],{"class":477},[35,52770,52771],{},[64,52772],{"alt":66,"src":52773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[35,52775,52776],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[35,52778,52779],{},"let arr = [4, 2, 5, 1, 3]",[35,52781,52782],{},"\u002F\u002F 1.升序排列写法",[35,52784,52785],{},"arr.sort(function (a, b) {",[35,52787,52788],{},"return a - b",[35,52790,52791],{},"})",[35,52793,52794],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[35,52796,52797],{},"\u002F\u002F 降序排列写法",[35,52799,52785],{},[35,52801,52802],{},"return b - a",[35,52804,52791],{},[35,52806,52807],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52809,52811],{"id":52810},"_29-函数","2.9 函数",[35,52813,52814],{},[64,52815],{"alt":66,"src":52816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[35,52818,52819],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[35,52821,52822],{},"函数的声明用function",[35,52824,52825],{},"函数里边可以嵌套函数",[23,52827,52829],{"id":52828},"_291-函数传参","2.9.1 函数传参",[35,52831,52832],{},[64,52833],{"alt":66,"src":52834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[35,52836,52837],{},[64,52838],{"alt":66,"src":52839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1480,52841,52842,52845,52848,52851,52854,52857],{},[31,52843,52844],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[31,52846,52847],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[31,52849,52850],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[31,52852,52853],{},"开发中尽量保持形参和实参个数一致",[31,52855,52856],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[31,52858,52859],{},"形参只在函数中有用，所以不需要进行声明这个变量",[35,52861,52862],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[23,52864,52866],{"id":52865},"_292-函数的返回值","2.9.2 函数的返回值",[35,52868,52869],{},[64,52870],{"alt":66,"src":52871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[35,52873,52874],{},[64,52875],{"alt":66,"src":52876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1480,52878,52879,52882,52885,52888,52891],{},[31,52880,52881],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[31,52883,52884],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[31,52886,52887],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[31,52889,52890],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[31,52892,52893],{},"断点调试:进入函数内部看执行过程F11",[23,52895,52897],{"id":52896},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[75,52899,52901],{"className":50960,"code":52900,"language":50962,"meta":66,"style":66},"    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",[81,52902,52903,52908,52913,52917,52922],{"__ignoreMap":66},[84,52904,52905],{"class":86,"line":87},[84,52906,52907],{"class":477},"    function fn(a, b) {\n",[84,52909,52910],{"class":86,"line":98},[84,52911,52912],{"class":477},"      console.log(a + b);\n",[84,52914,52915],{"class":86,"line":70},[84,52916,2516],{"class":477},[84,52918,52919],{"class":86,"line":120},[84,52920,52921],{"class":477},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[84,52923,52924],{"class":86,"line":131},[84,52925,52926],{"class":477},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[23,52928,52930],{"id":52929},"_294-作用域","2.9.4 作用域",[1480,52932,52933,52939,52944,52947,52950],{},[31,52934,52935,52936],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[624,52937,52938],{},"作用域",[31,52940,52941],{},[624,52942,52943],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[31,52945,52946],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[31,52948,52949],{},"函数内部可以直接所使用全局变量",[31,52951,52952],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[35,52954,14962],{},[75,52956,52958],{"className":50960,"code":52957,"language":50962,"meta":66,"style":66},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[81,52959,52960,52965,52970,52974,52979,52984,52989],{"__ignoreMap":66},[84,52961,52962],{"class":86,"line":87},[84,52963,52964],{"class":477},"    function fun() {\n",[84,52966,52967],{"class":86,"line":98},[84,52968,52969],{"class":477},"      num = 10\n",[84,52971,52972],{"class":86,"line":70},[84,52973,2516],{"class":477},[84,52975,52976],{"class":86,"line":120},[84,52977,52978],{"class":477},"    fun()\n",[84,52980,52981],{"class":86,"line":131},[84,52982,52983],{"class":477},"    console.log(num)\n",[84,52985,52986],{"class":86,"line":145},[84,52987,52988],{"class":477},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[84,52990,52991],{"class":86,"line":156},[84,52992,52993],{"class":477},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1480,52995,52996,52999],{},[31,52997,52998],{},"函数内部的形参可以看做是局部变量",[31,53000,53001],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[35,53003,53004,53005],{},"变量访问原则： ",[624,53006,53007],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[23,53009,53011],{"id":53010},"_295-匿名函数","2.9.5 匿名函数",[35,53013,53014],{},"函数可以分为具名函数和匿名函数",[35,53016,53017],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[28,53019,53020],{},[31,53021,53022],{},"函数表达式",[35,53024,53025],{},[64,53026],{"alt":66,"src":53027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[35,53029,53030],{},"里边也可以写参数",[35,53032,53033],{},"具名函数调用位置可以随意调整；",[35,53035,53036],{},"匿名函数函数表达式形式只能在声明后才可以使用",[28,53038,53039],{"start":98},[31,53040,53041],{},"立即执行函数",[35,53043,53044],{},[64,53045],{"alt":66,"src":53046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[35,53048,53049],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[35,53051,53052],{},"写法：两个小括号，然后在第一个小括号中写function",[35,53054,53055],{},"(function () {})();",[35,53057,53058],{},"不要落下最后的;",[35,53060,53061],{},"立即执行函数必须要加;",[35,53063,53064],{},"分号写前写后都没问题",[35,53066,53067],{},"写前：",[35,53069,53070],{},"(function() {})()",[35,53072,53073],{},";(function () {})();",[35,53075,53076],{},"写后:",[35,53078,53079],{},"(function() {})();",[35,53081,53055],{},[35,53083,53084],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[35,53086,53087],{},"还有一种写法：",[35,53089,53090],{},"(function(){}());",[35,53092,53093],{},"或者:",[35,53095,53096],{},"!function(){}();",[35,53098,53099],{},"立即执行函数有时候也是可以加名字的：",[35,53101,53102],{},"(function flexible(window,document) {}(window,document));",[35,53104,53105],{},"省一些调用方法",[23,53107,53109],{"id":53108},"_296-逻辑中断","2.9.6 逻辑中断!!!",[35,53111,53112],{},[64,53113],{"alt":66,"src":53114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[35,53116,53117],{},"这样就不用非得给x,y初始化了",[35,53119,53120],{},[64,53121],{"alt":66,"src":53122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[35,53124,53125],{},"代码执行时先看左边",[35,53127,53128],{},"例如：console.log(false && 3+5)",[35,53130,53131],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[35,53133,53134],{},"&&都是真时，就返回最后一个真值",[35,53136,53137],{},"console.log(11 && 22)",[35,53139,53140],{},"输出22",[35,53142,53143],{},"逻辑与：遇真则真",[35,53145,14962],{},[35,53147,53148],{},"let age=1",[35,53150,53151],{},"console.log(11 || age++)",[35,53153,53154],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[35,53156,53157],{},"console.log(11 || 22)",[35,53159,53160],{},"||逻辑或遇到真就直接输出，输出结果为11",[35,53162,53163],{},"||如果都是假的话，就取最后一个假的值了",[23,53165,53167],{"id":53166},"_297-转换为boolean型","2.9.7 转换为Boolean型",[35,53169,53170],{},"显示转换：",[35,53172,53173,53176,53177],{},[624,53174,53175],{},"记忆","： ",[624,53178,53179],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[35,53181,53182],{},"空字符串为假，其他字符串全为真",[35,53184,53185],{},[64,53186],{"alt":66,"src":53187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[35,53189,53190],{},"隐式转换：",[35,53192,53193],{},[64,53194],{"alt":66,"src":53195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[35,53197,53198],{},"隐式转换:",[35,53200,53201],{},"null+3=3",[35,53203,53204],{},"undefined+3=NaN",[35,53206,53207],{},"null==undefined 输出true,他两个都当0看",[35,53209,53210],{},"null===undefined 输出false",[35,53212,53213],{},"undefined做任何操作都是NaN",[35,53215,53216],{},"NaN不等于NaN，NaN表示计算错误",[14,53218,53220],{"id":53219},"_210-对象","2.10 对象",[23,53222,53224],{"id":53223},"_2101-对象的介绍","2.10.1 对象的介绍",[35,53226,53227],{},"对象也是一种数据类型，里边的数据是无序的",[35,53229,53230],{},"对象由属性和方法组成",[35,53232,53233],{},[64,53234],{"alt":66,"src":53235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[35,53237,53238],{},[64,53239],{"alt":66,"src":53240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[35,53242,53243],{},[64,53244],{"alt":66,"src":53245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[23,53247,53249],{"id":53248},"_2102-对象属性","2.10.2 对象属性",[35,53251,53252],{},[64,53253],{"alt":66,"src":53254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[28,53256,53257],{},[31,53258,53259],{},"查询对象",[35,53261,53262],{},"对象名.属性 goods.uname",[35,53264,53265],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[35,53267,53268],{},"不带字符串的属性名也可以使用 对象名['属性名']",[35,53270,53271],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[35,53273,53274],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[28,53276,53277],{"start":98},[31,53278,53279],{},"重新赋值",[35,53281,53282],{},"对象名.属性=新值",[28,53284,53285],{"start":70},[31,53286,53287],{},"增加新数据",[35,53289,53282],{},[28,53291,53292],{"start":120},[31,53293,53294],{},"删除对象中的属性",[35,53296,53297],{},"delete 对象名.属性",[23,53299,53301],{"id":53300},"_2103-对象方法","2.10.3 对象方法",[35,53303,53304],{},[64,53305],{"alt":66,"src":53306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[35,53308,53309],{},"后边跟的是匿名函数",[35,53311,53312],{},"对象外面的叫函数；对象内部的叫方法",[35,53314,53315],{},[64,53316],{"alt":66,"src":53317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[23,53319,53321],{"id":53320},"_2104-遍历对象","2.10.4 遍历对象",[35,53323,53324],{},"理解为加括号的python字典遍历",[35,53326,53327],{},[64,53328],{"alt":66,"src":53329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[35,53331,53332],{},"k是字符串类型",[35,53334,53335],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[75,53337,53339],{"className":50960,"code":53338,"language":50962,"meta":66,"style":66},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[81,53340,53341,53346,53351,53356,53361],{"__ignoreMap":66},[84,53342,53343],{"class":86,"line":87},[84,53344,53345],{"class":477},"   let arr = [1, 2, 3]\n",[84,53347,53348],{"class":86,"line":98},[84,53349,53350],{"class":477},"    for (let k in arr) {\n",[84,53352,53353],{"class":86,"line":70},[84,53354,53355],{"class":477},"      console.log(k)\n",[84,53357,53358],{"class":86,"line":120},[84,53359,53360],{"class":477},"      console.log(arr[k])\n",[84,53362,53363],{"class":86,"line":131},[84,53364,2516],{"class":477},[35,53366,53367],{},[64,53368],{"alt":66,"src":53369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[35,53371,53372],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[35,53374,53375],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[35,53377,53378],{},"for in 得到的k是属性名",[52140,53380,53381],{},"\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",[35,53383,53384],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[23,53386,53388],{"id":53387},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[35,53390,53391],{},"数组中放对象信息",[75,53393,53397],{"className":53394,"code":53395,"language":53396,"meta":66,"style":66},"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",[81,53398,53399,53407,53412,53417,53422,53427,53432,53437,53442,53447,53452,53457,53462,53466,53470],{"__ignoreMap":66},[84,53400,53401,53403,53405],{"class":86,"line":87},[84,53402,1383],{"class":477},[84,53404,52140],{"class":51627},[84,53406,51634],{"class":477},[84,53408,53409],{"class":86,"line":98},[84,53410,53411],{"class":477},"    let students = [\n",[84,53413,53414],{"class":86,"line":70},[84,53415,53416],{"class":477},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[84,53418,53419],{"class":86,"line":120},[84,53420,53421],{"class":477},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[84,53423,53424],{"class":86,"line":131},[84,53425,53426],{"class":477},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[84,53428,53429],{"class":86,"line":145},[84,53430,53431],{"class":477},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[84,53433,53434],{"class":86,"line":156},[84,53435,53436],{"class":477},"    ]\n",[84,53438,53439],{"class":86,"line":164},[84,53440,53441],{"class":477},"    for (let i = 0; i \u003C students.length; i++) {\n",[84,53443,53444],{"class":86,"line":175},[84,53445,53446],{"class":477},"      for (let k in students[i]) {\n",[84,53448,53449],{"class":86,"line":185},[84,53450,53451],{"class":477},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[84,53453,53454],{"class":86,"line":195},[84,53455,53456],{"class":477},"        \u002F\u002F输出每个人的名字：\n",[84,53458,53459],{"class":86,"line":206},[84,53460,53461],{"class":477},"        \u002F\u002Fconsole.log(students[i].name)\n",[84,53463,53464],{"class":86,"line":217},[84,53465,52725],{"class":477},[84,53467,53468],{"class":86,"line":227},[84,53469,2516],{"class":477},[84,53471,53472,53474,53476],{"class":86,"line":238},[84,53473,52744],{"class":477},[84,53475,52140],{"class":51627},[84,53477,51634],{"class":477},[23,53479,53481],{"id":53480},"_2106-内置对象","2.10.6 内置对象",[35,53483,53484],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[28,53486,53487],{},[31,53488,53489],{},"数学对象Math",[35,53491,53492],{},[64,53493],{"alt":66,"src":53494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[35,53496,53497],{},[39,53498,53501],{"href":53499,"rel":53500},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[43],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[35,53503,53504],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[35,53506,53507],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[35,53509,53510],{},"数组不可以使用Math中的max,min来求最大值与最小值",[35,53512,53513],{},"null是一个空对象，可以认为：null类似于let obj={}",[35,53515,53516],{},"null属于对象数据类型",[28,53518,53519],{"start":98},[31,53520,53521],{},"生成任意范围随机数",[35,53523,53524],{},[64,53525],{"alt":66,"src":53526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[35,53528,53529],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[35,53531,53532],{},"乘以几就取不到几",[35,53534,53535],{},"取数组中的随机元素：",[35,53537,53538],{},"let arr = ['red', 'green', 'blue']",[35,53540,53541],{},"let random = Math.floor(Math.random() * arr.length)",[35,53543,53544],{},"console.log(arr[random])",[35,53546,53547],{},"这个函数得到的是全闭区间",[35,53549,53550],{},"function getRandom(N, M) {",[35,53552,53553],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[35,53555,1419],{},[35,53557,53558],{},"console.log(getRandom(4, 8))",[23,53560,53562],{"id":53561},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[35,53564,53565],{},[64,53566],{"alt":66,"src":53567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[35,53569,53570],{},[64,53571],{"alt":66,"src":53572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[35,53574,53575],{},[64,53576],{"alt":66,"src":53577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[35,53579,53580],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[35,53582,53583],{},[64,53584],{"alt":66,"src":53585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[35,53587,53588],{},[64,53589],{"alt":66,"src":53590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[35,53592,53593],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[35,53595,53596],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[35,53598,53599],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[389,53601,53602],{},"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":66,"searchDepth":98,"depth":98,"links":53604},[53605,53613,53614,53615,53616,53617,53624,53628,53634,53643],{"id":50795,"depth":98,"text":50796,"children":53606},[53607,53608,53609,53610,53611,53612],{"id":50799,"depth":70,"text":50800},{"id":50816,"depth":70,"text":50817},{"id":50856,"depth":70,"text":50857},{"id":50868,"depth":70,"text":50869},{"id":50877,"depth":70,"text":50878},{"id":50925,"depth":70,"text":50926},{"id":50935,"depth":98,"text":50936},{"id":51023,"depth":98,"text":51024},{"id":51046,"depth":98,"text":51047},{"id":51058,"depth":98,"text":51059},{"id":51245,"depth":98,"text":51246,"children":53618},[53619,53620,53621,53622,53623],{"id":51249,"depth":70,"text":51250},{"id":51258,"depth":70,"text":51259},{"id":51286,"depth":70,"text":51287},{"id":51322,"depth":70,"text":51323},{"id":51347,"depth":70,"text":51348},{"id":51359,"depth":98,"text":51360,"children":53625},[53626,53627],{"id":51380,"depth":70,"text":51381},{"id":51474,"depth":70,"text":51475},{"id":51532,"depth":98,"text":51533,"children":53629},[53630,53631,53632,53633],{"id":51536,"depth":70,"text":51537},{"id":51560,"depth":70,"text":51561},{"id":51613,"depth":70,"text":51614},{"id":52424,"depth":70,"text":52425},{"id":52810,"depth":98,"text":52811,"children":53635},[53636,53637,53638,53639,53640,53641,53642],{"id":52828,"depth":70,"text":52829},{"id":52865,"depth":70,"text":52866},{"id":52896,"depth":70,"text":52897},{"id":52929,"depth":70,"text":52930},{"id":53010,"depth":70,"text":53011},{"id":53108,"depth":70,"text":53109},{"id":53166,"depth":70,"text":53167},{"id":53219,"depth":98,"text":53220,"children":53644},[53645,53646,53647,53648,53649,53650,53651],{"id":53223,"depth":70,"text":53224},{"id":53248,"depth":70,"text":53249},{"id":53300,"depth":70,"text":53301},{"id":53320,"depth":70,"text":53321},{"id":53387,"depth":70,"text":53388},{"id":53480,"depth":70,"text":53481},{"id":53561,"depth":70,"text":53562},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50787,"description":400},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53658,"title":53659,"body":53660,"description":400,"extension":401,"meta":76999,"navigation":403,"path":77000,"seo":77001,"stem":77002,"__hash__":77003},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53661,"toc":76939},[53662,53665,53668,53671,53676,53679,53682,53685,53689,53693,53699,53704,53712,53719,53722,53726,53731,53736,53741,53744,53747,53758,53761,53765,53768,53771,53776,53781,53786,53789,53792,53884,53887,53892,53895,53900,53903,53906,53911,53914,53919,53923,53926,53940,53944,53949,53952,53955,53959,53964,53967,53971,53975,53980,53984,53989,53992,53995,53998,54001,54004,54007,54012,54017,54044,54047,54050,54053,54058,54061,54064,54067,54070,54074,54103,54107,54112,54117,54120,54123,54126,54131,54246,54251,54256,54417,54422,54425,54429,54434,54439,54442,54445,54448,54451,54454,54457,54460,54463,54466,54469,54472,54475,54478,54481,54483,54486,54489,54492,54497,54501,54898,54901,54907,54911,54916,56198,56203,56206,56209,56212,56217,57413,57417,57423,57428,57431,57436,57441,57445,57449,57454,57457,57462,57465,57468,57472,58380,58383,58387,58608,58611,58614,58617,58843,58846,59070,59073,59077,59082,59085,59088,59316,59319,59352,59355,59359,59364,59368,59371,59374,59377,59380,59383,59386,59389,59394,60674,60678,60681,61774,61778,61781,61784,61787,61790,61794,61797,61800,61802,61810,63291,63295,63298,63301,63304,63513,63516,63520,63524,63529,63534,63537,63540,63545,63549,63554,63557,63666,63670,63675,63680,63683,63686,63690,63695,63700,63705,63708,63711,63722,63725,63730,63735,63738,63741,63814,63818,63823,63826,63828,63839,63843,63848,65174,65177,65180,65183,65185,65188,65191,65194,65197,65200,65203,65206,65209,65212,65215,65218,65221,65223,65225,65228,65232,66326,66329,66332,66348,66362,66365,66370,66376,66381,66385,66389,66394,66398,66403,66845,66850,66853,66857,66862,66865,66868,66872,66877,66881,66886,66891,66895,66900,66905,66908,66913,66918,66922,66927,66932,67036,67039,67043,67048,67414,67417,67420,67423,67426,67429,67432,67435,67438,68734,68738,68743,68748,68751,68754,68757,68760,68762,68767,68772,68775,68779,68784,68789,68794,68797,68800,68803,68806,68809,68814,68817,68821,68826,68831,68835,68840,68843,68848,68851,68854,68857,68860,68863,68868,68871,68874,68877,68880,68884,68889,68892,68896,68901,68904,68907,68911,68940,68943,68947,68951,68956,68960,68965,68968,68971,68974,68977,68980,68983,68986,68989,68992,68995,68998,69001,69004,69007,69011,69016,69021,69024,69028,69032,69037,69040,69044,69047,69050,69055,69060,69065,69070,69075,69078,69081,69086,69091,69095,69100,69103,69108,69111,69114,69117,69120,69125,69128,69137,69141,69146,69149,69152,69156,69159,69164,69168,69171,69177,69183,69187,69213,69216,70777,70780,71276,71279,71284,71289,71294,71298,71303,71308,71313,71317,71322,71325,71328,71331,71334,71338,71341,71346,71349,71354,71358,71363,71366,71371,71376,71381,71384,71387,71392,71397,71400,71403,71407,71410,71415,71418,71423,71426,71431,71436,71441,71444,71449,71514,71517,71528,71532,71537,71709,71713,71718,71721,71724,71727,71731,71742,71746,71749,71754,71759,71762,71765,71768,71771,71774,71776,71779,71782,71785,71790,71793,71798,71801,71805,71808,71811,71825,71829,71832,71887,71892,71895,71898,71903,71906,71910,71915,72045,72049,72054,72059,72140,72145,72149,72152,72157,72162,72168,72171,72174,72177,72181,72186,72189,72200,72204,72221,75268,75272,75275,75278,75281,75302,75306,75309,75317,75320,75325,75328,75331,75336,75341,75345,75366,75370,75375,75378,75381,75384,75387,75391,75396,75399,75403,75408,75411,75416,75419,75424,75427,75432,76635,76639,76644,76647,76652,76936],[10,53663,53659],{"id":53664},"_3web-apis",[35,53666,53667],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[35,53669,53670],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[35,53672,53673],{},[64,53674],{"alt":66,"src":53675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[35,53677,53678],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[35,53680,53681],{},"建议数组和对象使用 const 来声明",[35,53683,53684],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53686,53688],{"id":53687},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[23,53690,53692],{"id":53691},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[35,53694,53695,53698],{},[81,53696,53697],{},"document"," = HTML 文件解析后的对象化表示；",[35,53700,53701,53703],{},[81,53702,53697],{}," ≠ HTML 文件本身",[35,53705,53706,53711],{},[624,53707,53708],{},[81,53709,53710],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[35,53713,53714,53718],{},[624,53715,53716],{},[81,53717,53697],{}," ：容器里的内容，代表当前加载的网页（DOM）",[35,53720,53721],{},"document实际上为window.document的简写",[23,53723,53725],{"id":53724},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[35,53727,53728],{},[64,53729],{"alt":66,"src":53730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[35,53732,53733],{},[64,53734],{"alt":66,"src":53735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[35,53737,53738],{},[64,53739],{"alt":66,"src":53740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[35,53742,53743],{},"console.dir()",[35,53745,53746],{},"dir用来打印对象",[1480,53748,53749,53752,53755],{},[31,53750,53751],{},"任何一个标签，都是一个对象",[31,53753,53754],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[31,53756,53757],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[35,53759,53760],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[23,53762,53764],{"id":53763},"_312-获取dom对象","3.1.2 获取DoM对象",[35,53766,53767],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[35,53769,53770],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[35,53772,53773],{},[624,53774,53775],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[28,53777,53778],{},[31,53779,53780],{},"利用CSS选择器来获取标签元素",[35,53782,53783],{},[64,53784],{"alt":66,"src":53785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[35,53787,53788],{},"里边的选择器必须必须加引号！！！",[35,53790,53791],{},"只选择第一个元素",[75,53793,53795],{"className":53394,"code":53794,"language":53396,"meta":66,"style":66},"\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",[81,53796,53797,53805,53826,53845,53853,53858,53863,53868,53876],{"__ignoreMap":66},[84,53798,53799,53801,53803],{"class":86,"line":87},[84,53800,1383],{"class":477},[84,53802,52127],{"class":51627},[84,53804,51634],{"class":477},[84,53806,53807,53809,53811,53814,53816,53819,53822,53824],{"class":86,"line":98},[84,53808,52471],{"class":477},[84,53810,51938],{"class":51627},[84,53812,53813],{"class":90}," class",[84,53815,523],{"class":477},[84,53817,53818],{"class":104},"\"box\"",[84,53820,53821],{"class":477},">123\u003C\u002F",[84,53823,51938],{"class":51627},[84,53825,51634],{"class":477},[84,53827,53828,53830,53832,53834,53836,53838,53841,53843],{"class":86,"line":70},[84,53829,52471],{"class":477},[84,53831,51938],{"class":51627},[84,53833,53813],{"class":90},[84,53835,523],{"class":477},[84,53837,53818],{"class":104},[84,53839,53840],{"class":477},">456\u003C\u002F",[84,53842,51938],{"class":51627},[84,53844,51634],{"class":477},[84,53846,53847,53849,53851],{"class":86,"line":120},[84,53848,52471],{"class":477},[84,53850,52140],{"class":51627},[84,53852,51634],{"class":477},[84,53854,53855],{"class":86,"line":131},[84,53856,53857],{"class":477},"    \u002F\u002F 1.获取匹配的第一个元素\n",[84,53859,53860],{"class":86,"line":145},[84,53861,53862],{"class":477},"    const box = document.querySelector('div')\n",[84,53864,53865],{"class":86,"line":156},[84,53866,53867],{"class":477},"    console.dir(box)\n",[84,53869,53870,53872,53874],{"class":86,"line":164},[84,53871,52744],{"class":477},[84,53873,52140],{"class":51627},[84,53875,51634],{"class":477},[84,53877,53878,53880,53882],{"class":86,"line":175},[84,53879,52112],{"class":477},[84,53881,52127],{"class":51627},[84,53883,51634],{"class":477},[35,53885,53886],{},"只选123，不选456",[35,53888,53889],{},[64,53890],{"alt":66,"src":53891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[35,53893,53894],{},"返回的是一个数组的集合，不能对其进行直接修改",[35,53896,53897],{},[64,53898],{"alt":66,"src":53899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[35,53901,53902],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[35,53904,53905],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[28,53907,53908],{"start":98},[31,53909,53910],{},"其他方法来获取标签元素",[35,53912,53913],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[35,53915,53916],{},[64,53917],{"alt":66,"src":53918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[23,53920,53922],{"id":53921},"_313-操作元素的内容","3.1.3 操作元素的内容",[35,53924,53925],{},"设置修改DOM元素内容有两种方式：",[1480,53927,53928,53931,53934,53937],{},[31,53929,53930],{},"元素.innerText=''",[31,53932,53933],{},"元素.innerHTML=''",[31,53935,53936],{},"不写字符串输出数字也是可以的",[31,53938,53939],{},"元素.innerHtml=1",[22327,53941,53943],{"id":53942},"_3131-innertext","3.1.3.1 innerText",[35,53945,53946],{},[64,53947],{"alt":66,"src":53948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[35,53950,53951],{},"思路：实现了修改盒子中的内容！",[35,53953,53954],{},"它只显示纯文本，不解析标签",[22327,53956,53958],{"id":53957},"_3132-innerhtml","3.1.3.2 innerHTML",[35,53960,53961],{},[64,53962],{"alt":66,"src":53963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[35,53965,53966],{},"相比于innerText，他的强大之处在于可以解析标签",[23,53968,53970],{"id":53969},"_314-操作元素属性","3.1.4 操作元素属性",[22327,53972,53974],{"id":53973},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[35,53976,53977],{},[64,53978],{"alt":66,"src":53979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22327,53981,53983],{"id":53982},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[35,53985,53986],{},[64,53987],{"alt":66,"src":53988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[35,53990,53991],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[35,53993,53994],{},"div.style.backgroundColor = 'hotpink'",[35,53996,53997],{},"如果按照css的写法，-表示减，就会出错",[35,53999,54000],{},"body元素不需要再获取，直接用就行！！！！！！",[35,54002,54003],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[35,54005,54006],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[35,54008,54009],{},[64,54010],{"alt":66,"src":54011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[35,54013,54014],{},[64,54015],{"alt":66,"src":54016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[28,54018,54019,54022,54025,54028,54031,54034],{},[31,54020,54021],{},"className这个方式就是修改很多样式的时候来使用的！",[31,54023,54024],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[31,54026,54027],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[31,54029,54030],{},"className为属性名，如果还用class的话就导致与关键字冲突",[31,54032,54033],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[31,54035,54036,54037,54042],{},"解析标签的时候就变为了",[51938,54038],{"className":54039},[54040,54041],"nav","box",[54,54043],{},[35,54045,54046],{},"例子：",[51938,54048],{"className":54049},[54040],[52140,54051,54052],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[35,54054,54055],{},[64,54056],{"alt":66,"src":54057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[35,54059,54060],{},"追加和删除类名用classList",[35,54062,54063],{},"常用于类似于开关的操作",[35,54065,54066],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[35,54068,54069],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22327,54071,54073],{"id":54072},"_3143-牢记点","3.1.4.3 牢记点",[28,54075,54076,54079,54082,54085,54088,54091,54094,54097,54100],{},[31,54077,54078],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[31,54080,54081],{},"使用style属性操作css时不要忘记引号",[31,54083,54084],{},"使用className或者classList时也不要忘记引号",[31,54086,54087],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[31,54089,54090],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[31,54092,54093],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[31,54095,54096],{},"若： let arr=['1','2',3] arr[0]=1",[31,54098,54099],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[31,54101,54102],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[23,54104,54106],{"id":54105},"_315-操作表单元素","3.1.5 操作表单元素",[28,54108,54109],{},[31,54110,54111],{},"天生的属性",[35,54113,54114],{},[64,54115],{"alt":66,"src":54116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[35,54118,54119],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[35,54121,54122],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[35,54124,54125],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[35,54127,54128],{},[64,54129],{"alt":66,"src":54130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[75,54132,54134],{"className":50960,"code":54133,"language":50962,"meta":66,"style":66},"在复选框中如果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",[81,54135,54136,54141,54173,54178,54183,54188,54193,54197,54202,54207,54224,54236,54241],{"__ignoreMap":66},[84,54137,54138],{"class":86,"line":87},[84,54139,54140],{"class":477},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[84,54142,54143,54145,54148,54151,54153,54156,54158,54160,54162,54164,54166,54168,54171],{"class":86,"line":98},[84,54144,1383],{"class":477},[84,54146,54147],{"class":51627},"input",[84,54149,54150],{"class":90}," type",[84,54152,523],{"class":477},[84,54154,54155],{"class":104},"\"checkbox\"",[84,54157,15249],{"class":90},[84,54159,523],{"class":477},[84,54161,7981],{"class":104},[84,54163,15288],{"class":90},[84,54165,523],{"class":477},[84,54167,7981],{"class":104},[84,54169,54170],{"class":90}," checked",[84,54172,51634],{"class":477},[84,54174,54175],{"class":86,"line":70},[84,54176,54177],{"class":477},"不选的话：\n",[84,54179,54180],{"class":86,"line":120},[84,54181,54182],{"class":477},"const input = document.querySelector('input')\n",[84,54184,54185],{"class":86,"line":131},[84,54186,54187],{"class":477},"input.checked=false\n",[84,54189,54190],{"class":86,"line":145},[84,54191,54192],{"class":477},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[84,54194,54195],{"class":86,"line":156},[84,54196,2729],{"emptyLinePlaceholder":403},[84,54198,54199],{"class":86,"line":164},[84,54200,54201],{"class":477},"禁用按钮：\n",[84,54203,54204],{"class":86,"line":175},[84,54205,54206],{"class":477},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[84,54208,54209,54211,54214,54217,54220,54222],{"class":86,"line":185},[84,54210,1383],{"class":477},[84,54212,54213],{"class":51627},"button",[84,54215,54216],{"class":90}," disabled",[84,54218,54219],{"class":477},">点击\u003C\u002F",[84,54221,54213],{"class":51627},[84,54223,51634],{"class":477},[84,54225,54226,54228,54230,54232,54234],{"class":86,"line":195},[84,54227,1383],{"class":477},[84,54229,54213],{"class":51627},[84,54231,54219],{"class":477},[84,54233,54213],{"class":51627},[84,54235,51634],{"class":477},[84,54237,54238],{"class":86,"line":206},[84,54239,54240],{"class":477},"const bt = document.querySelector('button')\n",[84,54242,54243],{"class":86,"line":217},[84,54244,54245],{"class":477},"bt.disabled = false\n",[28,54247,54248],{"start":98},[31,54249,54250],{},"自定义属性",[35,54252,54253],{},[64,54254],{"alt":66,"src":54255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[75,54257,54259],{"className":53394,"code":54258,"language":53396,"meta":66,"style":66},"\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",[81,54260,54261,54269,54297,54316,54335,54354,54373,54381,54386,54391,54396,54401,54409],{"__ignoreMap":66},[84,54262,54263,54265,54267],{"class":86,"line":87},[84,54264,1383],{"class":477},[84,54266,52127],{"class":51627},[84,54268,51634],{"class":477},[84,54270,54271,54273,54275,54278,54280,54282,54285,54287,54290,54293,54295],{"class":86,"line":98},[84,54272,52471],{"class":477},[84,54274,51938],{"class":51627},[84,54276,54277],{"class":90}," data-id",[84,54279,523],{"class":477},[84,54281,4007],{"class":104},[84,54283,54284],{"class":90}," data-spm",[84,54286,523],{"class":477},[84,54288,54289],{"class":104},"\"我不知道\"",[84,54291,54292],{"class":477},">1\u003C\u002F",[84,54294,51938],{"class":51627},[84,54296,51634],{"class":477},[84,54298,54299,54301,54303,54305,54307,54309,54312,54314],{"class":86,"line":70},[84,54300,52471],{"class":477},[84,54302,51938],{"class":51627},[84,54304,54277],{"class":90},[84,54306,523],{"class":477},[84,54308,4030],{"class":104},[84,54310,54311],{"class":477},">2\u003C\u002F",[84,54313,51938],{"class":51627},[84,54315,51634],{"class":477},[84,54317,54318,54320,54322,54324,54326,54328,54331,54333],{"class":86,"line":120},[84,54319,52471],{"class":477},[84,54321,51938],{"class":51627},[84,54323,54277],{"class":90},[84,54325,523],{"class":477},[84,54327,4043],{"class":104},[84,54329,54330],{"class":477},">3\u003C\u002F",[84,54332,51938],{"class":51627},[84,54334,51634],{"class":477},[84,54336,54337,54339,54341,54343,54345,54347,54350,54352],{"class":86,"line":131},[84,54338,52471],{"class":477},[84,54340,51938],{"class":51627},[84,54342,54277],{"class":90},[84,54344,523],{"class":477},[84,54346,4056],{"class":104},[84,54348,54349],{"class":477},">4\u003C\u002F",[84,54351,51938],{"class":51627},[84,54353,51634],{"class":477},[84,54355,54356,54358,54360,54362,54364,54366,54369,54371],{"class":86,"line":145},[84,54357,52471],{"class":477},[84,54359,51938],{"class":51627},[84,54361,54277],{"class":90},[84,54363,523],{"class":477},[84,54365,4077],{"class":104},[84,54367,54368],{"class":477},">5\u003C\u002F",[84,54370,51938],{"class":51627},[84,54372,51634],{"class":477},[84,54374,54375,54377,54379],{"class":86,"line":156},[84,54376,52471],{"class":477},[84,54378,52140],{"class":51627},[84,54380,51634],{"class":477},[84,54382,54383],{"class":86,"line":164},[84,54384,54385],{"class":477},"    const one = document.querySelector('div')\n",[84,54387,54388],{"class":86,"line":175},[84,54389,54390],{"class":477},"    console.log(one.dataset)\n",[84,54392,54393],{"class":86,"line":185},[84,54394,54395],{"class":477},"    console.log(one.dataset.id)\n",[84,54397,54398],{"class":86,"line":195},[84,54399,54400],{"class":477},"    console.log(one.dataset.spm)\n",[84,54402,54403,54405,54407],{"class":86,"line":206},[84,54404,52744],{"class":477},[84,54406,52140],{"class":51627},[84,54408,51634],{"class":477},[84,54410,54411,54413,54415],{"class":86,"line":217},[84,54412,52112],{"class":477},[84,54414,52127],{"class":51627},[84,54416,51634],{"class":477},[35,54418,54419],{},[64,54420],{"alt":66,"src":54421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[35,54423,54424],{},"document.querySelector选择的是第一个对象（元素）",[23,54426,54428],{"id":54427},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[35,54430,54431],{},[64,54432],{"alt":66,"src":54433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[35,54435,54436],{},[64,54437],{"alt":66,"src":54438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[35,54440,54441],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52140,54443,54444],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[35,54446,54447],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52140,54449,54450],{},"\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",[35,54452,54453],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[35,54455,54456],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[35,54458,54459],{},"单位为毫秒！！！",[35,54461,54462],{},"可以搭配匿名函数来用！！！",[35,54464,54465],{},"setInterval(function () {",[35,54467,54468],{},"alert('两秒执行一次')",[35,54470,54471],{},"}, 2000)",[35,54473,54474],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[35,54476,54477],{},"function fn() {",[35,54479,54480],{},"document.write(1)",[35,54482,1419],{},[35,54484,54485],{},"setInterval(fn, 1000)",[35,54487,54488],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[35,54490,54491],{},"setInterval('fn()', 1000)",[35,54493,54494],{},[64,54495],{"alt":66,"src":54496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22327,54498,54500],{"id":54499},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[75,54502,54504],{"className":50960,"code":54503,"language":50962,"meta":66,"style":66},"\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",[81,54505,54506,54516,54530,54534,54542,54556,54576,54588,54596,54600,54608,54645,54650,54655,54660,54668,54676,54698,54706,54711,54733,54738,54743,54754,54759,54779,54787,54802,54817,54828,54833,54843,54853,54857,54866,54870,54878,54886,54890],{"__ignoreMap":66},[84,54507,54508,54510,54512,54514],{"class":86,"line":87},[84,54509,51624],{"class":477},[84,54511,51628],{"class":51627},[84,54513,51631],{"class":90},[84,54515,51634],{"class":477},[84,54517,54518,54520,54522,54524,54526,54528],{"class":86,"line":98},[84,54519,1383],{"class":477},[84,54521,50962],{"class":51627},[84,54523,51643],{"class":90},[84,54525,523],{"class":477},[84,54527,51648],{"class":104},[84,54529,51634],{"class":477},[84,54531,54532],{"class":86,"line":70},[84,54533,2729],{"emptyLinePlaceholder":403},[84,54535,54536,54538,54540],{"class":86,"line":120},[84,54537,1383],{"class":477},[84,54539,51661],{"class":51627},[84,54541,51634],{"class":477},[84,54543,54544,54546,54548,54550,54552,54554],{"class":86,"line":131},[84,54545,52471],{"class":477},[84,54547,51671],{"class":51627},[84,54549,51674],{"class":90},[84,54551,523],{"class":477},[84,54553,51679],{"class":104},[84,54555,51634],{"class":477},[84,54557,54558,54560,54562,54564,54566,54568,54570,54572,54574],{"class":86,"line":145},[84,54559,52471],{"class":477},[84,54561,51671],{"class":51627},[84,54563,15249],{"class":90},[84,54565,523],{"class":477},[84,54567,51718],{"class":104},[84,54569,51698],{"class":90},[84,54571,523],{"class":477},[84,54573,51725],{"class":104},[84,54575,51634],{"class":477},[84,54577,54578,54580,54582,54584,54586],{"class":86,"line":156},[84,54579,52471],{"class":477},[84,54581,51734],{"class":51627},[84,54583,51737],{"class":477},[84,54585,51734],{"class":51627},[84,54587,51634],{"class":477},[84,54589,54590,54592,54594],{"class":86,"line":164},[84,54591,52112],{"class":477},[84,54593,51661],{"class":51627},[84,54595,51634],{"class":477},[84,54597,54598],{"class":86,"line":175},[84,54599,2729],{"emptyLinePlaceholder":403},[84,54601,54602,54604,54606],{"class":86,"line":185},[84,54603,1383],{"class":477},[84,54605,52127],{"class":51627},[84,54607,51634],{"class":477},[84,54609,54610,54612,54615,54617,54619,54621,54623,54625,54627,54630,54632,54635,54638,54640,54643],{"class":86,"line":195},[84,54611,52471],{"class":477},[84,54613,54614],{"class":51627},"textarea",[84,54616,15249],{"class":90},[84,54618,523],{"class":477},[84,54620,7981],{"class":104},[84,54622,15288],{"class":90},[84,54624,523],{"class":477},[84,54626,7981],{"class":104},[84,54628,54629],{"class":90}," cols",[84,54631,523],{"class":477},[84,54633,54634],{"class":104},"\"30\"",[84,54636,54637],{"class":90}," rows",[84,54639,523],{"class":477},[84,54641,54642],{"class":104},"\"10\"",[84,54644,51634],{"class":477},[84,54646,54647],{"class":86,"line":206},[84,54648,54649],{"class":477},"        用户注册协议\n",[84,54651,54652],{"class":86,"line":217},[84,54653,54654],{"class":477},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[84,54656,54657],{"class":86,"line":227},[84,54658,54659],{"class":477},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[84,54661,54662,54664,54666],{"class":86,"line":238},[84,54663,52103],{"class":477},[84,54665,54614],{"class":51627},[84,54667,51634],{"class":477},[84,54669,54670,54672,54674],{"class":86,"line":249},[84,54671,52471],{"class":477},[84,54673,54],{"class":51627},[84,54675,51634],{"class":477},[84,54677,54678,54680,54682,54684,54686,54689,54691,54694,54696],{"class":86,"line":262},[84,54679,52471],{"class":477},[84,54681,54213],{"class":51627},[84,54683,53813],{"class":90},[84,54685,523],{"class":477},[84,54687,54688],{"class":104},"\"btn\"",[84,54690,54216],{"class":90},[84,54692,54693],{"class":477},">我已经阅读用户协议(5)\u003C\u002F",[84,54695,54213],{"class":51627},[84,54697,51634],{"class":477},[84,54699,54700,54702,54704],{"class":86,"line":273},[84,54701,52471],{"class":477},[84,54703,52140],{"class":51627},[84,54705,51634],{"class":477},[84,54707,54708],{"class":86,"line":283},[84,54709,54710],{"class":328},"    \u002F\u002F 1. 获取元素\n",[84,54712,54713,54715,54718,54720,54723,54726,54728,54731],{"class":86,"line":294},[84,54714,11550],{"class":473},[84,54716,54717],{"class":94}," btn",[84,54719,13893],{"class":473},[84,54721,54722],{"class":477}," document.",[84,54724,54725],{"class":90},"querySelector",[84,54727,478],{"class":477},[84,54729,54730],{"class":104},"'.btn'",[84,54732,484],{"class":477},[84,54734,54735],{"class":86,"line":2028},[84,54736,54737],{"class":328},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[84,54739,54740],{"class":86,"line":2057},[84,54741,54742],{"class":328},"    \u002F\u002F 2. 倒计时\n",[84,54744,54745,54747,54749,54751],{"class":86,"line":2062},[84,54746,52546],{"class":473},[84,54748,9767],{"class":477},[84,54750,523],{"class":473},[84,54752,54753],{"class":94}," 5\n",[84,54755,54756],{"class":86,"line":2079},[84,54757,54758],{"class":328},"    \u002F\u002F 2.1 开启定时器\n",[84,54760,54761,54763,54766,54768,54771,54773,54776],{"class":86,"line":2084},[84,54762,52546],{"class":473},[84,54764,54765],{"class":477}," n ",[84,54767,523],{"class":473},[84,54769,54770],{"class":90}," setInterval",[84,54772,478],{"class":477},[84,54774,54775],{"class":473},"function",[84,54777,54778],{"class":477}," () {\n",[84,54780,54781,54784],{"class":86,"line":2089},[84,54782,54783],{"class":477},"      i",[84,54785,54786],{"class":473},"--\n",[84,54788,54789,54792,54794,54797,54799],{"class":86,"line":2094},[84,54790,54791],{"class":477},"      btn.innerHTML ",[84,54793,523],{"class":473},[84,54795,54796],{"class":104}," `我已经阅读用户协议(${",[84,54798,914],{"class":477},[84,54800,54801],{"class":104},"})`\n",[84,54803,54804,54807,54810,54813,54815],{"class":86,"line":2108},[84,54805,54806],{"class":473},"      if",[84,54808,54809],{"class":477}," (i ",[84,54811,54812],{"class":473},"===",[84,54814,4422],{"class":94},[84,54816,12771],{"class":477},[84,54818,54819,54822,54825],{"class":86,"line":2113},[84,54820,54821],{"class":90},"        clearInterval",[84,54823,54824],{"class":477},"(n)  ",[84,54826,54827],{"class":328},"\u002F\u002F 关闭定时器\n",[84,54829,54830],{"class":86,"line":2906},[84,54831,54832],{"class":328},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[84,54834,54835,54838,54840],{"class":86,"line":2920},[84,54836,54837],{"class":477},"        btn.disabled ",[84,54839,523],{"class":473},[84,54841,54842],{"class":94}," false\n",[84,54844,54845,54848,54850],{"class":86,"line":2928},[84,54846,54847],{"class":477},"        btn.innerHTML ",[84,54849,523],{"class":473},[84,54851,54852],{"class":104}," '同意'\n",[84,54854,54855],{"class":86,"line":2933},[84,54856,52725],{"class":477},[84,54858,54859,54862,54864],{"class":86,"line":2939},[84,54860,54861],{"class":477},"    }, ",[84,54863,6739],{"class":94},[84,54865,484],{"class":477},[84,54867,54868],{"class":86,"line":2945},[84,54869,2729],{"emptyLinePlaceholder":403},[84,54871,54872,54874,54876],{"class":86,"line":2950},[84,54873,52744],{"class":477},[84,54875,52140],{"class":51627},[84,54877,51634],{"class":477},[84,54879,54880,54882,54884],{"class":86,"line":8277},[84,54881,52112],{"class":477},[84,54883,52127],{"class":51627},[84,54885,51634],{"class":477},[84,54887,54888],{"class":86,"line":8301},[84,54889,2729],{"emptyLinePlaceholder":403},[84,54891,54892,54894,54896],{"class":86,"line":8306},[84,54893,52112],{"class":477},[84,54895,50962],{"class":51627},[84,54897,51634],{"class":477},[35,54899,54900],{},"不要一直想着用死循环,避免死循环",[35,54902,54903,54906],{},[81,54904,54905],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22327,54908,54910],{"id":54909},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[28,54912,54913],{},[31,54914,54915],{},"法1",[75,54917,54919],{"className":50960,"code":54918,"language":50962,"meta":66,"style":66},"\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",[81,54920,54921,54931,54945,54949,54957,54971,54991,55003,55011,55017,55028,55039,55043,55047,55054,55066,55070,55074,55081,55093,55107,55120,55134,55138,55142,55149,55160,55171,55182,55194,55206,55218,55222,55226,55234,55244,55257,55269,55282,55286,55290,55297,55307,55319,55331,55342,55353,55363,55375,55387,55391,55395,55404,55416,55428,55456,55469,55473,55477,55484,55495,55499,55507,55515,55519,55527,55541,55556,55580,55588,55603,55616,55624,55645,55657,55669,55681,55693,55705,55717,55729,55738,55746,55754,55762,55774,55797,55816,55835,55854,55873,55892,55911,55931,55935,55955,55974,55994,56015,56026,56043,56053,56063,56073,56078,56083,56088,56093,56118,56131,56135,56158,56162,56170,56178,56186,56190],{"__ignoreMap":66},[84,54922,54923,54925,54927,54929],{"class":86,"line":87},[84,54924,51624],{"class":477},[84,54926,51628],{"class":51627},[84,54928,51631],{"class":90},[84,54930,51634],{"class":477},[84,54932,54933,54935,54937,54939,54941,54943],{"class":86,"line":98},[84,54934,1383],{"class":477},[84,54936,50962],{"class":51627},[84,54938,51643],{"class":90},[84,54940,523],{"class":477},[84,54942,51648],{"class":104},[84,54944,51634],{"class":477},[84,54946,54947],{"class":86,"line":70},[84,54948,2729],{"emptyLinePlaceholder":403},[84,54950,54951,54953,54955],{"class":86,"line":120},[84,54952,1383],{"class":477},[84,54954,51661],{"class":51627},[84,54956,51634],{"class":477},[84,54958,54959,54961,54963,54965,54967,54969],{"class":86,"line":131},[84,54960,52471],{"class":477},[84,54962,51671],{"class":51627},[84,54964,51674],{"class":90},[84,54966,523],{"class":477},[84,54968,51679],{"class":104},[84,54970,51634],{"class":477},[84,54972,54973,54975,54977,54979,54981,54983,54985,54987,54989],{"class":86,"line":145},[84,54974,52471],{"class":477},[84,54976,51671],{"class":51627},[84,54978,15249],{"class":90},[84,54980,523],{"class":477},[84,54982,51718],{"class":104},[84,54984,51698],{"class":90},[84,54986,523],{"class":477},[84,54988,51725],{"class":104},[84,54990,51634],{"class":477},[84,54992,54993,54995,54997,54999,55001],{"class":86,"line":156},[84,54994,52471],{"class":477},[84,54996,51734],{"class":51627},[84,54998,51737],{"class":477},[84,55000,51734],{"class":51627},[84,55002,51634],{"class":477},[84,55004,55005,55007,55009],{"class":86,"line":164},[84,55006,52471],{"class":477},[84,55008,389],{"class":51627},[84,55010,51634],{"class":477},[84,55012,55013,55015],{"class":86,"line":175},[84,55014,6732],{"class":51627},[84,55016,15901],{"class":477},[84,55018,55019,55022,55024,55026],{"class":86,"line":185},[84,55020,55021],{"class":94},"      padding",[84,55023,51764],{"class":477},[84,55025,666],{"class":94},[84,55027,1634],{"class":477},[84,55029,55030,55033,55035,55037],{"class":86,"line":195},[84,55031,55032],{"class":94},"      margin",[84,55034,51764],{"class":477},[84,55036,666],{"class":94},[84,55038,1634],{"class":477},[84,55040,55041],{"class":86,"line":206},[84,55042,2516],{"class":477},[84,55044,55045],{"class":86,"line":217},[84,55046,2729],{"emptyLinePlaceholder":403},[84,55048,55049,55052],{"class":86,"line":227},[84,55050,55051],{"class":51627},"    li",[84,55053,15901],{"class":477},[84,55055,55056,55059,55061,55064],{"class":86,"line":238},[84,55057,55058],{"class":94},"      list-style",[84,55060,51764],{"class":477},[84,55062,55063],{"class":94},"none",[84,55065,1634],{"class":477},[84,55067,55068],{"class":86,"line":249},[84,55069,2516],{"class":477},[84,55071,55072],{"class":86,"line":262},[84,55073,2729],{"emptyLinePlaceholder":403},[84,55075,55076,55079],{"class":86,"line":273},[84,55077,55078],{"class":90},"    .box",[84,55080,15901],{"class":477},[84,55082,55083,55086,55088,55091],{"class":86,"line":283},[84,55084,55085],{"class":94},"      position",[84,55087,51764],{"class":477},[84,55089,55090],{"class":94},"relative",[84,55092,1634],{"class":477},[84,55094,55095,55098,55100,55103,55105],{"class":86,"line":294},[84,55096,55097],{"class":94},"      width",[84,55099,51764],{"class":477},[84,55101,55102],{"class":94},"976",[84,55104,51819],{"class":473},[84,55106,1634],{"class":477},[84,55108,55109,55112,55114,55116,55118],{"class":86,"line":2028},[84,55110,55111],{"class":94},"      height",[84,55113,51764],{"class":477},[84,55115,1879],{"class":94},[84,55117,51819],{"class":473},[84,55119,1634],{"class":477},[84,55121,55122,55124,55126,55128,55130,55132],{"class":86,"line":2057},[84,55123,55032],{"class":94},[84,55125,51764],{"class":477},[84,55127,784],{"class":94},[84,55129,51819],{"class":473},[84,55131,51883],{"class":94},[84,55133,1634],{"class":477},[84,55135,55136],{"class":86,"line":2062},[84,55137,2516],{"class":477},[84,55139,55140],{"class":86,"line":2079},[84,55141,2729],{"emptyLinePlaceholder":403},[84,55143,55144,55147],{"class":86,"line":2084},[84,55145,55146],{"class":90},"    .slider-footer",[84,55148,15901],{"class":477},[84,55150,55151,55153,55155,55158],{"class":86,"line":2089},[84,55152,55085],{"class":94},[84,55154,51764],{"class":477},[84,55156,55157],{"class":94},"absolute",[84,55159,1634],{"class":477},[84,55161,55162,55165,55167,55169],{"class":86,"line":2094},[84,55163,55164],{"class":94},"      left",[84,55166,51764],{"class":477},[84,55168,666],{"class":94},[84,55170,1634],{"class":477},[84,55172,55173,55176,55178,55180],{"class":86,"line":2108},[84,55174,55175],{"class":94},"      bottom",[84,55177,51764],{"class":477},[84,55179,666],{"class":94},[84,55181,1634],{"class":477},[84,55183,55184,55186,55188,55190,55192],{"class":86,"line":2113},[84,55185,55097],{"class":94},[84,55187,51764],{"class":477},[84,55189,784],{"class":94},[84,55191,801],{"class":473},[84,55193,1634],{"class":477},[84,55195,55196,55198,55200,55202,55204],{"class":86,"line":2906},[84,55197,55111],{"class":94},[84,55199,51764],{"class":477},[84,55201,1048],{"class":94},[84,55203,801],{"class":473},[84,55205,1634],{"class":477},[84,55207,55208,55211,55213,55216],{"class":86,"line":2920},[84,55209,55210],{"class":94},"      background-color",[84,55212,51764],{"class":477},[84,55214,55215],{"class":94},"skyblue",[84,55217,1634],{"class":477},[84,55219,55220],{"class":86,"line":2928},[84,55221,2516],{"class":477},[84,55223,55224],{"class":86,"line":2933},[84,55225,2729],{"emptyLinePlaceholder":403},[84,55227,55228,55230,55232],{"class":86,"line":2939},[84,55229,55146],{"class":90},[84,55231,7154],{"class":51627},[84,55233,15901],{"class":477},[84,55235,55236,55238,55240,55242],{"class":86,"line":2945},[84,55237,55085],{"class":94},[84,55239,51764],{"class":477},[84,55241,55157],{"class":94},[84,55243,1634],{"class":477},[84,55245,55246,55249,55251,55253,55255],{"class":86,"line":2950},[84,55247,55248],{"class":94},"      font-size",[84,55250,51764],{"class":477},[84,55252,1374],{"class":94},[84,55254,51819],{"class":473},[84,55256,1634],{"class":477},[84,55258,55259,55261,55263,55265,55267],{"class":86,"line":8277},[84,55260,55164],{"class":94},[84,55262,51764],{"class":477},[84,55264,1173],{"class":94},[84,55266,51819],{"class":473},[84,55268,1634],{"class":477},[84,55270,55271,55274,55276,55278,55280],{"class":86,"line":8301},[84,55272,55273],{"class":94},"      top",[84,55275,51764],{"class":477},[84,55277,792],{"class":94},[84,55279,51819],{"class":473},[84,55281,1634],{"class":477},[84,55283,55284],{"class":86,"line":8306},[84,55285,2516],{"class":477},[84,55287,55288],{"class":86,"line":8312},[84,55289,2729],{"emptyLinePlaceholder":403},[84,55291,55292,55295],{"class":86,"line":8339},[84,55293,55294],{"class":51627},"    ul",[84,55296,15901],{"class":477},[84,55298,55299,55301,55303,55305],{"class":86,"line":8344},[84,55300,55085],{"class":94},[84,55302,51764],{"class":477},[84,55304,55157],{"class":94},[84,55306,1634],{"class":477},[84,55308,55309,55311,55313,55315,55317],{"class":86,"line":8350},[84,55310,55273],{"class":94},[84,55312,51764],{"class":477},[84,55314,1254],{"class":94},[84,55316,51819],{"class":473},[84,55318,1634],{"class":477},[84,55320,55321,55323,55325,55327,55329],{"class":86,"line":8362},[84,55322,55164],{"class":94},[84,55324,51764],{"class":477},[84,55326,1173],{"class":94},[84,55328,51819],{"class":473},[84,55330,1634],{"class":477},[84,55332,55333,55336,55338,55340],{"class":86,"line":8374},[84,55334,55335],{"class":94},"      display",[84,55337,51764],{"class":477},[84,55339,51804],{"class":94},[84,55341,1634],{"class":477},[84,55343,55344,55347,55349,55351],{"class":86,"line":8386},[84,55345,55346],{"class":94},"      justify-content",[84,55348,51764],{"class":477},[84,55350,51995],{"class":94},[84,55352,1634],{"class":477},[84,55354,55355,55357,55359,55361],{"class":86,"line":10045},[84,55356,55085],{"class":94},[84,55358,51764],{"class":477},[84,55360,55157],{"class":94},[84,55362,1634],{"class":477},[84,55364,55365,55367,55369,55371,55373],{"class":86,"line":10070},[84,55366,55097],{"class":94},[84,55368,51764],{"class":477},[84,55370,4321],{"class":94},[84,55372,51819],{"class":473},[84,55374,1634],{"class":477},[84,55376,55377,55379,55381,55383,55385],{"class":86,"line":10093},[84,55378,55111],{"class":94},[84,55380,51764],{"class":477},[84,55382,1173],{"class":94},[84,55384,51819],{"class":473},[84,55386,1634],{"class":477},[84,55388,55389],{"class":86,"line":10117},[84,55390,2516],{"class":477},[84,55392,55393],{"class":86,"line":10122},[84,55394,2729],{"emptyLinePlaceholder":403},[84,55396,55397,55399,55402],{"class":86,"line":10127},[84,55398,55294],{"class":51627},[84,55400,55401],{"class":51627}," li",[84,55403,15901],{"class":477},[84,55405,55406,55408,55410,55412,55414],{"class":86,"line":10132},[84,55407,55097],{"class":94},[84,55409,51764],{"class":477},[84,55411,1173],{"class":94},[84,55413,51819],{"class":473},[84,55415,1634],{"class":477},[84,55417,55418,55420,55422,55424,55426],{"class":86,"line":10141},[84,55419,55111],{"class":94},[84,55421,51764],{"class":477},[84,55423,1173],{"class":94},[84,55425,51819],{"class":473},[84,55427,1634],{"class":477},[84,55429,55430,55432,55434,55437,55439,55441,55443,55445,55447,55449,55451,55454],{"class":86,"line":10146},[84,55431,55210],{"class":94},[84,55433,51764],{"class":477},[84,55435,55436],{"class":94},"rgba",[84,55438,478],{"class":477},[84,55440,666],{"class":94},[84,55442,12764],{"class":477},[84,55444,666],{"class":94},[84,55446,12764],{"class":477},[84,55448,666],{"class":94},[84,55450,12764],{"class":477},[84,55452,55453],{"class":94},".4",[84,55455,3048],{"class":477},[84,55457,55458,55461,55463,55465,55467],{"class":86,"line":10152},[84,55459,55460],{"class":94},"      border-radius",[84,55462,51764],{"class":477},[84,55464,919],{"class":94},[84,55466,51819],{"class":473},[84,55468,1634],{"class":477},[84,55470,55471],{"class":86,"line":10173},[84,55472,2516],{"class":477},[84,55474,55475],{"class":86,"line":10179},[84,55476,2729],{"emptyLinePlaceholder":403},[84,55478,55479,55482],{"class":86,"line":10193},[84,55480,55481],{"class":90},"    .activate",[84,55483,15901],{"class":477},[84,55485,55486,55488,55490,55493],{"class":86,"line":10199},[84,55487,55210],{"class":94},[84,55489,51764],{"class":477},[84,55491,55492],{"class":94},"#f7f7f7",[84,55494,1634],{"class":477},[84,55496,55497],{"class":86,"line":10226},[84,55498,2516],{"class":477},[84,55500,55501,55503,55505],{"class":86,"line":10235},[84,55502,52744],{"class":477},[84,55504,389],{"class":51627},[84,55506,51634],{"class":477},[84,55508,55509,55511,55513],{"class":86,"line":10241},[84,55510,52112],{"class":477},[84,55512,51661],{"class":51627},[84,55514,51634],{"class":477},[84,55516,55517],{"class":86,"line":10249},[84,55518,2729],{"emptyLinePlaceholder":403},[84,55520,55521,55523,55525],{"class":86,"line":10254},[84,55522,1383],{"class":477},[84,55524,52127],{"class":51627},[84,55526,51634],{"class":477},[84,55528,55529,55531,55533,55535,55537,55539],{"class":86,"line":16933},[84,55530,52471],{"class":477},[84,55532,51938],{"class":51627},[84,55534,53813],{"class":90},[84,55536,523],{"class":477},[84,55538,53818],{"class":104},[84,55540,51634],{"class":477},[84,55542,55543,55545,55547,55549,55551,55554],{"class":86,"line":16939},[84,55544,51668],{"class":477},[84,55546,51938],{"class":51627},[84,55548,53813],{"class":90},[84,55550,523],{"class":477},[84,55552,55553],{"class":104},"\"slider-wrapper\"",[84,55555,51634],{"class":477},[84,55557,55558,55561,55563,55566,55568,55571,55574,55576,55578],{"class":86,"line":16962},[84,55559,55560],{"class":477},"      \u003C",[84,55562,64],{"class":51627},[84,55564,55565],{"class":90}," src",[84,55567,523],{"class":477},[84,55569,55570],{"class":104},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[84,55572,55573],{"class":90}," alt",[84,55575,523],{"class":477},[84,55577,7981],{"class":104},[84,55579,51634],{"class":477},[84,55581,55582,55584,55586],{"class":86,"line":16968},[84,55583,52103],{"class":477},[84,55585,51938],{"class":51627},[84,55587,51634],{"class":477},[84,55589,55590,55592,55594,55596,55598,55601],{"class":86,"line":16991},[84,55591,51668],{"class":477},[84,55593,51938],{"class":51627},[84,55595,53813],{"class":90},[84,55597,523],{"class":477},[84,55599,55600],{"class":104},"\"slider-footer\"",[84,55602,51634],{"class":477},[84,55604,55605,55607,55609,55612,55614],{"class":86,"line":17005},[84,55606,55560],{"class":477},[84,55608,35],{"class":51627},[84,55610,55611],{"class":477},">对人类来说会不会太超前了?\u003C\u002F",[84,55613,35],{"class":51627},[84,55615,51634],{"class":477},[84,55617,55618,55620,55622],{"class":86,"line":17025},[84,55619,55560],{"class":477},[84,55621,1480],{"class":51627},[84,55623,51634],{"class":477},[84,55625,55626,55629,55631,55633,55635,55638,55641,55643],{"class":86,"line":17031},[84,55627,55628],{"class":477},"        \u003C",[84,55630,31],{"class":51627},[84,55632,53813],{"class":90},[84,55634,523],{"class":477},[84,55636,55637],{"class":104},"\"activate\"",[84,55639,55640],{"class":477},">\u003C\u002F",[84,55642,31],{"class":51627},[84,55644,51634],{"class":477},[84,55646,55647,55649,55651,55653,55655],{"class":86,"line":17042},[84,55648,55628],{"class":477},[84,55650,31],{"class":51627},[84,55652,55640],{"class":477},[84,55654,31],{"class":51627},[84,55656,51634],{"class":477},[84,55658,55659,55661,55663,55665,55667],{"class":86,"line":17065},[84,55660,55628],{"class":477},[84,55662,31],{"class":51627},[84,55664,55640],{"class":477},[84,55666,31],{"class":51627},[84,55668,51634],{"class":477},[84,55670,55671,55673,55675,55677,55679],{"class":86,"line":17087},[84,55672,55628],{"class":477},[84,55674,31],{"class":51627},[84,55676,55640],{"class":477},[84,55678,31],{"class":51627},[84,55680,51634],{"class":477},[84,55682,55683,55685,55687,55689,55691],{"class":86,"line":17092},[84,55684,55628],{"class":477},[84,55686,31],{"class":51627},[84,55688,55640],{"class":477},[84,55690,31],{"class":51627},[84,55692,51634],{"class":477},[84,55694,55695,55697,55699,55701,55703],{"class":86,"line":17098},[84,55696,55628],{"class":477},[84,55698,31],{"class":51627},[84,55700,55640],{"class":477},[84,55702,31],{"class":51627},[84,55704,51634],{"class":477},[84,55706,55707,55709,55711,55713,55715],{"class":86,"line":17112},[84,55708,55628],{"class":477},[84,55710,31],{"class":51627},[84,55712,55640],{"class":477},[84,55714,31],{"class":51627},[84,55716,51634],{"class":477},[84,55718,55719,55721,55723,55725,55727],{"class":86,"line":17125},[84,55720,55628],{"class":477},[84,55722,31],{"class":51627},[84,55724,55640],{"class":477},[84,55726,31],{"class":51627},[84,55728,51634],{"class":477},[84,55730,55731,55734,55736],{"class":86,"line":17130},[84,55732,55733],{"class":477},"      \u003C\u002F",[84,55735,1480],{"class":51627},[84,55737,51634],{"class":477},[84,55739,55740,55742,55744],{"class":86,"line":17144},[84,55741,52103],{"class":477},[84,55743,51938],{"class":51627},[84,55745,51634],{"class":477},[84,55747,55748,55750,55752],{"class":86,"line":17149},[84,55749,52744],{"class":477},[84,55751,51938],{"class":51627},[84,55753,51634],{"class":477},[84,55755,55756,55758,55760],{"class":86,"line":17155},[84,55757,52471],{"class":477},[84,55759,52140],{"class":51627},[84,55761,51634],{"class":477},[84,55763,55764,55766,55769,55771],{"class":86,"line":17160},[84,55765,11550],{"class":473},[84,55767,55768],{"class":94}," arrImage",[84,55770,13893],{"class":473},[84,55772,55773],{"class":477}," [\n",[84,55775,55776,55779,55782,55785,55788,55791,55794],{"class":86,"line":17174},[84,55777,55778],{"class":477},"      { url: ",[84,55780,55781],{"class":104},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[84,55783,55784],{"class":477},", title: ",[84,55786,55787],{"class":104},"'对人类来说会不会太超前了?'",[84,55789,55790],{"class":477},", color: ",[84,55792,55793],{"class":104},"'rgba(100,67,68)'",[84,55795,55796],{"class":477}," },\n",[84,55798,55799,55801,55804,55806,55809,55811,55814],{"class":86,"line":17179},[84,55800,55778],{"class":477},[84,55802,55803],{"class":104},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[84,55805,55784],{"class":477},[84,55807,55808],{"class":104},"'开启剑与雪的黑暗传说!'",[84,55810,55790],{"class":477},[84,55812,55813],{"class":104},"'rgba(43,35,26)'",[84,55815,55796],{"class":477},[84,55817,55818,55820,55823,55825,55828,55830,55833],{"class":86,"line":17184},[84,55819,55778],{"class":477},[84,55821,55822],{"class":104},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[84,55824,55784],{"class":477},[84,55826,55827],{"class":104},"'真正的jo厨出现了!'",[84,55829,55790],{"class":477},[84,55831,55832],{"class":104},"'rgba(36,31,33)'",[84,55834,55796],{"class":477},[84,55836,55837,55839,55842,55844,55847,55849,55852],{"class":86,"line":17198},[84,55838,55778],{"class":477},[84,55840,55841],{"class":104},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[84,55843,55784],{"class":477},[84,55845,55846],{"class":104},"'李玉刚:让世界通过b站看到东方大国文化'",[84,55848,55790],{"class":477},[84,55850,55851],{"class":104},"'rgba(139,98,66)'",[84,55853,55796],{"class":477},[84,55855,55856,55858,55861,55863,55866,55868,55871],{"class":86,"line":17210},[84,55857,55778],{"class":477},[84,55859,55860],{"class":104},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[84,55862,55784],{"class":477},[84,55864,55865],{"class":104},"'快来分享你的寒假日常吧'",[84,55867,55790],{"class":477},[84,55869,55870],{"class":104},"'rgba(67,90,92)'",[84,55872,55796],{"class":477},[84,55874,55875,55877,55880,55882,55885,55887,55890],{"class":86,"line":17215},[84,55876,55778],{"class":477},[84,55878,55879],{"class":104},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[84,55881,55784],{"class":477},[84,55883,55884],{"class":104},"'哔哩哔哩小年YEAR'",[84,55886,55790],{"class":477},[84,55888,55889],{"class":104},"'rgba(166,131,143)'",[84,55891,55796],{"class":477},[84,55893,55894,55896,55899,55901,55904,55906,55909],{"class":86,"line":17228},[84,55895,55778],{"class":477},[84,55897,55898],{"class":104},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[84,55900,55784],{"class":477},[84,55902,55903],{"class":104},"'一站式解决你的电脑配置问题'",[84,55905,55790],{"class":477},[84,55907,55908],{"class":104},"'rgba(53,29,25)'",[84,55910,55796],{"class":477},[84,55912,55913,55915,55918,55920,55923,55925,55928],{"class":86,"line":17233},[84,55914,55778],{"class":477},[84,55916,55917],{"class":104},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[84,55919,55784],{"class":477},[84,55921,55922],{"class":104},"'谁不想和小猫咪贴贴呢?'",[84,55924,55790],{"class":477},[84,55926,55927],{"class":104},"'rgba(99,72,114)'",[84,55929,55930],{"class":477}," }\n",[84,55932,55933],{"class":86,"line":17238},[84,55934,53436],{"class":477},[84,55936,55937,55939,55942,55944,55946,55948,55950,55953],{"class":86,"line":17243},[84,55938,11550],{"class":473},[84,55940,55941],{"class":94}," img",[84,55943,13893],{"class":473},[84,55945,54722],{"class":477},[84,55947,54725],{"class":90},[84,55949,478],{"class":477},[84,55951,55952],{"class":104},"'.slider-wrapper img'",[84,55954,484],{"class":477},[84,55956,55957,55959,55961,55963,55965,55967,55969,55972],{"class":86,"line":17256},[84,55958,11550],{"class":473},[84,55960,7154],{"class":94},[84,55962,13893],{"class":473},[84,55964,54722],{"class":477},[84,55966,54725],{"class":90},[84,55968,478],{"class":477},[84,55970,55971],{"class":104},"'.slider-footer p'",[84,55973,484],{"class":477},[84,55975,55976,55978,55981,55983,55985,55987,55989,55992],{"class":86,"line":17261},[84,55977,11550],{"class":473},[84,55979,55980],{"class":94}," color",[84,55982,13893],{"class":473},[84,55984,54722],{"class":477},[84,55986,54725],{"class":90},[84,55988,478],{"class":477},[84,55990,55991],{"class":104},"'.slider-footer'",[84,55993,484],{"class":477},[84,55995,55996,55998,56001,56003,56005,56008,56010,56013],{"class":86,"line":32960},[84,55997,11550],{"class":473},[84,55999,56000],{"class":94}," lis",[84,56002,13893],{"class":473},[84,56004,54722],{"class":477},[84,56006,56007],{"class":90},"querySelectorAll",[84,56009,478],{"class":477},[84,56011,56012],{"class":104},"'.slider-footer ul li'",[84,56014,484],{"class":477},[84,56016,56017,56019,56021,56023],{"class":86,"line":32966},[84,56018,52546],{"class":473},[84,56020,9767],{"class":477},[84,56022,523],{"class":473},[84,56024,56025],{"class":94}," 1\n",[84,56027,56028,56030,56033,56035,56037,56039,56041],{"class":86,"line":32972},[84,56029,52546],{"class":473},[84,56031,56032],{"class":477}," timer ",[84,56034,523],{"class":473},[84,56036,54770],{"class":90},[84,56038,478],{"class":477},[84,56040,54775],{"class":473},[84,56042,54778],{"class":477},[84,56044,56045,56048,56050],{"class":86,"line":32978},[84,56046,56047],{"class":477},"      img.src ",[84,56049,523],{"class":473},[84,56051,56052],{"class":477}," arrImage[i].url\n",[84,56054,56055,56058,56060],{"class":86,"line":32984},[84,56056,56057],{"class":477},"      p.innerHTML ",[84,56059,523],{"class":473},[84,56061,56062],{"class":477}," arrImage[i].title\n",[84,56064,56065,56068,56070],{"class":86,"line":32995},[84,56066,56067],{"class":477},"      color.style.backgroundColor ",[84,56069,523],{"class":473},[84,56071,56072],{"class":477}," arrImage[i].color\n",[84,56074,56075],{"class":86,"line":33001},[84,56076,56077],{"class":328},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[84,56079,56080],{"class":86,"line":33021},[84,56081,56082],{"class":328},"      \u002F\u002F li.classList.add('activate')\n",[84,56084,56085],{"class":86,"line":33027},[84,56086,56087],{"class":328},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[84,56089,56090],{"class":86,"line":33038},[84,56091,56092],{"class":328},"      \u002F\u002F lis[i].classList.remove('activate')\n",[84,56094,56095,56098,56100,56102,56105,56108,56111,56113,56116],{"class":86,"line":33044},[84,56096,56097],{"class":477},"      document.",[84,56099,54725],{"class":90},[84,56101,478],{"class":477},[84,56103,56104],{"class":104},"'.activate'",[84,56106,56107],{"class":477},")?.classList.",[84,56109,56110],{"class":90},"toggle",[84,56112,478],{"class":477},[84,56114,56115],{"class":104},"'activate'",[84,56117,484],{"class":477},[84,56119,56120,56123,56125,56127,56129],{"class":86,"line":33050},[84,56121,56122],{"class":477},"      lis[i].classList.",[84,56124,5663],{"class":90},[84,56126,478],{"class":477},[84,56128,56115],{"class":104},[84,56130,484],{"class":477},[84,56132,56133],{"class":86,"line":33056},[84,56134,2729],{"emptyLinePlaceholder":403},[84,56136,56137,56140,56142,56144,56146,56148,56150,56152,56155],{"class":86,"line":33062},[84,56138,56139],{"class":477},"      i ",[84,56141,523],{"class":473},[84,56143,54809],{"class":477},[84,56145,954],{"class":473},[84,56147,25446],{"class":94},[84,56149,14043],{"class":477},[84,56151,801],{"class":473},[84,56153,56154],{"class":477}," arrImage.",[84,56156,56157],{"class":94},"length\n",[84,56159,56160],{"class":86,"line":33068},[84,56161,2729],{"emptyLinePlaceholder":403},[84,56163,56164,56166,56168],{"class":86,"line":33074},[84,56165,54861],{"class":477},[84,56167,6739],{"class":94},[84,56169,484],{"class":477},[84,56171,56172,56174,56176],{"class":86,"line":33080},[84,56173,52744],{"class":477},[84,56175,52140],{"class":51627},[84,56177,51634],{"class":477},[84,56179,56180,56182,56184],{"class":86,"line":33100},[84,56181,52112],{"class":477},[84,56183,52127],{"class":51627},[84,56185,51634],{"class":477},[84,56187,56188],{"class":86,"line":33106},[84,56189,2729],{"emptyLinePlaceholder":403},[84,56191,56192,56194,56196],{"class":86,"line":33122},[84,56193,52112],{"class":477},[84,56195,50962],{"class":51627},[84,56197,51634],{"class":477},[35,56199,56200],{},[64,56201],{"alt":66,"src":56202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[35,56204,56205],{},"?.就是短路保护,确保输出正常进行",[35,56207,56208],{},"不要忘记取余%,有时候可以用",[35,56210,56211],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[28,56213,56214],{"start":98},[31,56215,56216],{},"法2",[75,56218,56220],{"className":50960,"code":56219,"language":50962,"meta":66,"style":66},"\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",[81,56221,56222,56232,56246,56250,56258,56272,56292,56304,56312,56318,56328,56338,56342,56346,56352,56362,56366,56370,56376,56386,56398,56410,56424,56428,56432,56438,56448,56458,56468,56480,56492,56502,56506,56510,56518,56528,56540,56552,56564,56568,56572,56578,56588,56600,56612,56622,56632,56642,56654,56666,56670,56674,56682,56694,56706,56732,56744,56748,56752,56758,56768,56772,56780,56788,56792,56800,56814,56828,56848,56856,56870,56882,56890,56908,56920,56932,56944,56956,56968,56980,56992,57000,57008,57016,57024,57035,57051,57067,57083,57099,57115,57131,57147,57163,57167,57172,57190,57208,57218,57223,57228,57239,57245,57260,57269,57273,57278,57287,57292,57301,57306,57311,57316,57339,57369,57373,57381,57385,57393,57401,57405],{"__ignoreMap":66},[84,56223,56224,56226,56228,56230],{"class":86,"line":87},[84,56225,51624],{"class":477},[84,56227,51628],{"class":51627},[84,56229,51631],{"class":90},[84,56231,51634],{"class":477},[84,56233,56234,56236,56238,56240,56242,56244],{"class":86,"line":98},[84,56235,1383],{"class":477},[84,56237,50962],{"class":51627},[84,56239,51643],{"class":90},[84,56241,523],{"class":477},[84,56243,51648],{"class":104},[84,56245,51634],{"class":477},[84,56247,56248],{"class":86,"line":70},[84,56249,2729],{"emptyLinePlaceholder":403},[84,56251,56252,56254,56256],{"class":86,"line":120},[84,56253,1383],{"class":477},[84,56255,51661],{"class":51627},[84,56257,51634],{"class":477},[84,56259,56260,56262,56264,56266,56268,56270],{"class":86,"line":131},[84,56261,52471],{"class":477},[84,56263,51671],{"class":51627},[84,56265,51674],{"class":90},[84,56267,523],{"class":477},[84,56269,51679],{"class":104},[84,56271,51634],{"class":477},[84,56273,56274,56276,56278,56280,56282,56284,56286,56288,56290],{"class":86,"line":145},[84,56275,52471],{"class":477},[84,56277,51671],{"class":51627},[84,56279,15249],{"class":90},[84,56281,523],{"class":477},[84,56283,51718],{"class":104},[84,56285,51698],{"class":90},[84,56287,523],{"class":477},[84,56289,51725],{"class":104},[84,56291,51634],{"class":477},[84,56293,56294,56296,56298,56300,56302],{"class":86,"line":156},[84,56295,52471],{"class":477},[84,56297,51734],{"class":51627},[84,56299,51737],{"class":477},[84,56301,51734],{"class":51627},[84,56303,51634],{"class":477},[84,56305,56306,56308,56310],{"class":86,"line":164},[84,56307,52471],{"class":477},[84,56309,389],{"class":51627},[84,56311,51634],{"class":477},[84,56313,56314,56316],{"class":86,"line":175},[84,56315,6732],{"class":51627},[84,56317,15901],{"class":477},[84,56319,56320,56322,56324,56326],{"class":86,"line":185},[84,56321,55021],{"class":94},[84,56323,51764],{"class":477},[84,56325,666],{"class":94},[84,56327,1634],{"class":477},[84,56329,56330,56332,56334,56336],{"class":86,"line":195},[84,56331,55032],{"class":94},[84,56333,51764],{"class":477},[84,56335,666],{"class":94},[84,56337,1634],{"class":477},[84,56339,56340],{"class":86,"line":206},[84,56341,2516],{"class":477},[84,56343,56344],{"class":86,"line":217},[84,56345,2729],{"emptyLinePlaceholder":403},[84,56347,56348,56350],{"class":86,"line":227},[84,56349,55051],{"class":51627},[84,56351,15901],{"class":477},[84,56353,56354,56356,56358,56360],{"class":86,"line":238},[84,56355,55058],{"class":94},[84,56357,51764],{"class":477},[84,56359,55063],{"class":94},[84,56361,1634],{"class":477},[84,56363,56364],{"class":86,"line":249},[84,56365,2516],{"class":477},[84,56367,56368],{"class":86,"line":262},[84,56369,2729],{"emptyLinePlaceholder":403},[84,56371,56372,56374],{"class":86,"line":273},[84,56373,55078],{"class":90},[84,56375,15901],{"class":477},[84,56377,56378,56380,56382,56384],{"class":86,"line":283},[84,56379,55085],{"class":94},[84,56381,51764],{"class":477},[84,56383,55090],{"class":94},[84,56385,1634],{"class":477},[84,56387,56388,56390,56392,56394,56396],{"class":86,"line":294},[84,56389,55097],{"class":94},[84,56391,51764],{"class":477},[84,56393,55102],{"class":94},[84,56395,51819],{"class":473},[84,56397,1634],{"class":477},[84,56399,56400,56402,56404,56406,56408],{"class":86,"line":2028},[84,56401,55111],{"class":94},[84,56403,51764],{"class":477},[84,56405,1879],{"class":94},[84,56407,51819],{"class":473},[84,56409,1634],{"class":477},[84,56411,56412,56414,56416,56418,56420,56422],{"class":86,"line":2057},[84,56413,55032],{"class":94},[84,56415,51764],{"class":477},[84,56417,784],{"class":94},[84,56419,51819],{"class":473},[84,56421,51883],{"class":94},[84,56423,1634],{"class":477},[84,56425,56426],{"class":86,"line":2062},[84,56427,2516],{"class":477},[84,56429,56430],{"class":86,"line":2079},[84,56431,2729],{"emptyLinePlaceholder":403},[84,56433,56434,56436],{"class":86,"line":2084},[84,56435,55146],{"class":90},[84,56437,15901],{"class":477},[84,56439,56440,56442,56444,56446],{"class":86,"line":2089},[84,56441,55085],{"class":94},[84,56443,51764],{"class":477},[84,56445,55157],{"class":94},[84,56447,1634],{"class":477},[84,56449,56450,56452,56454,56456],{"class":86,"line":2094},[84,56451,55164],{"class":94},[84,56453,51764],{"class":477},[84,56455,666],{"class":94},[84,56457,1634],{"class":477},[84,56459,56460,56462,56464,56466],{"class":86,"line":2108},[84,56461,55175],{"class":94},[84,56463,51764],{"class":477},[84,56465,666],{"class":94},[84,56467,1634],{"class":477},[84,56469,56470,56472,56474,56476,56478],{"class":86,"line":2113},[84,56471,55097],{"class":94},[84,56473,51764],{"class":477},[84,56475,784],{"class":94},[84,56477,801],{"class":473},[84,56479,1634],{"class":477},[84,56481,56482,56484,56486,56488,56490],{"class":86,"line":2906},[84,56483,55111],{"class":94},[84,56485,51764],{"class":477},[84,56487,1048],{"class":94},[84,56489,801],{"class":473},[84,56491,1634],{"class":477},[84,56493,56494,56496,56498,56500],{"class":86,"line":2920},[84,56495,55210],{"class":94},[84,56497,51764],{"class":477},[84,56499,55215],{"class":94},[84,56501,1634],{"class":477},[84,56503,56504],{"class":86,"line":2928},[84,56505,2516],{"class":477},[84,56507,56508],{"class":86,"line":2933},[84,56509,2729],{"emptyLinePlaceholder":403},[84,56511,56512,56514,56516],{"class":86,"line":2939},[84,56513,55146],{"class":90},[84,56515,7154],{"class":51627},[84,56517,15901],{"class":477},[84,56519,56520,56522,56524,56526],{"class":86,"line":2945},[84,56521,55085],{"class":94},[84,56523,51764],{"class":477},[84,56525,55157],{"class":94},[84,56527,1634],{"class":477},[84,56529,56530,56532,56534,56536,56538],{"class":86,"line":2950},[84,56531,55248],{"class":94},[84,56533,51764],{"class":477},[84,56535,1374],{"class":94},[84,56537,51819],{"class":473},[84,56539,1634],{"class":477},[84,56541,56542,56544,56546,56548,56550],{"class":86,"line":8277},[84,56543,55164],{"class":94},[84,56545,51764],{"class":477},[84,56547,1173],{"class":94},[84,56549,51819],{"class":473},[84,56551,1634],{"class":477},[84,56553,56554,56556,56558,56560,56562],{"class":86,"line":8301},[84,56555,55273],{"class":94},[84,56557,51764],{"class":477},[84,56559,792],{"class":94},[84,56561,51819],{"class":473},[84,56563,1634],{"class":477},[84,56565,56566],{"class":86,"line":8306},[84,56567,2516],{"class":477},[84,56569,56570],{"class":86,"line":8312},[84,56571,2729],{"emptyLinePlaceholder":403},[84,56573,56574,56576],{"class":86,"line":8339},[84,56575,55294],{"class":51627},[84,56577,15901],{"class":477},[84,56579,56580,56582,56584,56586],{"class":86,"line":8344},[84,56581,55085],{"class":94},[84,56583,51764],{"class":477},[84,56585,55157],{"class":94},[84,56587,1634],{"class":477},[84,56589,56590,56592,56594,56596,56598],{"class":86,"line":8350},[84,56591,55273],{"class":94},[84,56593,51764],{"class":477},[84,56595,1254],{"class":94},[84,56597,51819],{"class":473},[84,56599,1634],{"class":477},[84,56601,56602,56604,56606,56608,56610],{"class":86,"line":8362},[84,56603,55164],{"class":94},[84,56605,51764],{"class":477},[84,56607,1173],{"class":94},[84,56609,51819],{"class":473},[84,56611,1634],{"class":477},[84,56613,56614,56616,56618,56620],{"class":86,"line":8374},[84,56615,55335],{"class":94},[84,56617,51764],{"class":477},[84,56619,51804],{"class":94},[84,56621,1634],{"class":477},[84,56623,56624,56626,56628,56630],{"class":86,"line":8386},[84,56625,55346],{"class":94},[84,56627,51764],{"class":477},[84,56629,51995],{"class":94},[84,56631,1634],{"class":477},[84,56633,56634,56636,56638,56640],{"class":86,"line":10045},[84,56635,55085],{"class":94},[84,56637,51764],{"class":477},[84,56639,55157],{"class":94},[84,56641,1634],{"class":477},[84,56643,56644,56646,56648,56650,56652],{"class":86,"line":10070},[84,56645,55097],{"class":94},[84,56647,51764],{"class":477},[84,56649,4321],{"class":94},[84,56651,51819],{"class":473},[84,56653,1634],{"class":477},[84,56655,56656,56658,56660,56662,56664],{"class":86,"line":10093},[84,56657,55111],{"class":94},[84,56659,51764],{"class":477},[84,56661,1173],{"class":94},[84,56663,51819],{"class":473},[84,56665,1634],{"class":477},[84,56667,56668],{"class":86,"line":10117},[84,56669,2516],{"class":477},[84,56671,56672],{"class":86,"line":10122},[84,56673,2729],{"emptyLinePlaceholder":403},[84,56675,56676,56678,56680],{"class":86,"line":10127},[84,56677,55294],{"class":51627},[84,56679,55401],{"class":51627},[84,56681,15901],{"class":477},[84,56683,56684,56686,56688,56690,56692],{"class":86,"line":10132},[84,56685,55097],{"class":94},[84,56687,51764],{"class":477},[84,56689,1173],{"class":94},[84,56691,51819],{"class":473},[84,56693,1634],{"class":477},[84,56695,56696,56698,56700,56702,56704],{"class":86,"line":10141},[84,56697,55111],{"class":94},[84,56699,51764],{"class":477},[84,56701,1173],{"class":94},[84,56703,51819],{"class":473},[84,56705,1634],{"class":477},[84,56707,56708,56710,56712,56714,56716,56718,56720,56722,56724,56726,56728,56730],{"class":86,"line":10146},[84,56709,55210],{"class":94},[84,56711,51764],{"class":477},[84,56713,55436],{"class":94},[84,56715,478],{"class":477},[84,56717,666],{"class":94},[84,56719,12764],{"class":477},[84,56721,666],{"class":94},[84,56723,12764],{"class":477},[84,56725,666],{"class":94},[84,56727,12764],{"class":477},[84,56729,55453],{"class":94},[84,56731,3048],{"class":477},[84,56733,56734,56736,56738,56740,56742],{"class":86,"line":10152},[84,56735,55460],{"class":94},[84,56737,51764],{"class":477},[84,56739,919],{"class":94},[84,56741,51819],{"class":473},[84,56743,1634],{"class":477},[84,56745,56746],{"class":86,"line":10173},[84,56747,2516],{"class":477},[84,56749,56750],{"class":86,"line":10179},[84,56751,2729],{"emptyLinePlaceholder":403},[84,56753,56754,56756],{"class":86,"line":10193},[84,56755,55481],{"class":90},[84,56757,15901],{"class":477},[84,56759,56760,56762,56764,56766],{"class":86,"line":10199},[84,56761,55210],{"class":94},[84,56763,51764],{"class":477},[84,56765,55492],{"class":94},[84,56767,1634],{"class":477},[84,56769,56770],{"class":86,"line":10226},[84,56771,2516],{"class":477},[84,56773,56774,56776,56778],{"class":86,"line":10235},[84,56775,52744],{"class":477},[84,56777,389],{"class":51627},[84,56779,51634],{"class":477},[84,56781,56782,56784,56786],{"class":86,"line":10241},[84,56783,52112],{"class":477},[84,56785,51661],{"class":51627},[84,56787,51634],{"class":477},[84,56789,56790],{"class":86,"line":10249},[84,56791,2729],{"emptyLinePlaceholder":403},[84,56793,56794,56796,56798],{"class":86,"line":10254},[84,56795,1383],{"class":477},[84,56797,52127],{"class":51627},[84,56799,51634],{"class":477},[84,56801,56802,56804,56806,56808,56810,56812],{"class":86,"line":16933},[84,56803,52471],{"class":477},[84,56805,51938],{"class":51627},[84,56807,53813],{"class":90},[84,56809,523],{"class":477},[84,56811,53818],{"class":104},[84,56813,51634],{"class":477},[84,56815,56816,56818,56820,56822,56824,56826],{"class":86,"line":16939},[84,56817,51668],{"class":477},[84,56819,51938],{"class":51627},[84,56821,53813],{"class":90},[84,56823,523],{"class":477},[84,56825,55553],{"class":104},[84,56827,51634],{"class":477},[84,56829,56830,56832,56834,56836,56838,56840,56842,56844,56846],{"class":86,"line":16962},[84,56831,55560],{"class":477},[84,56833,64],{"class":51627},[84,56835,55565],{"class":90},[84,56837,523],{"class":477},[84,56839,55570],{"class":104},[84,56841,55573],{"class":90},[84,56843,523],{"class":477},[84,56845,7981],{"class":104},[84,56847,51634],{"class":477},[84,56849,56850,56852,56854],{"class":86,"line":16968},[84,56851,52103],{"class":477},[84,56853,51938],{"class":51627},[84,56855,51634],{"class":477},[84,56857,56858,56860,56862,56864,56866,56868],{"class":86,"line":16991},[84,56859,51668],{"class":477},[84,56861,51938],{"class":51627},[84,56863,53813],{"class":90},[84,56865,523],{"class":477},[84,56867,55600],{"class":104},[84,56869,51634],{"class":477},[84,56871,56872,56874,56876,56878,56880],{"class":86,"line":17005},[84,56873,55560],{"class":477},[84,56875,35],{"class":51627},[84,56877,55611],{"class":477},[84,56879,35],{"class":51627},[84,56881,51634],{"class":477},[84,56883,56884,56886,56888],{"class":86,"line":17025},[84,56885,55560],{"class":477},[84,56887,1480],{"class":51627},[84,56889,51634],{"class":477},[84,56891,56892,56894,56896,56898,56900,56902,56904,56906],{"class":86,"line":17031},[84,56893,55628],{"class":477},[84,56895,31],{"class":51627},[84,56897,53813],{"class":90},[84,56899,523],{"class":477},[84,56901,55637],{"class":104},[84,56903,55640],{"class":477},[84,56905,31],{"class":51627},[84,56907,51634],{"class":477},[84,56909,56910,56912,56914,56916,56918],{"class":86,"line":17042},[84,56911,55628],{"class":477},[84,56913,31],{"class":51627},[84,56915,55640],{"class":477},[84,56917,31],{"class":51627},[84,56919,51634],{"class":477},[84,56921,56922,56924,56926,56928,56930],{"class":86,"line":17065},[84,56923,55628],{"class":477},[84,56925,31],{"class":51627},[84,56927,55640],{"class":477},[84,56929,31],{"class":51627},[84,56931,51634],{"class":477},[84,56933,56934,56936,56938,56940,56942],{"class":86,"line":17087},[84,56935,55628],{"class":477},[84,56937,31],{"class":51627},[84,56939,55640],{"class":477},[84,56941,31],{"class":51627},[84,56943,51634],{"class":477},[84,56945,56946,56948,56950,56952,56954],{"class":86,"line":17092},[84,56947,55628],{"class":477},[84,56949,31],{"class":51627},[84,56951,55640],{"class":477},[84,56953,31],{"class":51627},[84,56955,51634],{"class":477},[84,56957,56958,56960,56962,56964,56966],{"class":86,"line":17098},[84,56959,55628],{"class":477},[84,56961,31],{"class":51627},[84,56963,55640],{"class":477},[84,56965,31],{"class":51627},[84,56967,51634],{"class":477},[84,56969,56970,56972,56974,56976,56978],{"class":86,"line":17112},[84,56971,55628],{"class":477},[84,56973,31],{"class":51627},[84,56975,55640],{"class":477},[84,56977,31],{"class":51627},[84,56979,51634],{"class":477},[84,56981,56982,56984,56986,56988,56990],{"class":86,"line":17125},[84,56983,55628],{"class":477},[84,56985,31],{"class":51627},[84,56987,55640],{"class":477},[84,56989,31],{"class":51627},[84,56991,51634],{"class":477},[84,56993,56994,56996,56998],{"class":86,"line":17130},[84,56995,55733],{"class":477},[84,56997,1480],{"class":51627},[84,56999,51634],{"class":477},[84,57001,57002,57004,57006],{"class":86,"line":17144},[84,57003,52103],{"class":477},[84,57005,51938],{"class":51627},[84,57007,51634],{"class":477},[84,57009,57010,57012,57014],{"class":86,"line":17149},[84,57011,52744],{"class":477},[84,57013,51938],{"class":51627},[84,57015,51634],{"class":477},[84,57017,57018,57020,57022],{"class":86,"line":17155},[84,57019,52471],{"class":477},[84,57021,52140],{"class":51627},[84,57023,51634],{"class":477},[84,57025,57026,57028,57031,57033],{"class":86,"line":17160},[84,57027,11550],{"class":473},[84,57029,57030],{"class":94}," sliderData",[84,57032,13893],{"class":473},[84,57034,55773],{"class":477},[84,57036,57037,57039,57041,57043,57045,57047,57049],{"class":86,"line":17174},[84,57038,55778],{"class":477},[84,57040,55781],{"class":104},[84,57042,55784],{"class":477},[84,57044,55787],{"class":104},[84,57046,55790],{"class":477},[84,57048,55793],{"class":104},[84,57050,55796],{"class":477},[84,57052,57053,57055,57057,57059,57061,57063,57065],{"class":86,"line":17179},[84,57054,55778],{"class":477},[84,57056,55803],{"class":104},[84,57058,55784],{"class":477},[84,57060,55808],{"class":104},[84,57062,55790],{"class":477},[84,57064,55813],{"class":104},[84,57066,55796],{"class":477},[84,57068,57069,57071,57073,57075,57077,57079,57081],{"class":86,"line":17184},[84,57070,55778],{"class":477},[84,57072,55822],{"class":104},[84,57074,55784],{"class":477},[84,57076,55827],{"class":104},[84,57078,55790],{"class":477},[84,57080,55832],{"class":104},[84,57082,55796],{"class":477},[84,57084,57085,57087,57089,57091,57093,57095,57097],{"class":86,"line":17198},[84,57086,55778],{"class":477},[84,57088,55841],{"class":104},[84,57090,55784],{"class":477},[84,57092,55846],{"class":104},[84,57094,55790],{"class":477},[84,57096,55851],{"class":104},[84,57098,55796],{"class":477},[84,57100,57101,57103,57105,57107,57109,57111,57113],{"class":86,"line":17210},[84,57102,55778],{"class":477},[84,57104,55860],{"class":104},[84,57106,55784],{"class":477},[84,57108,55865],{"class":104},[84,57110,55790],{"class":477},[84,57112,55870],{"class":104},[84,57114,55796],{"class":477},[84,57116,57117,57119,57121,57123,57125,57127,57129],{"class":86,"line":17215},[84,57118,55778],{"class":477},[84,57120,55879],{"class":104},[84,57122,55784],{"class":477},[84,57124,55884],{"class":104},[84,57126,55790],{"class":477},[84,57128,55889],{"class":104},[84,57130,55796],{"class":477},[84,57132,57133,57135,57137,57139,57141,57143,57145],{"class":86,"line":17228},[84,57134,55778],{"class":477},[84,57136,55898],{"class":104},[84,57138,55784],{"class":477},[84,57140,55903],{"class":104},[84,57142,55790],{"class":477},[84,57144,55908],{"class":104},[84,57146,55796],{"class":477},[84,57148,57149,57151,57153,57155,57157,57159,57161],{"class":86,"line":17233},[84,57150,55778],{"class":477},[84,57152,55917],{"class":104},[84,57154,55784],{"class":477},[84,57156,55922],{"class":104},[84,57158,55790],{"class":477},[84,57160,55927],{"class":104},[84,57162,55930],{"class":477},[84,57164,57165],{"class":86,"line":17238},[84,57166,53436],{"class":477},[84,57168,57169],{"class":86,"line":17243},[84,57170,57171],{"class":328},"    \u002F\u002F 1.获取元素\n",[84,57173,57174,57176,57178,57180,57182,57184,57186,57188],{"class":86,"line":17256},[84,57175,11550],{"class":473},[84,57177,55941],{"class":94},[84,57179,13893],{"class":473},[84,57181,54722],{"class":477},[84,57183,54725],{"class":90},[84,57185,478],{"class":477},[84,57187,55952],{"class":104},[84,57189,484],{"class":477},[84,57191,57192,57194,57196,57198,57200,57202,57204,57206],{"class":86,"line":17261},[84,57193,11550],{"class":473},[84,57195,7154],{"class":94},[84,57197,13893],{"class":473},[84,57199,54722],{"class":477},[84,57201,54725],{"class":90},[84,57203,478],{"class":477},[84,57205,55971],{"class":104},[84,57207,484],{"class":477},[84,57209,57210,57212,57214,57216],{"class":86,"line":32960},[84,57211,52546],{"class":473},[84,57213,9767],{"class":477},[84,57215,523],{"class":473},[84,57217,47660],{"class":94},[84,57219,57220],{"class":86,"line":32966},[84,57221,57222],{"class":328},"    \u002F\u002F 2.开启定时器\n",[84,57224,57225],{"class":86,"line":32972},[84,57226,57227],{"class":328},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[84,57229,57230,57233,57235,57237],{"class":86,"line":32978},[84,57231,57232],{"class":90},"    setInterval",[84,57234,478],{"class":477},[84,57236,54775],{"class":473},[84,57238,54778],{"class":477},[84,57240,57241,57243],{"class":86,"line":32984},[84,57242,54783],{"class":477},[84,57244,3031],{"class":473},[84,57246,57247,57249,57251,57253,57256,57258],{"class":86,"line":32995},[84,57248,54806],{"class":473},[84,57250,54809],{"class":477},[84,57252,2040],{"class":473},[84,57254,57255],{"class":477}," sliderData.",[84,57257,52295],{"class":94},[84,57259,12771],{"class":477},[84,57261,57262,57265,57267],{"class":86,"line":33001},[84,57263,57264],{"class":477},"        i ",[84,57266,523],{"class":473},[84,57268,47660],{"class":94},[84,57270,57271],{"class":86,"line":33021},[84,57272,52725],{"class":477},[84,57274,57275],{"class":86,"line":33027},[84,57276,57277],{"class":328},"      \u002F\u002F 更换图片路径\n",[84,57279,57280,57282,57284],{"class":86,"line":33038},[84,57281,56047],{"class":477},[84,57283,523],{"class":473},[84,57285,57286],{"class":477}," sliderData[i].url\n",[84,57288,57289],{"class":86,"line":33044},[84,57290,57291],{"class":328},"      \u002F\u002F 把文字写到p里面\n",[84,57293,57294,57296,57298],{"class":86,"line":33050},[84,57295,56057],{"class":477},[84,57297,523],{"class":473},[84,57299,57300],{"class":477}," sliderData[i].title\n",[84,57302,57303],{"class":86,"line":33056},[84,57304,57305],{"class":328},"      \u002F\u002F 小圆点\n",[84,57307,57308],{"class":86,"line":33062},[84,57309,57310],{"class":328},"      \u002F\u002F 先删除以前的active\n",[84,57312,57313],{"class":86,"line":33068},[84,57314,57315],{"class":328},"      \u002F\u002F 只让当前li添加active\n",[84,57317,57318,57320,57322,57324,57327,57330,57333,57335,57337],{"class":86,"line":33074},[84,57319,56097],{"class":477},[84,57321,54725],{"class":90},[84,57323,478],{"class":477},[84,57325,57326],{"class":104},"'.slider-footer .activate'",[84,57328,57329],{"class":477},").classList.",[84,57331,57332],{"class":90},"remove",[84,57334,478],{"class":477},[84,57336,56115],{"class":104},[84,57338,484],{"class":477},[84,57340,57341,57343,57345,57347,57350,57352,57354,57356,57359,57361,57363,57365,57367],{"class":86,"line":33080},[84,57342,56097],{"class":477},[84,57344,54725],{"class":90},[84,57346,478],{"class":477},[84,57348,57349],{"class":104},"`.slider-footer ul li:nth-child(${",[84,57351,914],{"class":477},[84,57353,45893],{"class":473},[84,57355,25446],{"class":94},[84,57357,57358],{"class":104},"})`",[84,57360,57329],{"class":477},[84,57362,5663],{"class":90},[84,57364,478],{"class":477},[84,57366,56115],{"class":104},[84,57368,484],{"class":477},[84,57370,57371],{"class":86,"line":33100},[84,57372,2729],{"emptyLinePlaceholder":403},[84,57374,57375,57377,57379],{"class":86,"line":33106},[84,57376,54861],{"class":477},[84,57378,6739],{"class":94},[84,57380,484],{"class":477},[84,57382,57383],{"class":86,"line":33122},[84,57384,2729],{"emptyLinePlaceholder":403},[84,57386,57387,57389,57391],{"class":86,"line":33128},[84,57388,52744],{"class":477},[84,57390,52140],{"class":51627},[84,57392,51634],{"class":477},[84,57394,57395,57397,57399],{"class":86,"line":33142},[84,57396,52112],{"class":477},[84,57398,52127],{"class":51627},[84,57400,51634],{"class":477},[84,57402,57403],{"class":86,"line":33148},[84,57404,2729],{"emptyLinePlaceholder":403},[84,57406,57407,57409,57411],{"class":86,"line":33163},[84,57408,52112],{"class":477},[84,57410,50962],{"class":51627},[84,57412,51634],{"class":477},[23,57414,57416],{"id":57415},"_317-重要知识点","3.1.7 重要知识点",[35,57418,57419,57420],{},"浏览器在渲染文本时， ",[624,57421,57422],{},"没有空格或换行符就没有“断行点”",[35,57424,57425],{},[64,57426],{"alt":66,"src":57427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[35,57429,57430],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[35,57432,57433],{},[64,57434],{"alt":66,"src":57435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[35,57437,57438],{},[64,57439],{"alt":66,"src":57440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57442,57444],{"id":57443},"_32-dom事件基础","3.2 DOM事件基础",[23,57446,57448],{"id":57447},"_321-事件监听","3.2.1 事件监听",[35,57450,57451],{},[64,57452],{"alt":66,"src":57453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[35,57455,57456],{},"事件监听有响应的发生",[35,57458,57459],{},[64,57460],{"alt":66,"src":57461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[35,57463,57464],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[35,57466,57467],{},"对于有名函数,要执行的函数名后边不要加()",[23,57469,57471],{"id":57470},"_322-随机点名案例","3.2.2 随机点名案例",[75,57473,57475],{"className":50960,"code":57474,"language":50962,"meta":66,"style":66},"\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",[81,57476,57477,57487,57501,57505,57513,57527,57547,57559,57567,57573,57583,57593,57597,57601,57608,57619,57623,57627,57633,57645,57659,57669,57681,57694,57698,57702,57709,57713,57726,57738,57750,57754,57758,57762,57769,57779,57783,57787,57796,57808,57820,57835,57839,57847,57855,57859,57867,57880,57894,57907,57927,57935,57950,57970,57990,57998,58002,58010,58015,58051,58071,58076,58095,58100,58111,58116,58127,58132,58151,58166,58171,58197,58207,58216,58221,58237,58242,58247,58252,58267,58271,58275,58280,58299,58316,58324,58329,58344,58348,58352,58360,58368,58372],{"__ignoreMap":66},[84,57478,57479,57481,57483,57485],{"class":86,"line":87},[84,57480,51624],{"class":477},[84,57482,51628],{"class":51627},[84,57484,51631],{"class":90},[84,57486,51634],{"class":477},[84,57488,57489,57491,57493,57495,57497,57499],{"class":86,"line":98},[84,57490,1383],{"class":477},[84,57492,50962],{"class":51627},[84,57494,51643],{"class":90},[84,57496,523],{"class":477},[84,57498,51648],{"class":104},[84,57500,51634],{"class":477},[84,57502,57503],{"class":86,"line":70},[84,57504,2729],{"emptyLinePlaceholder":403},[84,57506,57507,57509,57511],{"class":86,"line":120},[84,57508,1383],{"class":477},[84,57510,51661],{"class":51627},[84,57512,51634],{"class":477},[84,57514,57515,57517,57519,57521,57523,57525],{"class":86,"line":131},[84,57516,52471],{"class":477},[84,57518,51671],{"class":51627},[84,57520,51674],{"class":90},[84,57522,523],{"class":477},[84,57524,51679],{"class":104},[84,57526,51634],{"class":477},[84,57528,57529,57531,57533,57535,57537,57539,57541,57543,57545],{"class":86,"line":145},[84,57530,52471],{"class":477},[84,57532,51671],{"class":51627},[84,57534,15249],{"class":90},[84,57536,523],{"class":477},[84,57538,51718],{"class":104},[84,57540,51698],{"class":90},[84,57542,523],{"class":477},[84,57544,51725],{"class":104},[84,57546,51634],{"class":477},[84,57548,57549,57551,57553,57555,57557],{"class":86,"line":156},[84,57550,52471],{"class":477},[84,57552,51734],{"class":51627},[84,57554,51737],{"class":477},[84,57556,51734],{"class":51627},[84,57558,51634],{"class":477},[84,57560,57561,57563,57565],{"class":86,"line":164},[84,57562,52471],{"class":477},[84,57564,389],{"class":51627},[84,57566,51634],{"class":477},[84,57568,57569,57571],{"class":86,"line":175},[84,57570,6732],{"class":51627},[84,57572,15901],{"class":477},[84,57574,57575,57577,57579,57581],{"class":86,"line":185},[84,57576,55032],{"class":94},[84,57578,51764],{"class":477},[84,57580,666],{"class":94},[84,57582,1634],{"class":477},[84,57584,57585,57587,57589,57591],{"class":86,"line":195},[84,57586,55021],{"class":94},[84,57588,51764],{"class":477},[84,57590,666],{"class":94},[84,57592,1634],{"class":477},[84,57594,57595],{"class":86,"line":206},[84,57596,2516],{"class":477},[84,57598,57599],{"class":86,"line":217},[84,57600,2729],{"emptyLinePlaceholder":403},[84,57602,57603,57606],{"class":86,"line":227},[84,57604,57605],{"class":51627},"    h2",[84,57607,15901],{"class":477},[84,57609,57610,57613,57615,57617],{"class":86,"line":238},[84,57611,57612],{"class":94},"      text-align",[84,57614,51764],{"class":477},[84,57616,51919],{"class":94},[84,57618,1634],{"class":477},[84,57620,57621],{"class":86,"line":249},[84,57622,2516],{"class":477},[84,57624,57625],{"class":86,"line":262},[84,57626,2729],{"emptyLinePlaceholder":403},[84,57628,57629,57631],{"class":86,"line":273},[84,57630,55078],{"class":90},[84,57632,15901],{"class":477},[84,57634,57635,57637,57639,57641,57643],{"class":86,"line":283},[84,57636,55097],{"class":94},[84,57638,51764],{"class":477},[84,57640,1879],{"class":94},[84,57642,51819],{"class":473},[84,57644,1634],{"class":477},[84,57646,57647,57649,57651,57653,57655,57657],{"class":86,"line":294},[84,57648,55032],{"class":94},[84,57650,51764],{"class":477},[84,57652,1129],{"class":94},[84,57654,51819],{"class":473},[84,57656,51883],{"class":94},[84,57658,1634],{"class":477},[84,57660,57661,57663,57665,57667],{"class":86,"line":2028},[84,57662,55335],{"class":94},[84,57664,51764],{"class":477},[84,57666,51804],{"class":94},[84,57668,1634],{"class":477},[84,57670,57671,57673,57675,57677,57679],{"class":86,"line":2057},[84,57672,55248],{"class":94},[84,57674,51764],{"class":477},[84,57676,1298],{"class":94},[84,57678,51819],{"class":473},[84,57680,1634],{"class":477},[84,57682,57683,57686,57688,57690,57692],{"class":86,"line":2062},[84,57684,57685],{"class":94},"      line-height",[84,57687,51764],{"class":477},[84,57689,874],{"class":94},[84,57691,51819],{"class":473},[84,57693,1634],{"class":477},[84,57695,57696],{"class":86,"line":2079},[84,57697,2516],{"class":477},[84,57699,57700],{"class":86,"line":2084},[84,57701,2729],{"emptyLinePlaceholder":403},[84,57703,57704,57707],{"class":86,"line":2089},[84,57705,57706],{"class":90},"    .qs",[84,57708,15901],{"class":477},[84,57710,57711],{"class":86,"line":2094},[84,57712,2729],{"emptyLinePlaceholder":403},[84,57714,57715,57717,57719,57722,57724],{"class":86,"line":2108},[84,57716,55097],{"class":94},[84,57718,51764],{"class":477},[84,57720,57721],{"class":94},"450",[84,57723,51819],{"class":473},[84,57725,1634],{"class":477},[84,57727,57728,57730,57732,57734,57736],{"class":86,"line":2113},[84,57729,55111],{"class":94},[84,57731,51764],{"class":477},[84,57733,874],{"class":94},[84,57735,51819],{"class":473},[84,57737,1634],{"class":477},[84,57739,57740,57743,57745,57748],{"class":86,"line":2906},[84,57741,57742],{"class":94},"      color",[84,57744,51764],{"class":477},[84,57746,57747],{"class":94},"red",[84,57749,1634],{"class":477},[84,57751,57752],{"class":86,"line":2920},[84,57753,2729],{"emptyLinePlaceholder":403},[84,57755,57756],{"class":86,"line":2928},[84,57757,2516],{"class":477},[84,57759,57760],{"class":86,"line":2933},[84,57761,2729],{"emptyLinePlaceholder":403},[84,57763,57764,57767],{"class":86,"line":2939},[84,57765,57766],{"class":90},"    .btns",[84,57768,15901],{"class":477},[84,57770,57771,57773,57775,57777],{"class":86,"line":2945},[84,57772,57612],{"class":94},[84,57774,51764],{"class":477},[84,57776,51919],{"class":94},[84,57778,1634],{"class":477},[84,57780,57781],{"class":86,"line":2950},[84,57782,2516],{"class":477},[84,57784,57785],{"class":86,"line":8277},[84,57786,2729],{"emptyLinePlaceholder":403},[84,57788,57789,57791,57794],{"class":86,"line":8301},[84,57790,57766],{"class":90},[84,57792,57793],{"class":51627}," button",[84,57795,15901],{"class":477},[84,57797,57798,57800,57802,57804,57806],{"class":86,"line":8306},[84,57799,55097],{"class":94},[84,57801,51764],{"class":477},[84,57803,1290],{"class":94},[84,57805,51819],{"class":473},[84,57807,1634],{"class":477},[84,57809,57810,57812,57814,57816,57818],{"class":86,"line":8312},[84,57811,55111],{"class":94},[84,57813,51764],{"class":477},[84,57815,747],{"class":94},[84,57817,51819],{"class":473},[84,57819,1634],{"class":477},[84,57821,57822,57824,57826,57828,57831,57833],{"class":86,"line":8339},[84,57823,55032],{"class":94},[84,57825,51764],{"class":477},[84,57827,666],{"class":94},[84,57829,57830],{"class":94}," 50",[84,57832,51819],{"class":473},[84,57834,1634],{"class":477},[84,57836,57837],{"class":86,"line":8344},[84,57838,2516],{"class":477},[84,57840,57841,57843,57845],{"class":86,"line":8350},[84,57842,52744],{"class":477},[84,57844,389],{"class":51627},[84,57846,51634],{"class":477},[84,57848,57849,57851,57853],{"class":86,"line":8362},[84,57850,52112],{"class":477},[84,57852,51661],{"class":51627},[84,57854,51634],{"class":477},[84,57856,57857],{"class":86,"line":8374},[84,57858,2729],{"emptyLinePlaceholder":403},[84,57860,57861,57863,57865],{"class":86,"line":8386},[84,57862,1383],{"class":477},[84,57864,52127],{"class":51627},[84,57866,51634],{"class":477},[84,57868,57869,57871,57873,57876,57878],{"class":86,"line":10045},[84,57870,52471],{"class":477},[84,57872,14],{"class":51627},[84,57874,57875],{"class":477},">随机点名\u003C\u002F",[84,57877,14],{"class":51627},[84,57879,51634],{"class":477},[84,57881,57882,57884,57886,57888,57890,57892],{"class":86,"line":10070},[84,57883,52471],{"class":477},[84,57885,51938],{"class":51627},[84,57887,53813],{"class":90},[84,57889,523],{"class":477},[84,57891,53818],{"class":104},[84,57893,51634],{"class":477},[84,57895,57896,57898,57900,57903,57905],{"class":86,"line":10093},[84,57897,51668],{"class":477},[84,57899,84],{"class":51627},[84,57901,57902],{"class":477},">名字是：\u003C\u002F",[84,57904,84],{"class":51627},[84,57906,51634],{"class":477},[84,57908,57909,57911,57913,57915,57917,57920,57923,57925],{"class":86,"line":10117},[84,57910,51668],{"class":477},[84,57912,51938],{"class":51627},[84,57914,53813],{"class":90},[84,57916,523],{"class":477},[84,57918,57919],{"class":104},"\"qs\"",[84,57921,57922],{"class":477},">这里显示姓名\u003C\u002F",[84,57924,51938],{"class":51627},[84,57926,51634],{"class":477},[84,57928,57929,57931,57933],{"class":86,"line":10122},[84,57930,52744],{"class":477},[84,57932,51938],{"class":51627},[84,57934,51634],{"class":477},[84,57936,57937,57939,57941,57943,57945,57948],{"class":86,"line":10127},[84,57938,52471],{"class":477},[84,57940,51938],{"class":51627},[84,57942,53813],{"class":90},[84,57944,523],{"class":477},[84,57946,57947],{"class":104},"\"btns\"",[84,57949,51634],{"class":477},[84,57951,57952,57954,57956,57958,57960,57963,57966,57968],{"class":86,"line":10132},[84,57953,51668],{"class":477},[84,57955,54213],{"class":51627},[84,57957,53813],{"class":90},[84,57959,523],{"class":477},[84,57961,57962],{"class":104},"\"start\"",[84,57964,57965],{"class":477},">开始\u003C\u002F",[84,57967,54213],{"class":51627},[84,57969,51634],{"class":477},[84,57971,57972,57974,57976,57978,57980,57983,57986,57988],{"class":86,"line":10141},[84,57973,51668],{"class":477},[84,57975,54213],{"class":51627},[84,57977,53813],{"class":90},[84,57979,523],{"class":477},[84,57981,57982],{"class":104},"\"end\"",[84,57984,57985],{"class":477},">结束\u003C\u002F",[84,57987,54213],{"class":51627},[84,57989,51634],{"class":477},[84,57991,57992,57994,57996],{"class":86,"line":10146},[84,57993,52744],{"class":477},[84,57995,51938],{"class":51627},[84,57997,51634],{"class":477},[84,57999,58000],{"class":86,"line":10152},[84,58001,2729],{"emptyLinePlaceholder":403},[84,58003,58004,58006,58008],{"class":86,"line":10173},[84,58005,52471],{"class":477},[84,58007,52140],{"class":51627},[84,58009,51634],{"class":477},[84,58011,58012],{"class":86,"line":10179},[84,58013,58014],{"class":328},"    \u002F\u002F 数据数组\n",[84,58016,58017,58019,58022,58024,58026,58029,58031,58034,58036,58039,58041,58044,58046,58049],{"class":86,"line":10193},[84,58018,11550],{"class":473},[84,58020,58021],{"class":94}," arr",[84,58023,13893],{"class":473},[84,58025,52553],{"class":477},[84,58027,58028],{"class":104},"'马超'",[84,58030,12764],{"class":477},[84,58032,58033],{"class":104},"'黄忠'",[84,58035,12764],{"class":477},[84,58037,58038],{"class":104},"'赵云'",[84,58040,12764],{"class":477},[84,58042,58043],{"class":104},"'关羽'",[84,58045,12764],{"class":477},[84,58047,58048],{"class":104},"'张飞'",[84,58050,33573],{"class":477},[84,58052,58053,58055,58058,58060,58062,58064,58066,58069],{"class":86,"line":10199},[84,58054,11550],{"class":473},[84,58056,58057],{"class":94}," qs",[84,58059,13893],{"class":473},[84,58061,54722],{"class":477},[84,58063,54725],{"class":90},[84,58065,478],{"class":477},[84,58067,58068],{"class":104},"'.qs'",[84,58070,484],{"class":477},[84,58072,58073],{"class":86,"line":10226},[84,58074,58075],{"class":328},"    \u002F\u002F 1.业务1.开始按钮模块\n",[84,58077,58078,58080,58082,58084,58086,58088,58090,58093],{"class":86,"line":10235},[84,58079,11550],{"class":473},[84,58081,4513],{"class":94},[84,58083,13893],{"class":473},[84,58085,54722],{"class":477},[84,58087,54725],{"class":90},[84,58089,478],{"class":477},[84,58091,58092],{"class":104},"'.start'",[84,58094,484],{"class":477},[84,58096,58097],{"class":86,"line":10241},[84,58098,58099],{"class":328},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[84,58101,58102,58104,58107,58109],{"class":86,"line":10249},[84,58103,52546],{"class":473},[84,58105,58106],{"class":477}," timerId ",[84,58108,523],{"class":473},[84,58110,47660],{"class":94},[84,58112,58113],{"class":86,"line":10254},[84,58114,58115],{"class":328},"    \u002F\u002F 随机号要全局变量\n",[84,58117,58118,58120,58123,58125],{"class":86,"line":16933},[84,58119,52546],{"class":473},[84,58121,58122],{"class":477}," random ",[84,58124,523],{"class":473},[84,58126,47660],{"class":94},[84,58128,58129],{"class":86,"line":16939},[84,58130,58131],{"class":328},"    \u002F\u002F 1.1 添加点击事件\n",[84,58133,58134,58137,58140,58142,58145,58147,58149],{"class":86,"line":16962},[84,58135,58136],{"class":477},"    start.",[84,58138,58139],{"class":90},"addEventListener",[84,58141,478],{"class":477},[84,58143,58144],{"class":104},"'click'",[84,58146,12764],{"class":477},[84,58148,54775],{"class":473},[84,58150,54778],{"class":477},[84,58152,58153,58156,58158,58160,58162,58164],{"class":86,"line":16968},[84,58154,58155],{"class":477},"      timerId ",[84,58157,523],{"class":473},[84,58159,54770],{"class":90},[84,58161,478],{"class":477},[84,58163,54775],{"class":473},[84,58165,54778],{"class":477},[84,58167,58168],{"class":86,"line":16991},[84,58169,58170],{"class":328},"        \u002F\u002F 随机数\n",[84,58172,58173,58176,58178,58181,58184,58187,58189,58191,58193,58195],{"class":86,"line":17005},[84,58174,58175],{"class":477},"        random ",[84,58177,523],{"class":473},[84,58179,58180],{"class":90}," parseInt",[84,58182,58183],{"class":477},"(Math.",[84,58185,58186],{"class":90},"random",[84,58188,13379],{"class":477},[84,58190,928],{"class":473},[84,58192,52292],{"class":477},[84,58194,52295],{"class":94},[84,58196,484],{"class":477},[84,58198,58199,58202,58204],{"class":86,"line":17025},[84,58200,58201],{"class":477},"        qs.innerHTML ",[84,58203,523],{"class":473},[84,58205,58206],{"class":477}," arr[random]\n",[84,58208,58209,58212,58214],{"class":86,"line":17031},[84,58210,58211],{"class":477},"      }, ",[84,58213,747],{"class":94},[84,58215,484],{"class":477},[84,58217,58218],{"class":86,"line":17042},[84,58219,58220],{"class":328},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[84,58222,58223,58225,58228,58230,58233,58235],{"class":86,"line":17065},[84,58224,54806],{"class":473},[84,58226,58227],{"class":477}," (arr.",[84,58229,52295],{"class":94},[84,58231,58232],{"class":473}," ===",[84,58234,25446],{"class":94},[84,58236,12771],{"class":477},[84,58238,58239],{"class":86,"line":17087},[84,58240,58241],{"class":328},"        \u002F\u002F start.disabled = true\n",[84,58243,58244],{"class":86,"line":17092},[84,58245,58246],{"class":328},"        \u002F\u002F end.disabled = true\n",[84,58248,58249],{"class":86,"line":17098},[84,58250,58251],{"class":328},"        \u002F\u002F 可以合起来写\n",[84,58253,58254,58257,58259,58262,58264],{"class":86,"line":17112},[84,58255,58256],{"class":477},"        start.disabled ",[84,58258,523],{"class":473},[84,58260,58261],{"class":477}," end.disabled ",[84,58263,523],{"class":473},[84,58265,58266],{"class":94}," true\n",[84,58268,58269],{"class":86,"line":17125},[84,58270,52725],{"class":477},[84,58272,58273],{"class":86,"line":17130},[84,58274,33788],{"class":477},[84,58276,58277],{"class":86,"line":17144},[84,58278,58279],{"class":328},"    \u002F\u002F 1.2 关闭按钮模块\n",[84,58281,58282,58284,58286,58288,58290,58292,58294,58297],{"class":86,"line":17149},[84,58283,11550],{"class":473},[84,58285,4529],{"class":94},[84,58287,13893],{"class":473},[84,58289,54722],{"class":477},[84,58291,54725],{"class":90},[84,58293,478],{"class":477},[84,58295,58296],{"class":104},"'.end'",[84,58298,484],{"class":477},[84,58300,58301,58304,58306,58308,58310,58312,58314],{"class":86,"line":17155},[84,58302,58303],{"class":477},"    end.",[84,58305,58139],{"class":90},[84,58307,478],{"class":477},[84,58309,58144],{"class":104},[84,58311,12764],{"class":477},[84,58313,54775],{"class":473},[84,58315,54778],{"class":477},[84,58317,58318,58321],{"class":86,"line":17160},[84,58319,58320],{"class":90},"      clearInterval",[84,58322,58323],{"class":477},"(timerId)\n",[84,58325,58326],{"class":86,"line":17174},[84,58327,58328],{"class":328},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[84,58330,58331,58334,58337,58340,58342],{"class":86,"line":17179},[84,58332,58333],{"class":477},"      arr.",[84,58335,58336],{"class":90},"splice",[84,58338,58339],{"class":477},"(random, ",[84,58341,692],{"class":94},[84,58343,484],{"class":477},[84,58345,58346],{"class":86,"line":17184},[84,58347,33788],{"class":477},[84,58349,58350],{"class":86,"line":17198},[84,58351,2729],{"emptyLinePlaceholder":403},[84,58353,58354,58356,58358],{"class":86,"line":17210},[84,58355,52744],{"class":477},[84,58357,52140],{"class":51627},[84,58359,51634],{"class":477},[84,58361,58362,58364,58366],{"class":86,"line":17215},[84,58363,52112],{"class":477},[84,58365,52127],{"class":51627},[84,58367,51634],{"class":477},[84,58369,58370],{"class":86,"line":17228},[84,58371,2729],{"emptyLinePlaceholder":403},[84,58373,58374,58376,58378],{"class":86,"line":17233},[84,58375,52112],{"class":477},[84,58377,50962],{"class":51627},[84,58379,51634],{"class":477},[35,58381,58382],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[23,58384,58386],{"id":58385},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[75,58388,58390],{"className":50960,"code":58389,"language":50962,"meta":66,"style":66},"\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",[81,58391,58392,58402,58416,58420,58428,58442,58462,58474,58482,58486,58494,58506,58514,58533,58550,58566,58576,58580,58588,58596,58600],{"__ignoreMap":66},[84,58393,58394,58396,58398,58400],{"class":86,"line":87},[84,58395,51624],{"class":477},[84,58397,51628],{"class":51627},[84,58399,51631],{"class":90},[84,58401,51634],{"class":477},[84,58403,58404,58406,58408,58410,58412,58414],{"class":86,"line":98},[84,58405,1383],{"class":477},[84,58407,50962],{"class":51627},[84,58409,51643],{"class":90},[84,58411,523],{"class":477},[84,58413,51648],{"class":104},[84,58415,51634],{"class":477},[84,58417,58418],{"class":86,"line":70},[84,58419,2729],{"emptyLinePlaceholder":403},[84,58421,58422,58424,58426],{"class":86,"line":120},[84,58423,1383],{"class":477},[84,58425,51661],{"class":51627},[84,58427,51634],{"class":477},[84,58429,58430,58432,58434,58436,58438,58440],{"class":86,"line":131},[84,58431,52471],{"class":477},[84,58433,51671],{"class":51627},[84,58435,51674],{"class":90},[84,58437,523],{"class":477},[84,58439,51679],{"class":104},[84,58441,51634],{"class":477},[84,58443,58444,58446,58448,58450,58452,58454,58456,58458,58460],{"class":86,"line":145},[84,58445,52471],{"class":477},[84,58447,51671],{"class":51627},[84,58449,15249],{"class":90},[84,58451,523],{"class":477},[84,58453,51718],{"class":104},[84,58455,51698],{"class":90},[84,58457,523],{"class":477},[84,58459,51725],{"class":104},[84,58461,51634],{"class":477},[84,58463,58464,58466,58468,58470,58472],{"class":86,"line":156},[84,58465,52471],{"class":477},[84,58467,51734],{"class":51627},[84,58469,51737],{"class":477},[84,58471,51734],{"class":51627},[84,58473,51634],{"class":477},[84,58475,58476,58478,58480],{"class":86,"line":164},[84,58477,52112],{"class":477},[84,58479,51661],{"class":51627},[84,58481,51634],{"class":477},[84,58483,58484],{"class":86,"line":175},[84,58485,2729],{"emptyLinePlaceholder":403},[84,58487,58488,58490,58492],{"class":86,"line":185},[84,58489,1383],{"class":477},[84,58491,52127],{"class":51627},[84,58493,51634],{"class":477},[84,58495,58496,58498,58500,58502,58504],{"class":86,"line":195},[84,58497,52471],{"class":477},[84,58499,54213],{"class":51627},[84,58501,54219],{"class":477},[84,58503,54213],{"class":51627},[84,58505,51634],{"class":477},[84,58507,58508,58510,58512],{"class":86,"line":206},[84,58509,52471],{"class":477},[84,58511,52140],{"class":51627},[84,58513,51634],{"class":477},[84,58515,58516,58518,58520,58522,58524,58526,58528,58531],{"class":86,"line":217},[84,58517,11550],{"class":473},[84,58519,54717],{"class":94},[84,58521,13893],{"class":473},[84,58523,54722],{"class":477},[84,58525,54725],{"class":90},[84,58527,478],{"class":477},[84,58529,58530],{"class":104},"'button'",[84,58532,484],{"class":477},[84,58534,58535,58538,58540,58542,58544,58546,58548],{"class":86,"line":227},[84,58536,58537],{"class":477},"    btn.",[84,58539,58139],{"class":90},[84,58541,478],{"class":477},[84,58543,58144],{"class":104},[84,58545,12764],{"class":477},[84,58547,54775],{"class":473},[84,58549,54778],{"class":477},[84,58551,58552,58555,58557,58559,58562,58564],{"class":86,"line":238},[84,58553,58554],{"class":473},"      const",[84,58556,2569],{"class":94},[84,58558,13893],{"class":473},[84,58560,58561],{"class":477}," Math.",[84,58563,58186],{"class":90},[84,58565,2305],{"class":477},[84,58567,58568,58571,58574],{"class":86,"line":249},[84,58569,58570],{"class":477},"      console.",[84,58572,58573],{"class":90},"log",[84,58575,491],{"class":477},[84,58577,58578],{"class":86,"line":262},[84,58579,33788],{"class":477},[84,58581,58582,58584,58586],{"class":86,"line":273},[84,58583,52744],{"class":477},[84,58585,52140],{"class":51627},[84,58587,51634],{"class":477},[84,58589,58590,58592,58594],{"class":86,"line":283},[84,58591,52112],{"class":477},[84,58593,52127],{"class":51627},[84,58595,51634],{"class":477},[84,58597,58598],{"class":86,"line":294},[84,58599,2729],{"emptyLinePlaceholder":403},[84,58601,58602,58604,58606],{"class":86,"line":2028},[84,58603,52112],{"class":477},[84,58605,50962],{"class":51627},[84,58607,51634],{"class":477},[35,58609,58610],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[35,58612,58613],{},"常量不可以重新赋值",[35,58615,58616],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[75,58618,58620],{"className":50960,"code":58619,"language":50962,"meta":66,"style":66},"\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",[81,58621,58622,58632,58646,58650,58658,58672,58692,58704,58712,58716,58724,58736,58744,58755,58773,58789,58803,58811,58815,58823,58831,58835],{"__ignoreMap":66},[84,58623,58624,58626,58628,58630],{"class":86,"line":87},[84,58625,51624],{"class":477},[84,58627,51628],{"class":51627},[84,58629,51631],{"class":90},[84,58631,51634],{"class":477},[84,58633,58634,58636,58638,58640,58642,58644],{"class":86,"line":98},[84,58635,1383],{"class":477},[84,58637,50962],{"class":51627},[84,58639,51643],{"class":90},[84,58641,523],{"class":477},[84,58643,51648],{"class":104},[84,58645,51634],{"class":477},[84,58647,58648],{"class":86,"line":70},[84,58649,2729],{"emptyLinePlaceholder":403},[84,58651,58652,58654,58656],{"class":86,"line":120},[84,58653,1383],{"class":477},[84,58655,51661],{"class":51627},[84,58657,51634],{"class":477},[84,58659,58660,58662,58664,58666,58668,58670],{"class":86,"line":131},[84,58661,52471],{"class":477},[84,58663,51671],{"class":51627},[84,58665,51674],{"class":90},[84,58667,523],{"class":477},[84,58669,51679],{"class":104},[84,58671,51634],{"class":477},[84,58673,58674,58676,58678,58680,58682,58684,58686,58688,58690],{"class":86,"line":145},[84,58675,52471],{"class":477},[84,58677,51671],{"class":51627},[84,58679,15249],{"class":90},[84,58681,523],{"class":477},[84,58683,51718],{"class":104},[84,58685,51698],{"class":90},[84,58687,523],{"class":477},[84,58689,51725],{"class":104},[84,58691,51634],{"class":477},[84,58693,58694,58696,58698,58700,58702],{"class":86,"line":156},[84,58695,52471],{"class":477},[84,58697,51734],{"class":51627},[84,58699,51737],{"class":477},[84,58701,51734],{"class":51627},[84,58703,51634],{"class":477},[84,58705,58706,58708,58710],{"class":86,"line":164},[84,58707,52112],{"class":477},[84,58709,51661],{"class":51627},[84,58711,51634],{"class":477},[84,58713,58714],{"class":86,"line":175},[84,58715,2729],{"emptyLinePlaceholder":403},[84,58717,58718,58720,58722],{"class":86,"line":185},[84,58719,1383],{"class":477},[84,58721,52127],{"class":51627},[84,58723,51634],{"class":477},[84,58725,58726,58728,58730,58732,58734],{"class":86,"line":195},[84,58727,52471],{"class":477},[84,58729,54213],{"class":51627},[84,58731,54219],{"class":477},[84,58733,54213],{"class":51627},[84,58735,51634],{"class":477},[84,58737,58738,58740,58742],{"class":86,"line":206},[84,58739,52471],{"class":477},[84,58741,52140],{"class":51627},[84,58743,51634],{"class":477},[84,58745,58746,58748,58750,58752],{"class":86,"line":217},[84,58747,11550],{"class":473},[84,58749,2569],{"class":94},[84,58751,13893],{"class":473},[84,58753,58754],{"class":94}," 10\n",[84,58756,58757,58759,58761,58763,58765,58767,58769,58771],{"class":86,"line":227},[84,58758,11550],{"class":473},[84,58760,54717],{"class":94},[84,58762,13893],{"class":473},[84,58764,54722],{"class":477},[84,58766,54725],{"class":90},[84,58768,478],{"class":477},[84,58770,58530],{"class":104},[84,58772,484],{"class":477},[84,58774,58775,58777,58779,58781,58783,58785,58787],{"class":86,"line":238},[84,58776,58537],{"class":477},[84,58778,58139],{"class":90},[84,58780,478],{"class":477},[84,58782,58144],{"class":104},[84,58784,12764],{"class":477},[84,58786,54775],{"class":473},[84,58788,54778],{"class":477},[84,58790,58791,58793,58795,58797,58799,58801],{"class":86,"line":249},[84,58792,58554],{"class":473},[84,58794,2569],{"class":94},[84,58796,13893],{"class":473},[84,58798,58561],{"class":477},[84,58800,58186],{"class":90},[84,58802,2305],{"class":477},[84,58804,58805,58807,58809],{"class":86,"line":262},[84,58806,58570],{"class":477},[84,58808,58573],{"class":90},[84,58810,491],{"class":477},[84,58812,58813],{"class":86,"line":273},[84,58814,33788],{"class":477},[84,58816,58817,58819,58821],{"class":86,"line":283},[84,58818,52744],{"class":477},[84,58820,52140],{"class":51627},[84,58822,51634],{"class":477},[84,58824,58825,58827,58829],{"class":86,"line":294},[84,58826,52112],{"class":477},[84,58828,52127],{"class":51627},[84,58830,51634],{"class":477},[84,58832,58833],{"class":86,"line":2028},[84,58834,2729],{"emptyLinePlaceholder":403},[84,58836,58837,58839,58841],{"class":86,"line":2057},[84,58838,52112],{"class":477},[84,58840,50962],{"class":51627},[84,58842,51634],{"class":477},[35,58844,58845],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[75,58847,58849],{"className":50960,"code":58848,"language":50962,"meta":66,"style":66},"\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",[81,58850,58851,58861,58875,58879,58887,58901,58921,58933,58941,58945,58953,58965,58973,58983,59001,59017,59030,59038,59042,59050,59058,59062],{"__ignoreMap":66},[84,58852,58853,58855,58857,58859],{"class":86,"line":87},[84,58854,51624],{"class":477},[84,58856,51628],{"class":51627},[84,58858,51631],{"class":90},[84,58860,51634],{"class":477},[84,58862,58863,58865,58867,58869,58871,58873],{"class":86,"line":98},[84,58864,1383],{"class":477},[84,58866,50962],{"class":51627},[84,58868,51643],{"class":90},[84,58870,523],{"class":477},[84,58872,51648],{"class":104},[84,58874,51634],{"class":477},[84,58876,58877],{"class":86,"line":70},[84,58878,2729],{"emptyLinePlaceholder":403},[84,58880,58881,58883,58885],{"class":86,"line":120},[84,58882,1383],{"class":477},[84,58884,51661],{"class":51627},[84,58886,51634],{"class":477},[84,58888,58889,58891,58893,58895,58897,58899],{"class":86,"line":131},[84,58890,52471],{"class":477},[84,58892,51671],{"class":51627},[84,58894,51674],{"class":90},[84,58896,523],{"class":477},[84,58898,51679],{"class":104},[84,58900,51634],{"class":477},[84,58902,58903,58905,58907,58909,58911,58913,58915,58917,58919],{"class":86,"line":145},[84,58904,52471],{"class":477},[84,58906,51671],{"class":51627},[84,58908,15249],{"class":90},[84,58910,523],{"class":477},[84,58912,51718],{"class":104},[84,58914,51698],{"class":90},[84,58916,523],{"class":477},[84,58918,51725],{"class":104},[84,58920,51634],{"class":477},[84,58922,58923,58925,58927,58929,58931],{"class":86,"line":156},[84,58924,52471],{"class":477},[84,58926,51734],{"class":51627},[84,58928,51737],{"class":477},[84,58930,51734],{"class":51627},[84,58932,51634],{"class":477},[84,58934,58935,58937,58939],{"class":86,"line":164},[84,58936,52112],{"class":477},[84,58938,51661],{"class":51627},[84,58940,51634],{"class":477},[84,58942,58943],{"class":86,"line":175},[84,58944,2729],{"emptyLinePlaceholder":403},[84,58946,58947,58949,58951],{"class":86,"line":185},[84,58948,1383],{"class":477},[84,58950,52127],{"class":51627},[84,58952,51634],{"class":477},[84,58954,58955,58957,58959,58961,58963],{"class":86,"line":195},[84,58956,52471],{"class":477},[84,58958,54213],{"class":51627},[84,58960,54219],{"class":477},[84,58962,54213],{"class":51627},[84,58964,51634],{"class":477},[84,58966,58967,58969,58971],{"class":86,"line":206},[84,58968,52471],{"class":477},[84,58970,52140],{"class":51627},[84,58972,51634],{"class":477},[84,58974,58975,58977,58979,58981],{"class":86,"line":217},[84,58976,11550],{"class":473},[84,58978,2569],{"class":94},[84,58980,13893],{"class":473},[84,58982,58754],{"class":94},[84,58984,58985,58987,58989,58991,58993,58995,58997,58999],{"class":86,"line":227},[84,58986,11550],{"class":473},[84,58988,54717],{"class":94},[84,58990,13893],{"class":473},[84,58992,54722],{"class":477},[84,58994,54725],{"class":90},[84,58996,478],{"class":477},[84,58998,58530],{"class":104},[84,59000,484],{"class":477},[84,59002,59003,59005,59007,59009,59011,59013,59015],{"class":86,"line":238},[84,59004,58537],{"class":477},[84,59006,58139],{"class":90},[84,59008,478],{"class":477},[84,59010,58144],{"class":104},[84,59012,12764],{"class":477},[84,59014,54775],{"class":473},[84,59016,54778],{"class":477},[84,59018,59019,59022,59024,59026,59028],{"class":86,"line":249},[84,59020,59021],{"class":477},"      num ",[84,59023,523],{"class":473},[84,59025,58561],{"class":477},[84,59027,58186],{"class":90},[84,59029,2305],{"class":477},[84,59031,59032,59034,59036],{"class":86,"line":262},[84,59033,58570],{"class":477},[84,59035,58573],{"class":90},[84,59037,491],{"class":477},[84,59039,59040],{"class":86,"line":273},[84,59041,33788],{"class":477},[84,59043,59044,59046,59048],{"class":86,"line":283},[84,59045,52744],{"class":477},[84,59047,52140],{"class":51627},[84,59049,51634],{"class":477},[84,59051,59052,59054,59056],{"class":86,"line":294},[84,59053,52112],{"class":477},[84,59055,52127],{"class":51627},[84,59057,51634],{"class":477},[84,59059,59060],{"class":86,"line":2028},[84,59061,2729],{"emptyLinePlaceholder":403},[84,59063,59064,59066,59068],{"class":86,"line":2057},[84,59065,52112],{"class":477},[84,59067,50962],{"class":51627},[84,59069,51634],{"class":477},[35,59071,59072],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[23,59074,59076],{"id":59075},"_324-事件监听版本","3.2.4 事件监听版本",[35,59078,59079],{},[64,59080],{"alt":66,"src":59081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[35,59083,59084],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[35,59086,59087],{},"这种方式会覆盖前边的事件监听:",[75,59089,59091],{"className":50960,"code":59090,"language":50962,"meta":66,"style":66},"\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",[81,59092,59093,59103,59117,59121,59129,59143,59163,59175,59183,59187,59195,59207,59215,59233,59247,59258,59262,59274,59284,59288,59296,59304,59308],{"__ignoreMap":66},[84,59094,59095,59097,59099,59101],{"class":86,"line":87},[84,59096,51624],{"class":477},[84,59098,51628],{"class":51627},[84,59100,51631],{"class":90},[84,59102,51634],{"class":477},[84,59104,59105,59107,59109,59111,59113,59115],{"class":86,"line":98},[84,59106,1383],{"class":477},[84,59108,50962],{"class":51627},[84,59110,51643],{"class":90},[84,59112,523],{"class":477},[84,59114,51648],{"class":104},[84,59116,51634],{"class":477},[84,59118,59119],{"class":86,"line":70},[84,59120,2729],{"emptyLinePlaceholder":403},[84,59122,59123,59125,59127],{"class":86,"line":120},[84,59124,1383],{"class":477},[84,59126,51661],{"class":51627},[84,59128,51634],{"class":477},[84,59130,59131,59133,59135,59137,59139,59141],{"class":86,"line":131},[84,59132,52471],{"class":477},[84,59134,51671],{"class":51627},[84,59136,51674],{"class":90},[84,59138,523],{"class":477},[84,59140,51679],{"class":104},[84,59142,51634],{"class":477},[84,59144,59145,59147,59149,59151,59153,59155,59157,59159,59161],{"class":86,"line":145},[84,59146,52471],{"class":477},[84,59148,51671],{"class":51627},[84,59150,15249],{"class":90},[84,59152,523],{"class":477},[84,59154,51718],{"class":104},[84,59156,51698],{"class":90},[84,59158,523],{"class":477},[84,59160,51725],{"class":104},[84,59162,51634],{"class":477},[84,59164,59165,59167,59169,59171,59173],{"class":86,"line":156},[84,59166,52471],{"class":477},[84,59168,51734],{"class":51627},[84,59170,51737],{"class":477},[84,59172,51734],{"class":51627},[84,59174,51634],{"class":477},[84,59176,59177,59179,59181],{"class":86,"line":164},[84,59178,52112],{"class":477},[84,59180,51661],{"class":51627},[84,59182,51634],{"class":477},[84,59184,59185],{"class":86,"line":175},[84,59186,2729],{"emptyLinePlaceholder":403},[84,59188,59189,59191,59193],{"class":86,"line":185},[84,59190,1383],{"class":477},[84,59192,52127],{"class":51627},[84,59194,51634],{"class":477},[84,59196,59197,59199,59201,59203,59205],{"class":86,"line":195},[84,59198,52471],{"class":477},[84,59200,54213],{"class":51627},[84,59202,54219],{"class":477},[84,59204,54213],{"class":51627},[84,59206,51634],{"class":477},[84,59208,59209,59211,59213],{"class":86,"line":206},[84,59210,52471],{"class":477},[84,59212,52140],{"class":51627},[84,59214,51634],{"class":477},[84,59216,59217,59219,59221,59223,59225,59227,59229,59231],{"class":86,"line":217},[84,59218,11550],{"class":473},[84,59220,54717],{"class":94},[84,59222,13893],{"class":473},[84,59224,54722],{"class":477},[84,59226,54725],{"class":90},[84,59228,478],{"class":477},[84,59230,58530],{"class":104},[84,59232,484],{"class":477},[84,59234,59235,59237,59240,59242,59245],{"class":86,"line":227},[84,59236,58537],{"class":477},[84,59238,59239],{"class":90},"onclick",[84,59241,13893],{"class":473},[84,59243,59244],{"class":473}," function",[84,59246,54778],{"class":477},[84,59248,59249,59252,59254,59256],{"class":86,"line":238},[84,59250,59251],{"class":90},"      alert",[84,59253,478],{"class":477},[84,59255,945],{"class":94},[84,59257,484],{"class":477},[84,59259,59260],{"class":86,"line":249},[84,59261,2516],{"class":477},[84,59263,59264,59266,59268,59270,59272],{"class":86,"line":262},[84,59265,58537],{"class":477},[84,59267,59239],{"class":90},[84,59269,13893],{"class":473},[84,59271,59244],{"class":473},[84,59273,54778],{"class":477},[84,59275,59276,59278,59280,59282],{"class":86,"line":273},[84,59277,59251],{"class":90},[84,59279,478],{"class":477},[84,59281,1223],{"class":94},[84,59283,484],{"class":477},[84,59285,59286],{"class":86,"line":283},[84,59287,2516],{"class":477},[84,59289,59290,59292,59294],{"class":86,"line":294},[84,59291,52744],{"class":477},[84,59293,52140],{"class":51627},[84,59295,51634],{"class":477},[84,59297,59298,59300,59302],{"class":86,"line":2028},[84,59299,52112],{"class":477},[84,59301,52127],{"class":51627},[84,59303,51634],{"class":477},[84,59305,59306],{"class":86,"line":2057},[84,59307,2729],{"emptyLinePlaceholder":403},[84,59309,59310,59312,59314],{"class":86,"line":2062},[84,59311,52112],{"class":477},[84,59313,50962],{"class":51627},[84,59315,51634],{"class":477},[35,59317,59318],{},"只要点击就输出结果为22,前边11被覆盖了",[75,59320,59322],{"className":50960,"code":59321,"language":50962,"meta":66,"style":66},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[81,59323,59324,59329,59334,59338,59343,59348],{"__ignoreMap":66},[84,59325,59326],{"class":86,"line":87},[84,59327,59328],{"class":477},"  btn.addEventListener('click', function () {\n",[84,59330,59331],{"class":86,"line":98},[84,59332,59333],{"class":477},"      alert(11)\n",[84,59335,59336],{"class":86,"line":70},[84,59337,33788],{"class":477},[84,59339,59340],{"class":86,"line":120},[84,59341,59342],{"class":477},"    btn.addEventListener('click', function () {\n",[84,59344,59345],{"class":86,"line":131},[84,59346,59347],{"class":477},"      alert(22)\n",[84,59349,59350],{"class":86,"line":145},[84,59351,33788],{"class":477},[35,59353,59354],{},"点击第一次输出11,第二次点击为22",[23,59356,59358],{"id":59357},"_325-事件类型","3.2.5 事件类型",[35,59360,59361],{},[64,59362],{"alt":66,"src":59363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22327,59365,59367],{"id":59366},"_3251-鼠标事件","3.2.5.1 鼠标事件",[35,59369,59370],{},"补充知识:",[35,59372,59373],{},"轮播图自动播放模块,可以使用",[35,59375,59376],{},"let timerId = setInterval(function () {",[35,59378,59379],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[35,59381,59382],{},"用js方法模拟进行点击事件,click必须加()",[35,59384,59385],{},"next.click()",[35,59387,59388],{},"}, 1000)",[35,59390,59391],{},[64,59392],{"alt":66,"src":59393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[75,59395,59397],{"className":53394,"code":59396,"language":53396,"meta":66,"style":66},"\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",[81,59398,59399,59403,59413,59427,59431,59439,59454,59474,59494,59507,59515,59520,59525,59529,59533,59538,59543,59548,59553,59557,59561,59566,59571,59576,59580,59584,59589,59593,59598,59603,59607,59611,59616,59621,59626,59631,59636,59640,59644,59649,59654,59659,59664,59669,59673,59677,59682,59687,59692,59697,59702,59707,59712,59717,59722,59727,59731,59735,59740,59745,59749,59753,59758,59763,59767,59772,59777,59781,59785,59790,59794,59799,59804,59808,59813,59817,59821,59826,59831,59836,59841,59846,59851,59856,59860,59864,59868,59873,59878,59883,59888,59892,59900,59908,59912,59920,59935,59949,59970,59978,59992,60005,60020,60039,60051,60063,60075,60087,60099,60111,60123,60131,60146,60170,60194,60202,60210,60218,60226,60231,60236,60241,60246,60251,60256,60261,60266,60271,60276,60280,60285,60290,60295,60300,60305,60310,60315,60320,60325,60329,60334,60339,60344,60349,60354,60359,60364,60369,60374,60379,60384,60389,60393,60397,60402,60407,60412,60416,60421,60426,60431,60436,60441,60445,60450,60454,60458,60462,60466,60470,60474,60479,60484,60489,60494,60499,60504,60509,60514,60519,60523,60527,60532,60537,60542,60547,60552,60556,60561,60566,60571,60576,60581,60586,60590,60594,60599,60603,60608,60612,60617,60622,60627,60632,60637,60642,60646,60654,60662,60666],{"__ignoreMap":66},[84,59400,59401],{"class":86,"line":87},[84,59402,2729],{"emptyLinePlaceholder":403},[84,59404,59405,59407,59409,59411],{"class":86,"line":98},[84,59406,51624],{"class":477},[84,59408,51628],{"class":473},[84,59410,51631],{"class":94},[84,59412,51634],{"class":477},[84,59414,59415,59417,59419,59421,59423,59425],{"class":86,"line":70},[84,59416,1383],{"class":477},[84,59418,50962],{"class":51627},[84,59420,51643],{"class":90},[84,59422,523],{"class":477},[84,59424,51648],{"class":104},[84,59426,51634],{"class":477},[84,59428,59429],{"class":86,"line":120},[84,59430,2729],{"emptyLinePlaceholder":403},[84,59432,59433,59435,59437],{"class":86,"line":131},[84,59434,1383],{"class":477},[84,59436,51661],{"class":51627},[84,59438,51634],{"class":477},[84,59440,59441,59443,59445,59447,59449,59451],{"class":86,"line":145},[84,59442,52471],{"class":477},[84,59444,51671],{"class":51627},[84,59446,51674],{"class":90},[84,59448,523],{"class":477},[84,59450,51679],{"class":104},[84,59452,59453],{"class":477}," \u002F>\n",[84,59455,59456,59458,59460,59462,59464,59466,59468,59470,59472],{"class":86,"line":156},[84,59457,52471],{"class":477},[84,59459,51671],{"class":51627},[84,59461,51690],{"class":90},[84,59463,523],{"class":477},[84,59465,51695],{"class":104},[84,59467,51698],{"class":90},[84,59469,523],{"class":477},[84,59471,51703],{"class":104},[84,59473,59453],{"class":477},[84,59475,59476,59478,59480,59482,59484,59486,59488,59490,59492],{"class":86,"line":164},[84,59477,52471],{"class":477},[84,59479,51671],{"class":51627},[84,59481,15249],{"class":90},[84,59483,523],{"class":477},[84,59485,51718],{"class":104},[84,59487,51698],{"class":90},[84,59489,523],{"class":477},[84,59491,51725],{"class":104},[84,59493,59453],{"class":477},[84,59495,59496,59498,59500,59503,59505],{"class":86,"line":175},[84,59497,52471],{"class":477},[84,59499,51734],{"class":51627},[84,59501,59502],{"class":477},">轮播图点击切换\u003C\u002F",[84,59504,51734],{"class":51627},[84,59506,51634],{"class":477},[84,59508,59509,59511,59513],{"class":86,"line":185},[84,59510,52471],{"class":477},[84,59512,389],{"class":51627},[84,59514,51634],{"class":477},[84,59516,59517],{"class":86,"line":195},[84,59518,59519],{"class":477},"    * {\n",[84,59521,59522],{"class":86,"line":206},[84,59523,59524],{"class":477},"      box-sizing: border-box;\n",[84,59526,59527],{"class":86,"line":217},[84,59528,2516],{"class":477},[84,59530,59531],{"class":86,"line":227},[84,59532,2729],{"emptyLinePlaceholder":403},[84,59534,59535],{"class":86,"line":238},[84,59536,59537],{"class":477},"    .slider {\n",[84,59539,59540],{"class":86,"line":249},[84,59541,59542],{"class":477},"      width: 560px;\n",[84,59544,59545],{"class":86,"line":262},[84,59546,59547],{"class":477},"      height: 400px;\n",[84,59549,59550],{"class":86,"line":273},[84,59551,59552],{"class":477},"      overflow: hidden;\n",[84,59554,59555],{"class":86,"line":283},[84,59556,2516],{"class":477},[84,59558,59559],{"class":86,"line":294},[84,59560,2729],{"emptyLinePlaceholder":403},[84,59562,59563],{"class":86,"line":2028},[84,59564,59565],{"class":477},"    .slider-wrapper {\n",[84,59567,59568],{"class":86,"line":2057},[84,59569,59570],{"class":477},"      width: 100%;\n",[84,59572,59573],{"class":86,"line":2062},[84,59574,59575],{"class":477},"      height: 320px;\n",[84,59577,59578],{"class":86,"line":2079},[84,59579,2516],{"class":477},[84,59581,59582],{"class":86,"line":2084},[84,59583,2729],{"emptyLinePlaceholder":403},[84,59585,59586],{"class":86,"line":2089},[84,59587,59588],{"class":477},"    .slider-wrapper img {\n",[84,59590,59591],{"class":86,"line":2094},[84,59592,59570],{"class":477},[84,59594,59595],{"class":86,"line":2108},[84,59596,59597],{"class":477},"      height: 100%;\n",[84,59599,59600],{"class":86,"line":2113},[84,59601,59602],{"class":477},"      display: block;\n",[84,59604,59605],{"class":86,"line":2906},[84,59606,2516],{"class":477},[84,59608,59609],{"class":86,"line":2920},[84,59610,2729],{"emptyLinePlaceholder":403},[84,59612,59613],{"class":86,"line":2928},[84,59614,59615],{"class":477},"    .slider-footer {\n",[84,59617,59618],{"class":86,"line":2933},[84,59619,59620],{"class":477},"      height: 80px;\n",[84,59622,59623],{"class":86,"line":2939},[84,59624,59625],{"class":477},"      background-color: rgb(100, 67, 68);\n",[84,59627,59628],{"class":86,"line":2945},[84,59629,59630],{"class":477},"      padding: 12px 12px 0 12px;\n",[84,59632,59633],{"class":86,"line":2950},[84,59634,59635],{"class":477},"      position: relative;\n",[84,59637,59638],{"class":86,"line":8277},[84,59639,2516],{"class":477},[84,59641,59642],{"class":86,"line":8301},[84,59643,2729],{"emptyLinePlaceholder":403},[84,59645,59646],{"class":86,"line":8306},[84,59647,59648],{"class":477},"    .slider-footer .toggle {\n",[84,59650,59651],{"class":86,"line":8312},[84,59652,59653],{"class":477},"      position: absolute;\n",[84,59655,59656],{"class":86,"line":8339},[84,59657,59658],{"class":477},"      right: 0;\n",[84,59660,59661],{"class":86,"line":8344},[84,59662,59663],{"class":477},"      top: 12px;\n",[84,59665,59666],{"class":86,"line":8350},[84,59667,59668],{"class":477},"      display: flex;\n",[84,59670,59671],{"class":86,"line":8362},[84,59672,2516],{"class":477},[84,59674,59675],{"class":86,"line":8374},[84,59676,2729],{"emptyLinePlaceholder":403},[84,59678,59679],{"class":86,"line":8386},[84,59680,59681],{"class":477},"    .slider-footer .toggle button {\n",[84,59683,59684],{"class":86,"line":10045},[84,59685,59686],{"class":477},"      margin-right: 12px;\n",[84,59688,59689],{"class":86,"line":10070},[84,59690,59691],{"class":477},"      width: 28px;\n",[84,59693,59694],{"class":86,"line":10093},[84,59695,59696],{"class":477},"      height: 28px;\n",[84,59698,59699],{"class":86,"line":10117},[84,59700,59701],{"class":477},"      appearance: none;\n",[84,59703,59704],{"class":86,"line":10122},[84,59705,59706],{"class":477},"      border: none;\n",[84,59708,59709],{"class":86,"line":10127},[84,59710,59711],{"class":477},"      background: rgba(255, 255, 255, 0.1);\n",[84,59713,59714],{"class":86,"line":10132},[84,59715,59716],{"class":477},"      color: #fff;\n",[84,59718,59719],{"class":86,"line":10141},[84,59720,59721],{"class":477},"      border-radius: 4px;\n",[84,59723,59724],{"class":86,"line":10146},[84,59725,59726],{"class":477},"      cursor: pointer;\n",[84,59728,59729],{"class":86,"line":10152},[84,59730,2516],{"class":477},[84,59732,59733],{"class":86,"line":10173},[84,59734,2729],{"emptyLinePlaceholder":403},[84,59736,59737],{"class":86,"line":10179},[84,59738,59739],{"class":477},"    .slider-footer .toggle button:hover {\n",[84,59741,59742],{"class":86,"line":10193},[84,59743,59744],{"class":477},"      background: rgba(255, 255, 255, 0.2);\n",[84,59746,59747],{"class":86,"line":10199},[84,59748,2516],{"class":477},[84,59750,59751],{"class":86,"line":10226},[84,59752,2729],{"emptyLinePlaceholder":403},[84,59754,59755],{"class":86,"line":10235},[84,59756,59757],{"class":477},"    .slider-footer p {\n",[84,59759,59760],{"class":86,"line":10241},[84,59761,59762],{"class":477},"      margin: 0;\n",[84,59764,59765],{"class":86,"line":10249},[84,59766,59716],{"class":477},[84,59768,59769],{"class":86,"line":10254},[84,59770,59771],{"class":477},"      font-size: 18px;\n",[84,59773,59774],{"class":86,"line":16933},[84,59775,59776],{"class":477},"      margin-bottom: 10px;\n",[84,59778,59779],{"class":86,"line":16939},[84,59780,2516],{"class":477},[84,59782,59783],{"class":86,"line":16962},[84,59784,2729],{"emptyLinePlaceholder":403},[84,59786,59787],{"class":86,"line":16968},[84,59788,59789],{"class":477},"    .slider-indicator {\n",[84,59791,59792],{"class":86,"line":16991},[84,59793,59762],{"class":477},[84,59795,59796],{"class":86,"line":17005},[84,59797,59798],{"class":477},"      padding: 0;\n",[84,59800,59801],{"class":86,"line":17025},[84,59802,59803],{"class":477},"      list-style: none;\n",[84,59805,59806],{"class":86,"line":17031},[84,59807,59668],{"class":477},[84,59809,59810],{"class":86,"line":17042},[84,59811,59812],{"class":477},"      align-items: center;\n",[84,59814,59815],{"class":86,"line":17065},[84,59816,2516],{"class":477},[84,59818,59819],{"class":86,"line":17087},[84,59820,2729],{"emptyLinePlaceholder":403},[84,59822,59823],{"class":86,"line":17092},[84,59824,59825],{"class":477},"    .slider-indicator li {\n",[84,59827,59828],{"class":86,"line":17098},[84,59829,59830],{"class":477},"      width: 8px;\n",[84,59832,59833],{"class":86,"line":17112},[84,59834,59835],{"class":477},"      height: 8px;\n",[84,59837,59838],{"class":86,"line":17125},[84,59839,59840],{"class":477},"      margin: 4px;\n",[84,59842,59843],{"class":86,"line":17130},[84,59844,59845],{"class":477},"      border-radius: 50%;\n",[84,59847,59848],{"class":86,"line":17144},[84,59849,59850],{"class":477},"      background: #fff;\n",[84,59852,59853],{"class":86,"line":17149},[84,59854,59855],{"class":477},"      opacity: 0.4;\n",[84,59857,59858],{"class":86,"line":17155},[84,59859,59726],{"class":477},[84,59861,59862],{"class":86,"line":17160},[84,59863,2516],{"class":477},[84,59865,59866],{"class":86,"line":17174},[84,59867,2729],{"emptyLinePlaceholder":403},[84,59869,59870],{"class":86,"line":17179},[84,59871,59872],{"class":477},"    .slider-indicator li.active {\n",[84,59874,59875],{"class":86,"line":17184},[84,59876,59877],{"class":477},"      width: 12px;\n",[84,59879,59880],{"class":86,"line":17198},[84,59881,59882],{"class":477},"      height: 12px;\n",[84,59884,59885],{"class":86,"line":17210},[84,59886,59887],{"class":477},"      opacity: 1;\n",[84,59889,59890],{"class":86,"line":17215},[84,59891,2516],{"class":477},[84,59893,59894,59896,59898],{"class":86,"line":17228},[84,59895,52744],{"class":477},[84,59897,389],{"class":51627},[84,59899,51634],{"class":477},[84,59901,59902,59904,59906],{"class":86,"line":17233},[84,59903,52112],{"class":477},[84,59905,51661],{"class":51627},[84,59907,51634],{"class":477},[84,59909,59910],{"class":86,"line":17238},[84,59911,2729],{"emptyLinePlaceholder":403},[84,59913,59914,59916,59918],{"class":86,"line":17243},[84,59915,1383],{"class":477},[84,59917,52127],{"class":51627},[84,59919,51634],{"class":477},[84,59921,59922,59924,59926,59928,59930,59933],{"class":86,"line":17256},[84,59923,52471],{"class":477},[84,59925,51938],{"class":51627},[84,59927,53813],{"class":90},[84,59929,523],{"class":477},[84,59931,59932],{"class":104},"\"slider\"",[84,59934,51634],{"class":477},[84,59936,59937,59939,59941,59943,59945,59947],{"class":86,"line":17261},[84,59938,51668],{"class":477},[84,59940,51938],{"class":51627},[84,59942,53813],{"class":90},[84,59944,523],{"class":477},[84,59946,55553],{"class":104},[84,59948,51634],{"class":477},[84,59950,59951,59953,59955,59957,59959,59962,59964,59966,59968],{"class":86,"line":32960},[84,59952,55560],{"class":477},[84,59954,64],{"class":51627},[84,59956,55565],{"class":90},[84,59958,523],{"class":477},[84,59960,59961],{"class":104},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[84,59963,55573],{"class":90},[84,59965,523],{"class":477},[84,59967,7981],{"class":104},[84,59969,59453],{"class":477},[84,59971,59972,59974,59976],{"class":86,"line":32966},[84,59973,52103],{"class":477},[84,59975,51938],{"class":51627},[84,59977,51634],{"class":477},[84,59979,59980,59982,59984,59986,59988,59990],{"class":86,"line":32972},[84,59981,51668],{"class":477},[84,59983,51938],{"class":51627},[84,59985,53813],{"class":90},[84,59987,523],{"class":477},[84,59989,55600],{"class":104},[84,59991,51634],{"class":477},[84,59993,59994,59996,59998,60001,60003],{"class":86,"line":32978},[84,59995,55560],{"class":477},[84,59997,35],{"class":51627},[84,59999,60000],{"class":477},">对人类来说会不会太超前了？\u003C\u002F",[84,60002,35],{"class":51627},[84,60004,51634],{"class":477},[84,60006,60007,60009,60011,60013,60015,60018],{"class":86,"line":32984},[84,60008,55560],{"class":477},[84,60010,1480],{"class":51627},[84,60012,53813],{"class":90},[84,60014,523],{"class":477},[84,60016,60017],{"class":104},"\"slider-indicator\"",[84,60019,51634],{"class":477},[84,60021,60022,60024,60026,60028,60030,60033,60035,60037],{"class":86,"line":32995},[84,60023,55628],{"class":477},[84,60025,31],{"class":51627},[84,60027,53813],{"class":90},[84,60029,523],{"class":477},[84,60031,60032],{"class":104},"\"active\"",[84,60034,55640],{"class":477},[84,60036,31],{"class":51627},[84,60038,51634],{"class":477},[84,60040,60041,60043,60045,60047,60049],{"class":86,"line":33001},[84,60042,55628],{"class":477},[84,60044,31],{"class":51627},[84,60046,55640],{"class":477},[84,60048,31],{"class":51627},[84,60050,51634],{"class":477},[84,60052,60053,60055,60057,60059,60061],{"class":86,"line":33021},[84,60054,55628],{"class":477},[84,60056,31],{"class":51627},[84,60058,55640],{"class":477},[84,60060,31],{"class":51627},[84,60062,51634],{"class":477},[84,60064,60065,60067,60069,60071,60073],{"class":86,"line":33027},[84,60066,55628],{"class":477},[84,60068,31],{"class":51627},[84,60070,55640],{"class":477},[84,60072,31],{"class":51627},[84,60074,51634],{"class":477},[84,60076,60077,60079,60081,60083,60085],{"class":86,"line":33038},[84,60078,55628],{"class":477},[84,60080,31],{"class":51627},[84,60082,55640],{"class":477},[84,60084,31],{"class":51627},[84,60086,51634],{"class":477},[84,60088,60089,60091,60093,60095,60097],{"class":86,"line":33044},[84,60090,55628],{"class":477},[84,60092,31],{"class":51627},[84,60094,55640],{"class":477},[84,60096,31],{"class":51627},[84,60098,51634],{"class":477},[84,60100,60101,60103,60105,60107,60109],{"class":86,"line":33050},[84,60102,55628],{"class":477},[84,60104,31],{"class":51627},[84,60106,55640],{"class":477},[84,60108,31],{"class":51627},[84,60110,51634],{"class":477},[84,60112,60113,60115,60117,60119,60121],{"class":86,"line":33056},[84,60114,55628],{"class":477},[84,60116,31],{"class":51627},[84,60118,55640],{"class":477},[84,60120,31],{"class":51627},[84,60122,51634],{"class":477},[84,60124,60125,60127,60129],{"class":86,"line":33062},[84,60126,55733],{"class":477},[84,60128,1480],{"class":51627},[84,60130,51634],{"class":477},[84,60132,60133,60135,60137,60139,60141,60144],{"class":86,"line":33068},[84,60134,55560],{"class":477},[84,60136,51938],{"class":51627},[84,60138,53813],{"class":90},[84,60140,523],{"class":477},[84,60142,60143],{"class":104},"\"toggle\"",[84,60145,51634],{"class":477},[84,60147,60148,60150,60152,60154,60156,60159,60161,60164,60166,60168],{"class":86,"line":33074},[84,60149,55628],{"class":477},[84,60151,54213],{"class":51627},[84,60153,53813],{"class":90},[84,60155,523],{"class":477},[84,60157,60158],{"class":104},"\"prev\"",[84,60160,1433],{"class":477},[84,60162,60163],{"class":94},"&lt;",[84,60165,52112],{"class":477},[84,60167,54213],{"class":51627},[84,60169,51634],{"class":477},[84,60171,60172,60174,60176,60178,60180,60183,60185,60188,60190,60192],{"class":86,"line":33080},[84,60173,55628],{"class":477},[84,60175,54213],{"class":51627},[84,60177,53813],{"class":90},[84,60179,523],{"class":477},[84,60181,60182],{"class":104},"\"next\"",[84,60184,1433],{"class":477},[84,60186,60187],{"class":94},"&gt;",[84,60189,52112],{"class":477},[84,60191,54213],{"class":51627},[84,60193,51634],{"class":477},[84,60195,60196,60198,60200],{"class":86,"line":33100},[84,60197,55733],{"class":477},[84,60199,51938],{"class":51627},[84,60201,51634],{"class":477},[84,60203,60204,60206,60208],{"class":86,"line":33106},[84,60205,52103],{"class":477},[84,60207,51938],{"class":51627},[84,60209,51634],{"class":477},[84,60211,60212,60214,60216],{"class":86,"line":33122},[84,60213,52744],{"class":477},[84,60215,51938],{"class":51627},[84,60217,51634],{"class":477},[84,60219,60220,60222,60224],{"class":86,"line":33128},[84,60221,52471],{"class":477},[84,60223,52140],{"class":51627},[84,60225,51634],{"class":477},[84,60227,60228],{"class":86,"line":33142},[84,60229,60230],{"class":477},"    \u002F\u002F 1. 初始数据\n",[84,60232,60233],{"class":86,"line":33148},[84,60234,60235],{"class":477},"    const data = [\n",[84,60237,60238],{"class":86,"line":33163},[84,60239,60240],{"class":477},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[84,60242,60243],{"class":86,"line":33169},[84,60244,60245],{"class":477},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[84,60247,60248],{"class":86,"line":33178},[84,60249,60250],{"class":477},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[84,60252,60253],{"class":86,"line":33184},[84,60254,60255],{"class":477},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[84,60257,60258],{"class":86,"line":33193},[84,60259,60260],{"class":477},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[84,60262,60263],{"class":86,"line":33199},[84,60264,60265],{"class":477},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[84,60267,60268],{"class":86,"line":33205},[84,60269,60270],{"class":477},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[84,60272,60273],{"class":86,"line":33214},[84,60274,60275],{"class":477},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[84,60277,60278],{"class":86,"line":33220},[84,60279,53436],{"class":477},[84,60281,60282],{"class":86,"line":33231},[84,60283,60284],{"class":477},"    \u002F\u002F 获取元素\n",[84,60286,60287],{"class":86,"line":33237},[84,60288,60289],{"class":477},"    const img = document.querySelector('.slider-wrapper img')\n",[84,60291,60292],{"class":86,"line":33256},[84,60293,60294],{"class":477},"    const p = document.querySelector('.slider-footer p')\n",[84,60296,60297],{"class":86,"line":33262},[84,60298,60299],{"class":477},"    const footer = document.querySelector('.slider-footer')\n",[84,60301,60302],{"class":86,"line":33273},[84,60303,60304],{"class":477},"    \u002F\u002F 1. 右按钮业务\n",[84,60306,60307],{"class":86,"line":33279},[84,60308,60309],{"class":477},"    \u002F\u002F 1.1 获取右侧按钮 \n",[84,60311,60312],{"class":86,"line":33299},[84,60313,60314],{"class":477},"    const next = document.querySelector('.next')\n",[84,60316,60317],{"class":86,"line":33315},[84,60318,60319],{"class":477},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[84,60321,60322],{"class":86,"line":33321},[84,60323,60324],{"class":477},"    \u002F\u002F 1.2 注册点击事件\n",[84,60326,60327],{"class":86,"line":33335},[84,60328,2729],{"emptyLinePlaceholder":403},[84,60330,60331],{"class":86,"line":33341},[84,60332,60333],{"class":477},"    next.addEventListener('click', function () {\n",[84,60335,60336],{"class":86,"line":33347},[84,60337,60338],{"class":477},"      \u002F\u002F console.log(11)\n",[84,60340,60341],{"class":86,"line":33358},[84,60342,60343],{"class":477},"      i++\n",[84,60345,60346],{"class":86,"line":33364},[84,60347,60348],{"class":477},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[84,60350,60351],{"class":86,"line":33370},[84,60352,60353],{"class":477},"      \u002F\u002F if (i >= 8) {\n",[84,60355,60356],{"class":86,"line":33380},[84,60357,60358],{"class":477},"      \u002F\u002F   i = 0\n",[84,60360,60361],{"class":86,"line":33386},[84,60362,60363],{"class":477},"      \u002F\u002F }\n",[84,60365,60366],{"class":86,"line":33397},[84,60367,60368],{"class":477},"      i = i >= data.length ? 0 : i\n",[84,60370,60371],{"class":86,"line":33403},[84,60372,60373],{"class":477},"      \u002F\u002F 1.3 得到对应的对象\n",[84,60375,60376],{"class":86,"line":33413},[84,60377,60378],{"class":477},"      \u002F\u002F console.log(data[i])\n",[84,60380,60381],{"class":86,"line":33418},[84,60382,60383],{"class":477},"      \u002F\u002F 调用函数\n",[84,60385,60386],{"class":86,"line":33424},[84,60387,60388],{"class":477},"      toggle()\n",[84,60390,60391],{"class":86,"line":33473},[84,60392,33788],{"class":477},[84,60394,60395],{"class":86,"line":33520},[84,60396,2729],{"emptyLinePlaceholder":403},[84,60398,60399],{"class":86,"line":33525},[84,60400,60401],{"class":477},"    \u002F\u002F 2. 左侧按钮业务\n",[84,60403,60404],{"class":86,"line":33531},[84,60405,60406],{"class":477},"    \u002F\u002F 2.1 获取左侧按钮 \n",[84,60408,60409],{"class":86,"line":33550},[84,60410,60411],{"class":477},"    const prev = document.querySelector('.prev')\n",[84,60413,60414],{"class":86,"line":33556},[84,60415,60324],{"class":477},[84,60417,60418],{"class":86,"line":33576},[84,60419,60420],{"class":477},"    prev.addEventListener('click', function () {\n",[84,60422,60423],{"class":86,"line":33582},[84,60424,60425],{"class":477},"      i--\n",[84,60427,60428],{"class":86,"line":33588},[84,60429,60430],{"class":477},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[84,60432,60433],{"class":86,"line":33598},[84,60434,60435],{"class":477},"      \u002F\u002F if (i \u003C 0) {\n",[84,60437,60438],{"class":86,"line":33603},[84,60439,60440],{"class":477},"      \u002F\u002F   i = 7\n",[84,60442,60443],{"class":86,"line":33609},[84,60444,60363],{"class":477},[84,60446,60447],{"class":86,"line":33625},[84,60448,60449],{"class":477},"      i = i \u003C 0 ? data.length - 1 : i\n",[84,60451,60452],{"class":86,"line":33670},[84,60453,60373],{"class":477},[84,60455,60456],{"class":86,"line":33676},[84,60457,60378],{"class":477},[84,60459,60460],{"class":86,"line":33682},[84,60461,60383],{"class":477},[84,60463,60464],{"class":86,"line":33688},[84,60465,60388],{"class":477},[84,60467,60468],{"class":86,"line":33699},[84,60469,33788],{"class":477},[84,60471,60472],{"class":86,"line":33705},[84,60473,2729],{"emptyLinePlaceholder":403},[84,60475,60476],{"class":86,"line":33711},[84,60477,60478],{"class":477},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[84,60480,60481],{"class":86,"line":33717},[84,60482,60483],{"class":477},"    function toggle() {\n",[84,60485,60486],{"class":86,"line":33735},[84,60487,60488],{"class":477},"      \u002F\u002F 1.4 渲染对应的数据\n",[84,60490,60491],{"class":86,"line":33749},[84,60492,60493],{"class":477},"      img.src = data[i].url\n",[84,60495,60496],{"class":86,"line":33758},[84,60497,60498],{"class":477},"      p.innerHTML = data[i].title\n",[84,60500,60501],{"class":86,"line":33767},[84,60502,60503],{"class":477},"      footer.style.backgroundColor = data[i].color\n",[84,60505,60506],{"class":86,"line":33776},[84,60507,60508],{"class":477},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[84,60510,60511],{"class":86,"line":33785},[84,60512,60513],{"class":477},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[84,60515,60516],{"class":86,"line":33791},[84,60517,60518],{"class":477},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[84,60520,60521],{"class":86,"line":33797},[84,60522,2516],{"class":477},[84,60524,60525],{"class":86,"line":33805},[84,60526,2729],{"emptyLinePlaceholder":403},[84,60528,60529],{"class":86,"line":33810},[84,60530,60531],{"class":477},"    \u002F\u002F 3. 自动播放模块\n",[84,60533,60534],{"class":86,"line":33816},[84,60535,60536],{"class":477},"    let timerId = setInterval(function () {\n",[84,60538,60539],{"class":86,"line":33827},[84,60540,60541],{"class":477},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[84,60543,60544],{"class":86,"line":33833},[84,60545,60546],{"class":477},"      next.click()\n",[84,60548,60549],{"class":86,"line":33853},[84,60550,60551],{"class":477},"    }, 1000)\n",[84,60553,60554],{"class":86,"line":33859},[84,60555,2729],{"emptyLinePlaceholder":403},[84,60557,60558],{"class":86,"line":33865},[84,60559,60560],{"class":477},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[84,60562,60563],{"class":86,"line":33871},[84,60564,60565],{"class":477},"    const slider = document.querySelector('.slider')\n",[84,60567,60568],{"class":86,"line":33888},[84,60569,60570],{"class":477},"    \u002F\u002F 注册事件\n",[84,60572,60573],{"class":86,"line":33894},[84,60574,60575],{"class":477},"    slider.addEventListener('mouseenter', function () {\n",[84,60577,60578],{"class":86,"line":33900},[84,60579,60580],{"class":477},"      \u002F\u002F 停止定时器\n",[84,60582,60583],{"class":86,"line":33906},[84,60584,60585],{"class":477},"      clearInterval(timerId)\n",[84,60587,60588],{"class":86,"line":33912},[84,60589,33788],{"class":477},[84,60591,60592],{"class":86,"line":33918},[84,60593,2729],{"emptyLinePlaceholder":403},[84,60595,60596],{"class":86,"line":33945},[84,60597,60598],{"class":477},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[84,60600,60601],{"class":86,"line":33969},[84,60602,60570],{"class":477},[84,60604,60605],{"class":86,"line":33975},[84,60606,60607],{"class":477},"    slider.addEventListener('mouseleave', function () {\n",[84,60609,60610],{"class":86,"line":33981},[84,60611,60580],{"class":477},[84,60613,60614],{"class":86,"line":33987},[84,60615,60616],{"class":477},"      if (timerId) clearInterval(timerId)\n",[84,60618,60619],{"class":86,"line":33998},[84,60620,60621],{"class":477},"      \u002F\u002F 开启定时器\n",[84,60623,60624],{"class":86,"line":34009},[84,60625,60626],{"class":477},"      timerId = setInterval(function () {\n",[84,60628,60629],{"class":86,"line":34015},[84,60630,60631],{"class":477},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[84,60633,60634],{"class":86,"line":34032},[84,60635,60636],{"class":477},"        next.click()\n",[84,60638,60639],{"class":86,"line":34055},[84,60640,60641],{"class":477},"      }, 1000)\n",[84,60643,60644],{"class":86,"line":34078},[84,60645,33788],{"class":477},[84,60647,60648,60650,60652],{"class":86,"line":34084},[84,60649,52744],{"class":477},[84,60651,52140],{"class":51627},[84,60653,51634],{"class":477},[84,60655,60656,60658,60660],{"class":86,"line":34089},[84,60657,52112],{"class":477},[84,60659,52127],{"class":51627},[84,60661,51634],{"class":477},[84,60663,60664],{"class":86,"line":34098},[84,60665,2729],{"emptyLinePlaceholder":403},[84,60667,60668,60670,60672],{"class":86,"line":34108},[84,60669,52112],{"class":477},[84,60671,50962],{"class":51627},[84,60673,51634],{"class":477},[22327,60675,60677],{"id":60676},"_3252-焦点事件","3.2.5.2 焦点事件",[35,60679,60680],{},"小米搜索框案例：",[75,60682,60684],{"className":50960,"code":60683,"language":50962,"meta":66,"style":66},"\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",[81,60685,60686,60696,60710,60714,60722,60736,60756,60776,60788,60796,60802,60812,60822,60834,60838,60842,60849,60853,60864,60868,60872,60879,60890,60903,60917,60921,60925,60934,60946,60958,60972,60985,60998,61016,61027,61031,61035,61044,61061,61065,61069,61076,61086,61096,61107,61120,61132,61148,61159,61171,61175,61179,61187,61198,61215,61227,61239,61250,61254,61258,61269,61280,61284,61292,61296,61304,61308,61316,61331,61354,61369,61400,61427,61454,61481,61508,61535,61562,61571,61579,61587,61592,61612,61632,61637,61642,61660,61665,61675,61680,61694,61699,61704,61721,61730,61742,61746,61754,61762,61766],{"__ignoreMap":66},[84,60687,60688,60690,60692,60694],{"class":86,"line":87},[84,60689,51624],{"class":477},[84,60691,51628],{"class":51627},[84,60693,51631],{"class":90},[84,60695,51634],{"class":477},[84,60697,60698,60700,60702,60704,60706,60708],{"class":86,"line":98},[84,60699,1383],{"class":477},[84,60701,50962],{"class":51627},[84,60703,51643],{"class":90},[84,60705,523],{"class":477},[84,60707,51648],{"class":104},[84,60709,51634],{"class":477},[84,60711,60712],{"class":86,"line":70},[84,60713,2729],{"emptyLinePlaceholder":403},[84,60715,60716,60718,60720],{"class":86,"line":120},[84,60717,1383],{"class":477},[84,60719,51661],{"class":51627},[84,60721,51634],{"class":477},[84,60723,60724,60726,60728,60730,60732,60734],{"class":86,"line":131},[84,60725,51668],{"class":477},[84,60727,51671],{"class":51627},[84,60729,51674],{"class":90},[84,60731,523],{"class":477},[84,60733,51679],{"class":104},[84,60735,51634],{"class":477},[84,60737,60738,60740,60742,60744,60746,60748,60750,60752,60754],{"class":86,"line":145},[84,60739,51668],{"class":477},[84,60741,51671],{"class":51627},[84,60743,51690],{"class":90},[84,60745,523],{"class":477},[84,60747,51695],{"class":104},[84,60749,51698],{"class":90},[84,60751,523],{"class":477},[84,60753,51703],{"class":104},[84,60755,51634],{"class":477},[84,60757,60758,60760,60762,60764,60766,60768,60770,60772,60774],{"class":86,"line":156},[84,60759,51668],{"class":477},[84,60761,51671],{"class":51627},[84,60763,15249],{"class":90},[84,60765,523],{"class":477},[84,60767,51718],{"class":104},[84,60769,51698],{"class":90},[84,60771,523],{"class":477},[84,60773,51725],{"class":104},[84,60775,51634],{"class":477},[84,60777,60778,60780,60782,60784,60786],{"class":86,"line":164},[84,60779,51668],{"class":477},[84,60781,51734],{"class":51627},[84,60783,51737],{"class":477},[84,60785,51734],{"class":51627},[84,60787,51634],{"class":477},[84,60789,60790,60792,60794],{"class":86,"line":175},[84,60791,51668],{"class":477},[84,60793,389],{"class":51627},[84,60795,51634],{"class":477},[84,60797,60798,60800],{"class":86,"line":185},[84,60799,51754],{"class":51627},[84,60801,15901],{"class":477},[84,60803,60804,60806,60808,60810],{"class":86,"line":195},[84,60805,51761],{"class":94},[84,60807,51764],{"class":477},[84,60809,666],{"class":94},[84,60811,1634],{"class":477},[84,60813,60814,60816,60818,60820],{"class":86,"line":206},[84,60815,51773],{"class":94},[84,60817,51764],{"class":477},[84,60819,666],{"class":94},[84,60821,1634],{"class":477},[84,60823,60824,60827,60829,60832],{"class":86,"line":217},[84,60825,60826],{"class":94},"            box-sizing",[84,60828,51764],{"class":477},[84,60830,60831],{"class":94},"border-box",[84,60833,1634],{"class":477},[84,60835,60836],{"class":86,"line":227},[84,60837,2858],{"class":477},[84,60839,60840],{"class":86,"line":238},[84,60841,2729],{"emptyLinePlaceholder":403},[84,60843,60844,60847],{"class":86,"line":249},[84,60845,60846],{"class":51627},"        ul",[84,60848,15901],{"class":477},[84,60850,60851],{"class":86,"line":262},[84,60852,2729],{"emptyLinePlaceholder":403},[84,60854,60855,60858,60860,60862],{"class":86,"line":273},[84,60856,60857],{"class":94},"            list-style",[84,60859,51764],{"class":477},[84,60861,55063],{"class":94},[84,60863,1634],{"class":477},[84,60865,60866],{"class":86,"line":283},[84,60867,2858],{"class":477},[84,60869,60870],{"class":86,"line":294},[84,60871,2729],{"emptyLinePlaceholder":403},[84,60873,60874,60877],{"class":86,"line":2028},[84,60875,60876],{"class":90},"        .mi",[84,60878,15901],{"class":477},[84,60880,60881,60884,60886,60888],{"class":86,"line":2057},[84,60882,60883],{"class":94},"            position",[84,60885,51764],{"class":477},[84,60887,55090],{"class":94},[84,60889,1634],{"class":477},[84,60891,60892,60894,60896,60899,60901],{"class":86,"line":2062},[84,60893,51811],{"class":94},[84,60895,51764],{"class":477},[84,60897,60898],{"class":94},"223",[84,60900,51819],{"class":473},[84,60902,1634],{"class":477},[84,60904,60905,60907,60909,60911,60913,60915],{"class":86,"line":2079},[84,60906,51761],{"class":94},[84,60908,51764],{"class":477},[84,60910,784],{"class":94},[84,60912,51819],{"class":473},[84,60914,51883],{"class":94},[84,60916,1634],{"class":477},[84,60918,60919],{"class":86,"line":2084},[84,60920,2858],{"class":477},[84,60922,60923],{"class":86,"line":2089},[84,60924,2729],{"emptyLinePlaceholder":403},[84,60926,60927,60929,60932],{"class":86,"line":2094},[84,60928,60876],{"class":90},[84,60930,60931],{"class":51627}," input",[84,60933,15901],{"class":477},[84,60935,60936,60938,60940,60942,60944],{"class":86,"line":2108},[84,60937,51811],{"class":94},[84,60939,51764],{"class":477},[84,60941,60898],{"class":94},[84,60943,51819],{"class":473},[84,60945,1634],{"class":477},[84,60947,60948,60950,60952,60954,60956],{"class":86,"line":2113},[84,60949,51826],{"class":94},[84,60951,51764],{"class":477},[84,60953,1080],{"class":94},[84,60955,51819],{"class":473},[84,60957,1634],{"class":477},[84,60959,60960,60962,60964,60966,60968,60970],{"class":86,"line":2906},[84,60961,51773],{"class":94},[84,60963,51764],{"class":477},[84,60965,666],{"class":94},[84,60967,2367],{"class":94},[84,60969,51819],{"class":473},[84,60971,1634],{"class":477},[84,60973,60974,60977,60979,60981,60983],{"class":86,"line":2920},[84,60975,60976],{"class":94},"            font-size",[84,60978,51764],{"class":477},[84,60980,1022],{"class":94},[84,60982,51819],{"class":473},[84,60984,1634],{"class":477},[84,60986,60987,60990,60992,60994,60996],{"class":86,"line":2928},[84,60988,60989],{"class":94},"            line-height",[84,60991,51764],{"class":477},[84,60993,1080],{"class":94},[84,60995,51819],{"class":473},[84,60997,1634],{"class":477},[84,60999,61000,61003,61005,61007,61009,61011,61014],{"class":86,"line":2933},[84,61001,61002],{"class":94},"            border",[84,61004,51764],{"class":477},[84,61006,692],{"class":94},[84,61008,51819],{"class":473},[84,61010,51848],{"class":94},[84,61012,61013],{"class":94}," #e0e0e0",[84,61015,1634],{"class":477},[84,61017,61018,61021,61023,61025],{"class":86,"line":2939},[84,61019,61020],{"class":94},"            outline",[84,61022,51764],{"class":477},[84,61024,55063],{"class":94},[84,61026,1634],{"class":477},[84,61028,61029],{"class":86,"line":2945},[84,61030,2858],{"class":477},[84,61032,61033],{"class":86,"line":2950},[84,61034,2729],{"emptyLinePlaceholder":403},[84,61036,61037,61039,61042],{"class":86,"line":8277},[84,61038,60876],{"class":90},[84,61040,61041],{"class":90}," .search",[84,61043,15901],{"class":477},[84,61045,61046,61048,61050,61052,61054,61056,61059],{"class":86,"line":8301},[84,61047,61002],{"class":94},[84,61049,51764],{"class":477},[84,61051,692],{"class":94},[84,61053,51819],{"class":473},[84,61055,51848],{"class":94},[84,61057,61058],{"class":94}," #ff6700",[84,61060,1634],{"class":477},[84,61062,61063],{"class":86,"line":8306},[84,61064,2858],{"class":477},[84,61066,61067],{"class":86,"line":8312},[84,61068,2729],{"emptyLinePlaceholder":403},[84,61070,61071,61074],{"class":86,"line":8339},[84,61072,61073],{"class":90},"        .result-list",[84,61075,15901],{"class":477},[84,61077,61078,61080,61082,61084],{"class":86,"line":8344},[84,61079,51799],{"class":94},[84,61081,51764],{"class":477},[84,61083,55063],{"class":94},[84,61085,1634],{"class":477},[84,61087,61088,61090,61092,61094],{"class":86,"line":8350},[84,61089,60883],{"class":94},[84,61091,51764],{"class":477},[84,61093,55157],{"class":94},[84,61095,1634],{"class":477},[84,61097,61098,61101,61103,61105],{"class":86,"line":8362},[84,61099,61100],{"class":94},"            left",[84,61102,51764],{"class":477},[84,61104,666],{"class":94},[84,61106,1634],{"class":477},[84,61108,61109,61112,61114,61116,61118],{"class":86,"line":8374},[84,61110,61111],{"class":94},"            top",[84,61113,51764],{"class":477},[84,61115,1080],{"class":94},[84,61117,51819],{"class":473},[84,61119,1634],{"class":477},[84,61121,61122,61124,61126,61128,61130],{"class":86,"line":8386},[84,61123,51811],{"class":94},[84,61125,51764],{"class":477},[84,61127,60898],{"class":94},[84,61129,51819],{"class":473},[84,61131,1634],{"class":477},[84,61133,61134,61136,61138,61140,61142,61144,61146],{"class":86,"line":10045},[84,61135,61002],{"class":94},[84,61137,51764],{"class":477},[84,61139,692],{"class":94},[84,61141,51819],{"class":473},[84,61143,51848],{"class":94},[84,61145,61058],{"class":94},[84,61147,1634],{"class":477},[84,61149,61150,61153,61155,61157],{"class":86,"line":10070},[84,61151,61152],{"class":94},"            border-top",[84,61154,51764],{"class":477},[84,61156,666],{"class":94},[84,61158,1634],{"class":477},[84,61160,61161,61164,61166,61169],{"class":86,"line":10093},[84,61162,61163],{"class":94},"            background",[84,61165,51764],{"class":477},[84,61167,61168],{"class":94},"#fff",[84,61170,1634],{"class":477},[84,61172,61173],{"class":86,"line":10117},[84,61174,2858],{"class":477},[84,61176,61177],{"class":86,"line":10122},[84,61178,2729],{"emptyLinePlaceholder":403},[84,61180,61181,61183,61185],{"class":86,"line":10127},[84,61182,61073],{"class":90},[84,61184,1739],{"class":51627},[84,61186,15901],{"class":477},[84,61188,61189,61191,61193,61196],{"class":86,"line":10132},[84,61190,51799],{"class":94},[84,61192,51764],{"class":477},[84,61194,61195],{"class":94},"block",[84,61197,1634],{"class":477},[84,61199,61200,61202,61204,61206,61208,61211,61213],{"class":86,"line":10141},[84,61201,51773],{"class":94},[84,61203,51764],{"class":477},[84,61205,817],{"class":94},[84,61207,51819],{"class":473},[84,61209,61210],{"class":94}," 15",[84,61212,51819],{"class":473},[84,61214,1634],{"class":477},[84,61216,61217,61219,61221,61223,61225],{"class":86,"line":10146},[84,61218,60976],{"class":94},[84,61220,51764],{"class":477},[84,61222,971],{"class":94},[84,61224,51819],{"class":473},[84,61226,1634],{"class":477},[84,61228,61229,61232,61234,61237],{"class":86,"line":10152},[84,61230,61231],{"class":94},"            color",[84,61233,51764],{"class":477},[84,61235,61236],{"class":94},"#424242",[84,61238,1634],{"class":477},[84,61240,61241,61244,61246,61248],{"class":86,"line":10173},[84,61242,61243],{"class":94},"            text-decoration",[84,61245,51764],{"class":477},[84,61247,55063],{"class":94},[84,61249,1634],{"class":477},[84,61251,61252],{"class":86,"line":10179},[84,61253,2858],{"class":477},[84,61255,61256],{"class":86,"line":10193},[84,61257,2729],{"emptyLinePlaceholder":403},[84,61259,61260,61262,61264,61267],{"class":86,"line":10199},[84,61261,61073],{"class":90},[84,61263,1739],{"class":51627},[84,61265,61266],{"class":90},":hover",[84,61268,15901],{"class":477},[84,61270,61271,61273,61275,61278],{"class":86,"line":10226},[84,61272,51967],{"class":94},[84,61274,51764],{"class":477},[84,61276,61277],{"class":94},"#eee",[84,61279,1634],{"class":477},[84,61281,61282],{"class":86,"line":10235},[84,61283,2858],{"class":477},[84,61285,61286,61288,61290],{"class":86,"line":10241},[84,61287,52103],{"class":477},[84,61289,389],{"class":51627},[84,61291,51634],{"class":477},[84,61293,61294],{"class":86,"line":10249},[84,61295,2729],{"emptyLinePlaceholder":403},[84,61297,61298,61300,61302],{"class":86,"line":10254},[84,61299,52112],{"class":477},[84,61301,51661],{"class":51627},[84,61303,51634],{"class":477},[84,61305,61306],{"class":86,"line":16933},[84,61307,2729],{"emptyLinePlaceholder":403},[84,61309,61310,61312,61314],{"class":86,"line":16939},[84,61311,1383],{"class":477},[84,61313,52127],{"class":51627},[84,61315,51634],{"class":477},[84,61317,61318,61320,61322,61324,61326,61329],{"class":86,"line":16962},[84,61319,51668],{"class":477},[84,61321,51938],{"class":51627},[84,61323,53813],{"class":90},[84,61325,523],{"class":477},[84,61327,61328],{"class":104},"\"mi\"",[84,61330,51634],{"class":477},[84,61332,61333,61335,61337,61339,61341,61344,61347,61349,61352],{"class":86,"line":16968},[84,61334,55628],{"class":477},[84,61336,54147],{"class":51627},[84,61338,54150],{"class":90},[84,61340,523],{"class":477},[84,61342,61343],{"class":104},"\"search\"",[84,61345,61346],{"class":90}," placeholder",[84,61348,523],{"class":477},[84,61350,61351],{"class":104},"\"小米笔记本\"",[84,61353,51634],{"class":477},[84,61355,61356,61358,61360,61362,61364,61367],{"class":86,"line":16991},[84,61357,55628],{"class":477},[84,61359,1480],{"class":51627},[84,61361,53813],{"class":90},[84,61363,523],{"class":477},[84,61365,61366],{"class":104},"\"result-list\"",[84,61368,51634],{"class":477},[84,61370,61371,61374,61376,61379,61381,61384,61386,61389,61392,61394,61396,61398],{"class":86,"line":17005},[84,61372,61373],{"class":477},"            \u003C",[84,61375,31],{"class":51627},[84,61377,61378],{"class":477},">\u003C",[84,61380,39],{"class":51627},[84,61382,61383],{"class":90}," href",[84,61385,523],{"class":477},[84,61387,61388],{"class":104},"\"#\"",[84,61390,61391],{"class":477},">全部商品\u003C\u002F",[84,61393,39],{"class":51627},[84,61395,55640],{"class":477},[84,61397,31],{"class":51627},[84,61399,51634],{"class":477},[84,61401,61402,61404,61406,61408,61410,61412,61414,61416,61419,61421,61423,61425],{"class":86,"line":17025},[84,61403,61373],{"class":477},[84,61405,31],{"class":51627},[84,61407,61378],{"class":477},[84,61409,39],{"class":51627},[84,61411,61383],{"class":90},[84,61413,523],{"class":477},[84,61415,61388],{"class":104},[84,61417,61418],{"class":477},">小米11\u003C\u002F",[84,61420,39],{"class":51627},[84,61422,55640],{"class":477},[84,61424,31],{"class":51627},[84,61426,51634],{"class":477},[84,61428,61429,61431,61433,61435,61437,61439,61441,61443,61446,61448,61450,61452],{"class":86,"line":17031},[84,61430,61373],{"class":477},[84,61432,31],{"class":51627},[84,61434,61378],{"class":477},[84,61436,39],{"class":51627},[84,61438,61383],{"class":90},[84,61440,523],{"class":477},[84,61442,61388],{"class":104},[84,61444,61445],{"class":477},">小米10S\u003C\u002F",[84,61447,39],{"class":51627},[84,61449,55640],{"class":477},[84,61451,31],{"class":51627},[84,61453,51634],{"class":477},[84,61455,61456,61458,61460,61462,61464,61466,61468,61470,61473,61475,61477,61479],{"class":86,"line":17042},[84,61457,61373],{"class":477},[84,61459,31],{"class":51627},[84,61461,61378],{"class":477},[84,61463,39],{"class":51627},[84,61465,61383],{"class":90},[84,61467,523],{"class":477},[84,61469,61388],{"class":104},[84,61471,61472],{"class":477},">小米笔记本\u003C\u002F",[84,61474,39],{"class":51627},[84,61476,55640],{"class":477},[84,61478,31],{"class":51627},[84,61480,51634],{"class":477},[84,61482,61483,61485,61487,61489,61491,61493,61495,61497,61500,61502,61504,61506],{"class":86,"line":17065},[84,61484,61373],{"class":477},[84,61486,31],{"class":51627},[84,61488,61378],{"class":477},[84,61490,39],{"class":51627},[84,61492,61383],{"class":90},[84,61494,523],{"class":477},[84,61496,61388],{"class":104},[84,61498,61499],{"class":477},">小米手机\u003C\u002F",[84,61501,39],{"class":51627},[84,61503,55640],{"class":477},[84,61505,31],{"class":51627},[84,61507,51634],{"class":477},[84,61509,61510,61512,61514,61516,61518,61520,61522,61524,61527,61529,61531,61533],{"class":86,"line":17087},[84,61511,61373],{"class":477},[84,61513,31],{"class":51627},[84,61515,61378],{"class":477},[84,61517,39],{"class":51627},[84,61519,61383],{"class":90},[84,61521,523],{"class":477},[84,61523,61388],{"class":104},[84,61525,61526],{"class":477},">黑鲨4\u003C\u002F",[84,61528,39],{"class":51627},[84,61530,55640],{"class":477},[84,61532,31],{"class":51627},[84,61534,51634],{"class":477},[84,61536,61537,61539,61541,61543,61545,61547,61549,61551,61554,61556,61558,61560],{"class":86,"line":17092},[84,61538,61373],{"class":477},[84,61540,31],{"class":51627},[84,61542,61378],{"class":477},[84,61544,39],{"class":51627},[84,61546,61383],{"class":90},[84,61548,523],{"class":477},[84,61550,61388],{"class":104},[84,61552,61553],{"class":477},">空调\u003C\u002F",[84,61555,39],{"class":51627},[84,61557,55640],{"class":477},[84,61559,31],{"class":51627},[84,61561,51634],{"class":477},[84,61563,61564,61567,61569],{"class":86,"line":17098},[84,61565,61566],{"class":477},"        \u003C\u002F",[84,61568,1480],{"class":51627},[84,61570,51634],{"class":477},[84,61572,61573,61575,61577],{"class":86,"line":17112},[84,61574,52103],{"class":477},[84,61576,51938],{"class":51627},[84,61578,51634],{"class":477},[84,61580,61581,61583,61585],{"class":86,"line":17125},[84,61582,51668],{"class":477},[84,61584,52140],{"class":51627},[84,61586,51634],{"class":477},[84,61588,61589],{"class":86,"line":17130},[84,61590,61591],{"class":328},"        \u002F\u002F 1. 获取元素\n",[84,61593,61594,61597,61599,61601,61603,61605,61607,61610],{"class":86,"line":17144},[84,61595,61596],{"class":473},"        const",[84,61598,60931],{"class":94},[84,61600,13893],{"class":473},[84,61602,54722],{"class":477},[84,61604,54725],{"class":90},[84,61606,478],{"class":477},[84,61608,61609],{"class":104},"'[type=search]'",[84,61611,484],{"class":477},[84,61613,61614,61616,61619,61621,61623,61625,61627,61630],{"class":86,"line":17149},[84,61615,61596],{"class":473},[84,61617,61618],{"class":94}," ul",[84,61620,13893],{"class":473},[84,61622,54722],{"class":477},[84,61624,54725],{"class":90},[84,61626,478],{"class":477},[84,61628,61629],{"class":104},"'.result-list'",[84,61631,484],{"class":477},[84,61633,61634],{"class":86,"line":17155},[84,61635,61636],{"class":328},"        \u002F\u002F console.log(input)\n",[84,61638,61639],{"class":86,"line":17160},[84,61640,61641],{"class":328},"        \u002F\u002F 2. 监听事件 获得焦点\n",[84,61643,61644,61647,61649,61651,61654,61656,61658],{"class":86,"line":17174},[84,61645,61646],{"class":477},"        input.",[84,61648,58139],{"class":90},[84,61650,478],{"class":477},[84,61652,61653],{"class":104},"'focus'",[84,61655,12764],{"class":477},[84,61657,54775],{"class":473},[84,61659,54778],{"class":477},[84,61661,61662],{"class":86,"line":17179},[84,61663,61664],{"class":328},"            \u002F\u002F ul显示\n",[84,61666,61667,61670,61672],{"class":86,"line":17184},[84,61668,61669],{"class":477},"            ul.style.display ",[84,61671,523],{"class":473},[84,61673,61674],{"class":104}," 'block'\n",[84,61676,61677],{"class":86,"line":17198},[84,61678,61679],{"class":328},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[84,61681,61682,61685,61687,61689,61692],{"class":86,"line":17210},[84,61683,61684],{"class":477},"            input.classList.",[84,61686,5663],{"class":90},[84,61688,478],{"class":477},[84,61690,61691],{"class":104},"'search'",[84,61693,484],{"class":477},[84,61695,61696],{"class":86,"line":17215},[84,61697,61698],{"class":477},"        })\n",[84,61700,61701],{"class":86,"line":17228},[84,61702,61703],{"class":328},"        \u002F\u002F 3. 监听事件 失去焦点\n",[84,61705,61706,61708,61710,61712,61715,61717,61719],{"class":86,"line":17233},[84,61707,61646],{"class":477},[84,61709,58139],{"class":90},[84,61711,478],{"class":477},[84,61713,61714],{"class":104},"'blur'",[84,61716,12764],{"class":477},[84,61718,54775],{"class":473},[84,61720,54778],{"class":477},[84,61722,61723,61725,61727],{"class":86,"line":17238},[84,61724,61669],{"class":477},[84,61726,523],{"class":473},[84,61728,61729],{"class":104}," 'none'\n",[84,61731,61732,61734,61736,61738,61740],{"class":86,"line":17243},[84,61733,61684],{"class":477},[84,61735,57332],{"class":90},[84,61737,478],{"class":477},[84,61739,61691],{"class":104},[84,61741,484],{"class":477},[84,61743,61744],{"class":86,"line":17256},[84,61745,61698],{"class":477},[84,61747,61748,61750,61752],{"class":86,"line":17261},[84,61749,52103],{"class":477},[84,61751,52140],{"class":51627},[84,61753,51634],{"class":477},[84,61755,61756,61758,61760],{"class":86,"line":32960},[84,61757,52112],{"class":477},[84,61759,52127],{"class":51627},[84,61761,51634],{"class":477},[84,61763,61764],{"class":86,"line":32966},[84,61765,2729],{"emptyLinePlaceholder":403},[84,61767,61768,61770,61772],{"class":86,"line":32972},[84,61769,52112],{"class":477},[84,61771,50962],{"class":51627},[84,61773,51634],{"class":477},[22327,61775,61777],{"id":61776},"_3253-键盘事件","3.2.5.3 键盘事件",[35,61779,61780],{},"评论字数统计案例",[35,61782,61783],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[35,61785,61786],{},"牢记focus伪类选择器",[51671,61788],{"charSet":61789},"UTF-8",[51671,61791],{"name":61792,"content":61793},"viewport","width=device-width, initial-scale=1.0",[51734,61795,61796],{},"Document",[389,61798,61799],{},"\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",[54147,61801],{"type":5516},[1480,61803,61804,61807],{},[31,61805,61806],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[31,61808,61809],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[75,61811,61813],{"className":50960,"code":61812,"language":50962,"meta":66,"style":66},"\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",[81,61814,61815,61825,61839,61843,61851,61865,61885,61905,61918,61926,61933,61946,61960,61970,61980,61984,61988,61995,62007,62019,62031,62043,62072,62085,62089,62093,62102,62113,62125,62136,62147,62159,62170,62182,62198,62210,62214,62218,62229,62240,62250,62262,62266,62270,62278,62289,62299,62310,62322,62335,62347,62359,62363,62367,62376,62388,62399,62412,62423,62437,62441,62445,62452,62464,62476,62486,62490,62494,62503,62515,62525,62529,62533,62544,62554,62573,62586,62590,62594,62604,62614,62618,62622,62633,62644,62656,62668,62672,62676,62687,62698,62712,62716,62720,62731,62741,62753,62757,62765,62773,62777,62785,62800,62819,62859,62872,62880,62894,62914,62922,62937,62960,62978,62993,63013,63033,63053,63061,63069,63077,63085,63105,63125,63130,63147,63156,63160,63165,63181,63189,63193,63198,63215,63220,63245,63249,63253,63258,63263,63271,63279,63283],{"__ignoreMap":66},[84,61816,61817,61819,61821,61823],{"class":86,"line":87},[84,61818,51624],{"class":477},[84,61820,51628],{"class":51627},[84,61822,51631],{"class":90},[84,61824,51634],{"class":477},[84,61826,61827,61829,61831,61833,61835,61837],{"class":86,"line":98},[84,61828,1383],{"class":477},[84,61830,50962],{"class":51627},[84,61832,51643],{"class":90},[84,61834,523],{"class":477},[84,61836,51648],{"class":104},[84,61838,51634],{"class":477},[84,61840,61841],{"class":86,"line":70},[84,61842,2729],{"emptyLinePlaceholder":403},[84,61844,61845,61847,61849],{"class":86,"line":120},[84,61846,1383],{"class":477},[84,61848,51661],{"class":51627},[84,61850,51634],{"class":477},[84,61852,61853,61855,61857,61859,61861,61863],{"class":86,"line":131},[84,61854,52471],{"class":477},[84,61856,51671],{"class":51627},[84,61858,51674],{"class":90},[84,61860,523],{"class":477},[84,61862,51679],{"class":104},[84,61864,51634],{"class":477},[84,61866,61867,61869,61871,61873,61875,61877,61879,61881,61883],{"class":86,"line":145},[84,61868,52471],{"class":477},[84,61870,51671],{"class":51627},[84,61872,51690],{"class":90},[84,61874,523],{"class":477},[84,61876,51695],{"class":104},[84,61878,51698],{"class":90},[84,61880,523],{"class":477},[84,61882,51703],{"class":104},[84,61884,51634],{"class":477},[84,61886,61887,61889,61891,61893,61895,61897,61899,61901,61903],{"class":86,"line":156},[84,61888,52471],{"class":477},[84,61890,51671],{"class":51627},[84,61892,15249],{"class":90},[84,61894,523],{"class":477},[84,61896,51718],{"class":104},[84,61898,51698],{"class":90},[84,61900,523],{"class":477},[84,61902,51725],{"class":104},[84,61904,51634],{"class":477},[84,61906,61907,61909,61911,61914,61916],{"class":86,"line":164},[84,61908,52471],{"class":477},[84,61910,51734],{"class":51627},[84,61912,61913],{"class":477},">评论回车发布\u003C\u002F",[84,61915,51734],{"class":51627},[84,61917,51634],{"class":477},[84,61919,61920,61922,61924],{"class":86,"line":175},[84,61921,52471],{"class":477},[84,61923,389],{"class":51627},[84,61925,51634],{"class":477},[84,61927,61928,61931],{"class":86,"line":185},[84,61929,61930],{"class":90},"    .wrapper",[84,61932,15901],{"class":477},[84,61934,61935,61938,61940,61942,61944],{"class":86,"line":195},[84,61936,61937],{"class":94},"      min-width",[84,61939,51764],{"class":477},[84,61941,4316],{"class":94},[84,61943,51819],{"class":473},[84,61945,1634],{"class":477},[84,61947,61948,61951,61953,61956,61958],{"class":86,"line":206},[84,61949,61950],{"class":94},"      max-width",[84,61952,51764],{"class":477},[84,61954,61955],{"class":94},"800",[84,61957,51819],{"class":473},[84,61959,1634],{"class":477},[84,61961,61962,61964,61966,61968],{"class":86,"line":217},[84,61963,55335],{"class":94},[84,61965,51764],{"class":477},[84,61967,51804],{"class":94},[84,61969,1634],{"class":477},[84,61971,61972,61974,61976,61978],{"class":86,"line":227},[84,61973,55346],{"class":94},[84,61975,51764],{"class":477},[84,61977,51907],{"class":94},[84,61979,1634],{"class":477},[84,61981,61982],{"class":86,"line":238},[84,61983,2516],{"class":477},[84,61985,61986],{"class":86,"line":249},[84,61987,2729],{"emptyLinePlaceholder":403},[84,61989,61990,61993],{"class":86,"line":262},[84,61991,61992],{"class":90},"    .avatar",[84,61994,15901],{"class":477},[84,61996,61997,61999,62001,62003,62005],{"class":86,"line":273},[84,61998,55097],{"class":94},[84,62000,51764],{"class":477},[84,62002,1080],{"class":94},[84,62004,51819],{"class":473},[84,62006,1634],{"class":477},[84,62008,62009,62011,62013,62015,62017],{"class":86,"line":283},[84,62010,55111],{"class":94},[84,62012,51764],{"class":477},[84,62014,1080],{"class":94},[84,62016,51819],{"class":473},[84,62018,1634],{"class":477},[84,62020,62021,62023,62025,62027,62029],{"class":86,"line":294},[84,62022,55460],{"class":94},[84,62024,51764],{"class":477},[84,62026,1129],{"class":94},[84,62028,801],{"class":473},[84,62030,1634],{"class":477},[84,62032,62033,62036,62038,62041],{"class":86,"line":2028},[84,62034,62035],{"class":94},"      overflow",[84,62037,51764],{"class":477},[84,62039,62040],{"class":94},"hidden",[84,62042,1634],{"class":477},[84,62044,62045,62048,62050,62053,62055,62058,62060,62063,62065,62067,62070],{"class":86,"line":2057},[84,62046,62047],{"class":94},"      background",[84,62049,51764],{"class":477},[84,62051,62052],{"class":94},"url",[84,62054,478],{"class":477},[84,62056,62057],{"class":5545},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[84,62059,14043],{"class":477},[84,62061,62062],{"class":94},"no-repeat",[84,62064,17473],{"class":94},[84,62066,25306],{"class":477},[84,62068,62069],{"class":94},"cover",[84,62071,1634],{"class":477},[84,62073,62074,62077,62079,62081,62083],{"class":86,"line":2062},[84,62075,62076],{"class":94},"      margin-right",[84,62078,51764],{"class":477},[84,62080,1173],{"class":94},[84,62082,51819],{"class":473},[84,62084,1634],{"class":477},[84,62086,62087],{"class":86,"line":2079},[84,62088,2516],{"class":477},[84,62090,62091],{"class":86,"line":2084},[84,62092,2729],{"emptyLinePlaceholder":403},[84,62094,62095,62097,62100],{"class":86,"line":2089},[84,62096,61930],{"class":90},[84,62098,62099],{"class":51627}," textarea",[84,62101,15901],{"class":477},[84,62103,62104,62107,62109,62111],{"class":86,"line":2094},[84,62105,62106],{"class":94},"      outline",[84,62108,51764],{"class":477},[84,62110,55063],{"class":94},[84,62112,1634],{"class":477},[84,62114,62115,62118,62120,62123],{"class":86,"line":2108},[84,62116,62117],{"class":94},"      border-color",[84,62119,51764],{"class":477},[84,62121,62122],{"class":94},"transparent",[84,62124,1634],{"class":477},[84,62126,62127,62130,62132,62134],{"class":86,"line":2113},[84,62128,62129],{"class":94},"      resize",[84,62131,51764],{"class":477},[84,62133,55063],{"class":94},[84,62135,1634],{"class":477},[84,62137,62138,62140,62142,62145],{"class":86,"line":2906},[84,62139,62047],{"class":94},[84,62141,51764],{"class":477},[84,62143,62144],{"class":94},"#f5f5f5",[84,62146,1634],{"class":477},[84,62148,62149,62151,62153,62155,62157],{"class":86,"line":2920},[84,62150,55460],{"class":94},[84,62152,51764],{"class":477},[84,62154,140],{"class":94},[84,62156,51819],{"class":473},[84,62158,1634],{"class":477},[84,62160,62161,62164,62166,62168],{"class":86,"line":2928},[84,62162,62163],{"class":94},"      flex",[84,62165,51764],{"class":477},[84,62167,692],{"class":94},[84,62169,1634],{"class":477},[84,62171,62172,62174,62176,62178,62180],{"class":86,"line":2933},[84,62173,55021],{"class":94},[84,62175,51764],{"class":477},[84,62177,919],{"class":94},[84,62179,51819],{"class":473},[84,62181,1634],{"class":477},[84,62183,62184,62187,62189,62191,62194,62196],{"class":86,"line":2939},[84,62185,62186],{"class":94},"      transition",[84,62188,51764],{"class":477},[84,62190,28448],{"class":94},[84,62192,62193],{"class":94}," 0.5",[84,62195,1168],{"class":473},[84,62197,1634],{"class":477},[84,62199,62200,62202,62204,62206,62208],{"class":86,"line":2945},[84,62201,55111],{"class":94},[84,62203,51764],{"class":477},[84,62205,1424],{"class":94},[84,62207,51819],{"class":473},[84,62209,1634],{"class":477},[84,62211,62212],{"class":86,"line":2950},[84,62213,2516],{"class":477},[84,62215,62216],{"class":86,"line":8277},[84,62217,2729],{"emptyLinePlaceholder":403},[84,62219,62220,62222,62224,62227],{"class":86,"line":8301},[84,62221,61930],{"class":90},[84,62223,62099],{"class":51627},[84,62225,62226],{"class":90},":focus",[84,62228,15901],{"class":477},[84,62230,62231,62233,62235,62238],{"class":86,"line":8306},[84,62232,62117],{"class":94},[84,62234,51764],{"class":477},[84,62236,62237],{"class":94},"#e4e4e4",[84,62239,1634],{"class":477},[84,62241,62242,62244,62246,62248],{"class":86,"line":8312},[84,62243,62047],{"class":94},[84,62245,51764],{"class":477},[84,62247,61168],{"class":94},[84,62249,1634],{"class":477},[84,62251,62252,62254,62256,62258,62260],{"class":86,"line":8339},[84,62253,55111],{"class":94},[84,62255,51764],{"class":477},[84,62257,1129],{"class":94},[84,62259,51819],{"class":473},[84,62261,1634],{"class":477},[84,62263,62264],{"class":86,"line":8344},[84,62265,2516],{"class":477},[84,62267,62268],{"class":86,"line":8350},[84,62269,2729],{"emptyLinePlaceholder":403},[84,62271,62272,62274,62276],{"class":86,"line":8362},[84,62273,61930],{"class":90},[84,62275,57793],{"class":51627},[84,62277,15901],{"class":477},[84,62279,62280,62282,62284,62287],{"class":86,"line":8374},[84,62281,62047],{"class":94},[84,62283,51764],{"class":477},[84,62285,62286],{"class":94},"#00aeec",[84,62288,1634],{"class":477},[84,62290,62291,62293,62295,62297],{"class":86,"line":8386},[84,62292,57742],{"class":94},[84,62294,51764],{"class":477},[84,62296,61168],{"class":94},[84,62298,1634],{"class":477},[84,62300,62301,62304,62306,62308],{"class":86,"line":10045},[84,62302,62303],{"class":94},"      border",[84,62305,51764],{"class":477},[84,62307,55063],{"class":94},[84,62309,1634],{"class":477},[84,62311,62312,62314,62316,62318,62320],{"class":86,"line":10070},[84,62313,55460],{"class":94},[84,62315,51764],{"class":477},[84,62317,140],{"class":94},[84,62319,51819],{"class":473},[84,62321,1634],{"class":477},[84,62323,62324,62327,62329,62331,62333],{"class":86,"line":10093},[84,62325,62326],{"class":94},"      margin-left",[84,62328,51764],{"class":477},[84,62330,919],{"class":94},[84,62332,51819],{"class":473},[84,62334,1634],{"class":477},[84,62336,62337,62339,62341,62343,62345],{"class":86,"line":10117},[84,62338,55097],{"class":94},[84,62340,51764],{"class":477},[84,62342,829],{"class":94},[84,62344,51819],{"class":473},[84,62346,1634],{"class":477},[84,62348,62349,62352,62354,62357],{"class":86,"line":10122},[84,62350,62351],{"class":94},"      cursor",[84,62353,51764],{"class":477},[84,62355,62356],{"class":94},"pointer",[84,62358,1634],{"class":477},[84,62360,62361],{"class":86,"line":10127},[84,62362,2516],{"class":477},[84,62364,62365],{"class":86,"line":10132},[84,62366,2729],{"emptyLinePlaceholder":403},[84,62368,62369,62371,62374],{"class":86,"line":10141},[84,62370,61930],{"class":90},[84,62372,62373],{"class":90}," .total",[84,62375,15901],{"class":477},[84,62377,62378,62380,62382,62384,62386],{"class":86,"line":10146},[84,62379,62076],{"class":94},[84,62381,51764],{"class":477},[84,62383,1085],{"class":94},[84,62385,51819],{"class":473},[84,62387,1634],{"class":477},[84,62389,62390,62392,62394,62397],{"class":86,"line":10152},[84,62391,57742],{"class":94},[84,62393,51764],{"class":477},[84,62395,62396],{"class":94},"#999",[84,62398,1634],{"class":477},[84,62400,62401,62404,62406,62408,62410],{"class":86,"line":10173},[84,62402,62403],{"class":94},"      margin-top",[84,62405,51764],{"class":477},[84,62407,792],{"class":94},[84,62409,51819],{"class":473},[84,62411,1634],{"class":477},[84,62413,62414,62417,62419,62421],{"class":86,"line":10179},[84,62415,62416],{"class":94},"      opacity",[84,62418,51764],{"class":477},[84,62420,666],{"class":94},[84,62422,1634],{"class":477},[84,62424,62425,62427,62429,62431,62433,62435],{"class":86,"line":10193},[84,62426,62186],{"class":94},[84,62428,51764],{"class":477},[84,62430,28448],{"class":94},[84,62432,62193],{"class":94},[84,62434,1168],{"class":473},[84,62436,1634],{"class":477},[84,62438,62439],{"class":86,"line":10199},[84,62440,2516],{"class":477},[84,62442,62443],{"class":86,"line":10226},[84,62444,2729],{"emptyLinePlaceholder":403},[84,62446,62447,62450],{"class":86,"line":10235},[84,62448,62449],{"class":90},"    .list",[84,62451,15901],{"class":477},[84,62453,62454,62456,62458,62460,62462],{"class":86,"line":10241},[84,62455,61937],{"class":94},[84,62457,51764],{"class":477},[84,62459,4316],{"class":94},[84,62461,51819],{"class":473},[84,62463,1634],{"class":477},[84,62465,62466,62468,62470,62472,62474],{"class":86,"line":10249},[84,62467,61950],{"class":94},[84,62469,51764],{"class":477},[84,62471,61955],{"class":94},[84,62473,51819],{"class":473},[84,62475,1634],{"class":477},[84,62477,62478,62480,62482,62484],{"class":86,"line":10254},[84,62479,55335],{"class":94},[84,62481,51764],{"class":477},[84,62483,51804],{"class":94},[84,62485,1634],{"class":477},[84,62487,62488],{"class":86,"line":16933},[84,62489,2516],{"class":477},[84,62491,62492],{"class":86,"line":16939},[84,62493,2729],{"emptyLinePlaceholder":403},[84,62495,62496,62498,62501],{"class":86,"line":16962},[84,62497,62449],{"class":90},[84,62499,62500],{"class":90}," .item",[84,62502,15901],{"class":477},[84,62504,62505,62507,62509,62511,62513],{"class":86,"line":16968},[84,62506,55097],{"class":94},[84,62508,51764],{"class":477},[84,62510,784],{"class":94},[84,62512,801],{"class":473},[84,62514,1634],{"class":477},[84,62516,62517,62519,62521,62523],{"class":86,"line":16991},[84,62518,55335],{"class":94},[84,62520,51764],{"class":477},[84,62522,51804],{"class":94},[84,62524,1634],{"class":477},[84,62526,62527],{"class":86,"line":17005},[84,62528,2516],{"class":477},[84,62530,62531],{"class":86,"line":17025},[84,62532,2729],{"emptyLinePlaceholder":403},[84,62534,62535,62537,62539,62542],{"class":86,"line":17031},[84,62536,62449],{"class":90},[84,62538,62500],{"class":90},[84,62540,62541],{"class":90}," .info",[84,62543,15901],{"class":477},[84,62545,62546,62548,62550,62552],{"class":86,"line":17042},[84,62547,62163],{"class":94},[84,62549,51764],{"class":477},[84,62551,692],{"class":94},[84,62553,1634],{"class":477},[84,62555,62556,62559,62561,62563,62565,62568,62571],{"class":86,"line":17065},[84,62557,62558],{"class":94},"      border-bottom",[84,62560,51764],{"class":477},[84,62562,692],{"class":94},[84,62564,51819],{"class":473},[84,62566,62567],{"class":94}," dashed",[84,62569,62570],{"class":94}," #e4e4e4",[84,62572,1634],{"class":477},[84,62574,62575,62578,62580,62582,62584],{"class":86,"line":17087},[84,62576,62577],{"class":94},"      padding-bottom",[84,62579,51764],{"class":477},[84,62581,919],{"class":94},[84,62583,51819],{"class":473},[84,62585,1634],{"class":477},[84,62587,62588],{"class":86,"line":17092},[84,62589,2516],{"class":477},[84,62591,62592],{"class":86,"line":17098},[84,62593,2729],{"emptyLinePlaceholder":403},[84,62595,62596,62598,62600,62602],{"class":86,"line":17112},[84,62597,62449],{"class":90},[84,62599,62500],{"class":90},[84,62601,7154],{"class":51627},[84,62603,15901],{"class":477},[84,62605,62606,62608,62610,62612],{"class":86,"line":17125},[84,62607,55032],{"class":94},[84,62609,51764],{"class":477},[84,62611,666],{"class":94},[84,62613,1634],{"class":477},[84,62615,62616],{"class":86,"line":17130},[84,62617,2516],{"class":477},[84,62619,62620],{"class":86,"line":17144},[84,62621,2729],{"emptyLinePlaceholder":403},[84,62623,62624,62626,62628,62631],{"class":86,"line":17149},[84,62625,62449],{"class":90},[84,62627,62500],{"class":90},[84,62629,62630],{"class":90}," .name",[84,62632,15901],{"class":477},[84,62634,62635,62637,62639,62642],{"class":86,"line":17155},[84,62636,57742],{"class":94},[84,62638,51764],{"class":477},[84,62640,62641],{"class":94},"#FB7299",[84,62643,1634],{"class":477},[84,62645,62646,62648,62650,62652,62654],{"class":86,"line":17160},[84,62647,55248],{"class":94},[84,62649,51764],{"class":477},[84,62651,1022],{"class":94},[84,62653,51819],{"class":473},[84,62655,1634],{"class":477},[84,62657,62658,62661,62663,62666],{"class":86,"line":17174},[84,62659,62660],{"class":94},"      font-weight",[84,62662,51764],{"class":477},[84,62664,62665],{"class":94},"bold",[84,62667,1634],{"class":477},[84,62669,62670],{"class":86,"line":17179},[84,62671,2516],{"class":477},[84,62673,62674],{"class":86,"line":17184},[84,62675,2729],{"emptyLinePlaceholder":403},[84,62677,62678,62680,62682,62685],{"class":86,"line":17198},[84,62679,62449],{"class":90},[84,62681,62500],{"class":90},[84,62683,62684],{"class":90}," .text",[84,62686,15901],{"class":477},[84,62688,62689,62691,62693,62696],{"class":86,"line":17210},[84,62690,57742],{"class":94},[84,62692,51764],{"class":477},[84,62694,62695],{"class":94},"#333",[84,62697,1634],{"class":477},[84,62699,62700,62702,62704,62706,62708,62710],{"class":86,"line":17215},[84,62701,55021],{"class":94},[84,62703,51764],{"class":477},[84,62705,919],{"class":94},[84,62707,51819],{"class":473},[84,62709,4422],{"class":94},[84,62711,1634],{"class":477},[84,62713,62714],{"class":86,"line":17228},[84,62715,2516],{"class":477},[84,62717,62718],{"class":86,"line":17233},[84,62719,2729],{"emptyLinePlaceholder":403},[84,62721,62722,62724,62726,62729],{"class":86,"line":17238},[84,62723,62449],{"class":90},[84,62725,62500],{"class":90},[84,62727,62728],{"class":90}," .time",[84,62730,15901],{"class":477},[84,62732,62733,62735,62737,62739],{"class":86,"line":17243},[84,62734,57742],{"class":94},[84,62736,51764],{"class":477},[84,62738,62396],{"class":94},[84,62740,1634],{"class":477},[84,62742,62743,62745,62747,62749,62751],{"class":86,"line":17256},[84,62744,55248],{"class":94},[84,62746,51764],{"class":477},[84,62748,971],{"class":94},[84,62750,51819],{"class":473},[84,62752,1634],{"class":477},[84,62754,62755],{"class":86,"line":17261},[84,62756,2516],{"class":477},[84,62758,62759,62761,62763],{"class":86,"line":32960},[84,62760,52744],{"class":477},[84,62762,389],{"class":51627},[84,62764,51634],{"class":477},[84,62766,62767,62769,62771],{"class":86,"line":32966},[84,62768,52112],{"class":477},[84,62770,51661],{"class":51627},[84,62772,51634],{"class":477},[84,62774,62775],{"class":86,"line":32972},[84,62776,2729],{"emptyLinePlaceholder":403},[84,62778,62779,62781,62783],{"class":86,"line":32978},[84,62780,1383],{"class":477},[84,62782,52127],{"class":51627},[84,62784,51634],{"class":477},[84,62786,62787,62789,62791,62793,62795,62798],{"class":86,"line":32984},[84,62788,52471],{"class":477},[84,62790,51938],{"class":51627},[84,62792,53813],{"class":90},[84,62794,523],{"class":477},[84,62796,62797],{"class":104},"\"wrapper\"",[84,62799,51634],{"class":477},[84,62801,62802,62804,62806,62808,62810,62813,62815,62817],{"class":86,"line":32995},[84,62803,51668],{"class":477},[84,62805,914],{"class":51627},[84,62807,53813],{"class":90},[84,62809,523],{"class":477},[84,62811,62812],{"class":104},"\"avatar\"",[84,62814,55640],{"class":477},[84,62816,914],{"class":51627},[84,62818,51634],{"class":477},[84,62820,62821,62823,62825,62827,62829,62832,62834,62836,62839,62841,62843,62845,62848,62850,62853,62855,62857],{"class":86,"line":33001},[84,62822,51668],{"class":477},[84,62824,54614],{"class":51627},[84,62826,15288],{"class":90},[84,62828,523],{"class":477},[84,62830,62831],{"class":104},"\"tx\"",[84,62833,61346],{"class":90},[84,62835,523],{"class":477},[84,62837,62838],{"class":104},"\"发一条友善的评论\"",[84,62840,54637],{"class":90},[84,62842,523],{"class":477},[84,62844,4030],{"class":104},[84,62846,62847],{"class":90}," maxlength",[84,62849,523],{"class":477},[84,62851,62852],{"class":104},"\"200\"",[84,62854,55640],{"class":477},[84,62856,54614],{"class":51627},[84,62858,51634],{"class":477},[84,62860,62861,62863,62865,62868,62870],{"class":86,"line":33021},[84,62862,51668],{"class":477},[84,62864,54213],{"class":51627},[84,62866,62867],{"class":477},">发布\u003C\u002F",[84,62869,54213],{"class":51627},[84,62871,51634],{"class":477},[84,62873,62874,62876,62878],{"class":86,"line":33027},[84,62875,52744],{"class":477},[84,62877,51938],{"class":51627},[84,62879,51634],{"class":477},[84,62881,62882,62884,62886,62888,62890,62892],{"class":86,"line":33038},[84,62883,52471],{"class":477},[84,62885,51938],{"class":51627},[84,62887,53813],{"class":90},[84,62889,523],{"class":477},[84,62891,62797],{"class":104},[84,62893,51634],{"class":477},[84,62895,62896,62898,62900,62902,62904,62907,62910,62912],{"class":86,"line":33044},[84,62897,51668],{"class":477},[84,62899,84],{"class":51627},[84,62901,53813],{"class":90},[84,62903,523],{"class":477},[84,62905,62906],{"class":104},"\"total\"",[84,62908,62909],{"class":477},">0\u002F200字\u003C\u002F",[84,62911,84],{"class":51627},[84,62913,51634],{"class":477},[84,62915,62916,62918,62920],{"class":86,"line":33050},[84,62917,52744],{"class":477},[84,62919,51938],{"class":51627},[84,62921,51634],{"class":477},[84,62923,62924,62926,62928,62930,62932,62935],{"class":86,"line":33056},[84,62925,52471],{"class":477},[84,62927,51938],{"class":51627},[84,62929,53813],{"class":90},[84,62931,523],{"class":477},[84,62933,62934],{"class":104},"\"list\"",[84,62936,51634],{"class":477},[84,62938,62939,62941,62943,62945,62947,62950,62953,62955,62958],{"class":86,"line":33062},[84,62940,51668],{"class":477},[84,62942,51938],{"class":51627},[84,62944,53813],{"class":90},[84,62946,523],{"class":477},[84,62948,62949],{"class":104},"\"item\"",[84,62951,62952],{"class":90}," style",[84,62954,523],{"class":477},[84,62956,62957],{"class":104},"\"display: none;\"",[84,62959,51634],{"class":477},[84,62961,62962,62964,62966,62968,62970,62972,62974,62976],{"class":86,"line":33068},[84,62963,55560],{"class":477},[84,62965,914],{"class":51627},[84,62967,53813],{"class":90},[84,62969,523],{"class":477},[84,62971,62812],{"class":104},[84,62973,55640],{"class":477},[84,62975,914],{"class":51627},[84,62977,51634],{"class":477},[84,62979,62980,62982,62984,62986,62988,62991],{"class":86,"line":33074},[84,62981,55560],{"class":477},[84,62983,51938],{"class":51627},[84,62985,53813],{"class":90},[84,62987,523],{"class":477},[84,62989,62990],{"class":104},"\"info\"",[84,62992,51634],{"class":477},[84,62994,62995,62997,62999,63001,63003,63006,63009,63011],{"class":86,"line":33080},[84,62996,55628],{"class":477},[84,62998,35],{"class":51627},[84,63000,53813],{"class":90},[84,63002,523],{"class":477},[84,63004,63005],{"class":104},"\"name\"",[84,63007,63008],{"class":477},">清风徐来\u003C\u002F",[84,63010,35],{"class":51627},[84,63012,51634],{"class":477},[84,63014,63015,63017,63019,63021,63023,63026,63029,63031],{"class":86,"line":33100},[84,63016,55628],{"class":477},[84,63018,35],{"class":51627},[84,63020,53813],{"class":90},[84,63022,523],{"class":477},[84,63024,63025],{"class":104},"\"text\"",[84,63027,63028],{"class":477},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[84,63030,35],{"class":51627},[84,63032,51634],{"class":477},[84,63034,63035,63037,63039,63041,63043,63046,63049,63051],{"class":86,"line":33106},[84,63036,55628],{"class":477},[84,63038,35],{"class":51627},[84,63040,53813],{"class":90},[84,63042,523],{"class":477},[84,63044,63045],{"class":104},"\"time\"",[84,63047,63048],{"class":477},">2022-10-10 20:29:21\u003C\u002F",[84,63050,35],{"class":51627},[84,63052,51634],{"class":477},[84,63054,63055,63057,63059],{"class":86,"line":33122},[84,63056,55733],{"class":477},[84,63058,51938],{"class":51627},[84,63060,51634],{"class":477},[84,63062,63063,63065,63067],{"class":86,"line":33128},[84,63064,52103],{"class":477},[84,63066,51938],{"class":51627},[84,63068,51634],{"class":477},[84,63070,63071,63073,63075],{"class":86,"line":33142},[84,63072,52744],{"class":477},[84,63074,51938],{"class":51627},[84,63076,51634],{"class":477},[84,63078,63079,63081,63083],{"class":86,"line":33148},[84,63080,52471],{"class":477},[84,63082,52140],{"class":51627},[84,63084,51634],{"class":477},[84,63086,63087,63089,63092,63094,63096,63098,63100,63103],{"class":86,"line":33163},[84,63088,11550],{"class":473},[84,63090,63091],{"class":94}," tx",[84,63093,13893],{"class":473},[84,63095,54722],{"class":477},[84,63097,54725],{"class":90},[84,63099,478],{"class":477},[84,63101,63102],{"class":104},"'#tx'",[84,63104,484],{"class":477},[84,63106,63107,63109,63112,63114,63116,63118,63120,63123],{"class":86,"line":33169},[84,63108,11550],{"class":473},[84,63110,63111],{"class":94}," total",[84,63113,13893],{"class":473},[84,63115,54722],{"class":477},[84,63117,54725],{"class":90},[84,63119,478],{"class":477},[84,63121,63122],{"class":104},"'.total'",[84,63124,484],{"class":477},[84,63126,63127],{"class":86,"line":33178},[84,63128,63129],{"class":328},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[84,63131,63132,63135,63137,63139,63141,63143,63145],{"class":86,"line":33184},[84,63133,63134],{"class":477},"    tx.",[84,63136,58139],{"class":90},[84,63138,478],{"class":477},[84,63140,61653],{"class":104},[84,63142,12764],{"class":477},[84,63144,54775],{"class":473},[84,63146,54778],{"class":477},[84,63148,63149,63152,63154],{"class":86,"line":33193},[84,63150,63151],{"class":477},"      total.style.opacity ",[84,63153,523],{"class":473},[84,63155,56025],{"class":94},[84,63157,63158],{"class":86,"line":33199},[84,63159,33788],{"class":477},[84,63161,63162],{"class":86,"line":33205},[84,63163,63164],{"class":328},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[84,63166,63167,63169,63171,63173,63175,63177,63179],{"class":86,"line":33214},[84,63168,63134],{"class":477},[84,63170,58139],{"class":90},[84,63172,478],{"class":477},[84,63174,61714],{"class":104},[84,63176,12764],{"class":477},[84,63178,54775],{"class":473},[84,63180,54778],{"class":477},[84,63182,63183,63185,63187],{"class":86,"line":33220},[84,63184,63151],{"class":477},[84,63186,523],{"class":473},[84,63188,47660],{"class":94},[84,63190,63191],{"class":86,"line":33231},[84,63192,33788],{"class":477},[84,63194,63195],{"class":86,"line":33237},[84,63196,63197],{"class":328},"    \u002F\u002F 3. 检测用户输入\n",[84,63199,63200,63202,63204,63206,63209,63211,63213],{"class":86,"line":33256},[84,63201,63134],{"class":477},[84,63203,58139],{"class":90},[84,63205,478],{"class":477},[84,63207,63208],{"class":104},"'input'",[84,63210,12764],{"class":477},[84,63212,54775],{"class":473},[84,63214,54778],{"class":477},[84,63216,63217],{"class":86,"line":33262},[84,63218,63219],{"class":328},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[84,63221,63222,63225,63227,63230,63233,63235,63238,63240,63242],{"class":86,"line":33273},[84,63223,63224],{"class":477},"      total.innerHTML ",[84,63226,523],{"class":473},[84,63228,63229],{"class":104}," `${",[84,63231,63232],{"class":477},"tx",[84,63234,1031],{"class":104},[84,63236,63237],{"class":477},"value",[84,63239,1031],{"class":104},[84,63241,52295],{"class":94},[84,63243,63244],{"class":104},"}\u002F200字`\n",[84,63246,63247],{"class":86,"line":33279},[84,63248,33788],{"class":477},[84,63250,63251],{"class":86,"line":33299},[84,63252,2729],{"emptyLinePlaceholder":403},[84,63254,63255],{"class":86,"line":33315},[84,63256,63257],{"class":328},"    \u002F\u002F const str = 'andy'\n",[84,63259,63260],{"class":86,"line":33321},[84,63261,63262],{"class":328},"    \u002F\u002F console.log(str.length)\n",[84,63264,63265,63267,63269],{"class":86,"line":33335},[84,63266,52744],{"class":477},[84,63268,52140],{"class":51627},[84,63270,51634],{"class":477},[84,63272,63273,63275,63277],{"class":86,"line":33341},[84,63274,52112],{"class":477},[84,63276,52127],{"class":51627},[84,63278,51634],{"class":477},[84,63280,63281],{"class":86,"line":33347},[84,63282,2729],{"emptyLinePlaceholder":403},[84,63284,63285,63287,63289],{"class":86,"line":33358},[84,63286,52112],{"class":477},[84,63288,50962],{"class":51627},[84,63290,51634],{"class":477},[22327,63292,63294],{"id":63293},"_3254-change事件","3.2.5.4 change事件",[35,63296,63297],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[35,63299,63300],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[35,63302,63303],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[75,63305,63307],{"className":50960,"code":63306,"language":50962,"meta":66,"style":66},"\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",[81,63308,63309,63319,63333,63337,63345,63359,63379,63391,63399,63403,63411,63425,63433,63451,63469,63481,63485,63493,63501,63505],{"__ignoreMap":66},[84,63310,63311,63313,63315,63317],{"class":86,"line":87},[84,63312,51624],{"class":477},[84,63314,51628],{"class":51627},[84,63316,51631],{"class":90},[84,63318,51634],{"class":477},[84,63320,63321,63323,63325,63327,63329,63331],{"class":86,"line":98},[84,63322,1383],{"class":477},[84,63324,50962],{"class":51627},[84,63326,51643],{"class":90},[84,63328,523],{"class":477},[84,63330,51648],{"class":104},[84,63332,51634],{"class":477},[84,63334,63335],{"class":86,"line":70},[84,63336,2729],{"emptyLinePlaceholder":403},[84,63338,63339,63341,63343],{"class":86,"line":120},[84,63340,1383],{"class":477},[84,63342,51661],{"class":51627},[84,63344,51634],{"class":477},[84,63346,63347,63349,63351,63353,63355,63357],{"class":86,"line":131},[84,63348,52471],{"class":477},[84,63350,51671],{"class":51627},[84,63352,51674],{"class":90},[84,63354,523],{"class":477},[84,63356,51679],{"class":104},[84,63358,51634],{"class":477},[84,63360,63361,63363,63365,63367,63369,63371,63373,63375,63377],{"class":86,"line":145},[84,63362,52471],{"class":477},[84,63364,51671],{"class":51627},[84,63366,15249],{"class":90},[84,63368,523],{"class":477},[84,63370,51718],{"class":104},[84,63372,51698],{"class":90},[84,63374,523],{"class":477},[84,63376,51725],{"class":104},[84,63378,51634],{"class":477},[84,63380,63381,63383,63385,63387,63389],{"class":86,"line":156},[84,63382,52471],{"class":477},[84,63384,51734],{"class":51627},[84,63386,51737],{"class":477},[84,63388,51734],{"class":51627},[84,63390,51634],{"class":477},[84,63392,63393,63395,63397],{"class":86,"line":164},[84,63394,52112],{"class":477},[84,63396,51661],{"class":51627},[84,63398,51634],{"class":477},[84,63400,63401],{"class":86,"line":175},[84,63402,2729],{"emptyLinePlaceholder":403},[84,63404,63405,63407,63409],{"class":86,"line":185},[84,63406,1383],{"class":477},[84,63408,52127],{"class":51627},[84,63410,51634],{"class":477},[84,63412,63413,63415,63417,63419,63421,63423],{"class":86,"line":195},[84,63414,52471],{"class":477},[84,63416,54147],{"class":51627},[84,63418,54150],{"class":90},[84,63420,523],{"class":477},[84,63422,63025],{"class":104},[84,63424,51634],{"class":477},[84,63426,63427,63429,63431],{"class":86,"line":206},[84,63428,52471],{"class":477},[84,63430,52140],{"class":51627},[84,63432,51634],{"class":477},[84,63434,63435,63437,63439,63441,63443,63445,63447,63449],{"class":86,"line":217},[84,63436,11550],{"class":473},[84,63438,60931],{"class":94},[84,63440,13893],{"class":473},[84,63442,54722],{"class":477},[84,63444,54725],{"class":90},[84,63446,478],{"class":477},[84,63448,63208],{"class":104},[84,63450,484],{"class":477},[84,63452,63453,63456,63458,63460,63463,63465,63467],{"class":86,"line":227},[84,63454,63455],{"class":477},"    input.",[84,63457,58139],{"class":90},[84,63459,478],{"class":477},[84,63461,63462],{"class":104},"'change'",[84,63464,12764],{"class":477},[84,63466,54775],{"class":473},[84,63468,54778],{"class":477},[84,63470,63471,63473,63475,63477,63479],{"class":86,"line":238},[84,63472,58570],{"class":477},[84,63474,58573],{"class":90},[84,63476,478],{"class":477},[84,63478,1066],{"class":94},[84,63480,484],{"class":477},[84,63482,63483],{"class":86,"line":249},[84,63484,33788],{"class":477},[84,63486,63487,63489,63491],{"class":86,"line":262},[84,63488,52744],{"class":477},[84,63490,52140],{"class":51627},[84,63492,51634],{"class":477},[84,63494,63495,63497,63499],{"class":86,"line":273},[84,63496,52112],{"class":477},[84,63498,52127],{"class":51627},[84,63500,51634],{"class":477},[84,63502,63503],{"class":86,"line":283},[84,63504,2729],{"emptyLinePlaceholder":403},[84,63506,63507,63509,63511],{"class":86,"line":294},[84,63508,52112],{"class":477},[84,63510,50962],{"class":51627},[84,63512,51634],{"class":477},[35,63514,63515],{},"总结：内容发生改变才回去触发",[23,63517,63519],{"id":63518},"_326-事件对象","3.2.6 事件对象",[22327,63521,63523],{"id":63522},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[35,63525,63526],{},[64,63527],{"alt":66,"src":63528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[35,63530,63531],{},[64,63532],{"alt":66,"src":63533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[35,63535,63536],{},"点击一次，就输出了事件对象，它是个对象",[35,63538,63539],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[35,63541,63542],{},[64,63543],{"alt":66,"src":63544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22327,63546,63548],{"id":63547},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[35,63550,63551],{},[64,63552],{"alt":66,"src":63553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[35,63555,63556],{},"实现按特殊字符才是实现打印输出效果：",[75,63558,63560],{"className":53394,"code":63559,"language":53396,"meta":66,"style":66},"\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",[81,63561,63562,63570,63575,63589,63597,63602,63607,63612,63617,63622,63627,63632,63637,63642,63646,63650,63658],{"__ignoreMap":66},[84,63563,63564,63566,63568],{"class":86,"line":87},[84,63565,1383],{"class":477},[84,63567,52127],{"class":51627},[84,63569,51634],{"class":477},[84,63571,63572],{"class":86,"line":98},[84,63573,63574],{"class":328},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[84,63576,63577,63579,63581,63583,63585,63587],{"class":86,"line":70},[84,63578,52471],{"class":477},[84,63580,54147],{"class":51627},[84,63582,54150],{"class":90},[84,63584,523],{"class":477},[84,63586,63025],{"class":104},[84,63588,51634],{"class":477},[84,63590,63591,63593,63595],{"class":86,"line":120},[84,63592,52471],{"class":477},[84,63594,52140],{"class":51627},[84,63596,51634],{"class":477},[84,63598,63599],{"class":86,"line":131},[84,63600,63601],{"class":477},"    \u002F\u002F const btn = document.querySelector('button')\n",[84,63603,63604],{"class":86,"line":145},[84,63605,63606],{"class":477},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[84,63608,63609],{"class":86,"line":156},[84,63610,63611],{"class":477},"    \u002F\u002F   console.log(e);\n",[84,63613,63614],{"class":86,"line":164},[84,63615,63616],{"class":477},"    \u002F\u002F })\n",[84,63618,63619],{"class":86,"line":175},[84,63620,63621],{"class":477},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[84,63623,63624],{"class":86,"line":185},[84,63625,63626],{"class":477},"    const input = document.querySelector('input')\n",[84,63628,63629],{"class":86,"line":195},[84,63630,63631],{"class":477},"    input.addEventListener('keyup', function (e) {\n",[84,63633,63634],{"class":86,"line":206},[84,63635,63636],{"class":477},"      if (e.key === 'Enter') {\n",[84,63638,63639],{"class":86,"line":217},[84,63640,63641],{"class":477},"        console.log('我按下了回车键')\n",[84,63643,63644],{"class":86,"line":227},[84,63645,52725],{"class":477},[84,63647,63648],{"class":86,"line":238},[84,63649,33788],{"class":477},[84,63651,63652,63654,63656],{"class":86,"line":249},[84,63653,52744],{"class":477},[84,63655,52140],{"class":51627},[84,63657,51634],{"class":477},[84,63659,63660,63662,63664],{"class":86,"line":262},[84,63661,52112],{"class":477},[84,63663,52127],{"class":51627},[84,63665,51634],{"class":477},[22327,63667,63669],{"id":63668},"_3263-trim方法","3.2.6.3 trim方法",[35,63671,63672],{},[64,63673],{"alt":66,"src":63674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[35,63676,63677],{},[64,63678],{"alt":66,"src":63679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[35,63681,63682],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[35,63684,63685],{},"str.trim()",[23,63687,63689],{"id":63688},"_327-环境对象","3.2.7 环境对象",[35,63691,63692],{},[64,63693],{"alt":66,"src":63694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[35,63696,63697],{},[64,63698],{"alt":66,"src":63699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[35,63701,63702],{},[64,63703],{"alt":66,"src":63704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[35,63706,63707],{},"实际函数调用是window.fn()",[35,63709,63710],{},"普通函数里面this指向的是window",[1480,63712,63713,63716,63719],{},[31,63714,63715],{},"在普通函数下，this指向的是window",[31,63717,63718],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[31,63720,63721],{},"箭头函数没有this",[35,63723,63724],{},"粗略记法就是：谁调用，this就指向谁",[35,63726,63727],{},[64,63728],{"alt":66,"src":63729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[35,63731,63732],{},[64,63733],{"alt":66,"src":63734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[35,63736,63737],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[35,63739,63740],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[75,63742,63744],{"className":53394,"code":63743,"language":53396,"meta":66,"style":66},"\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",[81,63745,63746,63754,63766,63774,63779,63784,63789,63794,63798,63806],{"__ignoreMap":66},[84,63747,63748,63750,63752],{"class":86,"line":87},[84,63749,1383],{"class":477},[84,63751,52127],{"class":51627},[84,63753,51634],{"class":477},[84,63755,63756,63758,63760,63762,63764],{"class":86,"line":98},[84,63757,52471],{"class":477},[84,63759,54213],{"class":51627},[84,63761,54219],{"class":477},[84,63763,54213],{"class":51627},[84,63765,51634],{"class":477},[84,63767,63768,63770,63772],{"class":86,"line":70},[84,63769,52471],{"class":477},[84,63771,52140],{"class":51627},[84,63773,51634],{"class":477},[84,63775,63776],{"class":86,"line":120},[84,63777,63778],{"class":477},"    const button = document.querySelector('button')\n",[84,63780,63781],{"class":86,"line":131},[84,63782,63783],{"class":477},"    button.addEventListener('click', function () {\n",[84,63785,63786],{"class":86,"line":145},[84,63787,63788],{"class":477},"      \u002F\u002F console.log(this);\n",[84,63790,63791],{"class":86,"line":156},[84,63792,63793],{"class":477},"      this.style.color = 'pink'\n",[84,63795,63796],{"class":86,"line":164},[84,63797,33788],{"class":477},[84,63799,63800,63802,63804],{"class":86,"line":175},[84,63801,52744],{"class":477},[84,63803,52140],{"class":51627},[84,63805,51634],{"class":477},[84,63807,63808,63810,63812],{"class":86,"line":185},[84,63809,52112],{"class":477},[84,63811,52127],{"class":51627},[84,63813,51634],{"class":477},[23,63815,63817],{"id":63816},"_328-回调函数","3.2.8 回调函数",[35,63819,63820],{},[64,63821],{"alt":66,"src":63822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[35,63824,63825],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[35,63827,11661],{},[1480,63829,63830,63833,63836],{},[31,63831,63832],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[31,63834,63835],{},"回调函数本质还是函数，只不过把它当成参数使用",[31,63837,63838],{},"使用匿名函数做为回调函数比较常见",[23,63840,63842],{"id":63841},"_329-tab栏切换","3.2.9 tab栏切换",[35,63844,63845],{},[64,63846],{"alt":66,"src":63847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[75,63849,63851],{"className":50960,"code":63850,"language":50962,"meta":66,"style":66},"\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",[81,63852,63853,63863,63877,63881,63889,63903,63923,63943,63956,63964,63970,63980,63990,63994,63998,64005,64018,64031,64043,64059,64063,64067,64074,64086,64098,64110,64120,64130,64134,64138,64147,64159,64170,64182,64186,64190,64198,64208,64218,64228,64232,64236,64246,64260,64272,64276,64280,64292,64303,64320,64330,64334,64338,64353,64364,64374,64378,64382,64389,64404,64408,64412,64420,64430,64434,64438,64447,64457,64461,64469,64477,64481,64489,64504,64519,64532,64540,64574,64601,64628,64655,64682,64690,64698,64713,64750,64785,64820,64855,64890,64898,64906,64914,64919,64924,64944,64949,64978,64983,64988,65006,65011,65016,65021,65043,65048,65064,65068,65073,65078,65099,65104,65133,65137,65142,65146,65154,65162,65166],{"__ignoreMap":66},[84,63854,63855,63857,63859,63861],{"class":86,"line":87},[84,63856,51624],{"class":477},[84,63858,51628],{"class":51627},[84,63860,51631],{"class":90},[84,63862,51634],{"class":477},[84,63864,63865,63867,63869,63871,63873,63875],{"class":86,"line":98},[84,63866,1383],{"class":477},[84,63868,50962],{"class":51627},[84,63870,51643],{"class":90},[84,63872,523],{"class":477},[84,63874,51648],{"class":104},[84,63876,51634],{"class":477},[84,63878,63879],{"class":86,"line":70},[84,63880,2729],{"emptyLinePlaceholder":403},[84,63882,63883,63885,63887],{"class":86,"line":120},[84,63884,1383],{"class":477},[84,63886,51661],{"class":51627},[84,63888,51634],{"class":477},[84,63890,63891,63893,63895,63897,63899,63901],{"class":86,"line":131},[84,63892,52471],{"class":477},[84,63894,51671],{"class":51627},[84,63896,51674],{"class":90},[84,63898,523],{"class":477},[84,63900,51679],{"class":104},[84,63902,59453],{"class":477},[84,63904,63905,63907,63909,63911,63913,63915,63917,63919,63921],{"class":86,"line":145},[84,63906,52471],{"class":477},[84,63908,51671],{"class":51627},[84,63910,51690],{"class":90},[84,63912,523],{"class":477},[84,63914,51695],{"class":104},[84,63916,51698],{"class":90},[84,63918,523],{"class":477},[84,63920,51703],{"class":104},[84,63922,59453],{"class":477},[84,63924,63925,63927,63929,63931,63933,63935,63937,63939,63941],{"class":86,"line":156},[84,63926,52471],{"class":477},[84,63928,51671],{"class":51627},[84,63930,15249],{"class":90},[84,63932,523],{"class":477},[84,63934,51718],{"class":104},[84,63936,51698],{"class":90},[84,63938,523],{"class":477},[84,63940,51725],{"class":104},[84,63942,59453],{"class":477},[84,63944,63945,63947,63949,63952,63954],{"class":86,"line":164},[84,63946,52471],{"class":477},[84,63948,51734],{"class":51627},[84,63950,63951],{"class":477},">tab栏切换\u003C\u002F",[84,63953,51734],{"class":51627},[84,63955,51634],{"class":477},[84,63957,63958,63960,63962],{"class":86,"line":175},[84,63959,52471],{"class":477},[84,63961,389],{"class":51627},[84,63963,51634],{"class":477},[84,63965,63966,63968],{"class":86,"line":185},[84,63967,6732],{"class":51627},[84,63969,15901],{"class":477},[84,63971,63972,63974,63976,63978],{"class":86,"line":195},[84,63973,55032],{"class":94},[84,63975,51764],{"class":477},[84,63977,666],{"class":94},[84,63979,1634],{"class":477},[84,63981,63982,63984,63986,63988],{"class":86,"line":206},[84,63983,55021],{"class":94},[84,63985,51764],{"class":477},[84,63987,666],{"class":94},[84,63989,1634],{"class":477},[84,63991,63992],{"class":86,"line":217},[84,63993,2516],{"class":477},[84,63995,63996],{"class":86,"line":227},[84,63997,2729],{"emptyLinePlaceholder":403},[84,63999,64000,64003],{"class":86,"line":238},[84,64001,64002],{"class":90},"    .tab",[84,64004,15901],{"class":477},[84,64006,64007,64009,64011,64014,64016],{"class":86,"line":249},[84,64008,55097],{"class":94},[84,64010,51764],{"class":477},[84,64012,64013],{"class":94},"590",[84,64015,51819],{"class":473},[84,64017,1634],{"class":477},[84,64019,64020,64022,64024,64027,64029],{"class":86,"line":262},[84,64021,55111],{"class":94},[84,64023,51764],{"class":477},[84,64025,64026],{"class":94},"340",[84,64028,51819],{"class":473},[84,64030,1634],{"class":477},[84,64032,64033,64035,64037,64039,64041],{"class":86,"line":273},[84,64034,55032],{"class":94},[84,64036,51764],{"class":477},[84,64038,1173],{"class":94},[84,64040,51819],{"class":473},[84,64042,1634],{"class":477},[84,64044,64045,64047,64049,64051,64053,64055,64057],{"class":86,"line":283},[84,64046,62303],{"class":94},[84,64048,51764],{"class":477},[84,64050,692],{"class":94},[84,64052,51819],{"class":473},[84,64054,51848],{"class":94},[84,64056,62570],{"class":94},[84,64058,1634],{"class":477},[84,64060,64061],{"class":86,"line":294},[84,64062,2516],{"class":477},[84,64064,64065],{"class":86,"line":2028},[84,64066,2729],{"emptyLinePlaceholder":403},[84,64068,64069,64072],{"class":86,"line":2057},[84,64070,64071],{"class":90},"    .tab-nav",[84,64073,15901],{"class":477},[84,64075,64076,64078,64080,64082,64084],{"class":86,"line":2062},[84,64077,55097],{"class":94},[84,64079,51764],{"class":477},[84,64081,784],{"class":94},[84,64083,801],{"class":473},[84,64085,1634],{"class":477},[84,64087,64088,64090,64092,64094,64096],{"class":86,"line":2079},[84,64089,55111],{"class":94},[84,64091,51764],{"class":477},[84,64093,1380],{"class":94},[84,64095,51819],{"class":473},[84,64097,1634],{"class":477},[84,64099,64100,64102,64104,64106,64108],{"class":86,"line":2084},[84,64101,57685],{"class":94},[84,64103,51764],{"class":477},[84,64105,1380],{"class":94},[84,64107,51819],{"class":473},[84,64109,1634],{"class":477},[84,64111,64112,64114,64116,64118],{"class":86,"line":2089},[84,64113,55335],{"class":94},[84,64115,51764],{"class":477},[84,64117,51804],{"class":94},[84,64119,1634],{"class":477},[84,64121,64122,64124,64126,64128],{"class":86,"line":2094},[84,64123,55346],{"class":94},[84,64125,51764],{"class":477},[84,64127,51995],{"class":94},[84,64129,1634],{"class":477},[84,64131,64132],{"class":86,"line":2108},[84,64133,2516],{"class":477},[84,64135,64136],{"class":86,"line":2113},[84,64137,2729],{"emptyLinePlaceholder":403},[84,64139,64140,64142,64145],{"class":86,"line":2906},[84,64141,64071],{"class":90},[84,64143,64144],{"class":51627}," h3",[84,64146,15901],{"class":477},[84,64148,64149,64151,64153,64155,64157],{"class":86,"line":2920},[84,64150,55248],{"class":94},[84,64152,51764],{"class":477},[84,64154,1273],{"class":94},[84,64156,51819],{"class":473},[84,64158,1634],{"class":477},[84,64160,64161,64163,64165,64168],{"class":86,"line":2928},[84,64162,62660],{"class":94},[84,64164,51764],{"class":477},[84,64166,64167],{"class":94},"normal",[84,64169,1634],{"class":477},[84,64171,64172,64174,64176,64178,64180],{"class":86,"line":2933},[84,64173,62326],{"class":94},[84,64175,51764],{"class":477},[84,64177,1173],{"class":94},[84,64179,51819],{"class":473},[84,64181,1634],{"class":477},[84,64183,64184],{"class":86,"line":2939},[84,64185,2516],{"class":477},[84,64187,64188],{"class":86,"line":2945},[84,64189,2729],{"emptyLinePlaceholder":403},[84,64191,64192,64194,64196],{"class":86,"line":2950},[84,64193,64071],{"class":90},[84,64195,61618],{"class":51627},[84,64197,15901],{"class":477},[84,64199,64200,64202,64204,64206],{"class":86,"line":8277},[84,64201,55058],{"class":94},[84,64203,51764],{"class":477},[84,64205,55063],{"class":94},[84,64207,1634],{"class":477},[84,64209,64210,64212,64214,64216],{"class":86,"line":8301},[84,64211,55335],{"class":94},[84,64213,51764],{"class":477},[84,64215,51804],{"class":94},[84,64217,1634],{"class":477},[84,64219,64220,64222,64224,64226],{"class":86,"line":8306},[84,64221,55346],{"class":94},[84,64223,51764],{"class":477},[84,64225,51907],{"class":94},[84,64227,1634],{"class":477},[84,64229,64230],{"class":86,"line":8312},[84,64231,2516],{"class":477},[84,64233,64234],{"class":86,"line":8339},[84,64235,2729],{"emptyLinePlaceholder":403},[84,64237,64238,64240,64242,64244],{"class":86,"line":8344},[84,64239,64071],{"class":90},[84,64241,61618],{"class":51627},[84,64243,55401],{"class":51627},[84,64245,15901],{"class":477},[84,64247,64248,64250,64252,64254,64256,64258],{"class":86,"line":8350},[84,64249,55032],{"class":94},[84,64251,51764],{"class":477},[84,64253,666],{"class":94},[84,64255,9279],{"class":94},[84,64257,51819],{"class":473},[84,64259,1634],{"class":477},[84,64261,64262,64264,64266,64268,64270],{"class":86,"line":8362},[84,64263,55248],{"class":94},[84,64265,51764],{"class":477},[84,64267,1022],{"class":94},[84,64269,51819],{"class":473},[84,64271,1634],{"class":477},[84,64273,64274],{"class":86,"line":8374},[84,64275,2516],{"class":477},[84,64277,64278],{"class":86,"line":8386},[84,64279,2729],{"emptyLinePlaceholder":403},[84,64281,64282,64284,64286,64288,64290],{"class":86,"line":10045},[84,64283,64071],{"class":90},[84,64285,61618],{"class":51627},[84,64287,55401],{"class":51627},[84,64289,1739],{"class":51627},[84,64291,15901],{"class":477},[84,64293,64294,64297,64299,64301],{"class":86,"line":10070},[84,64295,64296],{"class":94},"      text-decoration",[84,64298,51764],{"class":477},[84,64300,55063],{"class":94},[84,64302,1634],{"class":477},[84,64304,64305,64307,64309,64311,64313,64315,64318],{"class":86,"line":10093},[84,64306,62558],{"class":94},[84,64308,51764],{"class":477},[84,64310,553],{"class":94},[84,64312,51819],{"class":473},[84,64314,51848],{"class":94},[84,64316,64317],{"class":94}," transparent",[84,64319,1634],{"class":477},[84,64321,64322,64324,64326,64328],{"class":86,"line":10117},[84,64323,57742],{"class":94},[84,64325,51764],{"class":477},[84,64327,62695],{"class":94},[84,64329,1634],{"class":477},[84,64331,64332],{"class":86,"line":10122},[84,64333,2516],{"class":477},[84,64335,64336],{"class":86,"line":10127},[84,64337,2729],{"emptyLinePlaceholder":403},[84,64339,64340,64342,64344,64346,64348,64351],{"class":86,"line":10132},[84,64341,64071],{"class":90},[84,64343,61618],{"class":51627},[84,64345,55401],{"class":51627},[84,64347,1739],{"class":51627},[84,64349,64350],{"class":90},".active",[84,64352,15901],{"class":477},[84,64354,64355,64357,64359,64362],{"class":86,"line":10141},[84,64356,62117],{"class":94},[84,64358,51764],{"class":477},[84,64360,64361],{"class":94},"#e1251b",[84,64363,1634],{"class":477},[84,64365,64366,64368,64370,64372],{"class":86,"line":10146},[84,64367,57742],{"class":94},[84,64369,51764],{"class":477},[84,64371,64361],{"class":94},[84,64373,1634],{"class":477},[84,64375,64376],{"class":86,"line":10152},[84,64377,2516],{"class":477},[84,64379,64380],{"class":86,"line":10173},[84,64381,2729],{"emptyLinePlaceholder":403},[84,64383,64384,64387],{"class":86,"line":10179},[84,64385,64386],{"class":90},"    .tab-content",[84,64388,15901],{"class":477},[84,64390,64391,64393,64395,64397,64400,64402],{"class":86,"line":10193},[84,64392,55021],{"class":94},[84,64394,51764],{"class":477},[84,64396,666],{"class":94},[84,64398,64399],{"class":94}," 16",[84,64401,51819],{"class":473},[84,64403,1634],{"class":477},[84,64405,64406],{"class":86,"line":10199},[84,64407,2516],{"class":477},[84,64409,64410],{"class":86,"line":10226},[84,64411,2729],{"emptyLinePlaceholder":403},[84,64413,64414,64416,64418],{"class":86,"line":10235},[84,64415,64386],{"class":90},[84,64417,62500],{"class":90},[84,64419,15901],{"class":477},[84,64421,64422,64424,64426,64428],{"class":86,"line":10241},[84,64423,55335],{"class":94},[84,64425,51764],{"class":477},[84,64427,55063],{"class":94},[84,64429,1634],{"class":477},[84,64431,64432],{"class":86,"line":10249},[84,64433,2516],{"class":477},[84,64435,64436],{"class":86,"line":10254},[84,64437,2729],{"emptyLinePlaceholder":403},[84,64439,64440,64442,64445],{"class":86,"line":16933},[84,64441,64386],{"class":90},[84,64443,64444],{"class":90}," .item.active",[84,64446,15901],{"class":477},[84,64448,64449,64451,64453,64455],{"class":86,"line":16939},[84,64450,55335],{"class":94},[84,64452,51764],{"class":477},[84,64454,61195],{"class":94},[84,64456,1634],{"class":477},[84,64458,64459],{"class":86,"line":16962},[84,64460,2516],{"class":477},[84,64462,64463,64465,64467],{"class":86,"line":16968},[84,64464,52744],{"class":477},[84,64466,389],{"class":51627},[84,64468,51634],{"class":477},[84,64470,64471,64473,64475],{"class":86,"line":16991},[84,64472,52112],{"class":477},[84,64474,51661],{"class":51627},[84,64476,51634],{"class":477},[84,64478,64479],{"class":86,"line":17005},[84,64480,2729],{"emptyLinePlaceholder":403},[84,64482,64483,64485,64487],{"class":86,"line":17025},[84,64484,1383],{"class":477},[84,64486,52127],{"class":51627},[84,64488,51634],{"class":477},[84,64490,64491,64493,64495,64497,64499,64502],{"class":86,"line":17031},[84,64492,52471],{"class":477},[84,64494,51938],{"class":51627},[84,64496,53813],{"class":90},[84,64498,523],{"class":477},[84,64500,64501],{"class":104},"\"tab\"",[84,64503,51634],{"class":477},[84,64505,64506,64508,64510,64512,64514,64517],{"class":86,"line":17042},[84,64507,51668],{"class":477},[84,64509,51938],{"class":51627},[84,64511,53813],{"class":90},[84,64513,523],{"class":477},[84,64515,64516],{"class":104},"\"tab-nav\"",[84,64518,51634],{"class":477},[84,64520,64521,64523,64525,64528,64530],{"class":86,"line":17065},[84,64522,55560],{"class":477},[84,64524,23],{"class":51627},[84,64526,64527],{"class":477},">每日特价\u003C\u002F",[84,64529,23],{"class":51627},[84,64531,51634],{"class":477},[84,64533,64534,64536,64538],{"class":86,"line":17087},[84,64535,55560],{"class":477},[84,64537,1480],{"class":51627},[84,64539,51634],{"class":477},[84,64541,64542,64544,64546,64548,64550,64552,64554,64556,64558,64560,64563,64566,64568,64570,64572],{"class":86,"line":17092},[84,64543,55628],{"class":477},[84,64545,31],{"class":51627},[84,64547,61378],{"class":477},[84,64549,39],{"class":51627},[84,64551,53813],{"class":90},[84,64553,523],{"class":477},[84,64555,60032],{"class":104},[84,64557,61383],{"class":90},[84,64559,523],{"class":477},[84,64561,64562],{"class":104},"\"javascript:;\"",[84,64564,64565],{"class":477},">精选\u003C\u002F",[84,64567,39],{"class":51627},[84,64569,55640],{"class":477},[84,64571,31],{"class":51627},[84,64573,51634],{"class":477},[84,64575,64576,64578,64580,64582,64584,64586,64588,64590,64593,64595,64597,64599],{"class":86,"line":17098},[84,64577,55628],{"class":477},[84,64579,31],{"class":51627},[84,64581,61378],{"class":477},[84,64583,39],{"class":51627},[84,64585,61383],{"class":90},[84,64587,523],{"class":477},[84,64589,64562],{"class":104},[84,64591,64592],{"class":477},">美食\u003C\u002F",[84,64594,39],{"class":51627},[84,64596,55640],{"class":477},[84,64598,31],{"class":51627},[84,64600,51634],{"class":477},[84,64602,64603,64605,64607,64609,64611,64613,64615,64617,64620,64622,64624,64626],{"class":86,"line":17112},[84,64604,55628],{"class":477},[84,64606,31],{"class":51627},[84,64608,61378],{"class":477},[84,64610,39],{"class":51627},[84,64612,61383],{"class":90},[84,64614,523],{"class":477},[84,64616,64562],{"class":104},[84,64618,64619],{"class":477},">百货\u003C\u002F",[84,64621,39],{"class":51627},[84,64623,55640],{"class":477},[84,64625,31],{"class":51627},[84,64627,51634],{"class":477},[84,64629,64630,64632,64634,64636,64638,64640,64642,64644,64647,64649,64651,64653],{"class":86,"line":17125},[84,64631,55628],{"class":477},[84,64633,31],{"class":51627},[84,64635,61378],{"class":477},[84,64637,39],{"class":51627},[84,64639,61383],{"class":90},[84,64641,523],{"class":477},[84,64643,64562],{"class":104},[84,64645,64646],{"class":477},">个护\u003C\u002F",[84,64648,39],{"class":51627},[84,64650,55640],{"class":477},[84,64652,31],{"class":51627},[84,64654,51634],{"class":477},[84,64656,64657,64659,64661,64663,64665,64667,64669,64671,64674,64676,64678,64680],{"class":86,"line":17130},[84,64658,55628],{"class":477},[84,64660,31],{"class":51627},[84,64662,61378],{"class":477},[84,64664,39],{"class":51627},[84,64666,61383],{"class":90},[84,64668,523],{"class":477},[84,64670,64562],{"class":104},[84,64672,64673],{"class":477},">预告\u003C\u002F",[84,64675,39],{"class":51627},[84,64677,55640],{"class":477},[84,64679,31],{"class":51627},[84,64681,51634],{"class":477},[84,64683,64684,64686,64688],{"class":86,"line":17144},[84,64685,55733],{"class":477},[84,64687,1480],{"class":51627},[84,64689,51634],{"class":477},[84,64691,64692,64694,64696],{"class":86,"line":17149},[84,64693,52103],{"class":477},[84,64695,51938],{"class":51627},[84,64697,51634],{"class":477},[84,64699,64700,64702,64704,64706,64708,64711],{"class":86,"line":17155},[84,64701,51668],{"class":477},[84,64703,51938],{"class":51627},[84,64705,53813],{"class":90},[84,64707,523],{"class":477},[84,64709,64710],{"class":104},"\"tab-content\"",[84,64712,51634],{"class":477},[84,64714,64715,64717,64719,64721,64723,64726,64728,64730,64732,64734,64737,64739,64741,64743,64746,64748],{"class":86,"line":17160},[84,64716,55560],{"class":477},[84,64718,51938],{"class":51627},[84,64720,53813],{"class":90},[84,64722,523],{"class":477},[84,64724,64725],{"class":104},"\"item active\"",[84,64727,61378],{"class":477},[84,64729,64],{"class":51627},[84,64731,55565],{"class":90},[84,64733,523],{"class":477},[84,64735,64736],{"class":104},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[84,64738,55573],{"class":90},[84,64740,523],{"class":477},[84,64742,7981],{"class":104},[84,64744,64745],{"class":477}," \u002F>\u003C\u002F",[84,64747,51938],{"class":51627},[84,64749,51634],{"class":477},[84,64751,64752,64754,64756,64758,64760,64762,64764,64766,64768,64770,64773,64775,64777,64779,64781,64783],{"class":86,"line":17174},[84,64753,55560],{"class":477},[84,64755,51938],{"class":51627},[84,64757,53813],{"class":90},[84,64759,523],{"class":477},[84,64761,62949],{"class":104},[84,64763,61378],{"class":477},[84,64765,64],{"class":51627},[84,64767,55565],{"class":90},[84,64769,523],{"class":477},[84,64771,64772],{"class":104},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[84,64774,55573],{"class":90},[84,64776,523],{"class":477},[84,64778,7981],{"class":104},[84,64780,64745],{"class":477},[84,64782,51938],{"class":51627},[84,64784,51634],{"class":477},[84,64786,64787,64789,64791,64793,64795,64797,64799,64801,64803,64805,64808,64810,64812,64814,64816,64818],{"class":86,"line":17179},[84,64788,55560],{"class":477},[84,64790,51938],{"class":51627},[84,64792,53813],{"class":90},[84,64794,523],{"class":477},[84,64796,62949],{"class":104},[84,64798,61378],{"class":477},[84,64800,64],{"class":51627},[84,64802,55565],{"class":90},[84,64804,523],{"class":477},[84,64806,64807],{"class":104},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[84,64809,55573],{"class":90},[84,64811,523],{"class":477},[84,64813,7981],{"class":104},[84,64815,64745],{"class":477},[84,64817,51938],{"class":51627},[84,64819,51634],{"class":477},[84,64821,64822,64824,64826,64828,64830,64832,64834,64836,64838,64840,64843,64845,64847,64849,64851,64853],{"class":86,"line":17184},[84,64823,55560],{"class":477},[84,64825,51938],{"class":51627},[84,64827,53813],{"class":90},[84,64829,523],{"class":477},[84,64831,62949],{"class":104},[84,64833,61378],{"class":477},[84,64835,64],{"class":51627},[84,64837,55565],{"class":90},[84,64839,523],{"class":477},[84,64841,64842],{"class":104},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[84,64844,55573],{"class":90},[84,64846,523],{"class":477},[84,64848,7981],{"class":104},[84,64850,64745],{"class":477},[84,64852,51938],{"class":51627},[84,64854,51634],{"class":477},[84,64856,64857,64859,64861,64863,64865,64867,64869,64871,64873,64875,64878,64880,64882,64884,64886,64888],{"class":86,"line":17198},[84,64858,55560],{"class":477},[84,64860,51938],{"class":51627},[84,64862,53813],{"class":90},[84,64864,523],{"class":477},[84,64866,62949],{"class":104},[84,64868,61378],{"class":477},[84,64870,64],{"class":51627},[84,64872,55565],{"class":90},[84,64874,523],{"class":477},[84,64876,64877],{"class":104},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[84,64879,55573],{"class":90},[84,64881,523],{"class":477},[84,64883,7981],{"class":104},[84,64885,64745],{"class":477},[84,64887,51938],{"class":51627},[84,64889,51634],{"class":477},[84,64891,64892,64894,64896],{"class":86,"line":17210},[84,64893,52103],{"class":477},[84,64895,51938],{"class":51627},[84,64897,51634],{"class":477},[84,64899,64900,64902,64904],{"class":86,"line":17215},[84,64901,52744],{"class":477},[84,64903,51938],{"class":51627},[84,64905,51634],{"class":477},[84,64907,64908,64910,64912],{"class":86,"line":17228},[84,64909,52471],{"class":477},[84,64911,52140],{"class":51627},[84,64913,51634],{"class":477},[84,64915,64916],{"class":86,"line":17233},[84,64917,64918],{"class":328},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[84,64920,64921],{"class":86,"line":17238},[84,64922,64923],{"class":328},"    \u002F\u002F 1.1 获取 a 元素 \n",[84,64925,64926,64928,64931,64933,64935,64937,64939,64942],{"class":86,"line":17243},[84,64927,11550],{"class":473},[84,64929,64930],{"class":94}," as",[84,64932,13893],{"class":473},[84,64934,54722],{"class":477},[84,64936,56007],{"class":90},[84,64938,478],{"class":477},[84,64940,64941],{"class":104},"'.tab-nav a'",[84,64943,484],{"class":477},[84,64945,64946],{"class":86,"line":17256},[84,64947,64948],{"class":328},"    \u002F\u002F console.log(as) \n",[84,64950,64951,64953,64955,64957,64959,64961,64963,64965,64967,64970,64972,64974,64976],{"class":86,"line":17261},[84,64952,3530],{"class":473},[84,64954,1991],{"class":477},[84,64956,52174],{"class":473},[84,64958,9767],{"class":477},[84,64960,523],{"class":473},[84,64962,4422],{"class":94},[84,64964,9774],{"class":477},[84,64966,1383],{"class":473},[84,64968,64969],{"class":477}," as.",[84,64971,52295],{"class":94},[84,64973,3543],{"class":477},[84,64975,2621],{"class":473},[84,64977,12771],{"class":477},[84,64979,64980],{"class":86,"line":32960},[84,64981,64982],{"class":328},"      \u002F\u002F console.log(as[i])\n",[84,64984,64985],{"class":86,"line":32966},[84,64986,64987],{"class":328},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[84,64989,64990,64993,64995,64997,65000,65002,65004],{"class":86,"line":32972},[84,64991,64992],{"class":477},"      as[i].",[84,64994,58139],{"class":90},[84,64996,478],{"class":477},[84,64998,64999],{"class":104},"'mouseenter'",[84,65001,12764],{"class":477},[84,65003,54775],{"class":473},[84,65005,54778],{"class":477},[84,65007,65008],{"class":86,"line":32978},[84,65009,65010],{"class":328},"        \u002F\u002F console.log('鼠标经过')\n",[84,65012,65013],{"class":86,"line":32984},[84,65014,65015],{"class":328},"        \u002F\u002F 排他思想  \n",[84,65017,65018],{"class":86,"line":32995},[84,65019,65020],{"class":328},"        \u002F\u002F 干掉别人 移除类active\n",[84,65022,65023,65025,65027,65029,65032,65034,65036,65038,65041],{"class":86,"line":33001},[84,65024,52252],{"class":477},[84,65026,54725],{"class":90},[84,65028,478],{"class":477},[84,65030,65031],{"class":104},"'.tab-nav .active'",[84,65033,57329],{"class":477},[84,65035,57332],{"class":90},[84,65037,478],{"class":477},[84,65039,65040],{"class":104},"'active'",[84,65042,484],{"class":477},[84,65044,65045],{"class":86,"line":33021},[84,65046,65047],{"class":328},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[84,65049,65050,65053,65056,65058,65060,65062],{"class":86,"line":33027},[84,65051,65052],{"class":94},"        this",[84,65054,65055],{"class":477},".classList.",[84,65057,5663],{"class":90},[84,65059,478],{"class":477},[84,65061,65040],{"class":104},[84,65063,484],{"class":477},[84,65065,65066],{"class":86,"line":33038},[84,65067,2729],{"emptyLinePlaceholder":403},[84,65069,65070],{"class":86,"line":33044},[84,65071,65072],{"class":328},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[84,65074,65075],{"class":86,"line":33050},[84,65076,65077],{"class":328},"        \u002F\u002F 干掉别人\n",[84,65079,65080,65082,65084,65086,65089,65091,65093,65095,65097],{"class":86,"line":33056},[84,65081,52252],{"class":477},[84,65083,54725],{"class":90},[84,65085,478],{"class":477},[84,65087,65088],{"class":104},"'.tab-content .active'",[84,65090,57329],{"class":477},[84,65092,57332],{"class":90},[84,65094,478],{"class":477},[84,65096,65040],{"class":104},[84,65098,484],{"class":477},[84,65100,65101],{"class":86,"line":33062},[84,65102,65103],{"class":328},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[84,65105,65106,65108,65110,65112,65115,65117,65119,65121,65123,65125,65127,65129,65131],{"class":86,"line":33068},[84,65107,52252],{"class":477},[84,65109,54725],{"class":90},[84,65111,478],{"class":477},[84,65113,65114],{"class":104},"`.tab-content .item:nth-child(${",[84,65116,914],{"class":477},[84,65118,45893],{"class":473},[84,65120,25446],{"class":94},[84,65122,57358],{"class":104},[84,65124,57329],{"class":477},[84,65126,5663],{"class":90},[84,65128,478],{"class":477},[84,65130,65040],{"class":104},[84,65132,484],{"class":477},[84,65134,65135],{"class":86,"line":33074},[84,65136,2729],{"emptyLinePlaceholder":403},[84,65138,65139],{"class":86,"line":33080},[84,65140,65141],{"class":477},"      })\n",[84,65143,65144],{"class":86,"line":33100},[84,65145,2516],{"class":477},[84,65147,65148,65150,65152],{"class":86,"line":33106},[84,65149,52744],{"class":477},[84,65151,52140],{"class":51627},[84,65153,51634],{"class":477},[84,65155,65156,65158,65160],{"class":86,"line":33122},[84,65157,52112],{"class":477},[84,65159,52127],{"class":51627},[84,65161,51634],{"class":477},[84,65163,65164],{"class":86,"line":33128},[84,65165,2729],{"emptyLinePlaceholder":403},[84,65167,65168,65170,65172],{"class":86,"line":33142},[84,65169,52112],{"class":477},[84,65171,50962],{"class":51627},[84,65173,51634],{"class":477},[35,65175,65176],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[35,65178,65179],{},"在监听事件中，this指向的就是他的调用者",[35,65181,65182],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[35,65184,54046],{},[35,65186,65187],{},"(function () {",[35,65189,65190],{},"const list = document.querySelector('.xtx-elevator-list')",[35,65192,65193],{},"list.addEventListener('click', function (e) {",[35,65195,65196],{},"if (e.target.tagName === 'A') {",[35,65198,65199],{},"\u002F\u002F 排他思想",[35,65201,65202],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[35,65204,65205],{},"const old = document.querySelector('.xtx-elevator-list .active')",[35,65207,65208],{},"\u002F\u002F console.log(old);",[35,65210,65211],{},"\u002F\u002F 判断",[35,65213,65214],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[35,65216,65217],{},"if (old) old.classList.remove('active')",[35,65219,65220],{},"e.target.classList.add('active')",[35,65222,1419],{},[35,65224,52791],{},[35,65226,65227],{},"})();",[23,65229,65231],{"id":65230},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[75,65233,65235],{"className":50960,"code":65234,"language":50962,"meta":66,"style":66},"\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",[81,65236,65237,65247,65251,65259,65263,65277,65291,65303,65311,65317,65327,65337,65341,65345,65352,65364,65375,65392,65405,65419,65429,65433,65437,65444,65455,65473,65483,65495,65499,65503,65510,65527,65538,65550,65554,65558,65565,65577,65581,65589,65597,65601,65609,65617,65625,65640,65684,65692,65705,65718,65731,65739,65747,65755,65783,65791,65803,65816,65829,65837,65845,65853,65879,65887,65900,65912,65925,65933,65941,65949,65975,65983,65996,66008,66021,66029,66037,66045,66050,66070,66075,66095,66100,66117,66122,66130,66135,66164,66177,66181,66185,66190,66194,66222,66227,66244,66249,66254,66259,66264,66290,66294,66298,66306,66314,66318],{"__ignoreMap":66},[84,65238,65239,65241,65243,65245],{"class":86,"line":87},[84,65240,51624],{"class":477},[84,65242,51628],{"class":51627},[84,65244,51631],{"class":90},[84,65246,51634],{"class":477},[84,65248,65249],{"class":86,"line":98},[84,65250,2729],{"emptyLinePlaceholder":403},[84,65252,65253,65255,65257],{"class":86,"line":70},[84,65254,1383],{"class":477},[84,65256,50962],{"class":51627},[84,65258,51634],{"class":477},[84,65260,65261],{"class":86,"line":120},[84,65262,2729],{"emptyLinePlaceholder":403},[84,65264,65265,65267,65269,65271,65273,65275],{"class":86,"line":131},[84,65266,1383],{"class":477},[84,65268,51661],{"class":51627},[84,65270,51643],{"class":90},[84,65272,523],{"class":477},[84,65274,51648],{"class":104},[84,65276,51634],{"class":477},[84,65278,65279,65281,65283,65285,65287,65289],{"class":86,"line":145},[84,65280,52471],{"class":477},[84,65282,51671],{"class":51627},[84,65284,51674],{"class":90},[84,65286,523],{"class":477},[84,65288,51679],{"class":104},[84,65290,51634],{"class":477},[84,65292,65293,65295,65297,65299,65301],{"class":86,"line":156},[84,65294,52471],{"class":477},[84,65296,51734],{"class":51627},[84,65298,55640],{"class":477},[84,65300,51734],{"class":51627},[84,65302,51634],{"class":477},[84,65304,65305,65307,65309],{"class":86,"line":164},[84,65306,52471],{"class":477},[84,65308,389],{"class":51627},[84,65310,51634],{"class":477},[84,65312,65313,65315],{"class":86,"line":175},[84,65314,6732],{"class":51627},[84,65316,15901],{"class":477},[84,65318,65319,65321,65323,65325],{"class":86,"line":185},[84,65320,55032],{"class":94},[84,65322,51764],{"class":477},[84,65324,666],{"class":94},[84,65326,1634],{"class":477},[84,65328,65329,65331,65333,65335],{"class":86,"line":195},[84,65330,55021],{"class":94},[84,65332,51764],{"class":477},[84,65334,666],{"class":94},[84,65336,1634],{"class":477},[84,65338,65339],{"class":86,"line":206},[84,65340,2516],{"class":477},[84,65342,65343],{"class":86,"line":217},[84,65344,2729],{"emptyLinePlaceholder":403},[84,65346,65347,65350],{"class":86,"line":227},[84,65348,65349],{"class":51627},"    table",[84,65351,15901],{"class":477},[84,65353,65354,65357,65359,65362],{"class":86,"line":238},[84,65355,65356],{"class":94},"      border-collapse",[84,65358,51764],{"class":477},[84,65360,65361],{"class":94},"collapse",[84,65363,1634],{"class":477},[84,65365,65366,65369,65371,65373],{"class":86,"line":249},[84,65367,65368],{"class":94},"      border-spacing",[84,65370,51764],{"class":477},[84,65372,666],{"class":94},[84,65374,1634],{"class":477},[84,65376,65377,65379,65381,65383,65385,65387,65390],{"class":86,"line":262},[84,65378,62303],{"class":94},[84,65380,51764],{"class":477},[84,65382,692],{"class":94},[84,65384,51819],{"class":473},[84,65386,51848],{"class":94},[84,65388,65389],{"class":94}," #c0c0c0",[84,65391,1634],{"class":477},[84,65393,65394,65396,65398,65401,65403],{"class":86,"line":273},[84,65395,55097],{"class":94},[84,65397,51764],{"class":477},[84,65399,65400],{"class":94},"500",[84,65402,51819],{"class":473},[84,65404,1634],{"class":477},[84,65406,65407,65409,65411,65413,65415,65417],{"class":86,"line":283},[84,65408,55032],{"class":94},[84,65410,51764],{"class":477},[84,65412,784],{"class":94},[84,65414,51819],{"class":473},[84,65416,51883],{"class":94},[84,65418,1634],{"class":477},[84,65420,65421,65423,65425,65427],{"class":86,"line":294},[84,65422,57612],{"class":94},[84,65424,51764],{"class":477},[84,65426,51919],{"class":94},[84,65428,1634],{"class":477},[84,65430,65431],{"class":86,"line":2028},[84,65432,2516],{"class":477},[84,65434,65435],{"class":86,"line":2057},[84,65436,2729],{"emptyLinePlaceholder":403},[84,65438,65439,65442],{"class":86,"line":2062},[84,65440,65441],{"class":51627},"    th",[84,65443,15901],{"class":477},[84,65445,65446,65448,65450,65453],{"class":86,"line":2079},[84,65447,55210],{"class":94},[84,65449,51764],{"class":477},[84,65451,65452],{"class":94},"#09c",[84,65454,1634],{"class":477},[84,65456,65457,65460,65462,65464,65466,65468,65471],{"class":86,"line":2084},[84,65458,65459],{"class":94},"      font",[84,65461,51764],{"class":477},[84,65463,62665],{"class":94},[84,65465,64399],{"class":94},[84,65467,51819],{"class":473},[84,65469,65470],{"class":104}," \"微软雅黑\"",[84,65472,1634],{"class":477},[84,65474,65475,65477,65479,65481],{"class":86,"line":2089},[84,65476,57742],{"class":94},[84,65478,51764],{"class":477},[84,65480,61168],{"class":94},[84,65482,1634],{"class":477},[84,65484,65485,65487,65489,65491,65493],{"class":86,"line":2094},[84,65486,55111],{"class":94},[84,65488,51764],{"class":477},[84,65490,1273],{"class":94},[84,65492,51819],{"class":473},[84,65494,1634],{"class":477},[84,65496,65497],{"class":86,"line":2108},[84,65498,2516],{"class":477},[84,65500,65501],{"class":86,"line":2113},[84,65502,2729],{"emptyLinePlaceholder":403},[84,65504,65505,65508],{"class":86,"line":2906},[84,65506,65507],{"class":51627},"    td",[84,65509,15901],{"class":477},[84,65511,65512,65514,65516,65518,65520,65522,65525],{"class":86,"line":2920},[84,65513,62303],{"class":94},[84,65515,51764],{"class":477},[84,65517,692],{"class":94},[84,65519,51819],{"class":473},[84,65521,51848],{"class":94},[84,65523,65524],{"class":94}," #d0d0d0",[84,65526,1634],{"class":477},[84,65528,65529,65531,65533,65536],{"class":86,"line":2928},[84,65530,57742],{"class":94},[84,65532,51764],{"class":477},[84,65534,65535],{"class":94},"#404060",[84,65537,1634],{"class":477},[84,65539,65540,65542,65544,65546,65548],{"class":86,"line":2933},[84,65541,55021],{"class":94},[84,65543,51764],{"class":477},[84,65545,919],{"class":94},[84,65547,51819],{"class":473},[84,65549,1634],{"class":477},[84,65551,65552],{"class":86,"line":2939},[84,65553,2516],{"class":477},[84,65555,65556],{"class":86,"line":2945},[84,65557,2729],{"emptyLinePlaceholder":403},[84,65559,65560,65563],{"class":86,"line":2950},[84,65561,65562],{"class":90},"    .allCheck",[84,65564,15901],{"class":477},[84,65566,65567,65569,65571,65573,65575],{"class":86,"line":8277},[84,65568,55097],{"class":94},[84,65570,51764],{"class":477},[84,65572,1085],{"class":94},[84,65574,51819],{"class":473},[84,65576,1634],{"class":477},[84,65578,65579],{"class":86,"line":8301},[84,65580,2516],{"class":477},[84,65582,65583,65585,65587],{"class":86,"line":8306},[84,65584,52744],{"class":477},[84,65586,389],{"class":51627},[84,65588,51634],{"class":477},[84,65590,65591,65593,65595],{"class":86,"line":8312},[84,65592,52112],{"class":477},[84,65594,51661],{"class":51627},[84,65596,51634],{"class":477},[84,65598,65599],{"class":86,"line":8339},[84,65600,2729],{"emptyLinePlaceholder":403},[84,65602,65603,65605,65607],{"class":86,"line":8344},[84,65604,1383],{"class":477},[84,65606,52127],{"class":51627},[84,65608,51634],{"class":477},[84,65610,65611,65613,65615],{"class":86,"line":8350},[84,65612,52471],{"class":477},[84,65614,612],{"class":51627},[84,65616,51634],{"class":477},[84,65618,65619,65621,65623],{"class":86,"line":8362},[84,65620,51668],{"class":477},[84,65622,618],{"class":51627},[84,65624,51634],{"class":477},[84,65626,65627,65629,65631,65633,65635,65638],{"class":86,"line":8374},[84,65628,55560],{"class":477},[84,65630,621],{"class":51627},[84,65632,53813],{"class":90},[84,65634,523],{"class":477},[84,65636,65637],{"class":104},"\"allCheck\"",[84,65639,51634],{"class":477},[84,65641,65642,65644,65646,65648,65650,65652,65654,65656,65658,65660,65662,65665,65668,65670,65672,65674,65677,65680,65682],{"class":86,"line":8386},[84,65643,55628],{"class":477},[84,65645,54147],{"class":51627},[84,65647,54150],{"class":90},[84,65649,523],{"class":477},[84,65651,54155],{"class":104},[84,65653,15249],{"class":90},[84,65655,523],{"class":477},[84,65657,7981],{"class":104},[84,65659,15288],{"class":90},[84,65661,523],{"class":477},[84,65663,65664],{"class":104},"\"checkAll\"",[84,65666,65667],{"class":477},"> \u003C",[84,65669,84],{"class":51627},[84,65671,53813],{"class":90},[84,65673,523],{"class":477},[84,65675,65676],{"class":104},"\"all\"",[84,65678,65679],{"class":477},">全选\u003C\u002F",[84,65681,84],{"class":51627},[84,65683,51634],{"class":477},[84,65685,65686,65688,65690],{"class":86,"line":10045},[84,65687,55733],{"class":477},[84,65689,621],{"class":51627},[84,65691,51634],{"class":477},[84,65693,65694,65696,65698,65701,65703],{"class":86,"line":10070},[84,65695,55560],{"class":477},[84,65697,621],{"class":51627},[84,65699,65700],{"class":477},">商品\u003C\u002F",[84,65702,621],{"class":51627},[84,65704,51634],{"class":477},[84,65706,65707,65709,65711,65714,65716],{"class":86,"line":10093},[84,65708,55560],{"class":477},[84,65710,621],{"class":51627},[84,65712,65713],{"class":477},">商家\u003C\u002F",[84,65715,621],{"class":51627},[84,65717,51634],{"class":477},[84,65719,65720,65722,65724,65727,65729],{"class":86,"line":10117},[84,65721,55560],{"class":477},[84,65723,621],{"class":51627},[84,65725,65726],{"class":477},">价格\u003C\u002F",[84,65728,621],{"class":51627},[84,65730,51634],{"class":477},[84,65732,65733,65735,65737],{"class":86,"line":10122},[84,65734,52103],{"class":477},[84,65736,618],{"class":51627},[84,65738,51634],{"class":477},[84,65740,65741,65743,65745],{"class":86,"line":10127},[84,65742,51668],{"class":477},[84,65744,618],{"class":51627},[84,65746,51634],{"class":477},[84,65748,65749,65751,65753],{"class":86,"line":10132},[84,65750,55560],{"class":477},[84,65752,664],{"class":51627},[84,65754,51634],{"class":477},[84,65756,65757,65759,65761,65763,65765,65767,65769,65771,65774,65776,65778,65781],{"class":86,"line":10141},[84,65758,55628],{"class":477},[84,65760,54147],{"class":51627},[84,65762,54150],{"class":90},[84,65764,523],{"class":477},[84,65766,54155],{"class":104},[84,65768,15249],{"class":90},[84,65770,523],{"class":477},[84,65772,65773],{"class":104},"\"check\"",[84,65775,53813],{"class":90},[84,65777,523],{"class":477},[84,65779,65780],{"class":104},"\"ck\"",[84,65782,51634],{"class":477},[84,65784,65785,65787,65789],{"class":86,"line":10146},[84,65786,55733],{"class":477},[84,65788,664],{"class":51627},[84,65790,51634],{"class":477},[84,65792,65793,65795,65797,65799,65801],{"class":86,"line":10152},[84,65794,55560],{"class":477},[84,65796,664],{"class":51627},[84,65798,61499],{"class":477},[84,65800,664],{"class":51627},[84,65802,51634],{"class":477},[84,65804,65805,65807,65809,65812,65814],{"class":86,"line":10173},[84,65806,55560],{"class":477},[84,65808,664],{"class":51627},[84,65810,65811],{"class":477},">小米\u003C\u002F",[84,65813,664],{"class":51627},[84,65815,51634],{"class":477},[84,65817,65818,65820,65822,65825,65827],{"class":86,"line":10179},[84,65819,55560],{"class":477},[84,65821,664],{"class":51627},[84,65823,65824],{"class":477},">￥1999\u003C\u002F",[84,65826,664],{"class":51627},[84,65828,51634],{"class":477},[84,65830,65831,65833,65835],{"class":86,"line":10193},[84,65832,52103],{"class":477},[84,65834,618],{"class":51627},[84,65836,51634],{"class":477},[84,65838,65839,65841,65843],{"class":86,"line":10199},[84,65840,51668],{"class":477},[84,65842,618],{"class":51627},[84,65844,51634],{"class":477},[84,65846,65847,65849,65851],{"class":86,"line":10226},[84,65848,55560],{"class":477},[84,65850,664],{"class":51627},[84,65852,51634],{"class":477},[84,65854,65855,65857,65859,65861,65863,65865,65867,65869,65871,65873,65875,65877],{"class":86,"line":10235},[84,65856,55628],{"class":477},[84,65858,54147],{"class":51627},[84,65860,54150],{"class":90},[84,65862,523],{"class":477},[84,65864,54155],{"class":104},[84,65866,15249],{"class":90},[84,65868,523],{"class":477},[84,65870,65773],{"class":104},[84,65872,53813],{"class":90},[84,65874,523],{"class":477},[84,65876,65780],{"class":104},[84,65878,51634],{"class":477},[84,65880,65881,65883,65885],{"class":86,"line":10241},[84,65882,55733],{"class":477},[84,65884,664],{"class":51627},[84,65886,51634],{"class":477},[84,65888,65889,65891,65893,65896,65898],{"class":86,"line":10249},[84,65890,55560],{"class":477},[84,65892,664],{"class":51627},[84,65894,65895],{"class":477},">小米净水器\u003C\u002F",[84,65897,664],{"class":51627},[84,65899,51634],{"class":477},[84,65901,65902,65904,65906,65908,65910],{"class":86,"line":10254},[84,65903,55560],{"class":477},[84,65905,664],{"class":51627},[84,65907,65811],{"class":477},[84,65909,664],{"class":51627},[84,65911,51634],{"class":477},[84,65913,65914,65916,65918,65921,65923],{"class":86,"line":16933},[84,65915,55560],{"class":477},[84,65917,664],{"class":51627},[84,65919,65920],{"class":477},">￥4999\u003C\u002F",[84,65922,664],{"class":51627},[84,65924,51634],{"class":477},[84,65926,65927,65929,65931],{"class":86,"line":16939},[84,65928,52103],{"class":477},[84,65930,618],{"class":51627},[84,65932,51634],{"class":477},[84,65934,65935,65937,65939],{"class":86,"line":16962},[84,65936,51668],{"class":477},[84,65938,618],{"class":51627},[84,65940,51634],{"class":477},[84,65942,65943,65945,65947],{"class":86,"line":16968},[84,65944,55560],{"class":477},[84,65946,664],{"class":51627},[84,65948,51634],{"class":477},[84,65950,65951,65953,65955,65957,65959,65961,65963,65965,65967,65969,65971,65973],{"class":86,"line":16991},[84,65952,55628],{"class":477},[84,65954,54147],{"class":51627},[84,65956,54150],{"class":90},[84,65958,523],{"class":477},[84,65960,54155],{"class":104},[84,65962,15249],{"class":90},[84,65964,523],{"class":477},[84,65966,65773],{"class":104},[84,65968,53813],{"class":90},[84,65970,523],{"class":477},[84,65972,65780],{"class":104},[84,65974,51634],{"class":477},[84,65976,65977,65979,65981],{"class":86,"line":17005},[84,65978,55733],{"class":477},[84,65980,664],{"class":51627},[84,65982,51634],{"class":477},[84,65984,65985,65987,65989,65992,65994],{"class":86,"line":17025},[84,65986,55560],{"class":477},[84,65988,664],{"class":51627},[84,65990,65991],{"class":477},">小米电视\u003C\u002F",[84,65993,664],{"class":51627},[84,65995,51634],{"class":477},[84,65997,65998,66000,66002,66004,66006],{"class":86,"line":17031},[84,65999,55560],{"class":477},[84,66001,664],{"class":51627},[84,66003,65811],{"class":477},[84,66005,664],{"class":51627},[84,66007,51634],{"class":477},[84,66009,66010,66012,66014,66017,66019],{"class":86,"line":17042},[84,66011,55560],{"class":477},[84,66013,664],{"class":51627},[84,66015,66016],{"class":477},">￥5999\u003C\u002F",[84,66018,664],{"class":51627},[84,66020,51634],{"class":477},[84,66022,66023,66025,66027],{"class":86,"line":17065},[84,66024,52103],{"class":477},[84,66026,618],{"class":51627},[84,66028,51634],{"class":477},[84,66030,66031,66033,66035],{"class":86,"line":17087},[84,66032,52744],{"class":477},[84,66034,612],{"class":51627},[84,66036,51634],{"class":477},[84,66038,66039,66041,66043],{"class":86,"line":17092},[84,66040,52471],{"class":477},[84,66042,52140],{"class":51627},[84,66044,51634],{"class":477},[84,66046,66047],{"class":86,"line":17098},[84,66048,66049],{"class":328},"    \u002F\u002F 1. 获取大复选框\n",[84,66051,66052,66054,66057,66059,66061,66063,66065,66068],{"class":86,"line":17112},[84,66053,11550],{"class":473},[84,66055,66056],{"class":94}," checkAll",[84,66058,13893],{"class":473},[84,66060,54722],{"class":477},[84,66062,54725],{"class":90},[84,66064,478],{"class":477},[84,66066,66067],{"class":104},"'#checkAll'",[84,66069,484],{"class":477},[84,66071,66072],{"class":86,"line":17125},[84,66073,66074],{"class":328},"    \u002F\u002F 2. 获取所有的小复选框\n",[84,66076,66077,66079,66082,66084,66086,66088,66090,66093],{"class":86,"line":17130},[84,66078,11550],{"class":473},[84,66080,66081],{"class":94}," cks",[84,66083,13893],{"class":473},[84,66085,54722],{"class":477},[84,66087,56007],{"class":90},[84,66089,478],{"class":477},[84,66091,66092],{"class":104},"'.ck'",[84,66094,484],{"class":477},[84,66096,66097],{"class":86,"line":17144},[84,66098,66099],{"class":328},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[84,66101,66102,66105,66107,66109,66111,66113,66115],{"class":86,"line":17149},[84,66103,66104],{"class":477},"    checkAll.",[84,66106,58139],{"class":90},[84,66108,478],{"class":477},[84,66110,58144],{"class":104},[84,66112,12764],{"class":477},[84,66114,54775],{"class":473},[84,66116,54778],{"class":477},[84,66118,66119],{"class":86,"line":17155},[84,66120,66121],{"class":328},"      \u002F\u002F 得到当前大复选框的选中状态\n",[84,66123,66124,66127],{"class":86,"line":17160},[84,66125,66126],{"class":328},"      \u002F\u002F console.log(checkAll.checked)",[84,66128,66129],{"class":328},"  \u002F\u002F 得到 是 true 或者是 false\n",[84,66131,66132],{"class":86,"line":17174},[84,66133,66134],{"class":328},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[84,66136,66137,66139,66141,66143,66145,66147,66149,66151,66153,66156,66158,66160,66162],{"class":86,"line":17179},[84,66138,52611],{"class":473},[84,66140,1991],{"class":477},[84,66142,52174],{"class":473},[84,66144,9767],{"class":477},[84,66146,523],{"class":473},[84,66148,4422],{"class":94},[84,66150,9774],{"class":477},[84,66152,1383],{"class":473},[84,66154,66155],{"class":477}," cks.",[84,66157,52295],{"class":94},[84,66159,3543],{"class":477},[84,66161,2621],{"class":473},[84,66163,12771],{"class":477},[84,66165,66166,66169,66171,66174],{"class":86,"line":17184},[84,66167,66168],{"class":477},"        cks[i].checked ",[84,66170,523],{"class":473},[84,66172,66173],{"class":94}," this",[84,66175,66176],{"class":477},".checked\n",[84,66178,66179],{"class":86,"line":17198},[84,66180,52725],{"class":477},[84,66182,66183],{"class":86,"line":17210},[84,66184,33788],{"class":477},[84,66186,66187],{"class":86,"line":17215},[84,66188,66189],{"class":328},"    \u002F\u002F 5. 小复选框控制大复选框\n",[84,66191,66192],{"class":86,"line":17228},[84,66193,2729],{"emptyLinePlaceholder":403},[84,66195,66196,66198,66200,66202,66204,66206,66208,66210,66212,66214,66216,66218,66220],{"class":86,"line":17233},[84,66197,3530],{"class":473},[84,66199,1991],{"class":477},[84,66201,52174],{"class":473},[84,66203,9767],{"class":477},[84,66205,523],{"class":473},[84,66207,4422],{"class":94},[84,66209,9774],{"class":477},[84,66211,1383],{"class":473},[84,66213,66155],{"class":477},[84,66215,52295],{"class":94},[84,66217,3543],{"class":477},[84,66219,2621],{"class":473},[84,66221,12771],{"class":477},[84,66223,66224],{"class":86,"line":17238},[84,66225,66226],{"class":328},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[84,66228,66229,66232,66234,66236,66238,66240,66242],{"class":86,"line":17243},[84,66230,66231],{"class":477},"      cks[i].",[84,66233,58139],{"class":90},[84,66235,478],{"class":477},[84,66237,58144],{"class":104},[84,66239,12764],{"class":477},[84,66241,54775],{"class":473},[84,66243,54778],{"class":477},[84,66245,66246],{"class":86,"line":17256},[84,66247,66248],{"class":328},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[84,66250,66251],{"class":86,"line":17261},[84,66252,66253],{"class":328},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[84,66255,66256],{"class":86,"line":32960},[84,66257,66258],{"class":328},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[84,66260,66261],{"class":86,"line":32966},[84,66262,66263],{"class":328},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[84,66265,66266,66269,66271,66273,66275,66277,66280,66282,66284,66286,66288],{"class":86,"line":32972},[84,66267,66268],{"class":477},"        checkAll.checked ",[84,66270,523],{"class":473},[84,66272,54722],{"class":477},[84,66274,56007],{"class":90},[84,66276,478],{"class":477},[84,66278,66279],{"class":104},"'.ck:checked'",[84,66281,31153],{"class":477},[84,66283,52295],{"class":94},[84,66285,58232],{"class":473},[84,66287,66155],{"class":477},[84,66289,56157],{"class":94},[84,66291,66292],{"class":86,"line":32978},[84,66293,65141],{"class":477},[84,66295,66296],{"class":86,"line":32984},[84,66297,2516],{"class":477},[84,66299,66300,66302,66304],{"class":86,"line":32995},[84,66301,52744],{"class":477},[84,66303,52140],{"class":51627},[84,66305,51634],{"class":477},[84,66307,66308,66310,66312],{"class":86,"line":33001},[84,66309,52112],{"class":477},[84,66311,52127],{"class":51627},[84,66313,51634],{"class":477},[84,66315,66316],{"class":86,"line":33021},[84,66317,2729],{"emptyLinePlaceholder":403},[84,66319,66320,66322,66324],{"class":86,"line":33027},[84,66321,52112],{"class":477},[84,66323,50962],{"class":51627},[84,66325,51634],{"class":477},[35,66327,66328],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[35,66330,66331],{},"用好之间比较得到的布尔值！！！",[35,66333,66334,66335,66338,66339,1991,66342,1057,66344,66347],{},"在 JS 里访问的时候，",[81,66336,66337],{},"checkbox.checked"," 是一个 ",[624,66340,66341],{},"布尔值",[81,66343,1703],{},[81,66345,66346],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[35,66349,66350,66351,66354,66355],{},"HTML 的 ",[81,66352,66353],{},"checked=\"checked\""," 只是 ",[624,66356,66357,66358,66361],{},"初始值；JS 的 ",[81,66359,66360],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[35,66363,66364],{},"：checked是一个伪类选择器",[35,66366,66367],{},[64,66368],{"alt":66,"src":66369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[35,66371,66372,66375],{},[66373,66374],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[35,66377,66378],{},[64,66379],{"alt":66,"src":66380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66382,66384],{"id":66383},"_33-dom事件进阶","3.3 DOM事件进阶",[23,66386,66388],{"id":66387},"_331-事件流","3.3.1 事件流",[35,66390,66391],{},[64,66392],{"alt":66,"src":66393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22327,66395,66397],{"id":66396},"_3311-事件捕获","3.3.1.1 事件捕获",[35,66399,66400],{},[64,66401],{"alt":66,"src":66402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[75,66404,66406],{"className":50960,"code":66405,"language":50962,"meta":66,"style":66},"\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",[81,66407,66408,66418,66432,66436,66444,66458,66478,66490,66498,66505,66517,66529,66539,66543,66547,66554,66566,66578,66588,66592,66600,66608,66612,66620,66635,66654,66662,66670,66690,66710,66726,66737,66745,66762,66773,66781,66798,66809,66817,66825,66833,66837],{"__ignoreMap":66},[84,66409,66410,66412,66414,66416],{"class":86,"line":87},[84,66411,51624],{"class":477},[84,66413,51628],{"class":51627},[84,66415,51631],{"class":90},[84,66417,51634],{"class":477},[84,66419,66420,66422,66424,66426,66428,66430],{"class":86,"line":98},[84,66421,1383],{"class":477},[84,66423,50962],{"class":51627},[84,66425,51643],{"class":90},[84,66427,523],{"class":477},[84,66429,51648],{"class":104},[84,66431,51634],{"class":477},[84,66433,66434],{"class":86,"line":70},[84,66435,2729],{"emptyLinePlaceholder":403},[84,66437,66438,66440,66442],{"class":86,"line":120},[84,66439,1383],{"class":477},[84,66441,51661],{"class":51627},[84,66443,51634],{"class":477},[84,66445,66446,66448,66450,66452,66454,66456],{"class":86,"line":131},[84,66447,52471],{"class":477},[84,66449,51671],{"class":51627},[84,66451,51674],{"class":90},[84,66453,523],{"class":477},[84,66455,51679],{"class":104},[84,66457,51634],{"class":477},[84,66459,66460,66462,66464,66466,66468,66470,66472,66474,66476],{"class":86,"line":145},[84,66461,52471],{"class":477},[84,66463,51671],{"class":51627},[84,66465,15249],{"class":90},[84,66467,523],{"class":477},[84,66469,51718],{"class":104},[84,66471,51698],{"class":90},[84,66473,523],{"class":477},[84,66475,51725],{"class":104},[84,66477,51634],{"class":477},[84,66479,66480,66482,66484,66486,66488],{"class":86,"line":156},[84,66481,52471],{"class":477},[84,66483,51734],{"class":51627},[84,66485,51737],{"class":477},[84,66487,51734],{"class":51627},[84,66489,51634],{"class":477},[84,66491,66492,66494,66496],{"class":86,"line":164},[84,66493,52471],{"class":477},[84,66495,389],{"class":51627},[84,66497,51634],{"class":477},[84,66499,66500,66503],{"class":86,"line":175},[84,66501,66502],{"class":90},"    .father",[84,66504,15901],{"class":477},[84,66506,66507,66509,66511,66513,66515],{"class":86,"line":185},[84,66508,55097],{"class":94},[84,66510,51764],{"class":477},[84,66512,65400],{"class":94},[84,66514,51819],{"class":473},[84,66516,1634],{"class":477},[84,66518,66519,66521,66523,66525,66527],{"class":86,"line":195},[84,66520,55111],{"class":94},[84,66522,51764],{"class":477},[84,66524,65400],{"class":94},[84,66526,51819],{"class":473},[84,66528,1634],{"class":477},[84,66530,66531,66533,66535,66537],{"class":86,"line":206},[84,66532,55210],{"class":94},[84,66534,51764],{"class":477},[84,66536,51972],{"class":94},[84,66538,1634],{"class":477},[84,66540,66541],{"class":86,"line":217},[84,66542,2516],{"class":477},[84,66544,66545],{"class":86,"line":227},[84,66546,2729],{"emptyLinePlaceholder":403},[84,66548,66549,66552],{"class":86,"line":238},[84,66550,66551],{"class":90},"    .son",[84,66553,15901],{"class":477},[84,66555,66556,66558,66560,66562,66564],{"class":86,"line":249},[84,66557,55097],{"class":94},[84,66559,51764],{"class":477},[84,66561,2052],{"class":94},[84,66563,51819],{"class":473},[84,66565,1634],{"class":477},[84,66567,66568,66570,66572,66574,66576],{"class":86,"line":262},[84,66569,55111],{"class":94},[84,66571,51764],{"class":477},[84,66573,2052],{"class":94},[84,66575,51819],{"class":473},[84,66577,1634],{"class":477},[84,66579,66580,66582,66584,66586],{"class":86,"line":273},[84,66581,55210],{"class":94},[84,66583,51764],{"class":477},[84,66585,55215],{"class":94},[84,66587,1634],{"class":477},[84,66589,66590],{"class":86,"line":283},[84,66591,2516],{"class":477},[84,66593,66594,66596,66598],{"class":86,"line":294},[84,66595,52744],{"class":477},[84,66597,389],{"class":51627},[84,66599,51634],{"class":477},[84,66601,66602,66604,66606],{"class":86,"line":2028},[84,66603,52112],{"class":477},[84,66605,51661],{"class":51627},[84,66607,51634],{"class":477},[84,66609,66610],{"class":86,"line":2057},[84,66611,2729],{"emptyLinePlaceholder":403},[84,66613,66614,66616,66618],{"class":86,"line":2062},[84,66615,1383],{"class":477},[84,66617,52127],{"class":51627},[84,66619,51634],{"class":477},[84,66621,66622,66624,66626,66628,66630,66633],{"class":86,"line":2079},[84,66623,52471],{"class":477},[84,66625,51938],{"class":51627},[84,66627,53813],{"class":90},[84,66629,523],{"class":477},[84,66631,66632],{"class":104},"\"father\"",[84,66634,51634],{"class":477},[84,66636,66637,66639,66641,66643,66645,66648,66650,66652],{"class":86,"line":2084},[84,66638,51668],{"class":477},[84,66640,51938],{"class":51627},[84,66642,53813],{"class":90},[84,66644,523],{"class":477},[84,66646,66647],{"class":104},"\"son\"",[84,66649,55640],{"class":477},[84,66651,51938],{"class":51627},[84,66653,51634],{"class":477},[84,66655,66656,66658,66660],{"class":86,"line":2089},[84,66657,52744],{"class":477},[84,66659,51938],{"class":51627},[84,66661,51634],{"class":477},[84,66663,66664,66666,66668],{"class":86,"line":2094},[84,66665,52471],{"class":477},[84,66667,52140],{"class":51627},[84,66669,51634],{"class":477},[84,66671,66672,66674,66677,66679,66681,66683,66685,66688],{"class":86,"line":2108},[84,66673,11550],{"class":473},[84,66675,66676],{"class":94}," fa",[84,66678,13893],{"class":473},[84,66680,54722],{"class":477},[84,66682,54725],{"class":90},[84,66684,478],{"class":477},[84,66686,66687],{"class":104},"'.father'",[84,66689,484],{"class":477},[84,66691,66692,66694,66697,66699,66701,66703,66705,66708],{"class":86,"line":2113},[84,66693,11550],{"class":473},[84,66695,66696],{"class":94}," son",[84,66698,13893],{"class":473},[84,66700,54722],{"class":477},[84,66702,54725],{"class":90},[84,66704,478],{"class":477},[84,66706,66707],{"class":104},"'.son'",[84,66709,484],{"class":477},[84,66711,66712,66714,66716,66718,66720,66722,66724],{"class":86,"line":2906},[84,66713,52734],{"class":477},[84,66715,58139],{"class":90},[84,66717,478],{"class":477},[84,66719,58144],{"class":104},[84,66721,12764],{"class":477},[84,66723,54775],{"class":473},[84,66725,54778],{"class":477},[84,66727,66728,66730,66732,66735],{"class":86,"line":2920},[84,66729,59251],{"class":90},[84,66731,478],{"class":477},[84,66733,66734],{"class":104},"'woshiu1'",[84,66736,484],{"class":477},[84,66738,66739,66741,66743],{"class":86,"line":2928},[84,66740,54861],{"class":477},[84,66742,1703],{"class":94},[84,66744,484],{"class":477},[84,66746,66747,66750,66752,66754,66756,66758,66760],{"class":86,"line":2933},[84,66748,66749],{"class":477},"    fa.",[84,66751,58139],{"class":90},[84,66753,478],{"class":477},[84,66755,58144],{"class":104},[84,66757,12764],{"class":477},[84,66759,54775],{"class":473},[84,66761,54778],{"class":477},[84,66763,66764,66766,66768,66771],{"class":86,"line":2939},[84,66765,59251],{"class":90},[84,66767,478],{"class":477},[84,66769,66770],{"class":104},"'1'",[84,66772,484],{"class":477},[84,66774,66775,66777,66779],{"class":86,"line":2945},[84,66776,54861],{"class":477},[84,66778,1703],{"class":94},[84,66780,484],{"class":477},[84,66782,66783,66786,66788,66790,66792,66794,66796],{"class":86,"line":2950},[84,66784,66785],{"class":477},"    son.",[84,66787,58139],{"class":90},[84,66789,478],{"class":477},[84,66791,58144],{"class":104},[84,66793,12764],{"class":477},[84,66795,54775],{"class":473},[84,66797,54778],{"class":477},[84,66799,66800,66802,66804,66807],{"class":86,"line":8277},[84,66801,59251],{"class":90},[84,66803,478],{"class":477},[84,66805,66806],{"class":104},"'2'",[84,66808,484],{"class":477},[84,66810,66811,66813,66815],{"class":86,"line":8301},[84,66812,54861],{"class":477},[84,66814,1703],{"class":94},[84,66816,484],{"class":477},[84,66818,66819,66821,66823],{"class":86,"line":8306},[84,66820,52744],{"class":477},[84,66822,52140],{"class":51627},[84,66824,51634],{"class":477},[84,66826,66827,66829,66831],{"class":86,"line":8312},[84,66828,52112],{"class":477},[84,66830,52127],{"class":51627},[84,66832,51634],{"class":477},[84,66834,66835],{"class":86,"line":8339},[84,66836,2729],{"emptyLinePlaceholder":403},[84,66838,66839,66841,66843],{"class":86,"line":8344},[84,66840,52112],{"class":477},[84,66842,50962],{"class":51627},[84,66844,51634],{"class":477},[35,66846,66847],{},[64,66848],{"alt":66,"src":66849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[35,66851,66852],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22327,66854,66856],{"id":66855},"_3312-事件冒泡","3.3.1.2 事件冒泡",[35,66858,66859],{},[64,66860],{"alt":66,"src":66861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[35,66863,66864],{},"反着来",[35,66866,66867],{},"注意是同名事件，比如都是‘click’",[22327,66869,66871],{"id":66870},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[35,66873,66874],{},[64,66875],{"alt":66,"src":66876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22327,66878,66880],{"id":66879},"_3314-解绑事件","3.3.1.4 解绑事件",[35,66882,66883],{},[64,66884],{"alt":66,"src":66885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[35,66887,66888],{},[64,66889],{"alt":66,"src":66890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22327,66892,66894],{"id":66893},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[28,66896,66897],{},[31,66898,66899],{},"事件类型的区别",[35,66901,66902],{},[64,66903],{"alt":66,"src":66904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[35,66906,66907],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[28,66909,66910],{"start":98},[31,66911,66912],{},"注册事件的区别",[35,66914,66915],{},[64,66916],{"alt":66,"src":66917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22327,66919,66921],{"id":66920},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[35,66923,66924],{},[64,66925],{"alt":66,"src":66926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[35,66928,66929],{},[64,66930],{"alt":66,"src":66931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[75,66933,66935],{"className":53394,"code":66934,"language":53396,"meta":66,"style":66},"\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",[81,66936,66937,66945,66962,66985,66993,66998,67003,67008,67012,67020,67028],{"__ignoreMap":66},[84,66938,66939,66941,66943],{"class":86,"line":87},[84,66940,1383],{"class":477},[84,66942,52127],{"class":51627},[84,66944,51634],{"class":477},[84,66946,66947,66949,66952,66955,66957,66960],{"class":86,"line":98},[84,66948,52471],{"class":477},[84,66950,66951],{"class":51627},"form",[84,66953,66954],{"class":90}," action",[84,66956,523],{"class":477},[84,66958,66959],{"class":104},"\"http:\u002F\u002Fwww.itcast.cn\"",[84,66961,51634],{"class":477},[84,66963,66964,66966,66968,66970,66972,66975,66978,66980,66983],{"class":86,"line":70},[84,66965,51668],{"class":477},[84,66967,54147],{"class":51627},[84,66969,54150],{"class":90},[84,66971,523],{"class":477},[84,66973,66974],{"class":104},"\"submit\"",[84,66976,66977],{"class":90}," value",[84,66979,523],{"class":477},[84,66981,66982],{"class":104},"\"免费注册\"",[84,66984,51634],{"class":477},[84,66986,66987,66989,66991],{"class":86,"line":120},[84,66988,51668],{"class":477},[84,66990,52140],{"class":51627},[84,66992,51634],{"class":477},[84,66994,66995],{"class":86,"line":131},[84,66996,66997],{"class":477},"      const form = document.querySelector('form')\n",[84,66999,67000],{"class":86,"line":145},[84,67001,67002],{"class":477},"      form.addEventListener('submit', function (e) {\n",[84,67004,67005],{"class":86,"line":156},[84,67006,67007],{"class":477},"        e.preventDefault()\n",[84,67009,67010],{"class":86,"line":164},[84,67011,65141],{"class":477},[84,67013,67014,67016,67018],{"class":86,"line":175},[84,67015,52103],{"class":477},[84,67017,52140],{"class":51627},[84,67019,51634],{"class":477},[84,67021,67022,67024,67026],{"class":86,"line":185},[84,67023,52744],{"class":477},[84,67025,66951],{"class":51627},[84,67027,51634],{"class":477},[84,67029,67030,67032,67034],{"class":86,"line":195},[84,67031,52112],{"class":477},[84,67033,52127],{"class":51627},[84,67035,51634],{"class":477},[35,67037,67038],{},"点击不在跳转！！！",[23,67040,67042],{"id":67041},"_332-事件委托","3.3.2 事件委托",[35,67044,67045],{},[64,67046],{"alt":66,"src":67047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[75,67049,67051],{"className":50960,"code":67050,"language":50962,"meta":66,"style":66},"\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",[81,67052,67053,67063,67077,67081,67089,67103,67123,67135,67143,67147,67155,67163,67175,67187,67199,67211,67223,67236,67244,67252,67257,67276,67297,67302,67307,67312,67317,67326,67330,67340,67344,67349,67354,67368,67378,67382,67386,67394,67402,67406],{"__ignoreMap":66},[84,67054,67055,67057,67059,67061],{"class":86,"line":87},[84,67056,51624],{"class":477},[84,67058,51628],{"class":51627},[84,67060,51631],{"class":90},[84,67062,51634],{"class":477},[84,67064,67065,67067,67069,67071,67073,67075],{"class":86,"line":98},[84,67066,1383],{"class":477},[84,67068,50962],{"class":51627},[84,67070,51643],{"class":90},[84,67072,523],{"class":477},[84,67074,51648],{"class":104},[84,67076,51634],{"class":477},[84,67078,67079],{"class":86,"line":70},[84,67080,2729],{"emptyLinePlaceholder":403},[84,67082,67083,67085,67087],{"class":86,"line":120},[84,67084,1383],{"class":477},[84,67086,51661],{"class":51627},[84,67088,51634],{"class":477},[84,67090,67091,67093,67095,67097,67099,67101],{"class":86,"line":131},[84,67092,52471],{"class":477},[84,67094,51671],{"class":51627},[84,67096,51674],{"class":90},[84,67098,523],{"class":477},[84,67100,51679],{"class":104},[84,67102,51634],{"class":477},[84,67104,67105,67107,67109,67111,67113,67115,67117,67119,67121],{"class":86,"line":145},[84,67106,52471],{"class":477},[84,67108,51671],{"class":51627},[84,67110,15249],{"class":90},[84,67112,523],{"class":477},[84,67114,51718],{"class":104},[84,67116,51698],{"class":90},[84,67118,523],{"class":477},[84,67120,51725],{"class":104},[84,67122,51634],{"class":477},[84,67124,67125,67127,67129,67131,67133],{"class":86,"line":156},[84,67126,52471],{"class":477},[84,67128,51734],{"class":51627},[84,67130,51737],{"class":477},[84,67132,51734],{"class":51627},[84,67134,51634],{"class":477},[84,67136,67137,67139,67141],{"class":86,"line":164},[84,67138,52112],{"class":477},[84,67140,51661],{"class":51627},[84,67142,51634],{"class":477},[84,67144,67145],{"class":86,"line":175},[84,67146,2729],{"emptyLinePlaceholder":403},[84,67148,67149,67151,67153],{"class":86,"line":185},[84,67150,1383],{"class":477},[84,67152,52127],{"class":51627},[84,67154,51634],{"class":477},[84,67156,67157,67159,67161],{"class":86,"line":195},[84,67158,52471],{"class":477},[84,67160,1480],{"class":51627},[84,67162,51634],{"class":477},[84,67164,67165,67167,67169,67171,67173],{"class":86,"line":206},[84,67166,51668],{"class":477},[84,67168,31],{"class":51627},[84,67170,54292],{"class":477},[84,67172,31],{"class":51627},[84,67174,51634],{"class":477},[84,67176,67177,67179,67181,67183,67185],{"class":86,"line":217},[84,67178,51668],{"class":477},[84,67180,31],{"class":51627},[84,67182,54311],{"class":477},[84,67184,31],{"class":51627},[84,67186,51634],{"class":477},[84,67188,67189,67191,67193,67195,67197],{"class":86,"line":227},[84,67190,51668],{"class":477},[84,67192,31],{"class":51627},[84,67194,54330],{"class":477},[84,67196,31],{"class":51627},[84,67198,51634],{"class":477},[84,67200,67201,67203,67205,67207,67209],{"class":86,"line":238},[84,67202,51668],{"class":477},[84,67204,31],{"class":51627},[84,67206,54349],{"class":477},[84,67208,31],{"class":51627},[84,67210,51634],{"class":477},[84,67212,67213,67215,67217,67219,67221],{"class":86,"line":249},[84,67214,51668],{"class":477},[84,67216,31],{"class":51627},[84,67218,54368],{"class":477},[84,67220,31],{"class":51627},[84,67222,51634],{"class":477},[84,67224,67225,67227,67229,67232,67234],{"class":86,"line":262},[84,67226,51668],{"class":477},[84,67228,35],{"class":51627},[84,67230,67231],{"class":477},">我不需要变色\u003C\u002F",[84,67233,35],{"class":51627},[84,67235,51634],{"class":477},[84,67237,67238,67240,67242],{"class":86,"line":273},[84,67239,52744],{"class":477},[84,67241,1480],{"class":51627},[84,67243,51634],{"class":477},[84,67245,67246,67248,67250],{"class":86,"line":283},[84,67247,52471],{"class":477},[84,67249,52140],{"class":51627},[84,67251,51634],{"class":477},[84,67253,67254],{"class":86,"line":294},[84,67255,67256],{"class":328},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[84,67258,67259,67261,67263,67265,67267,67269,67271,67274],{"class":86,"line":2028},[84,67260,11550],{"class":473},[84,67262,61618],{"class":94},[84,67264,13893],{"class":473},[84,67266,54722],{"class":477},[84,67268,54725],{"class":90},[84,67270,478],{"class":477},[84,67272,67273],{"class":104},"'ul'",[84,67275,484],{"class":477},[84,67277,67278,67281,67283,67285,67287,67289,67291,67293,67295],{"class":86,"line":2057},[84,67279,67280],{"class":477},"    ul.",[84,67282,58139],{"class":90},[84,67284,478],{"class":477},[84,67286,58144],{"class":104},[84,67288,12764],{"class":477},[84,67290,54775],{"class":473},[84,67292,1991],{"class":477},[84,67294,550],{"class":5545},[84,67296,12771],{"class":477},[84,67298,67299],{"class":86,"line":2062},[84,67300,67301],{"class":328},"      \u002F\u002F alert(1)\n",[84,67303,67304],{"class":86,"line":2079},[84,67305,67306],{"class":328},"      \u002F\u002F e.target就是我们点击的对象\n",[84,67308,67309],{"class":86,"line":2084},[84,67310,67311],{"class":328},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[84,67313,67314],{"class":86,"line":2089},[84,67315,67316],{"class":328},"      \u002F\u002F e.target.style.color = 'red'\n",[84,67318,67319,67321,67323],{"class":86,"line":2094},[84,67320,58570],{"class":477},[84,67322,58573],{"class":90},[84,67324,67325],{"class":477},"(e)\n",[84,67327,67328],{"class":86,"line":2108},[84,67329,2729],{"emptyLinePlaceholder":403},[84,67331,67332,67334,67337],{"class":86,"line":2113},[84,67333,58570],{"class":477},[84,67335,67336],{"class":90},"dir",[84,67338,67339],{"class":477},"(e.target)\n",[84,67341,67342],{"class":86,"line":2906},[84,67343,2729],{"emptyLinePlaceholder":403},[84,67345,67346],{"class":86,"line":2920},[84,67347,67348],{"class":328},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[84,67350,67351],{"class":86,"line":2928},[84,67352,67353],{"class":328},"      \u002F\u002F 通过tagName来进行判断\n",[84,67355,67356,67358,67361,67363,67366],{"class":86,"line":2933},[84,67357,54806],{"class":473},[84,67359,67360],{"class":477}," (e.target.tagName ",[84,67362,54812],{"class":473},[84,67364,67365],{"class":104}," 'LI'",[84,67367,12771],{"class":477},[84,67369,67370,67373,67375],{"class":86,"line":2939},[84,67371,67372],{"class":477},"        e.target.style.color ",[84,67374,523],{"class":473},[84,67376,67377],{"class":104}," 'red'\n",[84,67379,67380],{"class":86,"line":2945},[84,67381,52725],{"class":477},[84,67383,67384],{"class":86,"line":2950},[84,67385,33788],{"class":477},[84,67387,67388,67390,67392],{"class":86,"line":8277},[84,67389,52744],{"class":477},[84,67391,52140],{"class":51627},[84,67393,51634],{"class":477},[84,67395,67396,67398,67400],{"class":86,"line":8301},[84,67397,52112],{"class":477},[84,67399,52127],{"class":51627},[84,67401,51634],{"class":477},[84,67403,67404],{"class":86,"line":8306},[84,67405,2729],{"emptyLinePlaceholder":403},[84,67407,67408,67410,67412],{"class":86,"line":8312},[84,67409,52112],{"class":477},[84,67411,50962],{"class":51627},[84,67413,51634],{"class":477},[35,67415,67416],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[35,67418,67419],{},"if(e.target.ragName==='P') {}",[35,67421,67422],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[35,67424,67425],{},"通过事件委托的方式实现tab栏切换改造：",[35,67427,67428],{},"一定要记住自定义属性！！！！！！",[35,67430,67431],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[35,67433,67434],{},"id是自定义的属性名",[35,67436,67437],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[75,67439,67441],{"className":50960,"code":67440,"language":50962,"meta":66,"style":66},"\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",[81,67442,67443,67453,67467,67471,67479,67493,67513,67533,67545,67553,67559,67569,67579,67583,67587,67593,67605,67617,67629,67645,67649,67653,67659,67671,67683,67695,67705,67715,67719,67723,67731,67743,67753,67765,67769,67773,67781,67791,67801,67811,67815,67819,67829,67843,67855,67859,67863,67875,67885,67901,67911,67915,67919,67933,67943,67953,67957,67961,67967,67981,67985,67989,67997,68007,68011,68015,68024,68034,68038,68046,68054,68058,68066,68080,68094,68106,68114,68153,68185,68217,68249,68281,68289,68297,68311,68345,68379,68413,68447,68481,68489,68497,68505,68510,68515,68534,68539,68559,68567,68572,68585,68606,68619,68623,68628,68633,68646,68666,68694,68698,68702,68706,68714,68722,68726],{"__ignoreMap":66},[84,67444,67445,67447,67449,67451],{"class":86,"line":87},[84,67446,51624],{"class":477},[84,67448,51628],{"class":51627},[84,67450,51631],{"class":90},[84,67452,51634],{"class":477},[84,67454,67455,67457,67459,67461,67463,67465],{"class":86,"line":98},[84,67456,1383],{"class":477},[84,67458,50962],{"class":51627},[84,67460,51643],{"class":90},[84,67462,523],{"class":477},[84,67464,51648],{"class":104},[84,67466,51634],{"class":477},[84,67468,67469],{"class":86,"line":70},[84,67470,2729],{"emptyLinePlaceholder":403},[84,67472,67473,67475,67477],{"class":86,"line":120},[84,67474,1383],{"class":477},[84,67476,51661],{"class":51627},[84,67478,51634],{"class":477},[84,67480,67481,67483,67485,67487,67489,67491],{"class":86,"line":131},[84,67482,52471],{"class":477},[84,67484,51671],{"class":51627},[84,67486,51674],{"class":90},[84,67488,523],{"class":477},[84,67490,51679],{"class":104},[84,67492,59453],{"class":477},[84,67494,67495,67497,67499,67501,67503,67505,67507,67509,67511],{"class":86,"line":145},[84,67496,52471],{"class":477},[84,67498,51671],{"class":51627},[84,67500,51690],{"class":90},[84,67502,523],{"class":477},[84,67504,51695],{"class":104},[84,67506,51698],{"class":90},[84,67508,523],{"class":477},[84,67510,51703],{"class":104},[84,67512,59453],{"class":477},[84,67514,67515,67517,67519,67521,67523,67525,67527,67529,67531],{"class":86,"line":156},[84,67516,52471],{"class":477},[84,67518,51671],{"class":51627},[84,67520,15249],{"class":90},[84,67522,523],{"class":477},[84,67524,51718],{"class":104},[84,67526,51698],{"class":90},[84,67528,523],{"class":477},[84,67530,51725],{"class":104},[84,67532,59453],{"class":477},[84,67534,67535,67537,67539,67541,67543],{"class":86,"line":164},[84,67536,52471],{"class":477},[84,67538,51734],{"class":51627},[84,67540,63951],{"class":477},[84,67542,51734],{"class":51627},[84,67544,51634],{"class":477},[84,67546,67547,67549,67551],{"class":86,"line":175},[84,67548,52471],{"class":477},[84,67550,389],{"class":51627},[84,67552,51634],{"class":477},[84,67554,67555,67557],{"class":86,"line":185},[84,67556,6732],{"class":51627},[84,67558,15901],{"class":477},[84,67560,67561,67563,67565,67567],{"class":86,"line":195},[84,67562,55032],{"class":94},[84,67564,51764],{"class":477},[84,67566,666],{"class":94},[84,67568,1634],{"class":477},[84,67570,67571,67573,67575,67577],{"class":86,"line":206},[84,67572,55021],{"class":94},[84,67574,51764],{"class":477},[84,67576,666],{"class":94},[84,67578,1634],{"class":477},[84,67580,67581],{"class":86,"line":217},[84,67582,2516],{"class":477},[84,67584,67585],{"class":86,"line":227},[84,67586,2729],{"emptyLinePlaceholder":403},[84,67588,67589,67591],{"class":86,"line":238},[84,67590,64002],{"class":90},[84,67592,15901],{"class":477},[84,67594,67595,67597,67599,67601,67603],{"class":86,"line":249},[84,67596,55097],{"class":94},[84,67598,51764],{"class":477},[84,67600,64013],{"class":94},[84,67602,51819],{"class":473},[84,67604,1634],{"class":477},[84,67606,67607,67609,67611,67613,67615],{"class":86,"line":262},[84,67608,55111],{"class":94},[84,67610,51764],{"class":477},[84,67612,64026],{"class":94},[84,67614,51819],{"class":473},[84,67616,1634],{"class":477},[84,67618,67619,67621,67623,67625,67627],{"class":86,"line":273},[84,67620,55032],{"class":94},[84,67622,51764],{"class":477},[84,67624,1173],{"class":94},[84,67626,51819],{"class":473},[84,67628,1634],{"class":477},[84,67630,67631,67633,67635,67637,67639,67641,67643],{"class":86,"line":283},[84,67632,62303],{"class":94},[84,67634,51764],{"class":477},[84,67636,692],{"class":94},[84,67638,51819],{"class":473},[84,67640,51848],{"class":94},[84,67642,62570],{"class":94},[84,67644,1634],{"class":477},[84,67646,67647],{"class":86,"line":294},[84,67648,2516],{"class":477},[84,67650,67651],{"class":86,"line":2028},[84,67652,2729],{"emptyLinePlaceholder":403},[84,67654,67655,67657],{"class":86,"line":2057},[84,67656,64071],{"class":90},[84,67658,15901],{"class":477},[84,67660,67661,67663,67665,67667,67669],{"class":86,"line":2062},[84,67662,55097],{"class":94},[84,67664,51764],{"class":477},[84,67666,784],{"class":94},[84,67668,801],{"class":473},[84,67670,1634],{"class":477},[84,67672,67673,67675,67677,67679,67681],{"class":86,"line":2079},[84,67674,55111],{"class":94},[84,67676,51764],{"class":477},[84,67678,1380],{"class":94},[84,67680,51819],{"class":473},[84,67682,1634],{"class":477},[84,67684,67685,67687,67689,67691,67693],{"class":86,"line":2084},[84,67686,57685],{"class":94},[84,67688,51764],{"class":477},[84,67690,1380],{"class":94},[84,67692,51819],{"class":473},[84,67694,1634],{"class":477},[84,67696,67697,67699,67701,67703],{"class":86,"line":2089},[84,67698,55335],{"class":94},[84,67700,51764],{"class":477},[84,67702,51804],{"class":94},[84,67704,1634],{"class":477},[84,67706,67707,67709,67711,67713],{"class":86,"line":2094},[84,67708,55346],{"class":94},[84,67710,51764],{"class":477},[84,67712,51995],{"class":94},[84,67714,1634],{"class":477},[84,67716,67717],{"class":86,"line":2108},[84,67718,2516],{"class":477},[84,67720,67721],{"class":86,"line":2113},[84,67722,2729],{"emptyLinePlaceholder":403},[84,67724,67725,67727,67729],{"class":86,"line":2906},[84,67726,64071],{"class":90},[84,67728,64144],{"class":51627},[84,67730,15901],{"class":477},[84,67732,67733,67735,67737,67739,67741],{"class":86,"line":2920},[84,67734,55248],{"class":94},[84,67736,51764],{"class":477},[84,67738,1273],{"class":94},[84,67740,51819],{"class":473},[84,67742,1634],{"class":477},[84,67744,67745,67747,67749,67751],{"class":86,"line":2928},[84,67746,62660],{"class":94},[84,67748,51764],{"class":477},[84,67750,64167],{"class":94},[84,67752,1634],{"class":477},[84,67754,67755,67757,67759,67761,67763],{"class":86,"line":2933},[84,67756,62326],{"class":94},[84,67758,51764],{"class":477},[84,67760,1173],{"class":94},[84,67762,51819],{"class":473},[84,67764,1634],{"class":477},[84,67766,67767],{"class":86,"line":2939},[84,67768,2516],{"class":477},[84,67770,67771],{"class":86,"line":2945},[84,67772,2729],{"emptyLinePlaceholder":403},[84,67774,67775,67777,67779],{"class":86,"line":2950},[84,67776,64071],{"class":90},[84,67778,61618],{"class":51627},[84,67780,15901],{"class":477},[84,67782,67783,67785,67787,67789],{"class":86,"line":8277},[84,67784,55058],{"class":94},[84,67786,51764],{"class":477},[84,67788,55063],{"class":94},[84,67790,1634],{"class":477},[84,67792,67793,67795,67797,67799],{"class":86,"line":8301},[84,67794,55335],{"class":94},[84,67796,51764],{"class":477},[84,67798,51804],{"class":94},[84,67800,1634],{"class":477},[84,67802,67803,67805,67807,67809],{"class":86,"line":8306},[84,67804,55346],{"class":94},[84,67806,51764],{"class":477},[84,67808,51907],{"class":94},[84,67810,1634],{"class":477},[84,67812,67813],{"class":86,"line":8312},[84,67814,2516],{"class":477},[84,67816,67817],{"class":86,"line":8339},[84,67818,2729],{"emptyLinePlaceholder":403},[84,67820,67821,67823,67825,67827],{"class":86,"line":8344},[84,67822,64071],{"class":90},[84,67824,61618],{"class":51627},[84,67826,55401],{"class":51627},[84,67828,15901],{"class":477},[84,67830,67831,67833,67835,67837,67839,67841],{"class":86,"line":8350},[84,67832,55032],{"class":94},[84,67834,51764],{"class":477},[84,67836,666],{"class":94},[84,67838,9279],{"class":94},[84,67840,51819],{"class":473},[84,67842,1634],{"class":477},[84,67844,67845,67847,67849,67851,67853],{"class":86,"line":8362},[84,67846,55248],{"class":94},[84,67848,51764],{"class":477},[84,67850,1022],{"class":94},[84,67852,51819],{"class":473},[84,67854,1634],{"class":477},[84,67856,67857],{"class":86,"line":8374},[84,67858,2516],{"class":477},[84,67860,67861],{"class":86,"line":8386},[84,67862,2729],{"emptyLinePlaceholder":403},[84,67864,67865,67867,67869,67871,67873],{"class":86,"line":10045},[84,67866,64071],{"class":90},[84,67868,61618],{"class":51627},[84,67870,55401],{"class":51627},[84,67872,1739],{"class":51627},[84,67874,15901],{"class":477},[84,67876,67877,67879,67881,67883],{"class":86,"line":10070},[84,67878,64296],{"class":94},[84,67880,51764],{"class":477},[84,67882,55063],{"class":94},[84,67884,1634],{"class":477},[84,67886,67887,67889,67891,67893,67895,67897,67899],{"class":86,"line":10093},[84,67888,62558],{"class":94},[84,67890,51764],{"class":477},[84,67892,553],{"class":94},[84,67894,51819],{"class":473},[84,67896,51848],{"class":94},[84,67898,64317],{"class":94},[84,67900,1634],{"class":477},[84,67902,67903,67905,67907,67909],{"class":86,"line":10117},[84,67904,57742],{"class":94},[84,67906,51764],{"class":477},[84,67908,62695],{"class":94},[84,67910,1634],{"class":477},[84,67912,67913],{"class":86,"line":10122},[84,67914,2516],{"class":477},[84,67916,67917],{"class":86,"line":10127},[84,67918,2729],{"emptyLinePlaceholder":403},[84,67920,67921,67923,67925,67927,67929,67931],{"class":86,"line":10132},[84,67922,64071],{"class":90},[84,67924,61618],{"class":51627},[84,67926,55401],{"class":51627},[84,67928,1739],{"class":51627},[84,67930,64350],{"class":90},[84,67932,15901],{"class":477},[84,67934,67935,67937,67939,67941],{"class":86,"line":10141},[84,67936,62117],{"class":94},[84,67938,51764],{"class":477},[84,67940,64361],{"class":94},[84,67942,1634],{"class":477},[84,67944,67945,67947,67949,67951],{"class":86,"line":10146},[84,67946,57742],{"class":94},[84,67948,51764],{"class":477},[84,67950,64361],{"class":94},[84,67952,1634],{"class":477},[84,67954,67955],{"class":86,"line":10152},[84,67956,2516],{"class":477},[84,67958,67959],{"class":86,"line":10173},[84,67960,2729],{"emptyLinePlaceholder":403},[84,67962,67963,67965],{"class":86,"line":10179},[84,67964,64386],{"class":90},[84,67966,15901],{"class":477},[84,67968,67969,67971,67973,67975,67977,67979],{"class":86,"line":10193},[84,67970,55021],{"class":94},[84,67972,51764],{"class":477},[84,67974,666],{"class":94},[84,67976,64399],{"class":94},[84,67978,51819],{"class":473},[84,67980,1634],{"class":477},[84,67982,67983],{"class":86,"line":10199},[84,67984,2516],{"class":477},[84,67986,67987],{"class":86,"line":10226},[84,67988,2729],{"emptyLinePlaceholder":403},[84,67990,67991,67993,67995],{"class":86,"line":10235},[84,67992,64386],{"class":90},[84,67994,62500],{"class":90},[84,67996,15901],{"class":477},[84,67998,67999,68001,68003,68005],{"class":86,"line":10241},[84,68000,55335],{"class":94},[84,68002,51764],{"class":477},[84,68004,55063],{"class":94},[84,68006,1634],{"class":477},[84,68008,68009],{"class":86,"line":10249},[84,68010,2516],{"class":477},[84,68012,68013],{"class":86,"line":10254},[84,68014,2729],{"emptyLinePlaceholder":403},[84,68016,68017,68019,68022],{"class":86,"line":16933},[84,68018,64386],{"class":90},[84,68020,68021],{"class":90}," .active",[84,68023,15901],{"class":477},[84,68025,68026,68028,68030,68032],{"class":86,"line":16939},[84,68027,55335],{"class":94},[84,68029,51764],{"class":477},[84,68031,61195],{"class":94},[84,68033,1634],{"class":477},[84,68035,68036],{"class":86,"line":16962},[84,68037,2516],{"class":477},[84,68039,68040,68042,68044],{"class":86,"line":16968},[84,68041,52744],{"class":477},[84,68043,389],{"class":51627},[84,68045,51634],{"class":477},[84,68047,68048,68050,68052],{"class":86,"line":16991},[84,68049,52112],{"class":477},[84,68051,51661],{"class":51627},[84,68053,51634],{"class":477},[84,68055,68056],{"class":86,"line":17005},[84,68057,2729],{"emptyLinePlaceholder":403},[84,68059,68060,68062,68064],{"class":86,"line":17025},[84,68061,1383],{"class":477},[84,68063,52127],{"class":51627},[84,68065,51634],{"class":477},[84,68067,68068,68070,68072,68074,68076,68078],{"class":86,"line":17031},[84,68069,52471],{"class":477},[84,68071,51938],{"class":51627},[84,68073,53813],{"class":90},[84,68075,523],{"class":477},[84,68077,64501],{"class":104},[84,68079,51634],{"class":477},[84,68081,68082,68084,68086,68088,68090,68092],{"class":86,"line":17042},[84,68083,51668],{"class":477},[84,68085,51938],{"class":51627},[84,68087,53813],{"class":90},[84,68089,523],{"class":477},[84,68091,64516],{"class":104},[84,68093,51634],{"class":477},[84,68095,68096,68098,68100,68102,68104],{"class":86,"line":17065},[84,68097,55560],{"class":477},[84,68099,23],{"class":51627},[84,68101,64527],{"class":477},[84,68103,23],{"class":51627},[84,68105,51634],{"class":477},[84,68107,68108,68110,68112],{"class":86,"line":17087},[84,68109,55560],{"class":477},[84,68111,1480],{"class":51627},[84,68113,51634],{"class":477},[84,68115,68116,68118,68120,68122,68124,68126,68128,68130,68132,68134,68136,68138,68140,68143,68145,68147,68149,68151],{"class":86,"line":17092},[84,68117,55628],{"class":477},[84,68119,31],{"class":51627},[84,68121,61378],{"class":477},[84,68123,39],{"class":51627},[84,68125,53813],{"class":90},[84,68127,523],{"class":477},[84,68129,60032],{"class":104},[84,68131,61383],{"class":90},[84,68133,523],{"class":477},[84,68135,64562],{"class":104},[84,68137,54277],{"class":90},[84,68139,523],{"class":477},[84,68141,68142],{"class":104},"\"0\"",[84,68144,64565],{"class":477},[84,68146,39],{"class":51627},[84,68148,55640],{"class":477},[84,68150,31],{"class":51627},[84,68152,51634],{"class":477},[84,68154,68155,68157,68159,68161,68163,68165,68167,68169,68171,68173,68175,68177,68179,68181,68183],{"class":86,"line":17098},[84,68156,55628],{"class":477},[84,68158,31],{"class":51627},[84,68160,61378],{"class":477},[84,68162,39],{"class":51627},[84,68164,61383],{"class":90},[84,68166,523],{"class":477},[84,68168,64562],{"class":104},[84,68170,54277],{"class":90},[84,68172,523],{"class":477},[84,68174,4007],{"class":104},[84,68176,64592],{"class":477},[84,68178,39],{"class":51627},[84,68180,55640],{"class":477},[84,68182,31],{"class":51627},[84,68184,51634],{"class":477},[84,68186,68187,68189,68191,68193,68195,68197,68199,68201,68203,68205,68207,68209,68211,68213,68215],{"class":86,"line":17112},[84,68188,55628],{"class":477},[84,68190,31],{"class":51627},[84,68192,61378],{"class":477},[84,68194,39],{"class":51627},[84,68196,61383],{"class":90},[84,68198,523],{"class":477},[84,68200,64562],{"class":104},[84,68202,54277],{"class":90},[84,68204,523],{"class":477},[84,68206,4030],{"class":104},[84,68208,64619],{"class":477},[84,68210,39],{"class":51627},[84,68212,55640],{"class":477},[84,68214,31],{"class":51627},[84,68216,51634],{"class":477},[84,68218,68219,68221,68223,68225,68227,68229,68231,68233,68235,68237,68239,68241,68243,68245,68247],{"class":86,"line":17125},[84,68220,55628],{"class":477},[84,68222,31],{"class":51627},[84,68224,61378],{"class":477},[84,68226,39],{"class":51627},[84,68228,61383],{"class":90},[84,68230,523],{"class":477},[84,68232,64562],{"class":104},[84,68234,54277],{"class":90},[84,68236,523],{"class":477},[84,68238,4043],{"class":104},[84,68240,64646],{"class":477},[84,68242,39],{"class":51627},[84,68244,55640],{"class":477},[84,68246,31],{"class":51627},[84,68248,51634],{"class":477},[84,68250,68251,68253,68255,68257,68259,68261,68263,68265,68267,68269,68271,68273,68275,68277,68279],{"class":86,"line":17130},[84,68252,55628],{"class":477},[84,68254,31],{"class":51627},[84,68256,61378],{"class":477},[84,68258,39],{"class":51627},[84,68260,61383],{"class":90},[84,68262,523],{"class":477},[84,68264,64562],{"class":104},[84,68266,54277],{"class":90},[84,68268,523],{"class":477},[84,68270,4056],{"class":104},[84,68272,64673],{"class":477},[84,68274,39],{"class":51627},[84,68276,55640],{"class":477},[84,68278,31],{"class":51627},[84,68280,51634],{"class":477},[84,68282,68283,68285,68287],{"class":86,"line":17144},[84,68284,55733],{"class":477},[84,68286,1480],{"class":51627},[84,68288,51634],{"class":477},[84,68290,68291,68293,68295],{"class":86,"line":17149},[84,68292,52103],{"class":477},[84,68294,51938],{"class":51627},[84,68296,51634],{"class":477},[84,68298,68299,68301,68303,68305,68307,68309],{"class":86,"line":17155},[84,68300,51668],{"class":477},[84,68302,51938],{"class":51627},[84,68304,53813],{"class":90},[84,68306,523],{"class":477},[84,68308,64710],{"class":104},[84,68310,51634],{"class":477},[84,68312,68313,68315,68317,68319,68321,68323,68325,68327,68329,68331,68333,68335,68337,68339,68341,68343],{"class":86,"line":17160},[84,68314,55560],{"class":477},[84,68316,51938],{"class":51627},[84,68318,53813],{"class":90},[84,68320,523],{"class":477},[84,68322,64725],{"class":104},[84,68324,61378],{"class":477},[84,68326,64],{"class":51627},[84,68328,55565],{"class":90},[84,68330,523],{"class":477},[84,68332,64736],{"class":104},[84,68334,55573],{"class":90},[84,68336,523],{"class":477},[84,68338,7981],{"class":104},[84,68340,64745],{"class":477},[84,68342,51938],{"class":51627},[84,68344,51634],{"class":477},[84,68346,68347,68349,68351,68353,68355,68357,68359,68361,68363,68365,68367,68369,68371,68373,68375,68377],{"class":86,"line":17174},[84,68348,55560],{"class":477},[84,68350,51938],{"class":51627},[84,68352,53813],{"class":90},[84,68354,523],{"class":477},[84,68356,62949],{"class":104},[84,68358,61378],{"class":477},[84,68360,64],{"class":51627},[84,68362,55565],{"class":90},[84,68364,523],{"class":477},[84,68366,64772],{"class":104},[84,68368,55573],{"class":90},[84,68370,523],{"class":477},[84,68372,7981],{"class":104},[84,68374,64745],{"class":477},[84,68376,51938],{"class":51627},[84,68378,51634],{"class":477},[84,68380,68381,68383,68385,68387,68389,68391,68393,68395,68397,68399,68401,68403,68405,68407,68409,68411],{"class":86,"line":17179},[84,68382,55560],{"class":477},[84,68384,51938],{"class":51627},[84,68386,53813],{"class":90},[84,68388,523],{"class":477},[84,68390,62949],{"class":104},[84,68392,61378],{"class":477},[84,68394,64],{"class":51627},[84,68396,55565],{"class":90},[84,68398,523],{"class":477},[84,68400,64807],{"class":104},[84,68402,55573],{"class":90},[84,68404,523],{"class":477},[84,68406,7981],{"class":104},[84,68408,64745],{"class":477},[84,68410,51938],{"class":51627},[84,68412,51634],{"class":477},[84,68414,68415,68417,68419,68421,68423,68425,68427,68429,68431,68433,68435,68437,68439,68441,68443,68445],{"class":86,"line":17184},[84,68416,55560],{"class":477},[84,68418,51938],{"class":51627},[84,68420,53813],{"class":90},[84,68422,523],{"class":477},[84,68424,62949],{"class":104},[84,68426,61378],{"class":477},[84,68428,64],{"class":51627},[84,68430,55565],{"class":90},[84,68432,523],{"class":477},[84,68434,64842],{"class":104},[84,68436,55573],{"class":90},[84,68438,523],{"class":477},[84,68440,7981],{"class":104},[84,68442,64745],{"class":477},[84,68444,51938],{"class":51627},[84,68446,51634],{"class":477},[84,68448,68449,68451,68453,68455,68457,68459,68461,68463,68465,68467,68469,68471,68473,68475,68477,68479],{"class":86,"line":17198},[84,68450,55560],{"class":477},[84,68452,51938],{"class":51627},[84,68454,53813],{"class":90},[84,68456,523],{"class":477},[84,68458,62949],{"class":104},[84,68460,61378],{"class":477},[84,68462,64],{"class":51627},[84,68464,55565],{"class":90},[84,68466,523],{"class":477},[84,68468,64877],{"class":104},[84,68470,55573],{"class":90},[84,68472,523],{"class":477},[84,68474,7981],{"class":104},[84,68476,64745],{"class":477},[84,68478,51938],{"class":51627},[84,68480,51634],{"class":477},[84,68482,68483,68485,68487],{"class":86,"line":17210},[84,68484,52103],{"class":477},[84,68486,51938],{"class":51627},[84,68488,51634],{"class":477},[84,68490,68491,68493,68495],{"class":86,"line":17215},[84,68492,52744],{"class":477},[84,68494,51938],{"class":51627},[84,68496,51634],{"class":477},[84,68498,68499,68501,68503],{"class":86,"line":17228},[84,68500,52471],{"class":477},[84,68502,52140],{"class":51627},[84,68504,51634],{"class":477},[84,68506,68507],{"class":86,"line":17233},[84,68508,68509],{"class":328},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[84,68511,68512],{"class":86,"line":17238},[84,68513,68514],{"class":328},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[84,68516,68517,68519,68521,68523,68525,68527,68529,68532],{"class":86,"line":17243},[84,68518,11550],{"class":473},[84,68520,61618],{"class":94},[84,68522,13893],{"class":473},[84,68524,54722],{"class":477},[84,68526,54725],{"class":90},[84,68528,478],{"class":477},[84,68530,68531],{"class":104},"'.tab-nav ul'",[84,68533,484],{"class":477},[84,68535,68536],{"class":86,"line":17256},[84,68537,68538],{"class":328},"    \u002F\u002F 2.添加事件\n",[84,68540,68541,68543,68545,68547,68549,68551,68553,68555,68557],{"class":86,"line":17261},[84,68542,67280],{"class":477},[84,68544,58139],{"class":90},[84,68546,478],{"class":477},[84,68548,58144],{"class":104},[84,68550,12764],{"class":477},[84,68552,54775],{"class":473},[84,68554,1991],{"class":477},[84,68556,550],{"class":5545},[84,68558,12771],{"class":477},[84,68560,68561,68563,68565],{"class":86,"line":32960},[84,68562,58570],{"class":477},[84,68564,67336],{"class":90},[84,68566,67339],{"class":477},[84,68568,68569],{"class":86,"line":32966},[84,68570,68571],{"class":328},"      \u002F\u002Fe.targer是我们点击的对象\n",[84,68573,68574,68576,68578,68580,68583],{"class":86,"line":32972},[84,68575,54806],{"class":473},[84,68577,67360],{"class":477},[84,68579,54812],{"class":473},[84,68581,68582],{"class":104}," 'A'",[84,68584,12771],{"class":477},[84,68586,68587,68589,68591,68593,68596,68598,68600,68602,68604],{"class":86,"line":32978},[84,68588,52252],{"class":477},[84,68590,54725],{"class":90},[84,68592,478],{"class":477},[84,68594,68595],{"class":104},"'.active'",[84,68597,57329],{"class":477},[84,68599,57332],{"class":90},[84,68601,478],{"class":477},[84,68603,65040],{"class":104},[84,68605,484],{"class":477},[84,68607,68608,68611,68613,68615,68617],{"class":86,"line":32984},[84,68609,68610],{"class":477},"        e.target.classList.",[84,68612,5663],{"class":90},[84,68614,478],{"class":477},[84,68616,65040],{"class":104},[84,68618,484],{"class":477},[84,68620,68621],{"class":86,"line":32995},[84,68622,2729],{"emptyLinePlaceholder":403},[84,68624,68625],{"class":86,"line":33001},[84,68626,68627],{"class":328},"        \u002F\u002F 下面大盒子模块\n",[84,68629,68630],{"class":86,"line":33021},[84,68631,68632],{"class":328},"        \u002F\u002F console.log(e.target.dataset.id)\n",[84,68634,68635,68637,68639,68641,68643],{"class":86,"line":33027},[84,68636,61596],{"class":473},[84,68638,3361],{"class":94},[84,68640,13893],{"class":473},[84,68642,45893],{"class":473},[84,68644,68645],{"class":477},"e.target.dataset.id\n",[84,68647,68648,68650,68652,68654,68656,68658,68660,68662,68664],{"class":86,"line":33038},[84,68649,52252],{"class":477},[84,68651,54725],{"class":90},[84,68653,478],{"class":477},[84,68655,65088],{"class":104},[84,68657,57329],{"class":477},[84,68659,57332],{"class":90},[84,68661,478],{"class":477},[84,68663,65040],{"class":104},[84,68665,484],{"class":477},[84,68667,68668,68670,68672,68674,68676,68678,68680,68682,68684,68686,68688,68690,68692],{"class":86,"line":33044},[84,68669,52252],{"class":477},[84,68671,54725],{"class":90},[84,68673,478],{"class":477},[84,68675,65114],{"class":104},[84,68677,914],{"class":477},[84,68679,45893],{"class":473},[84,68681,25446],{"class":94},[84,68683,57358],{"class":104},[84,68685,57329],{"class":477},[84,68687,5663],{"class":90},[84,68689,478],{"class":477},[84,68691,65040],{"class":104},[84,68693,484],{"class":477},[84,68695,68696],{"class":86,"line":33050},[84,68697,2729],{"emptyLinePlaceholder":403},[84,68699,68700],{"class":86,"line":33056},[84,68701,52725],{"class":477},[84,68703,68704],{"class":86,"line":33062},[84,68705,33788],{"class":477},[84,68707,68708,68710,68712],{"class":86,"line":33068},[84,68709,52744],{"class":477},[84,68711,52140],{"class":51627},[84,68713,51634],{"class":477},[84,68715,68716,68718,68720],{"class":86,"line":33074},[84,68717,52112],{"class":477},[84,68719,52127],{"class":51627},[84,68721,51634],{"class":477},[84,68723,68724],{"class":86,"line":33080},[84,68725,2729],{"emptyLinePlaceholder":403},[84,68727,68728,68730,68732],{"class":86,"line":33100},[84,68729,52112],{"class":477},[84,68731,50962],{"class":51627},[84,68733,51634],{"class":477},[23,68735,68737],{"id":68736},"_333-页面加载事件","3.3.3 页面加载事件",[28,68739,68740],{},[31,68741,68742],{},"load",[35,68744,68745],{},[64,68746],{"alt":66,"src":68747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[35,68749,68750],{},"window代表整个窗口，比document还要大",[35,68752,68753],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[35,68755,68756],{},"img.addEventListener('load', function () {",[35,68758,68759],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[35,68761,52791],{},[28,68763,68764],{"start":98},[31,68765,68766],{},"DOMContentLoaded",[35,68768,68769],{},[64,68770],{"alt":66,"src":68771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[35,68773,68774],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[23,68776,68778],{"id":68777},"_334-元素滚动事件","3.3.4 元素滚动事件",[35,68780,68781],{},[64,68782],{"alt":66,"src":68783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[35,68785,68786],{},[64,68787],{"alt":66,"src":68788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[35,68790,68791],{},[64,68792],{"alt":66,"src":68793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[35,68795,68796],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[35,68798,68799],{},"获得的是数字型数据，不带单位",[35,68801,68802],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[35,68804,68805],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[35,68807,68808],{},"它是通过document.documentElement来获取",[35,68810,68811],{},[64,68812],{"alt":66,"src":68813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[35,68815,68816],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[23,68818,68820],{"id":68819},"_335-页面缩放事件","3.3.5 页面缩放事件",[35,68822,68823],{},[64,68824],{"alt":66,"src":68825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[35,68827,68828],{},[64,68829],{"alt":66,"src":68830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[23,68832,68834],{"id":68833},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[35,68836,68837],{},[64,68838],{"alt":66,"src":68839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[35,68841,68842],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[35,68844,68845],{},[64,68846],{"alt":66,"src":68847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[35,68849,68850],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[35,68852,68853],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[35,68855,68856],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[35,68858,68859],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[35,68861,68862],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[35,68864,68865],{},[64,68866],{"alt":66,"src":68867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[35,68869,68870],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[35,68872,68873],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[35,68875,68876],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[35,68878,68879],{},"e.pageX-box.getBoundingClientRect()",[23,68881,68883],{"id":68882},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[35,68885,68886],{},[64,68887],{"alt":66,"src":68888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[35,68890,68891],{},"这个是相对于视口来说的，它是个方法，不是属性值",[23,68893,68895],{"id":68894},"_338-总结","3.3.8 总结",[35,68897,68898],{},[64,68899],{"alt":66,"src":68900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[35,68902,68903],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[35,68905,68906],{},"修改盒子的宽高只能通过width和height来实现",[23,68908,68910],{"id":68909},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[75,68912,68914],{"className":50960,"code":68913,"language":50962,"meta":66,"style":66},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[81,68915,68916,68921,68926,68931,68936],{"__ignoreMap":66},[84,68917,68918],{"class":86,"line":87},[84,68919,68920],{"class":477},"\u002F* 页面滑动 *\u002F\n",[84,68922,68923],{"class":86,"line":98},[84,68924,68925],{"class":477},"html {\n",[84,68927,68928],{"class":86,"line":70},[84,68929,68930],{"class":477},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[84,68932,68933],{"class":86,"line":120},[84,68934,68935],{"class":477},"  scroll-behavior: smooth;\n",[84,68937,68938],{"class":86,"line":131},[84,68939,1905],{"class":477},[35,68941,68942],{},"默认是auto",[23,68944,68946],{"id":68945},"_3310-日期对象","3.3.10 日期对象",[22327,68948,68950],{"id":68949},"_33101-实例化","3.3.10.1 实例化",[35,68952,68953],{},[64,68954],{"alt":66,"src":68955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22327,68957,68959],{"id":68958},"_33102-时期对象方法","3.3.10.2 时期对象方法",[35,68961,68962],{},[64,68963],{"alt":66,"src":68964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[35,68966,68967],{},"月份+1",[35,68969,68970],{},"老外认为第一天为0，星期天",[35,68972,68973],{},"方法使用的时候必须要跟括号",[35,68975,68976],{},"快速获得日期",[35,68978,68979],{},"\u002F\u002F 得到年月日",[35,68981,68982],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[35,68984,68985],{},"\u002F\u002F 得到当地日期",[35,68987,68988],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[35,68990,68991],{},"\u002F\u002F 得到当地时间",[35,68993,68994],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[35,68996,68997],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[35,68999,69000],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52140,69002,69003],{},"\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",[35,69005,69006],{},"学会去封装函数！",[22327,69008,69010],{"id":69009},"_33103-时间戳","3.3.10.3 时间戳",[35,69012,69013],{},[64,69014],{"alt":66,"src":69015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[35,69017,69018],{},[64,69019],{"alt":66,"src":69020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[35,69022,69023],{},"三种方法记住一个就可以",[23,69025,69027],{"id":69026},"_3311-节点操作","3.3.11 节点操作",[22327,69029,69031],{"id":69030},"_33111-dom节点","3.3.11.1 DOM节点",[35,69033,69034],{},[64,69035],{"alt":66,"src":69036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[35,69038,69039],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22327,69041,69043],{"id":69042},"_33112-查找节点","3.3.11.2 查找节点",[35,69045,69046],{},"前边的document.querySelector()是获取的元素",[35,69048,69049],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[35,69051,69052],{},[64,69053],{"alt":66,"src":69054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[28,69056,69057],{},[31,69058,69059],{},"父节点",[35,69061,69062],{},[64,69063],{"alt":66,"src":69064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[28,69066,69067],{"start":98},[31,69068,69069],{},"子节点",[35,69071,69072],{},[64,69073],{"alt":66,"src":69074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[35,69076,69077],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[35,69079,69080],{},"children获得的是伪数组，是亲儿子",[28,69082,69083],{"start":70},[31,69084,69085],{},"兄弟节点",[35,69087,69088],{},[64,69089],{"alt":66,"src":69090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22327,69092,69094],{"id":69093},"_33113-增加节点","3.3.11.3 增加节点",[35,69096,69097],{},[64,69098],{"alt":66,"src":69099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[35,69101,69102],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[35,69104,69105],{},[64,69106],{"alt":66,"src":69107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[35,69109,69110],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[35,69112,69113],{},"下面是写法的部分展示，就按照下边的格式来写",[35,69115,69116],{},"例：",[52140,69118,69119],{},"\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",[35,69121,69122],{},[64,69123],{"alt":66,"src":69124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[35,69126,69127],{},"false只克隆标签，里边的内容不会克隆过来",[75,69129,69131],{"className":50960,"code":69130,"language":50962,"meta":66,"style":66},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[81,69132,69133],{"__ignoreMap":66},[84,69134,69135],{"class":86,"line":87},[84,69136,69130],{"class":477},[22327,69138,69140],{"id":69139},"_33114-删除节点","3.3.11.4 删除节点",[35,69142,69143],{},[64,69144],{"alt":66,"src":69145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[35,69147,69148],{},"父亲删儿子",[35,69150,69151],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[23,69153,69155],{"id":69154},"_3312-m端事件","3.3.12 M端事件",[35,69157,69158],{},"M端就是移动端",[35,69160,69161],{},[64,69162],{"alt":66,"src":69163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[23,69165,69167],{"id":69166},"_3313-插件","3.3.13 插件",[35,69169,69170],{},"要熟悉官网！！！",[35,69172,69173],{},[39,69174,69175],{"href":69175,"rel":69176},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[43],[35,69178,69179],{},[39,69180,69181],{"href":69181,"rel":69182},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[43],[23,69184,69186],{"id":69185},"_3314-学生信息表","3.3.14 学生信息表",[28,69188,69189,69192,69195,69198,69201,69204,69207,69210],{},[31,69190,69191],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[31,69193,69194],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[31,69196,69197],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[31,69199,69200],{},"用好表单元素自带的属性，value,name等",[31,69202,69203],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[31,69205,69206],{},"不要忘记事件对象",[31,69208,69209],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[31,69211,69212],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[35,69214,69215],{},"结构：",[75,69217,69219],{"className":50960,"code":69218,"language":50962,"meta":66,"style":66},"\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",[81,69220,69221,69231,69245,69249,69257,69271,69291,69312,69325,69349,69357,69361,69369,69382,69403,69431,69459,69464,69486,69506,69525,69533,69561,69583,69603,69623,69643,69663,69683,69691,69711,69719,69723,69736,69744,69752,69760,69773,69786,69799,69812,69825,69838,69851,69859,69867,69875,69880,69885,69890,69895,69900,69905,69910,69915,69920,69925,69930,69935,69940,69948,69956,69964,69968,69988,70007,70027,70047,70067,70087,70091,70096,70116,70121,70131,70136,70141,70161,70183,70188,70198,70202,70206,70211,70216,70245,70259,70274,70278,70282,70286,70291,70302,70315,70320,70325,70330,70335,70340,70344,70349,70354,70363,70368,70373,70385,70390,70397,70401,70406,70416,70421,70431,70436,70464,70485,70495,70515,70533,70550,70567,70584,70601,70605,70615,70620,70625,70630,70641,70645,70649,70653,70658,70663,70684,70696,70701,70706,70711,70725,70730,70737,70741,70745,70753,70757,70765,70769],{"__ignoreMap":66},[84,69222,69223,69225,69227,69229],{"class":86,"line":87},[84,69224,51624],{"class":477},[84,69226,51628],{"class":51627},[84,69228,51631],{"class":90},[84,69230,51634],{"class":477},[84,69232,69233,69235,69237,69239,69241,69243],{"class":86,"line":98},[84,69234,1383],{"class":477},[84,69236,50962],{"class":51627},[84,69238,51643],{"class":90},[84,69240,523],{"class":477},[84,69242,51648],{"class":104},[84,69244,51634],{"class":477},[84,69246,69247],{"class":86,"line":70},[84,69248,2729],{"emptyLinePlaceholder":403},[84,69250,69251,69253,69255],{"class":86,"line":120},[84,69252,1383],{"class":477},[84,69254,51661],{"class":51627},[84,69256,51634],{"class":477},[84,69258,69259,69261,69263,69265,69267,69269],{"class":86,"line":131},[84,69260,52471],{"class":477},[84,69262,51671],{"class":51627},[84,69264,51674],{"class":90},[84,69266,523],{"class":477},[84,69268,51679],{"class":104},[84,69270,59453],{"class":477},[84,69272,69273,69275,69277,69279,69281,69283,69285,69287,69289],{"class":86,"line":145},[84,69274,52471],{"class":477},[84,69276,51671],{"class":51627},[84,69278,15249],{"class":90},[84,69280,523],{"class":477},[84,69282,51718],{"class":104},[84,69284,51698],{"class":90},[84,69286,523],{"class":477},[84,69288,51725],{"class":104},[84,69290,59453],{"class":477},[84,69292,69293,69295,69297,69299,69301,69303,69305,69307,69310],{"class":86,"line":156},[84,69294,52471],{"class":477},[84,69296,51671],{"class":51627},[84,69298,51690],{"class":90},[84,69300,523],{"class":477},[84,69302,51695],{"class":104},[84,69304,51698],{"class":90},[84,69306,523],{"class":477},[84,69308,69309],{"class":104},"\"ie=edge\"",[84,69311,59453],{"class":477},[84,69313,69314,69316,69318,69321,69323],{"class":86,"line":164},[84,69315,52471],{"class":477},[84,69317,51734],{"class":51627},[84,69319,69320],{"class":477},">学生信息管理\u003C\u002F",[84,69322,51734],{"class":51627},[84,69324,51634],{"class":477},[84,69326,69327,69329,69332,69335,69337,69340,69342,69344,69347],{"class":86,"line":175},[84,69328,52471],{"class":477},[84,69330,69331],{"class":51627},"link",[84,69333,69334],{"class":90}," rel",[84,69336,523],{"class":477},[84,69338,69339],{"class":104},"\"stylesheet\"",[84,69341,61383],{"class":90},[84,69343,523],{"class":477},[84,69345,69346],{"class":104},"\"css\u002Findex.css\"",[84,69348,59453],{"class":477},[84,69350,69351,69353,69355],{"class":86,"line":185},[84,69352,52112],{"class":477},[84,69354,51661],{"class":51627},[84,69356,51634],{"class":477},[84,69358,69359],{"class":86,"line":195},[84,69360,2729],{"emptyLinePlaceholder":403},[84,69362,69363,69365,69367],{"class":86,"line":206},[84,69364,1383],{"class":477},[84,69366,52127],{"class":51627},[84,69368,51634],{"class":477},[84,69370,69371,69373,69375,69378,69380],{"class":86,"line":217},[84,69372,52471],{"class":477},[84,69374,10],{"class":51627},[84,69376,69377],{"class":477},">新增学员\u003C\u002F",[84,69379,10],{"class":51627},[84,69381,51634],{"class":477},[84,69383,69384,69386,69388,69390,69392,69394,69397,69399,69401],{"class":86,"line":227},[84,69385,52471],{"class":477},[84,69387,66951],{"class":51627},[84,69389,53813],{"class":90},[84,69391,523],{"class":477},[84,69393,62990],{"class":104},[84,69395,69396],{"class":90}," autocomplete",[84,69398,523],{"class":477},[84,69400,32103],{"class":104},[84,69402,51634],{"class":477},[84,69404,69405,69408,69410,69412,69414,69416,69418,69420,69423,69425,69427,69429],{"class":86,"line":238},[84,69406,69407],{"class":477},"    姓名：\u003C",[84,69409,54147],{"class":51627},[84,69411,54150],{"class":90},[84,69413,523],{"class":477},[84,69415,63025],{"class":104},[84,69417,53813],{"class":90},[84,69419,523],{"class":477},[84,69421,69422],{"class":104},"\"uname\"",[84,69424,15249],{"class":90},[84,69426,523],{"class":477},[84,69428,69422],{"class":104},[84,69430,59453],{"class":477},[84,69432,69433,69436,69438,69440,69442,69444,69446,69448,69451,69453,69455,69457],{"class":86,"line":249},[84,69434,69435],{"class":477},"    年龄：\u003C",[84,69437,54147],{"class":51627},[84,69439,54150],{"class":90},[84,69441,523],{"class":477},[84,69443,63025],{"class":104},[84,69445,53813],{"class":90},[84,69447,523],{"class":477},[84,69449,69450],{"class":104},"\"age\"",[84,69452,15249],{"class":90},[84,69454,523],{"class":477},[84,69456,69450],{"class":104},[84,69458,59453],{"class":477},[84,69460,69461],{"class":86,"line":262},[84,69462,69463],{"class":477},"    性别:\n",[84,69465,69466,69468,69471,69473,69475,69478,69480,69482,69484],{"class":86,"line":273},[84,69467,51668],{"class":477},[84,69469,69470],{"class":51627},"select",[84,69472,15249],{"class":90},[84,69474,523],{"class":477},[84,69476,69477],{"class":104},"\"gender\"",[84,69479,53813],{"class":90},[84,69481,523],{"class":477},[84,69483,69477],{"class":104},[84,69485,51634],{"class":477},[84,69487,69488,69490,69493,69495,69497,69499,69502,69504],{"class":86,"line":283},[84,69489,55560],{"class":477},[84,69491,69492],{"class":51627},"option",[84,69494,66977],{"class":90},[84,69496,523],{"class":477},[84,69498,10290],{"class":104},[84,69500,69501],{"class":477},">男\u003C\u002F",[84,69503,69492],{"class":51627},[84,69505,51634],{"class":477},[84,69507,69508,69510,69512,69514,69516,69518,69521,69523],{"class":86,"line":294},[84,69509,55560],{"class":477},[84,69511,69492],{"class":51627},[84,69513,66977],{"class":90},[84,69515,523],{"class":477},[84,69517,10359],{"class":104},[84,69519,69520],{"class":477},">女\u003C\u002F",[84,69522,69492],{"class":51627},[84,69524,51634],{"class":477},[84,69526,69527,69529,69531],{"class":86,"line":2028},[84,69528,52103],{"class":477},[84,69530,69470],{"class":51627},[84,69532,51634],{"class":477},[84,69534,69535,69538,69540,69542,69544,69546,69548,69550,69553,69555,69557,69559],{"class":86,"line":2057},[84,69536,69537],{"class":477},"    薪资：\u003C",[84,69539,54147],{"class":51627},[84,69541,54150],{"class":90},[84,69543,523],{"class":477},[84,69545,63025],{"class":104},[84,69547,53813],{"class":90},[84,69549,523],{"class":477},[84,69551,69552],{"class":104},"\"salary\"",[84,69554,15249],{"class":90},[84,69556,523],{"class":477},[84,69558,69552],{"class":104},[84,69560,59453],{"class":477},[84,69562,69563,69566,69568,69570,69572,69575,69577,69579,69581],{"class":86,"line":2062},[84,69564,69565],{"class":477},"    就业城市：\u003C",[84,69567,69470],{"class":51627},[84,69569,15249],{"class":90},[84,69571,523],{"class":477},[84,69573,69574],{"class":104},"\"city\"",[84,69576,53813],{"class":90},[84,69578,523],{"class":477},[84,69580,69574],{"class":104},[84,69582,51634],{"class":477},[84,69584,69585,69587,69589,69591,69593,69596,69599,69601],{"class":86,"line":2079},[84,69586,55560],{"class":477},[84,69588,69492],{"class":51627},[84,69590,66977],{"class":90},[84,69592,523],{"class":477},[84,69594,69595],{"class":104},"\"北京\"",[84,69597,69598],{"class":477},">北京\u003C\u002F",[84,69600,69492],{"class":51627},[84,69602,51634],{"class":477},[84,69604,69605,69607,69609,69611,69613,69616,69619,69621],{"class":86,"line":2084},[84,69606,55560],{"class":477},[84,69608,69492],{"class":51627},[84,69610,66977],{"class":90},[84,69612,523],{"class":477},[84,69614,69615],{"class":104},"\"上海\"",[84,69617,69618],{"class":477},">上海\u003C\u002F",[84,69620,69492],{"class":51627},[84,69622,51634],{"class":477},[84,69624,69625,69627,69629,69631,69633,69636,69639,69641],{"class":86,"line":2089},[84,69626,55560],{"class":477},[84,69628,69492],{"class":51627},[84,69630,66977],{"class":90},[84,69632,523],{"class":477},[84,69634,69635],{"class":104},"\"广州\"",[84,69637,69638],{"class":477},">广州\u003C\u002F",[84,69640,69492],{"class":51627},[84,69642,51634],{"class":477},[84,69644,69645,69647,69649,69651,69653,69656,69659,69661],{"class":86,"line":2094},[84,69646,55560],{"class":477},[84,69648,69492],{"class":51627},[84,69650,66977],{"class":90},[84,69652,523],{"class":477},[84,69654,69655],{"class":104},"\"深圳\"",[84,69657,69658],{"class":477},">深圳\u003C\u002F",[84,69660,69492],{"class":51627},[84,69662,51634],{"class":477},[84,69664,69665,69667,69669,69671,69673,69676,69679,69681],{"class":86,"line":2108},[84,69666,55560],{"class":477},[84,69668,69492],{"class":51627},[84,69670,66977],{"class":90},[84,69672,523],{"class":477},[84,69674,69675],{"class":104},"\"曹县\"",[84,69677,69678],{"class":477},">曹县\u003C\u002F",[84,69680,69492],{"class":51627},[84,69682,51634],{"class":477},[84,69684,69685,69687,69689],{"class":86,"line":2113},[84,69686,52103],{"class":477},[84,69688,69470],{"class":51627},[84,69690,51634],{"class":477},[84,69692,69693,69695,69697,69699,69701,69704,69707,69709],{"class":86,"line":2906},[84,69694,51668],{"class":477},[84,69696,54213],{"class":51627},[84,69698,53813],{"class":90},[84,69700,523],{"class":477},[84,69702,69703],{"class":104},"\"add\"",[84,69705,69706],{"class":477},">录入\u003C\u002F",[84,69708,54213],{"class":51627},[84,69710,51634],{"class":477},[84,69712,69713,69715,69717],{"class":86,"line":2920},[84,69714,52744],{"class":477},[84,69716,66951],{"class":51627},[84,69718,51634],{"class":477},[84,69720,69721],{"class":86,"line":2928},[84,69722,2729],{"emptyLinePlaceholder":403},[84,69724,69725,69727,69729,69732,69734],{"class":86,"line":2933},[84,69726,52471],{"class":477},[84,69728,10],{"class":51627},[84,69730,69731],{"class":477},">就业榜\u003C\u002F",[84,69733,10],{"class":51627},[84,69735,51634],{"class":477},[84,69737,69738,69740,69742],{"class":86,"line":2939},[84,69739,52471],{"class":477},[84,69741,612],{"class":51627},[84,69743,51634],{"class":477},[84,69745,69746,69748,69750],{"class":86,"line":2945},[84,69747,51668],{"class":477},[84,69749,615],{"class":51627},[84,69751,51634],{"class":477},[84,69753,69754,69756,69758],{"class":86,"line":2950},[84,69755,55560],{"class":477},[84,69757,618],{"class":51627},[84,69759,51634],{"class":477},[84,69761,69762,69764,69766,69769,69771],{"class":86,"line":8277},[84,69763,55628],{"class":477},[84,69765,621],{"class":51627},[84,69767,69768],{"class":477},">序号\u003C\u002F",[84,69770,621],{"class":51627},[84,69772,51634],{"class":477},[84,69774,69775,69777,69779,69782,69784],{"class":86,"line":8301},[84,69776,55628],{"class":477},[84,69778,621],{"class":51627},[84,69780,69781],{"class":477},">姓名\u003C\u002F",[84,69783,621],{"class":51627},[84,69785,51634],{"class":477},[84,69787,69788,69790,69792,69795,69797],{"class":86,"line":8306},[84,69789,55628],{"class":477},[84,69791,621],{"class":51627},[84,69793,69794],{"class":477},">年龄\u003C\u002F",[84,69796,621],{"class":51627},[84,69798,51634],{"class":477},[84,69800,69801,69803,69805,69808,69810],{"class":86,"line":8312},[84,69802,55628],{"class":477},[84,69804,621],{"class":51627},[84,69806,69807],{"class":477},">性别\u003C\u002F",[84,69809,621],{"class":51627},[84,69811,51634],{"class":477},[84,69813,69814,69816,69818,69821,69823],{"class":86,"line":8339},[84,69815,55628],{"class":477},[84,69817,621],{"class":51627},[84,69819,69820],{"class":477},">薪资\u003C\u002F",[84,69822,621],{"class":51627},[84,69824,51634],{"class":477},[84,69826,69827,69829,69831,69834,69836],{"class":86,"line":8344},[84,69828,55628],{"class":477},[84,69830,621],{"class":51627},[84,69832,69833],{"class":477},">就业城市\u003C\u002F",[84,69835,621],{"class":51627},[84,69837,51634],{"class":477},[84,69839,69840,69842,69844,69847,69849],{"class":86,"line":8350},[84,69841,55628],{"class":477},[84,69843,621],{"class":51627},[84,69845,69846],{"class":477},">操作\u003C\u002F",[84,69848,621],{"class":51627},[84,69850,51634],{"class":477},[84,69852,69853,69855,69857],{"class":86,"line":8362},[84,69854,55733],{"class":477},[84,69856,618],{"class":51627},[84,69858,51634],{"class":477},[84,69860,69861,69863,69865],{"class":86,"line":8374},[84,69862,52103],{"class":477},[84,69864,615],{"class":51627},[84,69866,51634],{"class":477},[84,69868,69869,69871,69873],{"class":86,"line":8386},[84,69870,51668],{"class":477},[84,69872,659],{"class":51627},[84,69874,51634],{"class":477},[84,69876,69877],{"class":86,"line":10045},[84,69878,69879],{"class":328},"      \u003C!-- \n",[84,69881,69882],{"class":86,"line":10070},[84,69883,69884],{"class":328},"        \u003Ctr>\n",[84,69886,69887],{"class":86,"line":10093},[84,69888,69889],{"class":328},"          \u003Ctd>1001\u003C\u002Ftd>\n",[84,69891,69892],{"class":86,"line":10117},[84,69893,69894],{"class":328},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[84,69896,69897],{"class":86,"line":10122},[84,69898,69899],{"class":328},"          \u003Ctd>19\u003C\u002Ftd>\n",[84,69901,69902],{"class":86,"line":10127},[84,69903,69904],{"class":328},"          \u003Ctd>男\u003C\u002Ftd>\n",[84,69906,69907],{"class":86,"line":10132},[84,69908,69909],{"class":328},"          \u003Ctd>15000\u003C\u002Ftd>\n",[84,69911,69912],{"class":86,"line":10141},[84,69913,69914],{"class":328},"          \u003Ctd>上海\u003C\u002Ftd>\n",[84,69916,69917],{"class":86,"line":10146},[84,69918,69919],{"class":328},"          \u003Ctd>\n",[84,69921,69922],{"class":86,"line":10152},[84,69923,69924],{"class":328},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[84,69926,69927],{"class":86,"line":10173},[84,69928,69929],{"class":328},"          \u003C\u002Ftd>\n",[84,69931,69932],{"class":86,"line":10179},[84,69933,69934],{"class":328},"        \u003C\u002Ftr> \n",[84,69936,69937],{"class":86,"line":10193},[84,69938,69939],{"class":328},"        -->\n",[84,69941,69942,69944,69946],{"class":86,"line":10199},[84,69943,52103],{"class":477},[84,69945,659],{"class":51627},[84,69947,51634],{"class":477},[84,69949,69950,69952,69954],{"class":86,"line":10226},[84,69951,52744],{"class":477},[84,69953,612],{"class":51627},[84,69955,51634],{"class":477},[84,69957,69958,69960,69962],{"class":86,"line":10235},[84,69959,52471],{"class":477},[84,69961,52140],{"class":51627},[84,69963,51634],{"class":477},[84,69965,69966],{"class":86,"line":10241},[84,69967,60284],{"class":328},[84,69969,69970,69972,69975,69977,69979,69981,69983,69986],{"class":86,"line":10249},[84,69971,11550],{"class":473},[84,69973,69974],{"class":94}," uname",[84,69976,13893],{"class":473},[84,69978,54722],{"class":477},[84,69980,54725],{"class":90},[84,69982,478],{"class":477},[84,69984,69985],{"class":104},"'.uname'",[84,69987,484],{"class":477},[84,69989,69990,69992,69994,69996,69998,70000,70002,70005],{"class":86,"line":10254},[84,69991,11550],{"class":473},[84,69993,16018],{"class":94},[84,69995,13893],{"class":473},[84,69997,54722],{"class":477},[84,69999,54725],{"class":90},[84,70001,478],{"class":477},[84,70003,70004],{"class":104},"'.age'",[84,70006,484],{"class":477},[84,70008,70009,70011,70014,70016,70018,70020,70022,70025],{"class":86,"line":16933},[84,70010,11550],{"class":473},[84,70012,70013],{"class":94}," gender",[84,70015,13893],{"class":473},[84,70017,54722],{"class":477},[84,70019,54725],{"class":90},[84,70021,478],{"class":477},[84,70023,70024],{"class":104},"'.gender'",[84,70026,484],{"class":477},[84,70028,70029,70031,70034,70036,70038,70040,70042,70045],{"class":86,"line":16939},[84,70030,11550],{"class":473},[84,70032,70033],{"class":94}," salary",[84,70035,13893],{"class":473},[84,70037,54722],{"class":477},[84,70039,54725],{"class":90},[84,70041,478],{"class":477},[84,70043,70044],{"class":104},"'.salary'",[84,70046,484],{"class":477},[84,70048,70049,70051,70054,70056,70058,70060,70062,70065],{"class":86,"line":16962},[84,70050,11550],{"class":473},[84,70052,70053],{"class":94}," city",[84,70055,13893],{"class":473},[84,70057,54722],{"class":477},[84,70059,54725],{"class":90},[84,70061,478],{"class":477},[84,70063,70064],{"class":104},"'.city'",[84,70066,484],{"class":477},[84,70068,70069,70071,70074,70076,70078,70080,70082,70085],{"class":86,"line":16968},[84,70070,11550],{"class":473},[84,70072,70073],{"class":94}," tbody",[84,70075,13893],{"class":473},[84,70077,54722],{"class":477},[84,70079,54725],{"class":90},[84,70081,478],{"class":477},[84,70083,70084],{"class":104},"'tbody'",[84,70086,484],{"class":477},[84,70088,70089],{"class":86,"line":16991},[84,70090,2729],{"emptyLinePlaceholder":403},[84,70092,70093],{"class":86,"line":17005},[84,70094,70095],{"class":328},"    \u002F\u002F 获取所有带有name属性的元素\n",[84,70097,70098,70100,70103,70105,70107,70109,70111,70114],{"class":86,"line":17025},[84,70099,11550],{"class":473},[84,70101,70102],{"class":94}," items",[84,70104,13893],{"class":473},[84,70106,54722],{"class":477},[84,70108,56007],{"class":90},[84,70110,478],{"class":477},[84,70112,70113],{"class":104},"'[name]'",[84,70115,484],{"class":477},[84,70117,70118],{"class":86,"line":17031},[84,70119,70120],{"class":328},"    \u002F\u002F 声明一个空的数组\n",[84,70122,70123,70125,70127,70129],{"class":86,"line":17042},[84,70124,11550],{"class":473},[84,70126,58021],{"class":94},[84,70128,13893],{"class":473},[84,70130,52165],{"class":477},[84,70132,70133],{"class":86,"line":17065},[84,70134,70135],{"class":328},"    \u002F\u002F 1.录入模块\n",[84,70137,70138],{"class":86,"line":17087},[84,70139,70140],{"class":328},"    \u002F\u002F 1.1这是一个表单提交事件\n",[84,70142,70143,70145,70148,70150,70152,70154,70156,70159],{"class":86,"line":17092},[84,70144,11550],{"class":473},[84,70146,70147],{"class":94}," info",[84,70149,13893],{"class":473},[84,70151,54722],{"class":477},[84,70153,54725],{"class":90},[84,70155,478],{"class":477},[84,70157,70158],{"class":104},"'.info'",[84,70160,484],{"class":477},[84,70162,70163,70166,70168,70170,70173,70175,70177,70179,70181],{"class":86,"line":17098},[84,70164,70165],{"class":477},"    info.",[84,70167,58139],{"class":90},[84,70169,478],{"class":477},[84,70171,70172],{"class":104},"'submit'",[84,70174,12764],{"class":477},[84,70176,54775],{"class":473},[84,70178,1991],{"class":477},[84,70180,550],{"class":5545},[84,70182,12771],{"class":477},[84,70184,70185],{"class":86,"line":17112},[84,70186,70187],{"class":328},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[84,70189,70190,70193,70196],{"class":86,"line":17125},[84,70191,70192],{"class":477},"      e.",[84,70194,70195],{"class":90},"preventDefault",[84,70197,2305],{"class":477},[84,70199,70200],{"class":86,"line":17130},[84,70201,60338],{"class":328},[84,70203,70204],{"class":86,"line":17144},[84,70205,2729],{"emptyLinePlaceholder":403},[84,70207,70208],{"class":86,"line":17149},[84,70209,70210],{"class":328},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[84,70212,70213],{"class":86,"line":17155},[84,70214,70215],{"class":328},"      \u002F\u002F 先遍历循环\n",[84,70217,70218,70220,70222,70224,70226,70228,70230,70232,70234,70237,70239,70241,70243],{"class":86,"line":17160},[84,70219,52611],{"class":473},[84,70221,1991],{"class":477},[84,70223,52174],{"class":473},[84,70225,9767],{"class":477},[84,70227,523],{"class":473},[84,70229,4422],{"class":94},[84,70231,9774],{"class":477},[84,70233,1383],{"class":473},[84,70235,70236],{"class":477}," items.",[84,70238,52295],{"class":94},[84,70240,3543],{"class":477},[84,70242,2621],{"class":473},[84,70244,12771],{"class":477},[84,70246,70247,70249,70252,70254,70257],{"class":86,"line":17174},[84,70248,2826],{"class":473},[84,70250,70251],{"class":477}," (items[i].value ",[84,70253,54812],{"class":473},[84,70255,70256],{"class":104}," ''",[84,70258,12771],{"class":477},[84,70260,70261,70264,70267,70269,70272],{"class":86,"line":17179},[84,70262,70263],{"class":473},"          return",[84,70265,70266],{"class":90}," alert",[84,70268,478],{"class":477},[84,70270,70271],{"class":104},"'输入内容不能为空'",[84,70273,484],{"class":477},[84,70275,70276],{"class":86,"line":17184},[84,70277,2858],{"class":477},[84,70279,70280],{"class":86,"line":17198},[84,70281,52725],{"class":477},[84,70283,70284],{"class":86,"line":17210},[84,70285,2729],{"emptyLinePlaceholder":403},[84,70287,70288],{"class":86,"line":17215},[84,70289,70290],{"class":328},"      \u002F\u002F 创建新的对象\n",[84,70292,70293,70295,70298,70300],{"class":86,"line":17228},[84,70294,58554],{"class":473},[84,70296,70297],{"class":94}," obj",[84,70299,13893],{"class":473},[84,70301,15901],{"class":477},[84,70303,70304,70307,70309,70311,70313],{"class":86,"line":17233},[84,70305,70306],{"class":477},"        stuID: arr.",[84,70308,52295],{"class":94},[84,70310,45893],{"class":473},[84,70312,25446],{"class":94},[84,70314,31793],{"class":477},[84,70316,70317],{"class":86,"line":17238},[84,70318,70319],{"class":477},"        uname: uname.value,\n",[84,70321,70322],{"class":86,"line":17243},[84,70323,70324],{"class":477},"        age: age.value,\n",[84,70326,70327],{"class":86,"line":17256},[84,70328,70329],{"class":477},"        gender: gender.value,\n",[84,70331,70332],{"class":86,"line":17261},[84,70333,70334],{"class":477},"        salary: salary.value,\n",[84,70336,70337],{"class":86,"line":32960},[84,70338,70339],{"class":477},"        city: city.value\n",[84,70341,70342],{"class":86,"line":32966},[84,70343,52725],{"class":477},[84,70345,70346],{"class":86,"line":32972},[84,70347,70348],{"class":328},"      \u002F\u002F console.log(obj);\n",[84,70350,70351],{"class":86,"line":32978},[84,70352,70353],{"class":328},"      \u002F\u002F 追加到数组里面\n",[84,70355,70356,70358,70360],{"class":86,"line":32984},[84,70357,58333],{"class":477},[84,70359,52211],{"class":90},[84,70361,70362],{"class":477},"(obj)\n",[84,70364,70365],{"class":86,"line":32995},[84,70366,70367],{"class":328},"      \u002F\u002F console.log(arr);\n",[84,70369,70370],{"class":86,"line":33001},[84,70371,70372],{"class":328},"      \u002F\u002F 清空表单  reset重置表单\n",[84,70374,70375,70378,70380,70383],{"class":86,"line":33021},[84,70376,70377],{"class":94},"      this",[84,70379,1031],{"class":477},[84,70381,70382],{"class":90},"reset",[84,70384,2305],{"class":477},[84,70386,70387],{"class":86,"line":33027},[84,70388,70389],{"class":328},"      \u002F\u002F 调用渲染函数\n",[84,70391,70392,70395],{"class":86,"line":33038},[84,70393,70394],{"class":90},"      render",[84,70396,2305],{"class":477},[84,70398,70399],{"class":86,"line":33044},[84,70400,33788],{"class":477},[84,70402,70403],{"class":86,"line":33050},[84,70404,70405],{"class":328},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[84,70407,70408,70411,70414],{"class":86,"line":33056},[84,70409,70410],{"class":473},"    function",[84,70412,70413],{"class":90}," render",[84,70415,11182],{"class":477},[84,70417,70418],{"class":86,"line":33062},[84,70419,70420],{"class":328},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[84,70422,70423,70426,70428],{"class":86,"line":33068},[84,70424,70425],{"class":477},"      tbody.innerHTML ",[84,70427,523],{"class":473},[84,70429,70430],{"class":104}," ''\n",[84,70432,70433],{"class":86,"line":33074},[84,70434,70435],{"class":328},"      \u002F\u002F 遍历数组\n",[84,70437,70438,70440,70442,70444,70446,70448,70450,70452,70454,70456,70458,70460,70462],{"class":86,"line":33080},[84,70439,52611],{"class":473},[84,70441,1991],{"class":477},[84,70443,52174],{"class":473},[84,70445,9767],{"class":477},[84,70447,523],{"class":473},[84,70449,4422],{"class":94},[84,70451,9774],{"class":477},[84,70453,1383],{"class":473},[84,70455,52292],{"class":477},[84,70457,52295],{"class":94},[84,70459,3543],{"class":477},[84,70461,2621],{"class":473},[84,70463,12771],{"class":477},[84,70465,70466,70468,70471,70473,70475,70478,70480,70483],{"class":86,"line":33100},[84,70467,61596],{"class":473},[84,70469,70470],{"class":94}," tr",[84,70472,13893],{"class":473},[84,70474,54722],{"class":477},[84,70476,70477],{"class":90},"createElement",[84,70479,478],{"class":477},[84,70481,70482],{"class":104},"'tr'",[84,70484,484],{"class":477},[84,70486,70487,70490,70492],{"class":86,"line":33106},[84,70488,70489],{"class":477},"        tr.innerHTML ",[84,70491,523],{"class":473},[84,70493,70494],{"class":104}," `\n",[84,70496,70497,70500,70502,70504,70506,70509,70512],{"class":86,"line":33122},[84,70498,70499],{"class":104},"        \u003Ctd>${",[84,70501,4209],{"class":477},[84,70503,1363],{"class":104},[84,70505,914],{"class":477},[84,70507,70508],{"class":104},"].",[84,70510,70511],{"class":477},"stuID",[84,70513,70514],{"class":104},"}\u003C\u002Ftd>\n",[84,70516,70517,70520,70522,70524,70526,70528,70531],{"class":86,"line":33128},[84,70518,70519],{"class":104},"          \u003Ctd>${",[84,70521,4209],{"class":477},[84,70523,1363],{"class":104},[84,70525,914],{"class":477},[84,70527,70508],{"class":104},[84,70529,70530],{"class":477},"uname",[84,70532,70514],{"class":104},[84,70534,70535,70537,70539,70541,70543,70545,70548],{"class":86,"line":33142},[84,70536,70519],{"class":104},[84,70538,4209],{"class":477},[84,70540,1363],{"class":104},[84,70542,914],{"class":477},[84,70544,70508],{"class":104},[84,70546,70547],{"class":477},"age",[84,70549,70514],{"class":104},[84,70551,70552,70554,70556,70558,70560,70562,70565],{"class":86,"line":33148},[84,70553,70519],{"class":104},[84,70555,4209],{"class":477},[84,70557,1363],{"class":104},[84,70559,914],{"class":477},[84,70561,70508],{"class":104},[84,70563,70564],{"class":477},"gender",[84,70566,70514],{"class":104},[84,70568,70569,70571,70573,70575,70577,70579,70582],{"class":86,"line":33163},[84,70570,70519],{"class":104},[84,70572,4209],{"class":477},[84,70574,1363],{"class":104},[84,70576,914],{"class":477},[84,70578,70508],{"class":104},[84,70580,70581],{"class":477},"salary",[84,70583,70514],{"class":104},[84,70585,70586,70588,70590,70592,70594,70596,70599],{"class":86,"line":33169},[84,70587,70519],{"class":104},[84,70589,4209],{"class":477},[84,70591,1363],{"class":104},[84,70593,914],{"class":477},[84,70595,70508],{"class":104},[84,70597,70598],{"class":477},"city",[84,70600,70514],{"class":104},[84,70602,70603],{"class":86,"line":33178},[84,70604,69919],{"class":104},[84,70606,70607,70610,70612],{"class":86,"line":33184},[84,70608,70609],{"class":104},"            \u003Ca href=\"javascript:\" data-id=${",[84,70611,914],{"class":477},[84,70613,70614],{"class":104},"}>删除\u003C\u002Fa>\n",[84,70616,70617],{"class":86,"line":33193},[84,70618,70619],{"class":104},"          \u003C\u002Ftd> \n",[84,70621,70622],{"class":86,"line":33199},[84,70623,70624],{"class":104},"          `\n",[84,70626,70627],{"class":86,"line":33205},[84,70628,70629],{"class":328},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[84,70631,70632,70635,70638],{"class":86,"line":33214},[84,70633,70634],{"class":477},"        tbody.",[84,70636,70637],{"class":90},"appendChild",[84,70639,70640],{"class":477},"(tr)\n",[84,70642,70643],{"class":86,"line":33220},[84,70644,52725],{"class":477},[84,70646,70647],{"class":86,"line":33231},[84,70648,2516],{"class":477},[84,70650,70651],{"class":86,"line":33237},[84,70652,2729],{"emptyLinePlaceholder":403},[84,70654,70655],{"class":86,"line":33256},[84,70656,70657],{"class":328},"    \u002F\u002F 3.删除委托\n",[84,70659,70660],{"class":86,"line":33262},[84,70661,70662],{"class":328},"    \u002F\u002F 3.1 事件委托 tbody\n",[84,70664,70665,70668,70670,70672,70674,70676,70678,70680,70682],{"class":86,"line":33273},[84,70666,70667],{"class":477},"    tbody.",[84,70669,58139],{"class":90},[84,70671,478],{"class":477},[84,70673,58144],{"class":104},[84,70675,12764],{"class":477},[84,70677,54775],{"class":473},[84,70679,1991],{"class":477},[84,70681,550],{"class":5545},[84,70683,12771],{"class":477},[84,70685,70686,70688,70690,70692,70694],{"class":86,"line":33279},[84,70687,54806],{"class":473},[84,70689,67360],{"class":477},[84,70691,54812],{"class":473},[84,70693,68582],{"class":104},[84,70695,12771],{"class":477},[84,70697,70698],{"class":86,"line":33299},[84,70699,70700],{"class":328},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[84,70702,70703],{"class":86,"line":33315},[84,70704,70705],{"class":328},"        \u002F\u002F console.log(e.target.dataset.id);\n",[84,70707,70708],{"class":86,"line":33321},[84,70709,70710],{"class":328},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[84,70712,70713,70716,70718,70721,70723],{"class":86,"line":33335},[84,70714,70715],{"class":477},"        arr.",[84,70717,58336],{"class":90},[84,70719,70720],{"class":477},"(e.target.dataset.id, ",[84,70722,692],{"class":94},[84,70724,484],{"class":477},[84,70726,70727],{"class":86,"line":33341},[84,70728,70729],{"class":328},"        \u002F\u002F 重新渲染一次\n",[84,70731,70732,70735],{"class":86,"line":33347},[84,70733,70734],{"class":90},"        render",[84,70736,2305],{"class":477},[84,70738,70739],{"class":86,"line":33358},[84,70740,52725],{"class":477},[84,70742,70743],{"class":86,"line":33364},[84,70744,33788],{"class":477},[84,70746,70747,70749,70751],{"class":86,"line":33370},[84,70748,52744],{"class":477},[84,70750,52140],{"class":51627},[84,70752,51634],{"class":477},[84,70754,70755],{"class":86,"line":33380},[84,70756,2729],{"emptyLinePlaceholder":403},[84,70758,70759,70761,70763],{"class":86,"line":33386},[84,70760,52112],{"class":477},[84,70762,52127],{"class":51627},[84,70764,51634],{"class":477},[84,70766,70767],{"class":86,"line":33397},[84,70768,2729],{"emptyLinePlaceholder":403},[84,70770,70771,70773,70775],{"class":86,"line":33403},[84,70772,52112],{"class":477},[84,70774,50962],{"class":51627},[84,70776,51634],{"class":477},[35,70778,70779],{},"样式：",[75,70781,70785],{"className":70782,"code":70783,"language":70784,"meta":66,"style":66},"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",[81,70786,70787,70792,70802,70811,70815,70819,70824,70834,70839,70843,70848,70858,70863,70872,70876,70880,70885,70890,70900,70910,70915,70919,70924,70933,70943,70948,70958,70968,70972,70977,70985,70989,70994,70999,71004,71012,71021,71025,71030,71039,71043,71048,71057,71061,71066,71075,71084,71092,71096,71101,71110,71120,71129,71139,71145,71154,71164,71174,71178,71183,71192,71200,71210,71218,71227,71236,71246,71254,71258,71263,71272],{"__ignoreMap":66},[84,70788,70789],{"class":86,"line":87},[84,70790,70791],{"class":477},"* {\n",[84,70793,70794,70797,70799],{"class":86,"line":98},[84,70795,70796],{"class":51627},"  margin",[84,70798,51764],{"class":477},[84,70800,70801],{"class":104},"0;\n",[84,70803,70804,70807,70809],{"class":86,"line":70},[84,70805,70806],{"class":104},"  padding",[84,70808,51764],{"class":477},[84,70810,70801],{"class":104},[84,70812,70813],{"class":86,"line":120},[84,70814,1905],{"class":477},[84,70816,70817],{"class":86,"line":131},[84,70818,2729],{"emptyLinePlaceholder":403},[84,70820,70821],{"class":86,"line":145},[84,70822,70823],{"class":104},"a {\n",[84,70825,70826,70829,70831],{"class":86,"line":156},[84,70827,70828],{"class":51627},"  text-decoration",[84,70830,51764],{"class":477},[84,70832,70833],{"class":104},"none;\n",[84,70835,70836],{"class":86,"line":164},[84,70837,70838],{"class":104},"  color:#721c24;\n",[84,70840,70841],{"class":86,"line":175},[84,70842,1905],{"class":477},[84,70844,70845],{"class":86,"line":185},[84,70846,70847],{"class":104},"h1 {\n",[84,70849,70850,70853,70855],{"class":86,"line":195},[84,70851,70852],{"class":51627},"  text-align",[84,70854,51764],{"class":477},[84,70856,70857],{"class":104},"center;\n",[84,70859,70860],{"class":86,"line":206},[84,70861,70862],{"class":104},"  color:#333;\n",[84,70864,70865,70867,70869],{"class":86,"line":217},[84,70866,70796],{"class":51627},[84,70868,51764],{"class":477},[84,70870,70871],{"class":104},"20px 0;\n",[84,70873,70874],{"class":86,"line":227},[84,70875,3003],{"class":477},[84,70877,70878],{"class":86,"line":238},[84,70879,1905],{"class":477},[84,70881,70882],{"class":86,"line":249},[84,70883,70884],{"class":104},"table {\n",[84,70886,70887],{"class":86,"line":262},[84,70888,70889],{"class":104},"  margin:0 auto;\n",[84,70891,70892,70895,70897],{"class":86,"line":273},[84,70893,70894],{"class":51627},"  width",[84,70896,51764],{"class":477},[84,70898,70899],{"class":104},"800px;\n",[84,70901,70902,70905,70907],{"class":86,"line":283},[84,70903,70904],{"class":51627},"  border-collapse",[84,70906,51764],{"class":477},[84,70908,70909],{"class":104},"collapse;\n",[84,70911,70912],{"class":86,"line":294},[84,70913,70914],{"class":104},"  color:#004085;\n",[84,70916,70917],{"class":86,"line":2028},[84,70918,1905],{"class":477},[84,70920,70921],{"class":86,"line":2057},[84,70922,70923],{"class":104},"th {\n",[84,70925,70926,70928,70930],{"class":86,"line":2062},[84,70927,70806],{"class":51627},[84,70929,51764],{"class":477},[84,70931,70932],{"class":104},"10px;\n",[84,70934,70935,70938,70940],{"class":86,"line":2079},[84,70936,70937],{"class":51627},"  background",[84,70939,51764],{"class":477},[84,70941,70942],{"class":328},"#cfe5ff;\n",[84,70944,70945],{"class":86,"line":2084},[84,70946,70947],{"class":477},"  \n",[84,70949,70950,70953,70955],{"class":86,"line":2089},[84,70951,70952],{"class":51627},"  font-size",[84,70954,51764],{"class":477},[84,70956,70957],{"class":104},"20px;\n",[84,70959,70960,70963,70965],{"class":86,"line":2094},[84,70961,70962],{"class":51627},"  font-weight",[84,70964,51764],{"class":477},[84,70966,70967],{"class":104},"400;\n",[84,70969,70970],{"class":86,"line":2108},[84,70971,1905],{"class":477},[84,70973,70974],{"class":86,"line":2113},[84,70975,70976],{"class":104},"td,th {\n",[84,70978,70979,70982],{"class":86,"line":2906},[84,70980,70981],{"class":104},"  border:1px solid",[84,70983,70984],{"class":328}," #b8daff;\n",[84,70986,70987],{"class":86,"line":2920},[84,70988,1905],{"class":477},[84,70990,70991],{"class":86,"line":2928},[84,70992,70993],{"class":104},"td {\n",[84,70995,70996],{"class":86,"line":2933},[84,70997,70998],{"class":104},"  padding:10px;\n",[84,71000,71001],{"class":86,"line":2939},[84,71002,71003],{"class":104},"  color:#666;\n",[84,71005,71006,71008,71010],{"class":86,"line":2945},[84,71007,70852],{"class":51627},[84,71009,51764],{"class":477},[84,71011,70857],{"class":104},[84,71013,71014,71016,71018],{"class":86,"line":2950},[84,71015,70952],{"class":51627},[84,71017,51764],{"class":477},[84,71019,71020],{"class":104},"16px;\n",[84,71022,71023],{"class":86,"line":8277},[84,71024,1905],{"class":477},[84,71026,71027],{"class":86,"line":8301},[84,71028,71029],{"class":104},"tbody tr {\n",[84,71031,71032,71034,71036],{"class":86,"line":8306},[84,71033,70937],{"class":51627},[84,71035,51764],{"class":477},[84,71037,71038],{"class":328},"#fff;\n",[84,71040,71041],{"class":86,"line":8312},[84,71042,1905],{"class":477},[84,71044,71045],{"class":86,"line":8339},[84,71046,71047],{"class":104},"tbody tr:hover {\n",[84,71049,71050,71052,71054],{"class":86,"line":8344},[84,71051,70937],{"class":51627},[84,71053,51764],{"class":477},[84,71055,71056],{"class":328},"#e1ecf8;\n",[84,71058,71059],{"class":86,"line":8350},[84,71060,1905],{"class":477},[84,71062,71063],{"class":86,"line":8362},[84,71064,71065],{"class":104},".info {\n",[84,71067,71068,71070,71072],{"class":86,"line":8374},[84,71069,70894],{"class":51627},[84,71071,51764],{"class":477},[84,71073,71074],{"class":104},"900px;\n",[84,71076,71077,71079,71081],{"class":86,"line":8386},[84,71078,70796],{"class":51627},[84,71080,51764],{"class":477},[84,71082,71083],{"class":104},"50px auto;\n",[84,71085,71086,71088,71090],{"class":86,"line":10045},[84,71087,70852],{"class":51627},[84,71089,51764],{"class":477},[84,71091,70857],{"class":104},[84,71093,71094],{"class":86,"line":10070},[84,71095,1905],{"class":477},[84,71097,71098],{"class":86,"line":10093},[84,71099,71100],{"class":104},".info  input, .info select {\n",[84,71102,71103,71105,71107],{"class":86,"line":10117},[84,71104,70894],{"class":51627},[84,71106,51764],{"class":477},[84,71108,71109],{"class":104},"80px;\n",[84,71111,71112,71115,71117],{"class":86,"line":10122},[84,71113,71114],{"class":51627},"  height",[84,71116,51764],{"class":477},[84,71118,71119],{"class":104},"27px;\n",[84,71121,71122,71125,71127],{"class":86,"line":10127},[84,71123,71124],{"class":51627},"  outline",[84,71126,51764],{"class":477},[84,71128,70833],{"class":104},[84,71130,71131,71134,71136],{"class":86,"line":10132},[84,71132,71133],{"class":51627},"  border-radius",[84,71135,51764],{"class":477},[84,71137,71138],{"class":104},"5px;\n",[84,71140,71141,71143],{"class":86,"line":10141},[84,71142,70981],{"class":104},[84,71144,70984],{"class":328},[84,71146,71147,71150,71152],{"class":86,"line":10146},[84,71148,71149],{"class":51627},"  padding-left",[84,71151,51764],{"class":477},[84,71153,71138],{"class":104},[84,71155,71156,71159,71161],{"class":86,"line":10152},[84,71157,71158],{"class":51627},"  box-sizing",[84,71160,51764],{"class":477},[84,71162,71163],{"class":104},"border-box;\n",[84,71165,71166,71169,71171],{"class":86,"line":10173},[84,71167,71168],{"class":51627},"  margin-right",[84,71170,51764],{"class":477},[84,71172,71173],{"class":104},"15px;\n",[84,71175,71176],{"class":86,"line":10179},[84,71177,1905],{"class":477},[84,71179,71180],{"class":86,"line":10193},[84,71181,71182],{"class":104},".info button {\n",[84,71184,71185,71187,71189],{"class":86,"line":10199},[84,71186,70894],{"class":51627},[84,71188,51764],{"class":477},[84,71190,71191],{"class":104},"60px;\n",[84,71193,71194,71196,71198],{"class":86,"line":10226},[84,71195,71114],{"class":51627},[84,71197,51764],{"class":477},[84,71199,71119],{"class":104},[84,71201,71202,71205,71207],{"class":86,"line":10235},[84,71203,71204],{"class":51627},"  background-color",[84,71206,51764],{"class":477},[84,71208,71209],{"class":328},"#004085;\n",[84,71211,71212,71214,71216],{"class":86,"line":10241},[84,71213,71124],{"class":51627},[84,71215,51764],{"class":477},[84,71217,70833],{"class":104},[84,71219,71220,71223,71225],{"class":86,"line":10249},[84,71221,71222],{"class":51627},"  border",[84,71224,51764],{"class":477},[84,71226,70801],{"class":104},[84,71228,71229,71232,71234],{"class":86,"line":10254},[84,71230,71231],{"class":51627},"  color",[84,71233,51764],{"class":477},[84,71235,71038],{"class":328},[84,71237,71238,71241,71243],{"class":86,"line":16933},[84,71239,71240],{"class":51627},"  cursor",[84,71242,51764],{"class":477},[84,71244,71245],{"class":104},"pointer;\n",[84,71247,71248,71250,71252],{"class":86,"line":16939},[84,71249,71133],{"class":51627},[84,71251,51764],{"class":477},[84,71253,71138],{"class":104},[84,71255,71256],{"class":86,"line":16962},[84,71257,1905],{"class":477},[84,71259,71260],{"class":86,"line":16968},[84,71261,71262],{"class":104},".info .age {\n",[84,71264,71265,71267,71269],{"class":86,"line":16991},[84,71266,70894],{"class":51627},[84,71268,51764],{"class":477},[84,71270,71271],{"class":104},"50px;\n",[84,71273,71274],{"class":86,"line":17005},[84,71275,1905],{"class":477},[35,71277,71278],{},"思路：",[35,71280,71281],{},[64,71282],{"alt":66,"src":71283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[35,71285,71286],{},[64,71287],{"alt":66,"src":71288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[35,71290,71291],{},[64,71292],{"alt":66,"src":71293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[23,71295,71297],{"id":71296},"_3315-重绘回流","3.3.15 重绘回流",[35,71299,71300],{},[64,71301],{"alt":66,"src":71302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[35,71304,71305],{},[64,71306],{"alt":66,"src":71307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[35,71309,71310],{},[64,71311],{"alt":66,"src":71312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71314,71316],{"id":71315},"_34-bom","3.4 BOM",[35,71318,71319],{},[64,71320],{"alt":66,"src":71321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[35,71323,71324],{},"平时写的document省略了window而已，实际上是window.document",[35,71326,71327],{},"函数也是这样，调用的时候实际为window.fn()",[35,71329,71330],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[35,71332,71333],{},"window大部分情况下可以省略",[23,71335,71337],{"id":71336},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[35,71339,71340],{},"只执行一次",[35,71342,71343],{},[64,71344],{"alt":66,"src":71345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[35,71347,71348],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[35,71350,71351],{},[64,71352],{"alt":66,"src":71353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[23,71355,71357],{"id":71356},"_342-js执行机制","3.4.2 JS执行机制",[35,71359,71360],{},[64,71361],{"alt":66,"src":71362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[35,71364,71365],{},"两个的结果都是1111 3333 2222",[35,71367,71368],{},[64,71369],{"alt":66,"src":71370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[35,71372,71373],{},[64,71374],{"alt":66,"src":71375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[35,71377,71378],{},[64,71379],{"alt":66,"src":71380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[35,71382,71383],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[35,71385,71386],{},"工作流程：",[35,71388,71389],{},[64,71390],{"alt":66,"src":71391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[35,71393,71394],{},[64,71395],{"alt":66,"src":71396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[35,71398,71399],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[35,71401,71402],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[23,71404,71406],{"id":71405},"_343-location对象","3.4.3 location对象",[35,71408,71409],{},"location对象属于window这个全局对象下的，可以 省略window",[35,71411,71412],{},[64,71413],{"alt":66,"src":71414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[35,71416,71417],{},"href可以跳转页面",[28,71419,71420],{},[31,71421,71422],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[35,71424,71425],{},"search得到提交信息之后网站后边的地址",[35,71427,71428],{},[64,71429],{"alt":66,"src":71430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[35,71432,71433],{},[64,71434],{"alt":66,"src":71435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[28,71437,71438],{"start":98},[31,71439,71440],{},"hash:这个获取单页面应用#后边的地址",[35,71442,71443],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[35,71445,71446],{},[64,71447],{"alt":66,"src":71448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[75,71450,71452],{"className":53394,"code":71451,"language":53396,"meta":66,"style":66},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[81,71453,71454,71474,71494],{"__ignoreMap":66},[84,71455,71456,71458,71460,71462,71464,71467,71470,71472],{"class":86,"line":87},[84,71457,52471],{"class":477},[84,71459,39],{"class":51627},[84,71461,61383],{"class":90},[84,71463,523],{"class":477},[84,71465,71466],{"class":104},"\"#\u002Fmy\"",[84,71468,71469],{"class":477},">我的\u003C\u002F",[84,71471,39],{"class":51627},[84,71473,51634],{"class":477},[84,71475,71476,71478,71480,71482,71484,71487,71490,71492],{"class":86,"line":98},[84,71477,52471],{"class":477},[84,71479,39],{"class":51627},[84,71481,61383],{"class":90},[84,71483,523],{"class":477},[84,71485,71486],{"class":104},"\"#\u002Ffriend\"",[84,71488,71489],{"class":477},">关注\u003C\u002F",[84,71491,39],{"class":51627},[84,71493,51634],{"class":477},[84,71495,71496,71498,71500,71502,71504,71507,71510,71512],{"class":86,"line":70},[84,71497,52471],{"class":477},[84,71499,39],{"class":51627},[84,71501,61383],{"class":90},[84,71503,523],{"class":477},[84,71505,71506],{"class":104},"\"#\u002Fdownload\"",[84,71508,71509],{"class":477},">下载\u003C\u002F",[84,71511,39],{"class":51627},[84,71513,51634],{"class":477},[35,71515,71516],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[28,71518,71519],{"start":70},[31,71520,71521,71522,71524,71525,71527],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54,71523],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54,71526],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[23,71529,71531],{"id":71530},"_345-navigator对象","3.4.5 navigator对象",[35,71533,71534],{},[64,71535],{"alt":66,"src":71536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[75,71538,71542],{"className":71539,"code":71540,"language":71541,"meta":66,"style":66},"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",[81,71543,71544,71549,71560,71572,71577,71628,71669,71674,71687,71699,71704],{"__ignoreMap":66},[84,71545,71546],{"class":86,"line":87},[84,71547,71548],{"class":328},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[84,71550,71551,71553,71555,71557],{"class":86,"line":98},[84,71552,701],{"class":473},[84,71554,478],{"class":477},[84,71556,54775],{"class":473},[84,71558,71559],{"class":477}," () { \n",[84,71561,71562,71564,71567,71569],{"class":86,"line":70},[84,71563,7121],{"class":473},[84,71565,71566],{"class":94}," userAgent",[84,71568,13893],{"class":473},[84,71570,71571],{"class":477}," navigator.userAgent \n",[84,71573,71574],{"class":86,"line":120},[84,71575,71576],{"class":328},"\u002F\u002F 验证是否为Android或iPhone \n",[84,71578,71579,71581,71584,71586,71589,71592,71594,71596,71599,71601,71604,71608,71610,71612,71614,71617,71619,71621,71623,71625],{"class":86,"line":131},[84,71580,7121],{"class":473},[84,71582,71583],{"class":94}," android",[84,71585,13893],{"class":473},[84,71587,71588],{"class":477}," userAgent.",[84,71590,71591],{"class":90},"match",[84,71593,478],{"class":477},[84,71595,1057],{"class":104},[84,71597,71598],{"class":48304},"(Android);",[84,71600,1459],{"class":473},[84,71602,71603],{"class":94},"[\\s",[84,71605,71607],{"class":71606},"snhLl","\\\u002F",[84,71609,1413],{"class":94},[84,71611,954],{"class":473},[84,71613,478],{"class":48304},[84,71615,71616],{"class":94},"[\\d.]",[84,71618,954],{"class":473},[84,71620,902],{"class":48304},[84,71622,1459],{"class":473},[84,71624,1057],{"class":104},[84,71626,71627],{"class":477},") \n",[84,71629,71630,71632,71635,71637,71639,71641,71643,71645,71648,71651,71654,71656,71658,71661,71663,71665,71667],{"class":86,"line":145},[84,71631,7121],{"class":473},[84,71633,71634],{"class":94}," iphone",[84,71636,13893],{"class":473},[84,71638,71588],{"class":477},[84,71640,71591],{"class":90},[84,71642,478],{"class":477},[84,71644,1057],{"class":104},[84,71646,71647],{"class":48304},"(iPhone",[84,71649,71650],{"class":94},"\\s",[84,71652,71653],{"class":48304},"OS)",[84,71655,71650],{"class":94},[84,71657,478],{"class":48304},[84,71659,71660],{"class":94},"[\\d_]",[84,71662,954],{"class":473},[84,71664,902],{"class":48304},[84,71666,1057],{"class":104},[84,71668,71627],{"class":477},[84,71670,71671],{"class":86,"line":156},[84,71672,71673],{"class":328},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[84,71675,71676,71678,71681,71684],{"class":86,"line":164},[84,71677,1871],{"class":473},[84,71679,71680],{"class":477}," (android ",[84,71682,71683],{"class":473},"||",[84,71685,71686],{"class":477}," iphone) { \n",[84,71688,71689,71692,71694,71697],{"class":86,"line":175},[84,71690,71691],{"class":477},"location.href ",[84,71693,523],{"class":473},[84,71695,71696],{"class":104}," 'http:\u002F\u002Fm.itcast.cn'",[84,71698,3003],{"class":477},[84,71700,71701],{"class":86,"line":185},[84,71702,71703],{"class":477},"} \n",[84,71705,71706],{"class":86,"line":195},[84,71707,71708],{"class":477},"})()\n",[23,71710,71712],{"id":71711},"_346-histroy对象","3.4.6 histroy对象",[35,71714,71715],{},[64,71716],{"alt":66,"src":71717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[35,71719,71720],{},"浏览器地址的前进与后退!!!",[35,71722,71723],{},"history.back() 等效于 history.go(-1)",[35,71725,71726],{},"history.forward() 等效于 history.go(1)",[14,71728,71730],{"id":71729},"_35-本地存储","3.5 本地存储",[28,71732,71733,71736,71739],{},[31,71734,71735],{},"数据存储在用户浏览器中",[31,71737,71738],{},"设置、读取方便、甚至页面刷新不丢失数据",[31,71740,71741],{},"容量较大，sessionStorage和localStorage约 5M 左右",[23,71743,71745],{"id":71744},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[35,71747,71748],{},"只能存储字符串",[35,71750,71751],{},[64,71752],{"alt":66,"src":71753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[35,71755,71756],{},[64,71757],{"alt":66,"src":71758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[35,71760,71761],{},"键值对要加引号,不然就会当变量来看了",[35,71763,71764],{},"localStorage.setItem('uname', 'pink')",[35,71766,71767],{},"刷新之后信息不再丢失",[35,71769,71770],{},"操作key,value会跟着变",[35,71772,71773],{},"删除只删除键就可以,即名字",[35,71775,71764],{},[35,71777,71778],{},"改:",[35,71780,71781],{},"localStorage.setItem('uname','red')",[35,71783,71784],{},"有这个键就是改,没有这个键就是改",[35,71786,71787],{},[64,71788],{"alt":66,"src":71789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[35,71791,71792],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[35,71794,71795],{},[64,71796],{"alt":66,"src":71797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[35,71799,71800],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[23,71802,71804],{"id":71803},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[35,71806,71807],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[35,71809,71810],{},"特性:",[28,71812,71813,71816,71819,71822],{},[31,71814,71815],{},"生命周期为关闭浏览器窗口",[31,71817,71818],{},"在同一个窗口(页面)下数据可以共享",[31,71820,71821],{},"以键值对的形式存储使用",[31,71823,71824],{},"用法跟localStorage 基本相同",[23,71826,71828],{"id":71827},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[35,71830,71831],{},"本地只能存储字符串,无法直接存储复杂数据类型",[75,71833,71835],{"className":53394,"code":71834,"language":53396,"meta":66,"style":66},"\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",[81,71836,71837,71845,71850,71855,71860,71865,71869,71874,71879],{"__ignoreMap":66},[84,71838,71839,71841,71843],{"class":86,"line":87},[84,71840,1383],{"class":477},[84,71842,52140],{"class":51627},[84,71844,51634],{"class":477},[84,71846,71847],{"class":86,"line":98},[84,71848,71849],{"class":477},"    const obj = {\n",[84,71851,71852],{"class":86,"line":70},[84,71853,71854],{"class":477},"      uname: 'pink老师',\n",[84,71856,71857],{"class":86,"line":120},[84,71858,71859],{"class":477},"      age: 18,\n",[84,71861,71862],{"class":86,"line":131},[84,71863,71864],{"class":477},"      gender: '女'\n",[84,71866,71867],{"class":86,"line":145},[84,71868,2516],{"class":477},[84,71870,71871],{"class":86,"line":156},[84,71872,71873],{"class":477},"    \u002F\u002F 存储复杂数据类型\n",[84,71875,71876],{"class":86,"line":164},[84,71877,71878],{"class":477},"    localStorage.setItem('obj', obj)\n",[84,71880,71881,71883,71885],{"class":86,"line":175},[84,71882,52744],{"class":477},[84,71884,52140],{"class":51627},[84,71886,51634],{"class":477},[35,71888,71889],{},[64,71890],{"alt":66,"src":71891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[35,71893,71894],{},"如果获取一下数据:",[35,71896,71897],{},"log(localStorage.getItem('obj'))",[35,71899,71900],{},[64,71901],{"alt":66,"src":71902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[35,71904,71905],{},"发现直接存对象是使用不了的!!!",[22327,71907,71909],{"id":71908},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[35,71911,71912],{},[64,71913],{"alt":66,"src":71914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[75,71916,71918],{"className":50960,"code":71917,"language":50962,"meta":66,"style":66},"\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",[81,71919,71920,71928,71938,71948,71957,71965,71969,71973,71999,72018,72026,72030,72035,72040],{"__ignoreMap":66},[84,71921,71922,71924,71926],{"class":86,"line":87},[84,71923,1383],{"class":477},[84,71925,52140],{"class":51627},[84,71927,51634],{"class":477},[84,71929,71930,71932,71934,71936],{"class":86,"line":98},[84,71931,11550],{"class":473},[84,71933,70297],{"class":94},[84,71935,13893],{"class":473},[84,71937,15901],{"class":477},[84,71939,71940,71943,71946],{"class":86,"line":70},[84,71941,71942],{"class":477},"      uname: ",[84,71944,71945],{"class":104},"'pink老师'",[84,71947,31793],{"class":477},[84,71949,71950,71953,71955],{"class":86,"line":120},[84,71951,71952],{"class":477},"      age: ",[84,71954,1123],{"class":94},[84,71956,31793],{"class":477},[84,71958,71959,71962],{"class":86,"line":131},[84,71960,71961],{"class":477},"      gender: ",[84,71963,71964],{"class":104},"'女'\n",[84,71966,71967],{"class":86,"line":145},[84,71968,2516],{"class":477},[84,71970,71971],{"class":86,"line":156},[84,71972,71873],{"class":328},[84,71974,71975,71978,71981,71983,71986,71988,71991,71993,71996],{"class":86,"line":164},[84,71976,71977],{"class":477},"  localStorage.",[84,71979,71980],{"class":90},"setItem",[84,71982,478],{"class":477},[84,71984,71985],{"class":104},"'obj'",[84,71987,12764],{"class":477},[84,71989,71990],{"class":94},"JSON",[84,71992,1031],{"class":477},[84,71994,71995],{"class":90},"stringify",[84,71997,71998],{"class":477},"(obj))\n",[84,72000,72001,72004,72006,72009,72012,72014,72016],{"class":86,"line":175},[84,72002,72003],{"class":477},"  console.",[84,72005,58573],{"class":90},[84,72007,72008],{"class":477},"(localStorage.",[84,72010,72011],{"class":90},"getItem",[84,72013,478],{"class":477},[84,72015,71985],{"class":104},[84,72017,30824],{"class":477},[84,72019,72020,72022,72024],{"class":86,"line":185},[84,72021,52744],{"class":477},[84,72023,52140],{"class":51627},[84,72025,51634],{"class":477},[84,72027,72028],{"class":86,"line":195},[84,72029,70947],{"class":477},[84,72031,72032],{"class":86,"line":206},[84,72033,72034],{"class":477},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[84,72036,72037],{"class":86,"line":217},[84,72038,72039],{"class":477},"  类型是字符串的\n",[84,72041,72042],{"class":86,"line":227},[84,72043,72044],{"class":477},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22327,72046,72048],{"id":72047},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[35,72050,72051],{},[64,72052],{"alt":66,"src":72053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[35,72055,72056],{},[64,72057],{"alt":66,"src":72058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[75,72060,72062],{"className":53394,"code":72061,"language":53396,"meta":66,"style":66},"  \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",[81,72063,72064,72072,72076,72080,72084,72088,72092,72097,72102,72107,72112,72117,72122,72127,72132],{"__ignoreMap":66},[84,72065,72066,72068,72070],{"class":86,"line":87},[84,72067,52471],{"class":477},[84,72069,52140],{"class":51627},[84,72071,51634],{"class":477},[84,72073,72074],{"class":86,"line":98},[84,72075,71849],{"class":477},[84,72077,72078],{"class":86,"line":70},[84,72079,71854],{"class":477},[84,72081,72082],{"class":86,"line":120},[84,72083,71859],{"class":477},[84,72085,72086],{"class":86,"line":131},[84,72087,71864],{"class":477},[84,72089,72090],{"class":86,"line":145},[84,72091,2516],{"class":477},[84,72093,72094],{"class":86,"line":156},[84,72095,72096],{"class":477},"    \u002F\u002F 1.存储复杂数据类型\n",[84,72098,72099],{"class":86,"line":164},[84,72100,72101],{"class":477},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[84,72103,72104],{"class":86,"line":175},[84,72105,72106],{"class":477},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[84,72108,72109],{"class":86,"line":185},[84,72110,72111],{"class":477},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[84,72113,72114],{"class":86,"line":195},[84,72115,72116],{"class":477},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[84,72118,72119],{"class":86,"line":206},[84,72120,72121],{"class":477},"    \u002F\u002F 取\n",[84,72123,72124],{"class":86,"line":217},[84,72125,72126],{"class":477},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[84,72128,72129],{"class":86,"line":227},[84,72130,72131],{"class":477},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[84,72133,72134,72136,72138],{"class":86,"line":238},[84,72135,52744],{"class":477},[84,72137,52140],{"class":51627},[84,72139,51634],{"class":477},[35,72141,72142],{},[64,72143],{"alt":66,"src":72144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[23,72146,72148],{"id":72147},"_356-数组map方法","3.5.6 数组map方法",[35,72150,72151],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[35,72153,72154],{},[64,72155],{"alt":66,"src":72156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[35,72158,72159],{},[64,72160],{"alt":66,"src":72161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[35,72163,72164,72167],{},[624,72165,72166],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[35,72169,72170],{},"map有返回值，但是forEach没有返回值",[35,72172,72173],{},"map是个方法。用的时候要加 ()",[35,72175,72176],{},"map返回的是一个数组",[23,72178,72180],{"id":72179},"_357-数组中join方法","3.5.7 数组中join方法",[35,72182,72183],{},[64,72184],{"alt":66,"src":72185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[35,72187,72188],{},"类似于python中拼接字符串一样！",[28,72190,72191,72194,72197],{},[31,72192,72193],{},"小括号为空则逗号分开",[31,72195,72196],{},"小括号为空字符串 ''，则元素之间没有分隔符",[31,72198,72199],{},"小括号用啥符号就用进行分割",[23,72201,72203],{"id":72202},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[28,72205,72206,72209,72212,72215,72218],{},[31,72207,72208],{},"记住本地时间获取快速方式：new Date().toDateString()",[31,72210,72211],{},"尽量减少DOM操作，用好map+join的渲染方式",[31,72213,72214],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[31,72216,72217],{},"return可以实现函数的结束",[31,72219,72220],{},"禁止跳转是 preventDefault() 不要忘记",[75,72222,72224],{"className":50960,"code":72223,"language":50962,"meta":66,"style":66},"\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",[81,72225,72226,72236,72250,72254,72262,72276,72296,72308,72316,72322,72332,72342,72346,72350,72356,72366,72378,72382,72386,72393,72405,72419,72429,72433,72437,72444,72451,72458,72470,72482,72492,72504,72508,72512,72519,72526,72538,72550,72560,72572,72602,72606,72610,72617,72629,72641,72665,72675,72685,72689,72693,72701,72712,72724,72736,72748,72765,72777,72789,72793,72797,72804,72816,72828,72840,72851,72869,72882,72894,72918,72929,72933,72937,72945,72955,72959,72963,72969,72981,72992,73002,73006,73010,73016,73038,73042,73046,73052,73058,73070,73080,73092,73122,73135,73152,73156,73160,73171,73193,73203,73207,73211,73224,73234,73246,73258,73270,73282,73292,73302,73312,73323,73336,73340,73348,73356,73360,73368,73381,73401,73434,73467,73500,73526,73544,73562,73570,73596,73614,73632,73650,73668,73686,73694,73702,73720,73728,73757,73765,73773,73781,73794,73806,73818,73830,73842,73854,73867,73879,73887,73895,73903,73908,73913,73917,73921,73925,73929,73933,73937,73942,73947,73952,73957,73965,73973,73981,73986,73991,73996,74001,74006,74011,74016,74021,74026,74031,74036,74041,74046,74051,74055,74060,74065,74075,74084,74088,74093,74102,74118,74160,74200,74239,74304,74312,74316,74321,74339,74347,74352,74357,74387,74393,74398,74411,74423,74435,74447,74459,74471,74483,74487,74497,74501,74506,74511,74515,74524,74528,74533,74538,74557,74562,74582,74586,74591,74595,74600,74618,74636,74654,74673,74692,74711,74716,74722,74743,74749,74758,74764,74770,74776,74803,74816,74821,74831,74837,74843,74849,74855,74860,74866,74872,74878,74884,74917,74922,74927,74932,74937,74943,74949,74955,74966,74971,74977,74984,74998,75004,75028,75033,75038,75044,75050,75071,75077,75090,75096,75102,75108,75114,75119,75125,75131,75137,75155,75169,75175,75183,75189,75211,75216,75221,75226,75231,75236,75245,75254,75259],{"__ignoreMap":66},[84,72227,72228,72230,72232,72234],{"class":86,"line":87},[84,72229,51624],{"class":477},[84,72231,51628],{"class":51627},[84,72233,51631],{"class":90},[84,72235,51634],{"class":477},[84,72237,72238,72240,72242,72244,72246,72248],{"class":86,"line":98},[84,72239,1383],{"class":477},[84,72241,50962],{"class":51627},[84,72243,51643],{"class":90},[84,72245,523],{"class":477},[84,72247,51648],{"class":104},[84,72249,51634],{"class":477},[84,72251,72252],{"class":86,"line":70},[84,72253,2729],{"emptyLinePlaceholder":403},[84,72255,72256,72258,72260],{"class":86,"line":120},[84,72257,1383],{"class":477},[84,72259,51661],{"class":51627},[84,72261,51634],{"class":477},[84,72263,72264,72266,72268,72270,72272,72274],{"class":86,"line":131},[84,72265,52471],{"class":477},[84,72267,51671],{"class":51627},[84,72269,51674],{"class":90},[84,72271,523],{"class":477},[84,72273,51679],{"class":104},[84,72275,51634],{"class":477},[84,72277,72278,72280,72282,72284,72286,72288,72290,72292,72294],{"class":86,"line":145},[84,72279,52471],{"class":477},[84,72281,51671],{"class":51627},[84,72283,15249],{"class":90},[84,72285,523],{"class":477},[84,72287,51718],{"class":104},[84,72289,51698],{"class":90},[84,72291,523],{"class":477},[84,72293,51725],{"class":104},[84,72295,51634],{"class":477},[84,72297,72298,72300,72302,72304,72306],{"class":86,"line":156},[84,72299,52471],{"class":477},[84,72301,51734],{"class":51627},[84,72303,51737],{"class":477},[84,72305,51734],{"class":51627},[84,72307,51634],{"class":477},[84,72309,72310,72312,72314],{"class":86,"line":164},[84,72311,52471],{"class":477},[84,72313,389],{"class":51627},[84,72315,51634],{"class":477},[84,72317,72318,72320],{"class":86,"line":175},[84,72319,6732],{"class":51627},[84,72321,15901],{"class":477},[84,72323,72324,72326,72328,72330],{"class":86,"line":185},[84,72325,55021],{"class":94},[84,72327,51764],{"class":477},[84,72329,666],{"class":94},[84,72331,1634],{"class":477},[84,72333,72334,72336,72338,72340],{"class":86,"line":195},[84,72335,55032],{"class":94},[84,72337,51764],{"class":477},[84,72339,666],{"class":94},[84,72341,1634],{"class":477},[84,72343,72344],{"class":86,"line":206},[84,72345,2516],{"class":477},[84,72347,72348],{"class":86,"line":217},[84,72349,2729],{"emptyLinePlaceholder":403},[84,72351,72352,72354],{"class":86,"line":227},[84,72353,57605],{"class":51627},[84,72355,15901],{"class":477},[84,72357,72358,72360,72362,72364],{"class":86,"line":238},[84,72359,57612],{"class":94},[84,72361,51764],{"class":477},[84,72363,51919],{"class":94},[84,72365,1634],{"class":477},[84,72367,72368,72370,72372,72374,72376],{"class":86,"line":249},[84,72369,62403],{"class":94},[84,72371,51764],{"class":477},[84,72373,1173],{"class":94},[84,72375,51819],{"class":473},[84,72377,1634],{"class":477},[84,72379,72380],{"class":86,"line":262},[84,72381,2516],{"class":477},[84,72383,72384],{"class":86,"line":273},[84,72385,2729],{"emptyLinePlaceholder":403},[84,72387,72388,72391],{"class":86,"line":283},[84,72389,72390],{"class":90},"    .info",[84,72392,15901],{"class":477},[84,72394,72395,72397,72399,72401,72403],{"class":86,"line":294},[84,72396,55097],{"class":94},[84,72398,51764],{"class":477},[84,72400,51816],{"class":94},[84,72402,51819],{"class":473},[84,72404,1634],{"class":477},[84,72406,72407,72409,72411,72413,72415,72417],{"class":86,"line":2028},[84,72408,55032],{"class":94},[84,72410,51764],{"class":477},[84,72412,919],{"class":94},[84,72414,51819],{"class":473},[84,72416,51883],{"class":94},[84,72418,1634],{"class":477},[84,72420,72421,72423,72425,72427],{"class":86,"line":2057},[84,72422,57612],{"class":94},[84,72424,51764],{"class":477},[84,72426,51919],{"class":94},[84,72428,1634],{"class":477},[84,72430,72431],{"class":86,"line":2062},[84,72432,2516],{"class":477},[84,72434,72435],{"class":86,"line":2079},[84,72436,2729],{"emptyLinePlaceholder":403},[84,72438,72439,72442],{"class":86,"line":2084},[84,72440,72441],{"class":90},"    .uname",[84,72443,31793],{"class":477},[84,72445,72446,72449],{"class":86,"line":2089},[84,72447,72448],{"class":90},"    .age",[84,72450,31793],{"class":477},[84,72452,72453,72456],{"class":86,"line":2094},[84,72454,72455],{"class":90},"    .salary",[84,72457,15901],{"class":477},[84,72459,72460,72462,72464,72466,72468],{"class":86,"line":2108},[84,72461,55097],{"class":94},[84,72463,51764],{"class":477},[84,72465,784],{"class":94},[84,72467,51819],{"class":473},[84,72469,1634],{"class":477},[84,72471,72472,72474,72476,72478,72480],{"class":86,"line":2113},[84,72473,55111],{"class":94},[84,72475,51764],{"class":477},[84,72477,1173],{"class":94},[84,72479,51819],{"class":473},[84,72481,1634],{"class":477},[84,72483,72484,72486,72488,72490],{"class":86,"line":2906},[84,72485,62106],{"class":94},[84,72487,51764],{"class":477},[84,72489,55063],{"class":94},[84,72491,1634],{"class":477},[84,72493,72494,72496,72498,72500,72502],{"class":86,"line":2920},[84,72495,62076],{"class":94},[84,72497,51764],{"class":477},[84,72499,1048],{"class":94},[84,72501,51819],{"class":473},[84,72503,1634],{"class":477},[84,72505,72506],{"class":86,"line":2928},[84,72507,2516],{"class":477},[84,72509,72510],{"class":86,"line":2933},[84,72511,2729],{"emptyLinePlaceholder":403},[84,72513,72514,72517],{"class":86,"line":2939},[84,72515,72516],{"class":90},"    .gender",[84,72518,31793],{"class":477},[84,72520,72521,72524],{"class":86,"line":2945},[84,72522,72523],{"class":90},"    .city",[84,72525,15901],{"class":477},[84,72527,72528,72530,72532,72534,72536],{"class":86,"line":2950},[84,72529,55097],{"class":94},[84,72531,51764],{"class":477},[84,72533,784],{"class":94},[84,72535,51819],{"class":473},[84,72537,1634],{"class":477},[84,72539,72540,72542,72544,72546,72548],{"class":86,"line":8277},[84,72541,55111],{"class":94},[84,72543,51764],{"class":477},[84,72545,1298],{"class":94},[84,72547,51819],{"class":473},[84,72549,1634],{"class":477},[84,72551,72552,72554,72556,72558],{"class":86,"line":8301},[84,72553,62106],{"class":94},[84,72555,51764],{"class":477},[84,72557,55063],{"class":94},[84,72559,1634],{"class":477},[84,72561,72562,72564,72566,72568,72570],{"class":86,"line":8306},[84,72563,62076],{"class":94},[84,72565,51764],{"class":477},[84,72567,1048],{"class":94},[84,72569,51819],{"class":473},[84,72571,1634],{"class":477},[84,72573,72574,72576,72578,72580,72582,72584,72587,72589,72591,72593,72596,72598,72600],{"class":86,"line":8312},[84,72575,62303],{"class":94},[84,72577,51764],{"class":477},[84,72579,692],{"class":94},[84,72581,51819],{"class":473},[84,72583,51848],{"class":94},[84,72585,72586],{"class":94}," rgb",[84,72588,478],{"class":477},[84,72590,2052],{"class":94},[84,72592,12764],{"class":477},[84,72594,72595],{"class":94},"197",[84,72597,12764],{"class":477},[84,72599,72595],{"class":94},[84,72601,3048],{"class":477},[84,72603,72604],{"class":86,"line":8339},[84,72605,2516],{"class":477},[84,72607,72608],{"class":86,"line":8344},[84,72609,2729],{"emptyLinePlaceholder":403},[84,72611,72612,72615],{"class":86,"line":8350},[84,72613,72614],{"class":51627},"    button",[84,72616,15901],{"class":477},[84,72618,72619,72621,72623,72625,72627],{"class":86,"line":8362},[84,72620,55111],{"class":94},[84,72622,51764],{"class":477},[84,72624,1298],{"class":94},[84,72626,51819],{"class":473},[84,72628,1634],{"class":477},[84,72630,72631,72633,72635,72637,72639],{"class":86,"line":8374},[84,72632,55097],{"class":94},[84,72634,51764],{"class":477},[84,72636,957],{"class":94},[84,72638,51819],{"class":473},[84,72640,1634],{"class":477},[84,72642,72643,72645,72647,72650,72652,72654,72656,72659,72661,72663],{"class":86,"line":8386},[84,72644,55210],{"class":94},[84,72646,51764],{"class":477},[84,72648,72649],{"class":94},"rgb",[84,72651,478],{"class":477},[84,72653,1442],{"class":94},[84,72655,12764],{"class":477},[84,72657,72658],{"class":94},"187",[84,72660,12764],{"class":477},[84,72662,772],{"class":94},[84,72664,3048],{"class":477},[84,72666,72667,72669,72671,72673],{"class":86,"line":10045},[84,72668,57742],{"class":94},[84,72670,51764],{"class":477},[84,72672,61168],{"class":94},[84,72674,1634],{"class":477},[84,72676,72677,72679,72681,72683],{"class":86,"line":10070},[84,72678,62303],{"class":94},[84,72680,51764],{"class":477},[84,72682,666],{"class":94},[84,72684,1634],{"class":477},[84,72686,72687],{"class":86,"line":10093},[84,72688,2516],{"class":477},[84,72690,72691],{"class":86,"line":10117},[84,72692,2729],{"emptyLinePlaceholder":403},[84,72694,72695,72697,72699],{"class":86,"line":10122},[84,72696,72614],{"class":51627},[84,72698,52015],{"class":51627},[84,72700,15901],{"class":477},[84,72702,72703,72705,72707,72710],{"class":86,"line":10127},[84,72704,55335],{"class":94},[84,72706,51764],{"class":477},[84,72708,72709],{"class":94},"inline-block",[84,72711,1634],{"class":477},[84,72713,72714,72716,72718,72720,72722],{"class":86,"line":10132},[84,72715,55097],{"class":94},[84,72717,51764],{"class":477},[84,72719,919],{"class":94},[84,72721,51819],{"class":473},[84,72723,1634],{"class":477},[84,72725,72726,72728,72730,72732,72734],{"class":86,"line":10141},[84,72727,55111],{"class":94},[84,72729,51764],{"class":477},[84,72731,919],{"class":94},[84,72733,51819],{"class":473},[84,72735,1634],{"class":477},[84,72737,72738,72740,72742,72744,72746],{"class":86,"line":10146},[84,72739,57685],{"class":94},[84,72741,51764],{"class":477},[84,72743,945],{"class":94},[84,72745,51819],{"class":473},[84,72747,1634],{"class":477},[84,72749,72750,72752,72754,72756,72758,72760,72763],{"class":86,"line":10152},[84,72751,62303],{"class":94},[84,72753,51764],{"class":477},[84,72755,692],{"class":94},[84,72757,51819],{"class":473},[84,72759,51848],{"class":94},[84,72761,72762],{"class":94}," #fff",[84,72764,1634],{"class":477},[84,72766,72767,72769,72771,72773,72775],{"class":86,"line":10173},[84,72768,55460],{"class":94},[84,72770,51764],{"class":477},[84,72772,792],{"class":94},[84,72774,51819],{"class":473},[84,72776,1634],{"class":477},[84,72778,72779,72781,72783,72785,72787],{"class":86,"line":10179},[84,72780,62076],{"class":94},[84,72782,51764],{"class":477},[84,72784,692],{"class":94},[84,72786,51819],{"class":473},[84,72788,1634],{"class":477},[84,72790,72791],{"class":86,"line":10193},[84,72792,2516],{"class":477},[84,72794,72795],{"class":86,"line":10199},[84,72796,2729],{"emptyLinePlaceholder":403},[84,72798,72799,72802],{"class":86,"line":10226},[84,72800,72801],{"class":90},"    .total",[84,72803,15901],{"class":477},[84,72805,72806,72808,72810,72812,72814],{"class":86,"line":10235},[84,72807,55097],{"class":94},[84,72809,51764],{"class":477},[84,72811,61955],{"class":94},[84,72813,51819],{"class":473},[84,72815,1634],{"class":477},[84,72817,72818,72820,72822,72824,72826],{"class":86,"line":10241},[84,72819,55111],{"class":94},[84,72821,51764],{"class":477},[84,72823,874],{"class":94},[84,72825,51819],{"class":473},[84,72827,1634],{"class":477},[84,72829,72830,72832,72834,72836,72838],{"class":86,"line":10249},[84,72831,57685],{"class":94},[84,72833,51764],{"class":477},[84,72835,874],{"class":94},[84,72837,51819],{"class":473},[84,72839,1634],{"class":477},[84,72841,72842,72844,72846,72849],{"class":86,"line":10254},[84,72843,57612],{"class":94},[84,72845,51764],{"class":477},[84,72847,72848],{"class":94},"right",[84,72850,1634],{"class":477},[84,72852,72853,72855,72857,72859,72861,72863,72865,72867],{"class":86,"line":16933},[84,72854,55032],{"class":94},[84,72856,51764],{"class":477},[84,72858,874],{"class":94},[84,72860,51819],{"class":473},[84,72862,51883],{"class":94},[84,72864,2367],{"class":94},[84,72866,51819],{"class":473},[84,72868,1634],{"class":477},[84,72870,72871,72874,72876,72878,72880],{"class":86,"line":16939},[84,72872,72873],{"class":94},"      padding-right",[84,72875,51764],{"class":477},[84,72877,919],{"class":94},[84,72879,51819],{"class":473},[84,72881,1634],{"class":477},[84,72883,72884,72886,72888,72890,72892],{"class":86,"line":16962},[84,72885,55248],{"class":94},[84,72887,51764],{"class":477},[84,72889,996],{"class":94},[84,72891,51819],{"class":473},[84,72893,1634],{"class":477},[84,72895,72896,72898,72900,72902,72904,72907,72909,72912,72914,72916],{"class":86,"line":16968},[84,72897,55210],{"class":94},[84,72899,51764],{"class":477},[84,72901,72649],{"class":94},[84,72903,478],{"class":477},[84,72905,72906],{"class":94},"237",[84,72908,12764],{"class":477},[84,72910,72911],{"class":94},"235",[84,72913,12764],{"class":477},[84,72915,72911],{"class":94},[84,72917,3048],{"class":477},[84,72919,72920,72923,72925,72927],{"class":86,"line":16991},[84,72921,72922],{"class":94},"      box-sizing",[84,72924,51764],{"class":477},[84,72926,60831],{"class":94},[84,72928,1634],{"class":477},[84,72930,72931],{"class":86,"line":17005},[84,72932,2516],{"class":477},[84,72934,72935],{"class":86,"line":17025},[84,72936,2729],{"emptyLinePlaceholder":403},[84,72938,72939,72941,72943],{"class":86,"line":17031},[84,72940,72801],{"class":90},[84,72942,52015],{"class":51627},[84,72944,15901],{"class":477},[84,72946,72947,72949,72951,72953],{"class":86,"line":17042},[84,72948,57742],{"class":94},[84,72950,51764],{"class":477},[84,72952,57747],{"class":94},[84,72954,1634],{"class":477},[84,72956,72957],{"class":86,"line":17065},[84,72958,2516],{"class":477},[84,72960,72961],{"class":86,"line":17087},[84,72962,2729],{"emptyLinePlaceholder":403},[84,72964,72965,72967],{"class":86,"line":17092},[84,72966,65349],{"class":51627},[84,72968,15901],{"class":477},[84,72970,72971,72973,72975,72977,72979],{"class":86,"line":17098},[84,72972,55097],{"class":94},[84,72974,51764],{"class":477},[84,72976,61955],{"class":94},[84,72978,51819],{"class":473},[84,72980,1634],{"class":477},[84,72982,72983,72985,72987,72990],{"class":86,"line":17112},[84,72984,55032],{"class":94},[84,72986,51764],{"class":477},[84,72988,72989],{"class":94},"auto",[84,72991,1634],{"class":477},[84,72993,72994,72996,72998,73000],{"class":86,"line":17125},[84,72995,65356],{"class":94},[84,72997,51764],{"class":477},[84,72999,65361],{"class":94},[84,73001,1634],{"class":477},[84,73003,73004],{"class":86,"line":17130},[84,73005,2516],{"class":477},[84,73007,73008],{"class":86,"line":17144},[84,73009,2729],{"emptyLinePlaceholder":403},[84,73011,73012,73014],{"class":86,"line":17149},[84,73013,65441],{"class":51627},[84,73015,15901],{"class":477},[84,73017,73018,73020,73022,73024,73026,73028,73030,73032,73034,73036],{"class":86,"line":17155},[84,73019,55210],{"class":94},[84,73021,51764],{"class":477},[84,73023,72649],{"class":94},[84,73025,478],{"class":477},[84,73027,72906],{"class":94},[84,73029,12764],{"class":477},[84,73031,72911],{"class":94},[84,73033,12764],{"class":477},[84,73035,72911],{"class":94},[84,73037,3048],{"class":477},[84,73039,73040],{"class":86,"line":17160},[84,73041,2516],{"class":477},[84,73043,73044],{"class":86,"line":17174},[84,73045,2729],{"emptyLinePlaceholder":403},[84,73047,73048,73050],{"class":86,"line":17179},[84,73049,65441],{"class":51627},[84,73051,31793],{"class":477},[84,73053,73054,73056],{"class":86,"line":17184},[84,73055,65507],{"class":51627},[84,73057,15901],{"class":477},[84,73059,73060,73062,73064,73066,73068],{"class":86,"line":17198},[84,73061,55111],{"class":94},[84,73063,51764],{"class":477},[84,73065,747],{"class":94},[84,73067,51819],{"class":473},[84,73069,1634],{"class":477},[84,73071,73072,73074,73076,73078],{"class":86,"line":17210},[84,73073,57612],{"class":94},[84,73075,51764],{"class":477},[84,73077,24065],{"class":94},[84,73079,1634],{"class":477},[84,73081,73082,73084,73086,73088,73090],{"class":86,"line":17215},[84,73083,55248],{"class":94},[84,73085,51764],{"class":477},[84,73087,1022],{"class":94},[84,73089,51819],{"class":473},[84,73091,1634],{"class":477},[84,73093,73094,73096,73098,73100,73102,73104,73106,73108,73111,73113,73116,73118,73120],{"class":86,"line":17228},[84,73095,62303],{"class":94},[84,73097,51764],{"class":477},[84,73099,692],{"class":94},[84,73101,51819],{"class":473},[84,73103,51848],{"class":94},[84,73105,72586],{"class":94},[84,73107,478],{"class":477},[84,73109,73110],{"class":94},"228",[84,73112,12764],{"class":477},[84,73114,73115],{"class":94},"225",[84,73117,12764],{"class":477},[84,73119,73115],{"class":94},[84,73121,3048],{"class":477},[84,73123,73124,73127,73129,73131,73133],{"class":86,"line":17233},[84,73125,73126],{"class":94},"      padding-left",[84,73128,51764],{"class":477},[84,73130,792],{"class":94},[84,73132,51819],{"class":473},[84,73134,1634],{"class":477},[84,73136,73137,73139,73141,73143,73146,73148,73150],{"class":86,"line":17238},[84,73138,62186],{"class":94},[84,73140,51764],{"class":477},[84,73142,28448],{"class":94},[84,73144,73145],{"class":94}," linear",[84,73147,62193],{"class":94},[84,73149,1168],{"class":473},[84,73151,1634],{"class":477},[84,73153,73154],{"class":86,"line":17243},[84,73155,2516],{"class":477},[84,73157,73158],{"class":86,"line":17256},[84,73159,2729],{"emptyLinePlaceholder":403},[84,73161,73162,73165,73167,73169],{"class":86,"line":17261},[84,73163,73164],{"class":51627},"    tbody",[84,73166,70470],{"class":51627},[84,73168,61266],{"class":90},[84,73170,15901],{"class":477},[84,73172,73173,73175,73177,73179,73181,73183,73185,73187,73189,73191],{"class":86,"line":32960},[84,73174,55210],{"class":94},[84,73176,51764],{"class":477},[84,73178,72649],{"class":94},[84,73180,478],{"class":477},[84,73182,72906],{"class":94},[84,73184,12764],{"class":477},[84,73186,72911],{"class":94},[84,73188,12764],{"class":477},[84,73190,72911],{"class":94},[84,73192,3048],{"class":477},[84,73194,73195,73197,73199,73201],{"class":86,"line":32966},[84,73196,62351],{"class":94},[84,73198,51764],{"class":477},[84,73200,62356],{"class":94},[84,73202,1634],{"class":477},[84,73204,73205],{"class":86,"line":32972},[84,73206,2516],{"class":477},[84,73208,73209],{"class":86,"line":32978},[84,73210,2729],{"emptyLinePlaceholder":403},[84,73212,73213,73215,73217,73220,73222],{"class":86,"line":32984},[84,73214,73164],{"class":51627},[84,73216,70470],{"class":51627},[84,73218,73219],{"class":51627}," td",[84,73221,1739],{"class":51627},[84,73223,15901],{"class":477},[84,73225,73226,73228,73230,73232],{"class":86,"line":32995},[84,73227,55335],{"class":94},[84,73229,51764],{"class":477},[84,73231,61195],{"class":94},[84,73233,1634],{"class":477},[84,73235,73236,73238,73240,73242,73244],{"class":86,"line":33001},[84,73237,55097],{"class":94},[84,73239,51764],{"class":477},[84,73241,1380],{"class":94},[84,73243,51819],{"class":473},[84,73245,1634],{"class":477},[84,73247,73248,73250,73252,73254,73256],{"class":86,"line":33021},[84,73249,55111],{"class":94},[84,73251,51764],{"class":477},[84,73253,1298],{"class":94},[84,73255,51819],{"class":473},[84,73257,1634],{"class":477},[84,73259,73260,73262,73264,73266,73268],{"class":86,"line":33027},[84,73261,57685],{"class":94},[84,73263,51764],{"class":477},[84,73265,1298],{"class":94},[84,73267,51819],{"class":473},[84,73269,1634],{"class":477},[84,73271,73272,73274,73276,73278,73280],{"class":86,"line":33038},[84,73273,62403],{"class":94},[84,73275,51764],{"class":477},[84,73277,553],{"class":94},[84,73279,51819],{"class":473},[84,73281,1634],{"class":477},[84,73283,73284,73286,73288,73290],{"class":86,"line":33044},[84,73285,57742],{"class":94},[84,73287,51764],{"class":477},[84,73289,61168],{"class":94},[84,73291,1634],{"class":477},[84,73293,73294,73296,73298,73300],{"class":86,"line":33050},[84,73295,57612],{"class":94},[84,73297,51764],{"class":477},[84,73299,51919],{"class":94},[84,73301,1634],{"class":477},[84,73303,73304,73306,73308,73310],{"class":86,"line":33056},[84,73305,64296],{"class":94},[84,73307,51764],{"class":477},[84,73309,55063],{"class":94},[84,73311,1634],{"class":477},[84,73313,73314,73316,73318,73321],{"class":86,"line":33062},[84,73315,55210],{"class":94},[84,73317,51764],{"class":477},[84,73319,73320],{"class":94},"orange",[84,73322,1634],{"class":477},[84,73324,73325,73327,73329,73332,73334],{"class":86,"line":33068},[84,73326,55460],{"class":94},[84,73328,51764],{"class":477},[84,73330,73331],{"class":94},"12.5",[84,73333,51819],{"class":473},[84,73335,1634],{"class":477},[84,73337,73338],{"class":86,"line":33074},[84,73339,2516],{"class":477},[84,73341,73342,73344,73346],{"class":86,"line":33080},[84,73343,52744],{"class":477},[84,73345,389],{"class":51627},[84,73347,51634],{"class":477},[84,73349,73350,73352,73354],{"class":86,"line":33100},[84,73351,52112],{"class":477},[84,73353,51661],{"class":51627},[84,73355,51634],{"class":477},[84,73357,73358],{"class":86,"line":33106},[84,73359,2729],{"emptyLinePlaceholder":403},[84,73361,73362,73364,73366],{"class":86,"line":33122},[84,73363,1383],{"class":477},[84,73365,52127],{"class":51627},[84,73367,51634],{"class":477},[84,73369,73370,73372,73374,73377,73379],{"class":86,"line":33128},[84,73371,52471],{"class":477},[84,73373,14],{"class":51627},[84,73375,73376],{"class":477},">学生就业统计表\u003C\u002F",[84,73378,14],{"class":51627},[84,73380,51634],{"class":477},[84,73382,73383,73385,73387,73389,73391,73393,73395,73397,73399],{"class":86,"line":33142},[84,73384,52471],{"class":477},[84,73386,66951],{"class":51627},[84,73388,53813],{"class":90},[84,73390,523],{"class":477},[84,73392,62990],{"class":104},[84,73394,69396],{"class":90},[84,73396,523],{"class":477},[84,73398,32103],{"class":104},[84,73400,51634],{"class":477},[84,73402,73403,73405,73407,73409,73411,73413,73415,73417,73419,73421,73423,73426,73428,73430,73432],{"class":86,"line":33148},[84,73404,51668],{"class":477},[84,73406,54147],{"class":51627},[84,73408,54150],{"class":90},[84,73410,523],{"class":477},[84,73412,63025],{"class":104},[84,73414,15249],{"class":90},[84,73416,523],{"class":477},[84,73418,69422],{"class":104},[84,73420,61346],{"class":90},[84,73422,523],{"class":477},[84,73424,73425],{"class":104},"\"姓名\"",[84,73427,53813],{"class":90},[84,73429,523],{"class":477},[84,73431,69422],{"class":104},[84,73433,51634],{"class":477},[84,73435,73436,73438,73440,73442,73444,73446,73448,73450,73452,73454,73456,73459,73461,73463,73465],{"class":86,"line":33163},[84,73437,51668],{"class":477},[84,73439,54147],{"class":51627},[84,73441,54150],{"class":90},[84,73443,523],{"class":477},[84,73445,63025],{"class":104},[84,73447,15249],{"class":90},[84,73449,523],{"class":477},[84,73451,69450],{"class":104},[84,73453,61346],{"class":90},[84,73455,523],{"class":477},[84,73457,73458],{"class":104},"\"年龄\"",[84,73460,53813],{"class":90},[84,73462,523],{"class":477},[84,73464,69450],{"class":104},[84,73466,51634],{"class":477},[84,73468,73469,73471,73473,73475,73477,73479,73481,73483,73485,73487,73489,73492,73494,73496,73498],{"class":86,"line":33169},[84,73470,51668],{"class":477},[84,73472,54147],{"class":51627},[84,73474,54150],{"class":90},[84,73476,523],{"class":477},[84,73478,63025],{"class":104},[84,73480,15249],{"class":90},[84,73482,523],{"class":477},[84,73484,69552],{"class":104},[84,73486,61346],{"class":90},[84,73488,523],{"class":477},[84,73490,73491],{"class":104},"\"薪资\"",[84,73493,53813],{"class":90},[84,73495,523],{"class":477},[84,73497,69552],{"class":104},[84,73499,51634],{"class":477},[84,73501,73502,73504,73506,73508,73510,73512,73514,73516,73518,73520,73522,73524],{"class":86,"line":33178},[84,73503,51668],{"class":477},[84,73505,69470],{"class":51627},[84,73507,15249],{"class":90},[84,73509,523],{"class":477},[84,73511,69477],{"class":104},[84,73513,15288],{"class":90},[84,73515,523],{"class":477},[84,73517,7981],{"class":104},[84,73519,53813],{"class":90},[84,73521,523],{"class":477},[84,73523,69477],{"class":104},[84,73525,51634],{"class":477},[84,73527,73528,73530,73532,73534,73536,73538,73540,73542],{"class":86,"line":33184},[84,73529,55560],{"class":477},[84,73531,69492],{"class":51627},[84,73533,66977],{"class":90},[84,73535,523],{"class":477},[84,73537,10290],{"class":104},[84,73539,69501],{"class":477},[84,73541,69492],{"class":51627},[84,73543,51634],{"class":477},[84,73545,73546,73548,73550,73552,73554,73556,73558,73560],{"class":86,"line":33193},[84,73547,55560],{"class":477},[84,73549,69492],{"class":51627},[84,73551,66977],{"class":90},[84,73553,523],{"class":477},[84,73555,10359],{"class":104},[84,73557,69520],{"class":477},[84,73559,69492],{"class":51627},[84,73561,51634],{"class":477},[84,73563,73564,73566,73568],{"class":86,"line":33199},[84,73565,52103],{"class":477},[84,73567,69470],{"class":51627},[84,73569,51634],{"class":477},[84,73571,73572,73574,73576,73578,73580,73582,73584,73586,73588,73590,73592,73594],{"class":86,"line":33205},[84,73573,51668],{"class":477},[84,73575,69470],{"class":51627},[84,73577,15249],{"class":90},[84,73579,523],{"class":477},[84,73581,69574],{"class":104},[84,73583,15288],{"class":90},[84,73585,523],{"class":477},[84,73587,7981],{"class":104},[84,73589,53813],{"class":90},[84,73591,523],{"class":477},[84,73593,69574],{"class":104},[84,73595,51634],{"class":477},[84,73597,73598,73600,73602,73604,73606,73608,73610,73612],{"class":86,"line":33214},[84,73599,55560],{"class":477},[84,73601,69492],{"class":51627},[84,73603,66977],{"class":90},[84,73605,523],{"class":477},[84,73607,69595],{"class":104},[84,73609,69598],{"class":477},[84,73611,69492],{"class":51627},[84,73613,51634],{"class":477},[84,73615,73616,73618,73620,73622,73624,73626,73628,73630],{"class":86,"line":33220},[84,73617,55560],{"class":477},[84,73619,69492],{"class":51627},[84,73621,66977],{"class":90},[84,73623,523],{"class":477},[84,73625,69615],{"class":104},[84,73627,69618],{"class":477},[84,73629,69492],{"class":51627},[84,73631,51634],{"class":477},[84,73633,73634,73636,73638,73640,73642,73644,73646,73648],{"class":86,"line":33231},[84,73635,55560],{"class":477},[84,73637,69492],{"class":51627},[84,73639,66977],{"class":90},[84,73641,523],{"class":477},[84,73643,69635],{"class":104},[84,73645,69638],{"class":477},[84,73647,69492],{"class":51627},[84,73649,51634],{"class":477},[84,73651,73652,73654,73656,73658,73660,73662,73664,73666],{"class":86,"line":33237},[84,73653,55560],{"class":477},[84,73655,69492],{"class":51627},[84,73657,66977],{"class":90},[84,73659,523],{"class":477},[84,73661,69655],{"class":104},[84,73663,69658],{"class":477},[84,73665,69492],{"class":51627},[84,73667,51634],{"class":477},[84,73669,73670,73672,73674,73676,73678,73680,73682,73684],{"class":86,"line":33256},[84,73671,55560],{"class":477},[84,73673,69492],{"class":51627},[84,73675,66977],{"class":90},[84,73677,523],{"class":477},[84,73679,69675],{"class":104},[84,73681,69678],{"class":477},[84,73683,69492],{"class":51627},[84,73685,51634],{"class":477},[84,73687,73688,73690,73692],{"class":86,"line":33262},[84,73689,52103],{"class":477},[84,73691,69470],{"class":51627},[84,73693,51634],{"class":477},[84,73695,73696,73698,73700],{"class":86,"line":33273},[84,73697,51668],{"class":477},[84,73699,54213],{"class":51627},[84,73701,51634],{"class":477},[84,73703,73704,73706,73708,73711,73713,73716,73718],{"class":86,"line":33279},[84,73705,55560],{"class":477},[84,73707,84],{"class":51627},[84,73709,73710],{"class":477},">+\u003C\u002F",[84,73712,84],{"class":51627},[84,73714,73715],{"class":477},">添加\u003C\u002F",[84,73717,54213],{"class":51627},[84,73719,51634],{"class":477},[84,73721,73722,73724,73726],{"class":86,"line":33299},[84,73723,52744],{"class":477},[84,73725,66951],{"class":51627},[84,73727,51634],{"class":477},[84,73729,73730,73732,73734,73736,73738,73740,73743,73745,73748,73750,73753,73755],{"class":86,"line":33315},[84,73731,52471],{"class":477},[84,73733,51938],{"class":51627},[84,73735,53813],{"class":90},[84,73737,523],{"class":477},[84,73739,62906],{"class":104},[84,73741,73742],{"class":477},">共有数据 \u003C",[84,73744,84],{"class":51627},[84,73746,73747],{"class":477},">0\u003C\u002F",[84,73749,84],{"class":51627},[84,73751,73752],{"class":477},"> 条\u003C\u002F",[84,73754,51938],{"class":51627},[84,73756,51634],{"class":477},[84,73758,73759,73761,73763],{"class":86,"line":33321},[84,73760,52471],{"class":477},[84,73762,612],{"class":51627},[84,73764,51634],{"class":477},[84,73766,73767,73769,73771],{"class":86,"line":33335},[84,73768,51668],{"class":477},[84,73770,615],{"class":51627},[84,73772,51634],{"class":477},[84,73774,73775,73777,73779],{"class":86,"line":33341},[84,73776,55560],{"class":477},[84,73778,618],{"class":51627},[84,73780,51634],{"class":477},[84,73782,73783,73785,73787,73790,73792],{"class":86,"line":33347},[84,73784,55628],{"class":477},[84,73786,621],{"class":51627},[84,73788,73789],{"class":477},">ID\u003C\u002F",[84,73791,621],{"class":51627},[84,73793,51634],{"class":477},[84,73795,73796,73798,73800,73802,73804],{"class":86,"line":33358},[84,73797,55628],{"class":477},[84,73799,621],{"class":51627},[84,73801,69781],{"class":477},[84,73803,621],{"class":51627},[84,73805,51634],{"class":477},[84,73807,73808,73810,73812,73814,73816],{"class":86,"line":33364},[84,73809,55628],{"class":477},[84,73811,621],{"class":51627},[84,73813,69794],{"class":477},[84,73815,621],{"class":51627},[84,73817,51634],{"class":477},[84,73819,73820,73822,73824,73826,73828],{"class":86,"line":33370},[84,73821,55628],{"class":477},[84,73823,621],{"class":51627},[84,73825,69807],{"class":477},[84,73827,621],{"class":51627},[84,73829,51634],{"class":477},[84,73831,73832,73834,73836,73838,73840],{"class":86,"line":33380},[84,73833,55628],{"class":477},[84,73835,621],{"class":51627},[84,73837,69820],{"class":477},[84,73839,621],{"class":51627},[84,73841,51634],{"class":477},[84,73843,73844,73846,73848,73850,73852],{"class":86,"line":33386},[84,73845,55628],{"class":477},[84,73847,621],{"class":51627},[84,73849,69833],{"class":477},[84,73851,621],{"class":51627},[84,73853,51634],{"class":477},[84,73855,73856,73858,73860,73863,73865],{"class":86,"line":33397},[84,73857,55628],{"class":477},[84,73859,621],{"class":51627},[84,73861,73862],{"class":477},">录入时间\u003C\u002F",[84,73864,621],{"class":51627},[84,73866,51634],{"class":477},[84,73868,73869,73871,73873,73875,73877],{"class":86,"line":33403},[84,73870,55628],{"class":477},[84,73872,621],{"class":51627},[84,73874,69846],{"class":477},[84,73876,621],{"class":51627},[84,73878,51634],{"class":477},[84,73880,73881,73883,73885],{"class":86,"line":33413},[84,73882,55733],{"class":477},[84,73884,618],{"class":51627},[84,73886,51634],{"class":477},[84,73888,73889,73891,73893],{"class":86,"line":33418},[84,73890,52103],{"class":477},[84,73892,615],{"class":51627},[84,73894,51634],{"class":477},[84,73896,73897,73899,73901],{"class":86,"line":33424},[84,73898,51668],{"class":477},[84,73900,659],{"class":51627},[84,73902,51634],{"class":477},[84,73904,73905],{"class":86,"line":33473},[84,73906,73907],{"class":328},"      \u003C!-- \u003Ctr>\n",[84,73909,73910],{"class":86,"line":33520},[84,73911,73912],{"class":328},"        \u003Ctd>1\u003C\u002Ftd>\n",[84,73914,73915],{"class":86,"line":33525},[84,73916,73912],{"class":328},[84,73918,73919],{"class":86,"line":33531},[84,73920,73912],{"class":328},[84,73922,73923],{"class":86,"line":33550},[84,73924,73912],{"class":328},[84,73926,73927],{"class":86,"line":33556},[84,73928,73912],{"class":328},[84,73930,73931],{"class":86,"line":33576},[84,73932,73912],{"class":328},[84,73934,73935],{"class":86,"line":33582},[84,73936,73912],{"class":328},[84,73938,73939],{"class":86,"line":33588},[84,73940,73941],{"class":328},"        \u003Ctd>\n",[84,73943,73944],{"class":86,"line":33598},[84,73945,73946],{"class":328},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[84,73948,73949],{"class":86,"line":33603},[84,73950,73951],{"class":328},"        \u003C\u002Ftd>\n",[84,73953,73954],{"class":86,"line":33609},[84,73955,73956],{"class":328},"      \u003C\u002Ftr> -->\n",[84,73958,73959,73961,73963],{"class":86,"line":33625},[84,73960,52103],{"class":477},[84,73962,659],{"class":51627},[84,73964,51634],{"class":477},[84,73966,73967,73969,73971],{"class":86,"line":33670},[84,73968,52744],{"class":477},[84,73970,612],{"class":51627},[84,73972,51634],{"class":477},[84,73974,73975,73977,73979],{"class":86,"line":33676},[84,73976,52471],{"class":477},[84,73978,52140],{"class":51627},[84,73980,51634],{"class":477},[84,73982,73983],{"class":86,"line":33682},[84,73984,73985],{"class":328},"    \u002F\u002F const initData = [{\n",[84,73987,73988],{"class":86,"line":33688},[84,73989,73990],{"class":328},"    \u002F\u002F   unameId: 1,\n",[84,73992,73993],{"class":86,"line":33699},[84,73994,73995],{"class":328},"    \u002F\u002F   uname: '华晨宇',\n",[84,73997,73998],{"class":86,"line":33705},[84,73999,74000],{"class":328},"    \u002F\u002F   age: 22,\n",[84,74002,74003],{"class":86,"line":33711},[84,74004,74005],{"class":328},"    \u002F\u002F   salary: 12000,\n",[84,74007,74008],{"class":86,"line":33717},[84,74009,74010],{"class":328},"    \u002F\u002F   gender: '男',\n",[84,74012,74013],{"class":86,"line":33735},[84,74014,74015],{"class":328},"    \u002F\u002F   city: '北京',\n",[84,74017,74018],{"class":86,"line":33749},[84,74019,74020],{"class":328},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[84,74022,74023],{"class":86,"line":33758},[84,74024,74025],{"class":328},"    \u002F\u002F }]\n",[84,74027,74028],{"class":86,"line":33767},[84,74029,74030],{"class":328},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[84,74032,74033],{"class":86,"line":33776},[84,74034,74035],{"class":328},"    \u002F\u002F 1.渲染业务\n",[84,74037,74038],{"class":86,"line":33785},[84,74039,74040],{"class":328},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[84,74042,74043],{"class":86,"line":33791},[84,74044,74045],{"class":328},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[84,74047,74048],{"class":86,"line":33797},[84,74049,74050],{"class":328},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[84,74052,74053],{"class":86,"line":33805},[84,74054,2729],{"emptyLinePlaceholder":403},[84,74056,74057],{"class":86,"line":33810},[84,74058,74059],{"class":328},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[84,74061,74062],{"class":86,"line":33816},[84,74063,74064],{"class":328},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[84,74066,74067,74069,74071,74073],{"class":86,"line":33827},[84,74068,11550],{"class":473},[84,74070,58021],{"class":94},[84,74072,13893],{"class":473},[84,74074,52165],{"class":477},[84,74076,74077,74080,74082],{"class":86,"line":33833},[84,74078,74079],{"class":477},"    console.",[84,74081,58573],{"class":90},[84,74083,52739],{"class":477},[84,74085,74086],{"class":86,"line":33853},[84,74087,2729],{"emptyLinePlaceholder":403},[84,74089,74090],{"class":86,"line":33859},[84,74091,74092],{"class":328},"    \u002F\u002F 时间函数\n",[84,74094,74095,74097,74100],{"class":86,"line":33865},[84,74096,70410],{"class":473},[84,74098,74099],{"class":90}," getTime",[84,74101,11182],{"class":477},[84,74103,74104,74106,74109,74111,74113,74116],{"class":86,"line":33871},[84,74105,58554],{"class":473},[84,74107,74108],{"class":94}," date",[84,74110,13893],{"class":473},[84,74112,11907],{"class":473},[84,74114,74115],{"class":90}," Date",[84,74117,2305],{"class":477},[84,74119,74120,74122,74124,74126,74129,74132,74134,74136,74138,74141,74144,74146,74148,74150,74152,74154,74156,74158],{"class":86,"line":33888},[84,74121,58554],{"class":473},[84,74123,16420],{"class":94},[84,74125,13893],{"class":473},[84,74127,74128],{"class":477}," date.",[84,74130,74131],{"class":90},"getHours",[84,74133,13379],{"class":477},[84,74135,1383],{"class":473},[84,74137,2367],{"class":94},[84,74139,74140],{"class":473}," ?",[84,74142,74143],{"class":104}," '0'",[84,74145,45893],{"class":473},[84,74147,74128],{"class":477},[84,74149,74131],{"class":90},[84,74151,13379],{"class":477},[84,74153,1332],{"class":473},[84,74155,74128],{"class":477},[84,74157,74131],{"class":90},[84,74159,2305],{"class":477},[84,74161,74162,74164,74167,74169,74171,74174,74176,74178,74180,74182,74184,74186,74188,74190,74192,74194,74196,74198],{"class":86,"line":33894},[84,74163,58554],{"class":473},[84,74165,74166],{"class":94}," m",[84,74168,13893],{"class":473},[84,74170,74128],{"class":477},[84,74172,74173],{"class":90},"getMinutes",[84,74175,13379],{"class":477},[84,74177,1383],{"class":473},[84,74179,2367],{"class":94},[84,74181,74140],{"class":473},[84,74183,74143],{"class":104},[84,74185,45893],{"class":473},[84,74187,74128],{"class":477},[84,74189,74173],{"class":90},[84,74191,13379],{"class":477},[84,74193,1332],{"class":473},[84,74195,74128],{"class":477},[84,74197,74173],{"class":90},[84,74199,2305],{"class":477},[84,74201,74202,74204,74206,74208,74210,74213,74215,74217,74219,74221,74223,74225,74227,74229,74231,74233,74235,74237],{"class":86,"line":33900},[84,74203,58554],{"class":473},[84,74205,8757],{"class":94},[84,74207,13893],{"class":473},[84,74209,74128],{"class":477},[84,74211,74212],{"class":90},"getSeconds",[84,74214,13379],{"class":477},[84,74216,1383],{"class":473},[84,74218,2367],{"class":94},[84,74220,74140],{"class":473},[84,74222,74143],{"class":104},[84,74224,45893],{"class":473},[84,74226,74128],{"class":477},[84,74228,74212],{"class":90},[84,74230,13379],{"class":477},[84,74232,1332],{"class":473},[84,74234,74128],{"class":477},[84,74236,74212],{"class":90},[84,74238,2305],{"class":477},[84,74240,74241,74243,74246,74248,74250,74253,74255,74258,74260,74263,74265,74267,74270,74272,74274,74276,74278,74280,74282,74285,74287,74290,74292,74295,74297,74299,74301],{"class":86,"line":33906},[84,74242,58554],{"class":473},[84,74244,74245],{"class":94}," str",[84,74247,13893],{"class":473},[84,74249,63229],{"class":104},[84,74251,74252],{"class":477},"date",[84,74254,1031],{"class":104},[84,74256,74257],{"class":90},"getFullYear",[84,74259,2756],{"class":104},[84,74261,74262],{"class":104},"}\u002F${",[84,74264,74252],{"class":477},[84,74266,1031],{"class":104},[84,74268,74269],{"class":90},"getMonth",[84,74271,13379],{"class":104},[84,74273,954],{"class":473},[84,74275,25446],{"class":94},[84,74277,74262],{"class":104},[84,74279,74252],{"class":477},[84,74281,1031],{"class":104},[84,74283,74284],{"class":90},"getDate",[84,74286,2756],{"class":104},[84,74288,74289],{"class":104},"} ${",[84,74291,888],{"class":477},[84,74293,74294],{"class":104},"}:${",[84,74296,1017],{"class":477},[84,74298,74294],{"class":104},[84,74300,1168],{"class":477},[84,74302,74303],{"class":104},"}`\n",[84,74305,74306,74309],{"class":86,"line":33912},[84,74307,74308],{"class":473},"      return",[84,74310,74311],{"class":477}," str\n",[84,74313,74314],{"class":86,"line":33918},[84,74315,2516],{"class":477},[84,74317,74318],{"class":86,"line":33945},[84,74319,74320],{"class":328},"    \u002F\u002F 渲染函数\n",[84,74322,74323,74325,74327,74329,74331,74333,74335,74337],{"class":86,"line":33969},[84,74324,11550],{"class":473},[84,74326,70073],{"class":94},[84,74328,13893],{"class":473},[84,74330,54722],{"class":477},[84,74332,54725],{"class":90},[84,74334,478],{"class":477},[84,74336,70084],{"class":104},[84,74338,484],{"class":477},[84,74340,74341,74343,74345],{"class":86,"line":33975},[84,74342,70410],{"class":473},[84,74344,70413],{"class":90},[84,74346,11182],{"class":477},[84,74348,74349],{"class":86,"line":33981},[84,74350,74351],{"class":328},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[84,74353,74354],{"class":86,"line":33987},[84,74355,74356],{"class":328},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[84,74358,74359,74361,74364,74366,74368,74371,74373,74375,74377,74380,74382,74385],{"class":86,"line":33998},[84,74360,58554],{"class":473},[84,74362,74363],{"class":94}," trArr",[84,74365,13893],{"class":473},[84,74367,52292],{"class":477},[84,74369,74370],{"class":90},"map",[84,74372,478],{"class":477},[84,74374,54775],{"class":473},[84,74376,1991],{"class":477},[84,74378,74379],{"class":5545},"ele",[84,74381,12764],{"class":477},[84,74383,74384],{"class":5545},"index",[84,74386,12771],{"class":477},[84,74388,74389,74391],{"class":86,"line":34009},[84,74390,15081],{"class":473},[84,74392,70494],{"class":104},[84,74394,74395],{"class":86,"line":34015},[84,74396,74397],{"class":104},"      \u003Ctr>\n",[84,74399,74400,74402,74404,74406,74409],{"class":86,"line":34032},[84,74401,70499],{"class":104},[84,74403,74379],{"class":477},[84,74405,1031],{"class":104},[84,74407,74408],{"class":477},"unameId",[84,74410,70514],{"class":104},[84,74412,74413,74415,74417,74419,74421],{"class":86,"line":34055},[84,74414,70499],{"class":104},[84,74416,74379],{"class":477},[84,74418,1031],{"class":104},[84,74420,70530],{"class":477},[84,74422,70514],{"class":104},[84,74424,74425,74427,74429,74431,74433],{"class":86,"line":34078},[84,74426,70499],{"class":104},[84,74428,74379],{"class":477},[84,74430,1031],{"class":104},[84,74432,70547],{"class":477},[84,74434,70514],{"class":104},[84,74436,74437,74439,74441,74443,74445],{"class":86,"line":34084},[84,74438,70499],{"class":104},[84,74440,74379],{"class":477},[84,74442,1031],{"class":104},[84,74444,70564],{"class":477},[84,74446,70514],{"class":104},[84,74448,74449,74451,74453,74455,74457],{"class":86,"line":34089},[84,74450,70499],{"class":104},[84,74452,74379],{"class":477},[84,74454,1031],{"class":104},[84,74456,70581],{"class":477},[84,74458,70514],{"class":104},[84,74460,74461,74463,74465,74467,74469],{"class":86,"line":34098},[84,74462,70499],{"class":104},[84,74464,74379],{"class":477},[84,74466,1031],{"class":104},[84,74468,70598],{"class":477},[84,74470,70514],{"class":104},[84,74472,74473,74475,74477,74479,74481],{"class":86,"line":34108},[84,74474,70499],{"class":104},[84,74476,74379],{"class":477},[84,74478,1031],{"class":104},[84,74480,2716],{"class":477},[84,74482,70514],{"class":104},[84,74484,74485],{"class":86,"line":34114},[84,74486,73941],{"class":104},[84,74488,74489,74492,74494],{"class":86,"line":34119},[84,74490,74491],{"class":104},"          \u003Ca href=\"#\" data-id=\"${",[84,74493,74384],{"class":477},[84,74495,74496],{"class":104},"}\">删除\u003C\u002Fa>\n",[84,74498,74499],{"class":86,"line":34125},[84,74500,73951],{"class":104},[84,74502,74503],{"class":86,"line":34138},[84,74504,74505],{"class":104},"      \u003C\u002Ftr>\n",[84,74507,74508],{"class":86,"line":34144},[84,74509,74510],{"class":104},"  `\n",[84,74512,74513],{"class":86,"line":34155},[84,74514,65141],{"class":477},[84,74516,74517,74519,74521],{"class":86,"line":34166},[84,74518,58570],{"class":477},[84,74520,58573],{"class":90},[84,74522,74523],{"class":477},"(trArr)\n",[84,74525,74526],{"class":86,"line":34185},[84,74527,2729],{"emptyLinePlaceholder":403},[84,74529,74530],{"class":86,"line":49845},[84,74531,74532],{"class":328},"      \u002F\u002F (2) 把数组转换为字符串join\n",[84,74534,74535],{"class":86,"line":49850},[84,74536,74537],{"class":328},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[84,74539,74540,74542,74544,74547,74550,74552,74555],{"class":86,"line":49859},[84,74541,70425],{"class":477},[84,74543,523],{"class":473},[84,74545,74546],{"class":477}," trArr.",[84,74548,74549],{"class":90},"join",[84,74551,478],{"class":477},[84,74553,74554],{"class":104},"''",[84,74556,484],{"class":477},[84,74558,74559],{"class":86,"line":49868},[84,74560,74561],{"class":328},"      \u002F\u002F 显示共有几条\n",[84,74563,74564,74566,74568,74570,74573,74576,74578,74580],{"class":86,"line":49873},[84,74565,56097],{"class":477},[84,74567,54725],{"class":90},[84,74569,478],{"class":477},[84,74571,74572],{"class":104},"'.total span'",[84,74574,74575],{"class":477},").innerHTML ",[84,74577,523],{"class":473},[84,74579,52292],{"class":477},[84,74581,56157],{"class":94},[84,74583,74584],{"class":86,"line":49878},[84,74585,2516],{"class":477},[84,74587,74588],{"class":86,"line":49883},[84,74589,74590],{"class":328},"    \u002F\u002F render()\n",[84,74592,74593],{"class":86,"line":49896},[84,74594,2729],{"emptyLinePlaceholder":403},[84,74596,74597],{"class":86,"line":49901},[84,74598,74599],{"class":328},"    \u002F\u002F 获取DOM对象\n",[84,74601,74602,74604,74606,74608,74610,74612,74614,74616],{"class":86,"line":49910},[84,74603,11550],{"class":473},[84,74605,70147],{"class":94},[84,74607,13893],{"class":473},[84,74609,54722],{"class":477},[84,74611,54725],{"class":90},[84,74613,478],{"class":477},[84,74615,70158],{"class":104},[84,74617,484],{"class":477},[84,74619,74620,74622,74624,74626,74628,74630,74632,74634],{"class":86,"line":49919},[84,74621,11550],{"class":473},[84,74623,69974],{"class":94},[84,74625,13893],{"class":473},[84,74627,54722],{"class":477},[84,74629,54725],{"class":90},[84,74631,478],{"class":477},[84,74633,69985],{"class":104},[84,74635,484],{"class":477},[84,74637,74638,74640,74642,74644,74646,74648,74650,74652],{"class":86,"line":49936},[84,74639,11550],{"class":473},[84,74641,16018],{"class":94},[84,74643,13893],{"class":473},[84,74645,54722],{"class":477},[84,74647,54725],{"class":90},[84,74649,478],{"class":477},[84,74651,70004],{"class":104},[84,74653,484],{"class":477},[84,74655,74657,74659,74661,74663,74665,74667,74669,74671],{"class":86,"line":74656},231,[84,74658,11550],{"class":473},[84,74660,70033],{"class":94},[84,74662,13893],{"class":473},[84,74664,54722],{"class":477},[84,74666,54725],{"class":90},[84,74668,478],{"class":477},[84,74670,70044],{"class":104},[84,74672,484],{"class":477},[84,74674,74676,74678,74680,74682,74684,74686,74688,74690],{"class":86,"line":74675},232,[84,74677,11550],{"class":473},[84,74679,70013],{"class":94},[84,74681,13893],{"class":473},[84,74683,54722],{"class":477},[84,74685,54725],{"class":90},[84,74687,478],{"class":477},[84,74689,70024],{"class":104},[84,74691,484],{"class":477},[84,74693,74695,74697,74699,74701,74703,74705,74707,74709],{"class":86,"line":74694},233,[84,74696,11550],{"class":473},[84,74698,70053],{"class":94},[84,74700,13893],{"class":473},[84,74702,54722],{"class":477},[84,74704,54725],{"class":90},[84,74706,478],{"class":477},[84,74708,70064],{"class":104},[84,74710,484],{"class":477},[84,74712,74714],{"class":86,"line":74713},234,[84,74715,2729],{"emptyLinePlaceholder":403},[84,74717,74719],{"class":86,"line":74718},235,[84,74720,74721],{"class":328},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[84,74723,74725,74727,74729,74731,74733,74735,74737,74739,74741],{"class":86,"line":74724},236,[84,74726,70165],{"class":477},[84,74728,58139],{"class":90},[84,74730,478],{"class":477},[84,74732,70172],{"class":104},[84,74734,12764],{"class":477},[84,74736,54775],{"class":473},[84,74738,1991],{"class":477},[84,74740,550],{"class":5545},[84,74742,12771],{"class":477},[84,74744,74746],{"class":86,"line":74745},237,[84,74747,74748],{"class":328},"      \u002F\u002F 禁止浏览器跳转\n",[84,74750,74752,74754,74756],{"class":86,"line":74751},238,[84,74753,70192],{"class":477},[84,74755,70195],{"class":90},[84,74757,2305],{"class":477},[84,74759,74761],{"class":86,"line":74760},239,[84,74762,74763],{"class":328},"      \u002F\u002F 非空判断\n",[84,74765,74767],{"class":86,"line":74766},240,[84,74768,74769],{"class":328},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[84,74771,74773],{"class":86,"line":74772},241,[84,74774,74775],{"class":328},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[84,74777,74779,74781,74783,74785,74788,74790,74793,74796,74798,74800],{"class":86,"line":74778},242,[84,74780,54806],{"class":473},[84,74782,1991],{"class":477},[84,74784,701],{"class":473},[84,74786,74787],{"class":477},"uname.value ",[84,74789,71683],{"class":473},[84,74791,74792],{"class":473}," !",[84,74794,74795],{"class":477},"age.value ",[84,74797,71683],{"class":473},[84,74799,74792],{"class":473},[84,74801,74802],{"class":477},"salary.value) {\n",[84,74804,74806,74808,74810,74812,74814],{"class":86,"line":74805},243,[84,74807,15081],{"class":473},[84,74809,70266],{"class":90},[84,74811,478],{"class":477},[84,74813,70271],{"class":104},[84,74815,484],{"class":477},[84,74817,74819],{"class":86,"line":74818},244,[84,74820,52725],{"class":477},[84,74822,74824,74826,74828],{"class":86,"line":74823},245,[84,74825,58333],{"class":477},[84,74827,52211],{"class":90},[84,74829,74830],{"class":477},"({\n",[84,74832,74834],{"class":86,"line":74833},246,[84,74835,74836],{"class":328},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[84,74838,74840],{"class":86,"line":74839},247,[84,74841,74842],{"class":328},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[84,74844,74846],{"class":86,"line":74845},248,[84,74847,74848],{"class":328},"        \u002F\u002F 对象的序号应为数组长度+1\n",[84,74850,74852],{"class":86,"line":74851},249,[84,74853,74854],{"class":328},"        \u002F\u002F unameId: arr.length + 1,\n",[84,74856,74858],{"class":86,"line":74857},250,[84,74859,2729],{"emptyLinePlaceholder":403},[84,74861,74863],{"class":86,"line":74862},251,[84,74864,74865],{"class":328},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[84,74867,74869],{"class":86,"line":74868},252,[84,74870,74871],{"class":328},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[84,74873,74875],{"class":86,"line":74874},253,[84,74876,74877],{"class":328},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[84,74879,74881],{"class":86,"line":74880},254,[84,74882,74883],{"class":328},"        \u002F\u002F 0当假看\n",[84,74885,74887,74890,74892,74894,74897,74899,74901,74903,74906,74908,74910,74913,74915],{"class":86,"line":74886},255,[84,74888,74889],{"class":477},"        unameId: arr.",[84,74891,52295],{"class":94},[84,74893,74140],{"class":473},[84,74895,74896],{"class":477}," arr[arr.",[84,74898,52295],{"class":94},[84,74900,52598],{"class":473},[84,74902,25446],{"class":94},[84,74904,74905],{"class":477},"].unameId ",[84,74907,954],{"class":473},[84,74909,25446],{"class":94},[84,74911,74912],{"class":473}," :",[84,74914,25446],{"class":94},[84,74916,31793],{"class":477},[84,74918,74920],{"class":86,"line":74919},256,[84,74921,70319],{"class":477},[84,74923,74925],{"class":86,"line":74924},257,[84,74926,70324],{"class":477},[84,74928,74930],{"class":86,"line":74929},258,[84,74931,70334],{"class":477},[84,74933,74935],{"class":86,"line":74934},259,[84,74936,70329],{"class":477},[84,74938,74940],{"class":86,"line":74939},260,[84,74941,74942],{"class":477},"        city: city.value,\n",[84,74944,74946],{"class":86,"line":74945},261,[84,74947,74948],{"class":328},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[84,74950,74952],{"class":86,"line":74951},262,[84,74953,74954],{"class":328},"        \u002F\u002F time: new Date().toDateString()\n",[84,74956,74958,74961,74964],{"class":86,"line":74957},263,[84,74959,74960],{"class":477},"        time: ",[84,74962,74963],{"class":90},"getTime",[84,74965,2305],{"class":477},[84,74967,74969],{"class":86,"line":74968},264,[84,74970,65141],{"class":477},[84,74972,74974],{"class":86,"line":74973},265,[84,74975,74976],{"class":328},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[84,74978,74980,74982],{"class":86,"line":74979},266,[84,74981,70394],{"class":90},[84,74983,2305],{"class":477},[84,74985,74987,74989,74991,74993,74995],{"class":86,"line":74986},267,[84,74988,70377],{"class":94},[84,74990,1031],{"class":477},[84,74992,70382],{"class":90},[84,74994,13379],{"class":477},[84,74996,74997],{"class":328},"\u002F\u002F重置表单\n",[84,74999,75001],{"class":86,"line":75000},268,[84,75002,75003],{"class":328},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[84,75005,75007,75010,75012,75014,75017,75019,75021,75023,75025],{"class":86,"line":75006},269,[84,75008,75009],{"class":477},"      localStorage.",[84,75011,71980],{"class":90},[84,75013,478],{"class":477},[84,75015,75016],{"class":104},"'data'",[84,75018,12764],{"class":477},[84,75020,71990],{"class":94},[84,75022,1031],{"class":477},[84,75024,71995],{"class":90},[84,75026,75027],{"class":477},"(arr))\n",[84,75029,75031],{"class":86,"line":75030},270,[84,75032,33788],{"class":477},[84,75034,75036],{"class":86,"line":75035},271,[84,75037,2729],{"emptyLinePlaceholder":403},[84,75039,75041],{"class":86,"line":75040},272,[84,75042,75043],{"class":328},"    \u002F\u002F 3.删除业务\n",[84,75045,75047],{"class":86,"line":75046},273,[84,75048,75049],{"class":328},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[84,75051,75053,75055,75057,75059,75061,75063,75065,75067,75069],{"class":86,"line":75052},274,[84,75054,70667],{"class":477},[84,75056,58139],{"class":90},[84,75058,478],{"class":477},[84,75060,58144],{"class":104},[84,75062,12764],{"class":477},[84,75064,54775],{"class":473},[84,75066,1991],{"class":477},[84,75068,550],{"class":5545},[84,75070,12771],{"class":477},[84,75072,75074],{"class":86,"line":75073},275,[84,75075,75076],{"class":328},"      \u002F\u002F 判断是否点击的是删除按钮\n",[84,75078,75080,75082,75084,75086,75088],{"class":86,"line":75079},276,[84,75081,54806],{"class":473},[84,75083,67360],{"class":477},[84,75085,54812],{"class":473},[84,75087,68582],{"class":104},[84,75089,12771],{"class":477},[84,75091,75093],{"class":86,"line":75092},277,[84,75094,75095],{"class":328},"        \u002F\u002F alert(1)\n",[84,75097,75099],{"class":86,"line":75098},278,[84,75100,75101],{"class":328},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[84,75103,75105],{"class":86,"line":75104},279,[84,75106,75107],{"class":328},"        \u002F\u002F console.log(e.target)\n",[84,75109,75111],{"class":86,"line":75110},280,[84,75112,75113],{"class":328},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[84,75115,75117],{"class":86,"line":75116},281,[84,75118,2729],{"emptyLinePlaceholder":403},[84,75120,75122],{"class":86,"line":75121},282,[84,75123,75124],{"class":328},"        \u002F\u002F 确认框，确然是否真的要删除\n",[84,75126,75128],{"class":86,"line":75127},283,[84,75129,75130],{"class":328},"        \u002F\u002F confirm()为确认框\n",[84,75132,75134],{"class":86,"line":75133},284,[84,75135,75136],{"class":328},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[84,75138,75140,75142,75144,75147,75149,75152],{"class":86,"line":75139},285,[84,75141,2826],{"class":473},[84,75143,1991],{"class":477},[84,75145,75146],{"class":90},"confirm",[84,75148,478],{"class":477},[84,75150,75151],{"class":104},"'您确定要删除这条数据吗？'",[84,75153,75154],{"class":477},")) {\n",[84,75156,75158,75161,75163,75165,75167],{"class":86,"line":75157},286,[84,75159,75160],{"class":477},"          arr.",[84,75162,58336],{"class":90},[84,75164,70720],{"class":477},[84,75166,692],{"class":94},[84,75168,484],{"class":477},[84,75170,75172],{"class":86,"line":75171},287,[84,75173,75174],{"class":328},"          \u002F\u002F 3.4 重新渲染页面\n",[84,75176,75178,75181],{"class":86,"line":75177},288,[84,75179,75180],{"class":90},"          render",[84,75182,2305],{"class":477},[84,75184,75186],{"class":86,"line":75185},289,[84,75187,75188],{"class":328},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[84,75190,75192,75195,75197,75199,75201,75203,75205,75207,75209],{"class":86,"line":75191},290,[84,75193,75194],{"class":477},"          localStorage.",[84,75196,71980],{"class":90},[84,75198,478],{"class":477},[84,75200,75016],{"class":104},[84,75202,12764],{"class":477},[84,75204,71990],{"class":94},[84,75206,1031],{"class":477},[84,75208,71995],{"class":90},[84,75210,75027],{"class":477},[84,75212,75214],{"class":86,"line":75213},291,[84,75215,2858],{"class":477},[84,75217,75219],{"class":86,"line":75218},292,[84,75220,52725],{"class":477},[84,75222,75224],{"class":86,"line":75223},293,[84,75225,2729],{"emptyLinePlaceholder":403},[84,75227,75229],{"class":86,"line":75228},294,[84,75230,33788],{"class":477},[84,75232,75234],{"class":86,"line":75233},295,[84,75235,2729],{"emptyLinePlaceholder":403},[84,75237,75239,75241,75243],{"class":86,"line":75238},296,[84,75240,52744],{"class":477},[84,75242,52140],{"class":51627},[84,75244,51634],{"class":477},[84,75246,75248,75250,75252],{"class":86,"line":75247},297,[84,75249,52112],{"class":477},[84,75251,52127],{"class":51627},[84,75253,51634],{"class":477},[84,75255,75257],{"class":86,"line":75256},298,[84,75258,2729],{"emptyLinePlaceholder":403},[84,75260,75262,75264,75266],{"class":86,"line":75261},299,[84,75263,52112],{"class":477},[84,75265,50962],{"class":51627},[84,75267,51634],{"class":477},[14,75269,75271],{"id":75270},"_36-正则表达式","3.6 正则表达式",[35,75273,75274],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[35,75276,75277],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[35,75279,75280],{},"正则表达式的作用：",[1480,75282,75283,75290,75296],{},[31,75284,75285,75286,75289],{},"表单验证（ ",[624,75287,75288],{},"匹配"," ）",[31,75291,75292,75293,75289],{},"过滤敏感词（ ",[624,75294,75295],{},"替换",[31,75297,75298,75299,75289],{},"字符串中提取我们想要的部分（ ",[624,75300,75301],{},"提取",[23,75303,75305],{"id":75304},"_361-语法","3.6.1 语法",[35,75307,75308],{},"正则表达式使用步骤：",[28,75310,75311,75314],{},[31,75312,75313],{},"定义规则",[31,75315,75316],{},"查找是否匹配",[35,75318,75319],{},"正则表达式里边不需要写引号",[35,75321,75322],{},[64,75323],{"alt":66,"src":75324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[35,75326,75327],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[35,75329,75330],{},"reg.test(str)",[35,75332,75333],{},[64,75334],{"alt":66,"src":75335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[35,75337,75338],{},[64,75339],{"alt":66,"src":75340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[23,75342,75344],{"id":75343},"_362-元字符","3.6.2 元字符",[28,75346,75347,75350,75353,75356,75363],{},[31,75348,75349],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[31,75351,75352],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[31,75354,75355],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[31,75357,75358,75359],{},"正则验证工具：",[39,75360,75361],{"href":75361,"rel":75362},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[43],[31,75364,75365],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22327,75367,75369],{"id":75368},"_3621-边界符","3.6.2.1 边界符",[35,75371,75372],{},[64,75373],{"alt":66,"src":75374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[35,75376,75377],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[35,75379,75380],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[35,75382,75383],{},"只匹配一次",[35,75385,75386],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22327,75388,75390],{"id":75389},"_3622-量词","3.6.2.2 量词",[35,75392,75393],{},[64,75394],{"alt":66,"src":75395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[35,75397,75398],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22327,75400,75402],{"id":75401},"_3623-元字符","3.6.2.3 元字符",[35,75404,75405],{},[64,75406],{"alt":66,"src":75407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[35,75409,75410],{},"匹配的是a或b或c []只选一个",[35,75412,75413],{},[64,75414],{"alt":66,"src":75415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[35,75417,75418],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[35,75420,75421],{},[64,75422],{"alt":66,"src":75423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[35,75425,75426],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[35,75428,75429],{},[64,75430],{"alt":66,"src":75431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[75,75433,75435],{"className":50960,"code":75434,"language":50962,"meta":66,"style":66},"\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",[81,75436,75437,75447,75461,75465,75473,75487,75507,75519,75527,75531,75539,75547,75552,75583,75610,75638,75642,75647,75675,75706,75711,75716,75747,75779,75811,75815,75820,75851,75881,75911,75915,75920,75951,75982,76012,76042,76046,76051,76084,76088,76093,76124,76155,76159,76164,76195,76225,76256,76260,76265,76297,76328,76359,76386,76417,76449,76482,76513,76544,76576,76607,76615,76623,76627],{"__ignoreMap":66},[84,75438,75439,75441,75443,75445],{"class":86,"line":87},[84,75440,51624],{"class":477},[84,75442,51628],{"class":51627},[84,75444,51631],{"class":90},[84,75446,51634],{"class":477},[84,75448,75449,75451,75453,75455,75457,75459],{"class":86,"line":98},[84,75450,1383],{"class":477},[84,75452,50962],{"class":51627},[84,75454,51643],{"class":90},[84,75456,523],{"class":477},[84,75458,51648],{"class":104},[84,75460,51634],{"class":477},[84,75462,75463],{"class":86,"line":70},[84,75464,2729],{"emptyLinePlaceholder":403},[84,75466,75467,75469,75471],{"class":86,"line":120},[84,75468,1383],{"class":477},[84,75470,51661],{"class":51627},[84,75472,51634],{"class":477},[84,75474,75475,75477,75479,75481,75483,75485],{"class":86,"line":131},[84,75476,52471],{"class":477},[84,75478,51671],{"class":51627},[84,75480,51674],{"class":90},[84,75482,523],{"class":477},[84,75484,51679],{"class":104},[84,75486,51634],{"class":477},[84,75488,75489,75491,75493,75495,75497,75499,75501,75503,75505],{"class":86,"line":145},[84,75490,52471],{"class":477},[84,75492,51671],{"class":51627},[84,75494,15249],{"class":90},[84,75496,523],{"class":477},[84,75498,51718],{"class":104},[84,75500,51698],{"class":90},[84,75502,523],{"class":477},[84,75504,51725],{"class":104},[84,75506,51634],{"class":477},[84,75508,75509,75511,75513,75515,75517],{"class":86,"line":156},[84,75510,52471],{"class":477},[84,75512,51734],{"class":51627},[84,75514,51737],{"class":477},[84,75516,51734],{"class":51627},[84,75518,51634],{"class":477},[84,75520,75521,75523,75525],{"class":86,"line":164},[84,75522,52112],{"class":477},[84,75524,51661],{"class":51627},[84,75526,51634],{"class":477},[84,75528,75529],{"class":86,"line":175},[84,75530,2729],{"emptyLinePlaceholder":403},[84,75532,75533,75535,75537],{"class":86,"line":185},[84,75534,1383],{"class":477},[84,75536,52127],{"class":51627},[84,75538,51634],{"class":477},[84,75540,75541,75543,75545],{"class":86,"line":195},[84,75542,52471],{"class":477},[84,75544,52140],{"class":51627},[84,75546,51634],{"class":477},[84,75548,75549],{"class":86,"line":206},[84,75550,75551],{"class":328},"    \u002F\u002F 元字符中\n",[84,75553,75554,75556,75558,75560,75562,75565,75567,75569,75572,75574,75577,75580],{"class":86,"line":217},[84,75555,74079],{"class":477},[84,75557,58573],{"class":90},[84,75559,478],{"class":477},[84,75561,1057],{"class":104},[84,75563,75564],{"class":48304},"哈",[84,75566,1057],{"class":104},[84,75568,1031],{"class":477},[84,75570,75571],{"class":90},"test",[84,75573,478],{"class":477},[84,75575,75576],{"class":104},"'哈'",[84,75578,75579],{"class":477},"))  ",[84,75581,75582],{"class":328},"\u002F\u002Ftrue\n",[84,75584,75585,75587,75589,75591,75593,75595,75597,75599,75601,75603,75606,75608],{"class":86,"line":227},[84,75586,74079],{"class":477},[84,75588,58573],{"class":90},[84,75590,478],{"class":477},[84,75592,1057],{"class":104},[84,75594,75564],{"class":48304},[84,75596,1057],{"class":104},[84,75598,1031],{"class":477},[84,75600,75571],{"class":90},[84,75602,478],{"class":477},[84,75604,75605],{"class":104},"'哈哈'",[84,75607,75579],{"class":477},[84,75609,75582],{"class":328},[84,75611,75612,75614,75616,75618,75620,75622,75624,75626,75628,75630,75633,75636],{"class":86,"line":238},[84,75613,74079],{"class":477},[84,75615,58573],{"class":90},[84,75617,478],{"class":477},[84,75619,1057],{"class":104},[84,75621,75564],{"class":48304},[84,75623,1057],{"class":104},[84,75625,1031],{"class":477},[84,75627,75571],{"class":90},[84,75629,478],{"class":477},[84,75631,75632],{"class":104},"'二哈'",[84,75634,75635],{"class":477},"))   ",[84,75637,75582],{"class":328},[84,75639,75640],{"class":86,"line":249},[84,75641,2729],{"emptyLinePlaceholder":403},[84,75643,75644],{"class":86,"line":262},[84,75645,75646],{"class":328},"    \u002F\u002F 1.边界符\n",[84,75648,75649,75651,75653,75655,75657,75659,75661,75663,75665,75667,75669,75671,75673],{"class":86,"line":273},[84,75650,74079],{"class":477},[84,75652,58573],{"class":90},[84,75654,478],{"class":477},[84,75656,1057],{"class":104},[84,75658,1439],{"class":473},[84,75660,75564],{"class":48304},[84,75662,1057],{"class":104},[84,75664,1031],{"class":477},[84,75666,75571],{"class":90},[84,75668,478],{"class":477},[84,75670,75576],{"class":104},[84,75672,75579],{"class":477},[84,75674,75582],{"class":328},[84,75676,75677,75679,75681,75683,75685,75687,75689,75691,75693,75695,75697,75699,75701,75703],{"class":86,"line":283},[84,75678,74079],{"class":477},[84,75680,58573],{"class":90},[84,75682,478],{"class":477},[84,75684,1057],{"class":104},[84,75686,1439],{"class":473},[84,75688,75564],{"class":48304},[84,75690,775],{"class":473},[84,75692,1057],{"class":104},[84,75694,1031],{"class":477},[84,75696,75571],{"class":90},[84,75698,478],{"class":477},[84,75700,75605],{"class":104},[84,75702,75579],{"class":477},[84,75704,75705],{"class":328},"\u002F\u002Ffalse\n",[84,75707,75708],{"class":86,"line":294},[84,75709,75710],{"class":328},"    \u002F\u002F 2.量词\n",[84,75712,75713],{"class":86,"line":2028},[84,75714,75715],{"class":328},"    \u002F\u002F 量词 * 类似于 >= 0\n",[84,75717,75718,75720,75722,75724,75726,75728,75730,75733,75735,75737,75739,75741,75743,75745],{"class":86,"line":2057},[84,75719,74079],{"class":477},[84,75721,58573],{"class":90},[84,75723,478],{"class":477},[84,75725,1057],{"class":104},[84,75727,1439],{"class":473},[84,75729,75564],{"class":48304},[84,75731,75732],{"class":473},"*$",[84,75734,1057],{"class":104},[84,75736,1031],{"class":477},[84,75738,75571],{"class":90},[84,75740,478],{"class":477},[84,75742,75605],{"class":104},[84,75744,75579],{"class":477},[84,75746,75582],{"class":328},[84,75748,75749,75751,75753,75755,75757,75759,75761,75763,75765,75767,75769,75771,75774,75776],{"class":86,"line":2062},[84,75750,74079],{"class":477},[84,75752,58573],{"class":90},[84,75754,478],{"class":477},[84,75756,1057],{"class":104},[84,75758,1439],{"class":473},[84,75760,75564],{"class":48304},[84,75762,75732],{"class":473},[84,75764,1057],{"class":104},[84,75766,1031],{"class":477},[84,75768,75571],{"class":90},[84,75770,478],{"class":477},[84,75772,75773],{"class":104},"'二哈好傻'",[84,75775,75579],{"class":477},[84,75777,75778],{"class":328},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[84,75780,75781,75783,75785,75787,75789,75791,75793,75795,75797,75799,75801,75803,75806,75808],{"class":86,"line":2079},[84,75782,74079],{"class":477},[84,75784,58573],{"class":90},[84,75786,478],{"class":477},[84,75788,1057],{"class":104},[84,75790,1439],{"class":473},[84,75792,75564],{"class":48304},[84,75794,75732],{"class":473},[84,75796,1057],{"class":104},[84,75798,1031],{"class":477},[84,75800,75571],{"class":90},[84,75802,478],{"class":477},[84,75804,75805],{"class":104},"'哈好哈'",[84,75807,75635],{"class":477},[84,75809,75810],{"class":328},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[84,75812,75813],{"class":86,"line":2084},[84,75814,2729],{"emptyLinePlaceholder":403},[84,75816,75817],{"class":86,"line":2089},[84,75818,75819],{"class":328},"    \u002F\u002F +类似于>=1\n",[84,75821,75822,75824,75826,75828,75830,75832,75834,75837,75839,75841,75843,75845,75847,75849],{"class":86,"line":2094},[84,75823,74079],{"class":477},[84,75825,58573],{"class":90},[84,75827,478],{"class":477},[84,75829,1057],{"class":104},[84,75831,1439],{"class":473},[84,75833,75564],{"class":48304},[84,75835,75836],{"class":473},"+$",[84,75838,1057],{"class":104},[84,75840,1031],{"class":477},[84,75842,75571],{"class":90},[84,75844,478],{"class":477},[84,75846,75605],{"class":104},[84,75848,75579],{"class":477},[84,75850,75582],{"class":328},[84,75852,75853,75855,75857,75859,75861,75863,75865,75867,75869,75871,75873,75875,75877,75879],{"class":86,"line":2108},[84,75854,74079],{"class":477},[84,75856,58573],{"class":90},[84,75858,478],{"class":477},[84,75860,1057],{"class":104},[84,75862,1439],{"class":473},[84,75864,75564],{"class":48304},[84,75866,75836],{"class":473},[84,75868,1057],{"class":104},[84,75870,1031],{"class":477},[84,75872,75571],{"class":90},[84,75874,478],{"class":477},[84,75876,75773],{"class":104},[84,75878,75579],{"class":477},[84,75880,75778],{"class":328},[84,75882,75883,75885,75887,75889,75891,75893,75895,75897,75899,75901,75903,75905,75907,75909],{"class":86,"line":2113},[84,75884,74079],{"class":477},[84,75886,58573],{"class":90},[84,75888,478],{"class":477},[84,75890,1057],{"class":104},[84,75892,1439],{"class":473},[84,75894,75564],{"class":48304},[84,75896,75836],{"class":473},[84,75898,1057],{"class":104},[84,75900,1031],{"class":477},[84,75902,75571],{"class":90},[84,75904,478],{"class":477},[84,75906,75805],{"class":104},[84,75908,75635],{"class":477},[84,75910,75705],{"class":328},[84,75912,75913],{"class":86,"line":2906},[84,75914,2729],{"emptyLinePlaceholder":403},[84,75916,75917],{"class":86,"line":2920},[84,75918,75919],{"class":328},"    \u002F\u002F ?类似于0次或一次\n",[84,75921,75922,75924,75926,75928,75930,75932,75935,75937,75939,75941,75943,75945,75947,75949],{"class":86,"line":2928},[84,75923,74079],{"class":477},[84,75925,58573],{"class":90},[84,75927,478],{"class":477},[84,75929,1057],{"class":104},[84,75931,1439],{"class":473},[84,75933,75934],{"class":48304},"哈？",[84,75936,775],{"class":473},[84,75938,1057],{"class":104},[84,75940,1031],{"class":477},[84,75942,75571],{"class":90},[84,75944,478],{"class":477},[84,75946,74554],{"class":104},[84,75948,75635],{"class":477},[84,75950,75582],{"class":328},[84,75952,75953,75955,75957,75959,75961,75963,75965,75968,75970,75972,75974,75976,75978,75980],{"class":86,"line":2933},[84,75954,74079],{"class":477},[84,75956,58573],{"class":90},[84,75958,478],{"class":477},[84,75960,1057],{"class":104},[84,75962,1439],{"class":473},[84,75964,75564],{"class":48304},[84,75966,75967],{"class":473},"?$",[84,75969,1057],{"class":104},[84,75971,1031],{"class":477},[84,75973,75571],{"class":90},[84,75975,478],{"class":477},[84,75977,75605],{"class":104},[84,75979,75579],{"class":477},[84,75981,75705],{"class":328},[84,75983,75984,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76008,76010],{"class":86,"line":2939},[84,75985,74079],{"class":477},[84,75987,58573],{"class":90},[84,75989,478],{"class":477},[84,75991,1057],{"class":104},[84,75993,1439],{"class":473},[84,75995,75564],{"class":48304},[84,75997,75967],{"class":473},[84,75999,1057],{"class":104},[84,76001,1031],{"class":477},[84,76003,75571],{"class":90},[84,76005,478],{"class":477},[84,76007,75773],{"class":104},[84,76009,75579],{"class":477},[84,76011,75778],{"class":328},[84,76013,76014,76016,76018,76020,76022,76024,76026,76028,76030,76032,76034,76036,76038,76040],{"class":86,"line":2945},[84,76015,74079],{"class":477},[84,76017,58573],{"class":90},[84,76019,478],{"class":477},[84,76021,1057],{"class":104},[84,76023,1439],{"class":473},[84,76025,75564],{"class":48304},[84,76027,75967],{"class":473},[84,76029,1057],{"class":104},[84,76031,1031],{"class":477},[84,76033,75571],{"class":90},[84,76035,478],{"class":477},[84,76037,75805],{"class":104},[84,76039,75579],{"class":477},[84,76041,75705],{"class":328},[84,76043,76044],{"class":86,"line":2950},[84,76045,2729],{"emptyLinePlaceholder":403},[84,76047,76048],{"class":86,"line":8277},[84,76049,76050],{"class":328},"    \u002F\u002F {n}写几，就必须出现几次\n",[84,76052,76053,76055,76057,76059,76061,76063,76065,76068,76070,76072,76074,76076,76079,76082],{"class":86,"line":8301},[84,76054,74079],{"class":477},[84,76056,58573],{"class":90},[84,76058,478],{"class":477},[84,76060,1057],{"class":104},[84,76062,1439],{"class":473},[84,76064,75564],{"class":48304},[84,76066,76067],{"class":473},"{4}$",[84,76069,1057],{"class":104},[84,76071,1031],{"class":477},[84,76073,75571],{"class":90},[84,76075,478],{"class":477},[84,76077,76078],{"class":104},"'哈哈哈哈'",[84,76080,76081],{"class":477},")) ",[84,76083,75582],{"class":328},[84,76085,76086],{"class":86,"line":8306},[84,76087,2729],{"emptyLinePlaceholder":403},[84,76089,76090],{"class":86,"line":8312},[84,76091,76092],{"class":328},"    \u002F\u002F {n,}大于等于n次\n",[84,76094,76095,76097,76099,76101,76103,76105,76107,76110,76112,76114,76116,76118,76120,76122],{"class":86,"line":8339},[84,76096,74079],{"class":477},[84,76098,58573],{"class":90},[84,76100,478],{"class":477},[84,76102,1057],{"class":104},[84,76104,1439],{"class":473},[84,76106,75564],{"class":48304},[84,76108,76109],{"class":473},"{4,}$",[84,76111,1057],{"class":104},[84,76113,1031],{"class":477},[84,76115,75571],{"class":90},[84,76117,478],{"class":477},[84,76119,76078],{"class":104},[84,76121,76081],{"class":477},[84,76123,75582],{"class":328},[84,76125,76126,76128,76130,76132,76134,76136,76138,76140,76142,76144,76146,76148,76151,76153],{"class":86,"line":8344},[84,76127,74079],{"class":477},[84,76129,58573],{"class":90},[84,76131,478],{"class":477},[84,76133,1057],{"class":104},[84,76135,1439],{"class":473},[84,76137,75564],{"class":48304},[84,76139,76109],{"class":473},[84,76141,1057],{"class":104},[84,76143,1031],{"class":477},[84,76145,75571],{"class":90},[84,76147,478],{"class":477},[84,76149,76150],{"class":104},"'哈哈哈哈哈'",[84,76152,76081],{"class":477},[84,76154,75582],{"class":328},[84,76156,76157],{"class":86,"line":8350},[84,76158,2729],{"emptyLinePlaceholder":403},[84,76160,76161],{"class":86,"line":8362},[84,76162,76163],{"class":328},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[84,76165,76166,76168,76170,76172,76174,76176,76178,76181,76183,76185,76187,76189,76191,76193],{"class":86,"line":8374},[84,76167,74079],{"class":477},[84,76169,58573],{"class":90},[84,76171,478],{"class":477},[84,76173,1057],{"class":104},[84,76175,1439],{"class":473},[84,76177,75564],{"class":48304},[84,76179,76180],{"class":473},"{4,6}$",[84,76182,1057],{"class":104},[84,76184,1031],{"class":477},[84,76186,75571],{"class":90},[84,76188,478],{"class":477},[84,76190,76078],{"class":104},[84,76192,76081],{"class":477},[84,76194,75582],{"class":328},[84,76196,76197,76199,76201,76203,76205,76207,76209,76211,76213,76215,76217,76219,76221,76223],{"class":86,"line":8386},[84,76198,74079],{"class":477},[84,76200,58573],{"class":90},[84,76202,478],{"class":477},[84,76204,1057],{"class":104},[84,76206,1439],{"class":473},[84,76208,75564],{"class":48304},[84,76210,76180],{"class":473},[84,76212,1057],{"class":104},[84,76214,1031],{"class":477},[84,76216,75571],{"class":90},[84,76218,478],{"class":477},[84,76220,76150],{"class":104},[84,76222,76081],{"class":477},[84,76224,75582],{"class":328},[84,76226,76227,76229,76231,76233,76235,76237,76239,76241,76243,76245,76247,76249,76252,76254],{"class":86,"line":10045},[84,76228,74079],{"class":477},[84,76230,58573],{"class":90},[84,76232,478],{"class":477},[84,76234,1057],{"class":104},[84,76236,1439],{"class":473},[84,76238,75564],{"class":48304},[84,76240,76180],{"class":473},[84,76242,1057],{"class":104},[84,76244,1031],{"class":477},[84,76246,75571],{"class":90},[84,76248,478],{"class":477},[84,76250,76251],{"class":104},"'哈哈哈哈哈哈哈'",[84,76253,76081],{"class":477},[84,76255,75705],{"class":328},[84,76257,76258],{"class":86,"line":10070},[84,76259,2729],{"emptyLinePlaceholder":403},[84,76261,76262],{"class":86,"line":10093},[84,76263,76264],{"class":328},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[84,76266,76267,76269,76271,76273,76275,76277,76280,76282,76284,76286,76288,76290,76293,76295],{"class":86,"line":10117},[84,76268,74079],{"class":477},[84,76270,58573],{"class":90},[84,76272,478],{"class":477},[84,76274,1057],{"class":104},[84,76276,1439],{"class":473},[84,76278,76279],{"class":94},"[abc]",[84,76281,775],{"class":473},[84,76283,1057],{"class":104},[84,76285,1031],{"class":477},[84,76287,75571],{"class":90},[84,76289,478],{"class":477},[84,76291,76292],{"class":104},"'a'",[84,76294,75579],{"class":477},[84,76296,75582],{"class":328},[84,76298,76299,76301,76303,76305,76307,76309,76311,76313,76315,76317,76319,76321,76324,76326],{"class":86,"line":10122},[84,76300,74079],{"class":477},[84,76302,58573],{"class":90},[84,76304,478],{"class":477},[84,76306,1057],{"class":104},[84,76308,1439],{"class":473},[84,76310,76279],{"class":94},[84,76312,775],{"class":473},[84,76314,1057],{"class":104},[84,76316,1031],{"class":477},[84,76318,75571],{"class":90},[84,76320,478],{"class":477},[84,76322,76323],{"class":104},"'b'",[84,76325,75579],{"class":477},[84,76327,75582],{"class":328},[84,76329,76330,76332,76334,76336,76338,76340,76342,76344,76346,76348,76350,76352,76355,76357],{"class":86,"line":10127},[84,76331,74079],{"class":477},[84,76333,58573],{"class":90},[84,76335,478],{"class":477},[84,76337,1057],{"class":104},[84,76339,1439],{"class":473},[84,76341,76279],{"class":94},[84,76343,775],{"class":473},[84,76345,1057],{"class":104},[84,76347,1031],{"class":477},[84,76349,75571],{"class":90},[84,76351,478],{"class":477},[84,76353,76354],{"class":104},"'c'",[84,76356,75579],{"class":477},[84,76358,75582],{"class":328},[84,76360,76361,76363,76365,76367,76369,76371,76373,76375,76377,76379,76382,76384],{"class":86,"line":10132},[84,76362,74079],{"class":477},[84,76364,58573],{"class":90},[84,76366,478],{"class":477},[84,76368,1057],{"class":104},[84,76370,76279],{"class":94},[84,76372,1057],{"class":104},[84,76374,1031],{"class":477},[84,76376,75571],{"class":90},[84,76378,478],{"class":477},[84,76380,76381],{"class":104},"'ab'",[84,76383,75579],{"class":477},[84,76385,75582],{"class":328},[84,76387,76388,76390,76392,76394,76396,76398,76400,76402,76404,76406,76408,76410,76412,76414],{"class":86,"line":10141},[84,76389,74079],{"class":477},[84,76391,58573],{"class":90},[84,76393,478],{"class":477},[84,76395,1057],{"class":104},[84,76397,1439],{"class":473},[84,76399,76279],{"class":94},[84,76401,775],{"class":473},[84,76403,1057],{"class":104},[84,76405,1031],{"class":477},[84,76407,75571],{"class":90},[84,76409,478],{"class":477},[84,76411,76381],{"class":104},[84,76413,75579],{"class":477},[84,76415,76416],{"class":328},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[84,76418,76419,76421,76423,76425,76427,76429,76431,76434,76436,76438,76440,76442,76444,76446],{"class":86,"line":10146},[84,76420,74079],{"class":477},[84,76422,58573],{"class":90},[84,76424,478],{"class":477},[84,76426,1057],{"class":104},[84,76428,1439],{"class":473},[84,76430,76279],{"class":94},[84,76432,76433],{"class":473},"{2}$",[84,76435,1057],{"class":104},[84,76437,1031],{"class":477},[84,76439,75571],{"class":90},[84,76441,478],{"class":477},[84,76443,76381],{"class":104},[84,76445,75579],{"class":477},[84,76447,76448],{"class":328},"\u002F\u002Ftrue   可以选两个\n",[84,76450,76451,76453,76455,76457,76459,76461,76464,76466,76468,76470,76472,76474,76477,76479],{"class":86,"line":10152},[84,76452,74079],{"class":477},[84,76454,58573],{"class":90},[84,76456,478],{"class":477},[84,76458,1057],{"class":104},[84,76460,1439],{"class":473},[84,76462,76463],{"class":94},"[a-z]",[84,76465,775],{"class":473},[84,76467,1057],{"class":104},[84,76469,1031],{"class":477},[84,76471,75571],{"class":90},[84,76473,478],{"class":477},[84,76475,76476],{"class":104},"'p'",[84,76478,75635],{"class":477},[84,76480,76481],{"class":328},"\u002F\u002Ftrue   依然只能选一个\n",[84,76483,76484,76486,76488,76490,76492,76494,76497,76499,76501,76503,76505,76507,76509,76511],{"class":86,"line":10173},[84,76485,74079],{"class":477},[84,76487,58573],{"class":90},[84,76489,478],{"class":477},[84,76491,1057],{"class":104},[84,76493,1439],{"class":473},[84,76495,76496],{"class":94},"[A-Z]",[84,76498,775],{"class":473},[84,76500,1057],{"class":104},[84,76502,1031],{"class":477},[84,76504,75571],{"class":90},[84,76506,478],{"class":477},[84,76508,76476],{"class":104},[84,76510,75635],{"class":477},[84,76512,75705],{"class":328},[84,76514,76515,76517,76519,76521,76523,76525,76527,76529,76531,76533,76535,76537,76540,76542],{"class":86,"line":10179},[84,76516,74079],{"class":477},[84,76518,58573],{"class":90},[84,76520,478],{"class":477},[84,76522,1057],{"class":104},[84,76524,1439],{"class":473},[84,76526,76496],{"class":94},[84,76528,775],{"class":473},[84,76530,1057],{"class":104},[84,76532,1031],{"class":477},[84,76534,75571],{"class":90},[84,76536,478],{"class":477},[84,76538,76539],{"class":104},"'P'",[84,76541,75635],{"class":477},[84,76543,75582],{"class":328},[84,76545,76546,76548,76550,76552,76554,76556,76559,76561,76563,76565,76567,76569,76572,76574],{"class":86,"line":10193},[84,76547,74079],{"class":477},[84,76549,58573],{"class":90},[84,76551,478],{"class":477},[84,76553,1057],{"class":104},[84,76555,1439],{"class":473},[84,76557,76558],{"class":94},"[0-9]",[84,76560,775],{"class":473},[84,76562,1057],{"class":104},[84,76564,1031],{"class":477},[84,76566,75571],{"class":90},[84,76568,478],{"class":477},[84,76570,76571],{"class":104},"'0'",[84,76573,75635],{"class":477},[84,76575,75582],{"class":328},[84,76577,76578,76580,76582,76584,76586,76588,76591,76593,76595,76597,76599,76601,76603,76605],{"class":86,"line":10199},[84,76579,74079],{"class":477},[84,76581,58573],{"class":90},[84,76583,478],{"class":477},[84,76585,1057],{"class":104},[84,76587,1439],{"class":473},[84,76589,76590],{"class":94},"[a-zA-Z0-9]",[84,76592,775],{"class":473},[84,76594,1057],{"class":104},[84,76596,1031],{"class":477},[84,76598,75571],{"class":90},[84,76600,478],{"class":477},[84,76602,76476],{"class":104},[84,76604,75579],{"class":477},[84,76606,75582],{"class":328},[84,76608,76609,76611,76613],{"class":86,"line":10226},[84,76610,52744],{"class":477},[84,76612,52140],{"class":51627},[84,76614,51634],{"class":477},[84,76616,76617,76619,76621],{"class":86,"line":10235},[84,76618,52112],{"class":477},[84,76620,52127],{"class":51627},[84,76622,51634],{"class":477},[84,76624,76625],{"class":86,"line":10241},[84,76626,2729],{"emptyLinePlaceholder":403},[84,76628,76629,76631,76633],{"class":86,"line":10249},[84,76630,52112],{"class":477},[84,76632,50962],{"class":51627},[84,76634,51634],{"class":477},[22327,76636,76638],{"id":76637},"_3624-修饰符","3.6.2.4 修饰符",[35,76640,76641],{},[64,76642],{"alt":66,"src":76643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[35,76645,76646],{},"replace是个方法，使用的时候一定不要忘记括号()",[35,76648,76649],{},[64,76650],{"alt":66,"src":76651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[75,76653,76655],{"className":50960,"code":76654,"language":50962,"meta":66,"style":66},"\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",[81,76656,76657,76667,76681,76689,76703,76723,76735,76743,76751,76759,76791,76822,76827,76859,76870,76903,76912,76920,76928],{"__ignoreMap":66},[84,76658,76659,76661,76663,76665],{"class":86,"line":87},[84,76660,51624],{"class":477},[84,76662,51628],{"class":51627},[84,76664,51631],{"class":90},[84,76666,51634],{"class":477},[84,76668,76669,76671,76673,76675,76677,76679],{"class":86,"line":98},[84,76670,1383],{"class":477},[84,76672,50962],{"class":51627},[84,76674,51643],{"class":90},[84,76676,523],{"class":477},[84,76678,51648],{"class":104},[84,76680,51634],{"class":477},[84,76682,76683,76685,76687],{"class":86,"line":70},[84,76684,1383],{"class":477},[84,76686,51661],{"class":51627},[84,76688,51634],{"class":477},[84,76690,76691,76693,76695,76697,76699,76701],{"class":86,"line":120},[84,76692,52471],{"class":477},[84,76694,51671],{"class":51627},[84,76696,51674],{"class":90},[84,76698,523],{"class":477},[84,76700,51679],{"class":104},[84,76702,51634],{"class":477},[84,76704,76705,76707,76709,76711,76713,76715,76717,76719,76721],{"class":86,"line":131},[84,76706,52471],{"class":477},[84,76708,51671],{"class":51627},[84,76710,15249],{"class":90},[84,76712,523],{"class":477},[84,76714,51718],{"class":104},[84,76716,51698],{"class":90},[84,76718,523],{"class":477},[84,76720,51725],{"class":104},[84,76722,51634],{"class":477},[84,76724,76725,76727,76729,76731,76733],{"class":86,"line":145},[84,76726,52471],{"class":477},[84,76728,51734],{"class":51627},[84,76730,51737],{"class":477},[84,76732,51734],{"class":51627},[84,76734,51634],{"class":477},[84,76736,76737,76739,76741],{"class":86,"line":156},[84,76738,52112],{"class":477},[84,76740,51661],{"class":51627},[84,76742,51634],{"class":477},[84,76744,76745,76747,76749],{"class":86,"line":164},[84,76746,1383],{"class":477},[84,76748,52127],{"class":51627},[84,76750,51634],{"class":477},[84,76752,76753,76755,76757],{"class":86,"line":175},[84,76754,52471],{"class":477},[84,76756,52140],{"class":51627},[84,76758,51634],{"class":477},[84,76760,76761,76763,76765,76767,76769,76771,76774,76776,76778,76780,76782,76784,76787,76789],{"class":86,"line":185},[84,76762,74079],{"class":477},[84,76764,58573],{"class":90},[84,76766,478],{"class":477},[84,76768,1057],{"class":104},[84,76770,1439],{"class":473},[84,76772,76773],{"class":48304},"java",[84,76775,775],{"class":473},[84,76777,1057],{"class":104},[84,76779,1031],{"class":477},[84,76781,75571],{"class":90},[84,76783,478],{"class":477},[84,76785,76786],{"class":104},"'java'",[84,76788,76081],{"class":477},[84,76790,75582],{"class":328},[84,76792,76793,76795,76797,76799,76801,76803,76805,76807,76809,76811,76813,76815,76818,76820],{"class":86,"line":195},[84,76794,74079],{"class":477},[84,76796,58573],{"class":90},[84,76798,478],{"class":477},[84,76800,1057],{"class":104},[84,76802,1439],{"class":473},[84,76804,76773],{"class":48304},[84,76806,775],{"class":473},[84,76808,1057],{"class":104},[84,76810,1031],{"class":477},[84,76812,75571],{"class":90},[84,76814,478],{"class":477},[84,76816,76817],{"class":104},"'Java'",[84,76819,76081],{"class":477},[84,76821,75705],{"class":328},[84,76823,76824],{"class":86,"line":206},[84,76825,76826],{"class":328},"    \u002F\u002F 不区分大小写、\n",[84,76828,76829,76831,76833,76835,76837,76839,76841,76843,76845,76847,76849,76851,76853,76855,76857],{"class":86,"line":217},[84,76830,74079],{"class":477},[84,76832,58573],{"class":90},[84,76834,478],{"class":477},[84,76836,1057],{"class":104},[84,76838,1439],{"class":473},[84,76840,76773],{"class":48304},[84,76842,775],{"class":473},[84,76844,1057],{"class":104},[84,76846,914],{"class":473},[84,76848,1031],{"class":477},[84,76850,75571],{"class":90},[84,76852,478],{"class":477},[84,76854,76817],{"class":104},[84,76856,76081],{"class":477},[84,76858,75582],{"class":328},[84,76860,76861,76863,76865,76867],{"class":86,"line":227},[84,76862,11550],{"class":473},[84,76864,74245],{"class":94},[84,76866,13893],{"class":473},[84,76868,76869],{"class":104}," 'java是一门编程语言，学完java工资很高'\n",[84,76871,76872,76874,76877,76879,76882,76885,76887,76889,76891,76893,76896,76898,76901],{"class":86,"line":238},[84,76873,11550],{"class":473},[84,76875,76876],{"class":94}," result",[84,76878,13893],{"class":473},[84,76880,76881],{"class":477}," str.",[84,76883,76884],{"class":90},"replace",[84,76886,478],{"class":477},[84,76888,1057],{"class":104},[84,76890,76773],{"class":48304},[84,76892,1057],{"class":104},[84,76894,76895],{"class":473},"ig",[84,76897,12764],{"class":477},[84,76899,76900],{"class":104},"'前端'",[84,76902,484],{"class":477},[84,76904,76905,76907,76909],{"class":86,"line":249},[84,76906,74079],{"class":477},[84,76908,58573],{"class":90},[84,76910,76911],{"class":477},"(result)\n",[84,76913,76914,76916,76918],{"class":86,"line":262},[84,76915,52744],{"class":477},[84,76917,52140],{"class":51627},[84,76919,51634],{"class":477},[84,76921,76922,76924,76926],{"class":86,"line":273},[84,76923,52112],{"class":477},[84,76925,52127],{"class":51627},[84,76927,51634],{"class":477},[84,76929,76930,76932,76934],{"class":86,"line":283},[84,76931,52112],{"class":477},[84,76933,50962],{"class":51627},[84,76935,51634],{"class":477},[389,76937,76938],{},"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":66,"searchDepth":98,"depth":98,"links":76940},[76941,76951,76963,76980,76987,76995],{"id":53687,"depth":98,"text":53688,"children":76942},[76943,76944,76945,76946,76947,76948,76949,76950],{"id":53691,"depth":70,"text":53692},{"id":53724,"depth":70,"text":53725},{"id":53763,"depth":70,"text":53764},{"id":53921,"depth":70,"text":53922},{"id":53969,"depth":70,"text":53970},{"id":54105,"depth":70,"text":54106},{"id":54427,"depth":70,"text":54428},{"id":57415,"depth":70,"text":57416},{"id":57443,"depth":98,"text":57444,"children":76952},[76953,76954,76955,76956,76957,76958,76959,76960,76961,76962],{"id":57447,"depth":70,"text":57448},{"id":57470,"depth":70,"text":57471},{"id":58385,"depth":70,"text":58386},{"id":59075,"depth":70,"text":59076},{"id":59357,"depth":70,"text":59358},{"id":63518,"depth":70,"text":63519},{"id":63688,"depth":70,"text":63689},{"id":63816,"depth":70,"text":63817},{"id":63841,"depth":70,"text":63842},{"id":65230,"depth":70,"text":65231},{"id":66383,"depth":98,"text":66384,"children":76964},[76965,76966,76967,76968,76969,76970,76971,76972,76973,76974,76975,76976,76977,76978,76979],{"id":66387,"depth":70,"text":66388},{"id":67041,"depth":70,"text":67042},{"id":68736,"depth":70,"text":68737},{"id":68777,"depth":70,"text":68778},{"id":68819,"depth":70,"text":68820},{"id":68833,"depth":70,"text":68834},{"id":68882,"depth":70,"text":68883},{"id":68894,"depth":70,"text":68895},{"id":68909,"depth":70,"text":68910},{"id":68945,"depth":70,"text":68946},{"id":69026,"depth":70,"text":69027},{"id":69154,"depth":70,"text":69155},{"id":69166,"depth":70,"text":69167},{"id":69185,"depth":70,"text":69186},{"id":71296,"depth":70,"text":71297},{"id":71315,"depth":98,"text":71316,"children":76981},[76982,76983,76984,76985,76986],{"id":71336,"depth":70,"text":71337},{"id":71356,"depth":70,"text":71357},{"id":71405,"depth":70,"text":71406},{"id":71530,"depth":70,"text":71531},{"id":71711,"depth":70,"text":71712},{"id":71729,"depth":98,"text":71730,"children":76988},[76989,76990,76991,76992,76993,76994],{"id":71744,"depth":70,"text":71745},{"id":71803,"depth":70,"text":71804},{"id":71827,"depth":70,"text":71828},{"id":72147,"depth":70,"text":72148},{"id":72179,"depth":70,"text":72180},{"id":72202,"depth":70,"text":72203},{"id":75270,"depth":98,"text":75271,"children":76996},[76997,76998],{"id":75304,"depth":70,"text":75305},{"id":75343,"depth":70,"text":75344},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53659,"description":400},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77005,"title":77006,"body":77007,"description":400,"extension":401,"meta":93144,"navigation":403,"path":93145,"seo":93146,"stem":93147,"__hash__":93148},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77008,"toc":93080},[77009,77012,77015,77019,77023,77028,77033,77044,77048,77053,77056,77060,77063,77068,77072,77076,77079,77084,77087,77091,77094,77102,77105,77109,77114,77119,77122,77126,77131,77136,77139,77143,77148,77151,77156,77159,77164,77167,77172,77177,77180,77183,77187,77192,77197,77200,77204,77208,77211,77214,77217,77221,77225,77230,77235,77238,77242,77247,77252,77255,77258,77261,77264,77267,77270,77273,77276,77279,77284,77288,77293,77298,77301,77304,77307,77310,77313,77316,77319,77322,77326,77330,77333,77336,77339,77344,77346,77349,77352,77355,77358,77361,77364,77367,77370,77373,77376,77379,77382,77385,77390,77395,77400,77403,77407,77410,77415,77419,77421,77432,77437,77538,77541,77544,77547,77550,77553,77556,77559,77562,77564,77567,77570,77573,77576,77579,77581,77584,77587,77590,77593,77596,77599,77601,77604,77606,77608,77611,77615,77619,77622,77625,77628,77631,77634,77637,77640,77643,77646,77651,77771,77774,77777,77782,77785,77788,77791,77794,77799,77802,77805,77808,77811,77816,77819,77919,77984,78058,78062,78065,78068,78072,78075,78089,78118,78121,78124,78127,78130,78133,78136,78139,78141,78144,78147,78150,78153,78157,78162,78166,78171,78246,78249,78432,78435,78438,78441,78444,78447,78449,78452,78455,78458,78461,78464,78467,78469,78473,78476,78481,78484,78487,78490,78493,78495,78500,78503,78506,78509,78512,78514,78519,78522,78525,78527,78529,78532,78536,78539,78542,78547,78550,78553,78556,78606,78611,78615,78620,78623,78692,78695,78704,78708,78713,78716,78719,78727,78730,78747,80549,80553,80557,80562,80565,80569,80575,80581,80733,80738,80743,80746,80749,80752,80755,80758,80761,80764,80767,80770,80773,80776,80779,80784,80788,80791,80802,80806,80811,80814,80817,80820,80823,80826,80828,80831,80834,80837,80840,80842,80859,80862,80866,80869,80874,80879,80882,80885,80889,80892,80895,80904,80907,80911,80914,80919,80924,80991,80995,80998,81001,81006,81011,81097,81102,81106,81109,81112,81127,81130,81135,81139,81144,81253,81256,81267,81417,81421,81426,81535,81539,81544,81549,81554,81557,81564,81584,81620,81784,81789,81792,81797,81804,81807,81810,81813,81872,81928,81984,81988,81993,82308,82311,82315,82318,82323,82432,82437,82441,82446,82450,82521,82525,82527,82530,82533,82571,82847,82851,82868,82934,82968,82972,82975,82980,83009,83016,83025,83030,83045,83050,83059,83062,83199,83203,83265,83269,83274,83519,83523,83528,83531,83534,83537,83540,83544,83549,85130,85134,85138,85144,85147,85152,85156,85159,85164,85167,85178,85182,85187,85191,85196,85201,85204,85209,85213,85217,85220,85225,85230,85233,85236,85239,85361,85366,85468,85471,85474,85478,85483,85655,85660,85664,85667,85672,85738,85743,85746,85877,85880,85885,85888,85891,85982,85987,85990,85993,85996,85999,86004,86009,86012,86017,86022,86027,86031,86034,86037,86042,86047,86052,86057,86111,86114,86117,86122,86125,86128,86133,86138,86143,86147,86152,86166,86171,86174,86179,86183,86188,86193,86198,86203,86208,86213,86218,86223,86226,86230,86235,86238,86241,86244,86249,86254,86257,86260,86264,86267,86270,86275,86280,86285,86290,86293,86298,86303,86364,86369,86372,86377,87618,87623,87627,87631,87636,87639,87644,87649,87652,87657,87659,87664,87668,87671,87674,87685,87689,87694,87699,87754,87759,87764,87769,87980,87985,87989,87994,87997,87999,88002,88005,88452,88457,88464,88470,88473,88476,88740,88745,88749,89014,89019,89023,89028,89033,89038,89043,89374,89377,89382,89387,89390,89394,89398,89403,89408,89413,89418,89423,89428,89432,89435,89440,89445,89448,89522,89527,89532,89537,89539,89542,89912,89917,89922,89927,89930,89933,90035,90040,90045,90148,90152,90157,90161,90165,90170,90175,90178,90183,90186,90189,90582,90587,90590,90593,90596,90599,91119,91123,91128,91133,91138,91141,91146,91149,91152,91534,91539,91541,91543,91546,91549,92061,92065,92126,92129,92132,92135,92139,92142,92147,92152,93077],[10,77010,77006],{"id":77011},"_4js进阶",[35,77013,77014],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77016,77018],{"id":77017},"_41-作用域","4.1 作用域",[23,77020,77022],{"id":77021},"_411-局部作用域","4.1.1 局部作用域",[35,77024,77025],{},[64,77026],{"alt":66,"src":77027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[35,77029,77030],{},[64,77031],{"alt":66,"src":77032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1480,77034,77035,77038,77041],{},[31,77036,77037],{},"函数作用域在函数内部",[31,77039,77040],{},"块级作用域在{}",[31,77042,77043],{},"对象的那个{}不是作用域，不是块作用域",[23,77045,77047],{"id":77046},"_412-全局作用域","4.1.2 全局作用域",[35,77049,77050],{},[64,77051],{"alt":66,"src":77052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[35,77054,77055],{},"window.a=10不要这样写",[23,77057,77059],{"id":77058},"_413-作用域链","4.1.3 作用域链",[35,77061,77062],{},"变量查找机制",[35,77064,77065],{},[64,77066],{"alt":66,"src":77067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77069,77071],{"id":77070},"_42-垃圾回收机制","4.2 垃圾回收机制",[23,77073,77075],{"id":77074},"_421-大体介绍","4.2.1 大体介绍",[35,77077,77078],{},"垃圾回收机制(Garbage Collection) 简称 GC",[35,77080,77081],{},[64,77082],{"alt":66,"src":77083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[35,77085,77086],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[23,77088,77090],{"id":77089},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[35,77092,77093],{},"堆栈空间分配区别：",[28,77095,77096,77099],{},[31,77097,77098],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[31,77100,77101],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[35,77103,77104],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22327,77106,77108],{"id":77107},"_4221-引用计数","4.2.2.1 引用计数",[35,77110,77111],{},[64,77112],{"alt":66,"src":77113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[35,77115,77116],{},[64,77117],{"alt":66,"src":77118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[35,77120,77121],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22327,77123,77125],{"id":77124},"_4222-标记清除法","4.2.2.2 标记清除法",[35,77127,77128],{},[64,77129],{"alt":66,"src":77130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[35,77132,77133],{},[64,77134],{"alt":66,"src":77135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[35,77137,77138],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77140,77142],{"id":77141},"_43-闭包","4.3 闭包",[35,77144,77145],{},[64,77146],{"alt":66,"src":77147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[35,77149,77150],{},"闭包：内层函数+外层函数的变量",[35,77152,77153],{},[64,77154],{"alt":66,"src":77155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[35,77157,77158],{},"closure就是闭包",[35,77160,77161],{},[64,77162],{"alt":66,"src":77163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[35,77165,77166],{},"内层函数必须包含外层函数的变量才是闭包",[35,77168,77169],{},[64,77170],{"alt":66,"src":77171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[35,77173,77174],{},[64,77175],{"alt":66,"src":77176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[35,77178,77179],{},"闭包可能会引起内存泄漏",[35,77181,77182],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77184,77186],{"id":77185},"_44-变量提升","4.4 变量提升",[35,77188,77189],{},[64,77190],{"alt":66,"src":77191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[35,77193,77194],{},[64,77195],{"alt":66,"src":77196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[35,77198,77199],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77201,77203],{"id":77202},"_45-函数进阶","4.5 函数进阶",[23,77205,77207],{"id":77206},"_451-函数提升","4.5.1 函数提升",[35,77209,77210],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[35,77212,77213],{},"只提升函数声明，不提升函数调用",[52140,77215,77216],{},"\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",[23,77218,77220],{"id":77219},"_452-函数参数","4.5.2 函数参数",[22327,77222,77224],{"id":77223},"_4521-动态参数","4.5.2.1 动态参数",[35,77226,77227],{},[64,77228],{"alt":66,"src":77229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[35,77231,77232],{},[64,77233],{"alt":66,"src":77234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[35,77236,77237],{},"箭头函数里边没有arguments",[22327,77239,77241],{"id":77240},"_4522-剩余参数","4.5.2.2 剩余参数",[35,77243,77244],{},[64,77245],{"alt":66,"src":77246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[35,77248,77249],{},[64,77250],{"alt":66,"src":77251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[35,77253,77254],{},"剩余参数使用的时候不需要写...",[35,77256,77257],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[35,77259,77260],{},"  function getSum(a,b,...arr) {",[35,77262,77263],{},"  console.log(11)",[35,77265,77266],{},"  }",[35,77268,77269],{},"  getSum(1,2,3,4)",[35,77271,77272],{},"  将1传给a，2传给b，剩下的传给剩余参数",[35,77274,77275],{},"  getSum(1,2)",[35,77277,77278],{},"  将1传给a，2传给b，剩余参数为一个空数组",[35,77280,77281],{},[64,77282],{"alt":66,"src":77283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22327,77285,77287],{"id":77286},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[35,77289,77290],{},[64,77291],{"alt":66,"src":77292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[35,77294,77295],{},[64,77296],{"alt":66,"src":77297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[35,77299,77300],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[35,77302,77303],{},"展开运算符可以用于数组之间的合并：",[35,77305,77306],{},"const arr1 = [1, 2, 3]",[35,77308,77309],{},"const arr2 = [3, 4, 5]",[35,77311,77312],{},"const arr = [...arr1, ...arr2]",[35,77314,77315],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[35,77317,77318],{},"剩余参数：函数参数使用，得到真数组",[35,77320,77321],{},"展开运算符：数组中使用，数组展开",[23,77323,77325],{"id":77324},"_453-箭头函数","4.5.3 箭头函数",[22327,77327,77329],{"id":77328},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[35,77331,77332],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[35,77334,77335],{},"它不是万能的！！！",[35,77337,77338],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[35,77340,77341],{},[64,77342],{"alt":66,"src":77343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[35,77345,507],{},[35,77347,77348],{},"① 只有一个形参的时候，可以省略小括号：",[35,77350,77351],{},"const fn=x=>{console.log(x)}",[35,77353,77354],{},"② 只有一行代码时可以省略大括号：",[35,77356,77357],{},"const fn=x=>console.log(11)",[35,77359,77360],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[35,77362,77363],{},"const fn=x=>x+x",[35,77365,77366],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[35,77368,77369],{},"⑤ 阻止表单默认提交：",[35,77371,77372],{},"const form = document.querySelector('form')",[35,77374,77375],{},"form.addEventListener('click', ev => ev.preventDefault())",[35,77377,77378],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[35,77380,77381],{},"const fn=uname=>({uname:uname})",[35,77383,77384],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[35,77386,77387],{},[64,77388],{"alt":66,"src":77389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[35,77391,77392],{},[64,77393],{"alt":66,"src":77394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[35,77396,77397],{},[64,77398],{"alt":66,"src":77399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[35,77401,77402],{},"一定不要忘记用()，有()就理解为自带return",[22327,77404,77406],{"id":77405},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[35,77408,77409],{},"箭头函数是没有动态参数的arguments",[35,77411,77412],{},[64,77413],{"alt":66,"src":77414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22327,77416,77418],{"id":77417},"_4533-箭头函数this","4.5.3.3 箭头函数this",[35,77420,11661],{},[28,77422,77423,77426,77429],{},[31,77424,77425],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[31,77427,77428],{},"事件回调函数使用箭头函数时，this 为全局的 window",[31,77430,77431],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[35,77433,77434],{},[64,77435],{"alt":66,"src":77436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[75,77438,77440],{"className":53394,"code":77439,"language":53396,"meta":66,"style":66},"  \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",[81,77441,77442,77450,77455,77460,77465,77470,77475,77479,77484,77488,77492,77497,77502,77507,77511,77515,77520,77525,77530],{"__ignoreMap":66},[84,77443,77444,77446,77448],{"class":86,"line":87},[84,77445,52471],{"class":477},[84,77447,52140],{"class":51627},[84,77449,51634],{"class":477},[84,77451,77452],{"class":86,"line":98},[84,77453,77454],{"class":477},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[84,77456,77457],{"class":86,"line":70},[84,77458,77459],{"class":477},"    console.log(this) \u002F\u002F指向window\n",[84,77461,77462],{"class":86,"line":120},[84,77463,77464],{"class":477},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[84,77466,77467],{"class":86,"line":131},[84,77468,77469],{"class":477},"    function fn() {\n",[84,77471,77472],{"class":86,"line":145},[84,77473,77474],{"class":477},"      console.log(this)  \u002F\u002F指向window\n",[84,77476,77477],{"class":86,"line":156},[84,77478,2516],{"class":477},[84,77480,77481],{"class":86,"line":164},[84,77482,77483],{"class":477},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[84,77485,77486],{"class":86,"line":175},[84,77487,2729],{"emptyLinePlaceholder":403},[84,77489,77490],{"class":86,"line":185},[84,77491,71849],{"class":477},[84,77493,77494],{"class":86,"line":195},[84,77495,77496],{"class":477},"      name: 'andy',\n",[84,77498,77499],{"class":86,"line":206},[84,77500,77501],{"class":477},"      sayHai: function () {\n",[84,77503,77504],{"class":86,"line":217},[84,77505,77506],{"class":477},"        console.log(this)\n",[84,77508,77509],{"class":86,"line":227},[84,77510,52725],{"class":477},[84,77512,77513],{"class":86,"line":238},[84,77514,2516],{"class":477},[84,77516,77517],{"class":86,"line":249},[84,77518,77519],{"class":477},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[84,77521,77522],{"class":86,"line":262},[84,77523,77524],{"class":477},"    \u002F\u002F 2.箭头函数的this\n",[84,77526,77527],{"class":86,"line":273},[84,77528,77529],{"class":477},"    const fn = () => console.log(this)\n",[84,77531,77532,77534,77536],{"class":86,"line":283},[84,77533,52744],{"class":477},[84,77535,52140],{"class":51627},[84,77537,51634],{"class":477},[35,77539,77540],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[35,77542,77543],{},"const fn = () => console.log(this)",[35,77545,77546],{},"fn() \u002F\u002F指向window",[35,77548,77549],{},"\u002F\u002F 3.对象方法箭头函数 this",[35,77551,77552],{},"①",[35,77554,77555],{},"const obj = {",[35,77557,77558],{},"uname: 'pink老师',",[35,77560,77561],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[35,77563,1419],{},[35,77565,77566],{},"调用对象里边的函数",[35,77568,77569],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[35,77571,77572],{},"obj.sayHai()",[35,77574,77575],{},"②",[35,77577,77578],{},"const obj1 = {",[35,77580,77558],{},[35,77582,77583],{},"sayHai: function () {",[35,77585,77586],{},"let i = 10",[35,77588,77589],{},"const count = () => {",[35,77591,77592],{},"console.log(this)",[35,77594,77595],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[35,77597,77598],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[35,77600,1419],{},[35,77602,77603],{},"count()",[35,77605,1419],{},[35,77607,1419],{},[35,77609,77610],{},"obj1.sayHai()",[14,77612,77614],{"id":77613},"_46-解构赋值","4.6 解构赋值",[23,77616,77618],{"id":77617},"_461-数组解构","4.6.1 数组解构",[35,77620,77621],{},"以前要是使用数组中的值的话：",[35,77623,77624],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[35,77626,77627],{},"const arr=[100,60,80]",[35,77629,77630],{},"const max=arr[0]",[35,77632,77633],{},"const min=arr[1]",[35,77635,77636],{},"const avg=arr[2]",[35,77638,77639],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[35,77641,77642],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[35,77644,77645],{},"这个写法就类似于上边的那种用很多const的方法",[35,77647,77648],{},[64,77649],{"alt":66,"src":77650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[75,77652,77654],{"className":50960,"code":77653,"language":50962,"meta":66,"style":66},"①变量之间交换值:\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",[81,77655,77656,77661,77666,77671,77676,77681,77685,77689,77694,77698,77703,77708,77712,77717,77722,77733,77743,77748,77753,77758,77762,77766],{"__ignoreMap":66},[84,77657,77658],{"class":86,"line":87},[84,77659,77660],{"class":477},"①变量之间交换值:\n",[84,77662,77663],{"class":86,"line":98},[84,77664,77665],{"class":477},"let a=1\n",[84,77667,77668],{"class":86,"line":70},[84,77669,77670],{"class":477},"let b=2;\n",[84,77672,77673],{"class":86,"line":120},[84,77674,77675],{"class":477},"必须加这行代码，不然就会报错\n",[84,77677,77678],{"class":86,"line":131},[84,77679,77680],{"class":477},"[b,a]=[a,b]\n",[84,77682,77683],{"class":86,"line":145},[84,77684,2729],{"emptyLinePlaceholder":403},[84,77686,77687],{"class":86,"line":156},[84,77688,2729],{"emptyLinePlaceholder":403},[84,77690,77691],{"class":86,"line":164},[84,77692,77693],{"class":477},"可以写成下面的方式：\n",[84,77695,77696],{"class":86,"line":175},[84,77697,77665],{"class":477},[84,77699,77700],{"class":86,"line":185},[84,77701,77702],{"class":477},"let b=2\n",[84,77704,77705],{"class":86,"line":195},[84,77706,77707],{"class":477},";[b,a]=[a,b]\n",[84,77709,77710],{"class":86,"line":206},[84,77711,2729],{"emptyLinePlaceholder":403},[84,77713,77714],{"class":86,"line":217},[84,77715,77716],{"class":477},"②排序\n",[84,77718,77719],{"class":86,"line":227},[84,77720,77721],{"class":477},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[84,77723,77724,77727,77730],{"class":86,"line":238},[84,77725,77726],{"class":477},"for (let i = 0; i ",[84,77728,1383],{"class":77729},"s7hpK",[84,77731,77732],{"class":477}," arr1.length; i++) {\n",[84,77734,77735,77738,77740],{"class":86,"line":249},[84,77736,77737],{"class":477},"   for (let j = 0; j ",[84,77739,1383],{"class":77729},[84,77741,77742],{"class":477}," arr1.length - 1; j++) {\n",[84,77744,77745],{"class":86,"line":262},[84,77746,77747],{"class":477},"      if (arr1[j] > arr1[j + 1]) {\n",[84,77749,77750],{"class":86,"line":273},[84,77751,77752],{"class":477},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[84,77754,77755],{"class":86,"line":283},[84,77756,77757],{"class":477},"       }\n",[84,77759,77760],{"class":86,"line":294},[84,77761,4638],{"class":477},[84,77763,77764],{"class":86,"line":2028},[84,77765,1905],{"class":477},[84,77767,77768],{"class":86,"line":2057},[84,77769,77770],{"class":477},"console.log(arr1)\n",[35,77772,77773],{},"数组解构的细节：",[35,77775,77776],{},"①变量多，单元值少",[35,77778,77779],{},[64,77780],{"alt":66,"src":77781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[35,77783,77784],{},"防止出现undefined的方法：",[35,77786,77787],{},"const [a=0,b=0] =[1]",[35,77789,77790],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[35,77792,77793],{},"②变量少，单元值多",[35,77795,77796],{},[64,77797],{"alt":66,"src":77798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[35,77800,77801],{},"此时可以使用剩余参数来接收多余的值",[35,77803,77804],{},"const [a,b,...c]=[1,2,3,4]",[35,77806,77807],{},"console.log(c) 输出[3,4]",[35,77809,77810],{},"③可以按需导入，忽略某些返回值",[35,77812,77813],{},[64,77814],{"alt":66,"src":77815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[35,77817,77818],{},"④支持多维数组的结构",[75,77820,77824],{"className":77821,"code":77822,"language":77823,"meta":66,"style":66},"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",[81,77825,77826,77854,77870,77885,77900],{"__ignoreMap":66},[84,77827,77828,77830,77832,77834,77836,77838,77840,77842,77845,77847,77849,77851],{"class":86,"line":87},[84,77829,7121],{"class":473},[84,77831,52160],{"class":477},[84,77833,523],{"class":473},[84,77835,52553],{"class":477},[84,77837,692],{"class":94},[84,77839,12764],{"class":477},[84,77841,553],{"class":94},[84,77843,77844],{"class":477},", [",[84,77846,547],{"class":94},[84,77848,12764],{"class":477},[84,77850,140],{"class":94},[84,77852,77853],{"class":477},"]]\n",[84,77855,77856,77859,77861,77863,77865,77867],{"class":86,"line":98},[84,77857,77858],{"class":477},"console.",[84,77860,58573],{"class":90},[84,77862,4180],{"class":477},[84,77864,666],{"class":94},[84,77866,4545],{"class":477},[84,77868,77869],{"class":328},"  \u002F\u002F1\n",[84,77871,77872,77874,77876,77878,77880,77882],{"class":86,"line":70},[84,77873,77858],{"class":477},[84,77875,58573],{"class":90},[84,77877,4180],{"class":477},[84,77879,692],{"class":94},[84,77881,4545],{"class":477},[84,77883,77884],{"class":328},"  \u002F\u002F2\n",[84,77886,77887,77889,77891,77893,77895,77897],{"class":86,"line":120},[84,77888,77858],{"class":477},[84,77890,58573],{"class":90},[84,77892,4180],{"class":477},[84,77894,553],{"class":94},[84,77896,4545],{"class":477},[84,77898,77899],{"class":328},"  \u002F\u002F[3,4]\n",[84,77901,77902,77904,77906,77908,77910,77912,77914,77916],{"class":86,"line":131},[84,77903,77858],{"class":477},[84,77905,58573],{"class":90},[84,77907,4180],{"class":477},[84,77909,553],{"class":94},[84,77911,5230],{"class":477},[84,77913,666],{"class":94},[84,77915,4545],{"class":477},[84,77917,77918],{"class":328},"  \u002F\u002F3\n",[75,77920,77922],{"className":77821,"code":77921,"language":77823,"meta":66,"style":66},"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",[81,77923,77924,77951,77962,77973],{"__ignoreMap":66},[84,77925,77926,77928,77931,77933,77935,77937,77939,77941,77943,77945,77947,77949],{"class":86,"line":87},[84,77927,7121],{"class":473},[84,77929,77930],{"class":477}," [a, b, c] ",[84,77932,523],{"class":473},[84,77934,52553],{"class":477},[84,77936,692],{"class":94},[84,77938,12764],{"class":477},[84,77940,553],{"class":94},[84,77942,77844],{"class":477},[84,77944,547],{"class":94},[84,77946,12764],{"class":477},[84,77948,140],{"class":94},[84,77950,77853],{"class":477},[84,77952,77953,77955,77957,77960],{"class":86,"line":98},[84,77954,77858],{"class":477},[84,77956,58573],{"class":90},[84,77958,77959],{"class":477},"(a)",[84,77961,77869],{"class":328},[84,77963,77964,77966,77968,77971],{"class":86,"line":70},[84,77965,77858],{"class":477},[84,77967,58573],{"class":90},[84,77969,77970],{"class":477},"(b)",[84,77972,77884],{"class":328},[84,77974,77975,77977,77979,77982],{"class":86,"line":120},[84,77976,77858],{"class":477},[84,77978,58573],{"class":90},[84,77980,77981],{"class":477},"(c)",[84,77983,77899],{"class":328},[75,77985,77987],{"className":77821,"code":77986,"language":77823,"meta":66,"style":66},"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",[81,77988,77989,78016,78026,78036,78046],{"__ignoreMap":66},[84,77990,77991,77993,77996,77998,78000,78002,78004,78006,78008,78010,78012,78014],{"class":86,"line":87},[84,77992,7121],{"class":473},[84,77994,77995],{"class":477}," [a, b, [c, d]] ",[84,77997,523],{"class":473},[84,77999,52553],{"class":477},[84,78001,692],{"class":94},[84,78003,12764],{"class":477},[84,78005,553],{"class":94},[84,78007,77844],{"class":477},[84,78009,547],{"class":94},[84,78011,12764],{"class":477},[84,78013,140],{"class":94},[84,78015,77853],{"class":477},[84,78017,78018,78020,78022,78024],{"class":86,"line":98},[84,78019,77858],{"class":477},[84,78021,58573],{"class":90},[84,78023,77959],{"class":477},[84,78025,77869],{"class":328},[84,78027,78028,78030,78032,78034],{"class":86,"line":70},[84,78029,77858],{"class":477},[84,78031,58573],{"class":90},[84,78033,77970],{"class":477},[84,78035,77884],{"class":328},[84,78037,78038,78040,78042,78044],{"class":86,"line":120},[84,78039,77858],{"class":477},[84,78041,58573],{"class":90},[84,78043,77981],{"class":477},[84,78045,77918],{"class":328},[84,78047,78048,78050,78052,78055],{"class":86,"line":131},[84,78049,77858],{"class":477},[84,78051,58573],{"class":90},[84,78053,78054],{"class":477},"(d)",[84,78056,78057],{"class":328},"  \u002F\u002F4\n",[23,78059,78061],{"id":78060},"_462-对象解构","4.6.2 对象解构",[35,78063,78064],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[35,78066,78067],{},"用的非常非常多！！！！！！",[22327,78069,78071],{"id":78070},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[35,78073,78074],{},"基本语法：",[28,78076,78077,78080,78083,78086],{},[31,78078,78079],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[31,78081,78082],{},"对象属性的值将被赋值给与属性名相同的变量",[31,78084,78085],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[31,78087,78088],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[75,78090,78092],{"className":50960,"code":78091,"language":50962,"meta":66,"style":66},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[81,78093,78094,78099,78104,78109,78113],{"__ignoreMap":66},[84,78095,78096],{"class":86,"line":87},[84,78097,78098],{"class":477},"const obj = {\n",[84,78100,78101],{"class":86,"line":98},[84,78102,78103],{"class":477},"   uname: 'pink老师',\n",[84,78105,78106],{"class":86,"line":70},[84,78107,78108],{"class":477},"   age: 18,\n",[84,78110,78111],{"class":86,"line":120},[84,78112,1905],{"class":477},[84,78114,78115],{"class":86,"line":131},[84,78116,78117],{"class":477},"const { uname, age } = obj\n",[35,78119,78120],{},"上方代码这样写等价于：",[35,78122,78123],{},"const uname等价于obj.uname",[35,78125,78126],{},"变量名可以重新改名：",[35,78128,78129],{},"const uname='red老师'",[35,78131,78132],{},"const user={",[35,78134,78135],{},"  uname:'pink老师',",[35,78137,78138],{},"  age:18",[35,78140,1419],{},[35,78142,78143],{},"const {uname,age}=user",[35,78145,78146],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[35,78148,78149],{},"const {旧变量名：新变量名}=对象",[35,78151,78152],{},"const {uname:username,age}=user",[22327,78154,78156],{"id":78155},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[35,78158,78159],{},[64,78160],{"alt":66,"src":78161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22327,78163,78165],{"id":78164},"_4623-多级对象解构","4.6.2.3 多级对象解构",[35,78167,78168],{},[64,78169],{"alt":66,"src":78170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[75,78172,78174],{"className":53394,"code":78173,"language":53396,"meta":66,"style":66},"  \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",[81,78175,78176,78184,78189,78194,78199,78204,78209,78214,78219,78224,78228,78233,78238],{"__ignoreMap":66},[84,78177,78178,78180,78182],{"class":86,"line":87},[84,78179,52471],{"class":477},[84,78181,52140],{"class":51627},[84,78183,51634],{"class":477},[84,78185,78186],{"class":86,"line":98},[84,78187,78188],{"class":477},"    const pig = {\n",[84,78190,78191],{"class":86,"line":70},[84,78192,78193],{"class":477},"      name: '佩奇',\n",[84,78195,78196],{"class":86,"line":120},[84,78197,78198],{"class":477},"      family: {\n",[84,78200,78201],{"class":86,"line":131},[84,78202,78203],{"class":477},"        mother: '猪妈妈',\n",[84,78205,78206],{"class":86,"line":145},[84,78207,78208],{"class":477},"        father: '猪爸爸',\n",[84,78210,78211],{"class":86,"line":156},[84,78212,78213],{"class":477},"        sister: '乔治'\n",[84,78215,78216],{"class":86,"line":164},[84,78217,78218],{"class":477},"      },\n",[84,78220,78221],{"class":86,"line":175},[84,78222,78223],{"class":477},"      age: 6\n",[84,78225,78226],{"class":86,"line":185},[84,78227,2516],{"class":477},[84,78229,78230],{"class":86,"line":195},[84,78231,78232],{"class":477},"    \u002F\u002F 多级对象解构\n",[84,78234,78235],{"class":86,"line":206},[84,78236,78237],{"class":477},"    const { name, family: { mother, father, sister }, age } = pig\n",[84,78239,78240,78242,78244],{"class":86,"line":217},[84,78241,52744],{"class":477},[84,78243,52140],{"class":51627},[84,78245,51634],{"class":477},[35,78247,78248],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[75,78250,78253],{"className":78251,"code":78252,"language":76773,"meta":66,"style":66},"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",[81,78254,78255,78260,78271,78283,78295,78304,78308,78319,78331,78341,78346,78350,78360,78371,78380,78384,78388,78399,78410,78419,78423,78428],{"__ignoreMap":66},[84,78256,78257],{"class":86,"line":87},[84,78258,78259],{"class":328},"    \u002F\u002F 这是后台传递过来的数据\n",[84,78261,78262,78264,78267,78269],{"class":86,"line":98},[84,78263,11550],{"class":473},[84,78265,78266],{"class":477}," msg ",[84,78268,523],{"class":473},[84,78270,15901],{"class":477},[84,78272,78273,78276,78278,78281],{"class":86,"line":70},[84,78274,78275],{"class":104},"      \"code\"",[84,78277,1332],{"class":473},[84,78279,78280],{"class":94}," 200",[84,78282,31793],{"class":477},[84,78284,78285,78288,78290,78293],{"class":86,"line":120},[84,78286,78287],{"class":104},"      \"msg\"",[84,78289,1332],{"class":473},[84,78291,78292],{"class":104}," \"获取新闻列表成功\"",[84,78294,31793],{"class":477},[84,78296,78297,78300,78302],{"class":86,"line":131},[84,78298,78299],{"class":104},"      \"data\"",[84,78301,1332],{"class":473},[84,78303,55773],{"class":477},[84,78305,78306],{"class":86,"line":145},[84,78307,2839],{"class":477},[84,78309,78310,78313,78315,78317],{"class":86,"line":156},[84,78311,78312],{"class":104},"          \"id\"",[84,78314,1332],{"class":473},[84,78316,25446],{"class":94},[84,78318,31793],{"class":477},[84,78320,78321,78324,78326,78329],{"class":86,"line":164},[84,78322,78323],{"class":104},"          \"title\"",[84,78325,1332],{"class":473},[84,78327,78328],{"class":104}," \"5G商用自己，三大运用商收入下降\"",[84,78330,31793],{"class":477},[84,78332,78333,78336,78338],{"class":86,"line":175},[84,78334,78335],{"class":104},"          \"count\"",[84,78337,1332],{"class":473},[84,78339,78340],{"class":94}," 58\n",[84,78342,78343],{"class":86,"line":185},[84,78344,78345],{"class":477},"        },\n",[84,78347,78348],{"class":86,"line":195},[84,78349,2839],{"class":477},[84,78351,78352,78354,78356,78358],{"class":86,"line":206},[84,78353,78312],{"class":104},[84,78355,1332],{"class":473},[84,78357,15084],{"class":94},[84,78359,31793],{"class":477},[84,78361,78362,78364,78366,78369],{"class":86,"line":217},[84,78363,78323],{"class":104},[84,78365,1332],{"class":473},[84,78367,78368],{"class":104}," \"国际媒体头条速览\"",[84,78370,31793],{"class":477},[84,78372,78373,78375,78377],{"class":86,"line":227},[84,78374,78335],{"class":104},[84,78376,1332],{"class":473},[84,78378,78379],{"class":94}," 56\n",[84,78381,78382],{"class":86,"line":238},[84,78383,78345],{"class":477},[84,78385,78386],{"class":86,"line":249},[84,78387,2839],{"class":477},[84,78389,78390,78392,78394,78397],{"class":86,"line":262},[84,78391,78312],{"class":104},[84,78393,1332],{"class":473},[84,78395,78396],{"class":94}," 3",[84,78398,31793],{"class":477},[84,78400,78401,78403,78405,78408],{"class":86,"line":273},[84,78402,78323],{"class":104},[84,78404,1332],{"class":473},[84,78406,78407],{"class":104}," \"乌克兰和俄罗斯持续冲突\"",[84,78409,31793],{"class":477},[84,78411,78412,78414,78416],{"class":86,"line":283},[84,78413,78335],{"class":104},[84,78415,1332],{"class":473},[84,78417,78418],{"class":94}," 1669\n",[84,78420,78421],{"class":86,"line":294},[84,78422,78345],{"class":477},[84,78424,78425],{"class":86,"line":2028},[84,78426,78427],{"class":477},"      ]\n",[84,78429,78430],{"class":86,"line":2057},[84,78431,2516],{"class":477},[35,78433,78434],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[35,78436,78437],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[35,78439,78440],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[35,78442,78443],{},"function({data}) {",[35,78445,78446],{},"console.log(data)",[35,78448,1419],{},[35,78450,78451],{},"render(msg)",[35,78453,78454],{},"实参传递给形参的时候解构了",[35,78456,78457],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[35,78459,78460],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[35,78462,78463],{},"function render({data:mydata}) {",[35,78465,78466],{},"  console.log(data)",[35,78468,1419],{},[23,78470,78472],{"id":78471},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[35,78474,78475],{},"有两种情况：一个是数组结构，一个是立即执行函数",[28,78477,78478],{},[31,78479,78480],{},"如果对一个数组进行遍历，有两种方式：",[35,78482,78483],{},"①法1",[35,78485,78486],{},"const arr=[1,2,3]",[35,78488,78489],{},"arr.map(function(item,index) {",[35,78491,78492],{},"  console.log(item)",[35,78494,52791],{},[35,78496,78497],{},[64,78498],{"alt":66,"src":78499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[35,78501,78502],{},"②法2",[35,78504,78505],{},"const str='pink'",[35,78507,78508],{},"[1,2,3].map(function(item,index) {",[35,78510,78511],{},"console.log(item)",[35,78513,52791],{},[35,78515,78516],{},[64,78517],{"alt":66,"src":78518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[35,78520,78521],{},"此时会报错",[35,78523,78524],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[35,78526,78511],{},[35,78528,52791],{},[35,78530,78531],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78533,78535],{"id":78534},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[35,78537,78538],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[35,78540,78541],{},"可以理解为加强版的for循环",[35,78543,78544],{},[64,78545],{"alt":66,"src":78546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[35,78548,78549],{},"里边不写return，不返回数组，只遍历不返回",[35,78551,78552],{},"map是返回数组",[35,78554,78555],{},"forEach主要用于遍历数组对象",[75,78557,78559],{"className":53394,"code":78558,"language":53396,"meta":66,"style":66},"  \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",[81,78560,78561,78569,78574,78579,78584,78589,78593,78598],{"__ignoreMap":66},[84,78562,78563,78565,78567],{"class":86,"line":87},[84,78564,52471],{"class":477},[84,78566,52140],{"class":51627},[84,78568,51634],{"class":477},[84,78570,78571],{"class":86,"line":98},[84,78572,78573],{"class":477},"    const arr = ['red', 'green', 'pink']\n",[84,78575,78576],{"class":86,"line":70},[84,78577,78578],{"class":477},"    const result = arr.forEach(function (item, index) {\n",[84,78580,78581],{"class":86,"line":120},[84,78582,78583],{"class":477},"      console.log(item)\n",[84,78585,78586],{"class":86,"line":131},[84,78587,78588],{"class":477},"      console.log(index)\n",[84,78590,78591],{"class":86,"line":145},[84,78592,33788],{"class":477},[84,78594,78595],{"class":86,"line":156},[84,78596,78597],{"class":477},"    console.log(result)\n",[84,78599,78600,78602,78604],{"class":86,"line":164},[84,78601,52744],{"class":477},[84,78603,52140],{"class":51627},[84,78605,51634],{"class":477},[35,78607,78608],{},[64,78609],{"alt":66,"src":78610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78612,78614],{"id":78613},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[35,78616,78617],{},[64,78618],{"alt":66,"src":78619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[35,78621,78622],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[75,78624,78626],{"className":53394,"code":78625,"language":53396,"meta":66,"style":66},"\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",[81,78627,78628,78636,78644,78649,78654,78658,78662,78667,78671,78676,78684],{"__ignoreMap":66},[84,78629,78630,78632,78634],{"class":86,"line":87},[84,78631,1383],{"class":477},[84,78633,52127],{"class":51627},[84,78635,51634],{"class":477},[84,78637,78638,78640,78642],{"class":86,"line":98},[84,78639,52471],{"class":477},[84,78641,52140],{"class":51627},[84,78643,51634],{"class":477},[84,78645,78646],{"class":86,"line":70},[84,78647,78648],{"class":477},"    const arr = [10, 20, 30]\n",[84,78650,78651],{"class":86,"line":120},[84,78652,78653],{"class":477},"    const newArr = arr.filter(function (item, index) {\n",[84,78655,78656],{"class":86,"line":131},[84,78657,78583],{"class":477},[84,78659,78660],{"class":86,"line":145},[84,78661,78588],{"class":477},[84,78663,78664],{"class":86,"line":156},[84,78665,78666],{"class":477},"      return item >= 20\n",[84,78668,78669],{"class":86,"line":164},[84,78670,33788],{"class":477},[84,78672,78673],{"class":86,"line":175},[84,78674,78675],{"class":477},"    console.log(newArr)\n",[84,78677,78678,78680,78682],{"class":86,"line":185},[84,78679,52744],{"class":477},[84,78681,52140],{"class":51627},[84,78683,51634],{"class":477},[84,78685,78686,78688,78690],{"class":86,"line":195},[84,78687,52112],{"class":477},[84,78689,52127],{"class":51627},[84,78691,51634],{"class":477},[35,78693,78694],{},"这个也可以写成箭头函数：",[75,78696,78698],{"className":50960,"code":78697,"language":50962,"meta":66,"style":66},"const newArr = arr.filter(item => item >= 20)\n",[81,78699,78700],{"__ignoreMap":66},[84,78701,78702],{"class":86,"line":87},[84,78703,78697],{"class":477},[14,78705,78707],{"id":78706},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[35,78709,78710],{},[64,78711],{"alt":66,"src":78712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[35,78714,78715],{},"步骤：",[35,78717,78718],{},"①：渲染页面模块",[1480,78720,78721,78724],{},[31,78722,78723],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[31,78725,78726],{},"用forEach+字符串的形式",[35,78728,78729],{},"②：点击不同需求，显示不同页面内容",[1480,78731,78732,78735,78738,78741,78744],{},[31,78733,78734],{},"点击采取事件委托方式 .filter",[31,78736,78737],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[31,78739,78740],{},"筛选条件是根据点击的 data-index 来判断",[31,78742,78743],{},"可以使用对象解构，把事件对象解构",[31,78745,78746],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[75,78748,78750],{"className":50960,"code":78749,"language":50962,"meta":66,"style":66},"\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",[81,78751,78752,78762,78776,78780,78788,78802,78822,78834,78842,78848,78858,78868,78878,78882,78886,78892,78905,78917,78927,78939,78943,78947,78954,78967,78979,78996,79014,79027,79031,79035,79047,79057,79061,79065,79072,79113,79140,79150,79154,79158,79166,79178,79182,79186,79194,79206,79218,79229,79233,79237,79246,79258,79269,79273,79277,79286,79298,79310,79314,79318,79325,79335,79347,79359,79374,79378,79382,79390,79406,79416,79426,79436,79448,79452,79456,79466,79477,79487,79491,79499,79507,79511,79519,79534,79560,79585,79610,79629,79637,79651,79656,79661,79666,79671,79676,79684,79692,79697,79708,79713,79723,79733,79743,79753,79757,79761,79770,79779,79788,79797,79801,79805,79814,79823,79832,79841,79845,79849,79858,79867,79876,79885,79889,79893,79902,79911,79920,79929,79933,79937,79946,79955,79964,79973,79977,79981,79990,79999,80008,80017,80021,80025,80034,80043,80051,80060,80064,80068,80072,80077,80089,80094,80106,80110,80127,80155,80164,80169,80179,80189,80198,80203,80208,80212,80217,80234,80238,80243,80251,80256,80283,80288,80308,80313,80325,80330,80335,80340,80351,80365,80402,80420,80453,80470,80494,80498,80503,80509,80513,80517,80521,80529,80537,80541],{"__ignoreMap":66},[84,78753,78754,78756,78758,78760],{"class":86,"line":87},[84,78755,51624],{"class":477},[84,78757,51628],{"class":51627},[84,78759,51631],{"class":90},[84,78761,51634],{"class":477},[84,78763,78764,78766,78768,78770,78772,78774],{"class":86,"line":98},[84,78765,1383],{"class":477},[84,78767,50962],{"class":51627},[84,78769,51643],{"class":90},[84,78771,523],{"class":477},[84,78773,51648],{"class":104},[84,78775,51634],{"class":477},[84,78777,78778],{"class":86,"line":70},[84,78779,2729],{"emptyLinePlaceholder":403},[84,78781,78782,78784,78786],{"class":86,"line":120},[84,78783,1383],{"class":477},[84,78785,51661],{"class":51627},[84,78787,51634],{"class":477},[84,78789,78790,78792,78794,78796,78798,78800],{"class":86,"line":131},[84,78791,52471],{"class":477},[84,78793,51671],{"class":51627},[84,78795,51674],{"class":90},[84,78797,523],{"class":477},[84,78799,51679],{"class":104},[84,78801,51634],{"class":477},[84,78803,78804,78806,78808,78810,78812,78814,78816,78818,78820],{"class":86,"line":145},[84,78805,52471],{"class":477},[84,78807,51671],{"class":51627},[84,78809,15249],{"class":90},[84,78811,523],{"class":477},[84,78813,51718],{"class":104},[84,78815,51698],{"class":90},[84,78817,523],{"class":477},[84,78819,51725],{"class":104},[84,78821,51634],{"class":477},[84,78823,78824,78826,78828,78830,78832],{"class":86,"line":156},[84,78825,52471],{"class":477},[84,78827,51734],{"class":51627},[84,78829,51737],{"class":477},[84,78831,51734],{"class":51627},[84,78833,51634],{"class":477},[84,78835,78836,78838,78840],{"class":86,"line":164},[84,78837,52471],{"class":477},[84,78839,389],{"class":51627},[84,78841,51634],{"class":477},[84,78843,78844,78846],{"class":86,"line":175},[84,78845,6732],{"class":51627},[84,78847,15901],{"class":477},[84,78849,78850,78852,78854,78856],{"class":86,"line":185},[84,78851,55021],{"class":94},[84,78853,51764],{"class":477},[84,78855,666],{"class":94},[84,78857,1634],{"class":477},[84,78859,78860,78862,78864,78866],{"class":86,"line":195},[84,78861,55032],{"class":94},[84,78863,51764],{"class":477},[84,78865,666],{"class":94},[84,78867,1634],{"class":477},[84,78869,78870,78872,78874,78876],{"class":86,"line":206},[84,78871,72922],{"class":94},[84,78873,51764],{"class":477},[84,78875,60831],{"class":94},[84,78877,1634],{"class":477},[84,78879,78880],{"class":86,"line":217},[84,78881,2516],{"class":477},[84,78883,78884],{"class":86,"line":227},[84,78885,2729],{"emptyLinePlaceholder":403},[84,78887,78888,78890],{"class":86,"line":238},[84,78889,62449],{"class":90},[84,78891,15901],{"class":477},[84,78893,78894,78896,78898,78901,78903],{"class":86,"line":249},[84,78895,55097],{"class":94},[84,78897,51764],{"class":477},[84,78899,78900],{"class":94},"990",[84,78902,51819],{"class":473},[84,78904,1634],{"class":477},[84,78906,78907,78909,78911,78913,78915],{"class":86,"line":262},[84,78908,55032],{"class":94},[84,78910,51764],{"class":477},[84,78912,666],{"class":94},[84,78914,51883],{"class":94},[84,78916,1634],{"class":477},[84,78918,78919,78921,78923,78925],{"class":86,"line":273},[84,78920,55335],{"class":94},[84,78922,51764],{"class":477},[84,78924,51804],{"class":94},[84,78926,1634],{"class":477},[84,78928,78929,78932,78934,78937],{"class":86,"line":283},[84,78930,78931],{"class":94},"      flex-wrap",[84,78933,51764],{"class":477},[84,78935,78936],{"class":94},"wrap",[84,78938,1634],{"class":477},[84,78940,78941],{"class":86,"line":294},[84,78942,2516],{"class":477},[84,78944,78945],{"class":86,"line":2028},[84,78946,2729],{"emptyLinePlaceholder":403},[84,78948,78949,78952],{"class":86,"line":2057},[84,78950,78951],{"class":90},"    .item",[84,78953,15901],{"class":477},[84,78955,78956,78958,78960,78963,78965],{"class":86,"line":2062},[84,78957,55097],{"class":94},[84,78959,51764],{"class":477},[84,78961,78962],{"class":94},"240",[84,78964,51819],{"class":473},[84,78966,1634],{"class":477},[84,78968,78969,78971,78973,78975,78977],{"class":86,"line":2079},[84,78970,62326],{"class":94},[84,78972,51764],{"class":477},[84,78974,919],{"class":94},[84,78976,51819],{"class":473},[84,78978,1634],{"class":477},[84,78980,78981,78983,78985,78987,78989,78992,78994],{"class":86,"line":2084},[84,78982,55021],{"class":94},[84,78984,51764],{"class":477},[84,78986,1173],{"class":94},[84,78988,51819],{"class":473},[84,78990,78991],{"class":94}," 30",[84,78993,51819],{"class":473},[84,78995,1634],{"class":477},[84,78997,78998,79000,79002,79004,79007,79010,79012],{"class":86,"line":2089},[84,78999,62186],{"class":94},[84,79001,51764],{"class":477},[84,79003,28448],{"class":94},[84,79005,79006],{"class":94}," ease",[84,79008,79009],{"class":94}," .5",[84,79011,1168],{"class":473},[84,79013,1634],{"class":477},[84,79015,79016,79019,79021,79023,79025],{"class":86,"line":2094},[84,79017,79018],{"class":94},"      margin-bottom",[84,79020,51764],{"class":477},[84,79022,1173],{"class":94},[84,79024,51819],{"class":473},[84,79026,1634],{"class":477},[84,79028,79029],{"class":86,"line":2108},[84,79030,2516],{"class":477},[84,79032,79033],{"class":86,"line":2113},[84,79034,2729],{"emptyLinePlaceholder":403},[84,79036,79037,79040,79042,79045],{"class":86,"line":2906},[84,79038,79039],{"class":90},"    .item:nth-child",[84,79041,478],{"class":477},[84,79043,79044],{"class":94},"4n",[84,79046,12771],{"class":477},[84,79048,79049,79051,79053,79055],{"class":86,"line":2920},[84,79050,62326],{"class":94},[84,79052,51764],{"class":477},[84,79054,666],{"class":94},[84,79056,1634],{"class":477},[84,79058,79059],{"class":86,"line":2928},[84,79060,2516],{"class":477},[84,79062,79063],{"class":86,"line":2933},[84,79064,2729],{"emptyLinePlaceholder":403},[84,79066,79067,79070],{"class":86,"line":2939},[84,79068,79069],{"class":90},"    .item:hover",[84,79071,15901],{"class":477},[84,79073,79074,79077,79079,79081,79083,79085,79087,79089,79091,79094,79096,79098,79100,79102,79104,79106,79108,79111],{"class":86,"line":2945},[84,79075,79076],{"class":94},"      box-shadow",[84,79078,51764],{"class":477},[84,79080,666],{"class":94},[84,79082,51819],{"class":473},[84,79084,4422],{"class":94},[84,79086,51819],{"class":473},[84,79088,2477],{"class":94},[84,79090,51819],{"class":473},[84,79092,79093],{"class":94}," rgba",[84,79095,478],{"class":477},[84,79097,666],{"class":94},[84,79099,12764],{"class":477},[84,79101,666],{"class":94},[84,79103,12764],{"class":477},[84,79105,666],{"class":94},[84,79107,12764],{"class":477},[84,79109,79110],{"class":94},".2",[84,79112,3048],{"class":477},[84,79114,79115,79118,79120,79123,79125,79127,79129,79132,79134,79136,79138],{"class":86,"line":2950},[84,79116,79117],{"class":94},"      transform",[84,79119,51764],{"class":477},[84,79121,79122],{"class":94},"translate3d",[84,79124,478],{"class":477},[84,79126,666],{"class":94},[84,79128,12764],{"class":477},[84,79130,79131],{"class":94},"-4",[84,79133,51819],{"class":473},[84,79135,12764],{"class":477},[84,79137,666],{"class":94},[84,79139,3048],{"class":477},[84,79141,79142,79144,79146,79148],{"class":86,"line":8277},[84,79143,62351],{"class":94},[84,79145,51764],{"class":477},[84,79147,62356],{"class":94},[84,79149,1634],{"class":477},[84,79151,79152],{"class":86,"line":8301},[84,79153,2516],{"class":477},[84,79155,79156],{"class":86,"line":8306},[84,79157,2729],{"emptyLinePlaceholder":403},[84,79159,79160,79162,79164],{"class":86,"line":8312},[84,79161,78951],{"class":90},[84,79163,55941],{"class":51627},[84,79165,15901],{"class":477},[84,79167,79168,79170,79172,79174,79176],{"class":86,"line":8339},[84,79169,55097],{"class":94},[84,79171,51764],{"class":477},[84,79173,784],{"class":94},[84,79175,801],{"class":473},[84,79177,1634],{"class":477},[84,79179,79180],{"class":86,"line":8344},[84,79181,2516],{"class":477},[84,79183,79184],{"class":86,"line":8350},[84,79185,2729],{"emptyLinePlaceholder":403},[84,79187,79188,79190,79192],{"class":86,"line":8362},[84,79189,78951],{"class":90},[84,79191,62630],{"class":90},[84,79193,15901],{"class":477},[84,79195,79196,79198,79200,79202,79204],{"class":86,"line":8374},[84,79197,55248],{"class":94},[84,79199,51764],{"class":477},[84,79201,1123],{"class":94},[84,79203,51819],{"class":473},[84,79205,1634],{"class":477},[84,79207,79208,79210,79212,79214,79216],{"class":86,"line":8386},[84,79209,79018],{"class":94},[84,79211,51764],{"class":477},[84,79213,919],{"class":94},[84,79215,51819],{"class":473},[84,79217,1634],{"class":477},[84,79219,79220,79222,79224,79227],{"class":86,"line":10045},[84,79221,57742],{"class":94},[84,79223,51764],{"class":477},[84,79225,79226],{"class":94},"#666",[84,79228,1634],{"class":477},[84,79230,79231],{"class":86,"line":10070},[84,79232,2516],{"class":477},[84,79234,79235],{"class":86,"line":10093},[84,79236,2729],{"emptyLinePlaceholder":403},[84,79238,79239,79241,79244],{"class":86,"line":10117},[84,79240,78951],{"class":90},[84,79242,79243],{"class":90}," .price",[84,79245,15901],{"class":477},[84,79247,79248,79250,79252,79254,79256],{"class":86,"line":10122},[84,79249,55248],{"class":94},[84,79251,51764],{"class":477},[84,79253,1223],{"class":94},[84,79255,51819],{"class":473},[84,79257,1634],{"class":477},[84,79259,79260,79262,79264,79267],{"class":86,"line":10127},[84,79261,57742],{"class":94},[84,79263,51764],{"class":477},[84,79265,79266],{"class":94},"firebrick",[84,79268,1634],{"class":477},[84,79270,79271],{"class":86,"line":10132},[84,79272,2516],{"class":477},[84,79274,79275],{"class":86,"line":10141},[84,79276,2729],{"emptyLinePlaceholder":403},[84,79278,79279,79281,79284],{"class":86,"line":10146},[84,79280,78951],{"class":90},[84,79282,79283],{"class":90}," .price::before",[84,79285,15901],{"class":477},[84,79287,79288,79291,79293,79296],{"class":86,"line":10152},[84,79289,79290],{"class":94},"      content",[84,79292,51764],{"class":477},[84,79294,79295],{"class":104},"'￥'",[84,79297,1634],{"class":477},[84,79299,79300,79302,79304,79306,79308],{"class":86,"line":10173},[84,79301,55248],{"class":94},[84,79303,51764],{"class":477},[84,79305,1022],{"class":94},[84,79307,51819],{"class":473},[84,79309,1634],{"class":477},[84,79311,79312],{"class":86,"line":10179},[84,79313,2516],{"class":477},[84,79315,79316],{"class":86,"line":10193},[84,79317,2729],{"emptyLinePlaceholder":403},[84,79319,79320,79323],{"class":86,"line":10199},[84,79321,79322],{"class":90},"    .filter",[84,79324,15901],{"class":477},[84,79326,79327,79329,79331,79333],{"class":86,"line":10226},[84,79328,55335],{"class":94},[84,79330,51764],{"class":477},[84,79332,51804],{"class":94},[84,79334,1634],{"class":477},[84,79336,79337,79339,79341,79343,79345],{"class":86,"line":10235},[84,79338,55097],{"class":94},[84,79340,51764],{"class":477},[84,79342,78900],{"class":94},[84,79344,51819],{"class":473},[84,79346,1634],{"class":477},[84,79348,79349,79351,79353,79355,79357],{"class":86,"line":10241},[84,79350,55032],{"class":94},[84,79352,51764],{"class":477},[84,79354,666],{"class":94},[84,79356,51883],{"class":94},[84,79358,1634],{"class":477},[84,79360,79361,79363,79365,79367,79369,79371],{"class":86,"line":10249},[84,79362,55021],{"class":94},[84,79364,51764],{"class":477},[84,79366,1129],{"class":94},[84,79368,51819],{"class":473},[84,79370,78991],{"class":94},[84,79372,79373],{"class":473},"px\n",[84,79375,79376],{"class":86,"line":10254},[84,79377,2516],{"class":477},[84,79379,79380],{"class":86,"line":16933},[84,79381,2729],{"emptyLinePlaceholder":403},[84,79383,79384,79386,79388],{"class":86,"line":16939},[84,79385,79322],{"class":90},[84,79387,1739],{"class":51627},[84,79389,15901],{"class":477},[84,79391,79392,79394,79396,79398,79400,79402,79404],{"class":86,"line":16962},[84,79393,55021],{"class":94},[84,79395,51764],{"class":477},[84,79397,919],{"class":94},[84,79399,51819],{"class":473},[84,79401,9279],{"class":94},[84,79403,51819],{"class":473},[84,79405,1634],{"class":477},[84,79407,79408,79410,79412,79414],{"class":86,"line":16968},[84,79409,62047],{"class":94},[84,79411,51764],{"class":477},[84,79413,62144],{"class":94},[84,79415,1634],{"class":477},[84,79417,79418,79420,79422,79424],{"class":86,"line":16991},[84,79419,57742],{"class":94},[84,79421,51764],{"class":477},[84,79423,79226],{"class":94},[84,79425,1634],{"class":477},[84,79427,79428,79430,79432,79434],{"class":86,"line":17005},[84,79429,64296],{"class":94},[84,79431,51764],{"class":477},[84,79433,55063],{"class":94},[84,79435,1634],{"class":477},[84,79437,79438,79440,79442,79444,79446],{"class":86,"line":17025},[84,79439,62076],{"class":94},[84,79441,51764],{"class":477},[84,79443,1173],{"class":94},[84,79445,51819],{"class":473},[84,79447,1634],{"class":477},[84,79449,79450],{"class":86,"line":17031},[84,79451,2516],{"class":477},[84,79453,79454],{"class":86,"line":17042},[84,79455,2729],{"emptyLinePlaceholder":403},[84,79457,79458,79460,79462,79464],{"class":86,"line":17065},[84,79459,79322],{"class":90},[84,79461,1739],{"class":51627},[84,79463,62226],{"class":90},[84,79465,15901],{"class":477},[84,79467,79468,79470,79472,79475],{"class":86,"line":17087},[84,79469,55210],{"class":94},[84,79471,51764],{"class":477},[84,79473,79474],{"class":94},"#05943c",[84,79476,1634],{"class":477},[84,79478,79479,79481,79483,79485],{"class":86,"line":17092},[84,79480,57742],{"class":94},[84,79482,51764],{"class":477},[84,79484,61168],{"class":94},[84,79486,1634],{"class":477},[84,79488,79489],{"class":86,"line":17098},[84,79490,2516],{"class":477},[84,79492,79493,79495,79497],{"class":86,"line":17112},[84,79494,52744],{"class":477},[84,79496,389],{"class":51627},[84,79498,51634],{"class":477},[84,79500,79501,79503,79505],{"class":86,"line":17125},[84,79502,52112],{"class":477},[84,79504,51661],{"class":51627},[84,79506,51634],{"class":477},[84,79508,79509],{"class":86,"line":17130},[84,79510,2729],{"emptyLinePlaceholder":403},[84,79512,79513,79515,79517],{"class":86,"line":17144},[84,79514,1383],{"class":477},[84,79516,52127],{"class":51627},[84,79518,51634],{"class":477},[84,79520,79521,79523,79525,79527,79529,79532],{"class":86,"line":17149},[84,79522,52471],{"class":477},[84,79524,51938],{"class":51627},[84,79526,53813],{"class":90},[84,79528,523],{"class":477},[84,79530,79531],{"class":104},"\"filter\"",[84,79533,51634],{"class":477},[84,79535,79536,79538,79540,79542,79544,79546,79549,79551,79553,79556,79558],{"class":86,"line":17155},[84,79537,51668],{"class":477},[84,79539,39],{"class":51627},[84,79541,61383],{"class":90},[84,79543,523],{"class":477},[84,79545,61388],{"class":104},[84,79547,79548],{"class":90}," data-index",[84,79550,523],{"class":477},[84,79552,4007],{"class":104},[84,79554,79555],{"class":477},">0-100元\u003C\u002F",[84,79557,39],{"class":51627},[84,79559,51634],{"class":477},[84,79561,79562,79564,79566,79568,79570,79572,79574,79576,79578,79581,79583],{"class":86,"line":17160},[84,79563,51668],{"class":477},[84,79565,39],{"class":51627},[84,79567,61383],{"class":90},[84,79569,523],{"class":477},[84,79571,61388],{"class":104},[84,79573,79548],{"class":90},[84,79575,523],{"class":477},[84,79577,4030],{"class":104},[84,79579,79580],{"class":477},">100-300元\u003C\u002F",[84,79582,39],{"class":51627},[84,79584,51634],{"class":477},[84,79586,79587,79589,79591,79593,79595,79597,79599,79601,79603,79606,79608],{"class":86,"line":17174},[84,79588,51668],{"class":477},[84,79590,39],{"class":51627},[84,79592,61383],{"class":90},[84,79594,523],{"class":477},[84,79596,61388],{"class":104},[84,79598,79548],{"class":90},[84,79600,523],{"class":477},[84,79602,4043],{"class":104},[84,79604,79605],{"class":477},">300元以上\u003C\u002F",[84,79607,39],{"class":51627},[84,79609,51634],{"class":477},[84,79611,79612,79614,79616,79618,79620,79622,79625,79627],{"class":86,"line":17179},[84,79613,51668],{"class":477},[84,79615,39],{"class":51627},[84,79617,61383],{"class":90},[84,79619,523],{"class":477},[84,79621,61388],{"class":104},[84,79623,79624],{"class":477},">全部区间\u003C\u002F",[84,79626,39],{"class":51627},[84,79628,51634],{"class":477},[84,79630,79631,79633,79635],{"class":86,"line":17184},[84,79632,52744],{"class":477},[84,79634,51938],{"class":51627},[84,79636,51634],{"class":477},[84,79638,79639,79641,79643,79645,79647,79649],{"class":86,"line":17198},[84,79640,52471],{"class":477},[84,79642,51938],{"class":51627},[84,79644,53813],{"class":90},[84,79646,523],{"class":477},[84,79648,62934],{"class":104},[84,79650,51634],{"class":477},[84,79652,79653],{"class":86,"line":17210},[84,79654,79655],{"class":328},"    \u003C!-- \u003Cdiv class=\"item\">\n",[84,79657,79658],{"class":86,"line":17215},[84,79659,79660],{"class":328},"      \u003Cimg src=\"\" alt=\"\">\n",[84,79662,79663],{"class":86,"line":17228},[84,79664,79665],{"class":328},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[84,79667,79668],{"class":86,"line":17233},[84,79669,79670],{"class":328},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[84,79672,79673],{"class":86,"line":17238},[84,79674,79675],{"class":328},"    \u003C\u002Fdiv> -->\n",[84,79677,79678,79680,79682],{"class":86,"line":17243},[84,79679,52744],{"class":477},[84,79681,51938],{"class":51627},[84,79683,51634],{"class":477},[84,79685,79686,79688,79690],{"class":86,"line":17256},[84,79687,52471],{"class":477},[84,79689,52140],{"class":51627},[84,79691,51634],{"class":477},[84,79693,79694],{"class":86,"line":17261},[84,79695,79696],{"class":328},"    \u002F\u002F 2. 初始化数据\n",[84,79698,79699,79701,79704,79706],{"class":86,"line":32960},[84,79700,11550],{"class":473},[84,79702,79703],{"class":94}," goodsList",[84,79705,13893],{"class":473},[84,79707,55773],{"class":477},[84,79709,79710],{"class":86,"line":32966},[84,79711,79712],{"class":477},"      {\n",[84,79714,79715,79718,79721],{"class":86,"line":32972},[84,79716,79717],{"class":477},"        id: ",[84,79719,79720],{"class":104},"'4001172'",[84,79722,31793],{"class":477},[84,79724,79725,79728,79731],{"class":86,"line":32978},[84,79726,79727],{"class":477},"        name: ",[84,79729,79730],{"class":104},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[84,79732,31793],{"class":477},[84,79734,79735,79738,79741],{"class":86,"line":32984},[84,79736,79737],{"class":477},"        price: ",[84,79739,79740],{"class":104},"'289.00'",[84,79742,31793],{"class":477},[84,79744,79745,79748,79751],{"class":86,"line":32995},[84,79746,79747],{"class":477},"        picture: ",[84,79749,79750],{"class":104},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[84,79752,31793],{"class":477},[84,79754,79755],{"class":86,"line":33001},[84,79756,78218],{"class":477},[84,79758,79759],{"class":86,"line":33021},[84,79760,79712],{"class":477},[84,79762,79763,79765,79768],{"class":86,"line":33027},[84,79764,79717],{"class":477},[84,79766,79767],{"class":104},"'4001594'",[84,79769,31793],{"class":477},[84,79771,79772,79774,79777],{"class":86,"line":33038},[84,79773,79727],{"class":477},[84,79775,79776],{"class":104},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[84,79778,31793],{"class":477},[84,79780,79781,79783,79786],{"class":86,"line":33044},[84,79782,79737],{"class":477},[84,79784,79785],{"class":104},"'288.00'",[84,79787,31793],{"class":477},[84,79789,79790,79792,79795],{"class":86,"line":33050},[84,79791,79747],{"class":477},[84,79793,79794],{"class":104},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[84,79796,31793],{"class":477},[84,79798,79799],{"class":86,"line":33056},[84,79800,78218],{"class":477},[84,79802,79803],{"class":86,"line":33062},[84,79804,79712],{"class":477},[84,79806,79807,79809,79812],{"class":86,"line":33068},[84,79808,79717],{"class":477},[84,79810,79811],{"class":104},"'4001009'",[84,79813,31793],{"class":477},[84,79815,79816,79818,79821],{"class":86,"line":33074},[84,79817,79727],{"class":477},[84,79819,79820],{"class":104},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[84,79822,31793],{"class":477},[84,79824,79825,79827,79830],{"class":86,"line":33080},[84,79826,79737],{"class":477},[84,79828,79829],{"class":104},"'109.00'",[84,79831,31793],{"class":477},[84,79833,79834,79836,79839],{"class":86,"line":33100},[84,79835,79747],{"class":477},[84,79837,79838],{"class":104},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[84,79840,31793],{"class":477},[84,79842,79843],{"class":86,"line":33106},[84,79844,78218],{"class":477},[84,79846,79847],{"class":86,"line":33122},[84,79848,79712],{"class":477},[84,79850,79851,79853,79856],{"class":86,"line":33128},[84,79852,79717],{"class":477},[84,79854,79855],{"class":104},"'4001874'",[84,79857,31793],{"class":477},[84,79859,79860,79862,79865],{"class":86,"line":33142},[84,79861,79727],{"class":477},[84,79863,79864],{"class":104},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[84,79866,31793],{"class":477},[84,79868,79869,79871,79874],{"class":86,"line":33148},[84,79870,79737],{"class":477},[84,79872,79873],{"class":104},"'488.00'",[84,79875,31793],{"class":477},[84,79877,79878,79880,79883],{"class":86,"line":33163},[84,79879,79747],{"class":477},[84,79881,79882],{"class":104},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[84,79884,31793],{"class":477},[84,79886,79887],{"class":86,"line":33169},[84,79888,78218],{"class":477},[84,79890,79891],{"class":86,"line":33178},[84,79892,79712],{"class":477},[84,79894,79895,79897,79900],{"class":86,"line":33184},[84,79896,79717],{"class":477},[84,79898,79899],{"class":104},"'4001649'",[84,79901,31793],{"class":477},[84,79903,79904,79906,79909],{"class":86,"line":33193},[84,79905,79727],{"class":477},[84,79907,79908],{"class":104},"'大师监制龙泉青瓷茶叶罐'",[84,79910,31793],{"class":477},[84,79912,79913,79915,79918],{"class":86,"line":33199},[84,79914,79737],{"class":477},[84,79916,79917],{"class":104},"'139.00'",[84,79919,31793],{"class":477},[84,79921,79922,79924,79927],{"class":86,"line":33205},[84,79923,79747],{"class":477},[84,79925,79926],{"class":104},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[84,79928,31793],{"class":477},[84,79930,79931],{"class":86,"line":33214},[84,79932,78218],{"class":477},[84,79934,79935],{"class":86,"line":33220},[84,79936,79712],{"class":477},[84,79938,79939,79941,79944],{"class":86,"line":33231},[84,79940,79717],{"class":477},[84,79942,79943],{"class":104},"'3997185'",[84,79945,31793],{"class":477},[84,79947,79948,79950,79953],{"class":86,"line":33237},[84,79949,79727],{"class":477},[84,79951,79952],{"class":104},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[84,79954,31793],{"class":477},[84,79956,79957,79959,79962],{"class":86,"line":33256},[84,79958,79737],{"class":477},[84,79960,79961],{"class":104},"'108.00'",[84,79963,31793],{"class":477},[84,79965,79966,79968,79971],{"class":86,"line":33262},[84,79967,79747],{"class":477},[84,79969,79970],{"class":104},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[84,79972,31793],{"class":477},[84,79974,79975],{"class":86,"line":33273},[84,79976,78218],{"class":477},[84,79978,79979],{"class":86,"line":33279},[84,79980,79712],{"class":477},[84,79982,79983,79985,79988],{"class":86,"line":33299},[84,79984,79717],{"class":477},[84,79986,79987],{"class":104},"'3997403'",[84,79989,31793],{"class":477},[84,79991,79992,79994,79997],{"class":86,"line":33315},[84,79993,79727],{"class":477},[84,79995,79996],{"class":104},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[84,79998,31793],{"class":477},[84,80000,80001,80003,80006],{"class":86,"line":33321},[84,80002,79737],{"class":477},[84,80004,80005],{"class":104},"'100.00'",[84,80007,31793],{"class":477},[84,80009,80010,80012,80015],{"class":86,"line":33335},[84,80011,79747],{"class":477},[84,80013,80014],{"class":104},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[84,80016,31793],{"class":477},[84,80018,80019],{"class":86,"line":33341},[84,80020,78218],{"class":477},[84,80022,80023],{"class":86,"line":33347},[84,80024,79712],{"class":477},[84,80026,80027,80029,80032],{"class":86,"line":33358},[84,80028,79717],{"class":477},[84,80030,80031],{"class":104},"'3998274'",[84,80033,31793],{"class":477},[84,80035,80036,80038,80041],{"class":86,"line":33364},[84,80037,79727],{"class":477},[84,80039,80040],{"class":104},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[84,80042,31793],{"class":477},[84,80044,80045,80047,80049],{"class":86,"line":33370},[84,80046,79737],{"class":477},[84,80048,79917],{"class":104},[84,80050,31793],{"class":477},[84,80052,80053,80055,80058],{"class":86,"line":33380},[84,80054,79747],{"class":477},[84,80056,80057],{"class":104},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[84,80059,31793],{"class":477},[84,80061,80062],{"class":86,"line":33386},[84,80063,78218],{"class":477},[84,80065,80066],{"class":86,"line":33397},[84,80067,53436],{"class":477},[84,80069,80070],{"class":86,"line":33403},[84,80071,2729],{"emptyLinePlaceholder":403},[84,80073,80074],{"class":86,"line":33413},[84,80075,80076],{"class":328},"    \u002F\u002F 1.渲染函数\n",[84,80078,80079,80081,80083,80085,80087],{"class":86,"line":33418},[84,80080,70410],{"class":473},[84,80082,70413],{"class":90},[84,80084,478],{"class":477},[84,80086,4209],{"class":5545},[84,80088,12771],{"class":477},[84,80090,80091],{"class":86,"line":33424},[84,80092,80093],{"class":328},"      \u002F\u002F 声明空字符串\n",[84,80095,80096,80099,80102,80104],{"class":86,"line":33473},[84,80097,80098],{"class":473},"      let",[84,80100,80101],{"class":477}," str ",[84,80103,523],{"class":473},[84,80105,70430],{"class":104},[84,80107,80108],{"class":86,"line":33520},[84,80109,70435],{"class":328},[84,80111,80112,80114,80117,80119,80122,80125],{"class":86,"line":33525},[84,80113,58333],{"class":477},[84,80115,80116],{"class":90},"forEach",[84,80118,478],{"class":477},[84,80120,80121],{"class":5545},"item",[84,80123,80124],{"class":473}," =>",[84,80126,15901],{"class":477},[84,80128,80129,80131,80134,80137,80139,80142,80144,80147,80150,80152],{"class":86,"line":33531},[84,80130,61596],{"class":473},[84,80132,80133],{"class":477}," { ",[84,80135,80136],{"class":94},"name",[84,80138,12764],{"class":477},[84,80140,80141],{"class":94},"price",[84,80143,12764],{"class":477},[84,80145,80146],{"class":94},"picture",[84,80148,80149],{"class":477}," } ",[84,80151,523],{"class":473},[84,80153,80154],{"class":477}," item\n",[84,80156,80157,80160,80162],{"class":86,"line":33550},[84,80158,80159],{"class":477},"        str ",[84,80161,9806],{"class":473},[84,80163,70494],{"class":104},[84,80165,80166],{"class":86,"line":33556},[84,80167,80168],{"class":104},"          \u003Cdiv class=\"item\">\n",[84,80170,80171,80174,80176],{"class":86,"line":33576},[84,80172,80173],{"class":104},"            \u003Cimg src=\"${",[84,80175,80146],{"class":477},[84,80177,80178],{"class":104},"}\" alt=\"\">\n",[84,80180,80181,80184,80186],{"class":86,"line":33582},[84,80182,80183],{"class":104},"            \u003Cp class=\"name\">${",[84,80185,80136],{"class":477},[84,80187,80188],{"class":104},"}\u003C\u002Fp>\n",[84,80190,80191,80194,80196],{"class":86,"line":33588},[84,80192,80193],{"class":104},"            \u003Cp class=\"price\">${",[84,80195,80141],{"class":477},[84,80197,80188],{"class":104},[84,80199,80200],{"class":86,"line":33598},[84,80201,80202],{"class":104},"          \u003C\u002Fdiv>\n",[84,80204,80205],{"class":86,"line":33603},[84,80206,80207],{"class":104},"        `\n",[84,80209,80210],{"class":86,"line":33609},[84,80211,65141],{"class":477},[84,80213,80214],{"class":86,"line":33625},[84,80215,80216],{"class":328},"      \u002F\u002F 追加给List\n",[84,80218,80219,80221,80223,80225,80228,80230,80232],{"class":86,"line":33670},[84,80220,56097],{"class":477},[84,80222,54725],{"class":90},[84,80224,478],{"class":477},[84,80226,80227],{"class":104},"'.list'",[84,80229,74575],{"class":477},[84,80231,523],{"class":473},[84,80233,74311],{"class":477},[84,80235,80236],{"class":86,"line":33676},[84,80237,2516],{"class":477},[84,80239,80240],{"class":86,"line":33682},[84,80241,80242],{"class":328},"    \u002F\u002F 页面一打开就需要渲染\n",[84,80244,80245,80248],{"class":86,"line":33688},[84,80246,80247],{"class":90},"    render",[84,80249,80250],{"class":477},"(goodsList)\n",[84,80252,80253],{"class":86,"line":33699},[84,80254,80255],{"class":328},"    \u002F\u002F 2.过滤筛选\n",[84,80257,80258,80260,80262,80264,80267,80269,80271,80273,80275,80277,80279,80281],{"class":86,"line":33705},[84,80259,52734],{"class":477},[84,80261,54725],{"class":90},[84,80263,478],{"class":477},[84,80265,80266],{"class":104},"'.filter'",[84,80268,31153],{"class":477},[84,80270,58139],{"class":90},[84,80272,478],{"class":477},[84,80274,58144],{"class":104},[84,80276,12764],{"class":477},[84,80278,550],{"class":5545},[84,80280,80124],{"class":473},[84,80282,15901],{"class":477},[84,80284,80285],{"class":86,"line":33711},[84,80286,80287],{"class":328},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[84,80289,80290,80292,80294,80297,80299,80301,80303,80305],{"class":86,"line":33717},[84,80291,58554],{"class":473},[84,80293,80133],{"class":477},[84,80295,80296],{"class":94},"tagName",[84,80298,12764],{"class":477},[84,80300,31864],{"class":94},[84,80302,80149],{"class":477},[84,80304,523],{"class":473},[84,80306,80307],{"class":477}," e.target\n",[84,80309,80310],{"class":86,"line":33735},[84,80311,80312],{"class":328},"      \u002F\u002F 判断\n",[84,80314,80315,80317,80319,80321,80323],{"class":86,"line":33749},[84,80316,54806],{"class":473},[84,80318,67360],{"class":477},[84,80320,54812],{"class":473},[84,80322,68582],{"class":104},[84,80324,12771],{"class":477},[84,80326,80327],{"class":86,"line":33758},[84,80328,80329],{"class":328},"        \u002F\u002F console.log(11)\n",[84,80331,80332],{"class":86,"line":33767},[84,80333,80334],{"class":328},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[84,80336,80337],{"class":86,"line":33776},[84,80338,80339],{"class":328},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[84,80341,80342,80344,80346,80348],{"class":86,"line":33785},[84,80343,52157],{"class":473},[84,80345,52160],{"class":477},[84,80347,523],{"class":473},[84,80349,80350],{"class":477}," goodsList\n",[84,80352,80353,80355,80358,80360,80363],{"class":86,"line":33791},[84,80354,2826],{"class":473},[84,80356,80357],{"class":477}," (dataset.index ",[84,80359,54812],{"class":473},[84,80361,80362],{"class":104}," '1'",[84,80364,12771],{"class":477},[84,80366,80367,80370,80372,80375,80378,80380,80382,80384,80387,80389,80391,80394,80396,80398,80400],{"class":86,"line":33797},[84,80368,80369],{"class":477},"          arr ",[84,80371,523],{"class":473},[84,80373,80374],{"class":477}," goodsList.",[84,80376,80377],{"class":90},"filter",[84,80379,478],{"class":477},[84,80381,80121],{"class":5545},[84,80383,80124],{"class":473},[84,80385,80386],{"class":477}," item.price ",[84,80388,2040],{"class":473},[84,80390,4422],{"class":94},[84,80392,80393],{"class":473}," &&",[84,80395,80386],{"class":477},[84,80397,1928],{"class":473},[84,80399,6083],{"class":94},[84,80401,484],{"class":477},[84,80403,80404,80407,80409,80411,80413,80415,80418],{"class":86,"line":33805},[84,80405,80406],{"class":477},"        } ",[84,80408,2031],{"class":473},[84,80410,2034],{"class":473},[84,80412,80357],{"class":477},[84,80414,54812],{"class":473},[84,80416,80417],{"class":104}," '2'",[84,80419,12771],{"class":477},[84,80421,80422,80424,80426,80428,80430,80432,80434,80436,80438,80440,80442,80444,80446,80448,80451],{"class":86,"line":33810},[84,80423,80369],{"class":477},[84,80425,523],{"class":473},[84,80427,80374],{"class":477},[84,80429,80377],{"class":90},[84,80431,478],{"class":477},[84,80433,80121],{"class":5545},[84,80435,80124],{"class":473},[84,80437,80386],{"class":477},[84,80439,2040],{"class":473},[84,80441,6083],{"class":94},[84,80443,80393],{"class":473},[84,80445,80386],{"class":477},[84,80447,1928],{"class":473},[84,80449,80450],{"class":94}," 300",[84,80452,484],{"class":477},[84,80454,80455,80457,80459,80461,80463,80465,80468],{"class":86,"line":33816},[84,80456,80406],{"class":477},[84,80458,2031],{"class":473},[84,80460,2034],{"class":473},[84,80462,80357],{"class":477},[84,80464,54812],{"class":473},[84,80466,80467],{"class":104}," '3'",[84,80469,12771],{"class":477},[84,80471,80472,80474,80476,80478,80480,80482,80484,80486,80488,80490,80492],{"class":86,"line":33827},[84,80473,80369],{"class":477},[84,80475,523],{"class":473},[84,80477,80374],{"class":477},[84,80479,80377],{"class":90},[84,80481,478],{"class":477},[84,80483,80121],{"class":5545},[84,80485,80124],{"class":473},[84,80487,80386],{"class":477},[84,80489,2040],{"class":473},[84,80491,80450],{"class":94},[84,80493,484],{"class":477},[84,80495,80496],{"class":86,"line":33833},[84,80497,2858],{"class":477},[84,80499,80500],{"class":86,"line":33853},[84,80501,80502],{"class":328},"        \u002F\u002F 渲染函数\n",[84,80504,80505,80507],{"class":86,"line":33859},[84,80506,70734],{"class":90},[84,80508,52739],{"class":477},[84,80510,80511],{"class":86,"line":33865},[84,80512,52725],{"class":477},[84,80514,80515],{"class":86,"line":33871},[84,80516,2729],{"emptyLinePlaceholder":403},[84,80518,80519],{"class":86,"line":33888},[84,80520,33788],{"class":477},[84,80522,80523,80525,80527],{"class":86,"line":33894},[84,80524,52744],{"class":477},[84,80526,52140],{"class":51627},[84,80528,51634],{"class":477},[84,80530,80531,80533,80535],{"class":86,"line":33900},[84,80532,52112],{"class":477},[84,80534,52127],{"class":51627},[84,80536,51634],{"class":477},[84,80538,80539],{"class":86,"line":33906},[84,80540,2729],{"emptyLinePlaceholder":403},[84,80542,80543,80545,80547],{"class":86,"line":33912},[84,80544,52112],{"class":477},[84,80546,50962],{"class":51627},[84,80548,51634],{"class":477},[14,80550,80552],{"id":80551},"_410-深入了解对象","4.10 深入了解对象",[23,80554,80556],{"id":80555},"_4101-创建对象","4.10.1 创建对象",[35,80558,80559],{},[64,80560],{"alt":66,"src":80561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[35,80563,80564],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[23,80566,80568],{"id":80567},"_4102-构造函数","4.10.2 构造函数",[35,80570,80571,80574],{},[624,80572,80573],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[35,80576,80577,80580],{},[624,80578,80579],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[75,80582,80584],{"className":50960,"code":80583,"language":50962,"meta":66,"style":66},"\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",[81,80585,80586,80594,80599,80620,80633,80645,80657,80661,80666,80693,80698,80725],{"__ignoreMap":66},[84,80587,80588,80590,80592],{"class":86,"line":87},[84,80589,1383],{"class":477},[84,80591,52140],{"class":51627},[84,80593,51634],{"class":477},[84,80595,80596],{"class":86,"line":98},[84,80597,80598],{"class":328},"\u002F\u002F例：\n",[84,80600,80601,80603,80606,80608,80610,80612,80614,80616,80618],{"class":86,"line":70},[84,80602,54775],{"class":473},[84,80604,80605],{"class":90}," Pig",[84,80607,478],{"class":477},[84,80609,80136],{"class":5545},[84,80611,851],{"class":477},[84,80613,70547],{"class":5545},[84,80615,851],{"class":477},[84,80617,70564],{"class":5545},[84,80619,12771],{"class":477},[84,80621,80622,80625,80628,80630],{"class":86,"line":120},[84,80623,80624],{"class":94},"    this",[84,80626,80627],{"class":477},".name",[84,80629,523],{"class":473},[84,80631,80632],{"class":477},"name\n",[84,80634,80635,80637,80640,80642],{"class":86,"line":131},[84,80636,80624],{"class":94},[84,80638,80639],{"class":477},".age",[84,80641,523],{"class":473},[84,80643,80644],{"class":477},"age\n",[84,80646,80647,80649,80652,80654],{"class":86,"line":145},[84,80648,80624],{"class":94},[84,80650,80651],{"class":477},".gender",[84,80653,523],{"class":473},[84,80655,80656],{"class":477},"gender    \n",[84,80658,80659],{"class":86,"line":156},[84,80660,1905],{"class":477},[84,80662,80663],{"class":86,"line":164},[84,80664,80665],{"class":328},"\u002F\u002F创建佩奇对象\n",[84,80667,80668,80670,80673,80675,80677,80679,80682,80684,80686,80688,80691],{"class":86,"line":175},[84,80669,7121],{"class":473},[84,80671,80672],{"class":94}," Peppa",[84,80674,12046],{"class":473},[84,80676,80605],{"class":90},[84,80678,478],{"class":477},[84,80680,80681],{"class":104},"'佩奇'",[84,80683,851],{"class":477},[84,80685,817],{"class":94},[84,80687,851],{"class":477},[84,80689,80690],{"class":104},"'女'",[84,80692,484],{"class":477},[84,80694,80695],{"class":86,"line":185},[84,80696,80697],{"class":328},"\u002F\u002F创建乔治对象\n",[84,80699,80700,80702,80705,80707,80709,80711,80714,80716,80718,80720,80723],{"class":86,"line":195},[84,80701,7121],{"class":473},[84,80703,80704],{"class":94}," George",[84,80706,12046],{"class":473},[84,80708,80605],{"class":90},[84,80710,478],{"class":477},[84,80712,80713],{"class":104},"'乔治'",[84,80715,851],{"class":477},[84,80717,547],{"class":94},[84,80719,851],{"class":477},[84,80721,80722],{"class":104},"'男'",[84,80724,484],{"class":477},[84,80726,80727,80729,80731],{"class":86,"line":206},[84,80728,52112],{"class":477},[84,80730,52140],{"class":51627},[84,80732,51634],{"class":477},[35,80734,80735],{},[64,80736],{"alt":66,"src":80737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[35,80739,80740],{},[64,80741],{"alt":66,"src":80742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[35,80744,80745],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[35,80747,80748],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[35,80750,80751],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[35,80753,80754],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[35,80756,80757],{},"这里用等号是因为：对象.属性=值",[35,80759,80760],{},"①利用对象字面量创建对象",[35,80762,80763],{},"const o={",[35,80765,80766],{},"name:'pink'",[35,80768,80769],{},"} ②利用new Object创建对象",[35,80771,80772],{},"const o=new Object({name:'pink'})",[35,80774,80775],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[35,80777,80778],{},"构造函数创建对象的执行过程：",[35,80780,80781],{},[64,80782],{"alt":66,"src":80783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[23,80785,80787],{"id":80786},"_4103-实例成员","4.10.3 实例成员",[35,80789,80790],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[28,80792,80793,80796,80799],{},[31,80794,80795],{},"实例对象的属性和方法即为实例成员",[31,80797,80798],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[31,80800,80801],{},"构造函数创建的实例对象彼此独立互不影响",[23,80803,80805],{"id":80804},"_4104-静态成员","4.10.4 静态成员",[35,80807,80808],{},[64,80809],{"alt":66,"src":80810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[35,80812,80813],{},"静态成员有Date.now() Math.PI Math.random()",[35,80815,80816],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[35,80818,80819],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[35,80821,80822],{},"function Pig(name) n {",[35,80824,80825],{},"this.name=name",[35,80827,1419],{},[35,80829,80830],{},"Pig.eyes=2",[35,80832,80833],{},"Pig.sayHai=function () { console.log(this) }",[35,80835,80836],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[35,80838,80839],{},"console.log(Pig.eyes) \u002F\u002F2",[35,80841,11661],{},[28,80843,80844,80847,80850,80853,80856],{},[31,80845,80846],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[31,80848,80849],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[31,80851,80852],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[31,80854,80855],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[31,80857,80858],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[35,80860,80861],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[23,80863,80865],{"id":80864},"_4105-内置构造函数","4.10.5 内置构造函数",[35,80867,80868],{},"内置构造函数包含：",[35,80870,80871],{},[64,80872],{"alt":66,"src":80873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[35,80875,80876],{},[64,80877],{"alt":66,"src":80878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[35,80880,80881],{},"这些基本数据类型，js对他们进行了包装",[52140,80883,80884],{},"\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",[22327,80886,80888],{"id":80887},"_41051-object","4.10.5.1 Object",[35,80890,80891],{},"Object 是内置的构造函数，用于创建普通对象",[35,80893,80894],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[75,80896,80898],{"className":50960,"code":80897,"language":50962,"meta":66,"style":66},"const user=new Object({name:'小明',age:15})\n",[81,80899,80900],{"__ignoreMap":66},[84,80901,80902],{"class":86,"line":87},[84,80903,80897],{"class":477},[35,80905,80906],{},"三个常用的静态方法：",[23239,80908,80910],{"id":80909},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[35,80912,80913],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[35,80915,80916],{},[64,80917],{"alt":66,"src":80918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[35,80920,80921],{},[64,80922],{"alt":66,"src":80923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[75,80925,80927],{"className":53394,"code":80926,"language":53396,"meta":66,"style":66},"\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",[81,80928,80929,80937,80945,80950,80955,80960,80965,80970,80975,80983],{"__ignoreMap":66},[84,80930,80931,80933,80935],{"class":86,"line":87},[84,80932,1383],{"class":477},[84,80934,52127],{"class":51627},[84,80936,51634],{"class":477},[84,80938,80939,80941,80943],{"class":86,"line":98},[84,80940,52471],{"class":477},[84,80942,52140],{"class":51627},[84,80944,51634],{"class":477},[84,80946,80947],{"class":86,"line":70},[84,80948,80949],{"class":477},"    const o = { name: 'pink', age: 6 }\n",[84,80951,80952],{"class":86,"line":120},[84,80953,80954],{"class":477},"    \u002F\u002F 获得所有属性名\n",[84,80956,80957],{"class":86,"line":131},[84,80958,80959],{"class":477},"    const arr = Object.keys(o)\n",[84,80961,80962],{"class":86,"line":145},[84,80963,80964],{"class":477},"    console.log(arr)\n",[84,80966,80967],{"class":86,"line":156},[84,80968,80969],{"class":477},"    \u002F\u002F 获得所有属性值\n",[84,80971,80972],{"class":86,"line":164},[84,80973,80974],{"class":477},"    console.log(Object.values(o))\n",[84,80976,80977,80979,80981],{"class":86,"line":175},[84,80978,52744],{"class":477},[84,80980,52140],{"class":51627},[84,80982,51634],{"class":477},[84,80984,80985,80987,80989],{"class":86,"line":185},[84,80986,52112],{"class":477},[84,80988,52127],{"class":51627},[84,80990,51634],{"class":477},[23239,80992,80994],{"id":80993},"_410512-object-assign","4.10.5.1.2 Object. assign",[35,80996,80997],{},"Object.assign(oo,o)",[35,80999,81000],{},"后的东西添加给前 是追加",[35,81002,81003],{},[64,81004],{"alt":66,"src":81005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[35,81007,81008],{},[64,81009],{"alt":66,"src":81010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[75,81012,81014],{"className":53394,"code":81013,"language":53396,"meta":66,"style":66},"\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",[81,81015,81016,81024,81032,81036,81040,81044,81048,81052,81056,81061,81066,81071,81076,81081,81089],{"__ignoreMap":66},[84,81017,81018,81020,81022],{"class":86,"line":87},[84,81019,1383],{"class":477},[84,81021,52127],{"class":51627},[84,81023,51634],{"class":477},[84,81025,81026,81028,81030],{"class":86,"line":98},[84,81027,52471],{"class":477},[84,81029,52140],{"class":51627},[84,81031,51634],{"class":477},[84,81033,81034],{"class":86,"line":70},[84,81035,80949],{"class":477},[84,81037,81038],{"class":86,"line":120},[84,81039,80954],{"class":477},[84,81041,81042],{"class":86,"line":131},[84,81043,80959],{"class":477},[84,81045,81046],{"class":86,"line":145},[84,81047,80964],{"class":477},[84,81049,81050],{"class":86,"line":156},[84,81051,80969],{"class":477},[84,81053,81054],{"class":86,"line":164},[84,81055,80974],{"class":477},[84,81057,81058],{"class":86,"line":175},[84,81059,81060],{"class":477},"    const oo = {}\n",[84,81062,81063],{"class":86,"line":185},[84,81064,81065],{"class":477},"    Object.assign(oo, o)\n",[84,81067,81068],{"class":86,"line":195},[84,81069,81070],{"class":477},"    console.log(oo)\n",[84,81072,81073],{"class":86,"line":206},[84,81074,81075],{"class":477},"    Object.assign(o, { gender: '女' })\n",[84,81077,81078],{"class":86,"line":217},[84,81079,81080],{"class":477},"    console.log(o)\n",[84,81082,81083,81085,81087],{"class":86,"line":227},[84,81084,52744],{"class":477},[84,81086,52140],{"class":51627},[84,81088,51634],{"class":477},[84,81090,81091,81093,81095],{"class":86,"line":238},[84,81092,52112],{"class":477},[84,81094,52127],{"class":51627},[84,81096,51634],{"class":477},[35,81098,81099],{},[64,81100],{"alt":66,"src":81101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22327,81103,81105],{"id":81104},"_41052-array","4.10.5.2 Array",[35,81107,81108],{},"Array 是内置的构造函数，用于创建数组",[35,81110,81111],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[75,81113,81115],{"className":50960,"code":81114,"language":50962,"meta":66,"style":66},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[81,81116,81117,81122],{"__ignoreMap":66},[84,81118,81119],{"class":86,"line":87},[84,81120,81121],{"class":477},"const arr=new Array(3,5)\n",[84,81123,81124],{"class":86,"line":98},[84,81125,81126],{"class":477},"console.log(arr)  \u002F\u002F[3,5]\n",[35,81128,81129],{},"Array的实例方法，这个方法是实例成员",[35,81131,81132],{},[64,81133],{"alt":66,"src":81134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23239,81136,81138],{"id":81137},"_410521-reduce","4.10.5.2.1 reduce",[35,81140,81141],{},[64,81142],{"alt":66,"src":81143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[75,81145,81147],{"className":53394,"code":81146,"language":53396,"meta":66,"style":66},"\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",[81,81148,81149,81157,81165,81170,81175,81180,81185,81189,81194,81199,81204,81208,81213,81218,81222,81227,81232,81237,81245],{"__ignoreMap":66},[84,81150,81151,81153,81155],{"class":86,"line":87},[84,81152,1383],{"class":477},[84,81154,52127],{"class":51627},[84,81156,51634],{"class":477},[84,81158,81159,81161,81163],{"class":86,"line":98},[84,81160,52471],{"class":477},[84,81162,52140],{"class":51627},[84,81164,51634],{"class":477},[84,81166,81167],{"class":86,"line":70},[84,81168,81169],{"class":477},"    const arr = [1, 5, 8]\n",[84,81171,81172],{"class":86,"line":120},[84,81173,81174],{"class":477},"    \u002F\u002F 1.没有初始值\n",[84,81176,81177],{"class":86,"line":131},[84,81178,81179],{"class":477},"    const total = arr.reduce(function (prev, current) {\n",[84,81181,81182],{"class":86,"line":145},[84,81183,81184],{"class":477},"      return prev + current\n",[84,81186,81187],{"class":86,"line":156},[84,81188,33788],{"class":477},[84,81190,81191],{"class":86,"line":164},[84,81192,81193],{"class":477},"    console.log(total)   \u002F\u002F14\n",[84,81195,81196],{"class":86,"line":175},[84,81197,81198],{"class":477},"    \u002F\u002F 2.有初始值\n",[84,81200,81201],{"class":86,"line":185},[84,81202,81203],{"class":477},"    const total1 = arr.reduce(function (prev, current) {\n",[84,81205,81206],{"class":86,"line":195},[84,81207,81184],{"class":477},[84,81209,81210],{"class":86,"line":206},[84,81211,81212],{"class":477},"    }, 10)\n",[84,81214,81215],{"class":86,"line":217},[84,81216,81217],{"class":477},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[84,81219,81220],{"class":86,"line":227},[84,81221,2729],{"emptyLinePlaceholder":403},[84,81223,81224],{"class":86,"line":238},[84,81225,81226],{"class":477},"    \u002F\u002F 3.箭头函数写法\n",[84,81228,81229],{"class":86,"line":249},[84,81230,81231],{"class":477},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[84,81233,81234],{"class":86,"line":262},[84,81235,81236],{"class":477},"    console.log(total2)   \u002F\u002F24\n",[84,81238,81239,81241,81243],{"class":86,"line":273},[84,81240,52744],{"class":477},[84,81242,52140],{"class":51627},[84,81244,51634],{"class":477},[84,81246,81247,81249,81251],{"class":86,"line":283},[84,81248,52112],{"class":477},[84,81250,52127],{"class":51627},[84,81252,51634],{"class":477},[35,81254,81255],{},"执行过程：",[28,81257,81258,81261,81264],{},[31,81259,81260],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[31,81262,81263],{},"每一次循环，把返回值给作为下一次循环的上一次值",[31,81265,81266],{},"如果有起始值，则起始值作为上一次值",[75,81268,81270],{"className":53394,"code":81269,"language":53396,"meta":66,"style":66},"\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",[81,81271,81272,81280,81288,81292,81296,81300,81304,81308,81312,81317,81322,81327,81332,81337,81341,81345,81349,81353,81357,81361,81366,81370,81375,81379,81384,81389,81393,81397,81401,81409],{"__ignoreMap":66},[84,81273,81274,81276,81278],{"class":86,"line":87},[84,81275,1383],{"class":477},[84,81277,52127],{"class":51627},[84,81279,51634],{"class":477},[84,81281,81282,81284,81286],{"class":86,"line":98},[84,81283,52471],{"class":477},[84,81285,52140],{"class":51627},[84,81287,51634],{"class":477},[84,81289,81290],{"class":86,"line":70},[84,81291,81169],{"class":477},[84,81293,81294],{"class":86,"line":120},[84,81295,81174],{"class":477},[84,81297,81298],{"class":86,"line":131},[84,81299,81179],{"class":477},[84,81301,81302],{"class":86,"line":145},[84,81303,81184],{"class":477},[84,81305,81306],{"class":86,"line":156},[84,81307,33788],{"class":477},[84,81309,81310],{"class":86,"line":164},[84,81311,81193],{"class":477},[84,81313,81314],{"class":86,"line":175},[84,81315,81316],{"class":477},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[84,81318,81319],{"class":86,"line":185},[84,81320,81321],{"class":477},"    \u002F\u002F     1              5                    6\n",[84,81323,81324],{"class":86,"line":195},[84,81325,81326],{"class":477},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[84,81328,81329],{"class":86,"line":206},[84,81330,81331],{"class":477},"    \u002F\u002F     6              8                    14\n",[84,81333,81334],{"class":86,"line":217},[84,81335,81336],{"class":477},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[84,81338,81339],{"class":86,"line":227},[84,81340,81198],{"class":477},[84,81342,81343],{"class":86,"line":238},[84,81344,81203],{"class":477},[84,81346,81347],{"class":86,"line":249},[84,81348,81184],{"class":477},[84,81350,81351],{"class":86,"line":262},[84,81352,81212],{"class":477},[84,81354,81355],{"class":86,"line":273},[84,81356,81217],{"class":477},[84,81358,81359],{"class":86,"line":283},[84,81360,81316],{"class":477},[84,81362,81363],{"class":86,"line":294},[84,81364,81365],{"class":477},"    \u002F\u002F     10             1                     11\n",[84,81367,81368],{"class":86,"line":2028},[84,81369,81326],{"class":477},[84,81371,81372],{"class":86,"line":2057},[84,81373,81374],{"class":477},"    \u002F\u002F     11             5                    16\n",[84,81376,81377],{"class":86,"line":2062},[84,81378,81326],{"class":477},[84,81380,81381],{"class":86,"line":2079},[84,81382,81383],{"class":477},"    \u002F\u002F     16             8                    24\n",[84,81385,81386],{"class":86,"line":2084},[84,81387,81388],{"class":477},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[84,81390,81391],{"class":86,"line":2089},[84,81392,81226],{"class":477},[84,81394,81395],{"class":86,"line":2094},[84,81396,81231],{"class":477},[84,81398,81399],{"class":86,"line":2108},[84,81400,81236],{"class":477},[84,81402,81403,81405,81407],{"class":86,"line":2113},[84,81404,52744],{"class":477},[84,81406,52140],{"class":51627},[84,81408,51634],{"class":477},[84,81410,81411,81413,81415],{"class":86,"line":2906},[84,81412,52112],{"class":477},[84,81414,52127],{"class":51627},[84,81416,51634],{"class":477},[23239,81418,81420],{"id":81419},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[35,81422,81423],{},[64,81424],{"alt":66,"src":81425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[75,81427,81429],{"className":53394,"code":81428,"language":53396,"meta":66,"style":66},"\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",[81,81430,81431,81439,81447,81452,81457,81462,81467,81471,81476,81481,81486,81491,81496,81501,81505,81510,81514,81519,81527],{"__ignoreMap":66},[84,81432,81433,81435,81437],{"class":86,"line":87},[84,81434,1383],{"class":477},[84,81436,52127],{"class":51627},[84,81438,51634],{"class":477},[84,81440,81441,81443,81445],{"class":86,"line":98},[84,81442,52471],{"class":477},[84,81444,52140],{"class":51627},[84,81446,51634],{"class":477},[84,81448,81449],{"class":86,"line":70},[84,81450,81451],{"class":477},"    const arr = [\n",[84,81453,81454],{"class":86,"line":120},[84,81455,81456],{"class":477},"      { name: '张三', salary: 10000 },\n",[84,81458,81459],{"class":86,"line":131},[84,81460,81461],{"class":477},"      { name: '李四', salary: 10000 },\n",[84,81463,81464],{"class":86,"line":145},[84,81465,81466],{"class":477},"      { name: '王五', salary: 10000 }\n",[84,81468,81469],{"class":86,"line":156},[84,81470,53436],{"class":477},[84,81472,81473],{"class":86,"line":164},[84,81474,81475],{"class":477},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[84,81477,81478],{"class":86,"line":175},[84,81479,81480],{"class":477},"    \u002F\u002F prev是累计值\n",[84,81482,81483],{"class":86,"line":185},[84,81484,81485],{"class":477},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[84,81487,81488],{"class":86,"line":195},[84,81489,81490],{"class":477},"    console.log(total)\n",[84,81492,81493],{"class":86,"line":206},[84,81494,81495],{"class":477},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[84,81497,81498],{"class":86,"line":217},[84,81499,81500],{"class":477},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[84,81502,81503],{"class":86,"line":227},[84,81504,81495],{"class":477},[84,81506,81507],{"class":86,"line":238},[84,81508,81509],{"class":477},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[84,81511,81512],{"class":86,"line":249},[84,81513,81495],{"class":477},[84,81515,81516],{"class":86,"line":262},[84,81517,81518],{"class":477},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[84,81520,81521,81523,81525],{"class":86,"line":273},[84,81522,52744],{"class":477},[84,81524,52140],{"class":51627},[84,81526,51634],{"class":477},[84,81528,81529,81531,81533],{"class":86,"line":283},[84,81530,52112],{"class":477},[84,81532,52127],{"class":51627},[84,81534,51634],{"class":477},[23239,81536,81538],{"id":81537},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[35,81540,81541],{},[64,81542],{"alt":66,"src":81543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[35,81545,81546],{},[64,81547],{"alt":66,"src":81548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[28,81550,81551],{},[31,81552,81553],{},"find()",[35,81555,81556],{},"循环查找，找到第一个就ok",[35,81558,81559],{},[39,81560,81563],{"href":81561,"rel":81562},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[43],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[75,81565,81567],{"className":50960,"code":81566,"language":50962,"meta":66,"style":66},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[81,81568,81569,81574,81579],{"__ignoreMap":66},[84,81570,81571],{"class":86,"line":87},[84,81572,81573],{"class":477},"const array1 = [5, 12, 8, 130, 44]\n",[84,81575,81576],{"class":86,"line":98},[84,81577,81578],{"class":477},"const found = array1.find((element) => element > 10)\n",[84,81580,81581],{"class":86,"line":70},[84,81582,81583],{"class":477},"console.log(found)  \u002F\u002F12\n",[35,81585,81586,81588,81589,81594,81595,81598,81599,81601,81602,81607,81608,81610,81611,81613,81614,81616,81617],{},[81,81587,81553],{}," 方法是一个",[39,81590,81593],{"href":81591,"rel":81592},"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",[43],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[81,81596,81597],{},"callbackFn"," 函数，直到 ",[81,81600,81597],{}," 返回一个",[39,81603,81606],{"href":81604,"rel":81605},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[43],"真值","。然后 ",[81,81609,81553],{}," 返回该元素并停止迭代数组。如果 ",[81,81612,81597],{}," 从未返回真值，则 ",[81,81615,81553],{}," 返回 ",[81,81618,81619],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[75,81621,81623],{"className":53394,"code":81622,"language":53396,"meta":66,"style":66},"\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",[81,81624,81625,81633,81641,81646,81651,81656,81660,81665,81670,81674,81679,81684,81688,81692,81697,81702,81706,81710,81715,81720,81725,81730,81735,81739,81744,81749,81754,81759,81763,81768,81776],{"__ignoreMap":66},[84,81626,81627,81629,81631],{"class":86,"line":87},[84,81628,1383],{"class":477},[84,81630,52127],{"class":51627},[84,81632,51634],{"class":477},[84,81634,81635,81637,81639],{"class":86,"line":98},[84,81636,52471],{"class":477},[84,81638,52140],{"class":51627},[84,81640,51634],{"class":477},[84,81642,81643],{"class":86,"line":70},[84,81644,81645],{"class":477},"    const arr = ['red', 'blue', 'green']\n",[84,81647,81648],{"class":86,"line":120},[84,81649,81650],{"class":477},"    const found = arr.find(item => item === 'pink')\n",[84,81652,81653],{"class":86,"line":131},[84,81654,81655],{"class":477},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[84,81657,81658],{"class":86,"line":145},[84,81659,2729],{"emptyLinePlaceholder":403},[84,81661,81662],{"class":86,"line":156},[84,81663,81664],{"class":477},"    \u002F\u002F 使用场景，用于查找数据\n",[84,81666,81667],{"class":86,"line":164},[84,81668,81669],{"class":477},"    const arr1 = [\n",[84,81671,81672],{"class":86,"line":175},[84,81673,79712],{"class":477},[84,81675,81676],{"class":86,"line":185},[84,81677,81678],{"class":477},"        name: '小米',\n",[84,81680,81681],{"class":86,"line":195},[84,81682,81683],{"class":477},"        price: 1999\n",[84,81685,81686],{"class":86,"line":206},[84,81687,78218],{"class":477},[84,81689,81690],{"class":86,"line":217},[84,81691,79712],{"class":477},[84,81693,81694],{"class":86,"line":227},[84,81695,81696],{"class":477},"        name: '华为',\n",[84,81698,81699],{"class":86,"line":238},[84,81700,81701],{"class":477},"        price: 3999\n",[84,81703,81704],{"class":86,"line":249},[84,81705,52725],{"class":477},[84,81707,81708],{"class":86,"line":262},[84,81709,53436],{"class":477},[84,81711,81712],{"class":86,"line":273},[84,81713,81714],{"class":477},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[84,81716,81717],{"class":86,"line":283},[84,81718,81719],{"class":477},"    \u002F\u002F const found1 = arr1.find(item => {\n",[84,81721,81722],{"class":86,"line":294},[84,81723,81724],{"class":477},"    \u002F\u002F   if (item.name === '小米') {\n",[84,81726,81727],{"class":86,"line":2028},[84,81728,81729],{"class":477},"    \u002F\u002F     return item\n",[84,81731,81732],{"class":86,"line":2057},[84,81733,81734],{"class":477},"    \u002F\u002F   }\n",[84,81736,81737],{"class":86,"line":2062},[84,81738,63616],{"class":477},[84,81740,81741],{"class":86,"line":2079},[84,81742,81743],{"class":477},"    \u002F\u002F 另一种写法\n",[84,81745,81746],{"class":86,"line":2084},[84,81747,81748],{"class":477},"    const found1 = arr1.find(item => {\n",[84,81750,81751],{"class":86,"line":2089},[84,81752,81753],{"class":477},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[84,81755,81756],{"class":86,"line":2094},[84,81757,81758],{"class":477},"      return item.name = '小米'\n",[84,81760,81761],{"class":86,"line":2108},[84,81762,33788],{"class":477},[84,81764,81765],{"class":86,"line":2113},[84,81766,81767],{"class":477},"    console.log(found1)\n",[84,81769,81770,81772,81774],{"class":86,"line":2906},[84,81771,52744],{"class":477},[84,81773,52140],{"class":51627},[84,81775,51634],{"class":477},[84,81777,81778,81780,81782],{"class":86,"line":2920},[84,81779,52112],{"class":477},[84,81781,52127],{"class":51627},[84,81783,51634],{"class":477},[35,81785,81786],{},[64,81787],{"alt":66,"src":81788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[35,81790,81791],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[28,81793,81794],{"start":98},[31,81795,81796],{},"every()返回的是布尔值",[35,81798,81799],{},[39,81800,81803],{"href":81801,"rel":81802},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[43],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[35,81805,81806],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[35,81808,81809],{},"some是只有有一个就没问题",[35,81811,81812],{},"every是必须全是才行",[75,81814,81818],{"className":81815,"code":81816,"language":81817,"meta":66,"style":66},"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",[81,81819,81820,81836,81850,81854,81863],{"__ignoreMap":66},[84,81821,81822,81824,81827,81829,81831,81834],{"class":86,"line":87},[84,81823,54775],{"class":473},[84,81825,81826],{"class":477}," isBigEnough(element, ",[84,81828,74384],{"class":473},[84,81830,12764],{"class":477},[84,81832,81833],{"class":473},"array",[84,81835,12771],{"class":477},[84,81837,81838,81841,81844,81846,81848],{"class":86,"line":98},[84,81839,81840],{"class":473},"  return",[84,81842,81843],{"class":477}," element ",[84,81845,2040],{"class":473},[84,81847,2367],{"class":94},[84,81849,1634],{"class":477},[84,81851,81852],{"class":86,"line":70},[84,81853,1905],{"class":477},[84,81855,81856,81859,81861],{"class":86,"line":120},[84,81857,81858],{"class":477},"[12, 5, 8, 130, 44].every(isBigEnough); ",[84,81860,33656],{"class":473},[84,81862,54842],{"class":477},[84,81864,81865,81868,81870],{"class":86,"line":131},[84,81866,81867],{"class":477},"[12, 54, 18, 130, 44].every(isBigEnough); ",[84,81869,33656],{"class":473},[84,81871,58266],{"class":477},[75,81873,81875],{"className":53394,"code":81874,"language":53396,"meta":66,"style":66},"\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",[81,81876,81877,81885,81893,81898,81902,81907,81912,81920],{"__ignoreMap":66},[84,81878,81879,81881,81883],{"class":86,"line":87},[84,81880,1383],{"class":477},[84,81882,52127],{"class":51627},[84,81884,51634],{"class":477},[84,81886,81887,81889,81891],{"class":86,"line":98},[84,81888,52471],{"class":477},[84,81890,52140],{"class":51627},[84,81892,51634],{"class":477},[84,81894,81895],{"class":86,"line":70},[84,81896,81897],{"class":477},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[84,81899,81900],{"class":86,"line":120},[84,81901,78648],{"class":477},[84,81903,81904],{"class":86,"line":131},[84,81905,81906],{"class":477},"    const flag = arr.every(item => item >= 10)\n",[84,81908,81909],{"class":86,"line":145},[84,81910,81911],{"class":477},"    console.log(flag)    \u002F\u002Ftrue\n",[84,81913,81914,81916,81918],{"class":86,"line":156},[84,81915,52744],{"class":477},[84,81917,52140],{"class":51627},[84,81919,51634],{"class":477},[84,81921,81922,81924,81926],{"class":86,"line":164},[84,81923,52112],{"class":477},[84,81925,52127],{"class":51627},[84,81927,51634],{"class":477},[75,81929,81931],{"className":53394,"code":81930,"language":53396,"meta":66,"style":66},"\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",[81,81932,81933,81941,81949,81953,81958,81963,81968,81976],{"__ignoreMap":66},[84,81934,81935,81937,81939],{"class":86,"line":87},[84,81936,1383],{"class":477},[84,81938,52127],{"class":51627},[84,81940,51634],{"class":477},[84,81942,81943,81945,81947],{"class":86,"line":98},[84,81944,52471],{"class":477},[84,81946,52140],{"class":51627},[84,81948,51634],{"class":477},[84,81950,81951],{"class":86,"line":70},[84,81952,81897],{"class":477},[84,81954,81955],{"class":86,"line":120},[84,81956,81957],{"class":477},"    const arr = [10, 0, 5]\n",[84,81959,81960],{"class":86,"line":131},[84,81961,81962],{"class":477},"    const flag = arr.some(item => item >= 10)\n",[84,81964,81965],{"class":86,"line":145},[84,81966,81967],{"class":477},"    console.log(flag)   \u002F\u002Ftrue\n",[84,81969,81970,81972,81974],{"class":86,"line":156},[84,81971,52744],{"class":477},[84,81973,52140],{"class":51627},[84,81975,51634],{"class":477},[84,81977,81978,81980,81982],{"class":86,"line":164},[84,81979,52112],{"class":477},[84,81981,52127],{"class":51627},[84,81983,51634],{"class":477},[23239,81985,81987],{"id":81986},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[35,81989,81990],{},[64,81991],{"alt":66,"src":81992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[75,81994,81996],{"className":50960,"code":81995,"language":50962,"meta":66,"style":66},"\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",[81,81997,81998,82008,82022,82026,82034,82048,82068,82080,82088,82095,82107,82119,82131,82143,82153,82163,82167,82175,82183,82187,82195,82207,82215,82237,82242,82247,82280,82288,82296,82300],{"__ignoreMap":66},[84,81999,82000,82002,82004,82006],{"class":86,"line":87},[84,82001,51624],{"class":477},[84,82003,51628],{"class":51627},[84,82005,51631],{"class":90},[84,82007,51634],{"class":477},[84,82009,82010,82012,82014,82016,82018,82020],{"class":86,"line":98},[84,82011,1383],{"class":477},[84,82013,50962],{"class":51627},[84,82015,51643],{"class":90},[84,82017,523],{"class":477},[84,82019,51648],{"class":104},[84,82021,51634],{"class":477},[84,82023,82024],{"class":86,"line":70},[84,82025,2729],{"emptyLinePlaceholder":403},[84,82027,82028,82030,82032],{"class":86,"line":120},[84,82029,1383],{"class":477},[84,82031,51661],{"class":51627},[84,82033,51634],{"class":477},[84,82035,82036,82038,82040,82042,82044,82046],{"class":86,"line":131},[84,82037,52471],{"class":477},[84,82039,51671],{"class":51627},[84,82041,51674],{"class":90},[84,82043,523],{"class":477},[84,82045,51679],{"class":104},[84,82047,51634],{"class":477},[84,82049,82050,82052,82054,82056,82058,82060,82062,82064,82066],{"class":86,"line":145},[84,82051,52471],{"class":477},[84,82053,51671],{"class":51627},[84,82055,15249],{"class":90},[84,82057,523],{"class":477},[84,82059,51718],{"class":104},[84,82061,51698],{"class":90},[84,82063,523],{"class":477},[84,82065,51725],{"class":104},[84,82067,51634],{"class":477},[84,82069,82070,82072,82074,82076,82078],{"class":86,"line":156},[84,82071,52471],{"class":477},[84,82073,51734],{"class":51627},[84,82075,51737],{"class":477},[84,82077,51734],{"class":51627},[84,82079,51634],{"class":477},[84,82081,82082,82084,82086],{"class":86,"line":164},[84,82083,52471],{"class":477},[84,82085,389],{"class":51627},[84,82087,51634],{"class":477},[84,82089,82090,82093],{"class":86,"line":175},[84,82091,82092],{"class":51627},"    div",[84,82094,15901],{"class":477},[84,82096,82097,82099,82101,82103,82105],{"class":86,"line":185},[84,82098,55097],{"class":94},[84,82100,51764],{"class":477},[84,82102,2052],{"class":94},[84,82104,51819],{"class":473},[84,82106,1634],{"class":477},[84,82108,82109,82111,82113,82115,82117],{"class":86,"line":195},[84,82110,55111],{"class":94},[84,82112,51764],{"class":477},[84,82114,874],{"class":94},[84,82116,51819],{"class":473},[84,82118,1634],{"class":477},[84,82120,82121,82123,82125,82127,82129],{"class":86,"line":206},[84,82122,57685],{"class":94},[84,82124,51764],{"class":477},[84,82126,874],{"class":94},[84,82128,51819],{"class":473},[84,82130,1634],{"class":477},[84,82132,82133,82135,82137,82139,82141],{"class":86,"line":217},[84,82134,65459],{"class":94},[84,82136,51764],{"class":477},[84,82138,971],{"class":94},[84,82140,51819],{"class":473},[84,82142,1634],{"class":477},[84,82144,82145,82147,82149,82151],{"class":86,"line":227},[84,82146,57612],{"class":94},[84,82148,51764],{"class":477},[84,82150,51919],{"class":94},[84,82152,1634],{"class":477},[84,82154,82155,82157,82159,82161],{"class":86,"line":238},[84,82156,55210],{"class":94},[84,82158,51764],{"class":477},[84,82160,51972],{"class":94},[84,82162,1634],{"class":477},[84,82164,82165],{"class":86,"line":249},[84,82166,2516],{"class":477},[84,82168,82169,82171,82173],{"class":86,"line":262},[84,82170,52744],{"class":477},[84,82172,389],{"class":51627},[84,82174,51634],{"class":477},[84,82176,82177,82179,82181],{"class":86,"line":273},[84,82178,52112],{"class":477},[84,82180,51661],{"class":51627},[84,82182,51634],{"class":477},[84,82184,82185],{"class":86,"line":283},[84,82186,2729],{"emptyLinePlaceholder":403},[84,82188,82189,82191,82193],{"class":86,"line":294},[84,82190,1383],{"class":477},[84,82192,52127],{"class":51627},[84,82194,51634],{"class":477},[84,82196,82197,82199,82201,82203,82205],{"class":86,"line":2028},[84,82198,52471],{"class":477},[84,82200,51938],{"class":51627},[84,82202,55640],{"class":477},[84,82204,51938],{"class":51627},[84,82206,51634],{"class":477},[84,82208,82209,82211,82213],{"class":86,"line":2057},[84,82210,52471],{"class":477},[84,82212,52140],{"class":51627},[84,82214,51634],{"class":477},[84,82216,82217,82219,82222,82224,82227,82230,82232,82235],{"class":86,"line":2062},[84,82218,11550],{"class":473},[84,82220,82221],{"class":94}," spec",[84,82223,13893],{"class":473},[84,82225,82226],{"class":477}," { size: ",[84,82228,82229],{"class":104},"'40cm*40cm'",[84,82231,55790],{"class":477},[84,82233,82234],{"class":104},"'黑色'",[84,82236,55930],{"class":477},[84,82238,82239],{"class":86,"line":2079},[84,82240,82241],{"class":328},"    \u002F\u002F const arr = Object.values(spec)\n",[84,82243,82244],{"class":86,"line":2084},[84,82245,82246],{"class":328},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[84,82248,82249,82251,82253,82255,82258,82260,82262,82265,82268,82271,82273,82275,82278],{"class":86,"line":2089},[84,82250,52734],{"class":477},[84,82252,54725],{"class":90},[84,82254,478],{"class":477},[84,82256,82257],{"class":104},"'div'",[84,82259,74575],{"class":477},[84,82261,523],{"class":473},[84,82263,82264],{"class":477}," Object.",[84,82266,82267],{"class":90},"values",[84,82269,82270],{"class":477},"(spec).",[84,82272,74549],{"class":90},[84,82274,478],{"class":477},[84,82276,82277],{"class":104},"'\u002F'",[84,82279,484],{"class":477},[84,82281,82282,82284,82286],{"class":86,"line":2094},[84,82283,52744],{"class":477},[84,82285,52140],{"class":51627},[84,82287,51634],{"class":477},[84,82289,82290,82292,82294],{"class":86,"line":2108},[84,82291,52112],{"class":477},[84,82293,52127],{"class":51627},[84,82295,51634],{"class":477},[84,82297,82298],{"class":86,"line":2113},[84,82299,2729],{"emptyLinePlaceholder":403},[84,82301,82302,82304,82306],{"class":86,"line":2906},[84,82303,52112],{"class":477},[84,82305,50962],{"class":51627},[84,82307,51634],{"class":477},[35,82309,82310],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23239,82312,82314],{"id":82313},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[35,82316,82317],{},"静态方法，将伪数组转换为真数组",[35,82319,82320],{},[64,82321],{"alt":66,"src":82322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[75,82324,82326],{"className":53394,"code":82325,"language":53396,"meta":66,"style":66},"\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",[81,82327,82328,82336,82344,82356,82368,82380,82388,82396,82401,82406,82411,82416,82424],{"__ignoreMap":66},[84,82329,82330,82332,82334],{"class":86,"line":87},[84,82331,1383],{"class":477},[84,82333,52127],{"class":51627},[84,82335,51634],{"class":477},[84,82337,82338,82340,82342],{"class":86,"line":98},[84,82339,52471],{"class":477},[84,82341,1480],{"class":51627},[84,82343,51634],{"class":477},[84,82345,82346,82348,82350,82352,82354],{"class":86,"line":70},[84,82347,51668],{"class":477},[84,82349,31],{"class":51627},[84,82351,55640],{"class":477},[84,82353,31],{"class":51627},[84,82355,51634],{"class":477},[84,82357,82358,82360,82362,82364,82366],{"class":86,"line":120},[84,82359,51668],{"class":477},[84,82361,31],{"class":51627},[84,82363,55640],{"class":477},[84,82365,31],{"class":51627},[84,82367,51634],{"class":477},[84,82369,82370,82372,82374,82376,82378],{"class":86,"line":131},[84,82371,51668],{"class":477},[84,82373,31],{"class":51627},[84,82375,55640],{"class":477},[84,82377,31],{"class":51627},[84,82379,51634],{"class":477},[84,82381,82382,82384,82386],{"class":86,"line":145},[84,82383,52744],{"class":477},[84,82385,1480],{"class":51627},[84,82387,51634],{"class":477},[84,82389,82390,82392,82394],{"class":86,"line":156},[84,82391,52471],{"class":477},[84,82393,52140],{"class":51627},[84,82395,51634],{"class":477},[84,82397,82398],{"class":86,"line":164},[84,82399,82400],{"class":477},"    const lis = document.querySelectorAll('li')\n",[84,82402,82403],{"class":86,"line":175},[84,82404,82405],{"class":477},"    const liss = Array.from(lis)\n",[84,82407,82408],{"class":86,"line":185},[84,82409,82410],{"class":477},"    liss.pop()\n",[84,82412,82413],{"class":86,"line":195},[84,82414,82415],{"class":477},"    console.log(liss)\n",[84,82417,82418,82420,82422],{"class":86,"line":206},[84,82419,52744],{"class":477},[84,82421,52140],{"class":51627},[84,82423,51634],{"class":477},[84,82425,82426,82428,82430],{"class":86,"line":217},[84,82427,52112],{"class":477},[84,82429,52127],{"class":51627},[84,82431,51634],{"class":477},[35,82433,82434],{},[64,82435],{"alt":66,"src":82436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22327,82438,82440],{"id":82439},"_41053-string","4.10.5.3 String",[35,82442,82443],{},[64,82444],{"alt":66,"src":82445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23239,82447,82449],{"id":82448},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[75,82451,82453],{"className":53394,"code":82452,"language":53396,"meta":66,"style":66},"\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",[81,82454,82455,82463,82471,82476,82481,82486,82490,82495,82500,82505,82513],{"__ignoreMap":66},[84,82456,82457,82459,82461],{"class":86,"line":87},[84,82458,1383],{"class":477},[84,82460,52127],{"class":51627},[84,82462,51634],{"class":477},[84,82464,82465,82467,82469],{"class":86,"line":98},[84,82466,52471],{"class":477},[84,82468,52140],{"class":51627},[84,82470,51634],{"class":477},[84,82472,82473],{"class":86,"line":70},[84,82474,82475],{"class":477},"    \u002F\u002F 把字符串转化为数组\n",[84,82477,82478],{"class":86,"line":120},[84,82479,82480],{"class":477},"    const str = 'pink,red'\n",[84,82482,82483],{"class":86,"line":131},[84,82484,82485],{"class":477},"    const arr = str.split(',')\n",[84,82487,82488],{"class":86,"line":145},[84,82489,80964],{"class":477},[84,82491,82492],{"class":86,"line":156},[84,82493,82494],{"class":477},"    const str1 = '2025-8-25'\n",[84,82496,82497],{"class":86,"line":164},[84,82498,82499],{"class":477},"    const arr1 = str1.split('-')\n",[84,82501,82502],{"class":86,"line":175},[84,82503,82504],{"class":477},"    console.log(arr1)\n",[84,82506,82507,82509,82511],{"class":86,"line":185},[84,82508,52744],{"class":477},[84,82510,52140],{"class":51627},[84,82512,51634],{"class":477},[84,82514,82515,82517,82519],{"class":86,"line":195},[84,82516,52112],{"class":477},[84,82518,52127],{"class":51627},[84,82520,51634],{"class":477},[23239,82522,82524],{"id":82523},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[35,82526,5510],{},[35,82528,82529],{},"substring(indexStart)",[35,82531,82532],{},"substring(indexStart, indexEnd)",[1480,82534,82535,82546,82558,82568],{},[31,82536,82537,82538,82541,82542,82545],{},"如果省略了 ",[81,82539,82540],{},"indexEnd","，则 ",[81,82543,82544],{},"substring()"," 提取字符直到字符串的末尾",[31,82547,82548,82549,82552,82553,82541,82555,82557],{},"如果 ",[81,82550,82551],{},"indexStart"," 等于 ",[81,82554,82540],{},[81,82556,82544],{}," 返回一个空字符串",[31,82559,82548,82560,82562,82563,82541,82565,82567],{},[81,82561,82551],{}," 大于 ",[81,82564,82540],{},[81,82566,82544],{}," 的效果就像交换了这两个参数一样",[31,82569,82570],{},"结束的索引号不包含想要截取的部分",[75,82572,82574],{"className":81815,"code":82573,"language":81817,"meta":66,"style":66},"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",[81,82575,82576,82588,82592,82626,82656,82660,82691,82695,82722,82752,82782,82786,82817],{"__ignoreMap":66},[84,82577,82578,82581,82583,82586],{"class":86,"line":87},[84,82579,82580],{"class":477},"const anyString ",[84,82582,523],{"class":473},[84,82584,82585],{"class":104}," \"Mozilla\"",[84,82587,1634],{"class":477},[84,82589,82590],{"class":86,"line":98},[84,82591,2729],{"emptyLinePlaceholder":403},[84,82593,82594,82597,82599,82601,82603,82606,82608,82611,82613,82615,82617,82619,82621,82623],{"class":86,"line":70},[84,82595,82596],{"class":94},"console",[84,82598,1031],{"class":477},[84,82600,58573],{"class":94},[84,82602,478],{"class":477},[84,82604,82605],{"class":94},"anyString",[84,82607,1031],{"class":477},[84,82609,82610],{"class":94},"substring",[84,82612,478],{"class":477},[84,82614,666],{"class":94},[84,82616,12764],{"class":477},[84,82618,692],{"class":94},[84,82620,75579],{"class":477},[84,82622,33656],{"class":473},[84,82624,82625],{"class":104}," 'M'\n",[84,82627,82628,82630,82632,82634,82636,82638,82640,82642,82644,82646,82648,82650,82652,82654],{"class":86,"line":120},[84,82629,82596],{"class":94},[84,82631,1031],{"class":477},[84,82633,58573],{"class":94},[84,82635,478],{"class":477},[84,82637,82605],{"class":94},[84,82639,1031],{"class":477},[84,82641,82610],{"class":94},[84,82643,478],{"class":477},[84,82645,692],{"class":94},[84,82647,12764],{"class":477},[84,82649,666],{"class":94},[84,82651,75579],{"class":477},[84,82653,33656],{"class":473},[84,82655,82625],{"class":104},[84,82657,82658],{"class":86,"line":131},[84,82659,2729],{"emptyLinePlaceholder":403},[84,82661,82662,82664,82666,82668,82670,82672,82674,82676,82678,82680,82682,82684,82686,82688],{"class":86,"line":145},[84,82663,82596],{"class":94},[84,82665,1031],{"class":477},[84,82667,58573],{"class":94},[84,82669,478],{"class":477},[84,82671,82605],{"class":94},[84,82673,1031],{"class":477},[84,82675,82610],{"class":94},[84,82677,478],{"class":477},[84,82679,666],{"class":94},[84,82681,12764],{"class":477},[84,82683,817],{"class":94},[84,82685,75579],{"class":477},[84,82687,33656],{"class":473},[84,82689,82690],{"class":104}," 'Mozill'\n",[84,82692,82693],{"class":86,"line":156},[84,82694,2729],{"emptyLinePlaceholder":403},[84,82696,82697,82699,82701,82703,82705,82707,82709,82711,82713,82715,82717,82719],{"class":86,"line":164},[84,82698,82596],{"class":94},[84,82700,1031],{"class":477},[84,82702,58573],{"class":94},[84,82704,478],{"class":477},[84,82706,82605],{"class":94},[84,82708,1031],{"class":477},[84,82710,82610],{"class":94},[84,82712,478],{"class":477},[84,82714,140],{"class":94},[84,82716,75579],{"class":477},[84,82718,33656],{"class":473},[84,82720,82721],{"class":104}," 'lla'\n",[84,82723,82724,82726,82728,82730,82732,82734,82736,82738,82740,82742,82744,82746,82748,82750],{"class":86,"line":175},[84,82725,82596],{"class":94},[84,82727,1031],{"class":477},[84,82729,58573],{"class":94},[84,82731,478],{"class":477},[84,82733,82605],{"class":94},[84,82735,1031],{"class":477},[84,82737,82610],{"class":94},[84,82739,478],{"class":477},[84,82741,140],{"class":94},[84,82743,12764],{"class":477},[84,82745,842],{"class":94},[84,82747,75635],{"class":477},[84,82749,33656],{"class":473},[84,82751,82721],{"class":104},[84,82753,82754,82756,82758,82760,82762,82764,82766,82768,82770,82772,82774,82776,82778,82780],{"class":86,"line":185},[84,82755,82596],{"class":94},[84,82757,1031],{"class":477},[84,82759,58573],{"class":94},[84,82761,478],{"class":477},[84,82763,82605],{"class":94},[84,82765,1031],{"class":477},[84,82767,82610],{"class":94},[84,82769,478],{"class":477},[84,82771,842],{"class":94},[84,82773,12764],{"class":477},[84,82775,140],{"class":94},[84,82777,75579],{"class":477},[84,82779,33656],{"class":473},[84,82781,82721],{"class":104},[84,82783,82784],{"class":86,"line":195},[84,82785,2729],{"emptyLinePlaceholder":403},[84,82787,82788,82790,82792,82794,82796,82798,82800,82802,82804,82806,82808,82810,82812,82814],{"class":86,"line":206},[84,82789,82596],{"class":94},[84,82791,1031],{"class":477},[84,82793,58573],{"class":94},[84,82795,478],{"class":477},[84,82797,82605],{"class":94},[84,82799,1031],{"class":477},[84,82801,82610],{"class":94},[84,82803,478],{"class":477},[84,82805,666],{"class":94},[84,82807,12764],{"class":477},[84,82809,842],{"class":94},[84,82811,75579],{"class":477},[84,82813,33656],{"class":473},[84,82815,82816],{"class":104}," 'Mozilla'\n",[84,82818,82819,82821,82823,82825,82827,82829,82831,82833,82835,82837,82839,82841,82843,82845],{"class":86,"line":217},[84,82820,82596],{"class":94},[84,82822,1031],{"class":477},[84,82824,58573],{"class":94},[84,82826,478],{"class":477},[84,82828,82605],{"class":94},[84,82830,1031],{"class":477},[84,82832,82610],{"class":94},[84,82834,478],{"class":477},[84,82836,666],{"class":94},[84,82838,12764],{"class":477},[84,82840,919],{"class":94},[84,82842,75579],{"class":477},[84,82844,33656],{"class":473},[84,82846,82816],{"class":104},[23239,82848,82850],{"id":82849},"_410533-startswith","4.10.5.3.3 startsWith",[35,82852,82853,82856,82857,82862,82863,82865,82866],{},[81,82854,82855],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[624,82858,82859],{},[81,82860,82861],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[81,82864,1703],{}," 或 ",[81,82867,66346],{},[75,82869,82871],{"className":77821,"code":82870,"language":77823,"meta":66,"style":66},"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",[81,82872,82873,82885,82904,82909,82929],{"__ignoreMap":66},[84,82874,82875,82877,82880,82882],{"class":86,"line":87},[84,82876,7121],{"class":473},[84,82878,82879],{"class":477}," str1 ",[84,82881,523],{"class":473},[84,82883,82884],{"class":104}," \"Saturday night plans\"\n",[84,82886,82887,82889,82891,82894,82897,82899,82902],{"class":86,"line":98},[84,82888,77858],{"class":477},[84,82890,58573],{"class":90},[84,82892,82893],{"class":477},"(str1.",[84,82895,82896],{"class":90},"startsWith",[84,82898,478],{"class":477},[84,82900,82901],{"class":104},"\"Sat\"",[84,82903,30824],{"class":477},[84,82905,82906],{"class":86,"line":70},[84,82907,82908],{"class":328},"\u002F\u002F Expected output: true\n",[84,82910,82911,82913,82915,82917,82919,82921,82923,82925,82927],{"class":86,"line":120},[84,82912,77858],{"class":477},[84,82914,58573],{"class":90},[84,82916,82893],{"class":477},[84,82918,82896],{"class":90},[84,82920,478],{"class":477},[84,82922,82901],{"class":104},[84,82924,12764],{"class":477},[84,82926,547],{"class":94},[84,82928,30824],{"class":477},[84,82930,82931],{"class":86,"line":131},[84,82932,82933],{"class":328},"\u002F\u002F Expected output: false\n",[75,82935,82937],{"className":50960,"code":82936,"language":50962,"meta":66,"style":66},"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",[81,82938,82939,82944,82949,82953,82958,82963],{"__ignoreMap":66},[84,82940,82941],{"class":86,"line":87},[84,82942,82943],{"class":477},"startsWith(searchString)\n",[84,82945,82946],{"class":86,"line":98},[84,82947,82948],{"class":477},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[84,82950,82951],{"class":86,"line":70},[84,82952,2729],{"emptyLinePlaceholder":403},[84,82954,82955],{"class":86,"line":120},[84,82956,82957],{"class":477},"const str3 = 'pink老师上课中'\n",[84,82959,82960],{"class":86,"line":131},[84,82961,82962],{"class":477},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[84,82964,82965],{"class":86,"line":145},[84,82966,82967],{"class":477},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23239,82969,82971],{"id":82970},"_410534-includes","4.10.5.3.4 includes",[35,82973,82974],{},"includes(searchString) includes(searchString, position)",[28,82976,82977],{},[31,82978,82979],{},"searchString:",[35,82981,82982,82983,82985,82986,82991,82992,82997,82998,21829,83001,83004,83005,83008],{},"一个要在 ",[81,82984,1643],{}," 中查找的字符串。",[39,82987,82990],{"href":82988,"rel":82989},"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",[43],"不能是正则表达式","。所有非正则表达式的值都会被",[39,82993,82996],{"href":82994,"rel":82995},"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",[43],"强制转换为字符串","，因此如果该参数被省略或传入 ",[81,82999,83000],{},"undefined",[81,83002,83003],{},"includes()"," 方法会在字符串中搜索 ",[81,83006,83007],{},"\"undefined\"","，这通常不是你想要的",[28,83010,83011],{"start":98},[31,83012,83013,1332],{},[81,83014,83015],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[35,83017,83018,83019,83022,83023],{},"在字符串中开始搜索 ",[81,83020,83021],{},"searchString"," 的位置。默认值为 ",[81,83024,666],{},[28,83026,83027],{"start":70},[31,83028,83029],{},"返回值：",[35,83031,83032,83033,83035,83036,83040,83041],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[81,83034,83021],{}," 为空字符串的情况），则返回 ",[624,83037,83038],{},[81,83039,1703],{}," ，否则返回 ",[624,83042,83043],{},[81,83044,66346],{},[28,83046,83047],{"start":120},[31,83048,83049],{},"异常：",[35,83051,82548,83052,14124,83054,83058],{},[81,83053,83021],{},[39,83055,83057],{"href":82988,"rel":83056},[43],"是一个正则表达式","，则会抛出",[35,83060,83061],{},"只要是有就是true，不需要非得以谁开头结尾",[75,83063,83065],{"className":77821,"code":83064,"language":77823,"meta":66,"style":66},"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",[81,83066,83067,83078,83101,83120,83140,83162,83181],{"__ignoreMap":66},[84,83068,83069,83071,83073,83075],{"class":86,"line":87},[84,83070,7121],{"class":473},[84,83072,80101],{"class":477},[84,83074,523],{"class":473},[84,83076,83077],{"class":104}," \"To be, or not to be, that is the question.\"\n",[84,83079,83080,83082,83084,83087,83090,83092,83095,83098],{"class":86,"line":98},[84,83081,77858],{"class":477},[84,83083,58573],{"class":90},[84,83085,83086],{"class":477},"(str.",[84,83088,83089],{"class":90},"includes",[84,83091,478],{"class":477},[84,83093,83094],{"class":104},"\"To be\"",[84,83096,83097],{"class":477},"))",[84,83099,83100],{"class":328},"  \u002F\u002F true\n",[84,83102,83103,83105,83107,83109,83111,83113,83116,83118],{"class":86,"line":70},[84,83104,77858],{"class":477},[84,83106,58573],{"class":90},[84,83108,83086],{"class":477},[84,83110,83089],{"class":90},[84,83112,478],{"class":477},[84,83114,83115],{"class":104},"\"question\"",[84,83117,83097],{"class":477},[84,83119,83100],{"class":328},[84,83121,83122,83124,83126,83128,83130,83132,83135,83137],{"class":86,"line":120},[84,83123,77858],{"class":477},[84,83125,58573],{"class":90},[84,83127,83086],{"class":477},[84,83129,83089],{"class":90},[84,83131,478],{"class":477},[84,83133,83134],{"class":104},"\"nonexistent\"",[84,83136,83097],{"class":477},[84,83138,83139],{"class":328},"  \u002F\u002F false\n",[84,83141,83142,83144,83146,83148,83150,83152,83154,83156,83158,83160],{"class":86,"line":131},[84,83143,77858],{"class":477},[84,83145,58573],{"class":90},[84,83147,83086],{"class":477},[84,83149,83089],{"class":90},[84,83151,478],{"class":477},[84,83153,83094],{"class":104},[84,83155,12764],{"class":477},[84,83157,692],{"class":94},[84,83159,83097],{"class":477},[84,83161,83139],{"class":328},[84,83163,83164,83166,83168,83170,83172,83174,83177,83179],{"class":86,"line":145},[84,83165,77858],{"class":477},[84,83167,58573],{"class":90},[84,83169,83086],{"class":477},[84,83171,83089],{"class":90},[84,83173,478],{"class":477},[84,83175,83176],{"class":104},"\"TO BE\"",[84,83178,83097],{"class":477},[84,83180,83139],{"class":328},[84,83182,83183,83185,83187,83189,83191,83193,83195,83197],{"class":86,"line":156},[84,83184,77858],{"class":477},[84,83186,58573],{"class":90},[84,83188,83086],{"class":477},[84,83190,83089],{"class":90},[84,83192,478],{"class":477},[84,83194,7981],{"class":104},[84,83196,83097],{"class":477},[84,83198,83100],{"class":328},[23239,83200,83202],{"id":83201},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[75,83204,83206],{"className":53394,"code":83205,"language":53396,"meta":66,"style":66},"\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",[81,83207,83208,83216,83224,83229,83234,83239,83244,83249,83257],{"__ignoreMap":66},[84,83209,83210,83212,83214],{"class":86,"line":87},[84,83211,1383],{"class":477},[84,83213,52127],{"class":51627},[84,83215,51634],{"class":477},[84,83217,83218,83220,83222],{"class":86,"line":98},[84,83219,52471],{"class":477},[84,83221,52140],{"class":51627},[84,83223,51634],{"class":477},[84,83225,83226],{"class":86,"line":70},[84,83227,83228],{"class":477},"    const num = 10\n",[84,83230,83231],{"class":86,"line":120},[84,83232,83233],{"class":477},"    \u002F\u002F 强制转换\n",[84,83235,83236],{"class":86,"line":131},[84,83237,83238],{"class":477},"    console.log(String(num))\n",[84,83240,83241],{"class":86,"line":145},[84,83242,83243],{"class":477},"    \u002F\u002F toString()方法转换\n",[84,83245,83246],{"class":86,"line":156},[84,83247,83248],{"class":477},"    console.log(num.toString())\n",[84,83250,83251,83253,83255],{"class":86,"line":164},[84,83252,52744],{"class":477},[84,83254,52140],{"class":51627},[84,83256,51634],{"class":477},[84,83258,83259,83261,83263],{"class":86,"line":175},[84,83260,52112],{"class":477},[84,83262,52127],{"class":51627},[84,83264,51634],{"class":477},[23239,83266,83268],{"id":83267},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[35,83270,83271],{},[64,83272],{"alt":66,"src":83273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[75,83275,83277],{"className":50960,"code":83276,"language":50962,"meta":66,"style":66},"\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",[81,83278,83279,83289,83303,83307,83315,83329,83349,83361,83369,83373,83381,83393,83401,83413,83418,83423,83428,83475,83491,83499,83507,83511],{"__ignoreMap":66},[84,83280,83281,83283,83285,83287],{"class":86,"line":87},[84,83282,51624],{"class":477},[84,83284,51628],{"class":51627},[84,83286,51631],{"class":90},[84,83288,51634],{"class":477},[84,83290,83291,83293,83295,83297,83299,83301],{"class":86,"line":98},[84,83292,1383],{"class":477},[84,83294,50962],{"class":51627},[84,83296,51643],{"class":90},[84,83298,523],{"class":477},[84,83300,51648],{"class":104},[84,83302,51634],{"class":477},[84,83304,83305],{"class":86,"line":70},[84,83306,2729],{"emptyLinePlaceholder":403},[84,83308,83309,83311,83313],{"class":86,"line":120},[84,83310,1383],{"class":477},[84,83312,51661],{"class":51627},[84,83314,51634],{"class":477},[84,83316,83317,83319,83321,83323,83325,83327],{"class":86,"line":131},[84,83318,52471],{"class":477},[84,83320,51671],{"class":51627},[84,83322,51674],{"class":90},[84,83324,523],{"class":477},[84,83326,51679],{"class":104},[84,83328,51634],{"class":477},[84,83330,83331,83333,83335,83337,83339,83341,83343,83345,83347],{"class":86,"line":145},[84,83332,52471],{"class":477},[84,83334,51671],{"class":51627},[84,83336,15249],{"class":90},[84,83338,523],{"class":477},[84,83340,51718],{"class":104},[84,83342,51698],{"class":90},[84,83344,523],{"class":477},[84,83346,51725],{"class":104},[84,83348,51634],{"class":477},[84,83350,83351,83353,83355,83357,83359],{"class":86,"line":156},[84,83352,52471],{"class":477},[84,83354,51734],{"class":51627},[84,83356,51737],{"class":477},[84,83358,51734],{"class":51627},[84,83360,51634],{"class":477},[84,83362,83363,83365,83367],{"class":86,"line":164},[84,83364,52112],{"class":477},[84,83366,51661],{"class":51627},[84,83368,51634],{"class":477},[84,83370,83371],{"class":86,"line":175},[84,83372,2729],{"emptyLinePlaceholder":403},[84,83374,83375,83377,83379],{"class":86,"line":185},[84,83376,1383],{"class":477},[84,83378,52127],{"class":51627},[84,83380,51634],{"class":477},[84,83382,83383,83385,83387,83389,83391],{"class":86,"line":195},[84,83384,52471],{"class":477},[84,83386,51938],{"class":51627},[84,83388,55640],{"class":477},[84,83390,51938],{"class":51627},[84,83392,51634],{"class":477},[84,83394,83395,83397,83399],{"class":86,"line":206},[84,83396,52471],{"class":477},[84,83398,52140],{"class":51627},[84,83400,51634],{"class":477},[84,83402,83403,83405,83408,83410],{"class":86,"line":217},[84,83404,11550],{"class":473},[84,83406,83407],{"class":94}," gift",[84,83409,13893],{"class":473},[84,83411,83412],{"class":104}," '50g的茶叶，清洗球'\n",[84,83414,83415],{"class":86,"line":227},[84,83416,83417],{"class":328},"    \u002F\u002F 1.把字符串拆分为数组\n",[84,83419,83420],{"class":86,"line":238},[84,83421,83422],{"class":328},"    \u002F\u002F console.log(gift.split(','))\n",[84,83424,83425],{"class":86,"line":249},[84,83426,83427],{"class":328},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[84,83429,83430,83432,83434,83436,83439,83442,83444,83447,83449,83451,83453,83455,83457,83460,83462,83465,83467,83469,83471,83473],{"class":86,"line":262},[84,83431,11550],{"class":473},[84,83433,74245],{"class":94},[84,83435,13893],{"class":473},[84,83437,83438],{"class":477}," gift.",[84,83440,83441],{"class":90},"split",[84,83443,478],{"class":477},[84,83445,83446],{"class":104},"'，'",[84,83448,31153],{"class":477},[84,83450,74370],{"class":90},[84,83452,478],{"class":477},[84,83454,80121],{"class":5545},[84,83456,80124],{"class":473},[84,83458,83459],{"class":104}," `\u003Cspan>【赠品】${",[84,83461,80121],{"class":477},[84,83463,83464],{"class":104},"}\u003C\u002Fspan>\u003Cbr>`",[84,83466,31153],{"class":477},[84,83468,74549],{"class":90},[84,83470,478],{"class":477},[84,83472,74554],{"class":104},[84,83474,484],{"class":477},[84,83476,83477,83479,83481,83483,83485,83487,83489],{"class":86,"line":273},[84,83478,52734],{"class":477},[84,83480,54725],{"class":90},[84,83482,478],{"class":477},[84,83484,82257],{"class":104},[84,83486,74575],{"class":477},[84,83488,523],{"class":473},[84,83490,74311],{"class":477},[84,83492,83493,83495,83497],{"class":86,"line":283},[84,83494,52744],{"class":477},[84,83496,52140],{"class":51627},[84,83498,51634],{"class":477},[84,83500,83501,83503,83505],{"class":86,"line":294},[84,83502,52112],{"class":477},[84,83504,52127],{"class":51627},[84,83506,51634],{"class":477},[84,83508,83509],{"class":86,"line":2028},[84,83510,2729],{"emptyLinePlaceholder":403},[84,83512,83513,83515,83517],{"class":86,"line":2057},[84,83514,52112],{"class":477},[84,83516,50962],{"class":51627},[84,83518,51634],{"class":477},[22327,83520,83522],{"id":83521},"_41054-number","4.10.5.4 Number",[35,83524,83525],{},[64,83526],{"alt":66,"src":83527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[35,83529,83530],{},"整数也可以进行toFixed来保留小数",[35,83532,83533],{},"比如：",[35,83535,83536],{},"const price=10",[35,83538,83539],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22327,83541,83543],{"id":83542},"_41055-购物车展示","4.10.5.5 购物车展示",[35,83545,83546],{},[64,83547],{"alt":66,"src":83548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[75,83550,83552],{"className":50960,"code":83551,"language":50962,"meta":66,"style":66},"\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",[81,83553,83554,83564,83578,83582,83590,83604,83624,83636,83644,83650,83660,83670,83680,83684,83688,83694,83706,83720,83724,83728,83734,83746,83762,83772,83788,83792,83796,83802,83812,83822,83826,83830,83838,83850,83862,83874,83878,83882,83890,83902,83906,83910,83921,83931,83943,83955,83965,83969,83973,83981,83990,84002,84012,84022,84026,84030,84038,84047,84054,84064,84076,84080,84084,84093,84103,84114,84126,84138,84142,84146,84155,84165,84176,84180,84184,84190,84202,84214,84224,84234,84252,84264,84268,84272,84281,84293,84303,84313,84325,84329,84337,84345,84349,84357,84371,84379,84393,84421,84429,84437,84447,84451,84459,84467,84476,84484,84493,84503,84507,84511,84519,84527,84536,84544,84552,84565,84569,84573,84581,84589,84598,84606,84614,84629,84633,84637,84645,84653,84662,84670,84678,84692,84700,84704,84708,84713,84739,84744,84781,84786,84809,84814,84868,84873,84909,84913,84919,84924,84933,84947,84956,84975,84984,84994,84999,85004,85017,85022,85076,85102,85110,85118,85122],{"__ignoreMap":66},[84,83555,83556,83558,83560,83562],{"class":86,"line":87},[84,83557,51624],{"class":477},[84,83559,51628],{"class":51627},[84,83561,51631],{"class":90},[84,83563,51634],{"class":477},[84,83565,83566,83568,83570,83572,83574,83576],{"class":86,"line":98},[84,83567,1383],{"class":477},[84,83569,50962],{"class":51627},[84,83571,51643],{"class":90},[84,83573,523],{"class":477},[84,83575,51648],{"class":104},[84,83577,51634],{"class":477},[84,83579,83580],{"class":86,"line":70},[84,83581,2729],{"emptyLinePlaceholder":403},[84,83583,83584,83586,83588],{"class":86,"line":120},[84,83585,1383],{"class":477},[84,83587,51661],{"class":51627},[84,83589,51634],{"class":477},[84,83591,83592,83594,83596,83598,83600,83602],{"class":86,"line":131},[84,83593,52471],{"class":477},[84,83595,51671],{"class":51627},[84,83597,51674],{"class":90},[84,83599,523],{"class":477},[84,83601,51679],{"class":104},[84,83603,51634],{"class":477},[84,83605,83606,83608,83610,83612,83614,83616,83618,83620,83622],{"class":86,"line":145},[84,83607,52471],{"class":477},[84,83609,51671],{"class":51627},[84,83611,15249],{"class":90},[84,83613,523],{"class":477},[84,83615,51718],{"class":104},[84,83617,51698],{"class":90},[84,83619,523],{"class":477},[84,83621,51725],{"class":104},[84,83623,51634],{"class":477},[84,83625,83626,83628,83630,83632,83634],{"class":86,"line":156},[84,83627,52471],{"class":477},[84,83629,51734],{"class":51627},[84,83631,51737],{"class":477},[84,83633,51734],{"class":51627},[84,83635,51634],{"class":477},[84,83637,83638,83640,83642],{"class":86,"line":164},[84,83639,52471],{"class":477},[84,83641,389],{"class":51627},[84,83643,51634],{"class":477},[84,83645,83646,83648],{"class":86,"line":175},[84,83647,6732],{"class":51627},[84,83649,15901],{"class":477},[84,83651,83652,83654,83656,83658],{"class":86,"line":185},[84,83653,55021],{"class":94},[84,83655,51764],{"class":477},[84,83657,666],{"class":94},[84,83659,1634],{"class":477},[84,83661,83662,83664,83666,83668],{"class":86,"line":195},[84,83663,55032],{"class":94},[84,83665,51764],{"class":477},[84,83667,666],{"class":94},[84,83669,1634],{"class":477},[84,83671,83672,83674,83676,83678],{"class":86,"line":206},[84,83673,72922],{"class":94},[84,83675,51764],{"class":477},[84,83677,60831],{"class":94},[84,83679,1634],{"class":477},[84,83681,83682],{"class":86,"line":217},[84,83683,2516],{"class":477},[84,83685,83686],{"class":86,"line":227},[84,83687,2729],{"emptyLinePlaceholder":403},[84,83689,83690,83692],{"class":86,"line":238},[84,83691,62449],{"class":90},[84,83693,15901],{"class":477},[84,83695,83696,83698,83700,83702,83704],{"class":86,"line":249},[84,83697,55097],{"class":94},[84,83699,51764],{"class":477},[84,83701,78900],{"class":94},[84,83703,51819],{"class":473},[84,83705,1634],{"class":477},[84,83707,83708,83710,83712,83714,83716,83718],{"class":86,"line":262},[84,83709,55032],{"class":94},[84,83711,51764],{"class":477},[84,83713,784],{"class":94},[84,83715,51819],{"class":473},[84,83717,51883],{"class":94},[84,83719,1634],{"class":477},[84,83721,83722],{"class":86,"line":273},[84,83723,2516],{"class":477},[84,83725,83726],{"class":86,"line":283},[84,83727,2729],{"emptyLinePlaceholder":403},[84,83729,83730,83732],{"class":86,"line":294},[84,83731,78951],{"class":90},[84,83733,15901],{"class":477},[84,83735,83736,83738,83740,83742,83744],{"class":86,"line":2028},[84,83737,55021],{"class":94},[84,83739,51764],{"class":477},[84,83741,1048],{"class":94},[84,83743,51819],{"class":473},[84,83745,1634],{"class":477},[84,83747,83748,83750,83752,83754,83756,83758,83760],{"class":86,"line":2057},[84,83749,62186],{"class":94},[84,83751,51764],{"class":477},[84,83753,28448],{"class":94},[84,83755,79006],{"class":94},[84,83757,79009],{"class":94},[84,83759,1168],{"class":473},[84,83761,1634],{"class":477},[84,83763,83764,83766,83768,83770],{"class":86,"line":2062},[84,83765,55335],{"class":94},[84,83767,51764],{"class":477},[84,83769,51804],{"class":94},[84,83771,1634],{"class":477},[84,83773,83774,83776,83778,83780,83782,83784,83786],{"class":86,"line":2079},[84,83775,62303],{"class":94},[84,83777,51764],{"class":477},[84,83779,692],{"class":94},[84,83781,51819],{"class":473},[84,83783,51848],{"class":94},[84,83785,62570],{"class":94},[84,83787,1634],{"class":477},[84,83789,83790],{"class":86,"line":2084},[84,83791,2516],{"class":477},[84,83793,83794],{"class":86,"line":2089},[84,83795,2729],{"emptyLinePlaceholder":403},[84,83797,83798,83800],{"class":86,"line":2094},[84,83799,79069],{"class":90},[84,83801,15901],{"class":477},[84,83803,83804,83806,83808,83810],{"class":86,"line":2108},[84,83805,62351],{"class":94},[84,83807,51764],{"class":477},[84,83809,62356],{"class":94},[84,83811,1634],{"class":477},[84,83813,83814,83816,83818,83820],{"class":86,"line":2113},[84,83815,55210],{"class":94},[84,83817,51764],{"class":477},[84,83819,62144],{"class":94},[84,83821,1634],{"class":477},[84,83823,83824],{"class":86,"line":2906},[84,83825,2516],{"class":477},[84,83827,83828],{"class":86,"line":2920},[84,83829,2729],{"emptyLinePlaceholder":403},[84,83831,83832,83834,83836],{"class":86,"line":2928},[84,83833,78951],{"class":90},[84,83835,55941],{"class":51627},[84,83837,15901],{"class":477},[84,83839,83840,83842,83844,83846,83848],{"class":86,"line":2933},[84,83841,55097],{"class":94},[84,83843,51764],{"class":477},[84,83845,1085],{"class":94},[84,83847,51819],{"class":473},[84,83849,1634],{"class":477},[84,83851,83852,83854,83856,83858,83860],{"class":86,"line":2939},[84,83853,55111],{"class":94},[84,83855,51764],{"class":477},[84,83857,1085],{"class":94},[84,83859,51819],{"class":473},[84,83861,1634],{"class":477},[84,83863,83864,83866,83868,83870,83872],{"class":86,"line":2945},[84,83865,62076],{"class":94},[84,83867,51764],{"class":477},[84,83869,792],{"class":94},[84,83871,51819],{"class":473},[84,83873,1634],{"class":477},[84,83875,83876],{"class":86,"line":2950},[84,83877,2516],{"class":477},[84,83879,83880],{"class":86,"line":8277},[84,83881,2729],{"emptyLinePlaceholder":403},[84,83883,83884,83886,83888],{"class":86,"line":8301},[84,83885,78951],{"class":90},[84,83887,62630],{"class":90},[84,83889,15901],{"class":477},[84,83891,83892,83894,83896,83898,83900],{"class":86,"line":8306},[84,83893,55097],{"class":94},[84,83895,51764],{"class":477},[84,83897,2052],{"class":94},[84,83899,51819],{"class":473},[84,83901,1634],{"class":477},[84,83903,83904],{"class":86,"line":8312},[84,83905,2516],{"class":477},[84,83907,83908],{"class":86,"line":8339},[84,83909,2729],{"emptyLinePlaceholder":403},[84,83911,83912,83914,83916,83919],{"class":86,"line":8344},[84,83913,78951],{"class":90},[84,83915,62630],{"class":90},[84,83917,83918],{"class":90}," .tag",[84,83920,15901],{"class":477},[84,83922,83923,83925,83927,83929],{"class":86,"line":8350},[84,83924,55335],{"class":94},[84,83926,51764],{"class":477},[84,83928,61195],{"class":94},[84,83930,1634],{"class":477},[84,83932,83933,83935,83937,83939,83941],{"class":86,"line":8362},[84,83934,55021],{"class":94},[84,83936,51764],{"class":477},[84,83938,553],{"class":94},[84,83940,51819],{"class":473},[84,83942,1634],{"class":477},[84,83944,83945,83947,83949,83951,83953],{"class":86,"line":8374},[84,83946,55248],{"class":94},[84,83948,51764],{"class":477},[84,83950,971],{"class":94},[84,83952,51819],{"class":473},[84,83954,1634],{"class":477},[84,83956,83957,83959,83961,83963],{"class":86,"line":8386},[84,83958,57742],{"class":94},[84,83960,51764],{"class":477},[84,83962,62396],{"class":94},[84,83964,1634],{"class":477},[84,83966,83967],{"class":86,"line":10045},[84,83968,2516],{"class":477},[84,83970,83971],{"class":86,"line":10070},[84,83972,2729],{"emptyLinePlaceholder":403},[84,83974,83975,83977,83979],{"class":86,"line":10093},[84,83976,78951],{"class":90},[84,83978,79243],{"class":90},[84,83980,31793],{"class":477},[84,83982,83983,83985,83988],{"class":86,"line":10117},[84,83984,78951],{"class":90},[84,83986,83987],{"class":90}," .sub-total",[84,83989,15901],{"class":477},[84,83991,83992,83994,83996,83998,84000],{"class":86,"line":10122},[84,83993,55248],{"class":94},[84,83995,51764],{"class":477},[84,83997,1123],{"class":94},[84,83999,51819],{"class":473},[84,84001,1634],{"class":477},[84,84003,84004,84006,84008,84010],{"class":86,"line":10127},[84,84005,57742],{"class":94},[84,84007,51764],{"class":477},[84,84009,79266],{"class":94},[84,84011,1634],{"class":477},[84,84013,84014,84016,84018,84020],{"class":86,"line":10132},[84,84015,62163],{"class":94},[84,84017,51764],{"class":477},[84,84019,692],{"class":94},[84,84021,1634],{"class":477},[84,84023,84024],{"class":86,"line":10141},[84,84025,2516],{"class":477},[84,84027,84028],{"class":86,"line":10146},[84,84029,2729],{"emptyLinePlaceholder":403},[84,84031,84032,84034,84036],{"class":86,"line":10152},[84,84033,78951],{"class":90},[84,84035,79283],{"class":90},[84,84037,31793],{"class":477},[84,84039,84040,84042,84045],{"class":86,"line":10173},[84,84041,78951],{"class":90},[84,84043,84044],{"class":90}," .sub-total::before",[84,84046,31793],{"class":477},[84,84048,84049,84052],{"class":86,"line":10179},[84,84050,84051],{"class":90},"    .amount::before",[84,84053,15901],{"class":477},[84,84055,84056,84058,84060,84062],{"class":86,"line":10193},[84,84057,79290],{"class":94},[84,84059,51764],{"class":477},[84,84061,79295],{"class":104},[84,84063,1634],{"class":477},[84,84065,84066,84068,84070,84072,84074],{"class":86,"line":10199},[84,84067,55248],{"class":94},[84,84069,51764],{"class":477},[84,84071,971],{"class":94},[84,84073,51819],{"class":473},[84,84075,1634],{"class":477},[84,84077,84078],{"class":86,"line":10226},[84,84079,2516],{"class":477},[84,84081,84082],{"class":86,"line":10235},[84,84083,2729],{"emptyLinePlaceholder":403},[84,84085,84086,84088,84091],{"class":86,"line":10241},[84,84087,78951],{"class":90},[84,84089,84090],{"class":90}," .spec",[84,84092,15901],{"class":477},[84,84094,84095,84097,84099,84101],{"class":86,"line":10249},[84,84096,62163],{"class":94},[84,84098,51764],{"class":477},[84,84100,553],{"class":94},[84,84102,1634],{"class":477},[84,84104,84105,84107,84109,84112],{"class":86,"line":10254},[84,84106,57742],{"class":94},[84,84108,51764],{"class":477},[84,84110,84111],{"class":94},"#888",[84,84113,1634],{"class":477},[84,84115,84116,84118,84120,84122,84124],{"class":86,"line":16933},[84,84117,55248],{"class":94},[84,84119,51764],{"class":477},[84,84121,1022],{"class":94},[84,84123,51819],{"class":473},[84,84125,1634],{"class":477},[84,84127,84128,84130,84132,84134,84136],{"class":86,"line":16939},[84,84129,62326],{"class":94},[84,84131,51764],{"class":477},[84,84133,1173],{"class":94},[84,84135,51819],{"class":473},[84,84137,1634],{"class":477},[84,84139,84140],{"class":86,"line":16962},[84,84141,2516],{"class":477},[84,84143,84144],{"class":86,"line":16968},[84,84145,2729],{"emptyLinePlaceholder":403},[84,84147,84148,84150,84153],{"class":86,"line":16991},[84,84149,78951],{"class":90},[84,84151,84152],{"class":90}," .count",[84,84154,15901],{"class":477},[84,84156,84157,84159,84161,84163],{"class":86,"line":17005},[84,84158,62163],{"class":94},[84,84160,51764],{"class":477},[84,84162,692],{"class":94},[84,84164,1634],{"class":477},[84,84166,84167,84169,84171,84174],{"class":86,"line":17025},[84,84168,57742],{"class":94},[84,84170,51764],{"class":477},[84,84172,84173],{"class":94},"#aaa",[84,84175,1634],{"class":477},[84,84177,84178],{"class":86,"line":17031},[84,84179,2516],{"class":477},[84,84181,84182],{"class":86,"line":17042},[84,84183,2729],{"emptyLinePlaceholder":403},[84,84185,84186,84188],{"class":86,"line":17065},[84,84187,72801],{"class":90},[84,84189,15901],{"class":477},[84,84191,84192,84194,84196,84198,84200],{"class":86,"line":17087},[84,84193,55097],{"class":94},[84,84195,51764],{"class":477},[84,84197,78900],{"class":94},[84,84199,51819],{"class":473},[84,84201,1634],{"class":477},[84,84203,84204,84206,84208,84210,84212],{"class":86,"line":17092},[84,84205,55032],{"class":94},[84,84207,51764],{"class":477},[84,84209,666],{"class":94},[84,84211,51883],{"class":94},[84,84213,1634],{"class":477},[84,84215,84216,84218,84220,84222],{"class":86,"line":17098},[84,84217,55335],{"class":94},[84,84219,51764],{"class":477},[84,84221,51804],{"class":94},[84,84223,1634],{"class":477},[84,84225,84226,84228,84230,84232],{"class":86,"line":17112},[84,84227,55346],{"class":94},[84,84229,51764],{"class":477},[84,84231,51907],{"class":94},[84,84233,1634],{"class":477},[84,84235,84236,84239,84241,84243,84245,84247,84250],{"class":86,"line":17125},[84,84237,84238],{"class":94},"      border-top",[84,84240,51764],{"class":477},[84,84242,692],{"class":94},[84,84244,51819],{"class":473},[84,84246,51848],{"class":94},[84,84248,84249],{"class":94}," #4e4e4e",[84,84251,1634],{"class":477},[84,84253,84254,84256,84258,84260,84262],{"class":86,"line":17130},[84,84255,55021],{"class":94},[84,84257,51764],{"class":477},[84,84259,1173],{"class":94},[84,84261,51819],{"class":473},[84,84263,1634],{"class":477},[84,84265,84266],{"class":86,"line":17144},[84,84267,2516],{"class":477},[84,84269,84270],{"class":86,"line":17149},[84,84271,2729],{"emptyLinePlaceholder":403},[84,84273,84274,84276,84279],{"class":86,"line":17155},[84,84275,72801],{"class":90},[84,84277,84278],{"class":90}," .amount",[84,84280,15901],{"class":477},[84,84282,84283,84285,84287,84289,84291],{"class":86,"line":17160},[84,84284,55248],{"class":94},[84,84286,51764],{"class":477},[84,84288,1123],{"class":94},[84,84290,51819],{"class":473},[84,84292,1634],{"class":477},[84,84294,84295,84297,84299,84301],{"class":86,"line":17174},[84,84296,57742],{"class":94},[84,84298,51764],{"class":477},[84,84300,79266],{"class":94},[84,84302,1634],{"class":477},[84,84304,84305,84307,84309,84311],{"class":86,"line":17179},[84,84306,62660],{"class":94},[84,84308,51764],{"class":477},[84,84310,51816],{"class":94},[84,84312,1634],{"class":477},[84,84314,84315,84317,84319,84321,84323],{"class":86,"line":17184},[84,84316,62076],{"class":94},[84,84318,51764],{"class":477},[84,84320,1129],{"class":94},[84,84322,51819],{"class":473},[84,84324,1634],{"class":477},[84,84326,84327],{"class":86,"line":17198},[84,84328,2516],{"class":477},[84,84330,84331,84333,84335],{"class":86,"line":17210},[84,84332,52744],{"class":477},[84,84334,389],{"class":51627},[84,84336,51634],{"class":477},[84,84338,84339,84341,84343],{"class":86,"line":17215},[84,84340,52112],{"class":477},[84,84342,51661],{"class":51627},[84,84344,51634],{"class":477},[84,84346,84347],{"class":86,"line":17228},[84,84348,2729],{"emptyLinePlaceholder":403},[84,84350,84351,84353,84355],{"class":86,"line":17233},[84,84352,1383],{"class":477},[84,84354,52127],{"class":51627},[84,84356,51634],{"class":477},[84,84358,84359,84361,84363,84365,84367,84369],{"class":86,"line":17238},[84,84360,52471],{"class":477},[84,84362,51938],{"class":51627},[84,84364,53813],{"class":90},[84,84366,523],{"class":477},[84,84368,62934],{"class":104},[84,84370,51634],{"class":477},[84,84372,84373,84375,84377],{"class":86,"line":17243},[84,84374,52744],{"class":477},[84,84376,51938],{"class":51627},[84,84378,51634],{"class":477},[84,84380,84381,84383,84385,84387,84389,84391],{"class":86,"line":17256},[84,84382,52471],{"class":477},[84,84384,51938],{"class":51627},[84,84386,53813],{"class":90},[84,84388,523],{"class":477},[84,84390,62906],{"class":104},[84,84392,51634],{"class":477},[84,84394,84395,84397,84399,84402,84404,84406,84408,84411,84413,84415,84417,84419],{"class":86,"line":17261},[84,84396,51668],{"class":477},[84,84398,51938],{"class":51627},[84,84400,84401],{"class":477},">合计：\u003C",[84,84403,84],{"class":51627},[84,84405,53813],{"class":90},[84,84407,523],{"class":477},[84,84409,84410],{"class":104},"\"amount\"",[84,84412,55640],{"class":477},[84,84414,84],{"class":51627},[84,84416,55640],{"class":477},[84,84418,51938],{"class":51627},[84,84420,51634],{"class":477},[84,84422,84423,84425,84427],{"class":86,"line":32960},[84,84424,52744],{"class":477},[84,84426,51938],{"class":51627},[84,84428,51634],{"class":477},[84,84430,84431,84433,84435],{"class":86,"line":32966},[84,84432,52471],{"class":477},[84,84434,52140],{"class":51627},[84,84436,51634],{"class":477},[84,84438,84439,84441,84443,84445],{"class":86,"line":32972},[84,84440,11550],{"class":473},[84,84442,79703],{"class":94},[84,84444,13893],{"class":473},[84,84446,55773],{"class":477},[84,84448,84449],{"class":86,"line":32978},[84,84450,79712],{"class":477},[84,84452,84453,84455,84457],{"class":86,"line":32984},[84,84454,79717],{"class":477},[84,84456,79720],{"class":104},[84,84458,31793],{"class":477},[84,84460,84461,84463,84465],{"class":86,"line":32995},[84,84462,79727],{"class":477},[84,84464,79730],{"class":104},[84,84466,31793],{"class":477},[84,84468,84469,84471,84474],{"class":86,"line":33001},[84,84470,79737],{"class":477},[84,84472,84473],{"class":94},"289.9",[84,84475,31793],{"class":477},[84,84477,84478,84480,84482],{"class":86,"line":33021},[84,84479,79747],{"class":477},[84,84481,79750],{"class":104},[84,84483,31793],{"class":477},[84,84485,84486,84489,84491],{"class":86,"line":33027},[84,84487,84488],{"class":477},"        count: ",[84,84490,553],{"class":94},[84,84492,31793],{"class":477},[84,84494,84495,84498,84501],{"class":86,"line":33038},[84,84496,84497],{"class":477},"        spec: { color: ",[84,84499,84500],{"class":104},"'白色'",[84,84502,55930],{"class":477},[84,84504,84505],{"class":86,"line":33044},[84,84506,78218],{"class":477},[84,84508,84509],{"class":86,"line":33050},[84,84510,79712],{"class":477},[84,84512,84513,84515,84517],{"class":86,"line":33056},[84,84514,79717],{"class":477},[84,84516,79811],{"class":104},[84,84518,31793],{"class":477},[84,84520,84521,84523,84525],{"class":86,"line":33062},[84,84522,79727],{"class":477},[84,84524,79820],{"class":104},[84,84526,31793],{"class":477},[84,84528,84529,84531,84534],{"class":86,"line":33068},[84,84530,79737],{"class":477},[84,84532,84533],{"class":94},"109.8",[84,84535,31793],{"class":477},[84,84537,84538,84540,84542],{"class":86,"line":33074},[84,84539,79747],{"class":477},[84,84541,79838],{"class":104},[84,84543,31793],{"class":477},[84,84545,84546,84548,84550],{"class":86,"line":33080},[84,84547,84488],{"class":477},[84,84549,547],{"class":94},[84,84551,31793],{"class":477},[84,84553,84554,84557,84559,84561,84563],{"class":86,"line":33100},[84,84555,84556],{"class":477},"        spec: { size: ",[84,84558,82229],{"class":104},[84,84560,55790],{"class":477},[84,84562,82234],{"class":104},[84,84564,55930],{"class":477},[84,84566,84567],{"class":86,"line":33106},[84,84568,78218],{"class":477},[84,84570,84571],{"class":86,"line":33122},[84,84572,79712],{"class":477},[84,84574,84575,84577,84579],{"class":86,"line":33128},[84,84576,79717],{"class":477},[84,84578,79855],{"class":104},[84,84580,31793],{"class":477},[84,84582,84583,84585,84587],{"class":86,"line":33142},[84,84584,79727],{"class":477},[84,84586,79864],{"class":104},[84,84588,31793],{"class":477},[84,84590,84591,84593,84596],{"class":86,"line":33148},[84,84592,79737],{"class":477},[84,84594,84595],{"class":94},"488",[84,84597,31793],{"class":477},[84,84599,84600,84602,84604],{"class":86,"line":33163},[84,84601,79747],{"class":477},[84,84603,79882],{"class":104},[84,84605,31793],{"class":477},[84,84607,84608,84610,84612],{"class":86,"line":33169},[84,84609,84488],{"class":477},[84,84611,692],{"class":94},[84,84613,31793],{"class":477},[84,84615,84616,84618,84621,84624,84627],{"class":86,"line":33178},[84,84617,84497],{"class":477},[84,84619,84620],{"class":104},"'青色'",[84,84622,84623],{"class":477},", sum: ",[84,84625,84626],{"class":104},"'一大四小'",[84,84628,55930],{"class":477},[84,84630,84631],{"class":86,"line":33184},[84,84632,78218],{"class":477},[84,84634,84635],{"class":86,"line":33193},[84,84636,79712],{"class":477},[84,84638,84639,84641,84643],{"class":86,"line":33199},[84,84640,79717],{"class":477},[84,84642,79899],{"class":104},[84,84644,31793],{"class":477},[84,84646,84647,84649,84651],{"class":86,"line":33205},[84,84648,79727],{"class":477},[84,84650,79908],{"class":104},[84,84652,31793],{"class":477},[84,84654,84655,84657,84660],{"class":86,"line":33214},[84,84656,79737],{"class":477},[84,84658,84659],{"class":94},"139",[84,84661,31793],{"class":477},[84,84663,84664,84666,84668],{"class":86,"line":33220},[84,84665,79747],{"class":477},[84,84667,79926],{"class":104},[84,84669,31793],{"class":477},[84,84671,84672,84674,84676],{"class":86,"line":33231},[84,84673,84488],{"class":477},[84,84675,692],{"class":94},[84,84677,31793],{"class":477},[84,84679,84680,84682,84685,84687,84690],{"class":86,"line":33237},[84,84681,84556],{"class":477},[84,84683,84684],{"class":104},"'小号'",[84,84686,55790],{"class":477},[84,84688,84689],{"class":104},"'紫色'",[84,84691,55796],{"class":477},[84,84693,84694,84697],{"class":86,"line":33256},[84,84695,84696],{"class":477},"        gift: ",[84,84698,84699],{"class":104},"'50g茶叶,清洗球'\n",[84,84701,84702],{"class":86,"line":33262},[84,84703,52725],{"class":477},[84,84705,84706],{"class":86,"line":33273},[84,84707,53436],{"class":477},[84,84709,84710],{"class":86,"line":33279},[84,84711,84712],{"class":328},"    \u002F\u002F  1.根据数据渲染页面\n",[84,84714,84715,84717,84719,84721,84723,84725,84727,84729,84731,84733,84735,84737],{"class":86,"line":33299},[84,84716,52734],{"class":477},[84,84718,54725],{"class":90},[84,84720,478],{"class":477},[84,84722,80227],{"class":104},[84,84724,74575],{"class":477},[84,84726,523],{"class":473},[84,84728,80374],{"class":477},[84,84730,74370],{"class":90},[84,84732,478],{"class":477},[84,84734,80121],{"class":5545},[84,84736,80124],{"class":473},[84,84738,15901],{"class":477},[84,84740,84741],{"class":86,"line":33315},[84,84742,84743],{"class":328},"      \u002F\u002F 对象解构\n",[84,84745,84746,84748,84750,84752,84754,84756,84758,84761,84763,84765,84767,84770,84772,84775,84777,84779],{"class":86,"line":33321},[84,84747,58554],{"class":473},[84,84749,80133],{"class":477},[84,84751,80146],{"class":94},[84,84753,12764],{"class":477},[84,84755,80136],{"class":94},[84,84757,12764],{"class":477},[84,84759,84760],{"class":94},"count",[84,84762,12764],{"class":477},[84,84764,80141],{"class":94},[84,84766,12764],{"class":477},[84,84768,84769],{"class":94},"spec",[84,84771,12764],{"class":477},[84,84773,84774],{"class":94},"gift",[84,84776,80149],{"class":477},[84,84778,523],{"class":473},[84,84780,80154],{"class":477},[84,84782,84783],{"class":86,"line":33335},[84,84784,84785],{"class":328},"      \u002F\u002F 规格文字模块处理\n",[84,84787,84788,84790,84793,84795,84797,84799,84801,84803,84805,84807],{"class":86,"line":33341},[84,84789,58554],{"class":473},[84,84791,84792],{"class":94}," text",[84,84794,13893],{"class":473},[84,84796,82264],{"class":477},[84,84798,82267],{"class":90},[84,84800,82270],{"class":477},[84,84802,74549],{"class":90},[84,84804,478],{"class":477},[84,84806,82277],{"class":104},[84,84808,484],{"class":477},[84,84810,84811],{"class":86,"line":33347},[84,84812,84813],{"class":328},"      \u002F\u002F 处理赠品模块\n",[84,84815,84816,84818,84820,84822,84825,84827,84829,84831,84833,84836,84838,84840,84842,84844,84846,84849,84851,84854,84856,84858,84860,84862,84864,84866],{"class":86,"line":33358},[84,84817,58554],{"class":473},[84,84819,74245],{"class":94},[84,84821,13893],{"class":473},[84,84823,84824],{"class":477}," gift ",[84,84826,1459],{"class":473},[84,84828,83438],{"class":477},[84,84830,83441],{"class":90},[84,84832,478],{"class":477},[84,84834,84835],{"class":104},"','",[84,84837,31153],{"class":477},[84,84839,74370],{"class":90},[84,84841,478],{"class":477},[84,84843,80121],{"class":5545},[84,84845,80124],{"class":473},[84,84847,84848],{"class":104}," `\u003Cspan class=\"tag\">【赠品】${",[84,84850,80121],{"class":477},[84,84852,84853],{"class":104},"}\u003C\u002Fspan>`",[84,84855,31153],{"class":477},[84,84857,74549],{"class":90},[84,84859,478],{"class":477},[84,84861,74554],{"class":104},[84,84863,14043],{"class":477},[84,84865,1332],{"class":473},[84,84867,70430],{"class":104},[84,84869,84870],{"class":86,"line":33364},[84,84871,84872],{"class":328},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[84,84874,84875,84877,84880,84882,84885,84887,84889,84891,84894,84896,84898,84900,84903,84905,84907],{"class":86,"line":33370},[84,84876,58554],{"class":473},[84,84878,84879],{"class":94}," subtotal",[84,84881,13893],{"class":473},[84,84883,84884],{"class":477}," ((price ",[84,84886,928],{"class":473},[84,84888,6083],{"class":94},[84,84890,6847],{"class":473},[84,84892,84893],{"class":477}," count) ",[84,84895,1057],{"class":473},[84,84897,6083],{"class":94},[84,84899,31153],{"class":477},[84,84901,84902],{"class":90},"toFixed",[84,84904,478],{"class":477},[84,84906,553],{"class":94},[84,84908,484],{"class":477},[84,84910,84911],{"class":86,"line":33380},[84,84912,2729],{"emptyLinePlaceholder":403},[84,84914,84915,84917],{"class":86,"line":33386},[84,84916,74308],{"class":473},[84,84918,70494],{"class":104},[84,84920,84921],{"class":86,"line":33397},[84,84922,84923],{"class":104},"        \u003Cdiv class=\"item\">\n",[84,84925,84926,84929,84931],{"class":86,"line":33403},[84,84927,84928],{"class":104},"          \u003Cimg src=\"${",[84,84930,80146],{"class":477},[84,84932,80178],{"class":104},[84,84934,84935,84938,84940,84943,84945],{"class":86,"line":33413},[84,84936,84937],{"class":104},"          \u003Cp class=\"name\">${",[84,84939,80136],{"class":477},[84,84941,84942],{"class":104},"}${",[84,84944,1643],{"class":477},[84,84946,80188],{"class":104},[84,84948,84949,84952,84954],{"class":86,"line":33418},[84,84950,84951],{"class":104},"          \u003Cp class=\"spec\">${",[84,84953,5516],{"class":477},[84,84955,80188],{"class":104},[84,84957,84958,84961,84963,84965,84967,84969,84971,84973],{"class":86,"line":33424},[84,84959,84960],{"class":104},"          \u003Cp class=\"price\">${",[84,84962,80141],{"class":477},[84,84964,1031],{"class":104},[84,84966,84902],{"class":90},[84,84968,478],{"class":104},[84,84970,553],{"class":94},[84,84972,902],{"class":104},[84,84974,80188],{"class":104},[84,84976,84977,84980,84982],{"class":86,"line":33473},[84,84978,84979],{"class":104},"          \u003Cp class=\"count\">x${",[84,84981,84760],{"class":477},[84,84983,80188],{"class":104},[84,84985,84986,84989,84992],{"class":86,"line":33520},[84,84987,84988],{"class":104},"          \u003Cp class=\"sub-total\">${",[84,84990,84991],{"class":477},"subtotal",[84,84993,80188],{"class":104},[84,84995,84996],{"class":86,"line":33525},[84,84997,84998],{"class":104},"        \u003C\u002Fdiv> \n",[84,85000,85001],{"class":86,"line":33531},[84,85002,85003],{"class":104},"             `\n",[84,85005,85006,85009,85011,85013,85015],{"class":86,"line":33550},[84,85007,85008],{"class":477},"    }).",[84,85010,74549],{"class":90},[84,85012,478],{"class":477},[84,85014,74554],{"class":104},[84,85016,484],{"class":477},[84,85018,85019],{"class":86,"line":33556},[84,85020,85021],{"class":328},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[84,85023,85024,85026,85028,85030,85032,85035,85037,85040,85042,85044,85046,85049,85052,85054,85057,85059,85061,85063,85066,85068,85070,85072,85074],{"class":86,"line":33576},[84,85025,11550],{"class":473},[84,85027,63111],{"class":94},[84,85029,13893],{"class":473},[84,85031,80374],{"class":477},[84,85033,85034],{"class":90},"reduce",[84,85036,2705],{"class":477},[84,85038,85039],{"class":5545},"prev",[84,85041,12764],{"class":477},[84,85043,80121],{"class":5545},[84,85045,14043],{"class":477},[84,85047,85048],{"class":473},"=>",[84,85050,85051],{"class":477}," prev ",[84,85053,954],{"class":473},[84,85055,85056],{"class":477}," (item.price ",[84,85058,928],{"class":473},[84,85060,6083],{"class":94},[84,85062,6847],{"class":473},[84,85064,85065],{"class":477}," item.count) ",[84,85067,1057],{"class":473},[84,85069,6083],{"class":94},[84,85071,12764],{"class":477},[84,85073,666],{"class":94},[84,85075,484],{"class":477},[84,85077,85078,85080,85082,85084,85087,85089,85091,85094,85096,85098,85100],{"class":86,"line":33582},[84,85079,52734],{"class":477},[84,85081,54725],{"class":90},[84,85083,478],{"class":477},[84,85085,85086],{"class":104},"'.amount'",[84,85088,74575],{"class":477},[84,85090,523],{"class":473},[84,85092,85093],{"class":477}," total.",[84,85095,84902],{"class":90},[84,85097,478],{"class":477},[84,85099,553],{"class":94},[84,85101,484],{"class":477},[84,85103,85104,85106,85108],{"class":86,"line":33588},[84,85105,52744],{"class":477},[84,85107,52140],{"class":51627},[84,85109,51634],{"class":477},[84,85111,85112,85114,85116],{"class":86,"line":33598},[84,85113,52112],{"class":477},[84,85115,52127],{"class":51627},[84,85117,51634],{"class":477},[84,85119,85120],{"class":86,"line":33603},[84,85121,2729],{"emptyLinePlaceholder":403},[84,85123,85124,85126,85128],{"class":86,"line":33609},[84,85125,52112],{"class":477},[84,85127,50962],{"class":51627},[84,85129,51634],{"class":477},[14,85131,85133],{"id":85132},"_411-编程思想","4.11 编程思想",[23,85135,85137],{"id":85136},"_4111-面向过程介绍","4.11.1 面向过程介绍",[35,85139,85140,85143],{},[624,85141,85142],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[35,85145,85146],{},"调用就可以了",[35,85148,85149],{},[64,85150],{"alt":66,"src":85151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[23,85153,85155],{"id":85154},"_4112-面向对象","4.11.2 面向对象",[35,85157,85158],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[35,85160,85161],{},[64,85162],{"alt":66,"src":85163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[35,85165,85166],{},"面向对象的特性：",[1480,85168,85169,85172,85175],{},[31,85170,85171],{},"封装性",[31,85173,85174],{},"继承性",[31,85176,85177],{},"多态性",[23,85179,85181],{"id":85180},"_4113-两者比较","4.11.3 两者比较",[35,85183,85184],{},[64,85185],{"alt":66,"src":85186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85188,85190],{"id":85189},"_412-构造函数回顾","4.12 构造函数回顾",[35,85192,85193],{},[64,85194],{"alt":66,"src":85195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[35,85197,85198],{},[64,85199],{"alt":66,"src":85200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[35,85202,85203],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[35,85205,85206],{},[64,85207],{"alt":66,"src":85208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85210,85212],{"id":85211},"_413-原型","4.13 原型",[23,85214,85216],{"id":85215},"_4131-原型对象的认识","4.13.1 原型对象的认识",[35,85218,85219],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[35,85221,85222],{},[64,85223],{"alt":66,"src":85224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[35,85226,85227],{},[64,85228],{"alt":66,"src":85229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[35,85231,85232],{},"原型是构造函数的属性，它也是一个对象",[35,85234,85235],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[35,85237,85238],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[75,85240,85242],{"className":53394,"code":85241,"language":53396,"meta":66,"style":66},"\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",[81,85243,85244,85252,85257,85265,85270,85275,85280,85285,85290,85294,85298,85302,85307,85312,85316,85321,85326,85331,85336,85341,85345,85353],{"__ignoreMap":66},[84,85245,85246,85248,85250],{"class":86,"line":87},[84,85247,1383],{"class":477},[84,85249,52127],{"class":51627},[84,85251,51634],{"class":477},[84,85253,85254],{"class":86,"line":98},[84,85255,85256],{"class":328},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[84,85258,85259,85261,85263],{"class":86,"line":70},[84,85260,52471],{"class":477},[84,85262,52140],{"class":51627},[84,85264,51634],{"class":477},[84,85266,85267],{"class":86,"line":120},[84,85268,85269],{"class":477},"    function Star(uname, age) {\n",[84,85271,85272],{"class":86,"line":131},[84,85273,85274],{"class":477},"      this.uname = uname,\n",[84,85276,85277],{"class":86,"line":145},[84,85278,85279],{"class":477},"        this.age = age\n",[84,85281,85282],{"class":86,"line":156},[84,85283,85284],{"class":477},"      \u002F\u002F this.sing = function () {\n",[84,85286,85287],{"class":86,"line":164},[84,85288,85289],{"class":477},"      \u002F\u002F   console.log('唱歌')\n",[84,85291,85292],{"class":86,"line":175},[84,85293,2729],{"emptyLinePlaceholder":403},[84,85295,85296],{"class":86,"line":185},[84,85297,60363],{"class":477},[84,85299,85300],{"class":86,"line":195},[84,85301,2516],{"class":477},[84,85303,85304],{"class":86,"line":206},[84,85305,85306],{"class":477},"    Star.prototype.sing = function () {\n",[84,85308,85309],{"class":86,"line":217},[84,85310,85311],{"class":477},"      console.log('唱歌')\n",[84,85313,85314],{"class":86,"line":227},[84,85315,2516],{"class":477},[84,85317,85318],{"class":86,"line":238},[84,85319,85320],{"class":477},"    \u002F\u002F console.dir(Star.prototype)\n",[84,85322,85323],{"class":86,"line":249},[84,85324,85325],{"class":477},"    const pink = new Star('pink', 18)\n",[84,85327,85328],{"class":86,"line":262},[84,85329,85330],{"class":477},"    const red = new Star('red', 20)\n",[84,85332,85333],{"class":86,"line":273},[84,85334,85335],{"class":477},"    pink.sing()\n",[84,85337,85338],{"class":86,"line":283},[84,85339,85340],{"class":477},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[84,85342,85343],{"class":86,"line":294},[84,85344,2729],{"emptyLinePlaceholder":403},[84,85346,85347,85349,85351],{"class":86,"line":2028},[84,85348,52744],{"class":477},[84,85350,52140],{"class":51627},[84,85352,51634],{"class":477},[84,85354,85355,85357,85359],{"class":86,"line":2057},[84,85356,52112],{"class":477},[84,85358,52127],{"class":51627},[84,85360,51634],{"class":477},[35,85362,85363],{},[64,85364],{"alt":66,"src":85365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[75,85367,85369],{"className":53394,"code":85368,"language":53396,"meta":66,"style":66},"\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",[81,85370,85371,85379,85387,85392,85397,85402,85407,85411,85416,85421,85426,85430,85435,85439,85443,85448,85452,85460],{"__ignoreMap":66},[84,85372,85373,85375,85377],{"class":86,"line":87},[84,85374,1383],{"class":477},[84,85376,52127],{"class":51627},[84,85378,51634],{"class":477},[84,85380,85381,85383,85385],{"class":86,"line":98},[84,85382,52471],{"class":477},[84,85384,52140],{"class":51627},[84,85386,51634],{"class":477},[84,85388,85389],{"class":86,"line":70},[84,85390,85391],{"class":477},"    let that\n",[84,85393,85394],{"class":86,"line":120},[84,85395,85396],{"class":477},"    function Star(uname) {\n",[84,85398,85399],{"class":86,"line":131},[84,85400,85401],{"class":477},"      this.uname = uname\n",[84,85403,85404],{"class":86,"line":145},[84,85405,85406],{"class":477},"      that = this\n",[84,85408,85409],{"class":86,"line":156},[84,85410,2516],{"class":477},[84,85412,85413],{"class":86,"line":164},[84,85414,85415],{"class":477},"    \u002F\u002F 实例对象是 ldh\n",[84,85417,85418],{"class":86,"line":175},[84,85419,85420],{"class":477},"    const ldh = new Star('刘德华')\n",[84,85422,85423],{"class":86,"line":185},[84,85424,85425],{"class":477},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[84,85427,85428],{"class":86,"line":195},[84,85429,2729],{"emptyLinePlaceholder":403},[84,85431,85432],{"class":86,"line":206},[84,85433,85434],{"class":477},"    Star.sing = function () {\n",[84,85436,85437],{"class":86,"line":217},[84,85438,85311],{"class":477},[84,85440,85441],{"class":86,"line":227},[84,85442,2516],{"class":477},[84,85444,85445],{"class":86,"line":238},[84,85446,85447],{"class":477},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[84,85449,85450],{"class":86,"line":249},[84,85451,2729],{"emptyLinePlaceholder":403},[84,85453,85454,85456,85458],{"class":86,"line":262},[84,85455,52744],{"class":477},[84,85457,52140],{"class":51627},[84,85459,51634],{"class":477},[84,85461,85462,85464,85466],{"class":86,"line":273},[84,85463,52112],{"class":477},[84,85465,52127],{"class":51627},[84,85467,51634],{"class":477},[35,85469,85470],{},"构造函数的this指向的是实例对象；",[35,85472,85473],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[23,85475,85477],{"id":85476},"_4132-数组扩展方法","4.13.2 数组扩展方法",[35,85479,85480],{},[64,85481],{"alt":66,"src":85482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[75,85484,85486],{"className":53394,"code":85485,"language":53396,"meta":66,"style":66},"\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",[81,85487,85488,85496,85504,85509,85514,85519,85524,85529,85534,85539,85544,85549,85554,85558,85563,85568,85573,85578,85582,85587,85592,85597,85602,85606,85611,85616,85621,85626,85630,85635,85639,85647],{"__ignoreMap":66},[84,85489,85490,85492,85494],{"class":86,"line":87},[84,85491,1383],{"class":477},[84,85493,52127],{"class":51627},[84,85495,51634],{"class":477},[84,85497,85498,85500,85502],{"class":86,"line":98},[84,85499,52471],{"class":477},[84,85501,52140],{"class":51627},[84,85503,51634],{"class":477},[84,85505,85506],{"class":86,"line":70},[84,85507,85508],{"class":477},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[84,85510,85511],{"class":86,"line":120},[84,85512,85513],{"class":477},"    const arr = [1, 2, 3]\n",[84,85515,85516],{"class":86,"line":131},[84,85517,85518],{"class":477},"    \u002F\u002F 自己定义数组的扩展方法\n",[84,85520,85521],{"class":86,"line":145},[84,85522,85523],{"class":477},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[84,85525,85526],{"class":86,"line":156},[84,85527,85528],{"class":477},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[84,85530,85531],{"class":86,"line":164},[84,85532,85533],{"class":477},"    \u002F\u002F ①.最大值\n",[84,85535,85536],{"class":86,"line":175},[84,85537,85538],{"class":477},"    Array.prototype.max = function () {\n",[84,85540,85541],{"class":86,"line":185},[84,85542,85543],{"class":477},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[84,85545,85546],{"class":86,"line":195},[84,85547,85548],{"class":477},"      return Math.max(...this)\n",[84,85550,85551],{"class":86,"line":206},[84,85552,85553],{"class":477},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[84,85555,85556],{"class":86,"line":217},[84,85557,2516],{"class":477},[84,85559,85560],{"class":86,"line":227},[84,85561,85562],{"class":477},"    console.log(arr.max())\n",[84,85564,85565],{"class":86,"line":238},[84,85566,85567],{"class":477},"    \u002F\u002F ②最小值\n",[84,85569,85570],{"class":86,"line":249},[84,85571,85572],{"class":477},"    Array.prototype.min = function () {\n",[84,85574,85575],{"class":86,"line":262},[84,85576,85577],{"class":477},"      return Math.min(...this)\n",[84,85579,85580],{"class":86,"line":273},[84,85581,2516],{"class":477},[84,85583,85584],{"class":86,"line":283},[84,85585,85586],{"class":477},"    console.log(arr.min())\n",[84,85588,85589],{"class":86,"line":294},[84,85590,85591],{"class":477},"    \u002F\u002F③求和\n",[84,85593,85594],{"class":86,"line":2028},[84,85595,85596],{"class":477},"    Array.prototype.sum = function () {\n",[84,85598,85599],{"class":86,"line":2057},[84,85600,85601],{"class":477},"      return this.reduce((prev, current) => prev + current, 0)\n",[84,85603,85604],{"class":86,"line":2062},[84,85605,2516],{"class":477},[84,85607,85608],{"class":86,"line":2079},[84,85609,85610],{"class":477},"    console.log(arr.sum())\n",[84,85612,85613],{"class":86,"line":2084},[84,85614,85615],{"class":477},"    \u002F\u002F ③排序\n",[84,85617,85618],{"class":86,"line":2089},[84,85619,85620],{"class":477},"    Array.prototype.rever = function () {\n",[84,85622,85623],{"class":86,"line":2094},[84,85624,85625],{"class":477},"      return this.reverse()\n",[84,85627,85628],{"class":86,"line":2108},[84,85629,2516],{"class":477},[84,85631,85632],{"class":86,"line":2113},[84,85633,85634],{"class":477},"    console.log(arr.rever())\n",[84,85636,85637],{"class":86,"line":2906},[84,85638,2729],{"emptyLinePlaceholder":403},[84,85640,85641,85643,85645],{"class":86,"line":2920},[84,85642,52744],{"class":477},[84,85644,52140],{"class":51627},[84,85646,51634],{"class":477},[84,85648,85649,85651,85653],{"class":86,"line":2928},[84,85650,52112],{"class":477},[84,85652,52127],{"class":51627},[84,85654,51634],{"class":477},[35,85656,85657],{},[64,85658],{"alt":66,"src":85659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[23,85661,85663],{"id":85662},"_4133-constructor-属性","4.13.3 constructor 属性",[35,85665,85666],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[35,85668,85669],{},[64,85670],{"alt":66,"src":85671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[75,85673,85675],{"className":53394,"code":85674,"language":53396,"meta":66,"style":66},"\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",[81,85676,85677,85685,85693,85698,85703,85707,85712,85717,85722,85730],{"__ignoreMap":66},[84,85678,85679,85681,85683],{"class":86,"line":87},[84,85680,1383],{"class":477},[84,85682,52127],{"class":51627},[84,85684,51634],{"class":477},[84,85686,85687,85689,85691],{"class":86,"line":98},[84,85688,52471],{"class":477},[84,85690,52140],{"class":51627},[84,85692,51634],{"class":477},[84,85694,85695],{"class":86,"line":70},[84,85696,85697],{"class":477},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[84,85699,85700],{"class":86,"line":120},[84,85701,85702],{"class":477},"    function Star() {\n",[84,85704,85705],{"class":86,"line":131},[84,85706,2516],{"class":477},[84,85708,85709],{"class":86,"line":145},[84,85710,85711],{"class":477},"    const ldh = new Star()\n",[84,85713,85714],{"class":86,"line":156},[84,85715,85716],{"class":477},"    console.log(Star.prototype)\n",[84,85718,85719],{"class":86,"line":164},[84,85720,85721],{"class":477},"    console.log(Star.prototype.constructor === Star)\n",[84,85723,85724,85726,85728],{"class":86,"line":175},[84,85725,52744],{"class":477},[84,85727,52140],{"class":51627},[84,85729,51634],{"class":477},[84,85731,85732,85734,85736],{"class":86,"line":185},[84,85733,52112],{"class":477},[84,85735,52127],{"class":51627},[84,85737,51634],{"class":477},[35,85739,85740],{},[64,85741],{"alt":66,"src":85742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[35,85744,85745],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[75,85747,85749],{"className":53394,"code":85748,"language":53396,"meta":66,"style":66},"  \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",[81,85750,85751,85759,85763,85767,85771,85776,85781,85786,85790,85795,85800,85805,85810,85815,85820,85824,85828,85833,85838,85843,85847,85852,85857,85861,85865,85869],{"__ignoreMap":66},[84,85752,85753,85755,85757],{"class":86,"line":87},[84,85754,52471],{"class":477},[84,85756,52140],{"class":51627},[84,85758,51634],{"class":477},[84,85760,85761],{"class":86,"line":98},[84,85762,85697],{"class":477},[84,85764,85765],{"class":86,"line":70},[84,85766,85702],{"class":477},[84,85768,85769],{"class":86,"line":120},[84,85770,2516],{"class":477},[84,85772,85773],{"class":86,"line":131},[84,85774,85775],{"class":477},"    \u002F\u002F const ldh = new Star()\n",[84,85777,85778],{"class":86,"line":145},[84,85779,85780],{"class":477},"    \u002F\u002F console.log(Star.prototype)\n",[84,85782,85783],{"class":86,"line":156},[84,85784,85785],{"class":477},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[84,85787,85788],{"class":86,"line":164},[84,85789,2729],{"emptyLinePlaceholder":403},[84,85791,85792],{"class":86,"line":175},[84,85793,85794],{"class":477},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[84,85796,85797],{"class":86,"line":185},[84,85798,85799],{"class":477},"    \u002F\u002F Star.prototype.sing = function () {\n",[84,85801,85802],{"class":86,"line":195},[84,85803,85804],{"class":477},"    \u002F\u002F   console.log('唱歌')\n",[84,85806,85807],{"class":86,"line":206},[84,85808,85809],{"class":477},"    \u002F\u002F }\n",[84,85811,85812],{"class":86,"line":217},[84,85813,85814],{"class":477},"    \u002F\u002F Star.prototype.dance = function () {\n",[84,85816,85817],{"class":86,"line":227},[84,85818,85819],{"class":477},"    \u002F\u002F   console.log('跳舞')\n",[84,85821,85822],{"class":86,"line":238},[84,85823,85809],{"class":477},[84,85825,85826],{"class":86,"line":249},[84,85827,85716],{"class":477},[84,85829,85830],{"class":86,"line":262},[84,85831,85832],{"class":477},"    Star.prototype = {\n",[84,85834,85835],{"class":86,"line":273},[84,85836,85837],{"class":477},"      sing: function () {\n",[84,85839,85840],{"class":86,"line":283},[84,85841,85842],{"class":477},"        console.log('唱歌')\n",[84,85844,85845],{"class":86,"line":294},[84,85846,78218],{"class":477},[84,85848,85849],{"class":86,"line":2028},[84,85850,85851],{"class":477},"      dance: function () {\n",[84,85853,85854],{"class":86,"line":2057},[84,85855,85856],{"class":477},"        console.log('跳舞')\n",[84,85858,85859],{"class":86,"line":2062},[84,85860,52725],{"class":477},[84,85862,85863],{"class":86,"line":2079},[84,85864,2516],{"class":477},[84,85866,85867],{"class":86,"line":2084},[84,85868,85716],{"class":477},[84,85870,85871,85873,85875],{"class":86,"line":2089},[84,85872,52744],{"class":477},[84,85874,52140],{"class":51627},[84,85876,51634],{"class":477},[35,85878,85879],{},"进行输出结果后会发现：",[35,85881,85882],{},[64,85883],{"alt":66,"src":85884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[35,85886,85887],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[35,85889,85890],{},"所以，要重新指回创造这个原型对象的构造函数",[75,85892,85894],{"className":71539,"code":85893,"language":71541,"meta":66,"style":66},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[81,85895,85896,85910,85915,85920,85931,85944,85949,85960,85974,85978],{"__ignoreMap":66},[84,85897,85898,85901,85903,85906,85908],{"class":86,"line":87},[84,85899,85900],{"class":94},"Star",[84,85902,1031],{"class":477},[84,85904,85905],{"class":94},"prototype",[84,85907,13893],{"class":473},[84,85909,15901],{"class":477},[84,85911,85912],{"class":86,"line":98},[84,85913,85914],{"class":328},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[84,85916,85917],{"class":86,"line":70},[84,85918,85919],{"class":477},"  constructor: Star,\n",[84,85921,85922,85925,85927,85929],{"class":86,"line":120},[84,85923,85924],{"class":90},"  sing",[84,85926,51764],{"class":477},[84,85928,54775],{"class":473},[84,85930,54778],{"class":477},[84,85932,85933,85935,85937,85939,85942],{"class":86,"line":131},[84,85934,74079],{"class":477},[84,85936,58573],{"class":90},[84,85938,478],{"class":477},[84,85940,85941],{"class":104},"'唱歌'",[84,85943,484],{"class":477},[84,85945,85946],{"class":86,"line":145},[84,85947,85948],{"class":477},"   },\n",[84,85950,85951,85954,85956,85958],{"class":86,"line":156},[84,85952,85953],{"class":90},"   dance",[84,85955,51764],{"class":477},[84,85957,54775],{"class":473},[84,85959,54778],{"class":477},[84,85961,85962,85965,85967,85969,85972],{"class":86,"line":164},[84,85963,85964],{"class":477},"     console.",[84,85966,58573],{"class":90},[84,85968,478],{"class":477},[84,85970,85971],{"class":104},"'跳舞'",[84,85973,484],{"class":477},[84,85975,85976],{"class":86,"line":175},[84,85977,4638],{"class":477},[84,85979,85980],{"class":86,"line":185},[84,85981,1905],{"class":477},[35,85983,85984],{},[64,85985],{"alt":66,"src":85986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[35,85988,85989],{},"总结1：",[35,85991,85992],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[35,85994,85995],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[35,85997,85998],{},"constructor指的是他的来源",[35,86000,86001],{},[64,86002],{"alt":66,"src":86003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[35,86005,86006],{},[64,86007],{"alt":66,"src":86008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[35,86010,86011],{},"总结2：",[35,86013,86014],{},[64,86015],{"alt":66,"src":86016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[35,86018,86019],{},[64,86020],{"alt":66,"src":86021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[35,86023,86024],{},[64,86025],{"alt":66,"src":86026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[23,86028,86030],{"id":86029},"_4134-对象原型","4.13.4 对象原型",[35,86032,86033],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[35,86035,86036],{},"对象原型就是__proto__这个属性",[35,86038,86039],{},[64,86040],{"alt":66,"src":86041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[35,86043,86044],{},[64,86045],{"alt":66,"src":86046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[35,86048,86049],{},[64,86050],{"alt":66,"src":86051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[35,86053,86054],{},[64,86055],{"alt":66,"src":86056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[75,86058,86060],{"className":53394,"code":86059,"language":53396,"meta":66,"style":66},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[81,86061,86062,86070,86078,86082,86086,86090,86095,86103],{"__ignoreMap":66},[84,86063,86064,86066,86068],{"class":86,"line":87},[84,86065,1383],{"class":477},[84,86067,52127],{"class":51627},[84,86069,51634],{"class":477},[84,86071,86072,86074,86076],{"class":86,"line":98},[84,86073,52471],{"class":477},[84,86075,52140],{"class":51627},[84,86077,51634],{"class":477},[84,86079,86080],{"class":86,"line":70},[84,86081,85702],{"class":477},[84,86083,86084],{"class":86,"line":120},[84,86085,2516],{"class":477},[84,86087,86088],{"class":86,"line":131},[84,86089,85711],{"class":477},[84,86091,86092],{"class":86,"line":145},[84,86093,86094],{"class":477},"    console.log(ldh)\n",[84,86096,86097,86099,86101],{"class":86,"line":156},[84,86098,52744],{"class":477},[84,86100,52140],{"class":51627},[84,86102,51634],{"class":477},[84,86104,86105,86107,86109],{"class":86,"line":164},[84,86106,52112],{"class":477},[84,86108,52127],{"class":51627},[84,86110,51634],{"class":477},[35,86112,86113],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[35,86115,86116],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[35,86118,86119],{},[64,86120],{"alt":66,"src":86121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[35,86123,86124],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[35,86126,86127],{},"对象原型指向原型对象",[35,86129,86130],{},[64,86131],{"alt":66,"src":86132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[35,86134,86135],{},[64,86136],{"alt":66,"src":86137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[35,86139,86140],{},[64,86141],{"alt":66,"src":86142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[23,86144,86146],{"id":86145},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[35,86148,86149],{},[64,86150],{"alt":66,"src":86151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[28,86153,86154,86157,86160,86163],{},[31,86155,86156],{},"构造函数通过new的形式实例化得到实例对象",[31,86158,86159],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[31,86161,86162],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[31,86164,86165],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[35,86167,86168],{},[64,86169],{"alt":66,"src":86170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[35,86172,86173],{},"题目梳理：",[35,86175,86176],{},[64,86177],{"alt":66,"src":86178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[23,86180,86182],{"id":86181},"_4136-原型继承","4.13.6 原型继承",[35,86184,86185],{},[64,86186],{"alt":66,"src":86187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[35,86189,86190],{},[64,86191],{"alt":66,"src":86192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[35,86194,86195],{},[64,86196],{"alt":66,"src":86197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[35,86199,86200],{},[64,86201],{"alt":66,"src":86202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[35,86204,86205],{},[64,86206],{"alt":66,"src":86207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[35,86209,86210],{},[64,86211],{"alt":66,"src":86212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[35,86214,86215],{},[64,86216],{"alt":66,"src":86217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[35,86219,86220],{},[64,86221],{"alt":66,"src":86222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[35,86224,86225],{},"回顾：构造函数每次new得到对象都是不同的",[23,86227,86229],{"id":86228},"_4137-原型链","4.13.7 原型链",[35,86231,86232],{},[64,86233],{"alt":66,"src":86234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[35,86236,86237],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[35,86239,86240],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[35,86242,86243],{},"大哥是Object",[35,86245,86246],{},[64,86247],{"alt":66,"src":86248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[35,86250,86251],{},[64,86252],{"alt":66,"src":86253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[35,86255,86256],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[35,86258,86259],{},"万物皆对象",[23,86261,86263],{"id":86262},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[35,86265,86266],{},"模态框",[35,86268,86269],{},"以后遇见这个效果直接使用这个就行",[35,86271,86272],{},[64,86273],{"alt":66,"src":86274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[35,86276,86277],{},[64,86278],{"alt":66,"src":86279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[35,86281,86282],{},[64,86283],{"alt":66,"src":86284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[35,86286,86287],{},[64,86288],{"alt":66,"src":86289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[35,86291,86292],{},"补充知识点：",[28,86294,86295],{},[31,86296,86297],{},"append()",[35,86299,86300],{},[64,86301],{"alt":66,"src":86302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[75,86304,86306],{"className":50960,"code":86305,"language":50962,"meta":66,"style":66},"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",[81,86307,86308,86313,86318,86323,86327,86331,86335,86340,86345,86350,86354],{"__ignoreMap":66},[84,86309,86310],{"class":86,"line":87},[84,86311,86312],{"class":477},"append(param1)\n",[84,86314,86315],{"class":86,"line":98},[84,86316,86317],{"class":477},"append(param1, param2)\n",[84,86319,86320],{"class":86,"line":70},[84,86321,86322],{"class":477},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[84,86324,86325],{"class":86,"line":120},[84,86326,2729],{"emptyLinePlaceholder":403},[84,86328,86329],{"class":86,"line":131},[84,86330,2729],{"emptyLinePlaceholder":403},[84,86332,86333],{"class":86,"line":145},[84,86334,2729],{"emptyLinePlaceholder":403},[84,86336,86337],{"class":86,"line":156},[84,86338,86339],{"class":477},"let div = document.createElement(\"div\");\n",[84,86341,86342],{"class":86,"line":164},[84,86343,86344],{"class":477},"let p = document.createElement(\"p\");\n",[84,86346,86347],{"class":86,"line":175},[84,86348,86349],{"class":477},"div.append(p);\n",[84,86351,86352],{"class":86,"line":185},[84,86353,2729],{"emptyLinePlaceholder":403},[84,86355,86356,86359,86361],{"class":86,"line":195},[84,86357,86358],{"class":477},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[84,86360,35],{"class":51627},[84,86362,86363],{"class":477},"> ]\n",[28,86365,86366],{"start":98},[31,86367,86368],{},"remove()",[35,86370,86371],{},"自己删自己",[35,86373,86374],{},[64,86375],{"alt":66,"src":86376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[75,86378,86380],{"className":50960,"code":86379,"language":50962,"meta":66,"style":66},"\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",[81,86381,86382,86392,86406,86410,86418,86432,86452,86464,86472,86479,86491,86504,86539,86551,86562,86574,86586,86598,86625,86635,86639,86643,86652,86664,86678,86688,86700,86704,86708,86718,86729,86739,86749,86762,86775,86785,86789,86793,86802,86812,86824,86828,86832,86841,86851,86861,86873,86877,86881,86891,86907,86918,86928,86938,86950,86962,86974,86978,86982,86995,87006,87010,87018,87026,87030,87038,87058,87078,87086,87091,87117,87122,87127,87146,87151,87163,87168,87179,87189,87199,87204,87209,87213,87218,87223,87228,87248,87253,87273,87278,87292,87297,87302,87307,87323,87327,87332,87361,87366,87371,87376,87387,87391,87395,87399,87404,87429,87434,87459,87464,87473,87477,87482,87507,87511,87536,87540,87549,87553,87558,87576,87586,87590,87598,87606,87610],{"__ignoreMap":66},[84,86383,86384,86386,86388,86390],{"class":86,"line":87},[84,86385,51624],{"class":477},[84,86387,51628],{"class":51627},[84,86389,51631],{"class":90},[84,86391,51634],{"class":477},[84,86393,86394,86396,86398,86400,86402,86404],{"class":86,"line":98},[84,86395,1383],{"class":477},[84,86397,50962],{"class":51627},[84,86399,51643],{"class":90},[84,86401,523],{"class":477},[84,86403,51648],{"class":104},[84,86405,51634],{"class":477},[84,86407,86408],{"class":86,"line":70},[84,86409,2729],{"emptyLinePlaceholder":403},[84,86411,86412,86414,86416],{"class":86,"line":120},[84,86413,1383],{"class":477},[84,86415,51661],{"class":51627},[84,86417,51634],{"class":477},[84,86419,86420,86422,86424,86426,86428,86430],{"class":86,"line":131},[84,86421,52471],{"class":477},[84,86423,51671],{"class":51627},[84,86425,51674],{"class":90},[84,86427,523],{"class":477},[84,86429,51679],{"class":104},[84,86431,51634],{"class":477},[84,86433,86434,86436,86438,86440,86442,86444,86446,86448,86450],{"class":86,"line":145},[84,86435,52471],{"class":477},[84,86437,51671],{"class":51627},[84,86439,15249],{"class":90},[84,86441,523],{"class":477},[84,86443,51718],{"class":104},[84,86445,51698],{"class":90},[84,86447,523],{"class":477},[84,86449,51725],{"class":104},[84,86451,51634],{"class":477},[84,86453,86454,86456,86458,86460,86462],{"class":86,"line":156},[84,86455,52471],{"class":477},[84,86457,51734],{"class":51627},[84,86459,51737],{"class":477},[84,86461,51734],{"class":51627},[84,86463,51634],{"class":477},[84,86465,86466,86468,86470],{"class":86,"line":164},[84,86467,52471],{"class":477},[84,86469,389],{"class":51627},[84,86471,51634],{"class":477},[84,86473,86474,86477],{"class":86,"line":175},[84,86475,86476],{"class":90},"    .modal",[84,86478,15901],{"class":477},[84,86480,86481,86483,86485,86487,86489],{"class":86,"line":185},[84,86482,55097],{"class":94},[84,86484,51764],{"class":477},[84,86486,4302],{"class":94},[84,86488,51819],{"class":473},[84,86490,1634],{"class":477},[84,86492,86493,86496,86498,86500,86502],{"class":86,"line":195},[84,86494,86495],{"class":94},"      min-height",[84,86497,51764],{"class":477},[84,86499,784],{"class":94},[84,86501,51819],{"class":473},[84,86503,1634],{"class":477},[84,86505,86506,86508,86510,86512,86514,86516,86518,86520,86522,86524,86526,86528,86530,86532,86534,86537],{"class":86,"line":206},[84,86507,79076],{"class":94},[84,86509,51764],{"class":477},[84,86511,666],{"class":94},[84,86513,4422],{"class":94},[84,86515,2367],{"class":94},[84,86517,51819],{"class":473},[84,86519,79093],{"class":94},[84,86521,478],{"class":477},[84,86523,666],{"class":94},[84,86525,12764],{"class":477},[84,86527,666],{"class":94},[84,86529,12764],{"class":477},[84,86531,666],{"class":94},[84,86533,12764],{"class":477},[84,86535,86536],{"class":94},"0.1",[84,86538,3048],{"class":477},[84,86540,86541,86543,86545,86547,86549],{"class":86,"line":217},[84,86542,55460],{"class":94},[84,86544,51764],{"class":477},[84,86546,140],{"class":94},[84,86548,51819],{"class":473},[84,86550,1634],{"class":477},[84,86552,86553,86555,86557,86560],{"class":86,"line":227},[84,86554,55085],{"class":94},[84,86556,51764],{"class":477},[84,86558,86559],{"class":94},"fixed",[84,86561,1634],{"class":477},[84,86563,86564,86567,86569,86572],{"class":86,"line":238},[84,86565,86566],{"class":94},"      z-index",[84,86568,51764],{"class":477},[84,86570,86571],{"class":94},"999",[84,86573,1634],{"class":477},[84,86575,86576,86578,86580,86582,86584],{"class":86,"line":249},[84,86577,55164],{"class":94},[84,86579,51764],{"class":477},[84,86581,1129],{"class":94},[84,86583,801],{"class":473},[84,86585,1634],{"class":477},[84,86587,86588,86590,86592,86594,86596],{"class":86,"line":262},[84,86589,55273],{"class":94},[84,86591,51764],{"class":477},[84,86593,1129],{"class":94},[84,86595,801],{"class":473},[84,86597,1634],{"class":477},[84,86599,86600,86602,86604,86606,86608,86611,86613,86615,86617,86619,86621,86623],{"class":86,"line":273},[84,86601,79117],{"class":94},[84,86603,51764],{"class":477},[84,86605,79122],{"class":94},[84,86607,478],{"class":477},[84,86609,86610],{"class":94},"-50",[84,86612,801],{"class":473},[84,86614,12764],{"class":477},[84,86616,86610],{"class":94},[84,86618,801],{"class":473},[84,86620,12764],{"class":477},[84,86622,666],{"class":94},[84,86624,3048],{"class":477},[84,86626,86627,86629,86631,86633],{"class":86,"line":283},[84,86628,55210],{"class":94},[84,86630,51764],{"class":477},[84,86632,61168],{"class":94},[84,86634,1634],{"class":477},[84,86636,86637],{"class":86,"line":294},[84,86638,2516],{"class":477},[84,86640,86641],{"class":86,"line":2028},[84,86642,2729],{"emptyLinePlaceholder":403},[84,86644,86645,86647,86650],{"class":86,"line":2057},[84,86646,86476],{"class":90},[84,86648,86649],{"class":90}," .header",[84,86651,15901],{"class":477},[84,86653,86654,86656,86658,86660,86662],{"class":86,"line":2062},[84,86655,57685],{"class":94},[84,86657,51764],{"class":477},[84,86659,874],{"class":94},[84,86661,51819],{"class":473},[84,86663,1634],{"class":477},[84,86665,86666,86668,86670,86672,86674,86676],{"class":86,"line":2079},[84,86667,55021],{"class":94},[84,86669,51764],{"class":477},[84,86671,666],{"class":94},[84,86673,2367],{"class":94},[84,86675,51819],{"class":473},[84,86677,1634],{"class":477},[84,86679,86680,86682,86684,86686],{"class":86,"line":2084},[84,86681,55085],{"class":94},[84,86683,51764],{"class":477},[84,86685,55090],{"class":94},[84,86687,1634],{"class":477},[84,86689,86690,86692,86694,86696,86698],{"class":86,"line":2089},[84,86691,55248],{"class":94},[84,86693,51764],{"class":477},[84,86695,1173],{"class":94},[84,86697,51819],{"class":473},[84,86699,1634],{"class":477},[84,86701,86702],{"class":86,"line":2094},[84,86703,2516],{"class":477},[84,86705,86706],{"class":86,"line":2108},[84,86707,2729],{"emptyLinePlaceholder":403},[84,86709,86710,86712,86714,86716],{"class":86,"line":2113},[84,86711,86476],{"class":90},[84,86713,86649],{"class":90},[84,86715,3361],{"class":51627},[84,86717,15901],{"class":477},[84,86719,86720,86723,86725,86727],{"class":86,"line":2906},[84,86721,86722],{"class":94},"      font-style",[84,86724,51764],{"class":477},[84,86726,64167],{"class":94},[84,86728,1634],{"class":477},[84,86730,86731,86733,86735,86737],{"class":86,"line":2920},[84,86732,57742],{"class":94},[84,86734,51764],{"class":477},[84,86736,62396],{"class":94},[84,86738,1634],{"class":477},[84,86740,86741,86743,86745,86747],{"class":86,"line":2928},[84,86742,55085],{"class":94},[84,86744,51764],{"class":477},[84,86746,55157],{"class":94},[84,86748,1634],{"class":477},[84,86750,86751,86754,86756,86758,86760],{"class":86,"line":2933},[84,86752,86753],{"class":94},"      right",[84,86755,51764],{"class":477},[84,86757,1048],{"class":94},[84,86759,51819],{"class":473},[84,86761,1634],{"class":477},[84,86763,86764,86766,86768,86771,86773],{"class":86,"line":2939},[84,86765,55273],{"class":94},[84,86767,51764],{"class":477},[84,86769,86770],{"class":94},"-2",[84,86772,51819],{"class":473},[84,86774,1634],{"class":477},[84,86776,86777,86779,86781,86783],{"class":86,"line":2945},[84,86778,62351],{"class":94},[84,86780,51764],{"class":477},[84,86782,62356],{"class":94},[84,86784,1634],{"class":477},[84,86786,86787],{"class":86,"line":2950},[84,86788,2516],{"class":477},[84,86790,86791],{"class":86,"line":8277},[84,86792,2729],{"emptyLinePlaceholder":403},[84,86794,86795,86797,86800],{"class":86,"line":8301},[84,86796,86476],{"class":90},[84,86798,86799],{"class":90}," .body",[84,86801,15901],{"class":477},[84,86803,86804,86806,86808,86810],{"class":86,"line":8306},[84,86805,57612],{"class":94},[84,86807,51764],{"class":477},[84,86809,51919],{"class":94},[84,86811,1634],{"class":477},[84,86813,86814,86816,86818,86820,86822],{"class":86,"line":8312},[84,86815,55021],{"class":94},[84,86817,51764],{"class":477},[84,86819,919],{"class":94},[84,86821,51819],{"class":473},[84,86823,1634],{"class":477},[84,86825,86826],{"class":86,"line":8339},[84,86827,2516],{"class":477},[84,86829,86830],{"class":86,"line":8344},[84,86831,2729],{"emptyLinePlaceholder":403},[84,86833,86834,86836,86839],{"class":86,"line":8350},[84,86835,86476],{"class":90},[84,86837,86838],{"class":90}," .footer",[84,86840,15901],{"class":477},[84,86842,86843,86845,86847,86849],{"class":86,"line":8362},[84,86844,55335],{"class":94},[84,86846,51764],{"class":477},[84,86848,51804],{"class":94},[84,86850,1634],{"class":477},[84,86852,86853,86855,86857,86859],{"class":86,"line":8374},[84,86854,55346],{"class":94},[84,86856,51764],{"class":477},[84,86858,51907],{"class":94},[84,86860,1634],{"class":477},[84,86862,86863,86865,86867,86869,86871],{"class":86,"line":8386},[84,86864,55021],{"class":94},[84,86866,51764],{"class":477},[84,86868,919],{"class":94},[84,86870,51819],{"class":473},[84,86872,1634],{"class":477},[84,86874,86875],{"class":86,"line":10045},[84,86876,2516],{"class":477},[84,86878,86879],{"class":86,"line":10070},[84,86880,2729],{"emptyLinePlaceholder":403},[84,86882,86883,86885,86887,86889],{"class":86,"line":10093},[84,86884,86476],{"class":90},[84,86886,86838],{"class":90},[84,86888,1739],{"class":51627},[84,86890,15901],{"class":477},[84,86892,86893,86895,86897,86899,86901,86903,86905],{"class":86,"line":10117},[84,86894,55021],{"class":94},[84,86896,51764],{"class":477},[84,86898,547],{"class":94},[84,86900,51819],{"class":473},[84,86902,2412],{"class":94},[84,86904,51819],{"class":473},[84,86906,1634],{"class":477},[84,86908,86909,86911,86913,86916],{"class":86,"line":10122},[84,86910,62047],{"class":94},[84,86912,51764],{"class":477},[84,86914,86915],{"class":94},"#ccc",[84,86917,1634],{"class":477},[84,86919,86920,86922,86924,86926],{"class":86,"line":10127},[84,86921,64296],{"class":94},[84,86923,51764],{"class":477},[84,86925,55063],{"class":94},[84,86927,1634],{"class":477},[84,86929,86930,86932,86934,86936],{"class":86,"line":10132},[84,86931,57742],{"class":94},[84,86933,51764],{"class":477},[84,86935,61168],{"class":94},[84,86937,1634],{"class":477},[84,86939,86940,86942,86944,86946,86948],{"class":86,"line":10141},[84,86941,55460],{"class":94},[84,86943,51764],{"class":477},[84,86945,553],{"class":94},[84,86947,51819],{"class":473},[84,86949,1634],{"class":477},[84,86951,86952,86954,86956,86958,86960],{"class":86,"line":10146},[84,86953,62076],{"class":94},[84,86955,51764],{"class":477},[84,86957,919],{"class":94},[84,86959,51819],{"class":473},[84,86961,1634],{"class":477},[84,86963,86964,86966,86968,86970,86972],{"class":86,"line":10152},[84,86965,55248],{"class":94},[84,86967,51764],{"class":477},[84,86969,1022],{"class":94},[84,86971,51819],{"class":473},[84,86973,1634],{"class":477},[84,86975,86976],{"class":86,"line":10173},[84,86977,2516],{"class":477},[84,86979,86980],{"class":86,"line":10179},[84,86981,2729],{"emptyLinePlaceholder":403},[84,86983,86984,86986,86988,86990,86993],{"class":86,"line":10193},[84,86985,86476],{"class":90},[84,86987,86838],{"class":90},[84,86989,1739],{"class":51627},[84,86991,86992],{"class":90},".submit",[84,86994,15901],{"class":477},[84,86996,86997,86999,87001,87004],{"class":86,"line":10199},[84,86998,55210],{"class":94},[84,87000,51764],{"class":477},[84,87002,87003],{"class":94},"#369",[84,87005,1634],{"class":477},[84,87007,87008],{"class":86,"line":10226},[84,87009,2516],{"class":477},[84,87011,87012,87014,87016],{"class":86,"line":10235},[84,87013,52744],{"class":477},[84,87015,389],{"class":51627},[84,87017,51634],{"class":477},[84,87019,87020,87022,87024],{"class":86,"line":10241},[84,87021,52112],{"class":477},[84,87023,51661],{"class":51627},[84,87025,51634],{"class":477},[84,87027,87028],{"class":86,"line":10249},[84,87029,2729],{"emptyLinePlaceholder":403},[84,87031,87032,87034,87036],{"class":86,"line":10254},[84,87033,1383],{"class":477},[84,87035,52127],{"class":51627},[84,87037,51634],{"class":477},[84,87039,87040,87042,87044,87046,87048,87051,87054,87056],{"class":86,"line":16933},[84,87041,52471],{"class":477},[84,87043,54213],{"class":51627},[84,87045,15288],{"class":90},[84,87047,523],{"class":477},[84,87049,87050],{"class":104},"\"delete\"",[84,87052,87053],{"class":477},">删除\u003C\u002F",[84,87055,54213],{"class":51627},[84,87057,51634],{"class":477},[84,87059,87060,87062,87064,87066,87068,87071,87074,87076],{"class":86,"line":16939},[84,87061,52471],{"class":477},[84,87063,54213],{"class":51627},[84,87065,15288],{"class":90},[84,87067,523],{"class":477},[84,87069,87070],{"class":104},"\"login\"",[84,87072,87073],{"class":477},">登录\u003C\u002F",[84,87075,54213],{"class":51627},[84,87077,51634],{"class":477},[84,87079,87080,87082,87084],{"class":86,"line":16962},[84,87081,52471],{"class":477},[84,87083,52140],{"class":51627},[84,87085,51634],{"class":477},[84,87087,87088],{"class":86,"line":16968},[84,87089,87090],{"class":328},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[84,87092,87093,87095,87098,87100,87102,87104,87106,87108,87111,87113,87115],{"class":86,"line":16991},[84,87094,70410],{"class":473},[84,87096,87097],{"class":90}," Modal",[84,87099,478],{"class":477},[84,87101,51734],{"class":5545},[84,87103,13893],{"class":473},[84,87105,70256],{"class":104},[84,87107,12764],{"class":477},[84,87109,87110],{"class":5545},"message",[84,87112,13893],{"class":473},[84,87114,70256],{"class":104},[84,87116,12771],{"class":477},[84,87118,87119],{"class":86,"line":17005},[84,87120,87121],{"class":328},"      \u002F\u002F 创建Model 模态框盒子\n",[84,87123,87124],{"class":86,"line":17025},[84,87125,87126],{"class":328},"      \u002F\u002F 1.1 创建div标签\n",[84,87128,87129,87131,87134,87136,87138,87140,87142,87144],{"class":86,"line":17031},[84,87130,70377],{"class":94},[84,87132,87133],{"class":477},".modalBox ",[84,87135,523],{"class":473},[84,87137,54722],{"class":477},[84,87139,70477],{"class":90},[84,87141,478],{"class":477},[84,87143,82257],{"class":104},[84,87145,484],{"class":477},[84,87147,87148],{"class":86,"line":17042},[84,87149,87150],{"class":328},"      \u002F\u002F 1.2 给div 添加类名为model\n",[84,87152,87153,87155,87158,87160],{"class":86,"line":17065},[84,87154,70377],{"class":94},[84,87156,87157],{"class":477},".modalBox.className ",[84,87159,523],{"class":473},[84,87161,87162],{"class":104}," 'modal'\n",[84,87164,87165],{"class":86,"line":17087},[84,87166,87167],{"class":328},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[84,87169,87170,87172,87175,87177],{"class":86,"line":17092},[84,87171,70377],{"class":94},[84,87173,87174],{"class":477},".modalBox.innerHTML ",[84,87176,523],{"class":473},[84,87178,70494],{"class":104},[84,87180,87181,87184,87186],{"class":86,"line":17098},[84,87182,87183],{"class":104},"        \u003Cdiv class=\"header\">${",[84,87185,51734],{"class":477},[84,87187,87188],{"class":104},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[84,87190,87191,87194,87196],{"class":86,"line":17112},[84,87192,87193],{"class":104},"        \u003Cdiv class=\"body\">${",[84,87195,87110],{"class":477},[84,87197,87198],{"class":104},"}\u003C\u002Fdiv>\n",[84,87200,87201],{"class":86,"line":17125},[84,87202,87203],{"class":104},"      `\n",[84,87205,87206],{"class":86,"line":17130},[84,87207,87208],{"class":328},"      \u002F\u002F console.log(this.modalBox)\n",[84,87210,87211],{"class":86,"line":17144},[84,87212,2516],{"class":477},[84,87214,87215],{"class":86,"line":17149},[84,87216,87217],{"class":328},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[84,87219,87220],{"class":86,"line":17155},[84,87221,87222],{"class":328},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[84,87224,87225],{"class":86,"line":17160},[84,87226,87227],{"class":328},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[84,87229,87230,87233,87235,87237,87239,87242,87244,87246],{"class":86,"line":17174},[84,87231,87232],{"class":94},"    Modal",[84,87234,1031],{"class":477},[84,87236,85905],{"class":94},[84,87238,1031],{"class":477},[84,87240,87241],{"class":90},"open",[84,87243,13893],{"class":473},[84,87245,59244],{"class":473},[84,87247,54778],{"class":477},[84,87249,87250],{"class":86,"line":17179},[84,87251,87252],{"class":328},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[84,87254,87255,87257,87260,87262,87264,87266,87268,87271],{"class":86,"line":17184},[84,87256,58554],{"class":473},[84,87258,87259],{"class":94}," box",[84,87261,13893],{"class":473},[84,87263,54722],{"class":477},[84,87265,54725],{"class":90},[84,87267,478],{"class":477},[84,87269,87270],{"class":104},"'.modal'",[84,87272,484],{"class":477},[84,87274,87275],{"class":86,"line":17198},[84,87276,87277],{"class":328},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[84,87279,87280,87283,87285,87288,87290],{"class":86,"line":17210},[84,87281,87282],{"class":477},"      box ",[84,87284,2045],{"class":473},[84,87286,87287],{"class":477}," box.",[84,87289,57332],{"class":90},[84,87291,2305],{"class":477},[84,87293,87294],{"class":86,"line":17215},[84,87295,87296],{"class":328},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[84,87298,87299],{"class":86,"line":17228},[84,87300,87301],{"class":328},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[84,87303,87304],{"class":86,"line":17233},[84,87305,87306],{"class":328},"      \u002F\u002F append可以增加对象\n",[84,87308,87309,87312,87315,87317,87320],{"class":86,"line":17238},[84,87310,87311],{"class":477},"      document.body.",[84,87313,87314],{"class":90},"append",[84,87316,478],{"class":477},[84,87318,87319],{"class":94},"this",[84,87321,87322],{"class":477},".modalBox)\n",[84,87324,87325],{"class":86,"line":17243},[84,87326,2729],{"emptyLinePlaceholder":403},[84,87328,87329],{"class":86,"line":17256},[84,87330,87331],{"class":328},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[84,87333,87334,87336,87339,87341,87343,87346,87348,87350,87352,87354,87357,87359],{"class":86,"line":17261},[84,87335,70377],{"class":94},[84,87337,87338],{"class":477},".modalBox.",[84,87340,54725],{"class":90},[84,87342,478],{"class":477},[84,87344,87345],{"class":104},"'i'",[84,87347,31153],{"class":477},[84,87349,58139],{"class":90},[84,87351,478],{"class":477},[84,87353,58144],{"class":104},[84,87355,87356],{"class":477},", () ",[84,87358,85048],{"class":473},[84,87360,15901],{"class":477},[84,87362,87363],{"class":86,"line":32960},[84,87364,87365],{"class":328},"        \u002F\u002F 这个地方需要用到箭头函数\n",[84,87367,87368],{"class":86,"line":32966},[84,87369,87370],{"class":328},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[84,87372,87373],{"class":86,"line":32972},[84,87374,87375],{"class":328},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[84,87377,87378,87380,87382,87385],{"class":86,"line":32978},[84,87379,65052],{"class":94},[84,87381,1031],{"class":477},[84,87383,87384],{"class":90},"close",[84,87386,2305],{"class":477},[84,87388,87389],{"class":86,"line":32984},[84,87390,65141],{"class":477},[84,87392,87393],{"class":86,"line":32995},[84,87394,2516],{"class":477},[84,87396,87397],{"class":86,"line":33001},[84,87398,2729],{"emptyLinePlaceholder":403},[84,87400,87401],{"class":86,"line":33021},[84,87402,87403],{"class":328},"    \u002F\u002F 测试一下 点击 删除按钮\n",[84,87405,87406,87408,87410,87412,87415,87417,87419,87421,87423,87425,87427],{"class":86,"line":33027},[84,87407,52734],{"class":477},[84,87409,54725],{"class":90},[84,87411,478],{"class":477},[84,87413,87414],{"class":104},"'#delete'",[84,87416,31153],{"class":477},[84,87418,58139],{"class":90},[84,87420,478],{"class":477},[84,87422,58144],{"class":104},[84,87424,87356],{"class":477},[84,87426,85048],{"class":473},[84,87428,15901],{"class":477},[84,87430,87431],{"class":86,"line":33038},[84,87432,87433],{"class":328},"      \u002F\u002F 先调用Model构造函数\n",[84,87435,87436,87438,87441,87443,87445,87447,87449,87452,87454,87457],{"class":86,"line":33044},[84,87437,58554],{"class":473},[84,87439,87440],{"class":94}," del",[84,87442,13893],{"class":473},[84,87444,11907],{"class":473},[84,87446,87097],{"class":90},[84,87448,478],{"class":477},[84,87450,87451],{"class":104},"'温馨的提示'",[84,87453,12764],{"class":477},[84,87455,87456],{"class":104},"'您没有删除权限操作'",[84,87458,484],{"class":477},[84,87460,87461],{"class":86,"line":33050},[84,87462,87463],{"class":328},"      \u002F\u002F 实例对象调用open方法\n",[84,87465,87466,87469,87471],{"class":86,"line":33056},[84,87467,87468],{"class":477},"      del.",[84,87470,87241],{"class":90},[84,87472,2305],{"class":477},[84,87474,87475],{"class":86,"line":33062},[84,87476,33788],{"class":477},[84,87478,87479],{"class":86,"line":33068},[84,87480,87481],{"class":328},"    \u002F\u002F 测试一下 点击 登录按钮\n",[84,87483,87484,87486,87488,87490,87493,87495,87497,87499,87501,87503,87505],{"class":86,"line":33074},[84,87485,52734],{"class":477},[84,87487,54725],{"class":90},[84,87489,478],{"class":477},[84,87491,87492],{"class":104},"'#login'",[84,87494,31153],{"class":477},[84,87496,58139],{"class":90},[84,87498,478],{"class":477},[84,87500,58144],{"class":104},[84,87502,87356],{"class":477},[84,87504,85048],{"class":473},[84,87506,15901],{"class":477},[84,87508,87509],{"class":86,"line":33080},[84,87510,87433],{"class":328},[84,87512,87513,87515,87518,87520,87522,87524,87526,87529,87531,87534],{"class":86,"line":33100},[84,87514,58554],{"class":473},[84,87516,87517],{"class":94}," log",[84,87519,13893],{"class":473},[84,87521,11907],{"class":473},[84,87523,87097],{"class":90},[84,87525,478],{"class":477},[84,87527,87528],{"class":104},"'友情提示'",[84,87530,12764],{"class":477},[84,87532,87533],{"class":104},"'您还没有登录呢'",[84,87535,484],{"class":477},[84,87537,87538],{"class":86,"line":33106},[84,87539,87463],{"class":328},[84,87541,87542,87545,87547],{"class":86,"line":33122},[84,87543,87544],{"class":477},"      log.",[84,87546,87241],{"class":90},[84,87548,2305],{"class":477},[84,87550,87551],{"class":86,"line":33128},[84,87552,33788],{"class":477},[84,87554,87555],{"class":86,"line":33142},[84,87556,87557],{"class":328},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[84,87559,87560,87562,87564,87566,87568,87570,87572,87574],{"class":86,"line":33148},[84,87561,87232],{"class":94},[84,87563,1031],{"class":477},[84,87565,85905],{"class":94},[84,87567,1031],{"class":477},[84,87569,87384],{"class":90},[84,87571,13893],{"class":473},[84,87573,59244],{"class":473},[84,87575,54778],{"class":477},[84,87577,87578,87580,87582,87584],{"class":86,"line":33163},[84,87579,70377],{"class":94},[84,87581,87338],{"class":477},[84,87583,57332],{"class":90},[84,87585,2305],{"class":477},[84,87587,87588],{"class":86,"line":33169},[84,87589,2516],{"class":477},[84,87591,87592,87594,87596],{"class":86,"line":33178},[84,87593,52744],{"class":477},[84,87595,52140],{"class":51627},[84,87597,51634],{"class":477},[84,87599,87600,87602,87604],{"class":86,"line":33184},[84,87601,52112],{"class":477},[84,87603,52127],{"class":51627},[84,87605,51634],{"class":477},[84,87607,87608],{"class":86,"line":33193},[84,87609,2729],{"emptyLinePlaceholder":403},[84,87611,87612,87614,87616],{"class":86,"line":33199},[84,87613,52112],{"class":477},[84,87615,50962],{"class":51627},[84,87617,51634],{"class":477},[35,87619,87620],{},[64,87621],{"alt":66,"src":87622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87624,87626],{"id":87625},"_414-深浅拷贝","4.14 深浅拷贝",[23,87628,87630],{"id":87629},"_4141-浅拷贝","4.14.1 浅拷贝",[35,87632,87633],{},[64,87634],{"alt":66,"src":87635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[35,87637,87638],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[35,87640,87641],{},[64,87642],{"alt":66,"src":87643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[35,87645,87646],{},[64,87647],{"alt":66,"src":87648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[35,87650,87651],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[35,87653,87654],{},[64,87655],{"alt":66,"src":87656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[35,87658,11661],{},[35,87660,87661],{},[64,87662],{"alt":66,"src":87663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[23,87665,87667],{"id":87666},"_4142-深拷贝","4.14.2 深拷贝",[35,87669,87670],{},"深拷贝：拷贝的是对象，不是地址",[35,87672,87673],{},"常用的三种方法：",[28,87675,87676,87679,87682],{},[31,87677,87678],{},"通过递归实现深拷贝",[31,87680,87681],{},"lodash\u002FcloneDeep",[31,87683,87684],{},"通过JSON.stringify()实现",[22327,87686,87688],{"id":87687},"_41421-递归函数","4.14.2.1 递归函数",[35,87690,87691],{},[64,87692],{"alt":66,"src":87693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[28,87695,87696],{},[31,87697,87698],{},"死递归占溢出：",[75,87700,87702],{"className":53394,"code":87701,"language":53396,"meta":66,"style":66},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[81,87703,87704,87712,87720,87724,87729,87733,87738,87746],{"__ignoreMap":66},[84,87705,87706,87708,87710],{"class":86,"line":87},[84,87707,1383],{"class":477},[84,87709,52127],{"class":51627},[84,87711,51634],{"class":477},[84,87713,87714,87716,87718],{"class":86,"line":98},[84,87715,52471],{"class":477},[84,87717,52140],{"class":51627},[84,87719,51634],{"class":477},[84,87721,87722],{"class":86,"line":70},[84,87723,77469],{"class":477},[84,87725,87726],{"class":86,"line":120},[84,87727,87728],{"class":477},"      fn()\n",[84,87730,87731],{"class":86,"line":131},[84,87732,2516],{"class":477},[84,87734,87735],{"class":86,"line":145},[84,87736,87737],{"class":477},"    fn()\n",[84,87739,87740,87742,87744],{"class":86,"line":156},[84,87741,52744],{"class":477},[84,87743,52140],{"class":51627},[84,87745,51634],{"class":477},[84,87747,87748,87750,87752],{"class":86,"line":164},[84,87749,52112],{"class":477},[84,87751,52127],{"class":51627},[84,87753,51634],{"class":477},[28,87755,87756],{"start":98},[31,87757,87758],{},"递归函数要加判断条件：",[35,87760,87761],{},[64,87762],{"alt":66,"src":87763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[28,87765,87766],{"start":70},[31,87767,87768],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[75,87770,87772],{"className":50960,"code":87771,"language":50962,"meta":66,"style":66},"\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",[81,87773,87774,87784,87798,87802,87810,87824,87844,87856,87864,87868,87876,87888,87896,87904,87929,87941,87945,87952,87960,87968,87972],{"__ignoreMap":66},[84,87775,87776,87778,87780,87782],{"class":86,"line":87},[84,87777,51624],{"class":477},[84,87779,51628],{"class":51627},[84,87781,51631],{"class":90},[84,87783,51634],{"class":477},[84,87785,87786,87788,87790,87792,87794,87796],{"class":86,"line":98},[84,87787,1383],{"class":477},[84,87789,50962],{"class":51627},[84,87791,51643],{"class":90},[84,87793,523],{"class":477},[84,87795,51648],{"class":104},[84,87797,51634],{"class":477},[84,87799,87800],{"class":86,"line":70},[84,87801,2729],{"emptyLinePlaceholder":403},[84,87803,87804,87806,87808],{"class":86,"line":120},[84,87805,1383],{"class":477},[84,87807,51661],{"class":51627},[84,87809,51634],{"class":477},[84,87811,87812,87814,87816,87818,87820,87822],{"class":86,"line":131},[84,87813,52471],{"class":477},[84,87815,51671],{"class":51627},[84,87817,51674],{"class":90},[84,87819,523],{"class":477},[84,87821,51679],{"class":104},[84,87823,51634],{"class":477},[84,87825,87826,87828,87830,87832,87834,87836,87838,87840,87842],{"class":86,"line":145},[84,87827,52471],{"class":477},[84,87829,51671],{"class":51627},[84,87831,15249],{"class":90},[84,87833,523],{"class":477},[84,87835,51718],{"class":104},[84,87837,51698],{"class":90},[84,87839,523],{"class":477},[84,87841,51725],{"class":104},[84,87843,51634],{"class":477},[84,87845,87846,87848,87850,87852,87854],{"class":86,"line":156},[84,87847,52471],{"class":477},[84,87849,51734],{"class":51627},[84,87851,51737],{"class":477},[84,87853,51734],{"class":51627},[84,87855,51634],{"class":477},[84,87857,87858,87860,87862],{"class":86,"line":164},[84,87859,52112],{"class":477},[84,87861,51661],{"class":51627},[84,87863,51634],{"class":477},[84,87865,87866],{"class":86,"line":175},[84,87867,2729],{"emptyLinePlaceholder":403},[84,87869,87870,87872,87874],{"class":86,"line":185},[84,87871,1383],{"class":477},[84,87873,52127],{"class":51627},[84,87875,51634],{"class":477},[84,87877,87878,87880,87882,87884,87886],{"class":86,"line":195},[84,87879,52471],{"class":477},[84,87881,51938],{"class":51627},[84,87883,55640],{"class":477},[84,87885,51938],{"class":51627},[84,87887,51634],{"class":477},[84,87889,87890,87892,87894],{"class":86,"line":206},[84,87891,52471],{"class":477},[84,87893,52140],{"class":51627},[84,87895,51634],{"class":477},[84,87897,87898,87900,87902],{"class":86,"line":217},[84,87899,70410],{"class":473},[84,87901,74099],{"class":90},[84,87903,11182],{"class":477},[84,87905,87906,87908,87910,87912,87914,87916,87918,87920,87922,87924,87927],{"class":86,"line":227},[84,87907,56097],{"class":477},[84,87909,54725],{"class":90},[84,87911,478],{"class":477},[84,87913,82257],{"class":104},[84,87915,74575],{"class":477},[84,87917,523],{"class":473},[84,87919,11907],{"class":473},[84,87921,74115],{"class":90},[84,87923,17590],{"class":477},[84,87925,87926],{"class":90},"toLocaleString",[84,87928,2305],{"class":477},[84,87930,87931,87934,87937,87939],{"class":86,"line":238},[84,87932,87933],{"class":90},"      setTimeout",[84,87935,87936],{"class":477},"(getTime, ",[84,87938,6739],{"class":94},[84,87940,484],{"class":477},[84,87942,87943],{"class":86,"line":249},[84,87944,2516],{"class":477},[84,87946,87947,87950],{"class":86,"line":262},[84,87948,87949],{"class":90},"    getTime",[84,87951,2305],{"class":477},[84,87953,87954,87956,87958],{"class":86,"line":273},[84,87955,52744],{"class":477},[84,87957,52140],{"class":51627},[84,87959,51634],{"class":477},[84,87961,87962,87964,87966],{"class":86,"line":283},[84,87963,52112],{"class":477},[84,87965,52127],{"class":51627},[84,87967,51634],{"class":477},[84,87969,87970],{"class":86,"line":294},[84,87971,2729],{"emptyLinePlaceholder":403},[84,87973,87974,87976,87978],{"class":86,"line":2028},[84,87975,52112],{"class":477},[84,87977,50962],{"class":51627},[84,87979,51634],{"class":477},[35,87981,87982],{},[64,87983],{"alt":66,"src":87984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[28,87986,87987],{"start":120},[31,87988,87678],{},[35,87990,87991],{},[64,87992],{"alt":66,"src":87993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[35,87995,87996],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[35,87998,39516],{},[35,88000,88001],{},"这个是简易版的递归函数深拷贝",[35,88003,88004],{},"一定要注意先数组再对象，因为万物皆可对象",[75,88006,88008],{"className":50960,"code":88007,"language":50962,"meta":66,"style":66},"\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",[81,88009,88010,88020,88034,88038,88046,88060,88080,88092,88100,88104,88112,88120,88130,88139,88147,88163,88167,88175,88179,88183,88195,88200,88219,88235,88240,88245,88250,88265,88270,88275,88284,88292,88309,88317,88323,88331,88336,88341,88350,88354,88358,88362,88373,88382,88392,88406,88416,88424,88432,88440,88444],{"__ignoreMap":66},[84,88011,88012,88014,88016,88018],{"class":86,"line":87},[84,88013,51624],{"class":477},[84,88015,51628],{"class":51627},[84,88017,51631],{"class":90},[84,88019,51634],{"class":477},[84,88021,88022,88024,88026,88028,88030,88032],{"class":86,"line":98},[84,88023,1383],{"class":477},[84,88025,50962],{"class":51627},[84,88027,51643],{"class":90},[84,88029,523],{"class":477},[84,88031,51648],{"class":104},[84,88033,51634],{"class":477},[84,88035,88036],{"class":86,"line":70},[84,88037,2729],{"emptyLinePlaceholder":403},[84,88039,88040,88042,88044],{"class":86,"line":120},[84,88041,1383],{"class":477},[84,88043,51661],{"class":51627},[84,88045,51634],{"class":477},[84,88047,88048,88050,88052,88054,88056,88058],{"class":86,"line":131},[84,88049,52471],{"class":477},[84,88051,51671],{"class":51627},[84,88053,51674],{"class":90},[84,88055,523],{"class":477},[84,88057,51679],{"class":104},[84,88059,51634],{"class":477},[84,88061,88062,88064,88066,88068,88070,88072,88074,88076,88078],{"class":86,"line":145},[84,88063,52471],{"class":477},[84,88065,51671],{"class":51627},[84,88067,15249],{"class":90},[84,88069,523],{"class":477},[84,88071,51718],{"class":104},[84,88073,51698],{"class":90},[84,88075,523],{"class":477},[84,88077,51725],{"class":104},[84,88079,51634],{"class":477},[84,88081,88082,88084,88086,88088,88090],{"class":86,"line":156},[84,88083,52471],{"class":477},[84,88085,51734],{"class":51627},[84,88087,51737],{"class":477},[84,88089,51734],{"class":51627},[84,88091,51634],{"class":477},[84,88093,88094,88096,88098],{"class":86,"line":164},[84,88095,52112],{"class":477},[84,88097,51661],{"class":51627},[84,88099,51634],{"class":477},[84,88101,88102],{"class":86,"line":175},[84,88103,2729],{"emptyLinePlaceholder":403},[84,88105,88106,88108,88110],{"class":86,"line":185},[84,88107,1383],{"class":477},[84,88109,52127],{"class":51627},[84,88111,51634],{"class":477},[84,88113,88114,88116,88118],{"class":86,"line":195},[84,88115,52471],{"class":477},[84,88117,52140],{"class":51627},[84,88119,51634],{"class":477},[84,88121,88122,88124,88126,88128],{"class":86,"line":206},[84,88123,11550],{"class":473},[84,88125,70297],{"class":94},[84,88127,13893],{"class":473},[84,88129,15901],{"class":477},[84,88131,88132,88134,88137],{"class":86,"line":217},[84,88133,71942],{"class":477},[84,88135,88136],{"class":104},"'pink'",[84,88138,31793],{"class":477},[84,88140,88141,88143,88145],{"class":86,"line":227},[84,88142,71952],{"class":477},[84,88144,1123],{"class":94},[84,88146,31793],{"class":477},[84,88148,88149,88152,88155,88157,88160],{"class":86,"line":238},[84,88150,88151],{"class":477},"      hobby: [",[84,88153,88154],{"class":104},"'乒乓球'",[84,88156,12764],{"class":477},[84,88158,88159],{"class":104},"'足球'",[84,88161,88162],{"class":477},"],\n",[84,88164,88165],{"class":86,"line":249},[84,88166,78198],{"class":477},[84,88168,88169,88172],{"class":86,"line":262},[84,88170,88171],{"class":477},"        baby: ",[84,88173,88174],{"class":104},"'小pink'\n",[84,88176,88177],{"class":86,"line":273},[84,88178,52725],{"class":477},[84,88180,88181],{"class":86,"line":283},[84,88182,2516],{"class":477},[84,88184,88185,88187,88190,88192],{"class":86,"line":294},[84,88186,11550],{"class":473},[84,88188,88189],{"class":94}," o",[84,88191,13893],{"class":473},[84,88193,88194],{"class":477}," {}\n",[84,88196,88197],{"class":86,"line":2028},[84,88198,88199],{"class":328},"    \u002F\u002F 拷贝函数\n",[84,88201,88202,88204,88207,88209,88212,88214,88217],{"class":86,"line":2057},[84,88203,70410],{"class":473},[84,88205,88206],{"class":90}," deepCopy",[84,88208,478],{"class":477},[84,88210,88211],{"class":5545},"newObj",[84,88213,12764],{"class":477},[84,88215,88216],{"class":5545},"oldObj",[84,88218,12771],{"class":477},[84,88220,88221,88223,88225,88227,88230,88232],{"class":86,"line":2062},[84,88222,52611],{"class":473},[84,88224,1991],{"class":477},[84,88226,52174],{"class":473},[84,88228,88229],{"class":477}," k ",[84,88231,26371],{"class":473},[84,88233,88234],{"class":477}," oldObj) {\n",[84,88236,88237],{"class":86,"line":2079},[84,88238,88239],{"class":328},"        \u002F\u002F 处理数组的问题\n",[84,88241,88242],{"class":86,"line":2084},[84,88243,88244],{"class":328},"        \u002F\u002F 判断是否属于数组\n",[84,88246,88247],{"class":86,"line":2089},[84,88248,88249],{"class":328},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[84,88251,88252,88254,88257,88260,88263],{"class":86,"line":2094},[84,88253,2826],{"class":473},[84,88255,88256],{"class":477}," (oldObj[k] ",[84,88258,88259],{"class":473},"instanceof",[84,88261,88262],{"class":90}," Array",[84,88264,12771],{"class":477},[84,88266,88267],{"class":86,"line":2108},[84,88268,88269],{"class":328},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[84,88271,88272],{"class":86,"line":2113},[84,88273,88274],{"class":328},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[84,88276,88277,88280,88282],{"class":86,"line":2906},[84,88278,88279],{"class":477},"          newObj[k] ",[84,88281,523],{"class":473},[84,88283,52165],{"class":477},[84,88285,88286,88289],{"class":86,"line":2920},[84,88287,88288],{"class":90},"          deepCopy",[84,88290,88291],{"class":477},"(newObj[k], oldObj[k])\n",[84,88293,88294,88296,88298,88300,88302,88304,88307],{"class":86,"line":2928},[84,88295,80406],{"class":477},[84,88297,2031],{"class":473},[84,88299,2034],{"class":473},[84,88301,88256],{"class":477},[84,88303,88259],{"class":473},[84,88305,88306],{"class":90}," Object",[84,88308,12771],{"class":477},[84,88310,88311,88313,88315],{"class":86,"line":2933},[84,88312,88279],{"class":477},[84,88314,523],{"class":473},[84,88316,88194],{"class":477},[84,88318,88319,88321],{"class":86,"line":2939},[84,88320,88288],{"class":90},[84,88322,88291],{"class":477},[84,88324,88325,88327,88329],{"class":86,"line":2945},[84,88326,80406],{"class":477},[84,88328,2031],{"class":473},[84,88330,15901],{"class":477},[84,88332,88333],{"class":86,"line":2950},[84,88334,88335],{"class":328},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[84,88337,88338],{"class":86,"line":8277},[84,88339,88340],{"class":328},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[84,88342,88343,88345,88347],{"class":86,"line":8301},[84,88344,88279],{"class":477},[84,88346,523],{"class":473},[84,88348,88349],{"class":477}," oldObj[k]\n",[84,88351,88352],{"class":86,"line":8306},[84,88353,2858],{"class":477},[84,88355,88356],{"class":86,"line":8312},[84,88357,52725],{"class":477},[84,88359,88360],{"class":86,"line":8339},[84,88361,2516],{"class":477},[84,88363,88364,88367,88370],{"class":86,"line":8344},[84,88365,88366],{"class":90},"    deepCopy",[84,88368,88369],{"class":477},"(o, obj) ",[84,88371,88372],{"class":328},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[84,88374,88375,88377,88379],{"class":86,"line":8350},[84,88376,74079],{"class":477},[84,88378,58573],{"class":90},[84,88380,88381],{"class":477},"(o)\n",[84,88383,88384,88387,88389],{"class":86,"line":8362},[84,88385,88386],{"class":477},"    o.age ",[84,88388,523],{"class":473},[84,88390,88391],{"class":94}," 20\n",[84,88393,88394,88397,88399,88401,88403],{"class":86,"line":8374},[84,88395,88396],{"class":477},"    o.hobby[",[84,88398,666],{"class":94},[84,88400,4772],{"class":477},[84,88402,523],{"class":473},[84,88404,88405],{"class":104}," '篮球'\n",[84,88407,88408,88411,88413],{"class":86,"line":8386},[84,88409,88410],{"class":477},"    o.family ",[84,88412,523],{"class":473},[84,88414,88415],{"class":104}," '老pink'\n",[84,88417,88418,88420,88422],{"class":86,"line":10045},[84,88419,74079],{"class":477},[84,88421,58573],{"class":90},[84,88423,70362],{"class":477},[84,88425,88426,88428,88430],{"class":86,"line":10070},[84,88427,52744],{"class":477},[84,88429,52140],{"class":51627},[84,88431,51634],{"class":477},[84,88433,88434,88436,88438],{"class":86,"line":10093},[84,88435,52112],{"class":477},[84,88437,52127],{"class":51627},[84,88439,51634],{"class":477},[84,88441,88442],{"class":86,"line":10117},[84,88443,2729],{"emptyLinePlaceholder":403},[84,88445,88446,88448,88450],{"class":86,"line":10122},[84,88447,52112],{"class":477},[84,88449,50962],{"class":51627},[84,88451,51634],{"class":477},[35,88453,88454],{},[64,88455],{"alt":66,"src":88456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22327,88458,88460,88461],{"id":88459},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[624,88462,88463],{},"js库lodash里面cloneDeep内部实现了深拷贝",[35,88465,88466],{},[39,88467,88468],{"href":88468,"rel":88469},"https:\u002F\u002Fwww.lodashjs.com\u002F",[43],[35,88471,88472],{},"lodash里边的方法都要加上一个下划线_",[35,88474,88475],{},"_.cloneDeep()",[75,88477,88479],{"className":50960,"code":88478,"language":50962,"meta":66,"style":66},"\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",[81,88480,88481,88491,88505,88509,88517,88531,88551,88563,88571,88575,88583,88588,88607,88615,88625,88633,88641,88653,88657,88663,88667,88671,88687,88695,88704,88712,88720,88728,88732],{"__ignoreMap":66},[84,88482,88483,88485,88487,88489],{"class":86,"line":87},[84,88484,51624],{"class":477},[84,88486,51628],{"class":51627},[84,88488,51631],{"class":90},[84,88490,51634],{"class":477},[84,88492,88493,88495,88497,88499,88501,88503],{"class":86,"line":98},[84,88494,1383],{"class":477},[84,88496,50962],{"class":51627},[84,88498,51643],{"class":90},[84,88500,523],{"class":477},[84,88502,51648],{"class":104},[84,88504,51634],{"class":477},[84,88506,88507],{"class":86,"line":70},[84,88508,2729],{"emptyLinePlaceholder":403},[84,88510,88511,88513,88515],{"class":86,"line":120},[84,88512,1383],{"class":477},[84,88514,51661],{"class":51627},[84,88516,51634],{"class":477},[84,88518,88519,88521,88523,88525,88527,88529],{"class":86,"line":131},[84,88520,52471],{"class":477},[84,88522,51671],{"class":51627},[84,88524,51674],{"class":90},[84,88526,523],{"class":477},[84,88528,51679],{"class":104},[84,88530,51634],{"class":477},[84,88532,88533,88535,88537,88539,88541,88543,88545,88547,88549],{"class":86,"line":145},[84,88534,52471],{"class":477},[84,88536,51671],{"class":51627},[84,88538,15249],{"class":90},[84,88540,523],{"class":477},[84,88542,51718],{"class":104},[84,88544,51698],{"class":90},[84,88546,523],{"class":477},[84,88548,51725],{"class":104},[84,88550,51634],{"class":477},[84,88552,88553,88555,88557,88559,88561],{"class":86,"line":156},[84,88554,52471],{"class":477},[84,88556,51734],{"class":51627},[84,88558,51737],{"class":477},[84,88560,51734],{"class":51627},[84,88562,51634],{"class":477},[84,88564,88565,88567,88569],{"class":86,"line":164},[84,88566,52112],{"class":477},[84,88568,51661],{"class":51627},[84,88570,51634],{"class":477},[84,88572,88573],{"class":86,"line":175},[84,88574,2729],{"emptyLinePlaceholder":403},[84,88576,88577,88579,88581],{"class":86,"line":185},[84,88578,1383],{"class":477},[84,88580,52127],{"class":51627},[84,88582,51634],{"class":477},[84,88584,88585],{"class":86,"line":195},[84,88586,88587],{"class":328},"  \u003C!-- 先引用这个库 -->\n",[84,88589,88590,88592,88594,88596,88598,88601,88603,88605],{"class":86,"line":206},[84,88591,52471],{"class":477},[84,88593,52140],{"class":51627},[84,88595,55565],{"class":90},[84,88597,523],{"class":477},[84,88599,88600],{"class":104},"\"lodash.min.js\"",[84,88602,55640],{"class":477},[84,88604,52140],{"class":51627},[84,88606,51634],{"class":477},[84,88608,88609,88611,88613],{"class":86,"line":217},[84,88610,52471],{"class":477},[84,88612,52140],{"class":51627},[84,88614,51634],{"class":477},[84,88616,88617,88619,88621,88623],{"class":86,"line":227},[84,88618,11550],{"class":473},[84,88620,70297],{"class":94},[84,88622,13893],{"class":473},[84,88624,15901],{"class":477},[84,88626,88627,88629,88631],{"class":86,"line":238},[84,88628,71942],{"class":477},[84,88630,88136],{"class":104},[84,88632,31793],{"class":477},[84,88634,88635,88637,88639],{"class":86,"line":249},[84,88636,71952],{"class":477},[84,88638,1123],{"class":94},[84,88640,31793],{"class":477},[84,88642,88643,88645,88647,88649,88651],{"class":86,"line":262},[84,88644,88151],{"class":477},[84,88646,88154],{"class":104},[84,88648,12764],{"class":477},[84,88650,88159],{"class":104},[84,88652,88162],{"class":477},[84,88654,88655],{"class":86,"line":273},[84,88656,78198],{"class":477},[84,88658,88659,88661],{"class":86,"line":283},[84,88660,88171],{"class":477},[84,88662,88174],{"class":104},[84,88664,88665],{"class":86,"line":294},[84,88666,52725],{"class":477},[84,88668,88669],{"class":86,"line":2028},[84,88670,2516],{"class":477},[84,88672,88673,88675,88677,88679,88682,88685],{"class":86,"line":2057},[84,88674,11550],{"class":473},[84,88676,88189],{"class":94},[84,88678,13893],{"class":473},[84,88680,88681],{"class":477}," _.",[84,88683,88684],{"class":90},"cloneDeep",[84,88686,70362],{"class":477},[84,88688,88689,88691,88693],{"class":86,"line":2062},[84,88690,74079],{"class":477},[84,88692,58573],{"class":90},[84,88694,88381],{"class":477},[84,88696,88697,88700,88702],{"class":86,"line":2079},[84,88698,88699],{"class":477},"    o.family.baby ",[84,88701,523],{"class":473},[84,88703,88415],{"class":104},[84,88705,88706,88708,88710],{"class":86,"line":2084},[84,88707,74079],{"class":477},[84,88709,58573],{"class":90},[84,88711,70362],{"class":477},[84,88713,88714,88716,88718],{"class":86,"line":2089},[84,88715,52744],{"class":477},[84,88717,52140],{"class":51627},[84,88719,51634],{"class":477},[84,88721,88722,88724,88726],{"class":86,"line":2094},[84,88723,52112],{"class":477},[84,88725,52127],{"class":51627},[84,88727,51634],{"class":477},[84,88729,88730],{"class":86,"line":2108},[84,88731,2729],{"emptyLinePlaceholder":403},[84,88733,88734,88736,88738],{"class":86,"line":2113},[84,88735,52112],{"class":477},[84,88737,50962],{"class":51627},[84,88739,51634],{"class":477},[35,88741,88742],{},[64,88743],{"alt":66,"src":88744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22327,88746,88748],{"id":88747},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[75,88750,88752],{"className":50960,"code":88751,"language":50962,"meta":66,"style":66},"\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",[81,88753,88754,88764,88778,88782,88790,88804,88824,88836,88844,88848,88856,88864,88874,88882,88890,88902,88906,88912,88916,88920,88925,88930,88935,88961,88969,88978,88986,88994,89002,89006],{"__ignoreMap":66},[84,88755,88756,88758,88760,88762],{"class":86,"line":87},[84,88757,51624],{"class":477},[84,88759,51628],{"class":51627},[84,88761,51631],{"class":90},[84,88763,51634],{"class":477},[84,88765,88766,88768,88770,88772,88774,88776],{"class":86,"line":98},[84,88767,1383],{"class":477},[84,88769,50962],{"class":51627},[84,88771,51643],{"class":90},[84,88773,523],{"class":477},[84,88775,51648],{"class":104},[84,88777,51634],{"class":477},[84,88779,88780],{"class":86,"line":70},[84,88781,2729],{"emptyLinePlaceholder":403},[84,88783,88784,88786,88788],{"class":86,"line":120},[84,88785,1383],{"class":477},[84,88787,51661],{"class":51627},[84,88789,51634],{"class":477},[84,88791,88792,88794,88796,88798,88800,88802],{"class":86,"line":131},[84,88793,52471],{"class":477},[84,88795,51671],{"class":51627},[84,88797,51674],{"class":90},[84,88799,523],{"class":477},[84,88801,51679],{"class":104},[84,88803,51634],{"class":477},[84,88805,88806,88808,88810,88812,88814,88816,88818,88820,88822],{"class":86,"line":145},[84,88807,52471],{"class":477},[84,88809,51671],{"class":51627},[84,88811,15249],{"class":90},[84,88813,523],{"class":477},[84,88815,51718],{"class":104},[84,88817,51698],{"class":90},[84,88819,523],{"class":477},[84,88821,51725],{"class":104},[84,88823,51634],{"class":477},[84,88825,88826,88828,88830,88832,88834],{"class":86,"line":156},[84,88827,52471],{"class":477},[84,88829,51734],{"class":51627},[84,88831,51737],{"class":477},[84,88833,51734],{"class":51627},[84,88835,51634],{"class":477},[84,88837,88838,88840,88842],{"class":86,"line":164},[84,88839,52112],{"class":477},[84,88841,51661],{"class":51627},[84,88843,51634],{"class":477},[84,88845,88846],{"class":86,"line":175},[84,88847,2729],{"emptyLinePlaceholder":403},[84,88849,88850,88852,88854],{"class":86,"line":185},[84,88851,1383],{"class":477},[84,88853,52127],{"class":51627},[84,88855,51634],{"class":477},[84,88857,88858,88860,88862],{"class":86,"line":195},[84,88859,52471],{"class":477},[84,88861,52140],{"class":51627},[84,88863,51634],{"class":477},[84,88865,88866,88868,88870,88872],{"class":86,"line":206},[84,88867,11550],{"class":473},[84,88869,70297],{"class":94},[84,88871,13893],{"class":473},[84,88873,15901],{"class":477},[84,88875,88876,88878,88880],{"class":86,"line":217},[84,88877,71942],{"class":477},[84,88879,88136],{"class":104},[84,88881,31793],{"class":477},[84,88883,88884,88886,88888],{"class":86,"line":227},[84,88885,71952],{"class":477},[84,88887,1123],{"class":94},[84,88889,31793],{"class":477},[84,88891,88892,88894,88896,88898,88900],{"class":86,"line":238},[84,88893,88151],{"class":477},[84,88895,88154],{"class":104},[84,88897,12764],{"class":477},[84,88899,88159],{"class":104},[84,88901,88162],{"class":477},[84,88903,88904],{"class":86,"line":249},[84,88905,78198],{"class":477},[84,88907,88908,88910],{"class":86,"line":262},[84,88909,88171],{"class":477},[84,88911,88174],{"class":104},[84,88913,88914],{"class":86,"line":273},[84,88915,52725],{"class":477},[84,88917,88918],{"class":86,"line":283},[84,88919,2516],{"class":477},[84,88921,88922],{"class":86,"line":294},[84,88923,88924],{"class":328},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[84,88926,88927],{"class":86,"line":2028},[84,88928,88929],{"class":328},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[84,88931,88932],{"class":86,"line":2057},[84,88933,88934],{"class":328},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[84,88936,88937,88939,88941,88943,88946,88948,88951,88953,88955,88957,88959],{"class":86,"line":2062},[84,88938,11550],{"class":473},[84,88940,88189],{"class":94},[84,88942,13893],{"class":473},[84,88944,88945],{"class":94}," JSON",[84,88947,1031],{"class":477},[84,88949,88950],{"class":90},"parse",[84,88952,478],{"class":477},[84,88954,71990],{"class":94},[84,88956,1031],{"class":477},[84,88958,71995],{"class":90},[84,88960,71998],{"class":477},[84,88962,88963,88965,88967],{"class":86,"line":2079},[84,88964,74079],{"class":477},[84,88966,58573],{"class":90},[84,88968,88381],{"class":477},[84,88970,88971,88973,88975],{"class":86,"line":2084},[84,88972,88699],{"class":477},[84,88974,523],{"class":473},[84,88976,88977],{"class":104}," '123'\n",[84,88979,88980,88982,88984],{"class":86,"line":2089},[84,88981,74079],{"class":477},[84,88983,58573],{"class":90},[84,88985,70362],{"class":477},[84,88987,88988,88990,88992],{"class":86,"line":2094},[84,88989,52744],{"class":477},[84,88991,52140],{"class":51627},[84,88993,51634],{"class":477},[84,88995,88996,88998,89000],{"class":86,"line":2108},[84,88997,52112],{"class":477},[84,88999,52127],{"class":51627},[84,89001,51634],{"class":477},[84,89003,89004],{"class":86,"line":2113},[84,89005,2729],{"emptyLinePlaceholder":403},[84,89007,89008,89010,89012],{"class":86,"line":2906},[84,89009,52112],{"class":477},[84,89011,50962],{"class":51627},[84,89013,51634],{"class":477},[35,89015,89016],{},[64,89017],{"alt":66,"src":89018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89020,89022],{"id":89021},"_415-异常处理","4.15 异常处理",[28,89024,89025],{},[31,89026,89027],{},"throw抛异常",[35,89029,89030],{},[64,89031],{"alt":66,"src":89032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[28,89034,89035],{"start":98},[31,89036,89037],{},"try\u002Fcatch 捕获错误信息",[35,89039,89040],{},[64,89041],{"alt":66,"src":89042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[75,89044,89046],{"className":50960,"code":89045,"language":50962,"meta":66,"style":66},"\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",[81,89047,89048,89058,89072,89076,89084,89098,89118,89130,89138,89142,89150,89162,89170,89179,89186,89191,89210,89219,89230,89235,89245,89250,89255,89260,89277,89281,89286,89293,89305,89309,89321,89325,89329,89334,89339,89346,89354,89362,89366],{"__ignoreMap":66},[84,89049,89050,89052,89054,89056],{"class":86,"line":87},[84,89051,51624],{"class":477},[84,89053,51628],{"class":51627},[84,89055,51631],{"class":90},[84,89057,51634],{"class":477},[84,89059,89060,89062,89064,89066,89068,89070],{"class":86,"line":98},[84,89061,1383],{"class":477},[84,89063,50962],{"class":51627},[84,89065,51643],{"class":90},[84,89067,523],{"class":477},[84,89069,51648],{"class":104},[84,89071,51634],{"class":477},[84,89073,89074],{"class":86,"line":70},[84,89075,2729],{"emptyLinePlaceholder":403},[84,89077,89078,89080,89082],{"class":86,"line":120},[84,89079,1383],{"class":477},[84,89081,51661],{"class":51627},[84,89083,51634],{"class":477},[84,89085,89086,89088,89090,89092,89094,89096],{"class":86,"line":131},[84,89087,52471],{"class":477},[84,89089,51671],{"class":51627},[84,89091,51674],{"class":90},[84,89093,523],{"class":477},[84,89095,51679],{"class":104},[84,89097,51634],{"class":477},[84,89099,89100,89102,89104,89106,89108,89110,89112,89114,89116],{"class":86,"line":145},[84,89101,52471],{"class":477},[84,89103,51671],{"class":51627},[84,89105,15249],{"class":90},[84,89107,523],{"class":477},[84,89109,51718],{"class":104},[84,89111,51698],{"class":90},[84,89113,523],{"class":477},[84,89115,51725],{"class":104},[84,89117,51634],{"class":477},[84,89119,89120,89122,89124,89126,89128],{"class":86,"line":156},[84,89121,52471],{"class":477},[84,89123,51734],{"class":51627},[84,89125,51737],{"class":477},[84,89127,51734],{"class":51627},[84,89129,51634],{"class":477},[84,89131,89132,89134,89136],{"class":86,"line":164},[84,89133,52112],{"class":477},[84,89135,51661],{"class":51627},[84,89137,51634],{"class":477},[84,89139,89140],{"class":86,"line":175},[84,89141,2729],{"emptyLinePlaceholder":403},[84,89143,89144,89146,89148],{"class":86,"line":185},[84,89145,1383],{"class":477},[84,89147,52127],{"class":51627},[84,89149,51634],{"class":477},[84,89151,89152,89154,89156,89158,89160],{"class":86,"line":195},[84,89153,52471],{"class":477},[84,89155,35],{"class":51627},[84,89157,53821],{"class":477},[84,89159,35],{"class":51627},[84,89161,51634],{"class":477},[84,89163,89164,89166,89168],{"class":86,"line":206},[84,89165,52471],{"class":477},[84,89167,52140],{"class":51627},[84,89169,51634],{"class":477},[84,89171,89172,89174,89177],{"class":86,"line":217},[84,89173,70410],{"class":473},[84,89175,89176],{"class":90}," fn",[84,89178,11182],{"class":477},[84,89180,89181,89184],{"class":86,"line":227},[84,89182,89183],{"class":473},"      try",[84,89185,15901],{"class":477},[84,89187,89188],{"class":86,"line":238},[84,89189,89190],{"class":328},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[84,89192,89193,89195,89197,89199,89201,89203,89205,89208],{"class":86,"line":249},[84,89194,61596],{"class":473},[84,89196,7154],{"class":94},[84,89198,13893],{"class":473},[84,89200,54722],{"class":477},[84,89202,54725],{"class":90},[84,89204,478],{"class":477},[84,89206,89207],{"class":104},"'.p'",[84,89209,484],{"class":477},[84,89211,89212,89215,89217],{"class":86,"line":262},[84,89213,89214],{"class":477},"        p.style.color ",[84,89216,523],{"class":473},[84,89218,67377],{"class":104},[84,89220,89221,89224,89227],{"class":86,"line":273},[84,89222,89223],{"class":477},"      } ",[84,89225,89226],{"class":473},"catch",[84,89228,89229],{"class":477}," (err) {\n",[84,89231,89232],{"class":86,"line":283},[84,89233,89234],{"class":328},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[84,89236,89237,89240,89242],{"class":86,"line":294},[84,89238,89239],{"class":477},"        console.",[84,89241,58573],{"class":90},[84,89243,89244],{"class":477},"(err.message)\n",[84,89246,89247],{"class":86,"line":2028},[84,89248,89249],{"class":328},"        \u002F\u002F 想要中断程序，需要加return\n",[84,89251,89252],{"class":86,"line":2057},[84,89253,89254],{"class":328},"        \u002F\u002F return\n",[84,89256,89257],{"class":86,"line":2062},[84,89258,89259],{"class":328},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[84,89261,89262,89265,89267,89270,89272,89275],{"class":86,"line":2079},[84,89263,89264],{"class":473},"        throw",[84,89266,11907],{"class":473},[84,89268,89269],{"class":90}," Error",[84,89271,478],{"class":477},[84,89273,89274],{"class":104},"'你看看，选择器错误了吧'",[84,89276,484],{"class":477},[84,89278,89279],{"class":86,"line":2084},[84,89280,52725],{"class":477},[84,89282,89283],{"class":86,"line":2089},[84,89284,89285],{"class":328},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[84,89287,89288,89291],{"class":86,"line":2094},[84,89289,89290],{"class":473},"      finally",[84,89292,15901],{"class":477},[84,89294,89295,89298,89300,89303],{"class":86,"line":2108},[84,89296,89297],{"class":90},"        alert",[84,89299,478],{"class":477},[84,89301,89302],{"class":104},"'弹出对话框'",[84,89304,484],{"class":477},[84,89306,89307],{"class":86,"line":2113},[84,89308,52725],{"class":477},[84,89310,89311,89313,89315,89317,89319],{"class":86,"line":2906},[84,89312,58570],{"class":477},[84,89314,58573],{"class":90},[84,89316,478],{"class":477},[84,89318,945],{"class":94},[84,89320,484],{"class":477},[84,89322,89323],{"class":86,"line":2920},[84,89324,2729],{"emptyLinePlaceholder":403},[84,89326,89327],{"class":86,"line":2928},[84,89328,2516],{"class":477},[84,89330,89331],{"class":86,"line":2933},[84,89332,89333],{"class":328},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[84,89335,89336],{"class":86,"line":2939},[84,89337,89338],{"class":328},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[84,89340,89341,89344],{"class":86,"line":2945},[84,89342,89343],{"class":90},"    fn",[84,89345,2305],{"class":477},[84,89347,89348,89350,89352],{"class":86,"line":2950},[84,89349,52744],{"class":477},[84,89351,52140],{"class":51627},[84,89353,51634],{"class":477},[84,89355,89356,89358,89360],{"class":86,"line":8277},[84,89357,52112],{"class":477},[84,89359,52127],{"class":51627},[84,89361,51634],{"class":477},[84,89363,89364],{"class":86,"line":8301},[84,89365,2729],{"emptyLinePlaceholder":403},[84,89367,89368,89370,89372],{"class":86,"line":8306},[84,89369,52112],{"class":477},[84,89371,50962],{"class":51627},[84,89373,51634],{"class":477},[35,89375,89376],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[28,89378,89379],{"start":70},[31,89380,89381],{},"debugger",[35,89383,89384],{},[64,89385],{"alt":66,"src":89386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[35,89388,89389],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89391,89393],{"id":89392},"_416-处理this","4.16 处理this",[23,89395,89397],{"id":89396},"_4161-this的指向","4.16.1 this的指向",[28,89399,89400],{},[31,89401,89402],{},"普通函数的this",[35,89404,89405],{},[64,89406],{"alt":66,"src":89407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[28,89409,89410],{"start":98},[31,89411,89412],{},"箭头函数的this",[35,89414,89415],{},[64,89416],{"alt":66,"src":89417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[35,89419,89420],{},[64,89421],{"alt":66,"src":89422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[35,89424,89425],{},[64,89426],{"alt":66,"src":89427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[23,89429,89431],{"id":89430},"_4162-this的改变","4.16.2 this的改变",[35,89433,89434],{},"call() apply() bind()",[28,89436,89437],{},[31,89438,89439],{},"call()",[35,89441,89442],{},[64,89443],{"alt":66,"src":89444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[35,89446,89447],{},"两个作用：①调用函数；②改变this指向",[75,89449,89451],{"className":53394,"code":89450,"language":53396,"meta":66,"style":66},"\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",[81,89452,89453,89461,89469,89473,89478,89482,89487,89492,89497,89501,89506,89514],{"__ignoreMap":66},[84,89454,89455,89457,89459],{"class":86,"line":87},[84,89456,1383],{"class":477},[84,89458,52127],{"class":51627},[84,89460,51634],{"class":477},[84,89462,89463,89465,89467],{"class":86,"line":98},[84,89464,52471],{"class":477},[84,89466,52140],{"class":51627},[84,89468,51634],{"class":477},[84,89470,89471],{"class":86,"line":70},[84,89472,71849],{"class":477},[84,89474,89475],{"class":86,"line":120},[84,89476,89477],{"class":477},"      uname: 'pink'\n",[84,89479,89480],{"class":86,"line":131},[84,89481,2516],{"class":477},[84,89483,89484],{"class":86,"line":145},[84,89485,89486],{"class":477},"    function fn(x, y) {\n",[84,89488,89489],{"class":86,"line":156},[84,89490,89491],{"class":477},"      console.log(this)  \u002F\u002Fwindow\n",[84,89493,89494],{"class":86,"line":164},[84,89495,89496],{"class":477},"      console.log(x + y)\n",[84,89498,89499],{"class":86,"line":175},[84,89500,2516],{"class":477},[84,89502,89503],{"class":86,"line":185},[84,89504,89505],{"class":477},"    fn.call(obj, 1, 2)\n",[84,89507,89508,89510,89512],{"class":86,"line":195},[84,89509,52744],{"class":477},[84,89511,52140],{"class":51627},[84,89513,51634],{"class":477},[84,89515,89516,89518,89520],{"class":86,"line":206},[84,89517,52112],{"class":477},[84,89519,52127],{"class":51627},[84,89521,51634],{"class":477},[35,89523,89524],{},[64,89525],{"alt":66,"src":89526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[28,89528,89529],{"start":98},[31,89530,89531],{},"apply()",[35,89533,89534],{},[64,89535],{"alt":66,"src":89536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[35,89538,89447],{},[35,89540,89541],{},"call传递的是普通参数，而apply必须传递的是数组",[75,89543,89545],{"className":50960,"code":89544,"language":50962,"meta":66,"style":66},"\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",[81,89546,89547,89557,89571,89575,89583,89597,89617,89629,89637,89641,89649,89657,89667,89674,89678,89683,89699,89711,89725,89729,89734,89753,89758,89762,89767,89772,89780,89785,89807,89812,89828,89844,89856,89860,89865,89884,89892,89900,89904],{"__ignoreMap":66},[84,89548,89549,89551,89553,89555],{"class":86,"line":87},[84,89550,51624],{"class":477},[84,89552,51628],{"class":51627},[84,89554,51631],{"class":90},[84,89556,51634],{"class":477},[84,89558,89559,89561,89563,89565,89567,89569],{"class":86,"line":98},[84,89560,1383],{"class":477},[84,89562,50962],{"class":51627},[84,89564,51643],{"class":90},[84,89566,523],{"class":477},[84,89568,51648],{"class":104},[84,89570,51634],{"class":477},[84,89572,89573],{"class":86,"line":70},[84,89574,2729],{"emptyLinePlaceholder":403},[84,89576,89577,89579,89581],{"class":86,"line":120},[84,89578,1383],{"class":477},[84,89580,51661],{"class":51627},[84,89582,51634],{"class":477},[84,89584,89585,89587,89589,89591,89593,89595],{"class":86,"line":131},[84,89586,52471],{"class":477},[84,89588,51671],{"class":51627},[84,89590,51674],{"class":90},[84,89592,523],{"class":477},[84,89594,51679],{"class":104},[84,89596,51634],{"class":477},[84,89598,89599,89601,89603,89605,89607,89609,89611,89613,89615],{"class":86,"line":145},[84,89600,52471],{"class":477},[84,89602,51671],{"class":51627},[84,89604,15249],{"class":90},[84,89606,523],{"class":477},[84,89608,51718],{"class":104},[84,89610,51698],{"class":90},[84,89612,523],{"class":477},[84,89614,51725],{"class":104},[84,89616,51634],{"class":477},[84,89618,89619,89621,89623,89625,89627],{"class":86,"line":156},[84,89620,52471],{"class":477},[84,89622,51734],{"class":51627},[84,89624,51737],{"class":477},[84,89626,51734],{"class":51627},[84,89628,51634],{"class":477},[84,89630,89631,89633,89635],{"class":86,"line":164},[84,89632,52112],{"class":477},[84,89634,51661],{"class":51627},[84,89636,51634],{"class":477},[84,89638,89639],{"class":86,"line":175},[84,89640,2729],{"emptyLinePlaceholder":403},[84,89642,89643,89645,89647],{"class":86,"line":185},[84,89644,1383],{"class":477},[84,89646,52127],{"class":51627},[84,89648,51634],{"class":477},[84,89650,89651,89653,89655],{"class":86,"line":195},[84,89652,52471],{"class":477},[84,89654,52140],{"class":51627},[84,89656,51634],{"class":477},[84,89658,89659,89661,89663,89665],{"class":86,"line":206},[84,89660,11550],{"class":473},[84,89662,70297],{"class":94},[84,89664,13893],{"class":473},[84,89666,15901],{"class":477},[84,89668,89669,89671],{"class":86,"line":217},[84,89670,71952],{"class":477},[84,89672,89673],{"class":94},"18\n",[84,89675,89676],{"class":86,"line":227},[84,89677,2516],{"class":477},[84,89679,89680],{"class":86,"line":238},[84,89681,89682],{"class":328},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[84,89684,89685,89687,89689,89691,89693,89695,89697],{"class":86,"line":249},[84,89686,70410],{"class":473},[84,89688,89176],{"class":90},[84,89690,478],{"class":477},[84,89692,1293],{"class":5545},[84,89694,12764],{"class":477},[84,89696,1318],{"class":5545},[84,89698,12771],{"class":477},[84,89700,89701,89703,89705,89707,89709],{"class":86,"line":262},[84,89702,58570],{"class":477},[84,89704,58573],{"class":90},[84,89706,478],{"class":477},[84,89708,87319],{"class":94},[84,89710,484],{"class":477},[84,89712,89713,89715,89717,89720,89722],{"class":86,"line":273},[84,89714,58570],{"class":477},[84,89716,58573],{"class":90},[84,89718,89719],{"class":477},"(x ",[84,89721,954],{"class":473},[84,89723,89724],{"class":477}," y)\n",[84,89726,89727],{"class":86,"line":283},[84,89728,2516],{"class":477},[84,89730,89731],{"class":86,"line":294},[84,89732,89733],{"class":328},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[84,89735,89736,89739,89742,89745,89747,89749,89751],{"class":86,"line":2028},[84,89737,89738],{"class":477},"    fn.",[84,89740,89741],{"class":90},"apply",[84,89743,89744],{"class":477},"(obj, [",[84,89746,692],{"class":94},[84,89748,12764],{"class":477},[84,89750,553],{"class":94},[84,89752,4986],{"class":477},[84,89754,89755],{"class":86,"line":2057},[84,89756,89757],{"class":328},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[84,89759,89760],{"class":86,"line":2062},[84,89761,2729],{"emptyLinePlaceholder":403},[84,89763,89764],{"class":86,"line":2079},[84,89765,89766],{"class":328},"    \u002F\u002F 使用场景：求数组最大值\n",[84,89768,89769],{"class":86,"line":2084},[84,89770,89771],{"class":328},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[84,89773,89774,89777],{"class":86,"line":2089},[84,89775,89776],{"class":328},"    \u002F\u002F console.log(max)",[84,89778,89779],{"class":328},"   \u002F\u002F3\n",[84,89781,89782],{"class":86,"line":2094},[84,89783,89784],{"class":328},"    \u002F\u002F 指向空或者Math都是可以的\n",[84,89786,89787,89789,89791,89793,89795,89797,89799,89801,89803,89805],{"class":86,"line":2108},[84,89788,11550],{"class":473},[84,89790,58021],{"class":94},[84,89792,13893],{"class":473},[84,89794,52553],{"class":477},[84,89796,784],{"class":94},[84,89798,12764],{"class":477},[84,89800,977],{"class":94},[84,89802,12764],{"class":477},[84,89804,1008],{"class":94},[84,89806,33573],{"class":477},[84,89808,89809],{"class":86,"line":2113},[84,89810,89811],{"class":328},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[84,89813,89814,89816,89818,89820,89823,89825],{"class":86,"line":2906},[84,89815,11550],{"class":473},[84,89817,6280],{"class":94},[84,89819,13893],{"class":473},[84,89821,89822],{"class":477}," Math.max.",[84,89824,89741],{"class":90},[84,89826,89827],{"class":477},"(Math, arr)\n",[84,89829,89830,89832,89835,89837,89840,89842],{"class":86,"line":2920},[84,89831,11550],{"class":473},[84,89833,89834],{"class":94}," min",[84,89836,13893],{"class":473},[84,89838,89839],{"class":477}," Math.min.",[84,89841,89741],{"class":90},[84,89843,89827],{"class":477},[84,89845,89846,89848,89850,89853],{"class":86,"line":2928},[84,89847,74079],{"class":477},[84,89849,58573],{"class":90},[84,89851,89852],{"class":477},"(max, min)     ",[84,89854,89855],{"class":328},"\u002F\u002F100,4\n",[84,89857,89858],{"class":86,"line":2933},[84,89859,2729],{"emptyLinePlaceholder":403},[84,89861,89862],{"class":86,"line":2939},[84,89863,89864],{"class":328},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[84,89866,89867,89869,89871,89874,89876,89878,89881],{"class":86,"line":2945},[84,89868,74079],{"class":477},[84,89870,58573],{"class":90},[84,89872,89873],{"class":477},"(Max.",[84,89875,6344],{"class":90},[84,89877,478],{"class":477},[84,89879,89880],{"class":473},"...",[84,89882,89883],{"class":477},"arr))\n",[84,89885,89886,89888,89890],{"class":86,"line":2950},[84,89887,52744],{"class":477},[84,89889,52140],{"class":51627},[84,89891,51634],{"class":477},[84,89893,89894,89896,89898],{"class":86,"line":8277},[84,89895,52112],{"class":477},[84,89897,52127],{"class":51627},[84,89899,51634],{"class":477},[84,89901,89902],{"class":86,"line":8301},[84,89903,2729],{"emptyLinePlaceholder":403},[84,89905,89906,89908,89910],{"class":86,"line":8306},[84,89907,52112],{"class":477},[84,89909,50962],{"class":51627},[84,89911,51634],{"class":477},[35,89913,89914],{},[64,89915],{"alt":66,"src":89916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[28,89918,89919],{"start":70},[31,89920,89921],{},"bind()",[35,89923,89924],{},[64,89925],{"alt":66,"src":89926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[35,89928,89929],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[35,89931,89932],{},"bind的语法跟call很相似",[75,89934,89936],{"className":53394,"code":89935,"language":53396,"meta":66,"style":66},"\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",[81,89937,89938,89946,89954,89958,89963,89967,89971,89976,89980,89985,89990,89995,90000,90005,90010,90015,90019,90027],{"__ignoreMap":66},[84,89939,89940,89942,89944],{"class":86,"line":87},[84,89941,1383],{"class":477},[84,89943,52127],{"class":51627},[84,89945,51634],{"class":477},[84,89947,89948,89950,89952],{"class":86,"line":98},[84,89949,52471],{"class":477},[84,89951,52140],{"class":51627},[84,89953,51634],{"class":477},[84,89955,89956],{"class":86,"line":70},[84,89957,71849],{"class":477},[84,89959,89960],{"class":86,"line":120},[84,89961,89962],{"class":477},"      age: 18\n",[84,89964,89965],{"class":86,"line":131},[84,89966,2516],{"class":477},[84,89968,89969],{"class":86,"line":145},[84,89970,77469],{"class":477},[84,89972,89973],{"class":86,"line":156},[84,89974,89975],{"class":477},"      console.log(this)\n",[84,89977,89978],{"class":86,"line":164},[84,89979,2516],{"class":477},[84,89981,89982],{"class":86,"line":175},[84,89983,89984],{"class":477},"    \u002F\u002F 1.bind 不会调用函数\n",[84,89986,89987],{"class":86,"line":185},[84,89988,89989],{"class":477},"    \u002F\u002F 2.bind能改变this的指向\n",[84,89991,89992],{"class":86,"line":195},[84,89993,89994],{"class":477},"    fn.bind()\n",[84,89996,89997],{"class":86,"line":206},[84,89998,89999],{"class":477},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[84,90001,90002],{"class":86,"line":217},[84,90003,90004],{"class":477},"    const fun = fn.bind(obj)\n",[84,90006,90007],{"class":86,"line":227},[84,90008,90009],{"class":477},"    \u002F\u002F console.log(fun)\n",[84,90011,90012],{"class":86,"line":238},[84,90013,90014],{"class":477},"    \u002F\u002F 调用,查看this的指向\n",[84,90016,90017],{"class":86,"line":249},[84,90018,52978],{"class":477},[84,90020,90021,90023,90025],{"class":86,"line":262},[84,90022,52744],{"class":477},[84,90024,52140],{"class":51627},[84,90026,51634],{"class":477},[84,90028,90029,90031,90033],{"class":86,"line":273},[84,90030,52112],{"class":477},[84,90032,52127],{"class":51627},[84,90034,51634],{"class":477},[35,90036,90037],{},[64,90038],{"alt":66,"src":90039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[28,90041,90042],{"start":120},[31,90043,90044],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[75,90046,90048],{"className":53394,"code":90047,"language":53396,"meta":66,"style":66},"\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",[81,90049,90050,90058,90071,90079,90084,90088,90093,90098,90103,90108,90113,90118,90123,90128,90132,90140],{"__ignoreMap":66},[84,90051,90052,90054,90056],{"class":86,"line":87},[84,90053,1383],{"class":477},[84,90055,52127],{"class":51627},[84,90057,51634],{"class":477},[84,90059,90060,90062,90064,90067,90069],{"class":86,"line":98},[84,90061,52471],{"class":477},[84,90063,54213],{"class":51627},[84,90065,90066],{"class":477},">禁用\u003C\u002F",[84,90068,54213],{"class":51627},[84,90070,51634],{"class":477},[84,90072,90073,90075,90077],{"class":86,"line":70},[84,90074,52471],{"class":477},[84,90076,52140],{"class":51627},[84,90078,51634],{"class":477},[84,90080,90081],{"class":86,"line":120},[84,90082,90083],{"class":477},"    const btn = document.querySelector('button')\n",[84,90085,90086],{"class":86,"line":131},[84,90087,59342],{"class":477},[84,90089,90090],{"class":86,"line":145},[84,90091,90092],{"class":477},"      this.disabled = true\n",[84,90094,90095],{"class":86,"line":156},[84,90096,90097],{"class":477},"      \u002F\u002F 定时器是window进行调用的\n",[84,90099,90100],{"class":86,"line":164},[84,90101,90102],{"class":477},"      setTimeout(function () {\n",[84,90104,90105],{"class":86,"line":175},[84,90106,90107],{"class":477},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[84,90109,90110],{"class":86,"line":185},[84,90111,90112],{"class":477},"        this.disabled = false\n",[84,90114,90115],{"class":86,"line":195},[84,90116,90117],{"class":477},"      }.bind(this), 2000)\n",[84,90119,90120],{"class":86,"line":206},[84,90121,90122],{"class":477},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[84,90124,90125],{"class":86,"line":217},[84,90126,90127],{"class":477},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[84,90129,90130],{"class":86,"line":227},[84,90131,33788],{"class":477},[84,90133,90134,90136,90138],{"class":86,"line":238},[84,90135,52744],{"class":477},[84,90137,52140],{"class":51627},[84,90139,51634],{"class":477},[84,90141,90142,90144,90146],{"class":86,"line":249},[84,90143,52112],{"class":477},[84,90145,52127],{"class":51627},[84,90147,51634],{"class":477},[28,90149,90150],{"start":131},[31,90151,22282],{},[35,90153,90154],{},[64,90155],{"alt":66,"src":90156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90158,90160],{"id":90159},"_417-性能优化","4.17 性能优化",[23,90162,90164],{"id":90163},"_4171-防抖","4.17.1 防抖",[35,90166,90167],{},[64,90168],{"alt":66,"src":90169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[35,90171,90172],{},[624,90173,90174],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[35,90176,90177],{},"防抖实现方式：",[1480,90179,90180],{},[31,90181,90182],{},"lodash 提供了防抖处理",[35,90184,90185],{},"_.debounce(func,[wait=0],[options={}])",[35,90187,90188],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[75,90190,90192],{"className":50960,"code":90191,"language":50962,"meta":66,"style":66},"\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",[81,90193,90194,90204,90218,90222,90230,90244,90264,90276,90284,90290,90300,90312,90324,90335,90347,90357,90367,90380,90384,90392,90400,90404,90412,90430,90448,90456,90475,90485,90494,90505,90510,90514,90519,90524,90529,90554,90562,90570,90574],{"__ignoreMap":66},[84,90195,90196,90198,90200,90202],{"class":86,"line":87},[84,90197,51624],{"class":477},[84,90199,51628],{"class":51627},[84,90201,51631],{"class":90},[84,90203,51634],{"class":477},[84,90205,90206,90208,90210,90212,90214,90216],{"class":86,"line":98},[84,90207,1383],{"class":477},[84,90209,50962],{"class":51627},[84,90211,51643],{"class":90},[84,90213,523],{"class":477},[84,90215,51648],{"class":104},[84,90217,51634],{"class":477},[84,90219,90220],{"class":86,"line":70},[84,90221,2729],{"emptyLinePlaceholder":403},[84,90223,90224,90226,90228],{"class":86,"line":120},[84,90225,1383],{"class":477},[84,90227,51661],{"class":51627},[84,90229,51634],{"class":477},[84,90231,90232,90234,90236,90238,90240,90242],{"class":86,"line":131},[84,90233,52471],{"class":477},[84,90235,51671],{"class":51627},[84,90237,51674],{"class":90},[84,90239,523],{"class":477},[84,90241,51679],{"class":104},[84,90243,51634],{"class":477},[84,90245,90246,90248,90250,90252,90254,90256,90258,90260,90262],{"class":86,"line":145},[84,90247,52471],{"class":477},[84,90249,51671],{"class":51627},[84,90251,15249],{"class":90},[84,90253,523],{"class":477},[84,90255,51718],{"class":104},[84,90257,51698],{"class":90},[84,90259,523],{"class":477},[84,90261,51725],{"class":104},[84,90263,51634],{"class":477},[84,90265,90266,90268,90270,90272,90274],{"class":86,"line":156},[84,90267,52471],{"class":477},[84,90269,51734],{"class":51627},[84,90271,51737],{"class":477},[84,90273,51734],{"class":51627},[84,90275,51634],{"class":477},[84,90277,90278,90280,90282],{"class":86,"line":164},[84,90279,52471],{"class":477},[84,90281,389],{"class":51627},[84,90283,51634],{"class":477},[84,90285,90286,90288],{"class":86,"line":175},[84,90287,55078],{"class":90},[84,90289,15901],{"class":477},[84,90291,90292,90294,90296,90298],{"class":86,"line":185},[84,90293,72922],{"class":94},[84,90295,51764],{"class":477},[84,90297,60831],{"class":94},[84,90299,1634],{"class":477},[84,90301,90302,90304,90306,90308,90310],{"class":86,"line":195},[84,90303,55097],{"class":94},[84,90305,51764],{"class":477},[84,90307,2052],{"class":94},[84,90309,51819],{"class":473},[84,90311,1634],{"class":477},[84,90313,90314,90316,90318,90320,90322],{"class":86,"line":206},[84,90315,55111],{"class":94},[84,90317,51764],{"class":477},[84,90319,2052],{"class":94},[84,90321,51819],{"class":473},[84,90323,1634],{"class":477},[84,90325,90326,90328,90330,90333],{"class":86,"line":217},[84,90327,55210],{"class":94},[84,90329,51764],{"class":477},[84,90331,90332],{"class":94},"gray",[84,90334,1634],{"class":477},[84,90336,90337,90339,90341,90343,90345],{"class":86,"line":227},[84,90338,55248],{"class":94},[84,90340,51764],{"class":477},[84,90342,1298],{"class":94},[84,90344,51819],{"class":473},[84,90346,1634],{"class":477},[84,90348,90349,90351,90353,90355],{"class":86,"line":238},[84,90350,57742],{"class":94},[84,90352,51764],{"class":477},[84,90354,61168],{"class":94},[84,90356,1634],{"class":477},[84,90358,90359,90361,90363,90365],{"class":86,"line":249},[84,90360,57612],{"class":94},[84,90362,51764],{"class":477},[84,90364,51919],{"class":94},[84,90366,1634],{"class":477},[84,90368,90369,90372,90374,90376,90378],{"class":86,"line":262},[84,90370,90371],{"class":94},"      padding-top",[84,90373,51764],{"class":477},[84,90375,792],{"class":94},[84,90377,51819],{"class":473},[84,90379,1634],{"class":477},[84,90381,90382],{"class":86,"line":273},[84,90383,2516],{"class":477},[84,90385,90386,90388,90390],{"class":86,"line":283},[84,90387,52744],{"class":477},[84,90389,389],{"class":51627},[84,90391,51634],{"class":477},[84,90393,90394,90396,90398],{"class":86,"line":294},[84,90395,52112],{"class":477},[84,90397,51661],{"class":51627},[84,90399,51634],{"class":477},[84,90401,90402],{"class":86,"line":2028},[84,90403,2729],{"emptyLinePlaceholder":403},[84,90405,90406,90408,90410],{"class":86,"line":2057},[84,90407,1383],{"class":477},[84,90409,52127],{"class":51627},[84,90411,51634],{"class":477},[84,90413,90414,90416,90418,90420,90422,90424,90426,90428],{"class":86,"line":2062},[84,90415,52471],{"class":477},[84,90417,51938],{"class":51627},[84,90419,53813],{"class":90},[84,90421,523],{"class":477},[84,90423,53818],{"class":104},[84,90425,55640],{"class":477},[84,90427,51938],{"class":51627},[84,90429,51634],{"class":477},[84,90431,90432,90434,90436,90438,90440,90442,90444,90446],{"class":86,"line":2079},[84,90433,52471],{"class":477},[84,90435,52140],{"class":51627},[84,90437,55565],{"class":90},[84,90439,523],{"class":477},[84,90441,88600],{"class":104},[84,90443,55640],{"class":477},[84,90445,52140],{"class":51627},[84,90447,51634],{"class":477},[84,90449,90450,90452,90454],{"class":86,"line":2084},[84,90451,52471],{"class":477},[84,90453,52140],{"class":51627},[84,90455,51634],{"class":477},[84,90457,90458,90460,90462,90464,90466,90468,90470,90473],{"class":86,"line":2089},[84,90459,11550],{"class":473},[84,90461,87259],{"class":94},[84,90463,13893],{"class":473},[84,90465,54722],{"class":477},[84,90467,54725],{"class":90},[84,90469,478],{"class":477},[84,90471,90472],{"class":104},"'.box'",[84,90474,484],{"class":477},[84,90476,90477,90479,90481,90483],{"class":86,"line":2094},[84,90478,52546],{"class":473},[84,90480,9767],{"class":477},[84,90482,523],{"class":473},[84,90484,47660],{"class":94},[84,90486,90487,90489,90492],{"class":86,"line":2108},[84,90488,70410],{"class":473},[84,90490,90491],{"class":90}," mouseMove",[84,90493,11182],{"class":477},[84,90495,90496,90499,90501,90503],{"class":86,"line":2113},[84,90497,90498],{"class":477},"      box.innerHTML ",[84,90500,523],{"class":473},[84,90502,3361],{"class":477},[84,90504,3031],{"class":473},[84,90506,90507],{"class":86,"line":2906},[84,90508,90509],{"class":328},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[84,90511,90512],{"class":86,"line":2920},[84,90513,2516],{"class":477},[84,90515,90516],{"class":86,"line":2928},[84,90517,90518],{"class":328},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[84,90520,90521],{"class":86,"line":2933},[84,90522,90523],{"class":328},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[84,90525,90526],{"class":86,"line":2939},[84,90527,90528],{"class":328},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[84,90530,90531,90534,90536,90538,90541,90544,90547,90550,90552],{"class":86,"line":2945},[84,90532,90533],{"class":477},"    box.",[84,90535,58139],{"class":90},[84,90537,478],{"class":477},[84,90539,90540],{"class":104},"'mousemove'",[84,90542,90543],{"class":477},", _.",[84,90545,90546],{"class":90},"debounce",[84,90548,90549],{"class":477},"(mouseMove, ",[84,90551,65400],{"class":94},[84,90553,30824],{"class":477},[84,90555,90556,90558,90560],{"class":86,"line":2950},[84,90557,52744],{"class":477},[84,90559,52140],{"class":51627},[84,90561,51634],{"class":477},[84,90563,90564,90566,90568],{"class":86,"line":8277},[84,90565,52112],{"class":477},[84,90567,52127],{"class":51627},[84,90569,51634],{"class":477},[84,90571,90572],{"class":86,"line":8301},[84,90573,2729],{"emptyLinePlaceholder":403},[84,90575,90576,90578,90580],{"class":86,"line":8306},[84,90577,52112],{"class":477},[84,90579,50962],{"class":51627},[84,90581,51634],{"class":477},[1480,90583,90584],{},[31,90585,90586],{},"手写一个防抖函数来处理",[35,90588,90589],{},"防抖的核心就是利用定时器来实现的：",[35,90591,90592],{},"①声明一个定时器变量",[35,90594,90595],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[35,90597,90598],{},"③如果没有定时器则开启定时器，记得存到变量里面",[75,90600,90602],{"className":50960,"code":90601,"language":50962,"meta":66,"style":66},"\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",[81,90603,90604,90614,90628,90632,90640,90654,90674,90686,90694,90700,90710,90722,90734,90744,90756,90766,90776,90788,90792,90800,90808,90812,90820,90838,90856,90864,90882,90892,90900,90910,90914,90918,90922,90927,90932,90937,90942,90947,90952,90970,90977,90982,90990,90995,91008,91024,91034,91039,91043,91047,91067,91071,91076,91081,91086,91091,91099,91107,91111],{"__ignoreMap":66},[84,90605,90606,90608,90610,90612],{"class":86,"line":87},[84,90607,51624],{"class":477},[84,90609,51628],{"class":51627},[84,90611,51631],{"class":90},[84,90613,51634],{"class":477},[84,90615,90616,90618,90620,90622,90624,90626],{"class":86,"line":98},[84,90617,1383],{"class":477},[84,90619,50962],{"class":51627},[84,90621,51643],{"class":90},[84,90623,523],{"class":477},[84,90625,51648],{"class":104},[84,90627,51634],{"class":477},[84,90629,90630],{"class":86,"line":70},[84,90631,2729],{"emptyLinePlaceholder":403},[84,90633,90634,90636,90638],{"class":86,"line":120},[84,90635,1383],{"class":477},[84,90637,51661],{"class":51627},[84,90639,51634],{"class":477},[84,90641,90642,90644,90646,90648,90650,90652],{"class":86,"line":131},[84,90643,52471],{"class":477},[84,90645,51671],{"class":51627},[84,90647,51674],{"class":90},[84,90649,523],{"class":477},[84,90651,51679],{"class":104},[84,90653,51634],{"class":477},[84,90655,90656,90658,90660,90662,90664,90666,90668,90670,90672],{"class":86,"line":145},[84,90657,52471],{"class":477},[84,90659,51671],{"class":51627},[84,90661,15249],{"class":90},[84,90663,523],{"class":477},[84,90665,51718],{"class":104},[84,90667,51698],{"class":90},[84,90669,523],{"class":477},[84,90671,51725],{"class":104},[84,90673,51634],{"class":477},[84,90675,90676,90678,90680,90682,90684],{"class":86,"line":156},[84,90677,52471],{"class":477},[84,90679,51734],{"class":51627},[84,90681,51737],{"class":477},[84,90683,51734],{"class":51627},[84,90685,51634],{"class":477},[84,90687,90688,90690,90692],{"class":86,"line":164},[84,90689,52471],{"class":477},[84,90691,389],{"class":51627},[84,90693,51634],{"class":477},[84,90695,90696,90698],{"class":86,"line":175},[84,90697,55078],{"class":90},[84,90699,15901],{"class":477},[84,90701,90702,90704,90706,90708],{"class":86,"line":185},[84,90703,72922],{"class":94},[84,90705,51764],{"class":477},[84,90707,60831],{"class":94},[84,90709,1634],{"class":477},[84,90711,90712,90714,90716,90718,90720],{"class":86,"line":195},[84,90713,55097],{"class":94},[84,90715,51764],{"class":477},[84,90717,2052],{"class":94},[84,90719,51819],{"class":473},[84,90721,1634],{"class":477},[84,90723,90724,90726,90728,90730,90732],{"class":86,"line":206},[84,90725,55111],{"class":94},[84,90727,51764],{"class":477},[84,90729,2052],{"class":94},[84,90731,51819],{"class":473},[84,90733,1634],{"class":477},[84,90735,90736,90738,90740,90742],{"class":86,"line":217},[84,90737,55210],{"class":94},[84,90739,51764],{"class":477},[84,90741,90332],{"class":94},[84,90743,1634],{"class":477},[84,90745,90746,90748,90750,90752,90754],{"class":86,"line":227},[84,90747,55248],{"class":94},[84,90749,51764],{"class":477},[84,90751,1298],{"class":94},[84,90753,51819],{"class":473},[84,90755,1634],{"class":477},[84,90757,90758,90760,90762,90764],{"class":86,"line":238},[84,90759,57742],{"class":94},[84,90761,51764],{"class":477},[84,90763,61168],{"class":94},[84,90765,1634],{"class":477},[84,90767,90768,90770,90772,90774],{"class":86,"line":249},[84,90769,57612],{"class":94},[84,90771,51764],{"class":477},[84,90773,51919],{"class":94},[84,90775,1634],{"class":477},[84,90777,90778,90780,90782,90784,90786],{"class":86,"line":262},[84,90779,90371],{"class":94},[84,90781,51764],{"class":477},[84,90783,792],{"class":94},[84,90785,51819],{"class":473},[84,90787,1634],{"class":477},[84,90789,90790],{"class":86,"line":273},[84,90791,2516],{"class":477},[84,90793,90794,90796,90798],{"class":86,"line":283},[84,90795,52744],{"class":477},[84,90797,389],{"class":51627},[84,90799,51634],{"class":477},[84,90801,90802,90804,90806],{"class":86,"line":294},[84,90803,52112],{"class":477},[84,90805,51661],{"class":51627},[84,90807,51634],{"class":477},[84,90809,90810],{"class":86,"line":2028},[84,90811,2729],{"emptyLinePlaceholder":403},[84,90813,90814,90816,90818],{"class":86,"line":2057},[84,90815,1383],{"class":477},[84,90817,52127],{"class":51627},[84,90819,51634],{"class":477},[84,90821,90822,90824,90826,90828,90830,90832,90834,90836],{"class":86,"line":2062},[84,90823,52471],{"class":477},[84,90825,51938],{"class":51627},[84,90827,53813],{"class":90},[84,90829,523],{"class":477},[84,90831,53818],{"class":104},[84,90833,55640],{"class":477},[84,90835,51938],{"class":51627},[84,90837,51634],{"class":477},[84,90839,90840,90842,90844,90846,90848,90850,90852,90854],{"class":86,"line":2079},[84,90841,52471],{"class":477},[84,90843,52140],{"class":51627},[84,90845,55565],{"class":90},[84,90847,523],{"class":477},[84,90849,88600],{"class":104},[84,90851,55640],{"class":477},[84,90853,52140],{"class":51627},[84,90855,51634],{"class":477},[84,90857,90858,90860,90862],{"class":86,"line":2084},[84,90859,52471],{"class":477},[84,90861,52140],{"class":51627},[84,90863,51634],{"class":477},[84,90865,90866,90868,90870,90872,90874,90876,90878,90880],{"class":86,"line":2089},[84,90867,11550],{"class":473},[84,90869,87259],{"class":94},[84,90871,13893],{"class":473},[84,90873,54722],{"class":477},[84,90875,54725],{"class":90},[84,90877,478],{"class":477},[84,90879,90472],{"class":104},[84,90881,484],{"class":477},[84,90883,90884,90886,90888,90890],{"class":86,"line":2094},[84,90885,52546],{"class":473},[84,90887,9767],{"class":477},[84,90889,523],{"class":473},[84,90891,47660],{"class":94},[84,90893,90894,90896,90898],{"class":86,"line":2108},[84,90895,70410],{"class":473},[84,90897,90491],{"class":90},[84,90899,11182],{"class":477},[84,90901,90902,90904,90906,90908],{"class":86,"line":2113},[84,90903,90498],{"class":477},[84,90905,523],{"class":473},[84,90907,3361],{"class":477},[84,90909,3031],{"class":473},[84,90911,90912],{"class":86,"line":2906},[84,90913,90509],{"class":328},[84,90915,90916],{"class":86,"line":2920},[84,90917,2516],{"class":477},[84,90919,90920],{"class":86,"line":2928},[84,90921,90518],{"class":328},[84,90923,90924],{"class":86,"line":2933},[84,90925,90926],{"class":328},"    \u002F\u002F 手写防抖函数\n",[84,90928,90929],{"class":86,"line":2939},[84,90930,90931],{"class":328},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[84,90933,90934],{"class":86,"line":2945},[84,90935,90936],{"class":328},"    \u002F\u002F 1.声明定时器变量\n",[84,90938,90939],{"class":86,"line":2950},[84,90940,90941],{"class":328},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[84,90943,90944],{"class":86,"line":8277},[84,90945,90946],{"class":328},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[84,90948,90949],{"class":86,"line":8301},[84,90950,90951],{"class":328},"    \u002F\u002F 4.定时器里面写函数调用\n",[84,90953,90954,90956,90959,90961,90964,90966,90968],{"class":86,"line":8306},[84,90955,70410],{"class":473},[84,90957,90958],{"class":90}," debounce",[84,90960,478],{"class":477},[84,90962,90963],{"class":5545},"fn",[84,90965,12764],{"class":477},[84,90967,1193],{"class":5545},[84,90969,12771],{"class":477},[84,90971,90972,90974],{"class":86,"line":8312},[84,90973,80098],{"class":473},[84,90975,90976],{"class":477}," timer\n",[84,90978,90979],{"class":86,"line":8339},[84,90980,90981],{"class":328},"      \u002F\u002F return 返回一个匿名函数\n",[84,90983,90984,90986,90988],{"class":86,"line":8344},[84,90985,74308],{"class":473},[84,90987,59244],{"class":473},[84,90989,54778],{"class":477},[84,90991,90992],{"class":86,"line":8350},[84,90993,90994],{"class":328},"        \u002F\u002F 这里边写第二三四步\n",[84,90996,90997,90999,91002,91005],{"class":86,"line":8362},[84,90998,2826],{"class":473},[84,91000,91001],{"class":477}," (timer) ",[84,91003,91004],{"class":90},"clearTimeout",[84,91006,91007],{"class":477},"(timer)\n",[84,91009,91010,91013,91015,91018,91020,91022],{"class":86,"line":8374},[84,91011,91012],{"class":477},"        timer ",[84,91014,523],{"class":473},[84,91016,91017],{"class":90}," setTimeout",[84,91019,478],{"class":477},[84,91021,54775],{"class":473},[84,91023,54778],{"class":477},[84,91025,91026,91029,91031],{"class":86,"line":8386},[84,91027,91028],{"class":90},"          fn",[84,91030,13379],{"class":477},[84,91032,91033],{"class":328},"\u002F\u002F加小括号调用fn }, t)\n",[84,91035,91036],{"class":86,"line":10045},[84,91037,91038],{"class":477},"        }, t)\n",[84,91040,91041],{"class":86,"line":10070},[84,91042,52725],{"class":477},[84,91044,91045],{"class":86,"line":10093},[84,91046,2516],{"class":477},[84,91048,91049,91051,91053,91055,91057,91059,91061,91063,91065],{"class":86,"line":10117},[84,91050,90533],{"class":477},[84,91052,58139],{"class":90},[84,91054,478],{"class":477},[84,91056,90540],{"class":104},[84,91058,12764],{"class":477},[84,91060,90546],{"class":90},[84,91062,90549],{"class":477},[84,91064,65400],{"class":94},[84,91066,30824],{"class":477},[84,91068,91069],{"class":86,"line":10122},[84,91070,2729],{"emptyLinePlaceholder":403},[84,91072,91073],{"class":86,"line":10127},[84,91074,91075],{"class":328},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[84,91077,91078],{"class":86,"line":10132},[84,91079,91080],{"class":328},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[84,91082,91083],{"class":86,"line":10141},[84,91084,91085],{"class":328},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[84,91087,91088],{"class":86,"line":10146},[84,91089,91090],{"class":328},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[84,91092,91093,91095,91097],{"class":86,"line":10152},[84,91094,52744],{"class":477},[84,91096,52140],{"class":51627},[84,91098,51634],{"class":477},[84,91100,91101,91103,91105],{"class":86,"line":10173},[84,91102,52112],{"class":477},[84,91104,52127],{"class":51627},[84,91106,51634],{"class":477},[84,91108,91109],{"class":86,"line":10179},[84,91110,2729],{"emptyLinePlaceholder":403},[84,91112,91113,91115,91117],{"class":86,"line":10193},[84,91114,52112],{"class":477},[84,91116,50962],{"class":51627},[84,91118,51634],{"class":477},[23,91120,91122],{"id":91121},"_4172-节流","4.17.2 节流",[35,91124,91125],{},[64,91126],{"alt":66,"src":91127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[35,91129,91130],{},[64,91131],{"alt":66,"src":91132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[35,91134,91135],{},[624,91136,91137],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[35,91139,91140],{},"实现方式：",[1480,91142,91143],{},[31,91144,91145],{},"lodash 提供的节流函数来处理",[35,91147,91148],{},"_.throttle(func,[wait=0],[options=])",[35,91150,91151],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[75,91153,91155],{"className":50960,"code":91154,"language":50962,"meta":66,"style":66},"\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",[81,91156,91157,91167,91181,91185,91193,91207,91227,91239,91247,91253,91263,91275,91287,91297,91309,91319,91329,91341,91345,91353,91361,91365,91373,91391,91409,91417,91435,91445,91453,91463,91467,91471,91475,91480,91485,91506,91514,91522,91526],{"__ignoreMap":66},[84,91158,91159,91161,91163,91165],{"class":86,"line":87},[84,91160,51624],{"class":477},[84,91162,51628],{"class":51627},[84,91164,51631],{"class":90},[84,91166,51634],{"class":477},[84,91168,91169,91171,91173,91175,91177,91179],{"class":86,"line":98},[84,91170,1383],{"class":477},[84,91172,50962],{"class":51627},[84,91174,51643],{"class":90},[84,91176,523],{"class":477},[84,91178,51648],{"class":104},[84,91180,51634],{"class":477},[84,91182,91183],{"class":86,"line":70},[84,91184,2729],{"emptyLinePlaceholder":403},[84,91186,91187,91189,91191],{"class":86,"line":120},[84,91188,1383],{"class":477},[84,91190,51661],{"class":51627},[84,91192,51634],{"class":477},[84,91194,91195,91197,91199,91201,91203,91205],{"class":86,"line":131},[84,91196,52471],{"class":477},[84,91198,51671],{"class":51627},[84,91200,51674],{"class":90},[84,91202,523],{"class":477},[84,91204,51679],{"class":104},[84,91206,51634],{"class":477},[84,91208,91209,91211,91213,91215,91217,91219,91221,91223,91225],{"class":86,"line":145},[84,91210,52471],{"class":477},[84,91212,51671],{"class":51627},[84,91214,15249],{"class":90},[84,91216,523],{"class":477},[84,91218,51718],{"class":104},[84,91220,51698],{"class":90},[84,91222,523],{"class":477},[84,91224,51725],{"class":104},[84,91226,51634],{"class":477},[84,91228,91229,91231,91233,91235,91237],{"class":86,"line":156},[84,91230,52471],{"class":477},[84,91232,51734],{"class":51627},[84,91234,51737],{"class":477},[84,91236,51734],{"class":51627},[84,91238,51634],{"class":477},[84,91240,91241,91243,91245],{"class":86,"line":164},[84,91242,52471],{"class":477},[84,91244,389],{"class":51627},[84,91246,51634],{"class":477},[84,91248,91249,91251],{"class":86,"line":175},[84,91250,55078],{"class":90},[84,91252,15901],{"class":477},[84,91254,91255,91257,91259,91261],{"class":86,"line":185},[84,91256,72922],{"class":94},[84,91258,51764],{"class":477},[84,91260,60831],{"class":94},[84,91262,1634],{"class":477},[84,91264,91265,91267,91269,91271,91273],{"class":86,"line":195},[84,91266,55097],{"class":94},[84,91268,51764],{"class":477},[84,91270,2052],{"class":94},[84,91272,51819],{"class":473},[84,91274,1634],{"class":477},[84,91276,91277,91279,91281,91283,91285],{"class":86,"line":206},[84,91278,55111],{"class":94},[84,91280,51764],{"class":477},[84,91282,2052],{"class":94},[84,91284,51819],{"class":473},[84,91286,1634],{"class":477},[84,91288,91289,91291,91293,91295],{"class":86,"line":217},[84,91290,55210],{"class":94},[84,91292,51764],{"class":477},[84,91294,90332],{"class":94},[84,91296,1634],{"class":477},[84,91298,91299,91301,91303,91305,91307],{"class":86,"line":227},[84,91300,55248],{"class":94},[84,91302,51764],{"class":477},[84,91304,1298],{"class":94},[84,91306,51819],{"class":473},[84,91308,1634],{"class":477},[84,91310,91311,91313,91315,91317],{"class":86,"line":238},[84,91312,57742],{"class":94},[84,91314,51764],{"class":477},[84,91316,61168],{"class":94},[84,91318,1634],{"class":477},[84,91320,91321,91323,91325,91327],{"class":86,"line":249},[84,91322,57612],{"class":94},[84,91324,51764],{"class":477},[84,91326,51919],{"class":94},[84,91328,1634],{"class":477},[84,91330,91331,91333,91335,91337,91339],{"class":86,"line":262},[84,91332,90371],{"class":94},[84,91334,51764],{"class":477},[84,91336,792],{"class":94},[84,91338,51819],{"class":473},[84,91340,1634],{"class":477},[84,91342,91343],{"class":86,"line":273},[84,91344,2516],{"class":477},[84,91346,91347,91349,91351],{"class":86,"line":283},[84,91348,52744],{"class":477},[84,91350,389],{"class":51627},[84,91352,51634],{"class":477},[84,91354,91355,91357,91359],{"class":86,"line":294},[84,91356,52112],{"class":477},[84,91358,51661],{"class":51627},[84,91360,51634],{"class":477},[84,91362,91363],{"class":86,"line":2028},[84,91364,2729],{"emptyLinePlaceholder":403},[84,91366,91367,91369,91371],{"class":86,"line":2057},[84,91368,1383],{"class":477},[84,91370,52127],{"class":51627},[84,91372,51634],{"class":477},[84,91374,91375,91377,91379,91381,91383,91385,91387,91389],{"class":86,"line":2062},[84,91376,52471],{"class":477},[84,91378,51938],{"class":51627},[84,91380,53813],{"class":90},[84,91382,523],{"class":477},[84,91384,53818],{"class":104},[84,91386,55640],{"class":477},[84,91388,51938],{"class":51627},[84,91390,51634],{"class":477},[84,91392,91393,91395,91397,91399,91401,91403,91405,91407],{"class":86,"line":2079},[84,91394,52471],{"class":477},[84,91396,52140],{"class":51627},[84,91398,55565],{"class":90},[84,91400,523],{"class":477},[84,91402,88600],{"class":104},[84,91404,55640],{"class":477},[84,91406,52140],{"class":51627},[84,91408,51634],{"class":477},[84,91410,91411,91413,91415],{"class":86,"line":2084},[84,91412,52471],{"class":477},[84,91414,52140],{"class":51627},[84,91416,51634],{"class":477},[84,91418,91419,91421,91423,91425,91427,91429,91431,91433],{"class":86,"line":2089},[84,91420,11550],{"class":473},[84,91422,87259],{"class":94},[84,91424,13893],{"class":473},[84,91426,54722],{"class":477},[84,91428,54725],{"class":90},[84,91430,478],{"class":477},[84,91432,90472],{"class":104},[84,91434,484],{"class":477},[84,91436,91437,91439,91441,91443],{"class":86,"line":2094},[84,91438,52546],{"class":473},[84,91440,9767],{"class":477},[84,91442,523],{"class":473},[84,91444,47660],{"class":94},[84,91446,91447,91449,91451],{"class":86,"line":2108},[84,91448,70410],{"class":473},[84,91450,90491],{"class":90},[84,91452,11182],{"class":477},[84,91454,91455,91457,91459,91461],{"class":86,"line":2113},[84,91456,90498],{"class":477},[84,91458,523],{"class":473},[84,91460,3361],{"class":477},[84,91462,3031],{"class":473},[84,91464,91465],{"class":86,"line":2906},[84,91466,90509],{"class":328},[84,91468,91469],{"class":86,"line":2920},[84,91470,2516],{"class":477},[84,91472,91473],{"class":86,"line":2928},[84,91474,90518],{"class":328},[84,91476,91477],{"class":86,"line":2933},[84,91478,91479],{"class":328},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[84,91481,91482],{"class":86,"line":2939},[84,91483,91484],{"class":328},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[84,91486,91487,91489,91491,91493,91495,91497,91500,91502,91504],{"class":86,"line":2945},[84,91488,90533],{"class":477},[84,91490,58139],{"class":90},[84,91492,478],{"class":477},[84,91494,90540],{"class":104},[84,91496,90543],{"class":477},[84,91498,91499],{"class":90},"throttle",[84,91501,90549],{"class":477},[84,91503,65400],{"class":94},[84,91505,30824],{"class":477},[84,91507,91508,91510,91512],{"class":86,"line":2950},[84,91509,52744],{"class":477},[84,91511,52140],{"class":51627},[84,91513,51634],{"class":477},[84,91515,91516,91518,91520],{"class":86,"line":8277},[84,91517,52112],{"class":477},[84,91519,52127],{"class":51627},[84,91521,51634],{"class":477},[84,91523,91524],{"class":86,"line":8301},[84,91525,2729],{"emptyLinePlaceholder":403},[84,91527,91528,91530,91532],{"class":86,"line":8306},[84,91529,52112],{"class":477},[84,91531,50962],{"class":51627},[84,91533,51634],{"class":477},[1480,91535,91536],{},[31,91537,91538],{},"手写一个节流函数来处理",[35,91540,71278],{},[35,91542,90592],{},[35,91544,91545],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[35,91547,91548],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[75,91550,91552],{"className":50960,"code":91551,"language":50962,"meta":66,"style":66},"\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",[81,91553,91554,91564,91578,91582,91590,91604,91624,91636,91644,91650,91660,91672,91684,91694,91706,91716,91726,91738,91742,91750,91758,91762,91770,91788,91806,91814,91832,91842,91850,91860,91864,91868,91872,91877,91882,91887,91892,91897,91902,91919,91925,91933,91944,91959,91966,91971,91976,91986,91991,91996,92001,92005,92009,92013,92033,92041,92049,92053],{"__ignoreMap":66},[84,91555,91556,91558,91560,91562],{"class":86,"line":87},[84,91557,51624],{"class":477},[84,91559,51628],{"class":51627},[84,91561,51631],{"class":90},[84,91563,51634],{"class":477},[84,91565,91566,91568,91570,91572,91574,91576],{"class":86,"line":98},[84,91567,1383],{"class":477},[84,91569,50962],{"class":51627},[84,91571,51643],{"class":90},[84,91573,523],{"class":477},[84,91575,51648],{"class":104},[84,91577,51634],{"class":477},[84,91579,91580],{"class":86,"line":70},[84,91581,2729],{"emptyLinePlaceholder":403},[84,91583,91584,91586,91588],{"class":86,"line":120},[84,91585,1383],{"class":477},[84,91587,51661],{"class":51627},[84,91589,51634],{"class":477},[84,91591,91592,91594,91596,91598,91600,91602],{"class":86,"line":131},[84,91593,52471],{"class":477},[84,91595,51671],{"class":51627},[84,91597,51674],{"class":90},[84,91599,523],{"class":477},[84,91601,51679],{"class":104},[84,91603,51634],{"class":477},[84,91605,91606,91608,91610,91612,91614,91616,91618,91620,91622],{"class":86,"line":145},[84,91607,52471],{"class":477},[84,91609,51671],{"class":51627},[84,91611,15249],{"class":90},[84,91613,523],{"class":477},[84,91615,51718],{"class":104},[84,91617,51698],{"class":90},[84,91619,523],{"class":477},[84,91621,51725],{"class":104},[84,91623,51634],{"class":477},[84,91625,91626,91628,91630,91632,91634],{"class":86,"line":156},[84,91627,52471],{"class":477},[84,91629,51734],{"class":51627},[84,91631,51737],{"class":477},[84,91633,51734],{"class":51627},[84,91635,51634],{"class":477},[84,91637,91638,91640,91642],{"class":86,"line":164},[84,91639,52471],{"class":477},[84,91641,389],{"class":51627},[84,91643,51634],{"class":477},[84,91645,91646,91648],{"class":86,"line":175},[84,91647,55078],{"class":90},[84,91649,15901],{"class":477},[84,91651,91652,91654,91656,91658],{"class":86,"line":185},[84,91653,72922],{"class":94},[84,91655,51764],{"class":477},[84,91657,60831],{"class":94},[84,91659,1634],{"class":477},[84,91661,91662,91664,91666,91668,91670],{"class":86,"line":195},[84,91663,55097],{"class":94},[84,91665,51764],{"class":477},[84,91667,2052],{"class":94},[84,91669,51819],{"class":473},[84,91671,1634],{"class":477},[84,91673,91674,91676,91678,91680,91682],{"class":86,"line":206},[84,91675,55111],{"class":94},[84,91677,51764],{"class":477},[84,91679,2052],{"class":94},[84,91681,51819],{"class":473},[84,91683,1634],{"class":477},[84,91685,91686,91688,91690,91692],{"class":86,"line":217},[84,91687,55210],{"class":94},[84,91689,51764],{"class":477},[84,91691,90332],{"class":94},[84,91693,1634],{"class":477},[84,91695,91696,91698,91700,91702,91704],{"class":86,"line":227},[84,91697,55248],{"class":94},[84,91699,51764],{"class":477},[84,91701,1298],{"class":94},[84,91703,51819],{"class":473},[84,91705,1634],{"class":477},[84,91707,91708,91710,91712,91714],{"class":86,"line":238},[84,91709,57742],{"class":94},[84,91711,51764],{"class":477},[84,91713,61168],{"class":94},[84,91715,1634],{"class":477},[84,91717,91718,91720,91722,91724],{"class":86,"line":249},[84,91719,57612],{"class":94},[84,91721,51764],{"class":477},[84,91723,51919],{"class":94},[84,91725,1634],{"class":477},[84,91727,91728,91730,91732,91734,91736],{"class":86,"line":262},[84,91729,90371],{"class":94},[84,91731,51764],{"class":477},[84,91733,792],{"class":94},[84,91735,51819],{"class":473},[84,91737,1634],{"class":477},[84,91739,91740],{"class":86,"line":273},[84,91741,2516],{"class":477},[84,91743,91744,91746,91748],{"class":86,"line":283},[84,91745,52744],{"class":477},[84,91747,389],{"class":51627},[84,91749,51634],{"class":477},[84,91751,91752,91754,91756],{"class":86,"line":294},[84,91753,52112],{"class":477},[84,91755,51661],{"class":51627},[84,91757,51634],{"class":477},[84,91759,91760],{"class":86,"line":2028},[84,91761,2729],{"emptyLinePlaceholder":403},[84,91763,91764,91766,91768],{"class":86,"line":2057},[84,91765,1383],{"class":477},[84,91767,52127],{"class":51627},[84,91769,51634],{"class":477},[84,91771,91772,91774,91776,91778,91780,91782,91784,91786],{"class":86,"line":2062},[84,91773,52471],{"class":477},[84,91775,51938],{"class":51627},[84,91777,53813],{"class":90},[84,91779,523],{"class":477},[84,91781,53818],{"class":104},[84,91783,55640],{"class":477},[84,91785,51938],{"class":51627},[84,91787,51634],{"class":477},[84,91789,91790,91792,91794,91796,91798,91800,91802,91804],{"class":86,"line":2079},[84,91791,52471],{"class":477},[84,91793,52140],{"class":51627},[84,91795,55565],{"class":90},[84,91797,523],{"class":477},[84,91799,88600],{"class":104},[84,91801,55640],{"class":477},[84,91803,52140],{"class":51627},[84,91805,51634],{"class":477},[84,91807,91808,91810,91812],{"class":86,"line":2084},[84,91809,52471],{"class":477},[84,91811,52140],{"class":51627},[84,91813,51634],{"class":477},[84,91815,91816,91818,91820,91822,91824,91826,91828,91830],{"class":86,"line":2089},[84,91817,11550],{"class":473},[84,91819,87259],{"class":94},[84,91821,13893],{"class":473},[84,91823,54722],{"class":477},[84,91825,54725],{"class":90},[84,91827,478],{"class":477},[84,91829,90472],{"class":104},[84,91831,484],{"class":477},[84,91833,91834,91836,91838,91840],{"class":86,"line":2094},[84,91835,52546],{"class":473},[84,91837,9767],{"class":477},[84,91839,523],{"class":473},[84,91841,47660],{"class":94},[84,91843,91844,91846,91848],{"class":86,"line":2108},[84,91845,70410],{"class":473},[84,91847,90491],{"class":90},[84,91849,11182],{"class":477},[84,91851,91852,91854,91856,91858],{"class":86,"line":2113},[84,91853,90498],{"class":477},[84,91855,523],{"class":473},[84,91857,3361],{"class":477},[84,91859,3031],{"class":473},[84,91861,91862],{"class":86,"line":2906},[84,91863,90509],{"class":328},[84,91865,91866],{"class":86,"line":2920},[84,91867,2516],{"class":477},[84,91869,91870],{"class":86,"line":2928},[84,91871,90518],{"class":328},[84,91873,91874],{"class":86,"line":2933},[84,91875,91876],{"class":328},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[84,91878,91879],{"class":86,"line":2939},[84,91880,91881],{"class":328},"    \u002F\u002F 1.声明一个定时器变量\n",[84,91883,91884],{"class":86,"line":2945},[84,91885,91886],{"class":328},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[84,91888,91889],{"class":86,"line":2950},[84,91890,91891],{"class":328},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[84,91893,91894],{"class":86,"line":8277},[84,91895,91896],{"class":328},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[84,91898,91899],{"class":86,"line":8301},[84,91900,91901],{"class":328},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[84,91903,91904,91906,91909,91911,91913,91915,91917],{"class":86,"line":8306},[84,91905,70410],{"class":473},[84,91907,91908],{"class":90}," throttle",[84,91910,478],{"class":477},[84,91912,90963],{"class":5545},[84,91914,12764],{"class":477},[84,91916,1193],{"class":5545},[84,91918,12771],{"class":477},[84,91920,91921,91923],{"class":86,"line":8312},[84,91922,80098],{"class":473},[84,91924,90976],{"class":477},[84,91926,91927,91929,91931],{"class":86,"line":8339},[84,91928,74308],{"class":473},[84,91930,59244],{"class":473},[84,91932,54778],{"class":477},[84,91934,91935,91937,91939,91941],{"class":86,"line":8344},[84,91936,2826],{"class":473},[84,91938,1991],{"class":477},[84,91940,701],{"class":473},[84,91942,91943],{"class":477},"timer) {\n",[84,91945,91946,91949,91951,91953,91955,91957],{"class":86,"line":8350},[84,91947,91948],{"class":477},"          timer ",[84,91950,523],{"class":473},[84,91952,91017],{"class":90},[84,91954,478],{"class":477},[84,91956,54775],{"class":473},[84,91958,54778],{"class":477},[84,91960,91961,91964],{"class":86,"line":8362},[84,91962,91963],{"class":90},"            fn",[84,91965,2305],{"class":477},[84,91967,91968],{"class":86,"line":8374},[84,91969,91970],{"class":328},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[84,91972,91973],{"class":86,"line":8386},[84,91974,91975],{"class":328},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[84,91977,91978,91981,91983],{"class":86,"line":10045},[84,91979,91980],{"class":477},"            timer ",[84,91982,523],{"class":473},[84,91984,91985],{"class":94}," null\n",[84,91987,91988],{"class":86,"line":10070},[84,91989,91990],{"class":328},"            \u002F\u002F 不能用clearTimeout(timer)\n",[84,91992,91993],{"class":86,"line":10093},[84,91994,91995],{"class":328},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[84,91997,91998],{"class":86,"line":10117},[84,91999,92000],{"class":477},"          }, t)\n",[84,92002,92003],{"class":86,"line":10122},[84,92004,2858],{"class":477},[84,92006,92007],{"class":86,"line":10127},[84,92008,52725],{"class":477},[84,92010,92011],{"class":86,"line":10132},[84,92012,2516],{"class":477},[84,92014,92015,92017,92019,92021,92023,92025,92027,92029,92031],{"class":86,"line":10141},[84,92016,90533],{"class":477},[84,92018,58139],{"class":90},[84,92020,478],{"class":477},[84,92022,90540],{"class":104},[84,92024,12764],{"class":477},[84,92026,91499],{"class":90},[84,92028,90549],{"class":477},[84,92030,65400],{"class":94},[84,92032,30824],{"class":477},[84,92034,92035,92037,92039],{"class":86,"line":10146},[84,92036,52744],{"class":477},[84,92038,52140],{"class":51627},[84,92040,51634],{"class":477},[84,92042,92043,92045,92047],{"class":86,"line":10152},[84,92044,52112],{"class":477},[84,92046,52127],{"class":51627},[84,92048,51634],{"class":477},[84,92050,92051],{"class":86,"line":10173},[84,92052,2729],{"emptyLinePlaceholder":403},[84,92054,92055,92057,92059],{"class":86,"line":10179},[84,92056,52112],{"class":477},[84,92058,50962],{"class":51627},[84,92060,51634],{"class":477},[23,92062,92064],{"id":92063},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[75,92066,92068],{"className":53394,"code":92067,"language":53396,"meta":66,"style":66},"\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",[81,92069,92070,92078,92086,92091,92096,92101,92106,92110,92118],{"__ignoreMap":66},[84,92071,92072,92074,92076],{"class":86,"line":87},[84,92073,1383],{"class":477},[84,92075,52127],{"class":51627},[84,92077,51634],{"class":477},[84,92079,92080,92082,92084],{"class":86,"line":98},[84,92081,52471],{"class":477},[84,92083,52140],{"class":51627},[84,92085,51634],{"class":477},[84,92087,92088],{"class":86,"line":70},[84,92089,92090],{"class":477},"    let timer = null\n",[84,92092,92093],{"class":86,"line":120},[84,92094,92095],{"class":477},"    timer = setTimeout(() => {\n",[84,92097,92098],{"class":86,"line":131},[84,92099,92100],{"class":477},"      clearTimeout(timer)\n",[84,92102,92103],{"class":86,"line":145},[84,92104,92105],{"class":477},"      console.log(timer)\n",[84,92107,92108],{"class":86,"line":156},[84,92109,60551],{"class":477},[84,92111,92112,92114,92116],{"class":86,"line":164},[84,92113,52744],{"class":477},[84,92115,52140],{"class":51627},[84,92117,51634],{"class":477},[84,92119,92120,92122,92124],{"class":86,"line":175},[84,92121,52112],{"class":477},[84,92123,52127],{"class":51627},[84,92125,51634],{"class":477},[35,92127,92128],{},"输出为1",[35,92130,92131],{},"在开启的定时器里边写清除定时器",[35,92133,92134],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[23,92136,92138],{"id":92137},"_4174-节流综合案例","4.17.4 节流综合案例",[35,92140,92141],{},"页面打开，可以记录上一次的视频播放位置",[35,92143,92144],{},[64,92145],{"alt":66,"src":92146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[35,92148,92149],{},[64,92150],{"alt":66,"src":92151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[75,92153,92155],{"className":50960,"code":92154,"language":50962,"meta":66,"style":66},"\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",[81,92156,92157,92167,92181,92185,92193,92207,92227,92247,92269,92282,92290,92296,92306,92316,92326,92330,92334,92341,92354,92366,92370,92374,92384,92396,92410,92414,92418,92425,92435,92448,92460,92470,92480,92496,92508,92512,92516,92524,92534,92546,92556,92566,92576,92580,92584,92594,92605,92609,92617,92625,92629,92637,92652,92667,92682,92703,92711,92719,92734,92756,92764,92779,92805,92831,92857,92865,92873,92892,92900,92905,92924,92929,92947,92952,92957,92965,92970,92984,92992,92997,93014,93018,93023,93045,93049,93057,93065,93069],{"__ignoreMap":66},[84,92158,92159,92161,92163,92165],{"class":86,"line":87},[84,92160,51624],{"class":477},[84,92162,51628],{"class":51627},[84,92164,51631],{"class":90},[84,92166,51634],{"class":477},[84,92168,92169,92171,92173,92175,92177,92179],{"class":86,"line":98},[84,92170,1383],{"class":477},[84,92172,50962],{"class":51627},[84,92174,51643],{"class":90},[84,92176,523],{"class":477},[84,92178,51648],{"class":104},[84,92180,51634],{"class":477},[84,92182,92183],{"class":86,"line":70},[84,92184,2729],{"emptyLinePlaceholder":403},[84,92186,92187,92189,92191],{"class":86,"line":120},[84,92188,1383],{"class":477},[84,92190,51661],{"class":51627},[84,92192,51634],{"class":477},[84,92194,92195,92197,92199,92201,92203,92205],{"class":86,"line":131},[84,92196,52471],{"class":477},[84,92198,51671],{"class":51627},[84,92200,51674],{"class":90},[84,92202,523],{"class":477},[84,92204,51679],{"class":104},[84,92206,59453],{"class":477},[84,92208,92209,92211,92213,92215,92217,92219,92221,92223,92225],{"class":86,"line":145},[84,92210,52471],{"class":477},[84,92212,51671],{"class":51627},[84,92214,51690],{"class":90},[84,92216,523],{"class":477},[84,92218,51695],{"class":104},[84,92220,51698],{"class":90},[84,92222,523],{"class":477},[84,92224,51703],{"class":104},[84,92226,59453],{"class":477},[84,92228,92229,92231,92233,92235,92237,92239,92241,92243,92245],{"class":86,"line":156},[84,92230,52471],{"class":477},[84,92232,51671],{"class":51627},[84,92234,15249],{"class":90},[84,92236,523],{"class":477},[84,92238,51718],{"class":104},[84,92240,51698],{"class":90},[84,92242,523],{"class":477},[84,92244,51725],{"class":104},[84,92246,59453],{"class":477},[84,92248,92249,92251,92253,92255,92257,92260,92262,92264,92267],{"class":86,"line":164},[84,92250,52471],{"class":477},[84,92252,51671],{"class":51627},[84,92254,15249],{"class":90},[84,92256,523],{"class":477},[84,92258,92259],{"class":104},"\"referrer\"",[84,92261,51698],{"class":90},[84,92263,523],{"class":477},[84,92265,92266],{"class":104},"\"never\"",[84,92268,59453],{"class":477},[84,92270,92271,92273,92275,92278,92280],{"class":86,"line":175},[84,92272,52471],{"class":477},[84,92274,51734],{"class":51627},[84,92276,92277],{"class":477},">综合案例\u003C\u002F",[84,92279,51734],{"class":51627},[84,92281,51634],{"class":477},[84,92283,92284,92286,92288],{"class":86,"line":185},[84,92285,52471],{"class":477},[84,92287,389],{"class":51627},[84,92289,51634],{"class":477},[84,92291,92292,92294],{"class":86,"line":195},[84,92293,6732],{"class":51627},[84,92295,15901],{"class":477},[84,92297,92298,92300,92302,92304],{"class":86,"line":206},[84,92299,55021],{"class":94},[84,92301,51764],{"class":477},[84,92303,666],{"class":94},[84,92305,1634],{"class":477},[84,92307,92308,92310,92312,92314],{"class":86,"line":217},[84,92309,55032],{"class":94},[84,92311,51764],{"class":477},[84,92313,666],{"class":94},[84,92315,1634],{"class":477},[84,92317,92318,92320,92322,92324],{"class":86,"line":227},[84,92319,72922],{"class":94},[84,92321,51764],{"class":477},[84,92323,60831],{"class":94},[84,92325,1634],{"class":477},[84,92327,92328],{"class":86,"line":238},[84,92329,2516],{"class":477},[84,92331,92332],{"class":86,"line":249},[84,92333,2729],{"emptyLinePlaceholder":403},[84,92335,92336,92339],{"class":86,"line":262},[84,92337,92338],{"class":90},"    .container",[84,92340,15901],{"class":477},[84,92342,92343,92345,92347,92350,92352],{"class":86,"line":273},[84,92344,55097],{"class":94},[84,92346,51764],{"class":477},[84,92348,92349],{"class":94},"1200",[84,92351,51819],{"class":473},[84,92353,1634],{"class":477},[84,92355,92356,92358,92360,92362,92364],{"class":86,"line":283},[84,92357,55032],{"class":94},[84,92359,51764],{"class":477},[84,92361,666],{"class":94},[84,92363,51883],{"class":94},[84,92365,1634],{"class":477},[84,92367,92368],{"class":86,"line":294},[84,92369,2516],{"class":477},[84,92371,92372],{"class":86,"line":2028},[84,92373,2729],{"emptyLinePlaceholder":403},[84,92375,92376,92379,92382],{"class":86,"line":2057},[84,92377,92378],{"class":90},"    .video",[84,92380,92381],{"class":51627}," video",[84,92383,15901],{"class":477},[84,92385,92386,92388,92390,92392,92394],{"class":86,"line":2062},[84,92387,55097],{"class":94},[84,92389,51764],{"class":477},[84,92391,784],{"class":94},[84,92393,801],{"class":473},[84,92395,1634],{"class":477},[84,92397,92398,92400,92402,92404,92406,92408],{"class":86,"line":2079},[84,92399,55021],{"class":94},[84,92401,51764],{"class":477},[84,92403,1173],{"class":94},[84,92405,51819],{"class":473},[84,92407,4422],{"class":94},[84,92409,1634],{"class":477},[84,92411,92412],{"class":86,"line":2084},[84,92413,2516],{"class":477},[84,92415,92416],{"class":86,"line":2089},[84,92417,2729],{"emptyLinePlaceholder":403},[84,92419,92420,92423],{"class":86,"line":2094},[84,92421,92422],{"class":90},"    .elevator",[84,92424,15901],{"class":477},[84,92426,92427,92429,92431,92433],{"class":86,"line":2108},[84,92428,55085],{"class":94},[84,92430,51764],{"class":477},[84,92432,86559],{"class":94},[84,92434,1634],{"class":477},[84,92436,92437,92439,92441,92444,92446],{"class":86,"line":2113},[84,92438,55273],{"class":94},[84,92440,51764],{"class":477},[84,92442,92443],{"class":94},"280",[84,92445,51819],{"class":473},[84,92447,1634],{"class":477},[84,92449,92450,92452,92454,92456,92458],{"class":86,"line":2906},[84,92451,86753],{"class":94},[84,92453,51764],{"class":477},[84,92455,1173],{"class":94},[84,92457,51819],{"class":473},[84,92459,1634],{"class":477},[84,92461,92462,92464,92466,92468],{"class":86,"line":2920},[84,92463,86566],{"class":94},[84,92465,51764],{"class":477},[84,92467,86571],{"class":94},[84,92469,1634],{"class":477},[84,92471,92472,92474,92476,92478],{"class":86,"line":2928},[84,92473,62047],{"class":94},[84,92475,51764],{"class":477},[84,92477,61168],{"class":94},[84,92479,1634],{"class":477},[84,92481,92482,92484,92486,92488,92490,92492,92494],{"class":86,"line":2933},[84,92483,62303],{"class":94},[84,92485,51764],{"class":477},[84,92487,692],{"class":94},[84,92489,51819],{"class":473},[84,92491,51848],{"class":94},[84,92493,62570],{"class":94},[84,92495,1634],{"class":477},[84,92497,92498,92500,92502,92504,92506],{"class":86,"line":2939},[84,92499,55097],{"class":94},[84,92501,51764],{"class":477},[84,92503,1380],{"class":94},[84,92505,51819],{"class":473},[84,92507,1634],{"class":477},[84,92509,92510],{"class":86,"line":2945},[84,92511,2516],{"class":477},[84,92513,92514],{"class":86,"line":2950},[84,92515,2729],{"emptyLinePlaceholder":403},[84,92517,92518,92520,92522],{"class":86,"line":8277},[84,92519,92422],{"class":90},[84,92521,1739],{"class":51627},[84,92523,15901],{"class":477},[84,92525,92526,92528,92530,92532],{"class":86,"line":8301},[84,92527,55335],{"class":94},[84,92529,51764],{"class":477},[84,92531,61195],{"class":94},[84,92533,1634],{"class":477},[84,92535,92536,92538,92540,92542,92544],{"class":86,"line":8306},[84,92537,55021],{"class":94},[84,92539,51764],{"class":477},[84,92541,919],{"class":94},[84,92543,51819],{"class":473},[84,92545,1634],{"class":477},[84,92547,92548,92550,92552,92554],{"class":86,"line":8312},[84,92549,64296],{"class":94},[84,92551,51764],{"class":477},[84,92553,55063],{"class":94},[84,92555,1634],{"class":477},[84,92557,92558,92560,92562,92564],{"class":86,"line":8339},[84,92559,57612],{"class":94},[84,92561,51764],{"class":477},[84,92563,51919],{"class":94},[84,92565,1634],{"class":477},[84,92567,92568,92570,92572,92574],{"class":86,"line":8344},[84,92569,57742],{"class":94},[84,92571,51764],{"class":477},[84,92573,62396],{"class":94},[84,92575,1634],{"class":477},[84,92577,92578],{"class":86,"line":8350},[84,92579,2516],{"class":477},[84,92581,92582],{"class":86,"line":8362},[84,92583,2729],{"emptyLinePlaceholder":403},[84,92585,92586,92588,92590,92592],{"class":86,"line":8374},[84,92587,92422],{"class":90},[84,92589,1739],{"class":51627},[84,92591,64350],{"class":90},[84,92593,15901],{"class":477},[84,92595,92596,92598,92600,92603],{"class":86,"line":8386},[84,92597,57742],{"class":94},[84,92599,51764],{"class":477},[84,92601,92602],{"class":94},"#1286ff",[84,92604,1634],{"class":477},[84,92606,92607],{"class":86,"line":10045},[84,92608,2516],{"class":477},[84,92610,92611,92613,92615],{"class":86,"line":10070},[84,92612,52744],{"class":477},[84,92614,389],{"class":51627},[84,92616,51634],{"class":477},[84,92618,92619,92621,92623],{"class":86,"line":10093},[84,92620,52112],{"class":477},[84,92622,51661],{"class":51627},[84,92624,51634],{"class":477},[84,92626,92627],{"class":86,"line":10117},[84,92628,2729],{"emptyLinePlaceholder":403},[84,92630,92631,92633,92635],{"class":86,"line":10122},[84,92632,1383],{"class":477},[84,92634,52127],{"class":51627},[84,92636,51634],{"class":477},[84,92638,92639,92641,92643,92645,92647,92650],{"class":86,"line":10127},[84,92640,52471],{"class":477},[84,92642,51938],{"class":51627},[84,92644,53813],{"class":90},[84,92646,523],{"class":477},[84,92648,92649],{"class":104},"\"container\"",[84,92651,51634],{"class":477},[84,92653,92654,92656,92658,92660,92662,92665],{"class":86,"line":10132},[84,92655,51668],{"class":477},[84,92657,51938],{"class":51627},[84,92659,53813],{"class":90},[84,92661,523],{"class":477},[84,92663,92664],{"class":104},"\"header\"",[84,92666,51634],{"class":477},[84,92668,92669,92671,92673,92675,92677,92680],{"class":86,"line":10141},[84,92670,55560],{"class":477},[84,92672,39],{"class":51627},[84,92674,61383],{"class":90},[84,92676,523],{"class":477},[84,92678,92679],{"class":104},"\"http:\u002F\u002Fpip.itcast.cn\"",[84,92681,51634],{"class":477},[84,92683,92684,92686,92688,92690,92692,92695,92697,92699,92701],{"class":86,"line":10146},[84,92685,55628],{"class":477},[84,92687,64],{"class":51627},[84,92689,55565],{"class":90},[84,92691,523],{"class":477},[84,92693,92694],{"class":104},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[84,92696,55573],{"class":90},[84,92698,523],{"class":477},[84,92700,7981],{"class":104},[84,92702,59453],{"class":477},[84,92704,92705,92707,92709],{"class":86,"line":10152},[84,92706,55733],{"class":477},[84,92708,39],{"class":51627},[84,92710,51634],{"class":477},[84,92712,92713,92715,92717],{"class":86,"line":10173},[84,92714,52103],{"class":477},[84,92716,51938],{"class":51627},[84,92718,51634],{"class":477},[84,92720,92721,92723,92725,92727,92729,92732],{"class":86,"line":10179},[84,92722,51668],{"class":477},[84,92724,51938],{"class":51627},[84,92726,53813],{"class":90},[84,92728,523],{"class":477},[84,92730,92731],{"class":104},"\"video\"",[84,92733,51634],{"class":477},[84,92735,92736,92738,92740,92742,92744,92747,92750,92752,92754],{"class":86,"line":10193},[84,92737,55560],{"class":477},[84,92739,28510],{"class":51627},[84,92741,55565],{"class":90},[84,92743,523],{"class":477},[84,92745,92746],{"class":104},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[84,92748,92749],{"class":90}," controls",[84,92751,55640],{"class":477},[84,92753,28510],{"class":51627},[84,92755,51634],{"class":477},[84,92757,92758,92760,92762],{"class":86,"line":10199},[84,92759,52103],{"class":477},[84,92761,51938],{"class":51627},[84,92763,51634],{"class":477},[84,92765,92766,92768,92770,92772,92774,92777],{"class":86,"line":10226},[84,92767,51668],{"class":477},[84,92769,51938],{"class":51627},[84,92771,53813],{"class":90},[84,92773,523],{"class":477},[84,92775,92776],{"class":104},"\"elevator\"",[84,92778,51634],{"class":477},[84,92780,92781,92783,92785,92787,92789,92791,92794,92796,92798,92801,92803],{"class":86,"line":10235},[84,92782,55560],{"class":477},[84,92784,39],{"class":51627},[84,92786,61383],{"class":90},[84,92788,523],{"class":477},[84,92790,64562],{"class":104},[84,92792,92793],{"class":90}," data-ref",[84,92795,523],{"class":477},[84,92797,92731],{"class":104},[84,92799,92800],{"class":477},">视频介绍\u003C\u002F",[84,92802,39],{"class":51627},[84,92804,51634],{"class":477},[84,92806,92807,92809,92811,92813,92815,92817,92819,92821,92824,92827,92829],{"class":86,"line":10241},[84,92808,55560],{"class":477},[84,92810,39],{"class":51627},[84,92812,61383],{"class":90},[84,92814,523],{"class":477},[84,92816,64562],{"class":104},[84,92818,92793],{"class":90},[84,92820,523],{"class":477},[84,92822,92823],{"class":104},"\"intro\"",[84,92825,92826],{"class":477},">课程简介\u003C\u002F",[84,92828,39],{"class":51627},[84,92830,51634],{"class":477},[84,92832,92833,92835,92837,92839,92841,92843,92845,92847,92850,92853,92855],{"class":86,"line":10249},[84,92834,55560],{"class":477},[84,92836,39],{"class":51627},[84,92838,61383],{"class":90},[84,92840,523],{"class":477},[84,92842,64562],{"class":104},[84,92844,92793],{"class":90},[84,92846,523],{"class":477},[84,92848,92849],{"class":104},"\"outline\"",[84,92851,92852],{"class":477},">评论列表\u003C\u002F",[84,92854,39],{"class":51627},[84,92856,51634],{"class":477},[84,92858,92859,92861,92863],{"class":86,"line":10254},[84,92860,52103],{"class":477},[84,92862,51938],{"class":51627},[84,92864,51634],{"class":477},[84,92866,92867,92869,92871],{"class":86,"line":16933},[84,92868,52744],{"class":477},[84,92870,51938],{"class":51627},[84,92872,51634],{"class":477},[84,92874,92875,92877,92879,92881,92883,92886,92888,92890],{"class":86,"line":16939},[84,92876,52471],{"class":477},[84,92878,52140],{"class":51627},[84,92880,55565],{"class":90},[84,92882,523],{"class":477},[84,92884,92885],{"class":104},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[84,92887,55640],{"class":477},[84,92889,52140],{"class":51627},[84,92891,51634],{"class":477},[84,92893,92894,92896,92898],{"class":86,"line":16962},[84,92895,52471],{"class":477},[84,92897,52140],{"class":51627},[84,92899,51634],{"class":477},[84,92901,92902],{"class":86,"line":16968},[84,92903,92904],{"class":328},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[84,92906,92907,92909,92911,92913,92915,92917,92919,92922],{"class":86,"line":16991},[84,92908,11550],{"class":473},[84,92910,92381],{"class":94},[84,92912,13893],{"class":473},[84,92914,54722],{"class":477},[84,92916,54725],{"class":90},[84,92918,478],{"class":477},[84,92920,92921],{"class":104},"'video'",[84,92923,484],{"class":477},[84,92925,92926],{"class":86,"line":17005},[84,92927,92928],{"class":328},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[84,92930,92931,92934,92936,92938,92940,92943,92945],{"class":86,"line":17025},[84,92932,92933],{"class":477},"    video.ontimeupdate ",[84,92935,523],{"class":473},[84,92937,88681],{"class":477},[84,92939,91499],{"class":90},[84,92941,92942],{"class":477},"(() ",[84,92944,85048],{"class":473},[84,92946,15901],{"class":477},[84,92948,92949],{"class":86,"line":17031},[84,92950,92951],{"class":328},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[84,92953,92954],{"class":86,"line":17042},[84,92955,92956],{"class":328},"      \u002F\u002F 控制台输出当前的时间\n",[84,92958,92959,92962],{"class":86,"line":17065},[84,92960,92961],{"class":328},"      \u002F\u002F console.log(video.currentTime)",[84,92963,92964],{"class":328},"  \u002F\u002F获得当前的视频时间\n",[84,92966,92967],{"class":86,"line":17087},[84,92968,92969],{"class":328},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[84,92971,92972,92974,92976,92978,92981],{"class":86,"line":17092},[84,92973,75009],{"class":477},[84,92975,71980],{"class":90},[84,92977,478],{"class":477},[84,92979,92980],{"class":104},"'currentTime'",[84,92982,92983],{"class":477},", video.currentTime)\n",[84,92985,92986,92988,92990],{"class":86,"line":17098},[84,92987,54861],{"class":477},[84,92989,6739],{"class":94},[84,92991,484],{"class":477},[84,92993,92994],{"class":86,"line":17112},[84,92995,92996],{"class":328},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[84,92998,92999,93002,93005,93007,93010,93012],{"class":86,"line":17125},[84,93000,93001],{"class":477},"    video.",[84,93003,93004],{"class":90},"onloadeddata",[84,93006,13893],{"class":473},[84,93008,93009],{"class":477}," () ",[84,93011,85048],{"class":473},[84,93013,15901],{"class":477},[84,93015,93016],{"class":86,"line":17130},[84,93017,60338],{"class":328},[84,93019,93020],{"class":86,"line":17144},[84,93021,93022],{"class":328},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[84,93024,93025,93028,93030,93033,93035,93037,93039,93041,93043],{"class":86,"line":17149},[84,93026,93027],{"class":477},"      video.currentTime ",[84,93029,523],{"class":473},[84,93031,93032],{"class":477}," localStorage.",[84,93034,72011],{"class":90},[84,93036,478],{"class":477},[84,93038,92980],{"class":104},[84,93040,14043],{"class":477},[84,93042,71683],{"class":473},[84,93044,47660],{"class":94},[84,93046,93047],{"class":86,"line":17155},[84,93048,2516],{"class":477},[84,93050,93051,93053,93055],{"class":86,"line":17160},[84,93052,52744],{"class":477},[84,93054,52140],{"class":51627},[84,93056,51634],{"class":477},[84,93058,93059,93061,93063],{"class":86,"line":17174},[84,93060,52112],{"class":477},[84,93062,52127],{"class":51627},[84,93064,51634],{"class":477},[84,93066,93067],{"class":86,"line":17179},[84,93068,2729],{"emptyLinePlaceholder":403},[84,93070,93071,93073,93075],{"class":86,"line":17184},[84,93072,52112],{"class":477},[84,93074,50962],{"class":51627},[84,93076,51634],{"class":477},[389,93078,93079],{},"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":66,"searchDepth":98,"depth":98,"links":93081},[93082,93087,93091,93092,93093,93098,93103,93104,93105,93106,93113,93118,93119,93129,93133,93134,93138],{"id":77017,"depth":98,"text":77018,"children":93083},[93084,93085,93086],{"id":77021,"depth":70,"text":77022},{"id":77046,"depth":70,"text":77047},{"id":77058,"depth":70,"text":77059},{"id":77070,"depth":98,"text":77071,"children":93088},[93089,93090],{"id":77074,"depth":70,"text":77075},{"id":77089,"depth":70,"text":77090},{"id":77141,"depth":98,"text":77142},{"id":77185,"depth":98,"text":77186},{"id":77202,"depth":98,"text":77203,"children":93094},[93095,93096,93097],{"id":77206,"depth":70,"text":77207},{"id":77219,"depth":70,"text":77220},{"id":77324,"depth":70,"text":77325},{"id":77613,"depth":98,"text":77614,"children":93099},[93100,93101,93102],{"id":77617,"depth":70,"text":77618},{"id":78060,"depth":70,"text":78061},{"id":78471,"depth":70,"text":78472},{"id":78534,"depth":98,"text":78535},{"id":78613,"depth":98,"text":78614},{"id":78706,"depth":98,"text":78707},{"id":80551,"depth":98,"text":80552,"children":93107},[93108,93109,93110,93111,93112],{"id":80555,"depth":70,"text":80556},{"id":80567,"depth":70,"text":80568},{"id":80786,"depth":70,"text":80787},{"id":80804,"depth":70,"text":80805},{"id":80864,"depth":70,"text":80865},{"id":85132,"depth":98,"text":85133,"children":93114},[93115,93116,93117],{"id":85136,"depth":70,"text":85137},{"id":85154,"depth":70,"text":85155},{"id":85180,"depth":70,"text":85181},{"id":85189,"depth":98,"text":85190},{"id":85211,"depth":98,"text":85212,"children":93120},[93121,93122,93123,93124,93125,93126,93127,93128],{"id":85215,"depth":70,"text":85216},{"id":85476,"depth":70,"text":85477},{"id":85662,"depth":70,"text":85663},{"id":86029,"depth":70,"text":86030},{"id":86145,"depth":70,"text":86146},{"id":86181,"depth":70,"text":86182},{"id":86228,"depth":70,"text":86229},{"id":86262,"depth":70,"text":86263},{"id":87625,"depth":98,"text":87626,"children":93130},[93131,93132],{"id":87629,"depth":70,"text":87630},{"id":87666,"depth":70,"text":87667},{"id":89021,"depth":98,"text":89022},{"id":89392,"depth":98,"text":89393,"children":93135},[93136,93137],{"id":89396,"depth":70,"text":89397},{"id":89430,"depth":70,"text":89431},{"id":90159,"depth":98,"text":90160,"children":93139},[93140,93141,93142,93143],{"id":90163,"depth":70,"text":90164},{"id":91121,"depth":70,"text":91122},{"id":92063,"depth":70,"text":92064},{"id":92137,"depth":70,"text":92138},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77006,"description":400},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93150,"title":93151,"body":93152,"description":93163,"extension":401,"meta":93164,"navigation":403,"path":93166,"seo":93167,"stem":93168,"__hash__":93169},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93153,"toc":93161},[93154],[35,93155,93156,93157],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[39,93158,93159],{"href":93159,"rel":93160},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[43],{"title":66,"searchDepth":98,"depth":98,"links":93162},[],"三件套第三套学习",{"category":93165},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93151,"description":93163},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93171,"title":93172,"body":93173,"description":400,"extension":401,"meta":93278,"navigation":403,"path":93279,"seo":93280,"stem":93281,"__hash__":93282},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93174,"toc":93273},[93175,93182,93185,93188,93191,93195,93204,93207,93210,93214,93223,93226,93230,93233,93253,93256,93270],[35,93176,93177],{},[39,93178,93181],{"href":93179,"rel":93180},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[43],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93183,93172],{"id":93184},"_1安装",[35,93186,93187],{},"numpy是科学计算基础库,底层是C语言",[35,93189,93190],{},"三种方式：",[14,93192,93194],{"id":93193},"_11-通过pip安装","1.1 通过pip安装",[75,93196,93198],{"className":30705,"code":93197,"language":30707,"meta":66,"style":66},"pip install numpy\n",[81,93199,93200],{"__ignoreMap":66},[84,93201,93202],{"class":86,"line":87},[84,93203,93197],{"class":477},[35,93205,93206],{},"首选方式，自动处理依赖项",[35,93208,93209],{},"在提示系统命令符中使用cmd",[14,93211,93213],{"id":93212},"_12-通过anaconda安装","1.2 通过Anaconda安装",[75,93215,93217],{"className":30705,"code":93216,"language":30707,"meta":66,"style":66},"conda install numpy\n",[81,93218,93219],{"__ignoreMap":66},[84,93220,93221],{"class":86,"line":87},[84,93222,93216],{"class":477},[35,93224,93225],{},"自动解决环境依赖",[14,93227,93229],{"id":93228},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[35,93231,93232],{},"对于Debian\u002FUbuntu",[75,93234,93236],{"className":30705,"code":93235,"language":30707,"meta":66,"style":66},"sudo apt-get install python3-numpy\n",[81,93237,93238],{"__ignoreMap":66},[84,93239,93240,93243,93245,93248,93250],{"class":86,"line":87},[84,93241,93242],{"class":477},"sudo apt",[84,93244,1005],{"class":473},[84,93246,93247],{"class":477},"get install python3",[84,93249,1005],{"class":473},[84,93251,93252],{"class":477},"numpy\n",[35,93254,93255],{},"对于Fedora:",[75,93257,93259],{"className":30705,"code":93258,"language":30707,"meta":66,"style":66},"sudo dnf install python3-numpy\n",[81,93260,93261],{"__ignoreMap":66},[84,93262,93263,93266,93268],{"class":86,"line":87},[84,93264,93265],{"class":477},"sudo dnf install python3",[84,93267,1005],{"class":473},[84,93269,93252],{"class":477},[389,93271,93272],{},"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":66,"searchDepth":98,"depth":98,"links":93274},[93275,93276,93277],{"id":93193,"depth":98,"text":93194},{"id":93212,"depth":98,"text":93213},{"id":93228,"depth":98,"text":93229},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93172,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93284,"title":93285,"body":93286,"description":400,"extension":401,"meta":93399,"navigation":403,"path":93400,"seo":93401,"stem":93402,"__hash__":93403},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93287,"toc":93397},[93288,93291,93294,93297,93300,93303,93306,93309,93312,93315,93391,93394],[10,93289,93285],{"id":93290},"_10算数函数",[35,93292,93293],{},"加减乘除运算跟python基础语法没区别",[35,93295,93296],{},"除了python那种方法外还可以使用函数",[35,93298,93299],{},"加：np.add(a,b)",[35,93301,93302],{},"减：np.subtract(a,b)",[35,93304,93305],{},"乘：np.multiply(a,b)",[35,93307,93308],{},"除：np.divide(a,b) == a\u002Fb",[35,93310,93311],{},"取余：np.mod(a,b) == a%b",[35,93313,93314],{},"必须会的用法：",[75,93316,93318],{"className":30705,"code":93317,"language":30707,"meta":66,"style":66},"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",[81,93319,93320,93342,93363,93373,93386],{"__ignoreMap":66},[84,93321,93322,93324,93326,93329,93331,93334,93336,93338,93340],{"class":86,"line":87},[84,93323,39],{"class":477},[84,93325,523],{"class":473},[84,93327,93328],{"class":477},"np.arange(",[84,93330,893],{"class":94},[84,93332,93333],{"class":477},").reshape(",[84,93335,547],{"class":94},[84,93337,851],{"class":477},[84,93339,547],{"class":94},[84,93341,484],{"class":477},[84,93343,93344,93346,93348,93351,93353,93355,93357,93359,93361],{"class":86,"line":98},[84,93345,737],{"class":477},[84,93347,523],{"class":473},[84,93349,93350],{"class":477},"np.array([",[84,93352,919],{"class":94},[84,93354,851],{"class":477},[84,93356,919],{"class":94},[84,93358,851],{"class":477},[84,93360,919],{"class":94},[84,93362,4986],{"class":477},[84,93364,93365,93368,93370],{"class":86,"line":70},[84,93366,93367],{"class":477},"result",[84,93369,523],{"class":473},[84,93371,93372],{"class":477},"np.empty_like(a)\n",[84,93374,93375,93378,93381,93383],{"class":86,"line":120},[84,93376,93377],{"class":477},"np.add(a,b,",[84,93379,93380],{"class":5545},"out",[84,93382,523],{"class":473},[84,93384,93385],{"class":477},"result)\n",[84,93387,93388],{"class":86,"line":131},[84,93389,93390],{"class":477},"result\n",[35,93392,93393],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[389,93395,93396],{},"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":66,"searchDepth":98,"depth":98,"links":93398},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93285,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93405,"title":93406,"body":93407,"description":400,"extension":401,"meta":94169,"navigation":403,"path":94170,"seo":94171,"stem":94172,"__hash__":94173},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93408,"toc":94156},[93409,93412,93415,93418,93422,93461,93465,93509,93569,93573,93576,93615,93618,93663,93667,93703,93707,93776,93780,93844,93848,93851,93854,93857,93860,93896,93900,93940,93944,94016,94019,94023,94086,94090,94153],[10,93410,93406],{"id":93411},"_11统计函数",[35,93413,93414],{},"sum max min mean",[35,93416,93417],{},"这些有axis参数，可以指定方向",[14,93419,93421],{"id":93420},"_111-sum求和函数","11.1 sum()求和函数",[75,93423,93425],{"className":30705,"code":93424,"language":30707,"meta":66,"style":66},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[81,93426,93427,93432,93453],{"__ignoreMap":66},[84,93428,93429],{"class":86,"line":87},[84,93430,93431],{"class":328},"#创建一维数组\n",[84,93433,93434,93436,93438,93441,93443,93445,93447,93449,93451],{"class":86,"line":98},[84,93435,39],{"class":477},[84,93437,523],{"class":473},[84,93439,93440],{"class":477},"np.random.randint(",[84,93442,692],{"class":94},[84,93444,851],{"class":477},[84,93446,784],{"class":94},[84,93448,851],{"class":477},[84,93450,1173],{"class":94},[84,93452,484],{"class":477},[84,93454,93455,93458],{"class":86,"line":70},[84,93456,93457],{"class":477},"np.sum(a)",[84,93459,93460],{"class":328},"#求和\n",[14,93462,93464],{"id":93463},"_112-max求最大值函数","11.2 max()求最大值函数",[75,93466,93468],{"className":30705,"code":93467,"language":30707,"meta":66,"style":66},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[81,93469,93470,93474,93494,93499,93504],{"__ignoreMap":66},[84,93471,93472],{"class":86,"line":87},[84,93473,93431],{"class":328},[84,93475,93476,93478,93480,93482,93484,93486,93488,93490,93492],{"class":86,"line":98},[84,93477,39],{"class":477},[84,93479,523],{"class":473},[84,93481,93440],{"class":477},[84,93483,692],{"class":94},[84,93485,851],{"class":477},[84,93487,784],{"class":94},[84,93489,851],{"class":477},[84,93491,1173],{"class":94},[84,93493,484],{"class":477},[84,93495,93496],{"class":86,"line":70},[84,93497,93498],{"class":477},"np.max(a)\n",[84,93500,93501],{"class":86,"line":120},[84,93502,93503],{"class":328},"#最大索引(求最大元素的索引)arg\n",[84,93505,93506],{"class":86,"line":131},[84,93507,93508],{"class":477},"np.argmax(a)\n",[75,93510,93512],{"className":30705,"code":93511,"language":30707,"meta":66,"style":66},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[81,93513,93514,93535,93555,93559],{"__ignoreMap":66},[84,93515,93516,93518,93520,93523,93525,93527,93529,93531,93533],{"class":86,"line":87},[84,93517,11248],{"class":477},[84,93519,523],{"class":473},[84,93521,93522],{"class":477}," np.array([",[84,93524,692],{"class":94},[84,93526,12764],{"class":477},[84,93528,792],{"class":94},[84,93530,12764],{"class":477},[84,93532,547],{"class":94},[84,93534,4986],{"class":477},[84,93536,93537,93539,93541,93543,93545,93547,93549,93551,93553],{"class":86,"line":98},[84,93538,11274],{"class":477},[84,93540,523],{"class":473},[84,93542,93522],{"class":477},[84,93544,547],{"class":94},[84,93546,12764],{"class":477},[84,93548,553],{"class":94},[84,93550,12764],{"class":477},[84,93552,140],{"class":94},[84,93554,4986],{"class":477},[84,93556,93557],{"class":86,"line":70},[84,93558,2729],{"emptyLinePlaceholder":403},[84,93560,93561,93563,93566],{"class":86,"line":120},[84,93562,30742],{"class":94},[84,93564,93565],{"class":477},"(np.maximum(a, b))   ",[84,93567,93568],{"class":328},"# [3 5 4]，每个位置上取较大值\n",[14,93570,93572],{"id":93571},"_113-mean求平均值函数","11.3 mean()求平均值函数",[35,93574,93575],{},"①一维数组：",[75,93577,93579],{"className":30705,"code":93578,"language":30707,"meta":66,"style":66},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[81,93580,93581,93585,93605,93610],{"__ignoreMap":66},[84,93582,93583],{"class":86,"line":87},[84,93584,93431],{"class":328},[84,93586,93587,93589,93591,93593,93595,93597,93599,93601,93603],{"class":86,"line":98},[84,93588,39],{"class":477},[84,93590,523],{"class":473},[84,93592,93440],{"class":477},[84,93594,692],{"class":94},[84,93596,851],{"class":477},[84,93598,784],{"class":94},[84,93600,851],{"class":477},[84,93602,1173],{"class":94},[84,93604,484],{"class":477},[84,93606,93607],{"class":86,"line":70},[84,93608,93609],{"class":328},"#求平均值\n",[84,93611,93612],{"class":86,"line":120},[84,93613,93614],{"class":477},"np.mean(a)\n",[35,93616,93617],{},"②二维数组",[75,93619,93621],{"className":30705,"code":93620,"language":30707,"meta":66,"style":66},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[81,93622,93623,93628,93653,93658],{"__ignoreMap":66},[84,93624,93625],{"class":86,"line":87},[84,93626,93627],{"class":328},"#二维数组\n",[84,93629,93630,93633,93635,93637,93639,93641,93643,93645,93647,93649,93651],{"class":86,"line":98},[84,93631,93632],{"class":477},"aa",[84,93634,523],{"class":473},[84,93636,93328],{"class":477},[84,93638,692],{"class":94},[84,93640,851],{"class":477},[84,93642,996],{"class":94},[84,93644,93333],{"class":477},[84,93646,547],{"class":94},[84,93648,851],{"class":477},[84,93650,140],{"class":94},[84,93652,484],{"class":477},[84,93654,93655],{"class":86,"line":70},[84,93656,93657],{"class":328},"#对数组中的所有数求平均\n",[84,93659,93660],{"class":86,"line":120},[84,93661,93662],{"class":477},"np.mean(aa)\n",[14,93664,93666],{"id":93665},"_114-median求中位数函数","11.4 median()求中位数函数",[75,93668,93670],{"className":30705,"code":93669,"language":30707,"meta":66,"style":66},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[81,93671,93672,93677,93693,93698],{"__ignoreMap":66},[84,93673,93674],{"class":86,"line":87},[84,93675,93676],{"class":328},"#求中位数\n",[84,93678,93679,93681,93683,93685,93687,93689,93691],{"class":86,"line":98},[84,93680,737],{"class":477},[84,93682,523],{"class":473},[84,93684,93328],{"class":477},[84,93686,692],{"class":94},[84,93688,851],{"class":477},[84,93690,919],{"class":94},[84,93692,484],{"class":477},[84,93694,93695],{"class":86,"line":70},[84,93696,93697],{"class":477},"np.median(b)\n",[84,93699,93700],{"class":86,"line":120},[84,93701,93702],{"class":328},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93704,93706],{"id":93705},"_115-power求幂运算函数","11.5 power()求幂运算函数",[75,93708,93710],{"className":30705,"code":93709,"language":30707,"meta":66,"style":66},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[81,93711,93712,93728,93733,93738,93747,93752,93761],{"__ignoreMap":66},[84,93713,93714,93716,93718,93720,93722,93724,93726],{"class":86,"line":87},[84,93715,737],{"class":477},[84,93717,523],{"class":473},[84,93719,93328],{"class":477},[84,93721,692],{"class":94},[84,93723,851],{"class":477},[84,93725,919],{"class":94},[84,93727,484],{"class":477},[84,93729,93730],{"class":86,"line":98},[84,93731,93732],{"class":328},"#幂运算\n",[84,93734,93735],{"class":86,"line":70},[84,93736,93737],{"class":328},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[84,93739,93740,93743,93745],{"class":86,"line":120},[84,93741,93742],{"class":477},"np.power(b,",[84,93744,553],{"class":94},[84,93746,484],{"class":477},[84,93748,93749],{"class":86,"line":131},[84,93750,93751],{"class":328},"#或者以下代码，将数据存储起来\n",[84,93753,93754,93756,93758],{"class":86,"line":145},[84,93755,1318],{"class":477},[84,93757,523],{"class":473},[84,93759,93760],{"class":477},"np.empty_like(b)\n",[84,93762,93763,93765,93767,93769,93771,93773],{"class":86,"line":156},[84,93764,93742],{"class":477},[84,93766,553],{"class":94},[84,93768,851],{"class":477},[84,93770,93380],{"class":5545},[84,93772,523],{"class":473},[84,93774,93775],{"class":477},"y)\n",[14,93777,93779],{"id":93778},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[75,93781,93783],{"className":30705,"code":93782,"language":30707,"meta":66,"style":66},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[81,93784,93785,93801,93806,93811,93815,93833],{"__ignoreMap":66},[84,93786,93787,93789,93791,93793,93795,93797,93799],{"class":86,"line":87},[84,93788,737],{"class":477},[84,93790,523],{"class":473},[84,93792,93328],{"class":477},[84,93794,692],{"class":94},[84,93796,851],{"class":477},[84,93798,919],{"class":94},[84,93800,484],{"class":477},[84,93802,93803],{"class":86,"line":98},[84,93804,93805],{"class":328},"#开方\n",[84,93807,93808],{"class":86,"line":70},[84,93809,93810],{"class":477},"np.sqrt(b)\n",[84,93812,93813],{"class":86,"line":120},[84,93814,93751],{"class":328},[84,93816,93817,93819,93821,93824,93827,93829,93831],{"class":86,"line":131},[84,93818,1318],{"class":477},[84,93820,523],{"class":473},[84,93822,93823],{"class":477},"np.empty_like(b,",[84,93825,93826],{"class":5545},"dtype",[84,93828,523],{"class":473},[84,93830,517],{"class":94},[84,93832,484],{"class":477},[84,93834,93835,93838,93840,93842],{"class":86,"line":145},[84,93836,93837],{"class":477},"np.sqrt(b,",[84,93839,93380],{"class":5545},[84,93841,523],{"class":473},[84,93843,93775],{"class":477},[14,93845,93847],{"id":93846},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[35,93849,93850],{},"对数组中的元素累计求和，可指定轴",[35,93852,93853],{},"#累计求和的意思是：",[35,93855,93856],{},"a = np.array([1, 2, 3, 4])",[35,93858,93859],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[75,93861,93863],{"className":30705,"code":93862,"language":30707,"meta":66,"style":66},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[81,93864,93865,93881,93886,93891],{"__ignoreMap":66},[84,93866,93867,93869,93871,93873,93875,93877,93879],{"class":86,"line":87},[84,93868,737],{"class":477},[84,93870,523],{"class":473},[84,93872,93328],{"class":477},[84,93874,692],{"class":94},[84,93876,851],{"class":477},[84,93878,919],{"class":94},[84,93880,484],{"class":477},[84,93882,93883],{"class":86,"line":98},[84,93884,93885],{"class":477},"np.cumsum(b)\n",[84,93887,93888],{"class":86,"line":70},[84,93889,93890],{"class":328},"#结果：\n",[84,93892,93893],{"class":86,"line":120},[84,93894,93895],{"class":328},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93897,93899],{"id":93898},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[75,93901,93903],{"className":30705,"code":93902,"language":30707,"meta":66,"style":66},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[81,93904,93905,93921,93926,93931,93935],{"__ignoreMap":66},[84,93906,93907,93909,93911,93913,93915,93917,93919],{"class":86,"line":87},[84,93908,737],{"class":477},[84,93910,523],{"class":473},[84,93912,93328],{"class":477},[84,93914,692],{"class":94},[84,93916,851],{"class":477},[84,93918,919],{"class":94},[84,93920,484],{"class":477},[84,93922,93923],{"class":86,"line":98},[84,93924,93925],{"class":328},"#对数组中的元素累计求积，可指定轴\n",[84,93927,93928],{"class":86,"line":70},[84,93929,93930],{"class":477},"np.cumprod(b)\n",[84,93932,93933],{"class":86,"line":120},[84,93934,93890],{"class":328},[84,93936,93937],{"class":86,"line":131},[84,93938,93939],{"class":328},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93941,93943],{"id":93942},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[75,93945,93947],{"className":30705,"code":93946,"language":30707,"meta":66,"style":66},"#删除数组中的重复数据，并对数据进行排序\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",[81,93948,93949,93954,94002,94007,94011],{"__ignoreMap":66},[84,93950,93951],{"class":86,"line":87},[84,93952,93953],{"class":328},"#删除数组中的重复数据，并对数据进行排序\n",[84,93955,93956,93958,93960,93962,93964,93966,93968,93970,93972,93974,93976,93978,93980,93982,93984,93986,93988,93990,93992,93994,93996,93998,94000],{"class":86,"line":98},[84,93957,39],{"class":477},[84,93959,523],{"class":473},[84,93961,93350],{"class":477},[84,93963,692],{"class":94},[84,93965,851],{"class":477},[84,93967,553],{"class":94},[84,93969,851],{"class":477},[84,93971,547],{"class":94},[84,93973,851],{"class":477},[84,93975,971],{"class":94},[84,93977,851],{"class":477},[84,93979,547],{"class":94},[84,93981,851],{"class":477},[84,93983,919],{"class":94},[84,93985,851],{"class":477},[84,93987,672],{"class":94},[84,93989,851],{"class":477},[84,93991,666],{"class":94},[84,93993,851],{"class":477},[84,93995,1248],{"class":94},[84,93997,851],{"class":477},[84,93999,140],{"class":94},[84,94001,4986],{"class":477},[84,94003,94004],{"class":86,"line":70},[84,94005,94006],{"class":477},"np.unique(a)\n",[84,94008,94009],{"class":86,"line":120},[84,94010,93890],{"class":328},[84,94012,94013],{"class":86,"line":131},[84,94014,94015],{"class":328},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[35,94017,94018],{},"升序形式排序",[14,94020,94022],{"id":94021},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[75,94024,94026],{"className":30705,"code":94025,"language":30707,"meta":66,"style":66},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[81,94027,94028,94076,94081],{"__ignoreMap":66},[84,94029,94030,94032,94034,94036,94038,94040,94042,94044,94046,94048,94050,94052,94054,94056,94058,94060,94062,94064,94066,94068,94070,94072,94074],{"class":86,"line":87},[84,94031,39],{"class":477},[84,94033,523],{"class":473},[84,94035,93350],{"class":477},[84,94037,692],{"class":94},[84,94039,851],{"class":477},[84,94041,553],{"class":94},[84,94043,851],{"class":477},[84,94045,547],{"class":94},[84,94047,851],{"class":477},[84,94049,971],{"class":94},[84,94051,851],{"class":477},[84,94053,547],{"class":94},[84,94055,851],{"class":477},[84,94057,919],{"class":94},[84,94059,851],{"class":477},[84,94061,672],{"class":94},[84,94063,851],{"class":477},[84,94065,666],{"class":94},[84,94067,851],{"class":477},[84,94069,1248],{"class":94},[84,94071,851],{"class":477},[84,94073,140],{"class":94},[84,94075,4986],{"class":477},[84,94077,94078],{"class":86,"line":98},[84,94079,94080],{"class":328},"#返回数组中非零元素的索引\n",[84,94082,94083],{"class":86,"line":70},[84,94084,94085],{"class":477},"np.nonzero(a)\n",[14,94087,94089],{"id":94088},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[75,94091,94093],{"className":30705,"code":94092,"language":30707,"meta":66,"style":66},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[81,94094,94095,94143,94148],{"__ignoreMap":66},[84,94096,94097,94099,94101,94103,94105,94107,94109,94111,94113,94115,94117,94119,94121,94123,94125,94127,94129,94131,94133,94135,94137,94139,94141],{"class":86,"line":87},[84,94098,39],{"class":477},[84,94100,523],{"class":473},[84,94102,93350],{"class":477},[84,94104,692],{"class":94},[84,94106,851],{"class":477},[84,94108,553],{"class":94},[84,94110,851],{"class":477},[84,94112,547],{"class":94},[84,94114,851],{"class":477},[84,94116,971],{"class":94},[84,94118,851],{"class":477},[84,94120,547],{"class":94},[84,94122,851],{"class":477},[84,94124,919],{"class":94},[84,94126,851],{"class":477},[84,94128,672],{"class":94},[84,94130,851],{"class":477},[84,94132,666],{"class":94},[84,94134,851],{"class":477},[84,94136,1248],{"class":94},[84,94138,851],{"class":477},[84,94140,140],{"class":94},[84,94142,4986],{"class":477},[84,94144,94145],{"class":86,"line":98},[84,94146,94147],{"class":328},"#计算一组数中最大值与最小值的差，可指定轴\n",[84,94149,94150],{"class":86,"line":70},[84,94151,94152],{"class":477},"np.ptp(a)\n",[389,94154,94155],{},"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":66,"searchDepth":98,"depth":98,"links":94157},[94158,94159,94160,94161,94162,94163,94164,94165,94166,94167,94168],{"id":93420,"depth":98,"text":93421},{"id":93463,"depth":98,"text":93464},{"id":93571,"depth":98,"text":93572},{"id":93665,"depth":98,"text":93666},{"id":93705,"depth":98,"text":93706},{"id":93778,"depth":98,"text":93779},{"id":93846,"depth":98,"text":93847},{"id":93898,"depth":98,"text":93899},{"id":93942,"depth":98,"text":93943},{"id":94021,"depth":98,"text":94022},{"id":94088,"depth":98,"text":94089},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93406,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94175,"title":94176,"body":94177,"description":400,"extension":401,"meta":94832,"navigation":403,"path":94833,"seo":94834,"stem":94835,"__hash__":94836},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94178,"toc":94820},[94179,94182,94186,94189,94405,94409,94412,94621,94625,94691,94696,94700,94703,94706,94744,94748,94751,94756,94760,94763,94766,94771,94775,94778,94782,94785,94788,94793,94797,94800,94803,94808,94812,94817],[10,94180,94176],{"id":94181},"_12其他常用函数",[14,94183,94185],{"id":94184},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[35,94187,94188],{},"将数组的数据按照行列复制扩展",[75,94190,94192],{"className":30705,"code":94191,"language":30707,"meta":66,"style":66},"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",[81,94193,94194,94210,94219,94223,94228,94233,94246,94250,94255,94260,94265,94269,94274,94298,94310,94314,94318,94323,94328,94333,94338,94342,94355,94359,94363,94368,94373,94378,94383,94388,94392,94396,94401],{"__ignoreMap":66},[84,94195,94196,94198,94200,94202,94204,94206,94208],{"class":86,"line":87},[84,94197,39],{"class":477},[84,94199,523],{"class":473},[84,94201,93328],{"class":477},[84,94203,692],{"class":94},[84,94205,851],{"class":477},[84,94207,792],{"class":94},[84,94209,484],{"class":477},[84,94211,94212,94215,94217],{"class":86,"line":98},[84,94213,94214],{"class":477},"np.tile(a,",[84,94216,553],{"class":94},[84,94218,484],{"class":477},[84,94220,94221],{"class":86,"line":70},[84,94222,93890],{"class":328},[84,94224,94225],{"class":86,"line":120},[84,94226,94227],{"class":328},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[84,94229,94230],{"class":86,"line":131},[84,94231,94232],{"class":328},"#行复制两次，列复制三次\n",[84,94234,94235,94238,94240,94242,94244],{"class":86,"line":145},[84,94236,94237],{"class":477},"np.tile(a,(",[84,94239,553],{"class":94},[84,94241,851],{"class":477},[84,94243,547],{"class":94},[84,94245,30824],{"class":477},[84,94247,94248],{"class":86,"line":156},[84,94249,93890],{"class":328},[84,94251,94252],{"class":86,"line":164},[84,94253,94254],{"class":104},"'''\n",[84,94256,94257],{"class":86,"line":175},[84,94258,94259],{"class":104},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[84,94261,94262],{"class":86,"line":185},[84,94263,94264],{"class":104},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[84,94266,94267],{"class":86,"line":195},[84,94268,94254],{"class":104},[84,94270,94271],{"class":86,"line":206},[84,94272,94273],{"class":328},"#创建二维数组\n",[84,94275,94276,94278,94280,94282,94284,94286,94288,94290,94292,94294,94296],{"class":86,"line":217},[84,94277,93632],{"class":477},[84,94279,523],{"class":473},[84,94281,93328],{"class":477},[84,94283,692],{"class":94},[84,94285,851],{"class":477},[84,94287,996],{"class":94},[84,94289,93333],{"class":477},[84,94291,140],{"class":94},[84,94293,851],{"class":477},[84,94295,547],{"class":94},[84,94297,484],{"class":477},[84,94299,94300,94303,94305,94307],{"class":86,"line":227},[84,94301,94302],{"class":477},"np.tile(aa,",[84,94304,553],{"class":94},[84,94306,902],{"class":477},[84,94308,94309],{"class":328},"#一个数的时候就是行\n",[84,94311,94312],{"class":86,"line":238},[84,94313,93890],{"class":328},[84,94315,94316],{"class":86,"line":249},[84,94317,94254],{"class":104},[84,94319,94320],{"class":86,"line":262},[84,94321,94322],{"class":104},"array([[ 1,  2,  3,  1,  2,  3],\n",[84,94324,94325],{"class":86,"line":273},[84,94326,94327],{"class":104},"       [ 4,  5,  6,  4,  5,  6],\n",[84,94329,94330],{"class":86,"line":283},[84,94331,94332],{"class":104},"       [ 7,  8,  9,  7,  8,  9],\n",[84,94334,94335],{"class":86,"line":294},[84,94336,94337],{"class":104},"       [10, 11, 12, 10, 11, 12]])\n",[84,94339,94340],{"class":86,"line":2028},[84,94341,94254],{"class":104},[84,94343,94344,94347,94349,94351,94353],{"class":86,"line":2057},[84,94345,94346],{"class":477},"np.tile(aa,(",[84,94348,553],{"class":94},[84,94350,851],{"class":477},[84,94352,547],{"class":94},[84,94354,30824],{"class":477},[84,94356,94357],{"class":86,"line":2062},[84,94358,93890],{"class":328},[84,94360,94361],{"class":86,"line":2079},[84,94362,94254],{"class":104},[84,94364,94365],{"class":86,"line":2084},[84,94366,94367],{"class":104},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[84,94369,94370],{"class":86,"line":2089},[84,94371,94372],{"class":104},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[84,94374,94375],{"class":86,"line":2094},[84,94376,94377],{"class":104},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[84,94379,94380],{"class":86,"line":2108},[84,94381,94382],{"class":104},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[84,94384,94385],{"class":86,"line":2113},[84,94386,94387],{"class":104},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[84,94389,94390],{"class":86,"line":2906},[84,94391,94372],{"class":104},[84,94393,94394],{"class":86,"line":2920},[84,94395,94377],{"class":104},[84,94397,94398],{"class":86,"line":2928},[84,94399,94400],{"class":104},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[84,94402,94403],{"class":86,"line":2933},[84,94404,94254],{"class":104},[14,94406,94408],{"id":94407},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[35,94410,94411],{},"repeat()将数组中的每个元素重复若干次",[75,94413,94415],{"className":30705,"code":94414,"language":30707,"meta":66,"style":66},"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",[81,94416,94417,94433,94442,94446,94451,94475,94480,94489,94493,94498,94502,94507,94523,94527,94531,94536,94541,94546,94550,94555,94559,94564,94569,94573,94589,94593,94597,94602,94607,94612,94617],{"__ignoreMap":66},[84,94418,94419,94421,94423,94425,94427,94429,94431],{"class":86,"line":87},[84,94420,39],{"class":477},[84,94422,523],{"class":473},[84,94424,93328],{"class":477},[84,94426,692],{"class":94},[84,94428,851],{"class":477},[84,94430,792],{"class":94},[84,94432,484],{"class":477},[84,94434,94435,94438,94440],{"class":86,"line":98},[84,94436,94437],{"class":477},"np.repeat(a,",[84,94439,547],{"class":94},[84,94441,484],{"class":477},[84,94443,94444],{"class":86,"line":70},[84,94445,93890],{"class":328},[84,94447,94448],{"class":86,"line":120},[84,94449,94450],{"class":328},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[84,94452,94453,94455,94457,94459,94461,94463,94465,94467,94469,94471,94473],{"class":86,"line":131},[84,94454,93632],{"class":477},[84,94456,523],{"class":473},[84,94458,93328],{"class":477},[84,94460,692],{"class":94},[84,94462,851],{"class":477},[84,94464,996],{"class":94},[84,94466,93333],{"class":477},[84,94468,140],{"class":94},[84,94470,851],{"class":477},[84,94472,547],{"class":94},[84,94474,484],{"class":477},[84,94476,94477],{"class":86,"line":145},[84,94478,94479],{"class":328},"#这个重复之后二维变成一维\n",[84,94481,94482,94485,94487],{"class":86,"line":156},[84,94483,94484],{"class":477},"np.repeat(aa,",[84,94486,553],{"class":94},[84,94488,484],{"class":477},[84,94490,94491],{"class":86,"line":164},[84,94492,94254],{"class":104},[84,94494,94495],{"class":86,"line":175},[84,94496,94497],{"class":104},"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",[84,94499,94500],{"class":86,"line":185},[84,94501,94254],{"class":104},[84,94503,94504],{"class":86,"line":195},[84,94505,94506],{"class":328},"#指定axis\n",[84,94508,94509,94511,94513,94515,94517,94519,94521],{"class":86,"line":206},[84,94510,94484],{"class":477},[84,94512,553],{"class":94},[84,94514,851],{"class":477},[84,94516,47841],{"class":5545},[84,94518,523],{"class":473},[84,94520,666],{"class":94},[84,94522,484],{"class":477},[84,94524,94525],{"class":86,"line":217},[84,94526,93890],{"class":328},[84,94528,94529],{"class":86,"line":227},[84,94530,94254],{"class":104},[84,94532,94533],{"class":86,"line":238},[84,94534,94535],{"class":104},"array([[ 1,  2,  3],\n",[84,94537,94538],{"class":86,"line":249},[84,94539,94540],{"class":104},"       [ 1,  2,  3],\n",[84,94542,94543],{"class":86,"line":262},[84,94544,94545],{"class":104},"       [ 4,  5,  6],\n",[84,94547,94548],{"class":86,"line":273},[84,94549,94545],{"class":104},[84,94551,94552],{"class":86,"line":283},[84,94553,94554],{"class":104},"       [ 7,  8,  9],\n",[84,94556,94557],{"class":86,"line":294},[84,94558,94554],{"class":104},[84,94560,94561],{"class":86,"line":2028},[84,94562,94563],{"class":104},"       [10, 11, 12],\n",[84,94565,94566],{"class":86,"line":2057},[84,94567,94568],{"class":104},"       [10, 11, 12]])\n",[84,94570,94571],{"class":86,"line":2062},[84,94572,94254],{"class":104},[84,94574,94575,94577,94579,94581,94583,94585,94587],{"class":86,"line":2079},[84,94576,94484],{"class":477},[84,94578,553],{"class":94},[84,94580,851],{"class":477},[84,94582,47841],{"class":5545},[84,94584,523],{"class":473},[84,94586,692],{"class":94},[84,94588,484],{"class":477},[84,94590,94591],{"class":86,"line":2084},[84,94592,93890],{"class":328},[84,94594,94595],{"class":86,"line":2089},[84,94596,94254],{"class":104},[84,94598,94599],{"class":86,"line":2094},[84,94600,94601],{"class":104},"array([[ 1,  1,  2,  2,  3,  3],\n",[84,94603,94604],{"class":86,"line":2108},[84,94605,94606],{"class":104},"       [ 4,  4,  5,  5,  6,  6],\n",[84,94608,94609],{"class":86,"line":2113},[84,94610,94611],{"class":104},"       [ 7,  7,  8,  8,  9,  9],\n",[84,94613,94614],{"class":86,"line":2906},[84,94615,94616],{"class":104},"       [10, 10, 11, 11, 12, 12]])\n",[84,94618,94619],{"class":86,"line":2920},[84,94620,94254],{"class":104},[14,94622,94624],{"id":94623},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[75,94626,94628],{"className":30705,"code":94627,"language":30707,"meta":66,"style":66},"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",[81,94629,94630,94646,94651,94663,94667,94672,94682,94686],{"__ignoreMap":66},[84,94631,94632,94634,94636,94638,94640,94642,94644],{"class":86,"line":87},[84,94633,39],{"class":477},[84,94635,523],{"class":473},[84,94637,93328],{"class":477},[84,94639,692],{"class":94},[84,94641,851],{"class":477},[84,94643,792],{"class":94},[84,94645,484],{"class":477},[84,94647,94648],{"class":86,"line":98},[84,94649,94650],{"class":328},"#array([，2，3，4])\n",[84,94652,94653,94656,94658,94660],{"class":86,"line":70},[84,94654,94655],{"class":477},"np.roll(a,",[84,94657,553],{"class":94},[84,94659,902],{"class":477},[84,94661,94662],{"class":328},"#传正数向后调多少位，传负数向前调多少位\n",[84,94664,94665],{"class":86,"line":120},[84,94666,93890],{"class":328},[84,94668,94669],{"class":86,"line":131},[84,94670,94671],{"class":328},"#array([3, 4, 1, 2])\n",[84,94673,94674,94676,94678,94680],{"class":86,"line":145},[84,94675,94655],{"class":477},[84,94677,1005],{"class":473},[84,94679,692],{"class":94},[84,94681,484],{"class":477},[84,94683,94684],{"class":86,"line":156},[84,94685,93890],{"class":328},[84,94687,94688],{"class":86,"line":164},[84,94689,94690],{"class":328},"#array([2, 3, 4, 1])\n",[35,94692,94693],{},[64,94694],{"alt":66,"src":94695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94697,94699],{"id":94698},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[35,94701,94702],{},"resize()重新调整数组的大小",[35,94704,94705],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[75,94707,94709],{"className":30705,"code":94708,"language":30707,"meta":66,"style":66},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[81,94710,94711,94716,94729],{"__ignoreMap":66},[84,94712,94713],{"class":86,"line":87},[84,94714,94715],{"class":328},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[84,94717,94718,94721,94723,94725,94727],{"class":86,"line":98},[84,94719,94720],{"class":477},"np.resize(aa,(",[84,94722,553],{"class":94},[84,94724,851],{"class":477},[84,94726,817],{"class":94},[84,94728,30824],{"class":477},[84,94730,94731,94733,94735,94737,94739,94741],{"class":86,"line":70},[84,94732,94720],{"class":477},[84,94734,553],{"class":94},[84,94736,851],{"class":477},[84,94738,893],{"class":94},[84,94740,83097],{"class":477},[84,94742,94743],{"class":328},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94745,94747],{"id":94746},"_125-placeput函数","12.5 place()\u002Fput()函数",[35,94749,94750],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[35,94752,94753],{},[64,94754],{"alt":66,"src":94755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94757,94759],{"id":94758},"_126-保存加载文件","12.6 保存加载文件",[35,94761,94762],{},"savetxt():将数据保存到txt文件中",[35,94764,94765],{},"loadtxt():从文件加载数据",[35,94767,94768],{},[64,94769],{"alt":66,"src":94770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94772,94774],{"id":94773},"_127-genfromtxt函数","12.7 genfromtxt()函数",[35,94776,94777],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94779,94781],{"id":94780},"_128-anyall函数","12.8 any()\u002Fall()函数",[35,94783,94784],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[35,94786,94787],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[35,94789,94790],{},[64,94791],{"alt":66,"src":94792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94794,94796],{"id":94795},"_129-where语句","12.9 where语句",[35,94798,94799],{},"np.where(条件,x,y)",[35,94801,94802],{},"如果条件为True,对应值为x,否则对应值为y",[35,94804,94805],{},[64,94806],{"alt":66,"src":94807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94809,94811],{"id":94810},"_1210-dot矩阵","12.10 dot()矩阵",[35,94813,94814],{},[64,94815],{"alt":66,"src":94816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[389,94818,94819],{},"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":66,"searchDepth":98,"depth":98,"links":94821},[94822,94823,94824,94825,94826,94827,94828,94829,94830,94831],{"id":94184,"depth":98,"text":94185},{"id":94407,"depth":98,"text":94408},{"id":94623,"depth":98,"text":94624},{"id":94698,"depth":98,"text":94699},{"id":94746,"depth":98,"text":94747},{"id":94758,"depth":98,"text":94759},{"id":94773,"depth":98,"text":94774},{"id":94780,"depth":98,"text":94781},{"id":94795,"depth":98,"text":94796},{"id":94810,"depth":98,"text":94811},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94176,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94838,"title":94839,"body":94840,"description":400,"extension":401,"meta":95193,"navigation":403,"path":95194,"seo":95195,"stem":95196,"__hash__":95197},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94841,"toc":95191},[94842,94845,94848,94851,94854,94857,94922,94924,95188],[10,94843,94839],{"id":94844},"_13数组排序",[35,94846,94847],{},"排序主要用到的方法是np.sort和np.argsort",[35,94849,94850],{},"其中np.sort()对数组直接排序",[35,94852,94853],{},"而np.argsort()是返回排序后的原始索引",[35,94855,94856],{},"①一维数组",[75,94858,94860],{"className":30705,"code":94859,"language":30707,"meta":66,"style":66},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[81,94861,94862,94866,94906,94914],{"__ignoreMap":66},[84,94863,94864],{"class":86,"line":87},[84,94865,93431],{"class":328},[84,94867,94868,94870,94872,94874,94876,94878,94880,94882,94884,94886,94888,94890,94892,94894,94896,94898,94900,94902,94904],{"class":86,"line":98},[84,94869,39],{"class":477},[84,94871,523],{"class":473},[84,94873,93350],{"class":477},[84,94875,547],{"class":94},[84,94877,851],{"class":477},[84,94879,971],{"class":94},[84,94881,851],{"class":477},[84,94883,868],{"class":94},[84,94885,851],{"class":477},[84,94887,1248],{"class":94},[84,94889,851],{"class":477},[84,94891,753],{"class":94},[84,94893,851],{"class":477},[84,94895,1366],{"class":94},[84,94897,851],{"class":477},[84,94899,817],{"class":94},[84,94901,851],{"class":477},[84,94903,919],{"class":94},[84,94905,4986],{"class":477},[84,94907,94908,94911],{"class":86,"line":70},[84,94909,94910],{"class":477},"np.sort(a)",[84,94912,94913],{"class":328},"#升序排序\n",[84,94915,94916,94919],{"class":86,"line":120},[84,94917,94918],{"class":477},"np.argsort(a)",[84,94920,94921],{"class":328},"#按照元素大小来索引排序\n",[35,94923,93617],{},[75,94925,94927],{"className":30705,"code":94926,"language":30707,"meta":66,"style":66},"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",[81,94928,94929,94941,94967,94972,94976,94981,94986,94991,94996,95000,95008,95012,95017,95022,95027,95032,95036,95041,95054,95058,95063,95068,95073,95078,95082,95087,95099,95103,95107,95111,95115,95119,95123,95128,95143,95148,95157,95162,95166,95170,95175,95179,95184],{"__ignoreMap":66},[84,94930,94931,94934,94936,94938],{"class":86,"line":87},[84,94932,94933],{"class":477},"np.random.seed(",[84,94935,666],{"class":94},[84,94937,902],{"class":477},[84,94939,94940],{"class":328},"#保证每次值一样\n",[84,94942,94943,94945,94947,94949,94951,94953,94955,94957,94959,94961,94963,94965],{"class":86,"line":98},[84,94944,93632],{"class":477},[84,94946,523],{"class":473},[84,94948,93440],{"class":477},[84,94950,784],{"class":94},[84,94952,851],{"class":477},[84,94954,31823],{"class":5545},[84,94956,523],{"class":473},[84,94958,478],{"class":477},[84,94960,140],{"class":94},[84,94962,851],{"class":477},[84,94964,817],{"class":94},[84,94966,30824],{"class":477},[84,94968,94969],{"class":86,"line":70},[84,94970,94971],{"class":328},"#原数组：\n",[84,94973,94974],{"class":86,"line":120},[84,94975,94254],{"class":104},[84,94977,94978],{"class":86,"line":131},[84,94979,94980],{"class":104},"array([[44, 47, 64, 67, 67,  9],\n",[84,94982,94983],{"class":86,"line":145},[84,94984,94985],{"class":104},"       [83, 21, 36, 87, 70, 88],\n",[84,94987,94988],{"class":86,"line":156},[84,94989,94990],{"class":104},"       [88, 12, 58, 65, 39, 87],\n",[84,94992,94993],{"class":86,"line":164},[84,94994,94995],{"class":104},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[84,94997,94998],{"class":86,"line":175},[84,94999,94254],{"class":104},[84,95001,95002,95005],{"class":86,"line":185},[84,95003,95004],{"class":477},"np.sort(aa)",[84,95006,95007],{"class":328},"#每行进行了排序\n",[84,95009,95010],{"class":86,"line":195},[84,95011,94254],{"class":104},[84,95013,95014],{"class":86,"line":206},[84,95015,95016],{"class":104},"array([[ 9, 44, 47, 64, 67, 67],\n",[84,95018,95019],{"class":86,"line":217},[84,95020,95021],{"class":104},"       [21, 36, 70, 83, 87, 88],\n",[84,95023,95024],{"class":86,"line":227},[84,95025,95026],{"class":104},"       [12, 39, 58, 65, 87, 88],\n",[84,95028,95029],{"class":86,"line":238},[84,95030,95031],{"class":104},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[84,95033,95034],{"class":86,"line":249},[84,95035,94254],{"class":104},[84,95037,95038],{"class":86,"line":262},[84,95039,95040],{"class":328},"#axis=0时\n",[84,95042,95043,95046,95048,95050,95052],{"class":86,"line":273},[84,95044,95045],{"class":477},"np.sort(aa,",[84,95047,47841],{"class":5545},[84,95049,523],{"class":473},[84,95051,666],{"class":94},[84,95053,484],{"class":477},[84,95055,95056],{"class":86,"line":283},[84,95057,94254],{"class":104},[84,95059,95060],{"class":86,"line":294},[84,95061,95062],{"class":104},"array([[44, 12, 36, 37, 25,  9],\n",[84,95064,95065],{"class":86,"line":2028},[84,95066,95067],{"class":104},"       [46, 21, 58, 65, 39, 77],\n",[84,95069,95070],{"class":86,"line":2057},[84,95071,95072],{"class":104},"       [83, 47, 64, 67, 67, 87],\n",[84,95074,95075],{"class":86,"line":2062},[84,95076,95077],{"class":104},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[84,95079,95080],{"class":86,"line":2079},[84,95081,94254],{"class":104},[84,95083,95084],{"class":86,"line":2084},[84,95085,95086],{"class":328},"#axis=1时,为默认值\n",[84,95088,95089,95091,95093,95095,95097],{"class":86,"line":2089},[84,95090,95045],{"class":477},[84,95092,47841],{"class":5545},[84,95094,523],{"class":473},[84,95096,692],{"class":94},[84,95098,484],{"class":477},[84,95100,95101],{"class":86,"line":2094},[84,95102,94254],{"class":104},[84,95104,95105],{"class":86,"line":2108},[84,95106,95016],{"class":104},[84,95108,95109],{"class":86,"line":2113},[84,95110,95021],{"class":104},[84,95112,95113],{"class":86,"line":2906},[84,95114,95026],{"class":104},[84,95116,95117],{"class":86,"line":2920},[84,95118,95031],{"class":104},[84,95120,95121],{"class":86,"line":2928},[84,95122,94254],{"class":104},[84,95124,95125],{"class":86,"line":2933},[84,95126,95127],{"class":328},"#按最后一列排序\n",[84,95129,95130,95132,95134,95137,95139,95141],{"class":86,"line":2939},[84,95131,737],{"class":477},[84,95133,523],{"class":473},[84,95135,95136],{"class":477},"aa[:,",[84,95138,1005],{"class":473},[84,95140,692],{"class":94},[84,95142,33573],{"class":477},[84,95144,95145],{"class":86,"line":2945},[84,95146,95147],{"class":328},"#获取最后一列排好序的索引\n",[84,95149,95150,95152,95154],{"class":86,"line":2950},[84,95151,74384],{"class":477},[84,95153,523],{"class":473},[84,95155,95156],{"class":477},"np.argsort(b)\n",[84,95158,95159],{"class":86,"line":8277},[84,95160,95161],{"class":477},"aa[index]\n",[84,95163,95164],{"class":86,"line":8301},[84,95165,94254],{"class":104},[84,95167,95168],{"class":86,"line":8306},[84,95169,94980],{"class":104},[84,95171,95172],{"class":86,"line":8312},[84,95173,95174],{"class":104},"       [46, 88, 81, 37, 25, 77],\n",[84,95176,95177],{"class":86,"line":8339},[84,95178,94990],{"class":104},[84,95180,95181],{"class":86,"line":8344},[84,95182,95183],{"class":104},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[84,95185,95186],{"class":86,"line":8350},[84,95187,94254],{"class":104},[389,95189,95190],{},"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":66,"searchDepth":98,"depth":98,"links":95192},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94839,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95199,"title":95200,"body":95201,"description":400,"extension":401,"meta":95231,"navigation":403,"path":95232,"seo":95233,"stem":95234,"__hash__":95235},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95202,"toc":95229},[95203,95206,95209,95212,95215,95218,95221,95224],[10,95204,95200],{"id":95205},"_14广播机制",[35,95207,95208],{},"广播的规则：",[35,95210,95211],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[35,95213,95214],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[35,95216,95217],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[35,95219,95220],{},"3.如果没有维度形状为1，则会引发异常",[35,95222,95223],{},"也就是只有维度或者个数为1才可以进行广播操作",[35,95225,95226],{},[64,95227],{"alt":66,"src":95228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":66,"searchDepth":98,"depth":98,"links":95230},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95200,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95237,"title":95238,"body":95239,"description":400,"extension":401,"meta":95337,"navigation":403,"path":95338,"seo":95339,"stem":95340,"__hash__":95341},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95240,"toc":95335},[95241,95244,95247,95332],[10,95242,95238],{"id":95243},"_15比较掩码",[35,95245,95246],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[75,95248,95250],{"className":30705,"code":95249,"language":30707,"meta":66,"style":66},"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",[81,95251,95252,95298,95309,95323,95327],{"__ignoreMap":66},[84,95253,95254,95256,95258,95261,95263,95265,95267,95269,95271,95273,95275,95277,95279,95281,95283,95285,95287,95289,95291,95293,95295],{"class":86,"line":87},[84,95255,39],{"class":477},[84,95257,523],{"class":473},[84,95259,95260],{"class":477},"np.array([[",[84,95262,692],{"class":94},[84,95264,851],{"class":477},[84,95266,553],{"class":94},[84,95268,851],{"class":477},[84,95270,547],{"class":94},[84,95272,48357],{"class":477},[84,95274,945],{"class":94},[84,95276,851],{"class":477},[84,95278,971],{"class":94},[84,95280,851],{"class":477},[84,95282,996],{"class":94},[84,95284,48357],{"class":477},[84,95286,1198],{"class":94},[84,95288,851],{"class":477},[84,95290,1223],{"class":94},[84,95292,851],{"class":477},[84,95294,1248],{"class":94},[84,95296,95297],{"class":477},"]])\n",[84,95299,95300,95302,95304,95306],{"class":86,"line":98},[84,95301,39],{"class":477},[84,95303,1383],{"class":473},[84,95305,1173],{"class":94},[84,95307,95308],{"class":328},"#结果是一个由True,False组成的数组\n",[84,95310,95311,95314,95316,95318,95320],{"class":86,"line":70},[84,95312,95313],{"class":477},"a[a",[84,95315,1383],{"class":473},[84,95317,1173],{"class":94},[84,95319,1413],{"class":477},[84,95321,95322],{"class":328},"#小于20的元素会存到这个数组中\n",[84,95324,95325],{"class":86,"line":120},[84,95326,93890],{"class":328},[84,95328,95329],{"class":86,"line":131},[84,95330,95331],{"class":328},"#array([ 1,  2,  3, 11, 12, 13])\n",[389,95333,95334],{},"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":66,"searchDepth":98,"depth":98,"links":95336},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95238,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95343,"title":95344,"body":95345,"description":400,"extension":401,"meta":95437,"navigation":403,"path":95438,"seo":95439,"stem":95440,"__hash__":95441},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95346,"toc":95435},[95347,95350,95353,95356,95359,95362,95427,95432],[10,95348,95344],{"id":95349},"_16魔法命令time",[35,95351,95352],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[35,95354,95355],{},"%:行模式",[35,95357,95358],{},"%%:单元格模式",[35,95360,95361],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[75,95363,95365],{"className":30705,"code":95364,"language":30707,"meta":66,"style":66},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[81,95366,95367,95372,95379,95384,95393,95406,95410,95418],{"__ignoreMap":66},[84,95368,95369],{"class":86,"line":87},[84,95370,95371],{"class":328},"#程序执行时间\n",[84,95373,95374,95376],{"class":86,"line":98},[84,95375,30719],{"class":473},[84,95377,95378],{"class":477}," time \n",[84,95380,95381],{"class":86,"line":70},[84,95382,95383],{"class":328},"#获取时间\n",[84,95385,95386,95389,95391],{"class":86,"line":120},[84,95387,95388],{"class":477},"start",[84,95390,523],{"class":473},[84,95392,32745],{"class":477},[84,95394,95395,95398,95401,95403],{"class":86,"line":131},[84,95396,95397],{"class":477},"time.sleep(",[84,95399,95400],{"class":94},"0.4",[84,95402,902],{"class":477},[84,95404,95405],{"class":328},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[84,95407,95408],{"class":86,"line":145},[84,95409,95383],{"class":328},[84,95411,95412,95414,95416],{"class":86,"line":156},[84,95413,46128],{"class":477},[84,95415,523],{"class":473},[84,95417,32745],{"class":477},[84,95419,95420,95422,95424],{"class":86,"line":164},[84,95421,46128],{"class":477},[84,95423,1005],{"class":473},[84,95425,95426],{"class":477},"start\n",[35,95428,95429],{},[64,95430],{"alt":66,"src":95431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[389,95433,95434],{},"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":66,"searchDepth":98,"depth":98,"links":95436},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95344,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95443,"title":95444,"body":95445,"description":400,"extension":401,"meta":95480,"navigation":403,"path":95481,"seo":95482,"stem":95483,"__hash__":95484},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95446,"toc":95478},[95447,95450,95453,95456,95459,95462,95465,95468,95473],[10,95448,95444],{"id":95449},"_17魔法命令timeit",[35,95451,95452],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[35,95454,95455],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[35,95457,95458],{},"单元格模式：",[35,95460,95461],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[35,95463,95464],{},"初始化语句执行次数由轮数来决定",[35,95466,95467],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[35,95469,95470],{},[64,95471],{"alt":66,"src":95472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[35,95474,95475],{},[64,95476],{"alt":66,"src":95477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":66,"searchDepth":98,"depth":98,"links":95479},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95444,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95486,"title":95487,"body":95488,"description":400,"extension":401,"meta":95506,"navigation":403,"path":95507,"seo":95508,"stem":95509,"__hash__":95510},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95489,"toc":95504},[95490,95493,95496,95499],[10,95491,95487],{"id":95492},"_18魔法命令writefile和run",[35,95494,95495],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[35,95497,95498],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[35,95500,95501],{},[64,95502],{"alt":66,"src":95503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":66,"searchDepth":98,"depth":98,"links":95505},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95487,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95512,"title":95513,"body":95514,"description":400,"extension":401,"meta":95567,"navigation":403,"path":95568,"seo":95569,"stem":95570,"__hash__":95571},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95515,"toc":95565},[95516,95519,95522,95524,95527,95530,95535,95538,95541,95544,95547,95550,95553,95556,95559,95562],[10,95517,95513],{"id":95518},"_19魔法命令memit",[35,95520,95521],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[35,95523,24928],{},[35,95525,95526],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[35,95528,95529],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[35,95531,95532],{},[64,95533],{"alt":66,"src":95534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[35,95536,95537],{},"补充：",[35,95539,95540],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[35,95542,95543],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[35,95545,95546],{},"解决方法：",[35,95548,95549],{},"1.cmd",[35,95551,95552],{},"2.依次输入以下代码：",[35,95554,95555],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[35,95557,95558],{},"pip install --upgrade ipython",[35,95560,95561],{},"#升级 memory_profiler 和 setuptools",[35,95563,95564],{},"pip install --upgrade memory_profiler setuptools",{"title":66,"searchDepth":98,"depth":98,"links":95566},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95513,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95573,"title":95574,"body":95575,"description":400,"extension":401,"meta":97221,"navigation":403,"path":97222,"seo":97223,"stem":97224,"__hash__":97225},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95576,"toc":97191},[95577,95580,95584,95588,95649,95652,95657,95661,95666,95671,95676,95681,95684,95689,95693,95697,95730,95733,95736,95739,95791,95794,95830,95833,95875,95879,95900,95902,95939,95941,95946,95948,95953,95957,95960,95988,95992,95996,96049,96053,96145,96149,96153,96156,96161,96165,96190,96195,96199,96202,96205,96208,96211,96214,96217,96220,96232,96236,96240,96243,96275,96278,96301,96304,96330,96333,96359,96362,96396,96399,96461,96465,96468,96472,96475,96501,96504,96507,96512,96515,96584,96586,96591,96652,96655,96666,96672,96677,96681,96684,96697,96701,96716,96718,96741,96743,96769,96772,96775,96778,96826,96828,96833,96837,96841,96868,96872,96899,96902,96907,96912,97002,97006,97064,97069,97072,97075,97117,97121,97177,97182,97185,97188],[10,95578,95574],{"id":95579},"_2创建数组",[14,95581,95583],{"id":95582},"_21-array函数创建数组","2.1 array()函数创建数组",[23,95585,95587],{"id":95586},"_221-函数语句","2.2.1 函数语句",[75,95589,95591],{"className":30705,"code":95590,"language":30707,"meta":66,"style":66},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[81,95592,95593],{"__ignoreMap":66},[84,95594,95595,95598,95601,95603,95605,95607,95609,95611,95614,95616,95619,95621,95624,95626,95628,95630,95633,95635,95638,95640,95643,95645,95647],{"class":86,"line":87},[84,95596,95597],{"class":477},"numpy.array(",[84,95599,95600],{"class":94},"object",[84,95602,12764],{"class":477},[84,95604,93826],{"class":5545},[84,95606,13893],{"class":473},[84,95608,39260],{"class":94},[84,95610,12764],{"class":477},[84,95612,95613],{"class":5545},"copy",[84,95615,13893],{"class":473},[84,95617,95618],{"class":94}," True",[84,95620,12764],{"class":477},[84,95622,95623],{"class":5545},"order",[84,95625,13893],{"class":473},[84,95627,39260],{"class":94},[84,95629,12764],{"class":477},[84,95631,95632],{"class":5545},"subok",[84,95634,13893],{"class":473},[84,95636,95637],{"class":94}," False",[84,95639,12764],{"class":477},[84,95641,95642],{"class":5545},"ndmin",[84,95644,13893],{"class":473},[84,95646,4422],{"class":94},[84,95648,484],{"class":477},[35,95650,95651],{},"参数：",[35,95653,95654],{},[64,95655],{"alt":66,"src":95656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[23,95658,95660],{"id":95659},"_222-实例","2.2.2 实例",[35,95662,95663],{},[64,95664],{"alt":66,"src":95665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[35,95667,95668],{},[64,95669],{"alt":66,"src":95670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[35,95672,95673],{},[64,95674],{"alt":66,"src":95675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[35,95677,95678],{},[64,95679],{"alt":66,"src":95680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[35,95682,95683],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[35,95685,95686],{},[64,95687],{"alt":66,"src":95688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95690,95692],{"id":95691},"_22-随机数创建数组","2.2 随机数创建数组",[23,95694,95696],{"id":95695},"_221-random语句","2.2.1 random语句",[75,95698,95700],{"className":30705,"code":95699,"language":30707,"meta":66,"style":66},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[81,95701,95702,95707,95712,95720,95725],{"__ignoreMap":66},[84,95703,95704],{"class":86,"line":87},[84,95705,95706],{"class":328},"#random.random()\n",[84,95708,95709],{"class":86,"line":98},[84,95710,95711],{"class":328},"#确定随机种子,就是每次运行结果是相同的\n",[84,95713,95714,95716,95718],{"class":86,"line":70},[84,95715,94933],{"class":477},[84,95717,666],{"class":94},[84,95719,484],{"class":477},[84,95721,95722],{"class":86,"line":120},[84,95723,95724],{"class":477},"np.random.random()\n",[84,95726,95727],{"class":86,"line":131},[84,95728,95729],{"class":328},"#生成一个随机的数目\n",[35,95731,95732],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[35,95734,95735],{},"可以指定数组形状 size",[35,95737,95738],{},"①生成一维数组",[75,95740,95742],{"className":30705,"code":95741,"language":30707,"meta":66,"style":66},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[81,95743,95744,95749,95762,95767,95783],{"__ignoreMap":66},[84,95745,95746],{"class":86,"line":87},[84,95747,95748],{"class":328},"#random.random(size())\n",[84,95750,95751,95754,95756,95758,95760],{"class":86,"line":98},[84,95752,95753],{"class":477},"np.random.random(",[84,95755,31823],{"class":5545},[84,95757,523],{"class":473},[84,95759,792],{"class":94},[84,95761,484],{"class":477},[84,95763,95764],{"class":86,"line":70},[84,95765,95766],{"class":328},"#生成一位的五个元素\n",[84,95768,95769,95771,95773,95775,95777,95779,95781],{"class":86,"line":120},[84,95770,39],{"class":477},[84,95772,523],{"class":473},[84,95774,95753],{"class":477},[84,95776,31823],{"class":5545},[84,95778,523],{"class":473},[84,95780,140],{"class":94},[84,95782,484],{"class":477},[84,95784,95785,95788],{"class":86,"line":131},[84,95786,95787],{"class":477},"a.shape ",[84,95789,95790],{"class":328},"#输出数组形状\n",[35,95792,95793],{},"②生成二维数组",[75,95795,95797],{"className":30705,"code":95796,"language":30707,"meta":66,"style":66},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[81,95798,95799,95803,95825],{"__ignoreMap":66},[84,95800,95801],{"class":86,"line":87},[84,95802,93627],{"class":328},[84,95804,95805,95807,95809,95811,95813,95815,95817,95819,95821,95823],{"class":86,"line":98},[84,95806,93632],{"class":477},[84,95808,523],{"class":473},[84,95810,95753],{"class":477},[84,95812,31823],{"class":5545},[84,95814,523],{"class":473},[84,95816,478],{"class":477},[84,95818,140],{"class":94},[84,95820,851],{"class":477},[84,95822,792],{"class":94},[84,95824,30824],{"class":477},[84,95826,95827],{"class":86,"line":70},[84,95828,95829],{"class":328},"#生成四行五列的数组\n",[35,95831,95832],{},"③生成三维数组",[75,95834,95836],{"className":30705,"code":95835,"language":30707,"meta":66,"style":66},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[81,95837,95838,95843,95870],{"__ignoreMap":66},[84,95839,95840],{"class":86,"line":87},[84,95841,95842],{"class":328},"#三维数组\n",[84,95844,95845,95848,95850,95852,95854,95856,95858,95860,95862,95864,95866,95868],{"class":86,"line":98},[84,95846,95847],{"class":477},"aaa",[84,95849,523],{"class":473},[84,95851,95753],{"class":477},[84,95853,31823],{"class":5545},[84,95855,523],{"class":473},[84,95857,478],{"class":477},[84,95859,553],{"class":94},[84,95861,851],{"class":477},[84,95863,547],{"class":94},[84,95865,851],{"class":477},[84,95867,140],{"class":94},[84,95869,30824],{"class":477},[84,95871,95872],{"class":86,"line":70},[84,95873,95874],{"class":477},"aaa.shape\n",[23,95876,95878],{"id":95877},"_222-randint语句","2.2.2 randint语句",[75,95880,95882],{"className":30705,"code":95881,"language":30707,"meta":66,"style":66},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[81,95883,95884,95889],{"__ignoreMap":66},[84,95885,95886],{"class":86,"line":87},[84,95887,95888],{"class":328},"#生成随机的整数 random.randint(low,high,size)\n",[84,95890,95891,95893,95895,95897],{"class":86,"line":98},[84,95892,93440],{"class":477},[84,95894,792],{"class":94},[84,95896,14043],{"class":477},[84,95898,95899],{"class":328},"#0~5中的随机一个数\n",[35,95901,95738],{},[75,95903,95905],{"className":30705,"code":95904,"language":30707,"meta":66,"style":66},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[81,95906,95907,95912,95934],{"__ignoreMap":66},[84,95908,95909],{"class":86,"line":87},[84,95910,95911],{"class":328},"#一维\n",[84,95913,95914,95916,95918,95920,95922,95924,95926,95928,95930,95932],{"class":86,"line":98},[84,95915,93440],{"class":477},[84,95917,692],{"class":94},[84,95919,851],{"class":477},[84,95921,945],{"class":94},[84,95923,851],{"class":477},[84,95925,31823],{"class":5545},[84,95927,523],{"class":473},[84,95929,478],{"class":477},[84,95931,919],{"class":94},[84,95933,30824],{"class":477},[84,95935,95936],{"class":86,"line":70},[84,95937,95938],{"class":328},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[35,95940,95793],{},[35,95942,95943],{},[64,95944],{"alt":66,"src":95945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[35,95947,95832],{},[35,95949,95950],{},[64,95951],{"alt":66,"src":95952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[23,95954,95956],{"id":95955},"_222-rand语句","2.2.2 rand语句",[35,95958,95959],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[75,95961,95963],{"className":30705,"code":95962,"language":30707,"meta":66,"style":66},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[81,95964,95965,95978,95983],{"__ignoreMap":66},[84,95966,95967,95970,95972,95974,95976],{"class":86,"line":87},[84,95968,95969],{"class":477},"np.random.rand(",[84,95971,784],{"class":94},[84,95973,851],{"class":477},[84,95975,919],{"class":94},[84,95977,484],{"class":477},[84,95979,95980],{"class":86,"line":98},[84,95981,95982],{"class":328},"#第一个参数100：行数，表示有100个样本\n",[84,95984,95985],{"class":86,"line":70},[84,95986,95987],{"class":328},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95989,95991],{"id":95990},"_23-arange创建数组","2.3 arange()创建数组",[23,95993,95995],{"id":95994},"_231-函数语句","2.3.1 函数语句",[75,95997,95999],{"className":30705,"code":95998,"language":30707,"meta":66,"style":66},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[81,96000,96001,96015,96020,96025,96030,96035,96040,96045],{"__ignoreMap":66},[84,96002,96003,96006,96008,96010,96013],{"class":86,"line":87},[84,96004,96005],{"class":477},"numpy.arange([start,] stop[, step], ",[84,96007,93826],{"class":5545},[84,96009,523],{"class":473},[84,96011,96012],{"class":94},"None",[84,96014,484],{"class":477},[84,96016,96017],{"class":86,"line":98},[84,96018,96019],{"class":328},"#参数\n",[84,96021,96022],{"class":86,"line":70},[84,96023,96024],{"class":104},"\"\"\"\n",[84,96026,96027],{"class":86,"line":120},[84,96028,96029],{"class":104},"start:起始值，可选，默认从 0 开始。\n",[84,96031,96032],{"class":86,"line":131},[84,96033,96034],{"class":104},"stop:结束值（不包含该值）。\n",[84,96036,96037],{"class":86,"line":145},[84,96038,96039],{"class":104},"step:步长，可选，默认是 1。可以为浮点数。\n",[84,96041,96042],{"class":86,"line":156},[84,96043,96044],{"class":104},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[84,96046,96047],{"class":86,"line":164},[84,96048,96024],{"class":104},[23,96050,96052],{"id":96051},"_232-实例","2.3.2 实例",[75,96054,96056],{"className":30705,"code":96055,"language":30707,"meta":66,"style":66},"#创建一维数组\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",[81,96057,96058,96062,96086,96091,96096,96100,96123,96127,96131,96136,96141],{"__ignoreMap":66},[84,96059,96060],{"class":86,"line":87},[84,96061,93431],{"class":328},[84,96063,96064,96066,96068,96070,96072,96074,96076,96078,96080,96082,96084],{"class":86,"line":98},[84,96065,93328],{"class":477},[84,96067,692],{"class":94},[84,96069,851],{"class":477},[84,96071,1198],{"class":94},[84,96073,851],{"class":477},[84,96075,692],{"class":94},[84,96077,851],{"class":477},[84,96079,93826],{"class":5545},[84,96081,523],{"class":473},[84,96083,481],{"class":94},[84,96085,484],{"class":477},[84,96087,96088],{"class":86,"line":70},[84,96089,96090],{"class":328},"#输出结果：\n",[84,96092,96093],{"class":86,"line":120},[84,96094,96095],{"class":328},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[84,96097,96098],{"class":86,"line":131},[84,96099,94273],{"class":328},[84,96101,96102,96105,96107,96109,96111,96114,96116,96118,96120],{"class":86,"line":145},[84,96103,96104],{"class":477},"np.array([np.arange(",[84,96106,692],{"class":94},[84,96108,851],{"class":477},[84,96110,140],{"class":94},[84,96112,96113],{"class":477},"),np.arange(",[84,96115,140],{"class":94},[84,96117,851],{"class":477},[84,96119,842],{"class":94},[84,96121,96122],{"class":477},")])\n",[84,96124,96125],{"class":86,"line":156},[84,96126,93890],{"class":328},[84,96128,96129],{"class":86,"line":164},[84,96130,96024],{"class":104},[84,96132,96133],{"class":86,"line":175},[84,96134,96135],{"class":104},"array([[1, 2, 3],\n",[84,96137,96138],{"class":86,"line":185},[84,96139,96140],{"class":104},"       [4, 5, 6]])\n",[84,96142,96143],{"class":86,"line":195},[84,96144,96024],{"class":104},[14,96146,96148],{"id":96147},"_24-生态分布","2.4 生态分布",[23,96150,96152],{"id":96151},"_241-标准正态分布","2.4.1 标准正态分布",[35,96154,96155],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[35,96157,96158],{},[64,96159],{"alt":66,"src":96160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[23,96162,96164],{"id":96163},"_242-常规正态分布","2.4.2 常规正态分布",[75,96166,96168],{"className":30705,"code":96167,"language":30707,"meta":66,"style":66},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[81,96169,96170,96175,96180,96185],{"__ignoreMap":66},[84,96171,96172],{"class":86,"line":87},[84,96173,96174],{"class":477},"random.normal(loc,scale,size)也可以生成正态分布\n",[84,96176,96177],{"class":86,"line":98},[84,96178,96179],{"class":328},"#loc:期望\n",[84,96181,96182],{"class":86,"line":70},[84,96183,96184],{"class":328},"#scale:方差\n",[84,96186,96187],{"class":86,"line":120},[84,96188,96189],{"class":328},"#size:用于确定是几维的数列\n",[35,96191,96192],{},[64,96193],{"alt":66,"src":96194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96196,96198],{"id":96197},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[35,96200,96201],{},"ndim:秩，维度个数",[35,96203,96204],{},"size:数组元素的个数",[35,96206,96207],{},"shape:数组的形状",[35,96209,96210],{},"dtype:数组元素的类型",[35,96212,96213],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[35,96215,96216],{},"他们都是属性，通过数组.属性的形式来确定",[35,96218,96219],{},"如果需要输出多个可以通过以下方式：",[75,96221,96223],{"className":30705,"code":96222,"language":30707,"meta":66,"style":66},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[81,96224,96225],{"__ignoreMap":66},[84,96226,96227,96229],{"class":86,"line":87},[84,96228,30742],{"class":94},[84,96230,96231],{"class":477},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96233,96235],{"id":96234},"_26-其他方式创建数组","2.6 其他方式创建数组",[23,96237,96239],{"id":96238},"_261-zeros创建数组","2.6.1 zeros()创建数组",[35,96241,96242],{},"①创建一维数组",[75,96244,96246],{"className":30705,"code":96245,"language":30707,"meta":66,"style":66},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[81,96247,96248,96257,96261,96266,96271],{"__ignoreMap":66},[84,96249,96250,96253,96255],{"class":86,"line":87},[84,96251,96252],{"class":477},"np.zeros(",[84,96254,919],{"class":94},[84,96256,484],{"class":477},[84,96258,96259],{"class":86,"line":98},[84,96260,96024],{"class":104},[84,96262,96263],{"class":86,"line":70},[84,96264,96265],{"class":104},"输出结果：\n",[84,96267,96268],{"class":86,"line":120},[84,96269,96270],{"class":104},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[84,96272,96273],{"class":86,"line":131},[84,96274,96024],{"class":104},[35,96276,96277],{},"上方代码等价于：",[75,96279,96281],{"className":30705,"code":96280,"language":30707,"meta":66,"style":66},"np.zeros(shape=(10))#创建10个元素的0数组\n",[81,96282,96283],{"__ignoreMap":66},[84,96284,96285,96287,96290,96292,96294,96296,96298],{"class":86,"line":87},[84,96286,96252],{"class":477},[84,96288,96289],{"class":5545},"shape",[84,96291,523],{"class":473},[84,96293,478],{"class":477},[84,96295,919],{"class":94},[84,96297,83097],{"class":477},[84,96299,96300],{"class":328},"#创建10个元素的0数组\n",[35,96302,96303],{},"也可以指定类型",[75,96305,96307],{"className":30705,"code":96306,"language":30707,"meta":66,"style":66},"#指定类型\nnp.zeros(5,dtype=int)\n",[81,96308,96309,96314],{"__ignoreMap":66},[84,96310,96311],{"class":86,"line":87},[84,96312,96313],{"class":328},"#指定类型\n",[84,96315,96316,96318,96320,96322,96324,96326,96328],{"class":86,"line":98},[84,96317,96252],{"class":477},[84,96319,792],{"class":94},[84,96321,851],{"class":477},[84,96323,93826],{"class":5545},[84,96325,523],{"class":473},[84,96327,481],{"class":94},[84,96329,484],{"class":477},[35,96331,96332],{},"②创建二维数组",[75,96334,96336],{"className":30705,"code":96335,"language":30707,"meta":66,"style":66},"np.zeros((3,4),dtype=int)\n",[81,96337,96338],{"__ignoreMap":66},[84,96339,96340,96343,96345,96347,96349,96351,96353,96355,96357],{"class":86,"line":87},[84,96341,96342],{"class":477},"np.zeros((",[84,96344,547],{"class":94},[84,96346,851],{"class":477},[84,96348,140],{"class":94},[84,96350,42583],{"class":477},[84,96352,93826],{"class":5545},[84,96354,523],{"class":473},[84,96356,481],{"class":94},[84,96358,484],{"class":477},[35,96360,96361],{},"③创建三维数组",[75,96363,96365],{"className":30705,"code":96364,"language":30707,"meta":66,"style":66},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[81,96366,96367,96372],{"__ignoreMap":66},[84,96368,96369],{"class":86,"line":87},[84,96370,96371],{"class":328},"#创建三维数组\n",[84,96373,96374,96376,96378,96380,96382,96384,96386,96388,96390,96392,96394],{"class":86,"line":98},[84,96375,96342],{"class":477},[84,96377,547],{"class":94},[84,96379,851],{"class":477},[84,96381,140],{"class":94},[84,96383,851],{"class":477},[84,96385,792],{"class":94},[84,96387,42583],{"class":477},[84,96389,93826],{"class":5545},[84,96391,523],{"class":473},[84,96393,481],{"class":94},[84,96395,484],{"class":477},[35,96397,96398],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[75,96400,96402],{"className":30705,"code":96401,"language":30707,"meta":66,"style":66},"#使用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",[81,96403,96404,96409,96424,96429,96434,96456],{"__ignoreMap":66},[84,96405,96406],{"class":86,"line":87},[84,96407,96408],{"class":328},"#使用zeros_like将创建的一维数组变成全0的数组\n",[84,96410,96411,96413,96415,96417,96419,96421],{"class":86,"line":98},[84,96412,39],{"class":477},[84,96414,523],{"class":473},[84,96416,93328],{"class":477},[84,96418,140],{"class":94},[84,96420,902],{"class":477},[84,96422,96423],{"class":328},"#这个得到的结果：一维数组0，1，2，3\n",[84,96425,96426],{"class":86,"line":70},[84,96427,96428],{"class":477},"np.zeros_like(a)\n",[84,96430,96431],{"class":86,"line":120},[84,96432,96433],{"class":328},"#使用zeros_like将创建的二维数组变成全0的数组\n",[84,96435,96436,96438,96440,96442,96444,96446,96448,96450,96452,96454],{"class":86,"line":131},[84,96437,93632],{"class":477},[84,96439,523],{"class":473},[84,96441,95753],{"class":477},[84,96443,31823],{"class":5545},[84,96445,523],{"class":473},[84,96447,478],{"class":477},[84,96449,140],{"class":94},[84,96451,851],{"class":477},[84,96453,792],{"class":94},[84,96455,30824],{"class":477},[84,96457,96458],{"class":86,"line":145},[84,96459,96460],{"class":477},"np.zeros_like(aa)\n",[23,96462,96464],{"id":96463},"_262-ones创建数组","2.6.2 ones()创建数组",[35,96466,96467],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[23,96469,96471],{"id":96470},"_263-empty创建数组","2.6.3 empty()创建数组",[35,96473,96474],{},"①empty()用法",[75,96476,96478],{"className":30705,"code":96477,"language":30707,"meta":66,"style":66},"numpy.empty(shape,dtype=float,order='c')\n",[81,96479,96480],{"__ignoreMap":66},[84,96481,96482,96485,96487,96489,96491,96493,96495,96497,96499],{"class":86,"line":87},[84,96483,96484],{"class":477},"numpy.empty(shape,",[84,96486,93826],{"class":5545},[84,96488,523],{"class":473},[84,96490,517],{"class":94},[84,96492,851],{"class":477},[84,96494,95623],{"class":5545},[84,96496,523],{"class":473},[84,96498,76354],{"class":104},[84,96500,484],{"class":477},[35,96502,96503],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[35,96505,96506],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[35,96508,96509],{},[64,96510],{"alt":66,"src":96511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[35,96513,96514],{},"②empty()用法",[75,96516,96518],{"className":30705,"code":96517,"language":30707,"meta":66,"style":66},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[81,96519,96520,96541,96553,96574,96579],{"__ignoreMap":66},[84,96521,96522,96524,96526,96529,96531,96533,96535,96537,96539],{"class":86,"line":87},[84,96523,1318],{"class":477},[84,96525,523],{"class":473},[84,96527,96528],{"class":477},"np.empty(",[84,96530,919],{"class":94},[84,96532,851],{"class":477},[84,96534,93826],{"class":5545},[84,96536,523],{"class":473},[84,96538,481],{"class":94},[84,96540,484],{"class":477},[84,96542,96543,96545,96547,96549,96551],{"class":86,"line":98},[84,96544,1293],{"class":477},[84,96546,523],{"class":473},[84,96548,93328],{"class":477},[84,96550,792],{"class":94},[84,96552,484],{"class":477},[84,96554,96555,96558,96560,96563,96565,96567,96570,96572],{"class":86,"line":70},[84,96556,96557],{"class":477},"np.add(",[84,96559,553],{"class":94},[84,96561,96562],{"class":477},",x,",[84,96564,93380],{"class":5545},[84,96566,523],{"class":473},[84,96568,96569],{"class":477},"y[:",[84,96571,792],{"class":94},[84,96573,4986],{"class":477},[84,96575,96576],{"class":86,"line":120},[84,96577,96578],{"class":328},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[84,96580,96581],{"class":86,"line":131},[84,96582,96583],{"class":477},"y\n",[35,96585,11843],{},[35,96587,96588],{},[64,96589],{"alt":66,"src":96590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[75,96592,96594],{"className":30705,"code":96593,"language":30707,"meta":66,"style":66},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[81,96595,96596,96612,96632,96647],{"__ignoreMap":66},[84,96597,96598,96600,96602,96604,96606,96608,96610],{"class":86,"line":87},[84,96599,1293],{"class":477},[84,96601,523],{"class":473},[84,96603,93328],{"class":477},[84,96605,692],{"class":94},[84,96607,851],{"class":477},[84,96609,817],{"class":94},[84,96611,484],{"class":477},[84,96613,96614,96616,96618,96620,96622,96624,96626,96628,96630],{"class":86,"line":98},[84,96615,1318],{"class":477},[84,96617,523],{"class":473},[84,96619,96528],{"class":477},[84,96621,792],{"class":94},[84,96623,851],{"class":477},[84,96625,93826],{"class":5545},[84,96627,523],{"class":473},[84,96629,481],{"class":94},[84,96631,484],{"class":477},[84,96633,96634,96637,96639,96641,96643,96645],{"class":86,"line":70},[84,96635,96636],{"class":477},"np.add(x,",[84,96638,553],{"class":94},[84,96640,851],{"class":477},[84,96642,93380],{"class":5545},[84,96644,523],{"class":473},[84,96646,93775],{"class":477},[84,96648,96649],{"class":86,"line":120},[84,96650,96651],{"class":328},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[35,96653,96654],{},"③empty_like()",[35,96656,96657],{},[624,96658,96659,96660,96665],{},"创建一个",[624,96661,96662],{},[624,96663,96664],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[35,96667,96668,96671],{},[81,96669,96670],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[35,96673,96674],{},[64,96675],{"alt":66,"src":96676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[23,96678,96680],{"id":96679},"_264-用法","2.6.4 ？？用法",[35,96682,96683],{},"当想查看一个函数的参数时，可以通过？？来实现",[75,96685,96687],{"className":30705,"code":96686,"language":30707,"meta":66,"style":66},"np.full??\n",[81,96688,96689],{"__ignoreMap":66},[84,96690,96691,96694],{"class":86,"line":87},[84,96692,96693],{"class":477},"np.full",[84,96695,96696],{"class":77729},"??\n",[23,96698,96700],{"id":96699},"_265-full创建数组","2.6.5 full()创建数组",[75,96702,96704],{"className":30705,"code":96703,"language":30707,"meta":66,"style":66},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[81,96705,96706,96711],{"__ignoreMap":66},[84,96707,96708],{"class":86,"line":87},[84,96709,96710],{"class":477},"full(shape,fill_value)\n",[84,96712,96713],{"class":86,"line":98},[84,96714,96715],{"class":477},"创建全为某个指定值的数组\n",[35,96717,94856],{},[75,96719,96721],{"className":30705,"code":96720,"language":30707,"meta":66,"style":66},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[81,96722,96723,96728],{"__ignoreMap":66},[84,96724,96725],{"class":86,"line":87},[84,96726,96727],{"class":328},"#创建一个一维数组,以20进行填充\n",[84,96729,96730,96733,96735,96737,96739],{"class":86,"line":98},[84,96731,96732],{"class":477},"np.full(",[84,96734,919],{"class":94},[84,96736,851],{"class":477},[84,96738,1173],{"class":94},[84,96740,484],{"class":477},[35,96742,93617],{},[75,96744,96746],{"className":30705,"code":96745,"language":30707,"meta":66,"style":66},"#创建二维数组\nnp.full((3,5),11)\n",[81,96747,96748,96752],{"__ignoreMap":66},[84,96749,96750],{"class":86,"line":87},[84,96751,94273],{"class":328},[84,96753,96754,96757,96759,96761,96763,96765,96767],{"class":86,"line":98},[84,96755,96756],{"class":477},"np.full((",[84,96758,547],{"class":94},[84,96760,851],{"class":477},[84,96762,792],{"class":94},[84,96764,42583],{"class":477},[84,96766,945],{"class":94},[84,96768,484],{"class":477},[35,96770,96771],{},"③full_like用法",[35,96773,96774],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[35,96776,96777],{},"这里是指定填充而已",[75,96779,96781],{"className":30705,"code":96780,"language":30707,"meta":66,"style":66},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[81,96782,96783,96788,96812,96817],{"__ignoreMap":66},[84,96784,96785],{"class":86,"line":87},[84,96786,96787],{"class":328},"#创建一个指定形状数组\n",[84,96789,96790,96792,96794,96796,96798,96800,96802,96804,96806,96808,96810],{"class":86,"line":98},[84,96791,39],{"class":477},[84,96793,523],{"class":473},[84,96795,93328],{"class":477},[84,96797,692],{"class":94},[84,96799,851],{"class":477},[84,96801,798],{"class":94},[84,96803,93333],{"class":477},[84,96805,140],{"class":94},[84,96807,851],{"class":477},[84,96809,893],{"class":94},[84,96811,484],{"class":477},[84,96813,96814],{"class":86,"line":70},[84,96815,96816],{"class":328},"#进行指定填充\n",[84,96818,96819,96822,96824],{"class":86,"line":120},[84,96820,96821],{"class":477},"np.full_like(a,",[84,96823,919],{"class":94},[84,96825,484],{"class":477},[35,96827,11843],{},[35,96829,96830],{},[64,96831],{"alt":66,"src":96832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[23,96834,96836],{"id":96835},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22327,96838,96840],{"id":96839},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[75,96842,96844],{"className":30705,"code":96843,"language":30707,"meta":66,"style":66},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[81,96845,96846,96863],{"__ignoreMap":66},[84,96847,96848,96851,96853,96855,96857,96859,96861],{"class":86,"line":87},[84,96849,96850],{"class":477},"np.eye(",[84,96852,140],{"class":94},[84,96854,851],{"class":477},[84,96856,93826],{"class":5545},[84,96858,523],{"class":473},[84,96860,481],{"class":94},[84,96862,484],{"class":477},[84,96864,96865],{"class":86,"line":98},[84,96866,96867],{"class":328},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22327,96869,96871],{"id":96870},"_2662-法2identity","2.6.6.2 法2：identity()",[75,96873,96875],{"className":30705,"code":96874,"language":30707,"meta":66,"style":66},"#identity()\nnp.identity(5,dtype=int)\n",[81,96876,96877,96882],{"__ignoreMap":66},[84,96878,96879],{"class":86,"line":87},[84,96880,96881],{"class":328},"#identity()\n",[84,96883,96884,96887,96889,96891,96893,96895,96897],{"class":86,"line":98},[84,96885,96886],{"class":477},"np.identity(",[84,96888,792],{"class":94},[84,96890,851],{"class":477},[84,96892,93826],{"class":5545},[84,96894,523],{"class":473},[84,96896,481],{"class":94},[84,96898,484],{"class":477},[35,96900,96901],{},"两个函数是有区别的",[35,96903,96904],{},[64,96905],{"alt":66,"src":96906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[35,96908,96909],{},[64,96910],{"alt":66,"src":96911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[75,96913,96915],{"className":30705,"code":96914,"language":30707,"meta":66,"style":66},"# 创建一个 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",[81,96916,96917,96922,96934,96939,96944,96949,96954,96958,96963,96983,96987,96992,96997],{"__ignoreMap":66},[84,96918,96919],{"class":86,"line":87},[84,96920,96921],{"class":328},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[84,96923,96924,96926,96928,96930,96932],{"class":86,"line":98},[84,96925,96850],{"class":477},[84,96927,547],{"class":94},[84,96929,12764],{"class":477},[84,96931,140],{"class":94},[84,96933,484],{"class":477},[84,96935,96936],{"class":86,"line":70},[84,96937,96938],{"class":328},"# 输出:\n",[84,96940,96941],{"class":86,"line":120},[84,96942,96943],{"class":328},"# [[1. 0. 0. 0.]\n",[84,96945,96946],{"class":86,"line":131},[84,96947,96948],{"class":328},"#  [0. 1. 0. 0.]\n",[84,96950,96951],{"class":86,"line":145},[84,96952,96953],{"class":328},"#  [0. 0. 1. 0.]]\n",[84,96955,96956],{"class":86,"line":156},[84,96957,2729],{"emptyLinePlaceholder":403},[84,96959,96960],{"class":86,"line":164},[84,96961,96962],{"class":328},"# 对角线向上偏移1\n",[84,96964,96965,96967,96969,96971,96973,96975,96977,96979,96981],{"class":86,"line":175},[84,96966,96850],{"class":477},[84,96968,547],{"class":94},[84,96970,12764],{"class":477},[84,96972,140],{"class":94},[84,96974,12764],{"class":477},[84,96976,966],{"class":5545},[84,96978,523],{"class":473},[84,96980,692],{"class":94},[84,96982,484],{"class":477},[84,96984,96985],{"class":86,"line":185},[84,96986,96938],{"class":328},[84,96988,96989],{"class":86,"line":195},[84,96990,96991],{"class":328},"# [[0. 1. 0. 0.]\n",[84,96993,96994],{"class":86,"line":206},[84,96995,96996],{"class":328},"#  [0. 0. 1. 0.]\n",[84,96998,96999],{"class":86,"line":217},[84,97000,97001],{"class":328},"#  [0. 0. 0. 1.]]\n",[23,97003,97005],{"id":97004},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[75,97007,97009],{"className":30705,"code":97008,"language":30707,"meta":66,"style":66},"#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",[81,97010,97011,97016,97020,97025,97030,97035,97040,97045,97050,97055,97060],{"__ignoreMap":66},[84,97012,97013],{"class":86,"line":87},[84,97014,97015],{"class":328},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[84,97017,97018],{"class":86,"line":98},[84,97019,96024],{"class":104},[84,97021,97022],{"class":86,"line":70},[84,97023,97024],{"class":104},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[84,97026,97027],{"class":86,"line":120},[84,97028,97029],{"class":104},"参数介绍：\n",[84,97031,97032],{"class":86,"line":131},[84,97033,97034],{"class":104},"start：序列的起始值\n",[84,97036,97037],{"class":86,"line":145},[84,97038,97039],{"class":104},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[84,97041,97042],{"class":86,"line":156},[84,97043,97044],{"class":104},"num：要生长的等步长的样本数量，默认为50\n",[84,97046,97047],{"class":86,"line":164},[84,97048,97049],{"class":104},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[84,97051,97052],{"class":86,"line":175},[84,97053,97054],{"class":104},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[84,97056,97057],{"class":86,"line":185},[84,97058,97059],{"class":104},"dtype：ndarry的数据类型\n",[84,97061,97062],{"class":86,"line":195},[84,97063,96024],{"class":104},[35,97065,97066],{},[64,97067],{"alt":66,"src":97068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[35,97070,97071],{},"这里num=是可以省略的",[35,97073,97074],{},"也就是下方两行代码结果是一模一样的",[75,97076,97078],{"className":30705,"code":97077,"language":30707,"meta":66,"style":66},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[81,97079,97080,97097],{"__ignoreMap":66},[84,97081,97082,97085,97087,97089,97091,97093,97095],{"class":86,"line":87},[84,97083,97084],{"class":477},"np.linspace(",[84,97086,692],{"class":94},[84,97088,851],{"class":477},[84,97090,792],{"class":94},[84,97092,851],{"class":477},[84,97094,792],{"class":94},[84,97096,484],{"class":477},[84,97098,97099,97101,97103,97105,97107,97109,97111,97113,97115],{"class":86,"line":98},[84,97100,97084],{"class":477},[84,97102,692],{"class":94},[84,97104,851],{"class":477},[84,97106,792],{"class":94},[84,97108,851],{"class":477},[84,97110,1998],{"class":5545},[84,97112,523],{"class":473},[84,97114,792],{"class":94},[84,97116,484],{"class":477},[23,97118,97120],{"id":97119},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[75,97122,97124],{"className":30705,"code":97123,"language":30707,"meta":66,"style":66},"#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",[81,97125,97126,97131,97135,97140,97145,97150,97155,97159,97164,97169,97173],{"__ignoreMap":66},[84,97127,97128],{"class":86,"line":87},[84,97129,97130],{"class":328},"#logspace函数用于创建一个等比数列，格式如下：\n",[84,97132,97133],{"class":86,"line":98},[84,97134,96024],{"class":104},[84,97136,97137],{"class":86,"line":70},[84,97138,97139],{"class":104},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[84,97141,97142],{"class":86,"line":120},[84,97143,97144],{"class":104},"参数为：\n",[84,97146,97147],{"class":86,"line":131},[84,97148,97149],{"class":104},"start:序列的起始位置为：base**start\n",[84,97151,97152],{"class":86,"line":145},[84,97153,97154],{"class":104},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[84,97156,97157],{"class":86,"line":156},[84,97158,97044],{"class":104},[84,97160,97161],{"class":86,"line":164},[84,97162,97163],{"class":104},"endpoint：是否包含 stop 这个值，默认是 True\n",[84,97165,97166],{"class":86,"line":175},[84,97167,97168],{"class":104},"base：对数的底数，默认是 10（常见对数）\n",[84,97170,97171],{"class":86,"line":185},[84,97172,97059],{"class":104},[84,97174,97175],{"class":86,"line":195},[84,97176,96024],{"class":104},[35,97178,97179],{},[64,97180],{"alt":66,"src":97181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[35,97183,97184],{},"logspace()函数中的num参数也是可以不写num=的",[35,97186,97187],{},"endpoint是不可以省略的",[389,97189,97190],{},"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":66,"searchDepth":98,"depth":98,"links":97192},[97193,97197,97202,97206,97210,97211],{"id":95582,"depth":98,"text":95583,"children":97194},[97195,97196],{"id":95586,"depth":70,"text":95587},{"id":95659,"depth":70,"text":95660},{"id":95691,"depth":98,"text":95692,"children":97198},[97199,97200,97201],{"id":95695,"depth":70,"text":95696},{"id":95877,"depth":70,"text":95878},{"id":95955,"depth":70,"text":95956},{"id":95990,"depth":98,"text":95991,"children":97203},[97204,97205],{"id":95994,"depth":70,"text":95995},{"id":96051,"depth":70,"text":96052},{"id":96147,"depth":98,"text":96148,"children":97207},[97208,97209],{"id":96151,"depth":70,"text":96152},{"id":96163,"depth":70,"text":96164},{"id":96197,"depth":98,"text":96198},{"id":96234,"depth":98,"text":96235,"children":97212},[97213,97214,97215,97216,97217,97218,97219,97220],{"id":96238,"depth":70,"text":96239},{"id":96463,"depth":70,"text":96464},{"id":96470,"depth":70,"text":96471},{"id":96679,"depth":70,"text":96680},{"id":96699,"depth":70,"text":96700},{"id":96835,"depth":70,"text":96836},{"id":97004,"depth":70,"text":97005},{"id":97119,"depth":70,"text":97120},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95574,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97227,"title":97228,"body":97229,"description":400,"extension":401,"meta":97322,"navigation":403,"path":97323,"seo":97324,"stem":97325,"__hash__":97326},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97230,"toc":97320},[97231,97234,97237,97240,97243,97246,97249,97252,97255,97258,97261,97264,97266,97269,97272,97277,97280,97283,97317],[10,97232,97228],{"id":97233},"_20魔法命令mprun",[35,97235,97236],{},"逐行分析数据内存的使用情况",[35,97238,97239],{},"语法格式：",[35,97241,97242],{},"%mprun -f 模块名.函数名 模块名.函数名()",[35,97244,97245],{},"分析结果列如下：",[35,97247,97248],{},"Line行号",[35,97250,97251],{},"Mem usage内存使用大小",[35,97253,97254],{},"increment内存增量",[35,97256,97257],{},"Line content代码内容",[35,97259,97260],{},"补充说明：",[35,97262,97263],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[35,97265,95529],{},[35,97267,97268],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[35,97270,97271],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[35,97273,97274],{},[64,97275],{"alt":66,"src":97276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[35,97278,97279],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[35,97281,97282],{},"这时候需要重新加载模块",[75,97284,97286],{"className":30705,"code":97285,"language":30707,"meta":66,"style":66},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[81,97287,97288,97293,97300,97305],{"__ignoreMap":66},[84,97289,97290],{"class":86,"line":87},[84,97291,97292],{"class":328},"#重新加载模块\n",[84,97294,97295,97297],{"class":86,"line":98},[84,97296,30719],{"class":473},[84,97298,97299],{"class":477}," importlib\n",[84,97301,97302],{"class":86,"line":70},[84,97303,97304],{"class":477},"importlib.reload(mprun_test)\n",[84,97306,97307,97309,97312,97314],{"class":86,"line":120},[84,97308,801],{"class":473},[84,97310,97311],{"class":477},"mprun ",[84,97313,1005],{"class":473},[84,97315,97316],{"class":477},"f mprun_test.fun_test mprun_test.fun_test()\n",[389,97318,97319],{},"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":66,"searchDepth":98,"depth":98,"links":97321},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97228,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97328,"title":97329,"body":97330,"description":400,"extension":401,"meta":97347,"navigation":403,"path":97348,"seo":97349,"stem":97350,"__hash__":97351},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97331,"toc":97345},[97332,97335,97340],[10,97333,97329],{"id":97334},"_3一维数组的索引和切片",[35,97336,97337],{},[64,97338],{"alt":66,"src":97339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[35,97341,97342],{},[64,97343],{"alt":66,"src":97344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":66,"searchDepth":98,"depth":98,"links":97346},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97329,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97353,"title":97354,"body":97355,"description":400,"extension":401,"meta":97838,"navigation":403,"path":97839,"seo":97840,"stem":97841,"__hash__":97842},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97356,"toc":97836},[97357,97360,97363,97368,97401,97404,97442,97445,97479,97482,97587,97590,97627,97630,97731,97734,97785,97788,97830,97833],[10,97358,97354],{"id":97359},"_4二维数组的索引与切片",[35,97361,97362],{},"①获取指定单个元素",[35,97364,97365],{},[64,97366],{"alt":66,"src":97367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[75,97369,97371],{"className":30705,"code":97370,"language":30707,"meta":66,"style":66},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[81,97372,97373,97378,97383,97388],{"__ignoreMap":66},[84,97374,97375],{"class":86,"line":87},[84,97376,97377],{"class":328},"#获取元素9\n",[84,97379,97380],{"class":86,"line":98},[84,97381,97382],{"class":328},"#先获取所在行，再获取所在列\n",[84,97384,97385],{"class":86,"line":70},[84,97386,97387],{"class":328},"#数组[行索引号，列索引号]\n",[84,97389,97390,97393,97395,97397,97399],{"class":86,"line":120},[84,97391,97392],{"class":477},"a[",[84,97394,692],{"class":94},[84,97396,851],{"class":477},[84,97398,553],{"class":94},[84,97400,33573],{"class":477},[35,97402,97403],{},"②获取整行元素",[75,97405,97407],{"className":30705,"code":97406,"language":30707,"meta":66,"style":66},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[81,97408,97409,97414,97419,97427,97432],{"__ignoreMap":66},[84,97410,97411],{"class":86,"line":87},[84,97412,97413],{"class":328},"#获取整行 数组[行索引号]\n",[84,97415,97416],{"class":86,"line":98},[84,97417,97418],{"class":328},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[84,97420,97421,97423,97425],{"class":86,"line":70},[84,97422,97392],{"class":477},[84,97424,553],{"class":94},[84,97426,33573],{"class":477},[84,97428,97429],{"class":86,"line":120},[84,97430,97431],{"class":328},"#也可以负索引获取一行\n",[84,97433,97434,97436,97438,97440],{"class":86,"line":131},[84,97435,97392],{"class":477},[84,97437,1005],{"class":473},[84,97439,692],{"class":94},[84,97441,33573],{"class":477},[35,97443,97444],{},"③获取整列元素",[75,97446,97448],{"className":30705,"code":97447,"language":30707,"meta":66,"style":66},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[81,97449,97450,97455,97464,97469],{"__ignoreMap":66},[84,97451,97452],{"class":86,"line":87},[84,97453,97454],{"class":328},"#获取整列 数组名[:,列索引]\n",[84,97456,97457,97460,97462],{"class":86,"line":98},[84,97458,97459],{"class":477},"a[:,",[84,97461,553],{"class":94},[84,97463,33573],{"class":477},[84,97465,97466],{"class":86,"line":70},[84,97467,97468],{"class":328},"#也可以负索引获取一列\n",[84,97470,97471,97473,97475,97477],{"class":86,"line":120},[84,97472,97459],{"class":477},[84,97474,1005],{"class":473},[84,97476,692],{"class":94},[84,97478,33573],{"class":477},[35,97480,97481],{},"④部分行部分列的元素",[75,97483,97485],{"className":30705,"code":97484,"language":30707,"meta":66,"style":66},"#部分行部分列 数组名[行切片，列切片]\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",[81,97486,97487,97492,97502,97506,97510,97515,97520,97524,97536,97540,97544,97549,97554,97559,97564,97568,97573],{"__ignoreMap":66},[84,97488,97489],{"class":86,"line":87},[84,97490,97491],{"class":328},"#部分行部分列 数组名[行切片，列切片]\n",[84,97493,97494,97497,97499],{"class":86,"line":98},[84,97495,97496],{"class":477},"a[:",[84,97498,553],{"class":94},[84,97500,97501],{"class":477},",:]\n",[84,97503,97504],{"class":86,"line":70},[84,97505,93890],{"class":328},[84,97507,97508],{"class":86,"line":120},[84,97509,94254],{"class":104},[84,97511,97512],{"class":86,"line":131},[84,97513,97514],{"class":104},"array([[ 1,  2,  3,  4,  5,  6],\n",[84,97516,97517],{"class":86,"line":145},[84,97518,97519],{"class":104},"       [ 7,  8,  9, 10, 11, 12]])\n",[84,97521,97522],{"class":86,"line":156},[84,97523,94254],{"class":104},[84,97525,97526,97528,97530,97532,97534],{"class":86,"line":164},[84,97527,97459],{"class":477},[84,97529,692],{"class":94},[84,97531,1332],{"class":477},[84,97533,140],{"class":94},[84,97535,33573],{"class":477},[84,97537,97538],{"class":86,"line":175},[84,97539,93890],{"class":328},[84,97541,97542],{"class":86,"line":185},[84,97543,94254],{"class":104},[84,97545,97546],{"class":86,"line":195},[84,97547,97548],{"class":104},"array([[ 2,  3,  4],\n",[84,97550,97551],{"class":86,"line":206},[84,97552,97553],{"class":104},"       [ 8,  9, 10],\n",[84,97555,97556],{"class":86,"line":217},[84,97557,97558],{"class":104},"       [14, 15, 16],\n",[84,97560,97561],{"class":86,"line":227},[84,97562,97563],{"class":104},"       [20, 21, 22]])\n",[84,97565,97566],{"class":86,"line":238},[84,97567,94254],{"class":104},[84,97569,97570],{"class":86,"line":249},[84,97571,97572],{"class":328},"#对列行同时进行切片，使用了step参数\n",[84,97574,97575,97578,97580,97583,97585],{"class":86,"line":262},[84,97576,97577],{"class":477},"a[::",[84,97579,553],{"class":94},[84,97581,97582],{"class":477},",::",[84,97584,553],{"class":94},[84,97586,33573],{"class":477},[35,97588,97589],{},"⑤同时获取两个元素",[75,97591,97593],{"className":30705,"code":97592,"language":30707,"meta":66,"style":66},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[81,97594,97595,97600,97605],{"__ignoreMap":66},[84,97596,97597],{"class":86,"line":87},[84,97598,97599],{"class":328},"#同时获取第三行第二列，第四行第一列\n",[84,97601,97602],{"class":86,"line":98},[84,97603,97604],{"class":328},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[84,97606,97607,97610,97612,97614,97616,97618,97620,97622,97624],{"class":86,"line":70},[84,97608,97609],{"class":477},"a[(",[84,97611,553],{"class":94},[84,97613,851],{"class":477},[84,97615,547],{"class":94},[84,97617,42574],{"class":477},[84,97619,692],{"class":94},[84,97621,851],{"class":477},[84,97623,666],{"class":94},[84,97625,97626],{"class":477},")]\n",[35,97628,97629],{},"⑥切片，对行进行反向获取",[75,97631,97633],{"className":30705,"code":97632,"language":30707,"meta":66,"style":66},"#切片 对所有行进行反向获取\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",[81,97634,97635,97640,97650,97654,97658,97663,97668,97673,97678,97682,97687,97703,97707,97712,97717,97722,97727],{"__ignoreMap":66},[84,97636,97637],{"class":86,"line":87},[84,97638,97639],{"class":328},"#切片 对所有行进行反向获取\n",[84,97641,97642,97644,97646,97648],{"class":86,"line":98},[84,97643,97577],{"class":477},[84,97645,1005],{"class":473},[84,97647,692],{"class":94},[84,97649,33573],{"class":477},[84,97651,97652],{"class":86,"line":70},[84,97653,93890],{"class":328},[84,97655,97656],{"class":86,"line":120},[84,97657,94254],{"class":104},[84,97659,97660],{"class":86,"line":131},[84,97661,97662],{"class":104},"array([[19, 20, 21, 22, 23, 24],\n",[84,97664,97665],{"class":86,"line":145},[84,97666,97667],{"class":104},"       [13, 14, 15, 16, 17, 18],\n",[84,97669,97670],{"class":86,"line":156},[84,97671,97672],{"class":104},"       [ 7,  8,  9, 10, 11, 12],\n",[84,97674,97675],{"class":86,"line":164},[84,97676,97677],{"class":104},"       [ 1,  2,  3,  4,  5,  6]])\n",[84,97679,97680],{"class":86,"line":175},[84,97681,94254],{"class":104},[84,97683,97684],{"class":86,"line":185},[84,97685,97686],{"class":328},"#对行列都进行反向切片获取\n",[84,97688,97689,97691,97693,97695,97697,97699,97701],{"class":86,"line":195},[84,97690,97577],{"class":477},[84,97692,1005],{"class":473},[84,97694,692],{"class":94},[84,97696,97582],{"class":477},[84,97698,1005],{"class":473},[84,97700,692],{"class":94},[84,97702,33573],{"class":477},[84,97704,97705],{"class":86,"line":206},[84,97706,94254],{"class":104},[84,97708,97709],{"class":86,"line":217},[84,97710,97711],{"class":104},"array([[24, 23, 22, 21, 20, 19],\n",[84,97713,97714],{"class":86,"line":227},[84,97715,97716],{"class":104},"       [18, 17, 16, 15, 14, 13],\n",[84,97718,97719],{"class":86,"line":238},[84,97720,97721],{"class":104},"       [12, 11, 10,  9,  8,  7],\n",[84,97723,97724],{"class":86,"line":249},[84,97725,97726],{"class":104},"       [ 6,  5,  4,  3,  2,  1]])\n",[84,97728,97729],{"class":86,"line":262},[84,97730,94254],{"class":104},[35,97732,97733],{},"⑦修改元素",[75,97735,97737],{"className":30705,"code":97736,"language":30707,"meta":66,"style":66},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[81,97738,97739,97744,97762,97767],{"__ignoreMap":66},[84,97740,97741],{"class":86,"line":87},[84,97742,97743],{"class":328},"#获取前两行和前两列\n",[84,97745,97746,97749,97751,97753,97755,97758,97760],{"class":86,"line":98},[84,97747,97748],{"class":477},"sub_a",[84,97750,523],{"class":473},[84,97752,97496],{"class":477},[84,97754,553],{"class":94},[84,97756,97757],{"class":477},",:",[84,97759,553],{"class":94},[84,97761,33573],{"class":477},[84,97763,97764],{"class":86,"line":70},[84,97765,97766],{"class":328},"#修改sub_a第一个元素的值\n",[84,97768,97769,97772,97774,97776,97778,97780,97782],{"class":86,"line":120},[84,97770,97771],{"class":477},"sub_a[",[84,97773,666],{"class":94},[84,97775,851],{"class":477},[84,97777,666],{"class":94},[84,97779,1413],{"class":477},[84,97781,523],{"class":473},[84,97783,97784],{"class":94},"100\n",[35,97786,97787],{},"⑧数组复制copy()",[75,97789,97791],{"className":30705,"code":97790,"language":30707,"meta":66,"style":66},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[81,97792,97793,97798,97808,97813],{"__ignoreMap":66},[84,97794,97795],{"class":86,"line":87},[84,97796,97797],{"class":328},"#数组复制\n",[84,97799,97800,97803,97805],{"class":86,"line":98},[84,97801,97802],{"class":477},"copy_a",[84,97804,523],{"class":473},[84,97806,97807],{"class":477},"np.copy(sub_a)\n",[84,97809,97810],{"class":86,"line":70},[84,97811,97812],{"class":328},"#修改copy_a后不影响原数组\n",[84,97814,97815,97818,97820,97822,97824,97826,97828],{"class":86,"line":120},[84,97816,97817],{"class":477},"copy_a[",[84,97819,666],{"class":94},[84,97821,851],{"class":477},[84,97823,666],{"class":94},[84,97825,1413],{"class":477},[84,97827,523],{"class":473},[84,97829,97784],{"class":94},[35,97831,97832],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[389,97834,97835],{},"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":66,"searchDepth":98,"depth":98,"links":97837},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97354,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97844,"title":97845,"body":97846,"description":400,"extension":401,"meta":98338,"navigation":403,"path":98339,"seo":98340,"stem":98341,"__hash__":98342},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97847,"toc":98330},[97848,97851,97855,97858,97861,97914,97917,97942,97945,97964,97984,97987,98003,98007,98053,98057,98099,98103,98106,98109,98112,98115,98118,98180,98240,98244,98247,98304,98308,98313,98322,98327],[10,97849,97845],{"id":97850},"_5改变数组的维度",[14,97852,97854],{"id":97853},"_51-使用reshape","5.1 使用reshape()",[35,97856,97857],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[35,97859,97860],{},"①一维数组转换为二维数组",[75,97862,97864],{"className":30705,"code":97863,"language":30707,"meta":66,"style":66},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[81,97865,97866,97882,97887,97892,97897],{"__ignoreMap":66},[84,97867,97868,97870,97872,97874,97876,97878,97880],{"class":86,"line":87},[84,97869,39],{"class":477},[84,97871,523],{"class":473},[84,97873,93328],{"class":477},[84,97875,692],{"class":94},[84,97877,851],{"class":477},[84,97879,996],{"class":94},[84,97881,484],{"class":477},[84,97883,97884],{"class":86,"line":98},[84,97885,97886],{"class":328},"#将一维数组进行转换\n",[84,97888,97889],{"class":86,"line":70},[84,97890,97891],{"class":328},"#注意点：元素个数不可以变\n",[84,97893,97894],{"class":86,"line":120},[84,97895,97896],{"class":328},"#转换维度要保持一致，不一致就异常！！！\n",[84,97898,97899,97901,97903,97906,97908,97910,97912],{"class":86,"line":131},[84,97900,93632],{"class":477},[84,97902,523],{"class":473},[84,97904,97905],{"class":477},"a.reshape(",[84,97907,553],{"class":94},[84,97909,851],{"class":477},[84,97911,817],{"class":94},[84,97913,484],{"class":477},[35,97915,97916],{},"②一维数组转换为三维数组",[75,97918,97920],{"className":30705,"code":97919,"language":30707,"meta":66,"style":66},"aaa=a.reshape(2,3,2)\n",[81,97921,97922],{"__ignoreMap":66},[84,97923,97924,97926,97928,97930,97932,97934,97936,97938,97940],{"class":86,"line":87},[84,97925,95847],{"class":477},[84,97927,523],{"class":473},[84,97929,97905],{"class":477},[84,97931,553],{"class":94},[84,97933,851],{"class":477},[84,97935,547],{"class":94},[84,97937,851],{"class":477},[84,97939,553],{"class":94},[84,97941,484],{"class":477},[35,97943,97944],{},"③二维数组转化为一维数组",[75,97946,97948],{"className":30705,"code":97947,"language":30707,"meta":66,"style":66},"#知道元素个数：\naa.reshape(12)\n",[81,97949,97950,97955],{"__ignoreMap":66},[84,97951,97952],{"class":86,"line":87},[84,97953,97954],{"class":328},"#知道元素个数：\n",[84,97956,97957,97960,97962],{"class":86,"line":98},[84,97958,97959],{"class":477},"aa.reshape(",[84,97961,971],{"class":94},[84,97963,484],{"class":477},[75,97965,97967],{"className":30705,"code":97966,"language":30707,"meta":66,"style":66},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[81,97968,97969,97974],{"__ignoreMap":66},[84,97970,97971],{"class":86,"line":87},[84,97972,97973],{"class":328},"#不知道元素个数，参数传递-1\n",[84,97975,97976,97978,97980,97982],{"class":86,"line":98},[84,97977,97959],{"class":477},[84,97979,1005],{"class":473},[84,97981,692],{"class":94},[84,97983,484],{"class":477},[35,97985,97986],{},"④三维数组转换为一维数组",[75,97988,97990],{"className":30705,"code":97989,"language":30707,"meta":66,"style":66},"aaa.reshape(-1)\n",[81,97991,97992],{"__ignoreMap":66},[84,97993,97994,97997,97999,98001],{"class":86,"line":87},[84,97995,97996],{"class":477},"aaa.reshape(",[84,97998,1005],{"class":473},[84,98000,692],{"class":94},[84,98002,484],{"class":477},[14,98004,98006],{"id":98005},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[75,98008,98010],{"className":30705,"code":98009,"language":30707,"meta":66,"style":66},"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",[81,98011,98012,98039,98044,98048],{"__ignoreMap":66},[84,98013,98014,98016,98018,98020,98022,98024,98026,98028,98030,98032,98034,98036],{"class":86,"line":87},[84,98015,93632],{"class":477},[84,98017,523],{"class":473},[84,98019,93328],{"class":477},[84,98021,692],{"class":94},[84,98023,851],{"class":477},[84,98025,996],{"class":94},[84,98027,93333],{"class":477},[84,98029,553],{"class":94},[84,98031,851],{"class":477},[84,98033,817],{"class":94},[84,98035,902],{"class":477},[84,98037,98038],{"class":328},"#转换为2行6列的数组\n",[84,98040,98041],{"class":86,"line":98},[84,98042,98043],{"class":477},"aa.revel()\n",[84,98045,98046],{"class":86,"line":70},[84,98047,93890],{"class":328},[84,98049,98050],{"class":86,"line":120},[84,98051,98052],{"class":328},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98054,98056],{"id":98055},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[75,98058,98060],{"className":30705,"code":98059,"language":30707,"meta":66,"style":66},"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",[81,98061,98062,98086,98091,98095],{"__ignoreMap":66},[84,98063,98064,98066,98068,98070,98072,98074,98076,98078,98080,98082,98084],{"class":86,"line":87},[84,98065,93632],{"class":477},[84,98067,523],{"class":473},[84,98069,93328],{"class":477},[84,98071,692],{"class":94},[84,98073,851],{"class":477},[84,98075,996],{"class":94},[84,98077,93333],{"class":477},[84,98079,553],{"class":94},[84,98081,851],{"class":477},[84,98083,817],{"class":94},[84,98085,484],{"class":477},[84,98087,98088],{"class":86,"line":98},[84,98089,98090],{"class":477},"aa.flatten()\n",[84,98092,98093],{"class":86,"line":70},[84,98094,93890],{"class":328},[84,98096,98097],{"class":86,"line":120},[84,98098,98052],{"class":328},[14,98100,98102],{"id":98101},"_54-使用resize","5.4 使用resize()",[35,98104,98105],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[35,98107,98108],{},"通过resize方法可以改变数组的维度",[35,98110,98111],{},"#resize修改数组维度",[35,98113,98114],{},"#以元组的形式指定形状",[35,98116,98117],{},"#改变的是原数组",[75,98119,98121],{"className":30705,"code":98120,"language":30707,"meta":66,"style":66},"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",[81,98122,98123,98139,98159,98172,98176],{"__ignoreMap":66},[84,98124,98125,98127,98129,98131,98133,98135,98137],{"class":86,"line":87},[84,98126,39],{"class":477},[84,98128,523],{"class":473},[84,98130,93328],{"class":477},[84,98132,692],{"class":94},[84,98134,851],{"class":477},[84,98136,996],{"class":94},[84,98138,484],{"class":477},[84,98140,98141,98144,98146,98148,98150,98152,98154,98156],{"class":86,"line":98},[84,98142,98143],{"class":477},"a.shape",[84,98145,523],{"class":473},[84,98147,478],{"class":477},[84,98149,553],{"class":94},[84,98151,851],{"class":477},[84,98153,817],{"class":94},[84,98155,902],{"class":477},[84,98157,98158],{"class":328},"#改变了原数组\n",[84,98160,98161,98163,98165,98168,98170],{"class":86,"line":70},[84,98162,39],{"class":477},[84,98164,523],{"class":473},[84,98166,98167],{"class":477},"resize((",[84,98169,971],{"class":94},[84,98171,30824],{"class":477},[84,98173,98174],{"class":86,"line":120},[84,98175,93890],{"class":328},[84,98177,98178],{"class":86,"line":131},[84,98179,98052],{"class":328},[75,98181,98183],{"className":30705,"code":98182,"language":30707,"meta":66,"style":66},"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",[81,98184,98185,98198,98202,98206,98211,98216,98221,98226,98231,98236],{"__ignoreMap":66},[84,98186,98187,98190,98192,98194,98196],{"class":86,"line":87},[84,98188,98189],{"class":477},"a.resize((",[84,98191,817],{"class":94},[84,98193,851],{"class":477},[84,98195,553],{"class":94},[84,98197,30824],{"class":477},[84,98199,98200],{"class":86,"line":98},[84,98201,93890],{"class":328},[84,98203,98204],{"class":86,"line":70},[84,98205,94254],{"class":104},[84,98207,98208],{"class":86,"line":120},[84,98209,98210],{"class":104},"array([[ 1,  2],\n",[84,98212,98213],{"class":86,"line":131},[84,98214,98215],{"class":104},"       [ 3,  4],\n",[84,98217,98218],{"class":86,"line":145},[84,98219,98220],{"class":104},"       [ 5,  6],\n",[84,98222,98223],{"class":86,"line":156},[84,98224,98225],{"class":104},"       [ 7,  8],\n",[84,98227,98228],{"class":86,"line":164},[84,98229,98230],{"class":104},"       [ 9, 10],\n",[84,98232,98233],{"class":86,"line":175},[84,98234,98235],{"class":104},"       [11, 12]])\n",[84,98237,98238],{"class":86,"line":185},[84,98239,94254],{"class":104},[14,98241,98243],{"id":98242},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[35,98245,98246],{},"改变了原数组",[75,98248,98250],{"className":30705,"code":98249,"language":30707,"meta":66,"style":66},"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",[81,98251,98252,98268,98284,98288,98292,98296,98300],{"__ignoreMap":66},[84,98253,98254,98256,98258,98260,98262,98264,98266],{"class":86,"line":87},[84,98255,39],{"class":477},[84,98257,523],{"class":473},[84,98259,93328],{"class":477},[84,98261,692],{"class":94},[84,98263,851],{"class":477},[84,98265,996],{"class":94},[84,98267,484],{"class":477},[84,98269,98270,98272,98274,98276,98278,98280,98282],{"class":86,"line":98},[84,98271,98143],{"class":477},[84,98273,523],{"class":473},[84,98275,478],{"class":477},[84,98277,553],{"class":94},[84,98279,851],{"class":477},[84,98281,817],{"class":94},[84,98283,484],{"class":477},[84,98285,98286],{"class":86,"line":70},[84,98287,93890],{"class":328},[84,98289,98290],{"class":86,"line":120},[84,98291,94254],{"class":104},[84,98293,98294],{"class":86,"line":131},[84,98295,97514],{"class":104},[84,98297,98298],{"class":86,"line":145},[84,98299,97519],{"class":104},[84,98301,98302],{"class":86,"line":156},[84,98303,94254],{"class":104},[14,98305,98307],{"id":98306},"_56-重要比较","5.6 重要比较：",[35,98309,98310],{},[64,98311],{"alt":66,"src":98312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[35,98314,98315,98316,98318,98319,98321],{},"口诀：NumPy 函数要么用 ",[81,98317,96289],{},"，要么用 ",[81,98320,31823],{},"，创建结构用 shape，造数据用 size",[35,98323,98324],{},[64,98325],{"alt":66,"src":98326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[389,98328,98329],{},"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":66,"searchDepth":98,"depth":98,"links":98331},[98332,98333,98334,98335,98336,98337],{"id":97853,"depth":98,"text":97854},{"id":98005,"depth":98,"text":98006},{"id":98055,"depth":98,"text":98056},{"id":98101,"depth":98,"text":98102},{"id":98242,"depth":98,"text":98243},{"id":98306,"depth":98,"text":98307},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97845,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98344,"title":98345,"body":98346,"description":400,"extension":401,"meta":99418,"navigation":403,"path":99419,"seo":99420,"stem":99421,"__hash__":99422},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98347,"toc":99412},[98348,98351,98355,98358,98361,98364,98429,98432,98472,98475,98557,98560,98565,98587,98589,98594,98599,98602,98605,98760,98763,98965,98969,98972,98975,99043,99045,99050,99053,99056,99136,99140,99143,99145,99218,99220,99225,99227,99307,99311,99314,99317,99320,99323,99326,99329,99409],[10,98349,98345],{"id":98350},"_6数组的拼接",[14,98352,98354],{"id":98353},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[35,98356,98357],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[35,98359,98360],{},"函数内部传两个数列构成的数列或者元组",[35,98362,98363],{},"①一维数组的拼接",[75,98365,98367],{"className":30705,"code":98366,"language":30707,"meta":66,"style":66},"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",[81,98368,98369,98389,98409,98414,98419,98424],{"__ignoreMap":66},[84,98370,98371,98373,98375,98377,98379,98381,98383,98385,98387],{"class":86,"line":87},[84,98372,39],{"class":477},[84,98374,523],{"class":473},[84,98376,93350],{"class":477},[84,98378,692],{"class":94},[84,98380,851],{"class":477},[84,98382,553],{"class":94},[84,98384,851],{"class":477},[84,98386,547],{"class":94},[84,98388,4986],{"class":477},[84,98390,98391,98393,98395,98397,98399,98401,98403,98405,98407],{"class":86,"line":98},[84,98392,737],{"class":477},[84,98394,523],{"class":473},[84,98396,93350],{"class":477},[84,98398,140],{"class":94},[84,98400,851],{"class":477},[84,98402,792],{"class":94},[84,98404,851],{"class":477},[84,98406,817],{"class":94},[84,98408,4986],{"class":477},[84,98410,98411],{"class":86,"line":70},[84,98412,98413],{"class":328},"#调用concatenate进行数组拼接\n",[84,98415,98416],{"class":86,"line":120},[84,98417,98418],{"class":477},"np.concatenate((a,b))\n",[84,98420,98421],{"class":86,"line":131},[84,98422,98423],{"class":328},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[84,98425,98426],{"class":86,"line":145},[84,98427,98428],{"class":328},"#np.concatenate([a,b])\n",[35,98430,98431],{},"②一维多个数组拼接",[75,98433,98435],{"className":30705,"code":98434,"language":30707,"meta":66,"style":66},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[81,98436,98437,98442,98462,98467],{"__ignoreMap":66},[84,98438,98439],{"class":86,"line":87},[84,98440,98441],{"class":328},"#也可以多个数组进行拼接\n",[84,98443,98444,98446,98448,98450,98452,98454,98456,98458,98460],{"class":86,"line":98},[84,98445,762],{"class":477},[84,98447,523],{"class":473},[84,98449,93350],{"class":477},[84,98451,919],{"class":94},[84,98453,851],{"class":477},[84,98455,945],{"class":94},[84,98457,851],{"class":477},[84,98459,996],{"class":94},[84,98461,4986],{"class":477},[84,98463,98464],{"class":86,"line":70},[84,98465,98466],{"class":477},"c\n",[84,98468,98469],{"class":86,"line":120},[84,98470,98471],{"class":477},"np.concatenate((a,b,c))\n",[35,98473,98474],{},"③二维数组拼接",[75,98476,98478],{"className":30705,"code":98477,"language":30707,"meta":66,"style":66},"#二维数组使用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",[81,98479,98480,98485,98509,98534,98539,98544],{"__ignoreMap":66},[84,98481,98482],{"class":86,"line":87},[84,98483,98484],{"class":328},"#二维数组使用concatenate进行拼接\n",[84,98486,98487,98489,98491,98493,98495,98497,98499,98501,98503,98505,98507],{"class":86,"line":98},[84,98488,93632],{"class":477},[84,98490,523],{"class":473},[84,98492,93328],{"class":477},[84,98494,692],{"class":94},[84,98496,851],{"class":477},[84,98498,996],{"class":94},[84,98500,93333],{"class":477},[84,98502,547],{"class":94},[84,98504,851],{"class":477},[84,98506,140],{"class":94},[84,98508,484],{"class":477},[84,98510,98511,98514,98516,98518,98520,98522,98524,98526,98528,98530,98532],{"class":86,"line":70},[84,98512,98513],{"class":477},"bb",[84,98515,523],{"class":473},[84,98517,93328],{"class":477},[84,98519,810],{"class":94},[84,98521,851],{"class":477},[84,98523,1115],{"class":94},[84,98525,93333],{"class":477},[84,98527,547],{"class":94},[84,98529,851],{"class":477},[84,98531,140],{"class":94},[84,98533,484],{"class":477},[84,98535,98536],{"class":86,"line":120},[84,98537,98538],{"class":328},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[84,98540,98541],{"class":86,"line":131},[84,98542,98543],{"class":328},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[84,98545,98546,98549,98551,98553,98555],{"class":86,"line":145},[84,98547,98548],{"class":477},"np.concatenate((aa,bb),",[84,98550,47841],{"class":5545},[84,98552,523],{"class":473},[84,98554,666],{"class":94},[84,98556,484],{"class":477},[35,98558,98559],{},"结果：",[35,98561,98562],{},[64,98563],{"alt":66,"src":98564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[75,98566,98568],{"className":30705,"code":98567,"language":30707,"meta":66,"style":66},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[81,98569,98570,98575],{"__ignoreMap":66},[84,98571,98572],{"class":86,"line":87},[84,98573,98574],{"class":328},"#指定axis为1进行拼接\n",[84,98576,98577,98579,98581,98583,98585],{"class":86,"line":98},[84,98578,98548],{"class":477},[84,98580,47841],{"class":5545},[84,98582,523],{"class":473},[84,98584,692],{"class":94},[84,98586,484],{"class":477},[35,98588,98559],{},[35,98590,98591],{},[64,98592],{"alt":66,"src":98593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[35,98595,98596],{},[624,98597,98598],{},"二维数组总结：0竖着方向，1横着方向",[35,98600,98601],{},"④三维数组拼接",[35,98603,98604],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[75,98606,98608],{"className":30705,"code":98607,"language":30707,"meta":66,"style":66},"#两个三行六列\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",[81,98609,98610,98615,98643,98673,98678,98695,98700,98705,98710,98727,98732,98737,98742,98755],{"__ignoreMap":66},[84,98611,98612],{"class":86,"line":87},[84,98613,98614],{"class":328},"#两个三行六列\n",[84,98616,98617,98619,98621,98623,98625,98627,98629,98631,98633,98635,98637,98639,98641],{"class":86,"line":98},[84,98618,95847],{"class":477},[84,98620,523],{"class":473},[84,98622,93328],{"class":477},[84,98624,692],{"class":94},[84,98626,851],{"class":477},[84,98628,798],{"class":94},[84,98630,93333],{"class":477},[84,98632,553],{"class":94},[84,98634,851],{"class":477},[84,98636,547],{"class":94},[84,98638,851],{"class":477},[84,98640,817],{"class":94},[84,98642,484],{"class":477},[84,98644,98645,98648,98650,98652,98654,98656,98659,98661,98663,98665,98667,98669,98671],{"class":86,"line":70},[84,98646,98647],{"class":477},"bbb",[84,98649,523],{"class":473},[84,98651,93328],{"class":477},[84,98653,810],{"class":94},[84,98655,851],{"class":477},[84,98657,98658],{"class":94},"137",[84,98660,93333],{"class":477},[84,98662,553],{"class":94},[84,98664,851],{"class":477},[84,98666,547],{"class":94},[84,98668,851],{"class":477},[84,98670,817],{"class":94},[84,98672,484],{"class":477},[84,98674,98675],{"class":86,"line":120},[84,98676,98677],{"class":328},"#axis=0\n",[84,98679,98680,98682,98684,98687,98689,98691,98693],{"class":86,"line":131},[84,98681,1168],{"class":477},[84,98683,523],{"class":473},[84,98685,98686],{"class":477},"np.concatenate((aaa,bbb),",[84,98688,47841],{"class":5545},[84,98690,523],{"class":473},[84,98692,666],{"class":94},[84,98694,484],{"class":477},[84,98696,98697],{"class":86,"line":145},[84,98698,98699],{"class":477},"s.shape\n",[84,98701,98702],{"class":86,"line":156},[84,98703,98704],{"class":328},"#输出：(4,3,6)\n",[84,98706,98707],{"class":86,"line":164},[84,98708,98709],{"class":328},"#axis=1\n",[84,98711,98712,98715,98717,98719,98721,98723,98725],{"class":86,"line":175},[84,98713,98714],{"class":477},"ss",[84,98716,523],{"class":473},[84,98718,98686],{"class":477},[84,98720,47841],{"class":5545},[84,98722,523],{"class":473},[84,98724,692],{"class":94},[84,98726,484],{"class":477},[84,98728,98729],{"class":86,"line":185},[84,98730,98731],{"class":477},"ss.shape\n",[84,98733,98734],{"class":86,"line":195},[84,98735,98736],{"class":328},"#输出：(2,6,6)\n",[84,98738,98739],{"class":86,"line":206},[84,98740,98741],{"class":328},"#axis=2\n",[84,98743,98744,98746,98748,98750,98752],{"class":86,"line":217},[84,98745,98686],{"class":477},[84,98747,47841],{"class":5545},[84,98749,523],{"class":473},[84,98751,553],{"class":94},[84,98753,98754],{"class":477},").shape\n",[84,98756,98757],{"class":86,"line":227},[84,98758,98759],{"class":328},"#输出：（2，3，12）\n",[35,98761,98762],{},"⑤四维数组拼接",[75,98764,98766],{"className":30705,"code":98765,"language":30707,"meta":66,"style":66},"#两个三行六列\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",[81,98767,98768,98772,98800,98828,98853,98879,98883,98896,98901,98905,98917,98922,98926,98938,98943,98948,98960],{"__ignoreMap":66},[84,98769,98770],{"class":86,"line":87},[84,98771,98614],{"class":328},[84,98773,98774,98776,98778,98780,98782,98784,98786,98788,98790,98792,98794,98796,98798],{"class":86,"line":98},[84,98775,95847],{"class":477},[84,98777,523],{"class":473},[84,98779,93328],{"class":477},[84,98781,692],{"class":94},[84,98783,851],{"class":477},[84,98785,798],{"class":94},[84,98787,93333],{"class":477},[84,98789,553],{"class":94},[84,98791,851],{"class":477},[84,98793,547],{"class":94},[84,98795,851],{"class":477},[84,98797,817],{"class":94},[84,98799,484],{"class":477},[84,98801,98802,98804,98806,98808,98810,98812,98814,98816,98818,98820,98822,98824,98826],{"class":86,"line":70},[84,98803,98647],{"class":477},[84,98805,523],{"class":473},[84,98807,93328],{"class":477},[84,98809,810],{"class":94},[84,98811,851],{"class":477},[84,98813,98658],{"class":94},[84,98815,93333],{"class":477},[84,98817,553],{"class":94},[84,98819,851],{"class":477},[84,98821,547],{"class":94},[84,98823,851],{"class":477},[84,98825,817],{"class":94},[84,98827,484],{"class":477},[84,98829,98830,98833,98835,98837,98839,98841,98843,98845,98847,98849,98851],{"class":86,"line":120},[84,98831,98832],{"class":477},"aaaa",[84,98834,523],{"class":473},[84,98836,97996],{"class":477},[84,98838,553],{"class":94},[84,98840,851],{"class":477},[84,98842,547],{"class":94},[84,98844,851],{"class":477},[84,98846,547],{"class":94},[84,98848,851],{"class":477},[84,98850,553],{"class":94},[84,98852,484],{"class":477},[84,98854,98855,98858,98860,98863,98865,98867,98869,98871,98873,98875,98877],{"class":86,"line":131},[84,98856,98857],{"class":477},"bbbb",[84,98859,523],{"class":473},[84,98861,98862],{"class":477},"bbb.reshape(",[84,98864,553],{"class":94},[84,98866,851],{"class":477},[84,98868,547],{"class":94},[84,98870,851],{"class":477},[84,98872,547],{"class":94},[84,98874,851],{"class":477},[84,98876,553],{"class":94},[84,98878,484],{"class":477},[84,98880,98881],{"class":86,"line":145},[84,98882,98677],{"class":328},[84,98884,98885,98888,98890,98892,98894],{"class":86,"line":156},[84,98886,98887],{"class":477},"np.concatenate((aaaa,bbbb),",[84,98889,47841],{"class":5545},[84,98891,523],{"class":473},[84,98893,666],{"class":94},[84,98895,98754],{"class":477},[84,98897,98898],{"class":86,"line":164},[84,98899,98900],{"class":328},"#结果：（4，3，3，2）\n",[84,98902,98903],{"class":86,"line":175},[84,98904,98709],{"class":328},[84,98906,98907,98909,98911,98913,98915],{"class":86,"line":185},[84,98908,98887],{"class":477},[84,98910,47841],{"class":5545},[84,98912,523],{"class":473},[84,98914,692],{"class":94},[84,98916,98754],{"class":477},[84,98918,98919],{"class":86,"line":195},[84,98920,98921],{"class":328},"#结果：（2，6，3，2）\n",[84,98923,98924],{"class":86,"line":206},[84,98925,98741],{"class":328},[84,98927,98928,98930,98932,98934,98936],{"class":86,"line":217},[84,98929,98887],{"class":477},[84,98931,47841],{"class":5545},[84,98933,523],{"class":473},[84,98935,553],{"class":94},[84,98937,98754],{"class":477},[84,98939,98940],{"class":86,"line":227},[84,98941,98942],{"class":328},"#结果：（2，3，6，2）\n",[84,98944,98945],{"class":86,"line":238},[84,98946,98947],{"class":328},"#axis=3\n",[84,98949,98950,98952,98954,98956,98958],{"class":86,"line":249},[84,98951,98887],{"class":477},[84,98953,47841],{"class":5545},[84,98955,523],{"class":473},[84,98957,547],{"class":94},[84,98959,98754],{"class":477},[84,98961,98962],{"class":86,"line":262},[84,98963,98964],{"class":328},"#结果：（2，3，3，4）\n",[14,98966,98968],{"id":98967},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[35,98970,98971],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[35,98973,98974],{},"①二维数组",[75,98976,98978],{"className":30705,"code":98977,"language":30707,"meta":66,"style":66},"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",[81,98979,98980,99004,99028,99033,99038],{"__ignoreMap":66},[84,98981,98982,98984,98986,98988,98990,98992,98994,98996,98998,99000,99002],{"class":86,"line":87},[84,98983,93632],{"class":477},[84,98985,523],{"class":473},[84,98987,93328],{"class":477},[84,98989,692],{"class":94},[84,98991,851],{"class":477},[84,98993,996],{"class":94},[84,98995,93333],{"class":477},[84,98997,547],{"class":94},[84,98999,851],{"class":477},[84,99001,140],{"class":94},[84,99003,484],{"class":477},[84,99005,99006,99008,99010,99012,99014,99016,99018,99020,99022,99024,99026],{"class":86,"line":98},[84,99007,98513],{"class":477},[84,99009,523],{"class":473},[84,99011,93328],{"class":477},[84,99013,810],{"class":94},[84,99015,851],{"class":477},[84,99017,1115],{"class":94},[84,99019,93333],{"class":477},[84,99021,547],{"class":94},[84,99023,851],{"class":477},[84,99025,140],{"class":94},[84,99027,484],{"class":477},[84,99029,99030],{"class":86,"line":70},[84,99031,99032],{"class":477},"np.hstack((aa,bb))\n",[84,99034,99035],{"class":86,"line":120},[84,99036,99037],{"class":328},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[84,99039,99040],{"class":86,"line":131},[84,99041,99042],{"class":328},"#np.hstack([aa,bb])\n",[35,99044,98559],{},[35,99046,99047],{},[64,99048],{"alt":66,"src":99049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[35,99051,99052],{},"等效于concatenate()函数中axis=1时的情况",[35,99054,99055],{},"②三维数组",[75,99057,99059],{"className":30705,"code":99058,"language":30707,"meta":66,"style":66},"#两个三行六列\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",[81,99060,99061,99065,99093,99121,99126,99131],{"__ignoreMap":66},[84,99062,99063],{"class":86,"line":87},[84,99064,98614],{"class":328},[84,99066,99067,99069,99071,99073,99075,99077,99079,99081,99083,99085,99087,99089,99091],{"class":86,"line":98},[84,99068,95847],{"class":477},[84,99070,523],{"class":473},[84,99072,93328],{"class":477},[84,99074,692],{"class":94},[84,99076,851],{"class":477},[84,99078,798],{"class":94},[84,99080,93333],{"class":477},[84,99082,553],{"class":94},[84,99084,851],{"class":477},[84,99086,547],{"class":94},[84,99088,851],{"class":477},[84,99090,817],{"class":94},[84,99092,484],{"class":477},[84,99094,99095,99097,99099,99101,99103,99105,99107,99109,99111,99113,99115,99117,99119],{"class":86,"line":70},[84,99096,98647],{"class":477},[84,99098,523],{"class":473},[84,99100,93328],{"class":477},[84,99102,810],{"class":94},[84,99104,851],{"class":477},[84,99106,98658],{"class":94},[84,99108,93333],{"class":477},[84,99110,553],{"class":94},[84,99112,851],{"class":477},[84,99114,547],{"class":94},[84,99116,851],{"class":477},[84,99118,817],{"class":94},[84,99120,484],{"class":477},[84,99122,99123],{"class":86,"line":120},[84,99124,99125],{"class":328},"#使用hstack\n",[84,99127,99128],{"class":86,"line":131},[84,99129,99130],{"class":477},"np.hstack((aaa,bbb)).shape\n",[84,99132,99133],{"class":86,"line":145},[84,99134,99135],{"class":328},"#输出：（2，6，6）\n",[14,99137,99139],{"id":99138},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[35,99141,99142],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[35,99144,98974],{},[75,99146,99148],{"className":30705,"code":99147,"language":30707,"meta":66,"style":66},"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",[81,99149,99150,99174,99198,99203,99208,99213],{"__ignoreMap":66},[84,99151,99152,99154,99156,99158,99160,99162,99164,99166,99168,99170,99172],{"class":86,"line":87},[84,99153,93632],{"class":477},[84,99155,523],{"class":473},[84,99157,93328],{"class":477},[84,99159,692],{"class":94},[84,99161,851],{"class":477},[84,99163,996],{"class":94},[84,99165,93333],{"class":477},[84,99167,547],{"class":94},[84,99169,851],{"class":477},[84,99171,140],{"class":94},[84,99173,484],{"class":477},[84,99175,99176,99178,99180,99182,99184,99186,99188,99190,99192,99194,99196],{"class":86,"line":98},[84,99177,98513],{"class":477},[84,99179,523],{"class":473},[84,99181,93328],{"class":477},[84,99183,810],{"class":94},[84,99185,851],{"class":477},[84,99187,1115],{"class":94},[84,99189,93333],{"class":477},[84,99191,547],{"class":94},[84,99193,851],{"class":477},[84,99195,140],{"class":94},[84,99197,484],{"class":477},[84,99199,99200],{"class":86,"line":70},[84,99201,99202],{"class":328},"#vstack 垂直方向进行堆叠\n",[84,99204,99205],{"class":86,"line":120},[84,99206,99207],{"class":477},"np.vstack((aa,bb))\n",[84,99209,99210],{"class":86,"line":131},[84,99211,99212],{"class":328},"#与hstack传的参数类似，等价于：\n",[84,99214,99215],{"class":86,"line":145},[84,99216,99217],{"class":477},"np.vstack([aa,bb])\n",[35,99219,98559],{},[35,99221,99222],{},[64,99223],{"alt":66,"src":99224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[35,99226,99055],{},[75,99228,99230],{"className":30705,"code":99229,"language":30707,"meta":66,"style":66},"#两个三行六列\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",[81,99231,99232,99236,99264,99292,99297,99302],{"__ignoreMap":66},[84,99233,99234],{"class":86,"line":87},[84,99235,98614],{"class":328},[84,99237,99238,99240,99242,99244,99246,99248,99250,99252,99254,99256,99258,99260,99262],{"class":86,"line":98},[84,99239,95847],{"class":477},[84,99241,523],{"class":473},[84,99243,93328],{"class":477},[84,99245,692],{"class":94},[84,99247,851],{"class":477},[84,99249,798],{"class":94},[84,99251,93333],{"class":477},[84,99253,553],{"class":94},[84,99255,851],{"class":477},[84,99257,547],{"class":94},[84,99259,851],{"class":477},[84,99261,817],{"class":94},[84,99263,484],{"class":477},[84,99265,99266,99268,99270,99272,99274,99276,99278,99280,99282,99284,99286,99288,99290],{"class":86,"line":70},[84,99267,98647],{"class":477},[84,99269,523],{"class":473},[84,99271,93328],{"class":477},[84,99273,810],{"class":94},[84,99275,851],{"class":477},[84,99277,98658],{"class":94},[84,99279,93333],{"class":477},[84,99281,553],{"class":94},[84,99283,851],{"class":477},[84,99285,547],{"class":94},[84,99287,851],{"class":477},[84,99289,817],{"class":94},[84,99291,484],{"class":477},[84,99293,99294],{"class":86,"line":120},[84,99295,99296],{"class":328},"#使用vstack\n",[84,99298,99299],{"class":86,"line":131},[84,99300,99301],{"class":477},"np.vstack((aaa,bbb)).shape\n",[84,99303,99304],{"class":86,"line":145},[84,99305,99306],{"class":328},"#输出：（4，3，6）\n",[14,99308,99310],{"id":99309},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[35,99312,99313],{},"该方法是三维数组特有的方法",[35,99315,99316],{},"也就是说",[35,99318,99319],{},"一维数组拼接方法用：concatenate()",[35,99321,99322],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[35,99324,99325],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[35,99327,99328],{},"四维数组及多维数组只能用concatenate进行拼接",[75,99330,99332],{"className":30705,"code":99331,"language":30707,"meta":66,"style":66},"#两个三行六列\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",[81,99333,99334,99338,99366,99394,99399,99404],{"__ignoreMap":66},[84,99335,99336],{"class":86,"line":87},[84,99337,98614],{"class":328},[84,99339,99340,99342,99344,99346,99348,99350,99352,99354,99356,99358,99360,99362,99364],{"class":86,"line":98},[84,99341,95847],{"class":477},[84,99343,523],{"class":473},[84,99345,93328],{"class":477},[84,99347,692],{"class":94},[84,99349,851],{"class":477},[84,99351,798],{"class":94},[84,99353,93333],{"class":477},[84,99355,553],{"class":94},[84,99357,851],{"class":477},[84,99359,547],{"class":94},[84,99361,851],{"class":477},[84,99363,817],{"class":94},[84,99365,484],{"class":477},[84,99367,99368,99370,99372,99374,99376,99378,99380,99382,99384,99386,99388,99390,99392],{"class":86,"line":70},[84,99369,98647],{"class":477},[84,99371,523],{"class":473},[84,99373,93328],{"class":477},[84,99375,810],{"class":94},[84,99377,851],{"class":477},[84,99379,98658],{"class":94},[84,99381,93333],{"class":477},[84,99383,553],{"class":94},[84,99385,851],{"class":477},[84,99387,547],{"class":94},[84,99389,851],{"class":477},[84,99391,817],{"class":94},[84,99393,484],{"class":477},[84,99395,99396],{"class":86,"line":120},[84,99397,99398],{"class":328},"#使用dstack\n",[84,99400,99401],{"class":86,"line":131},[84,99402,99403],{"class":477},"np.dstack((aaa,bbb)).shape\n",[84,99405,99406],{"class":86,"line":145},[84,99407,99408],{"class":328},"#结果：（2，3，12）\n",[389,99410,99411],{},"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":66,"searchDepth":98,"depth":98,"links":99413},[99414,99415,99416,99417],{"id":98353,"depth":98,"text":98354},{"id":98967,"depth":98,"text":98968},{"id":99138,"depth":98,"text":99139},{"id":99309,"depth":98,"text":99310},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98345,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99424,"title":99425,"body":99426,"description":400,"extension":401,"meta":99701,"navigation":403,"path":99702,"seo":99703,"stem":99704,"__hash__":99705},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99427,"toc":99699},[99428,99431,99434,99528,99531,99534,99537,99540,99543,99546,99549,99552,99696],[10,99429,99425],{"id":99430},"_7数组转置",[35,99432,99433],{},"使用transpose()函数",[75,99435,99437],{"className":30705,"code":99436,"language":30707,"meta":66,"style":66},"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",[81,99438,99439,99449,99473,99478,99483,99488,99493,99501,99505,99509,99514,99519,99524],{"__ignoreMap":66},[84,99440,99441,99443,99445,99447],{"class":86,"line":87},[84,99442,30719],{"class":473},[84,99444,31707],{"class":477},[84,99446,31710],{"class":473},[84,99448,31713],{"class":477},[84,99450,99451,99453,99455,99457,99459,99461,99463,99465,99467,99469,99471],{"class":86,"line":98},[84,99452,39],{"class":477},[84,99454,523],{"class":473},[84,99456,32044],{"class":477},[84,99458,692],{"class":94},[84,99460,851],{"class":477},[84,99462,996],{"class":94},[84,99464,93333],{"class":477},[84,99466,140],{"class":94},[84,99468,851],{"class":477},[84,99470,547],{"class":94},[84,99472,484],{"class":477},[84,99474,99475],{"class":86,"line":70},[84,99476,99477],{"class":328},"#二维数组转置\n",[84,99479,99480],{"class":86,"line":120},[84,99481,99482],{"class":328},"#调用transpose()函数\n",[84,99484,99485],{"class":86,"line":131},[84,99486,99487],{"class":477},"a.transpose()\n",[84,99489,99490],{"class":86,"line":145},[84,99491,99492],{"class":328},"#对于二维数组也可以采用.T来实现\n",[84,99494,99495,99498],{"class":86,"line":156},[84,99496,99497],{"class":477},"a.T",[84,99499,99500],{"class":328},"#与上述代码一样\n",[84,99502,99503],{"class":86,"line":164},[84,99504,93890],{"class":328},[84,99506,99507],{"class":86,"line":175},[84,99508,94254],{"class":104},[84,99510,99511],{"class":86,"line":185},[84,99512,99513],{"class":104},"array([[ 1,  4,  7, 10],\n",[84,99515,99516],{"class":86,"line":195},[84,99517,99518],{"class":104},"       [ 2,  5,  8, 11],\n",[84,99520,99521],{"class":86,"line":206},[84,99522,99523],{"class":104},"       [ 3,  6,  9, 12]])\n",[84,99525,99526],{"class":86,"line":217},[84,99527,94254],{"class":104},[35,99529,99530],{},"也可以使用np.transpose()的形式",[35,99532,99533],{},"#多维数组进行转置 np.transpose()",[35,99535,99536],{},"#对二维数组也可以使用np.transpose()进行转置",[35,99538,99539],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[35,99541,99542],{},"第二个参数，维度可以理解为用axis中的数来理解",[35,99544,99545],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[35,99547,99548],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[35,99550,99551],{},"四维及以上的数组也是一样的道理",[75,99553,99555],{"className":30705,"code":99554,"language":30707,"meta":66,"style":66},"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",[81,99556,99557,99585,99590,99595,99600,99618,99623,99655,99660,99665,99670,99691],{"__ignoreMap":66},[84,99558,99559,99561,99563,99565,99567,99569,99571,99573,99575,99577,99579,99581,99583],{"class":86,"line":87},[84,99560,1293],{"class":477},[84,99562,523],{"class":473},[84,99564,93328],{"class":477},[84,99566,692],{"class":94},[84,99568,851],{"class":477},[84,99570,798],{"class":94},[84,99572,93333],{"class":477},[84,99574,547],{"class":94},[84,99576,851],{"class":477},[84,99578,817],{"class":94},[84,99580,851],{"class":477},[84,99582,553],{"class":94},[84,99584,484],{"class":477},[84,99586,99587],{"class":86,"line":98},[84,99588,99589],{"class":477},"x.shape\n",[84,99591,99592],{"class":86,"line":70},[84,99593,99594],{"class":328},"#结果：（3,6,2）\n",[84,99596,99597],{"class":86,"line":120},[84,99598,99599],{"class":328},"#使用np.transpose()进行转置 变为(2,6,3)\n",[84,99601,99602,99605,99607,99609,99611,99613,99615],{"class":86,"line":131},[84,99603,99604],{"class":477},"np.transpose(x,(",[84,99606,553],{"class":94},[84,99608,851],{"class":477},[84,99610,692],{"class":94},[84,99612,851],{"class":477},[84,99614,666],{"class":94},[84,99616,99617],{"class":477},")).shape\n",[84,99619,99620],{"class":86,"line":145},[84,99621,99622],{"class":328},"#结果：(2,6,3)\n",[84,99624,99625,99627,99629,99631,99633,99635,99637,99639,99641,99643,99645,99647,99649,99651,99653],{"class":86,"line":156},[84,99626,98832],{"class":477},[84,99628,523],{"class":473},[84,99630,93328],{"class":477},[84,99632,692],{"class":94},[84,99634,851],{"class":477},[84,99636,798],{"class":94},[84,99638,93333],{"class":477},[84,99640,547],{"class":94},[84,99642,851],{"class":477},[84,99644,553],{"class":94},[84,99646,851],{"class":477},[84,99648,692],{"class":94},[84,99650,851],{"class":477},[84,99652,817],{"class":94},[84,99654,484],{"class":477},[84,99656,99657],{"class":86,"line":164},[84,99658,99659],{"class":477},"aaaa.shape\n",[84,99661,99662],{"class":86,"line":175},[84,99663,99664],{"class":328},"#结果：（3，2，1，6）\n",[84,99666,99667],{"class":86,"line":185},[84,99668,99669],{"class":328},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[84,99671,99672,99675,99677,99679,99681,99683,99685,99687,99689],{"class":86,"line":195},[84,99673,99674],{"class":477},"np.transpose(aaaa,(",[84,99676,692],{"class":94},[84,99678,851],{"class":477},[84,99680,553],{"class":94},[84,99682,851],{"class":477},[84,99684,666],{"class":94},[84,99686,851],{"class":477},[84,99688,547],{"class":94},[84,99690,99617],{"class":477},[84,99692,99693],{"class":86,"line":206},[84,99694,99695],{"class":328},"#结果：(2,1,3,6)\n",[389,99697,99698],{},"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":66,"searchDepth":98,"depth":98,"links":99700},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99425,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99707,"title":99708,"body":99709,"description":400,"extension":401,"meta":100443,"navigation":403,"path":100444,"seo":100445,"stem":100446,"__hash__":100447},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99710,"toc":100441},[99711,99714,99717,99720,99723,99726,99729,99732,99735,99844,99847,99850,100438],[10,99712,99708],{"id":99713},"_8数组分割",[35,99715,99716],{},"split分割",[35,99718,99719],{},"numpy.split(ary,indics_or_sections,axis)",[35,99721,99722],{},"解释：",[35,99724,99725],{},"ary:被分割的数组",[35,99727,99728],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[35,99730,99731],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[35,99733,99734],{},"①一维数组的分割",[75,99736,99738],{"className":30705,"code":99737,"language":30707,"meta":66,"style":66},"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",[81,99739,99740,99756,99761,99770,99774,99779,99787,99791,99796,99801,99814,99818,99823,99835,99839],{"__ignoreMap":66},[84,99741,99742,99744,99746,99748,99750,99752,99754],{"class":86,"line":87},[84,99743,39],{"class":477},[84,99745,523],{"class":473},[84,99747,93328],{"class":477},[84,99749,692],{"class":94},[84,99751,851],{"class":477},[84,99753,893],{"class":94},[84,99755,484],{"class":477},[84,99757,99758],{"class":86,"line":98},[84,99759,99760],{"class":328},"#如果传入整数，必须能够平分，否则会报错\n",[84,99762,99763,99766,99768],{"class":86,"line":70},[84,99764,99765],{"class":477},"np.split(a,",[84,99767,553],{"class":94},[84,99769,484],{"class":477},[84,99771,99772],{"class":86,"line":120},[84,99773,93890],{"class":328},[84,99775,99776],{"class":86,"line":131},[84,99777,99778],{"class":328},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[84,99780,99781,99783,99785],{"class":86,"line":145},[84,99782,99765],{"class":477},[84,99784,140],{"class":94},[84,99786,484],{"class":477},[84,99788,99789],{"class":86,"line":156},[84,99790,93890],{"class":328},[84,99792,99793],{"class":86,"line":164},[84,99794,99795],{"class":328},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[84,99797,99798],{"class":86,"line":175},[84,99799,99800],{"class":328},"#传入数组\n",[84,99802,99803,99806,99808,99810,99812],{"class":86,"line":185},[84,99804,99805],{"class":477},"np.split(a,[",[84,99807,547],{"class":94},[84,99809,851],{"class":477},[84,99811,792],{"class":94},[84,99813,4986],{"class":477},[84,99815,99816],{"class":86,"line":195},[84,99817,93890],{"class":328},[84,99819,99820],{"class":86,"line":206},[84,99821,99822],{"class":328},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[84,99824,99825,99827,99829,99831,99833],{"class":86,"line":217},[84,99826,99805],{"class":477},[84,99828,792],{"class":94},[84,99830,851],{"class":477},[84,99832,842],{"class":94},[84,99834,4986],{"class":477},[84,99836,99837],{"class":86,"line":227},[84,99838,93890],{"class":328},[84,99840,99841],{"class":86,"line":238},[84,99842,99843],{"class":328},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[35,99845,99846],{},"②二维数组的分割",[35,99848,99849],{},"使用split()",[75,99851,99853],{"className":30705,"code":99852,"language":30707,"meta":66,"style":66},"#二维数组分割\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",[81,99854,99855,99860,99884,99889,99898,99902,99906,99911,99916,99921,99926,99931,99936,99941,99945,99958,99962,99966,99970,99974,99978,99983,99988,99993,99997,100002,100018,100022,100026,100031,100036,100041,100046,100051,100056,100061,100066,100071,100076,100081,100086,100091,100096,100101,100106,100111,100116,100120,100124,100144,100148,100152,100157,100162,100167,100172,100177,100182,100187,100192,100197,100202,100207,100212,100217,100222,100227,100232,100237,100242,100246,100251,100260,100264,100268,100272,100276,100280,100284,100288,100292,100296,100305,100309,100313,100317,100321,100325,100329,100333,100337,100341,100345,100349,100353,100357,100361,100365,100369,100373,100377,100381,100385,100389,100402,100406,100410,100414,100418,100422,100426,100430,100434],{"__ignoreMap":66},[84,99856,99857],{"class":86,"line":87},[84,99858,99859],{"class":328},"#二维数组分割\n",[84,99861,99862,99864,99866,99868,99870,99872,99874,99876,99878,99880,99882],{"class":86,"line":98},[84,99863,93632],{"class":477},[84,99865,523],{"class":473},[84,99867,93328],{"class":477},[84,99869,692],{"class":94},[84,99871,851],{"class":477},[84,99873,798],{"class":94},[84,99875,93333],{"class":477},[84,99877,817],{"class":94},[84,99879,851],{"class":477},[84,99881,817],{"class":94},[84,99883,484],{"class":477},[84,99885,99886],{"class":86,"line":70},[84,99887,99888],{"class":328},"#默认axis=0  传入整数平均分,按行来的\n",[84,99890,99891,99894,99896],{"class":86,"line":120},[84,99892,99893],{"class":477},"np.split(aa,",[84,99895,547],{"class":94},[84,99897,484],{"class":477},[84,99899,99900],{"class":86,"line":131},[84,99901,96090],{"class":328},[84,99903,99904],{"class":86,"line":145},[84,99905,94254],{"class":104},[84,99907,99908],{"class":86,"line":156},[84,99909,99910],{"class":104},"[array([[ 1,  2,  3,  4,  5,  6],\n",[84,99912,99913],{"class":86,"line":164},[84,99914,99915],{"class":104},"        [ 7,  8,  9, 10, 11, 12]]),\n",[84,99917,99918],{"class":86,"line":175},[84,99919,99920],{"class":104}," array([[13, 14, 15, 16, 17, 18],\n",[84,99922,99923],{"class":86,"line":185},[84,99924,99925],{"class":104},"        [19, 20, 21, 22, 23, 24]]),\n",[84,99927,99928],{"class":86,"line":195},[84,99929,99930],{"class":104}," array([[25, 26, 27, 28, 29, 30],\n",[84,99932,99933],{"class":86,"line":206},[84,99934,99935],{"class":104},"        [31, 32, 33, 34, 35, 36]])]\n",[84,99937,99938],{"class":86,"line":217},[84,99939,99940],{"class":104}," '''\n",[84,99942,99943],{"class":86,"line":227},[84,99944,99800],{"class":328},[84,99946,99947,99950,99952,99954,99956],{"class":86,"line":238},[84,99948,99949],{"class":477},"np.split(aa,[",[84,99951,553],{"class":94},[84,99953,851],{"class":477},[84,99955,792],{"class":94},[84,99957,4986],{"class":477},[84,99959,99960],{"class":86,"line":249},[84,99961,96090],{"class":328},[84,99963,99964],{"class":86,"line":262},[84,99965,94254],{"class":104},[84,99967,99968],{"class":86,"line":273},[84,99969,99910],{"class":104},[84,99971,99972],{"class":86,"line":283},[84,99973,99915],{"class":104},[84,99975,99976],{"class":86,"line":294},[84,99977,99920],{"class":104},[84,99979,99980],{"class":86,"line":2028},[84,99981,99982],{"class":104},"        [19, 20, 21, 22, 23, 24],\n",[84,99984,99985],{"class":86,"line":2057},[84,99986,99987],{"class":104},"        [25, 26, 27, 28, 29, 30]]),\n",[84,99989,99990],{"class":86,"line":2062},[84,99991,99992],{"class":104}," array([[31, 32, 33, 34, 35, 36]])]\n",[84,99994,99995],{"class":86,"line":2079},[84,99996,94254],{"class":104},[84,99998,99999],{"class":86,"line":2084},[84,100000,100001],{"class":328},"#axis=1 按照列来分\n",[84,100003,100004,100006,100008,100010,100012,100014,100016],{"class":86,"line":2089},[84,100005,99893],{"class":477},[84,100007,547],{"class":94},[84,100009,851],{"class":477},[84,100011,47841],{"class":5545},[84,100013,523],{"class":473},[84,100015,692],{"class":94},[84,100017,484],{"class":477},[84,100019,100020],{"class":86,"line":2094},[84,100021,96090],{"class":328},[84,100023,100024],{"class":86,"line":2108},[84,100025,94254],{"class":104},[84,100027,100028],{"class":86,"line":2113},[84,100029,100030],{"class":104},"[array([[ 1,  2],\n",[84,100032,100033],{"class":86,"line":2906},[84,100034,100035],{"class":104},"        [ 7,  8],\n",[84,100037,100038],{"class":86,"line":2920},[84,100039,100040],{"class":104},"        [13, 14],\n",[84,100042,100043],{"class":86,"line":2928},[84,100044,100045],{"class":104},"        [19, 20],\n",[84,100047,100048],{"class":86,"line":2933},[84,100049,100050],{"class":104},"        [25, 26],\n",[84,100052,100053],{"class":86,"line":2939},[84,100054,100055],{"class":104},"        [31, 32]]),\n",[84,100057,100058],{"class":86,"line":2945},[84,100059,100060],{"class":104}," array([[ 3,  4],\n",[84,100062,100063],{"class":86,"line":2950},[84,100064,100065],{"class":104},"        [ 9, 10],\n",[84,100067,100068],{"class":86,"line":8277},[84,100069,100070],{"class":104},"        [15, 16],\n",[84,100072,100073],{"class":86,"line":8301},[84,100074,100075],{"class":104},"        [21, 22],\n",[84,100077,100078],{"class":86,"line":8306},[84,100079,100080],{"class":104},"        [27, 28],\n",[84,100082,100083],{"class":86,"line":8312},[84,100084,100085],{"class":104},"        [33, 34]]),\n",[84,100087,100088],{"class":86,"line":8339},[84,100089,100090],{"class":104}," array([[ 5,  6],\n",[84,100092,100093],{"class":86,"line":8344},[84,100094,100095],{"class":104},"        [11, 12],\n",[84,100097,100098],{"class":86,"line":8350},[84,100099,100100],{"class":104},"        [17, 18],\n",[84,100102,100103],{"class":86,"line":8362},[84,100104,100105],{"class":104},"        [23, 24],\n",[84,100107,100108],{"class":86,"line":8374},[84,100109,100110],{"class":104},"        [29, 30],\n",[84,100112,100113],{"class":86,"line":8386},[84,100114,100115],{"class":104},"        [35, 36]])]\n",[84,100117,100118],{"class":86,"line":10045},[84,100119,99940],{"class":104},[84,100121,100122],{"class":86,"line":10070},[84,100123,99800],{"class":328},[84,100125,100126,100128,100130,100132,100134,100136,100138,100140,100142],{"class":86,"line":10093},[84,100127,99949],{"class":477},[84,100129,692],{"class":94},[84,100131,851],{"class":477},[84,100133,553],{"class":94},[84,100135,41936],{"class":477},[84,100137,47841],{"class":5545},[84,100139,523],{"class":473},[84,100141,692],{"class":94},[84,100143,484],{"class":477},[84,100145,100146],{"class":86,"line":10117},[84,100147,93890],{"class":328},[84,100149,100150],{"class":86,"line":10122},[84,100151,94254],{"class":104},[84,100153,100154],{"class":86,"line":10127},[84,100155,100156],{"class":104},"[array([[ 1],\n",[84,100158,100159],{"class":86,"line":10132},[84,100160,100161],{"class":104},"        [ 7],\n",[84,100163,100164],{"class":86,"line":10141},[84,100165,100166],{"class":104},"        [13],\n",[84,100168,100169],{"class":86,"line":10146},[84,100170,100171],{"class":104},"        [19],\n",[84,100173,100174],{"class":86,"line":10152},[84,100175,100176],{"class":104},"        [25],\n",[84,100178,100179],{"class":86,"line":10173},[84,100180,100181],{"class":104},"        [31]]),\n",[84,100183,100184],{"class":86,"line":10179},[84,100185,100186],{"class":104}," array([[ 2],\n",[84,100188,100189],{"class":86,"line":10193},[84,100190,100191],{"class":104},"        [ 8],\n",[84,100193,100194],{"class":86,"line":10199},[84,100195,100196],{"class":104},"        [14],\n",[84,100198,100199],{"class":86,"line":10226},[84,100200,100201],{"class":104},"        [20],\n",[84,100203,100204],{"class":86,"line":10235},[84,100205,100206],{"class":104},"        [26],\n",[84,100208,100209],{"class":86,"line":10241},[84,100210,100211],{"class":104},"        [32]]),\n",[84,100213,100214],{"class":86,"line":10249},[84,100215,100216],{"class":104}," array([[ 3,  4,  5,  6],\n",[84,100218,100219],{"class":86,"line":10254},[84,100220,100221],{"class":104},"        [ 9, 10, 11, 12],\n",[84,100223,100224],{"class":86,"line":16933},[84,100225,100226],{"class":104},"        [15, 16, 17, 18],\n",[84,100228,100229],{"class":86,"line":16939},[84,100230,100231],{"class":104},"        [21, 22, 23, 24],\n",[84,100233,100234],{"class":86,"line":16962},[84,100235,100236],{"class":104},"        [27, 28, 29, 30],\n",[84,100238,100239],{"class":86,"line":16968},[84,100240,100241],{"class":104},"        [33, 34, 35, 36]])]\n",[84,100243,100244],{"class":86,"line":16991},[84,100245,94254],{"class":104},[84,100247,100248],{"class":86,"line":17005},[84,100249,100250],{"class":328},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[84,100252,100253,100256,100258],{"class":86,"line":17025},[84,100254,100255],{"class":477},"np.vsplit(aa,",[84,100257,547],{"class":94},[84,100259,484],{"class":477},[84,100261,100262],{"class":86,"line":17031},[84,100263,93890],{"class":328},[84,100265,100266],{"class":86,"line":17042},[84,100267,94254],{"class":104},[84,100269,100270],{"class":86,"line":17065},[84,100271,99910],{"class":104},[84,100273,100274],{"class":86,"line":17087},[84,100275,99915],{"class":104},[84,100277,100278],{"class":86,"line":17092},[84,100279,99920],{"class":104},[84,100281,100282],{"class":86,"line":17098},[84,100283,99925],{"class":104},[84,100285,100286],{"class":86,"line":17112},[84,100287,99930],{"class":104},[84,100289,100290],{"class":86,"line":17125},[84,100291,99935],{"class":104},[84,100293,100294],{"class":86,"line":17130},[84,100295,94254],{"class":104},[84,100297,100298,100301,100303],{"class":86,"line":17144},[84,100299,100300],{"class":477},"np.hsplit(aa,",[84,100302,547],{"class":94},[84,100304,484],{"class":477},[84,100306,100307],{"class":86,"line":17149},[84,100308,93890],{"class":328},[84,100310,100311],{"class":86,"line":17155},[84,100312,94254],{"class":104},[84,100314,100315],{"class":86,"line":17160},[84,100316,100030],{"class":104},[84,100318,100319],{"class":86,"line":17174},[84,100320,100035],{"class":104},[84,100322,100323],{"class":86,"line":17179},[84,100324,100040],{"class":104},[84,100326,100327],{"class":86,"line":17184},[84,100328,100045],{"class":104},[84,100330,100331],{"class":86,"line":17198},[84,100332,100050],{"class":104},[84,100334,100335],{"class":86,"line":17210},[84,100336,100055],{"class":104},[84,100338,100339],{"class":86,"line":17215},[84,100340,100060],{"class":104},[84,100342,100343],{"class":86,"line":17228},[84,100344,100065],{"class":104},[84,100346,100347],{"class":86,"line":17233},[84,100348,100070],{"class":104},[84,100350,100351],{"class":86,"line":17238},[84,100352,100075],{"class":104},[84,100354,100355],{"class":86,"line":17243},[84,100356,100080],{"class":104},[84,100358,100359],{"class":86,"line":17256},[84,100360,100085],{"class":104},[84,100362,100363],{"class":86,"line":17261},[84,100364,100090],{"class":104},[84,100366,100367],{"class":86,"line":32960},[84,100368,100095],{"class":104},[84,100370,100371],{"class":86,"line":32966},[84,100372,100100],{"class":104},[84,100374,100375],{"class":86,"line":32972},[84,100376,100105],{"class":104},[84,100378,100379],{"class":86,"line":32978},[84,100380,100110],{"class":104},[84,100382,100383],{"class":86,"line":32984},[84,100384,100115],{"class":104},[84,100386,100387],{"class":86,"line":32995},[84,100388,94254],{"class":104},[84,100390,100391,100394,100396,100398,100400],{"class":86,"line":33001},[84,100392,100393],{"class":477},"np.vsplit(aa,[",[84,100395,553],{"class":94},[84,100397,851],{"class":477},[84,100399,792],{"class":94},[84,100401,4986],{"class":477},[84,100403,100404],{"class":86,"line":33021},[84,100405,93890],{"class":328},[84,100407,100408],{"class":86,"line":33027},[84,100409,94254],{"class":104},[84,100411,100412],{"class":86,"line":33038},[84,100413,99910],{"class":104},[84,100415,100416],{"class":86,"line":33044},[84,100417,99915],{"class":104},[84,100419,100420],{"class":86,"line":33050},[84,100421,99920],{"class":104},[84,100423,100424],{"class":86,"line":33056},[84,100425,99982],{"class":104},[84,100427,100428],{"class":86,"line":33062},[84,100429,99987],{"class":104},[84,100431,100432],{"class":86,"line":33068},[84,100433,99992],{"class":104},[84,100435,100436],{"class":86,"line":33074},[84,100437,99940],{"class":104},[389,100439,100440],{},"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":66,"searchDepth":98,"depth":98,"links":100442},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99708,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100449,"title":100450,"body":100451,"description":400,"extension":401,"meta":100945,"navigation":403,"path":100946,"seo":100947,"stem":100948,"__hash__":100949},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100452,"toc":100936},[100453,100456,100459,100484,100488,100547,100599,100603,100605,100641,100695,100697,100735,100806,100810,100815,100819,100822,100855,100858,100862,100865,100868,100871,100874,100879,100883,100886,100889,100892,100895,100900,100904,100909,100912,100933],[10,100454,100450],{"id":100455},"_9数学函数",[35,100457,100458],{},"补充回顾：python的列表推导式",[75,100460,100462],{"className":30705,"code":100461,"language":30707,"meta":66,"style":66},"[1\u002Fi for i in a]\n",[81,100463,100464],{"__ignoreMap":66},[84,100465,100466,100468,100470,100472,100475,100477,100479,100481],{"class":86,"line":87},[84,100467,1363],{"class":477},[84,100469,692],{"class":94},[84,100471,1057],{"class":473},[84,100473,100474],{"class":477},"i ",[84,100476,3354],{"class":473},[84,100478,9767],{"class":477},[84,100480,26371],{"class":473},[84,100482,100483],{"class":477}," a]\n",[14,100485,100487],{"id":100486},"_91-求倒数","9.1 求倒数",[75,100489,100491],{"className":30705,"code":100490,"language":30707,"meta":66,"style":66},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[81,100492,100493,100498,100526,100538],{"__ignoreMap":66},[84,100494,100495],{"class":86,"line":87},[84,100496,100497],{"class":328},"#数组求倒数\n",[84,100499,100500,100502,100504,100506,100508,100510,100512,100514,100516,100518,100520,100522,100524],{"class":86,"line":98},[84,100501,39],{"class":477},[84,100503,523],{"class":473},[84,100505,1363],{"class":477},[84,100507,692],{"class":94},[84,100509,851],{"class":477},[84,100511,553],{"class":94},[84,100513,851],{"class":477},[84,100515,547],{"class":94},[84,100517,851],{"class":477},[84,100519,140],{"class":94},[84,100521,851],{"class":477},[84,100523,792],{"class":94},[84,100525,33573],{"class":477},[84,100527,100528,100530,100532,100535],{"class":86,"line":70},[84,100529,737],{"class":477},[84,100531,523],{"class":473},[84,100533,100534],{"class":477},"np.array(a)",[84,100536,100537],{"class":328},"#将列表转换为数组\n",[84,100539,100540,100542,100544],{"class":86,"line":120},[84,100541,692],{"class":94},[84,100543,1057],{"class":473},[84,100545,100546],{"class":477},"b\n",[75,100548,100550],{"className":30705,"code":100549,"language":30707,"meta":66,"style":66},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[81,100551,100552,100580,100589,100594],{"__ignoreMap":66},[84,100553,100554,100556,100558,100560,100562,100564,100566,100568,100570,100572,100574,100576,100578],{"class":86,"line":87},[84,100555,39],{"class":477},[84,100557,523],{"class":473},[84,100559,1363],{"class":477},[84,100561,692],{"class":94},[84,100563,851],{"class":477},[84,100565,553],{"class":94},[84,100567,851],{"class":477},[84,100569,547],{"class":94},[84,100571,851],{"class":477},[84,100573,140],{"class":94},[84,100575,851],{"class":477},[84,100577,792],{"class":94},[84,100579,33573],{"class":477},[84,100581,100582,100584,100586],{"class":86,"line":98},[84,100583,737],{"class":477},[84,100585,523],{"class":473},[84,100587,100588],{"class":477},"np.array(a)\n",[84,100590,100591],{"class":86,"line":70},[84,100592,100593],{"class":328},"#调用numpy中的函数reciprocal()\n",[84,100595,100596],{"class":86,"line":120},[84,100597,100598],{"class":477},"np.reciprocal(b)\n",[14,100600,100602],{"id":100601},"_92-求平方","9.2 求平方",[35,100604,94856],{},[75,100606,100608],{"className":30705,"code":100607,"language":30707,"meta":66,"style":66},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[81,100609,100610,100615,100620,100636],{"__ignoreMap":66},[84,100611,100612],{"class":86,"line":87},[84,100613,100614],{"class":328},"#square()，求平方\n",[84,100616,100617],{"class":86,"line":98},[84,100618,100619],{"class":328},"#一维数组\n",[84,100621,100622,100624,100626,100628,100630,100632,100634],{"class":86,"line":70},[84,100623,39],{"class":477},[84,100625,523],{"class":473},[84,100627,93328],{"class":477},[84,100629,692],{"class":94},[84,100631,851],{"class":477},[84,100633,919],{"class":94},[84,100635,484],{"class":477},[84,100637,100638],{"class":86,"line":120},[84,100639,100640],{"class":477},"np.square(a)\n",[75,100642,100644],{"className":30705,"code":100643,"language":30707,"meta":66,"style":66},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[81,100645,100646,100651,100656,100677],{"__ignoreMap":66},[84,100647,100648],{"class":86,"line":87},[84,100649,100650],{"class":328},"#或者通过循环遍历的形式来计算\n",[84,100652,100653],{"class":86,"line":98},[84,100654,100655],{"class":328},"#这是一个列表\n",[84,100657,100658,100661,100663,100665,100667,100669,100671,100674],{"class":86,"line":70},[84,100659,100660],{"class":477},"[i",[84,100662,928],{"class":473},[84,100664,100474],{"class":477},[84,100666,3354],{"class":473},[84,100668,9767],{"class":477},[84,100670,26371],{"class":473},[84,100672,100673],{"class":477}," a]",[84,100675,100676],{"class":328},"#这个求完之后在数列当中\n",[84,100678,100679,100682,100684,100686,100688,100690,100692],{"class":86,"line":120},[84,100680,100681],{"class":477},"np.array([i",[84,100683,928],{"class":473},[84,100685,100474],{"class":477},[84,100687,3354],{"class":473},[84,100689,9767],{"class":477},[84,100691,26371],{"class":473},[84,100693,100694],{"class":477}," a])\n",[35,100696,93617],{},[75,100698,100700],{"className":30705,"code":100699,"language":30707,"meta":66,"style":66},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[81,100701,100702,100706,100730],{"__ignoreMap":66},[84,100703,100704],{"class":86,"line":87},[84,100705,93627],{"class":328},[84,100707,100708,100710,100712,100714,100716,100718,100720,100722,100724,100726,100728],{"class":86,"line":98},[84,100709,93632],{"class":477},[84,100711,523],{"class":473},[84,100713,93328],{"class":477},[84,100715,692],{"class":94},[84,100717,851],{"class":477},[84,100719,996],{"class":94},[84,100721,93333],{"class":477},[84,100723,140],{"class":94},[84,100725,851],{"class":477},[84,100727,547],{"class":94},[84,100729,484],{"class":477},[84,100731,100732],{"class":86,"line":70},[84,100733,100734],{"class":477},"np.square(aa)\n",[75,100736,100738],{"className":30705,"code":100737,"language":30707,"meta":66,"style":66},"#传统的方式\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",[81,100739,100740,100745,100754,100770,100786,100801],{"__ignoreMap":66},[84,100741,100742],{"class":86,"line":87},[84,100743,100744],{"class":328},"#传统的方式\n",[84,100746,100747,100749,100751],{"class":86,"line":98},[84,100748,98513],{"class":477},[84,100750,523],{"class":473},[84,100752,100753],{"class":477},"np.empty_like(aa)\n",[84,100755,100756,100758,100760,100762,100764,100766,100768],{"class":86,"line":70},[84,100757,3354],{"class":473},[84,100759,9767],{"class":477},[84,100761,26371],{"class":473},[84,100763,32770],{"class":94},[84,100765,478],{"class":477},[84,100767,140],{"class":94},[84,100769,31113],{"class":477},[84,100771,100772,100774,100776,100778,100780,100782,100784],{"class":86,"line":120},[84,100773,3530],{"class":473},[84,100775,9829],{"class":477},[84,100777,26371],{"class":473},[84,100779,32770],{"class":94},[84,100781,478],{"class":477},[84,100783,547],{"class":94},[84,100785,31113],{"class":477},[84,100787,100788,100791,100793,100796,100798],{"class":86,"line":131},[84,100789,100790],{"class":477},"        bb[i,j]",[84,100792,523],{"class":473},[84,100794,100795],{"class":477},"aa[i,j]",[84,100797,928],{"class":473},[84,100799,100800],{"class":477},"aa[i,j]\n",[84,100802,100803],{"class":86,"line":145},[84,100804,100805],{"class":477},"bb\n",[14,100807,100809],{"id":100808},"_93-求各元素的符号","9.3 求各元素的符号",[35,100811,100812],{},[64,100813],{"alt":66,"src":100814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100816,100818],{"id":100817},"_94-modf函数","9.4 modf函数",[35,100820,100821],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[75,100823,100825],{"className":30705,"code":100824,"language":30707,"meta":66,"style":66},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[81,100826,100827,100850],{"__ignoreMap":66},[84,100828,100829,100831,100833,100835,100837,100839,100841,100843,100845,100848],{"class":86,"line":87},[84,100830,39],{"class":477},[84,100832,523],{"class":473},[84,100834,93328],{"class":477},[84,100836,1005],{"class":473},[84,100838,919],{"class":94},[84,100840,851],{"class":477},[84,100842,919],{"class":94},[84,100844,851],{"class":477},[84,100846,100847],{"class":94},"0.3",[84,100849,484],{"class":477},[84,100851,100852],{"class":86,"line":98},[84,100853,100854],{"class":477},"np.modf(a)\n",[35,100856,100857],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100859,100861],{"id":100860},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[35,100863,100864],{},"np.cell()",[35,100866,100867],{},"np.floor()",[35,100869,100870],{},"np.rint()",[35,100872,100873],{},"对各元素分别向上取整、向下取整、四舍五入",[35,100875,100876],{},[64,100877],{"alt":66,"src":100878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100880,100882],{"id":100881},"_96-around函数","9.6 around()函数",[35,100884,100885],{},"around()函数也可以实现对数的小数位数进行操作",[35,100887,100888],{},"其中的参数：",[35,100890,100891],{},"1.要传的数组",[35,100893,100894],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[35,100896,100897],{},[64,100898],{"alt":66,"src":100899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100901,100903],{"id":100902},"_97-三角函数","9.7 三角函数",[35,100905,100906],{},[64,100907],{"alt":66,"src":100908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[35,100910,100911],{},"引入图像模块非常重要",[75,100913,100915],{"className":30705,"code":100914,"language":30707,"meta":66,"style":66},"from matplotlib import pyplot as plt\n",[81,100916,100917],{"__ignoreMap":66},[84,100918,100919,100921,100924,100926,100929,100931],{"class":86,"line":87},[84,100920,31064],{"class":473},[84,100922,100923],{"class":477}," matplotlib ",[84,100925,30719],{"class":473},[84,100927,100928],{"class":477}," pyplot ",[84,100930,31710],{"class":473},[84,100932,31764],{"class":477},[389,100934,100935],{},"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":66,"searchDepth":98,"depth":98,"links":100937},[100938,100939,100940,100941,100942,100943,100944],{"id":100486,"depth":98,"text":100487},{"id":100601,"depth":98,"text":100602},{"id":100808,"depth":98,"text":100809},{"id":100817,"depth":98,"text":100818},{"id":100860,"depth":98,"text":100861},{"id":100881,"depth":98,"text":100882},{"id":100902,"depth":98,"text":100903},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100450,"description":400},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100951,"title":100952,"body":100953,"description":400,"extension":401,"meta":100957,"navigation":403,"path":100958,"seo":100959,"stem":100960,"__hash__":100961},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100954,"toc":100955},[],{"title":66,"searchDepth":98,"depth":98,"links":100956},[],{"category":50747},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100952,"description":400},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100963,"title":100964,"body":100965,"description":66,"extension":401,"meta":102973,"navigation":403,"path":102974,"seo":102975,"stem":102976,"__hash__":102977},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100966,"toc":102949},[100967,100970,100974,100977,100980,100986,100989,101012,101015,101049,101052,101093,101097,101100,101193,101196,101240,101243,101260,101263,101277,101280,101283,101328,101331,101368,101372,101375,101381,101386,101406,101410,101413,101479,101482,101500,101504,101507,101536,101546,101552,101556,101559,101565,101576,101580,101583,101613,101616,101896,101899,101902,101913,101916,101919,101941,101948,101951,101969,101972,101975,101989,101997,102000,102026,102032,102035,102038,102048,102060,102080,102089,102109,102119,102143,102156,102170,102175,102216,102233,102258,102270,102290,102296,102341,102360,102377,102390,102406,102413,102425,102434,102469,102490,102515,102528,102552,102567,102592,102595,102616,102625,102628,102639,102643,102646,102652,102664,102671,102675,102678,102690,102693,102707,102710,102720,102730,102733,102773,102776,102780,102786,102789,102803,102807,102810,102843,102847,102850,102873,102881,102884,102890,102896,102899,102902,102930,102934,102937,102943,102946],[10,100968,100964],{"id":100969},"_1环境安装与第一个-mujoco-程序",[14,100971,100973],{"id":100972},"_1目标说明","1.目标说明",[35,100975,100976],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[35,100978,100979],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[75,100981,100984],{"className":100982,"code":100983,"language":5516,"meta":66},[5514],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[81,100985,100983],{"__ignoreMap":66},[35,100987,100988],{},"需要掌握:",[28,100990,100991,100994,100997,101002,101007],{},[31,100992,100993],{},"Fedora 44 下 MuJoCo 的系统依赖",[31,100995,100996],{},"Python 虚拟环境创建",[31,100998,100999],{},[81,101000,101001],{},"mujoco.MjModel",[31,101003,101004],{},[81,101005,101006],{},"mujoco.MjData",[31,101008,101009],{},[81,101010,101011],{},"mujoco.mj_step(model, data)",[35,101013,101014],{},"MuJoCo 中最重要的两个对象:",[612,101016,101017,101027],{},[615,101018,101019],{},[618,101020,101021,101024],{},[621,101022,101023],{"align":24065},"对象",[621,101025,101026],{"align":24065},"含义",[659,101028,101029,101039],{},[618,101030,101031,101036],{},[664,101032,101033],{"align":24065},[81,101034,101035],{},"MjModel",[664,101037,101038],{"align":24065},"模型结构，来自 XML，基本不随时间变化",[618,101040,101041,101046],{},[664,101042,101043],{"align":24065},[81,101044,101045],{},"MjData",[664,101047,101048],{"align":24065},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[35,101050,101051],{},"可以先用一个类比理解：",[612,101053,101054,101064],{},[615,101055,101056],{},[618,101057,101058,101061],{},[621,101059,101060],{"align":24065},"类比",[621,101062,101063],{"align":24065},"MuJoCo 对象",[659,101065,101066,101075,101084],{},[618,101067,101068,101071],{},[664,101069,101070],{"align":24065},"游戏地图和角色配置",[664,101072,101073],{"align":24065},[81,101074,101035],{},[618,101076,101077,101080],{},[664,101078,101079],{"align":24065},"游戏运行到当前帧的状态",[664,101081,101082],{"align":24065},[81,101083,101045],{},[618,101085,101086,101089],{},[664,101087,101088],{"align":24065},"前进一帧",[664,101090,101091],{"align":24065},[81,101092,101011],{},[14,101094,101096],{"id":101095},"_2环境与依赖安装","2.环境与依赖安装",[35,101098,101099],{},"Fedora 44 系统依赖:",[75,101101,101103],{"className":24151,"code":101102,"language":24153,"meta":66,"style":66},"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",[81,101104,101105,101117,101130,101143,101153,101163,101182],{"__ignoreMap":66},[84,101106,101107,101109,101111,101113,101115],{"class":86,"line":87},[84,101108,24905],{"class":90},[84,101110,26643],{"class":104},[84,101112,24163],{"class":104},[84,101114,26728],{"class":94},[84,101116,95],{"class":94},[84,101118,101119,101122,101125,101128],{"class":86,"line":98},[84,101120,101121],{"class":104},"  python3",[84,101123,101124],{"class":104}," python3-pip",[84,101126,101127],{"class":104}," python3-virtualenv",[84,101129,95],{"class":94},[84,101131,101132,101135,101138,101141],{"class":86,"line":70},[84,101133,101134],{"class":104},"  mesa-libGL",[84,101136,101137],{"class":104}," mesa-libGLU",[84,101139,101140],{"class":104}," mesa-dri-drivers",[84,101142,95],{"class":94},[84,101144,101145,101148,101151],{"class":86,"line":120},[84,101146,101147],{"class":104},"  libglvnd-glx",[84,101149,101150],{"class":104}," libglvnd-opengl",[84,101152,95],{"class":94},[84,101154,101155,101158,101161],{"class":86,"line":131},[84,101156,101157],{"class":104},"  glfw",[84,101159,101160],{"class":104}," glfw-devel",[84,101162,95],{"class":94},[84,101164,101165,101168,101171,101174,101177,101180],{"class":86,"line":145},[84,101166,101167],{"class":104},"  libX11",[84,101169,101170],{"class":104}," libXcursor",[84,101172,101173],{"class":104}," libXi",[84,101175,101176],{"class":104}," libXinerama",[84,101178,101179],{"class":104}," libXrandr",[84,101181,95],{"class":94},[84,101183,101184,101187,101190],{"class":86,"line":156},[84,101185,101186],{"class":104},"  gcc",[84,101188,101189],{"class":104}," gcc-c++",[84,101191,101192],{"class":104}," make\n",[35,101194,101195],{},"创建 Python 环境:",[75,101197,101199],{"className":24151,"code":101198,"language":24153,"meta":66,"style":66},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[81,101200,101201,101215,101223],{"__ignoreMap":66},[84,101202,101203,101206,101209,101212],{"class":86,"line":87},[84,101204,101205],{"class":90},"python3",[84,101207,101208],{"class":94}," -m",[84,101210,101211],{"class":104}," venv",[84,101213,101214],{"class":104}," .venv\n",[84,101216,101217,101220],{"class":86,"line":98},[84,101218,101219],{"class":94},"source",[84,101221,101222],{"class":104}," .venv\u002Fbin\u002Factivate\n",[84,101224,101225,101227,101229,101232,101234,101237],{"class":86,"line":70},[84,101226,30707],{"class":90},[84,101228,101208],{"class":94},[84,101230,101231],{"class":104}," pip",[84,101233,24163],{"class":104},[84,101235,101236],{"class":94}," --upgrade",[84,101238,101239],{"class":104}," pip\n",[35,101241,101242],{},"pip 安装:",[75,101244,101246],{"className":24151,"code":101245,"language":24153,"meta":66,"style":66},"pip install \"mujoco>=2.3\" numpy\n",[81,101247,101248],{"__ignoreMap":66},[84,101249,101250,101252,101254,101257],{"class":86,"line":87},[84,101251,24160],{"class":90},[84,101253,24163],{"class":104},[84,101255,101256],{"class":104}," \"mujoco>=2.3\"",[84,101258,101259],{"class":104}," numpy\n",[35,101261,101262],{},"安装完成后，先做最小检查：",[75,101264,101266],{"className":24151,"code":101265,"language":24153,"meta":66,"style":66},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[81,101267,101268],{"__ignoreMap":66},[84,101269,101270,101272,101274],{"class":86,"line":87},[84,101271,30707],{"class":90},[84,101273,30685],{"class":94},[84,101275,101276],{"class":104}," \"import mujoco; print(mujoco.__version__)\"\n",[35,101278,101279],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[35,101281,101282],{},"conda 安装:",[75,101284,101286],{"className":24151,"code":101285,"language":24153,"meta":66,"style":66},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[81,101287,101288,101308,101318],{"__ignoreMap":66},[84,101289,101290,101292,101294,101296,101299,101302,101305],{"class":86,"line":87},[84,101291,30657],{"class":90},[84,101293,29503],{"class":104},[84,101295,25443],{"class":94},[84,101297,101298],{"class":104}," mujoco-study",[84,101300,101301],{"class":104}," python=",[84,101303,101304],{"class":94},"3.10",[84,101306,101307],{"class":94}," -y\n",[84,101309,101310,101312,101315],{"class":86,"line":98},[84,101311,30657],{"class":90},[84,101313,101314],{"class":104}," activate",[84,101316,101317],{"class":104}," mujoco-study\n",[84,101319,101320,101322,101324,101326],{"class":86,"line":70},[84,101321,24160],{"class":90},[84,101323,24163],{"class":104},[84,101325,101256],{"class":104},[84,101327,101259],{"class":104},[35,101329,101330],{},"版本冲突说明:",[28,101332,101333,101339,101349,101358],{},[31,101334,101335,101336,28712],{},"不要安装 ",[81,101337,101338],{},"mujoco-py",[31,101340,101341,101342,101344,101345,101348],{},"如果旧项目里同时安装了 ",[81,101343,101338],{}," 和 ",[81,101346,101347],{},"mujoco","，建议新建干净虚拟环境。",[31,101350,101351,101354,101355,28712],{},[81,101352,101353],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[81,101356,101357],{},"~\u002F.mujoco\u002Fmujoco210",[31,101359,101360,101361,82865,101364,101367],{},"离屏渲染可能涉及 OpenGL 后端，",[81,101362,101363],{},"MUJOCO_GL=egl",[81,101365,101366],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101369,101371],{"id":101370},"_3核心概念解释","3.核心概念解释",[35,101373,101374],{},"MuJoCo 的基本执行流程:",[75,101376,101379],{"className":101377,"code":101378,"language":5516,"meta":66},[5514],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[81,101380,101378],{"__ignoreMap":66},[35,101382,101383,101385],{},[81,101384,101035],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[35,101387,101388,101390,101391,687,101394,687,101397,687,101400,687,101403,28712],{},[81,101389,101045],{}," 存放仿真运行时状态，例如 ",[81,101392,101393],{},"data.time",[81,101395,101396],{},"data.qpos",[81,101398,101399],{},"data.qvel",[81,101401,101402],{},"data.ctrl",[81,101404,101405],{},"data.xpos",[23,101407,101409],{"id":101408},"xml-是什么","XML 是什么",[35,101411,101412],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[75,101414,101416],{"className":53394,"code":101415,"language":53396,"meta":66,"style":66},"\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",[81,101417,101418,101440,101471],{"__ignoreMap":66},[84,101419,101420,101422,101424,101426,101428,101430,101433,101435,101438],{"class":86,"line":87},[84,101421,1383],{"class":477},[84,101423,52127],{"class":51627},[84,101425,15249],{"class":90},[84,101427,523],{"class":477},[84,101429,53818],{"class":104},[84,101431,101432],{"class":90}," pos",[84,101434,523],{"class":477},[84,101436,101437],{"class":104},"\"0 0 1\"",[84,101439,51634],{"class":477},[84,101441,101442,101444,101447,101449,101451,101454,101456,101458,101460,101463,101465,101468],{"class":86,"line":98},[84,101443,52471],{"class":477},[84,101445,101446],{"class":51627},"geom",[84,101448,15249],{"class":90},[84,101450,523],{"class":477},[84,101452,101453],{"class":104},"\"box_geom\"",[84,101455,54150],{"class":90},[84,101457,523],{"class":477},[84,101459,53818],{"class":104},[84,101461,101462],{"class":90}," size",[84,101464,523],{"class":477},[84,101466,101467],{"class":104},"\"0.1 0.1 0.1\"",[84,101469,101470],{"class":477},"\u002F>\n",[84,101472,101473,101475,101477],{"class":86,"line":70},[84,101474,52112],{"class":477},[84,101476,52127],{"class":51627},[84,101478,51634],{"class":477},[35,101480,101481],{},"这段意思是：",[28,101483,101484,101490,101497],{},[31,101485,101486,101487,101489],{},"创建一个叫 ",[81,101488,54041],{}," 的刚体。",[31,101491,101492,101493,101496],{},"它初始放在 ",[81,101494,101495],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[31,101498,101499],{},"它里面有一个盒子形状的几何体。",[23,101501,101503],{"id":101502},"timestep-是什么","timestep 是什么",[35,101505,101506],{},"XML 里的：",[75,101508,101510],{"className":53394,"code":101509,"language":53396,"meta":66,"style":66},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[81,101511,101512],{"__ignoreMap":66},[84,101513,101514,101516,101518,101521,101523,101526,101529,101531,101534],{"class":86,"line":87},[84,101515,1383],{"class":477},[84,101517,69492],{"class":51627},[84,101519,101520],{"class":90}," timestep",[84,101522,523],{"class":477},[84,101524,101525],{"class":104},"\"0.01\"",[84,101527,101528],{"class":90}," gravity",[84,101530,523],{"class":477},[84,101532,101533],{"class":104},"\"0 0 -9.81\"",[84,101535,101470],{"class":477},[35,101537,101538,101539,101542,101543,101545],{},"表示每调用一次 ",[81,101540,101541],{},"mj_step","，仿真时间前进 ",[81,101544,39313],{}," 秒。循环 100 次，大约就是 1 秒：",[75,101547,101550],{"className":101548,"code":101549,"language":5516,"meta":66},[5514],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[81,101551,101549],{"__ignoreMap":66},[23,101553,101555],{"id":101554},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[35,101557,101558],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[75,101560,101563],{"className":101561,"code":101562,"language":5516,"meta":66},[5514],"x y z qw qx qy qz\n",[81,101564,101562],{"__ignoreMap":66},[35,101566,101567,101568,101571,101572,101575],{},"表示一个自由刚体的位置和姿态。其中 ",[81,101569,101570],{},"x y z"," 是位置，",[81,101573,101574],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101577,101579],{"id":101578},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[35,101581,101582],{},"新建文件:",[75,101584,101586],{"className":24151,"code":101585,"language":24153,"meta":66,"style":66},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[81,101587,101588,101598,101605],{"__ignoreMap":66},[84,101589,101590,101593,101595],{"class":86,"line":87},[84,101591,101592],{"class":90},"mkdir",[84,101594,29543],{"class":94},[84,101596,101597],{"class":104}," mujoco_tutorial\n",[84,101599,101600,101603],{"class":86,"line":98},[84,101601,101602],{"class":94},"cd",[84,101604,101597],{"class":104},[84,101606,101607,101610],{"class":86,"line":70},[84,101608,101609],{"class":90},"touch",[84,101611,101612],{"class":104}," ch1_first_sim.py\n",[35,101614,101615],{},"写入:",[75,101617,101619],{"className":30705,"code":101618,"language":30707,"meta":66,"style":66},"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",[81,101620,101621,101628,101632,101636,101646,101651,101656,101660,101665,101670,101674,101679,101684,101689,101694,101699,101704,101708,101712,101716,101729,101743,101753,101757,101769,101781,101793,101805,101817,101821,101838,101843,101847,101858,101869,101873,101877,101891],{"__ignoreMap":66},[84,101622,101623,101625],{"class":86,"line":87},[84,101624,30719],{"class":473},[84,101626,101627],{"class":477}," mujoco\n",[84,101629,101630],{"class":86,"line":98},[84,101631,2729],{"emptyLinePlaceholder":403},[84,101633,101634],{"class":86,"line":70},[84,101635,2729],{"emptyLinePlaceholder":403},[84,101637,101638,101641,101643],{"class":86,"line":120},[84,101639,101640],{"class":94},"XML",[84,101642,13893],{"class":473},[84,101644,101645],{"class":104}," \"\"\"\n",[84,101647,101648],{"class":86,"line":131},[84,101649,101650],{"class":104},"\u003Cmujoco model=\"first_sim\">\n",[84,101652,101653],{"class":86,"line":145},[84,101654,101655],{"class":104},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[84,101657,101658],{"class":86,"line":156},[84,101659,2729],{"emptyLinePlaceholder":403},[84,101661,101662],{"class":86,"line":164},[84,101663,101664],{"class":104},"  \u003Cworldbody>\n",[84,101666,101667],{"class":86,"line":175},[84,101668,101669],{"class":104},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[84,101671,101672],{"class":86,"line":185},[84,101673,2729],{"emptyLinePlaceholder":403},[84,101675,101676],{"class":86,"line":195},[84,101677,101678],{"class":104},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[84,101680,101681],{"class":86,"line":206},[84,101682,101683],{"class":104},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[84,101685,101686],{"class":86,"line":217},[84,101687,101688],{"class":104},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[84,101690,101691],{"class":86,"line":227},[84,101692,101693],{"class":104},"    \u003C\u002Fbody>\n",[84,101695,101696],{"class":86,"line":238},[84,101697,101698],{"class":104},"  \u003C\u002Fworldbody>\n",[84,101700,101701],{"class":86,"line":249},[84,101702,101703],{"class":104},"\u003C\u002Fmujoco>\n",[84,101705,101706],{"class":86,"line":262},[84,101707,96024],{"class":104},[84,101709,101710],{"class":86,"line":273},[84,101711,2729],{"emptyLinePlaceholder":403},[84,101713,101714],{"class":86,"line":283},[84,101715,2729],{"emptyLinePlaceholder":403},[84,101717,101718,101720,101722,101725,101727],{"class":86,"line":294},[84,101719,32274],{"class":473},[84,101721,2302],{"class":90},[84,101723,101724],{"class":477},"() -> ",[84,101726,96012],{"class":94},[84,101728,4068],{"class":477},[84,101730,101731,101734,101736,101739,101741],{"class":86,"line":2028},[84,101732,101733],{"class":477},"    model ",[84,101735,523],{"class":473},[84,101737,101738],{"class":477}," mujoco.MjModel.from_xml_string(",[84,101740,101640],{"class":94},[84,101742,484],{"class":477},[84,101744,101745,101748,101750],{"class":86,"line":2057},[84,101746,101747],{"class":477},"    data ",[84,101749,523],{"class":473},[84,101751,101752],{"class":477}," mujoco.MjData(model)\n",[84,101754,101755],{"class":86,"line":2062},[84,101756,2729],{"emptyLinePlaceholder":403},[84,101758,101759,101761,101763,101766],{"class":86,"line":2079},[84,101760,31626],{"class":94},[84,101762,478],{"class":477},[84,101764,101765],{"class":104},"\"nq:\"",[84,101767,101768],{"class":477},", model.nq)\n",[84,101770,101771,101773,101775,101778],{"class":86,"line":2084},[84,101772,31626],{"class":94},[84,101774,478],{"class":477},[84,101776,101777],{"class":104},"\"nv:\"",[84,101779,101780],{"class":477},", model.nv)\n",[84,101782,101783,101785,101787,101790],{"class":86,"line":2089},[84,101784,31626],{"class":94},[84,101786,478],{"class":477},[84,101788,101789],{"class":104},"\"nu:\"",[84,101791,101792],{"class":477},", model.nu)\n",[84,101794,101795,101797,101799,101802],{"class":86,"line":2094},[84,101796,31626],{"class":94},[84,101798,478],{"class":477},[84,101800,101801],{"class":104},"\"initial time:\"",[84,101803,101804],{"class":477},", data.time)\n",[84,101806,101807,101809,101811,101814],{"class":86,"line":2108},[84,101808,31626],{"class":94},[84,101810,478],{"class":477},[84,101812,101813],{"class":104},"\"initial qpos:\"",[84,101815,101816],{"class":477},", data.qpos.copy())\n",[84,101818,101819],{"class":86,"line":2113},[84,101820,2729],{"emptyLinePlaceholder":403},[84,101822,101823,101825,101828,101830,101832,101834,101836],{"class":86,"line":2906},[84,101824,3530],{"class":473},[84,101826,101827],{"class":477}," _ ",[84,101829,26371],{"class":473},[84,101831,32770],{"class":94},[84,101833,478],{"class":477},[84,101835,784],{"class":94},[84,101837,31113],{"class":477},[84,101839,101840],{"class":86,"line":2920},[84,101841,101842],{"class":477},"        mujoco.mj_step(model, data)\n",[84,101844,101845],{"class":86,"line":2928},[84,101846,2729],{"emptyLinePlaceholder":403},[84,101848,101849,101851,101853,101856],{"class":86,"line":2933},[84,101850,31626],{"class":94},[84,101852,478],{"class":477},[84,101854,101855],{"class":104},"\"final time:\"",[84,101857,101804],{"class":477},[84,101859,101860,101862,101864,101867],{"class":86,"line":2939},[84,101861,31626],{"class":94},[84,101863,478],{"class":477},[84,101865,101866],{"class":104},"\"final qpos:\"",[84,101868,101816],{"class":477},[84,101870,101871],{"class":86,"line":2945},[84,101872,2729],{"emptyLinePlaceholder":403},[84,101874,101875],{"class":86,"line":2950},[84,101876,2729],{"emptyLinePlaceholder":403},[84,101878,101879,101881,101883,101886,101889],{"class":86,"line":8277},[84,101880,1871],{"class":473},[84,101882,31547],{"class":94},[84,101884,101885],{"class":473}," ==",[84,101887,101888],{"class":104}," \"__main__\"",[84,101890,4068],{"class":477},[84,101892,101893],{"class":86,"line":8301},[84,101894,101895],{"class":477},"    main()\n",[23,101897,101898],{"id":101898},"代码逐段解释",[35,101900,101901],{},"导入库：",[75,101903,101905],{"className":30705,"code":101904,"language":30707,"meta":66,"style":66},"import mujoco\n",[81,101906,101907],{"__ignoreMap":66},[84,101908,101909,101911],{"class":86,"line":87},[84,101910,30719],{"class":473},[84,101912,101627],{"class":477},[35,101914,101915],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[35,101917,101918],{},"定义 XML：",[75,101920,101922],{"className":30705,"code":101921,"language":30707,"meta":66,"style":66},"XML = \"\"\"\n...\n\"\"\"\n",[81,101923,101924,101932,101937],{"__ignoreMap":66},[84,101925,101926,101928,101930],{"class":86,"line":87},[84,101927,101640],{"class":94},[84,101929,13893],{"class":473},[84,101931,101645],{"class":104},[84,101933,101934],{"class":86,"line":98},[84,101935,101936],{"class":104},"...\n",[84,101938,101939],{"class":86,"line":70},[84,101940,96024],{"class":104},[35,101942,101943,101944,101947],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[81,101945,101946],{},"freejoint"," 的方块。",[35,101949,101950],{},"编译模型：",[75,101952,101954],{"className":30705,"code":101953,"language":30707,"meta":66,"style":66},"model = mujoco.MjModel.from_xml_string(XML)\n",[81,101955,101956],{"__ignoreMap":66},[84,101957,101958,101961,101963,101965,101967],{"class":86,"line":87},[84,101959,101960],{"class":477},"model ",[84,101962,523],{"class":473},[84,101964,101738],{"class":477},[84,101966,101640],{"class":94},[84,101968,484],{"class":477},[35,101970,101971],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[35,101973,101974],{},"创建数据：",[75,101976,101978],{"className":30705,"code":101977,"language":30707,"meta":66,"style":66},"data = mujoco.MjData(model)\n",[81,101979,101980],{"__ignoreMap":66},[84,101981,101982,101985,101987],{"class":86,"line":87},[84,101983,101984],{"class":477},"data ",[84,101986,523],{"class":473},[84,101988,101752],{"class":477},[35,101990,101991,101993,101994,101996],{},[81,101992,33728],{}," 会保存仿真当前状态。刚创建时，时间是 ",[81,101995,666],{},"，方块还在初始位置。",[35,101998,101999],{},"推进仿真：",[75,102001,102003],{"className":30705,"code":102002,"language":30707,"meta":66,"style":66},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[81,102004,102005,102021],{"__ignoreMap":66},[84,102006,102007,102009,102011,102013,102015,102017,102019],{"class":86,"line":87},[84,102008,3354],{"class":473},[84,102010,101827],{"class":477},[84,102012,26371],{"class":473},[84,102014,32770],{"class":94},[84,102016,478],{"class":477},[84,102018,784],{"class":94},[84,102020,31113],{"class":477},[84,102022,102023],{"class":86,"line":98},[84,102024,102025],{"class":477},"    mujoco.mj_step(model, data)\n",[35,102027,102028,102029,102031],{},"每次 ",[81,102030,101541],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[23,102033,102034],{"id":102034},"代码逐行细讲",[35,102036,102037],{},"下面把完整代码按新手视角拆开讲。",[75,102039,102040],{"className":30705,"code":101904,"language":30707,"meta":66,"style":66},[81,102041,102042],{"__ignoreMap":66},[84,102043,102044,102046],{"class":86,"line":87},[84,102045,30719],{"class":473},[84,102047,101627],{"class":477},[35,102049,102050,102052,102053,687,102055,687,102057,28712],{},[81,102051,30719],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[81,102054,101001],{},[81,102056,101006],{},[81,102058,102059],{},"mujoco.mj_step",[75,102061,102062],{"className":30705,"code":101921,"language":30707,"meta":66,"style":66},[81,102063,102064,102072,102076],{"__ignoreMap":66},[84,102065,102066,102068,102070],{"class":86,"line":87},[84,102067,101640],{"class":94},[84,102069,13893],{"class":473},[84,102071,101645],{"class":104},[84,102073,102074],{"class":86,"line":98},[84,102075,101936],{"class":104},[84,102077,102078],{"class":86,"line":70},[84,102079,96024],{"class":104},[35,102081,102082,102084,102085,102088],{},[81,102083,101640],{}," 是一个变量名。右边的三引号 ",[81,102086,102087],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[75,102090,102091],{"className":53394,"code":101650,"language":53396,"meta":66,"style":66},[81,102092,102093],{"__ignoreMap":66},[84,102094,102095,102097,102099,102102,102104,102107],{"class":86,"line":87},[84,102096,1383],{"class":477},[84,102098,101347],{"class":51627},[84,102100,102101],{"class":90}," model",[84,102103,523],{"class":477},[84,102105,102106],{"class":104},"\"first_sim\"",[84,102108,51634],{"class":477},[35,102110,102111,102112,102115,102116,28712],{},"这是 XML 的根标签。",[81,102113,102114],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[81,102117,102118],{},"first_sim",[75,102120,102121],{"className":53394,"code":101509,"language":53396,"meta":66,"style":66},[81,102122,102123],{"__ignoreMap":66},[84,102124,102125,102127,102129,102131,102133,102135,102137,102139,102141],{"class":86,"line":87},[84,102126,1383],{"class":477},[84,102128,69492],{"class":51627},[84,102130,101520],{"class":90},[84,102132,523],{"class":477},[84,102134,101525],{"class":104},[84,102136,101528],{"class":90},[84,102138,523],{"class":477},[84,102140,101533],{"class":104},[84,102142,101470],{"class":477},[35,102144,102145,102147,102148,102151,102152,102155],{},[81,102146,69492],{}," 用来设置仿真参数。",[81,102149,102150],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[81,102153,102154],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[75,102157,102159],{"className":53394,"code":102158,"language":53396,"meta":66,"style":66},"\u003Cworldbody>\n",[81,102160,102161],{"__ignoreMap":66},[84,102162,102163,102165,102168],{"class":86,"line":87},[84,102164,1383],{"class":477},[84,102166,102167],{"class":51627},"worldbody",[84,102169,51634],{"class":477},[35,102171,102172,102174],{},[81,102173,102167],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[75,102176,102178],{"className":53394,"code":102177,"language":53396,"meta":66,"style":66},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[81,102179,102180],{"__ignoreMap":66},[84,102181,102182,102184,102186,102188,102190,102193,102195,102197,102200,102202,102204,102207,102209,102211,102214],{"class":86,"line":87},[84,102183,1383],{"class":477},[84,102185,101446],{"class":51627},[84,102187,15249],{"class":90},[84,102189,523],{"class":477},[84,102191,102192],{"class":104},"\"floor\"",[84,102194,54150],{"class":90},[84,102196,523],{"class":477},[84,102198,102199],{"class":104},"\"plane\"",[84,102201,101462],{"class":90},[84,102203,523],{"class":477},[84,102205,102206],{"class":104},"\"2 2 0.1\"",[84,102208,79093],{"class":90},[84,102210,523],{"class":477},[84,102212,102213],{"class":104},"\"0.8 0.8 0.8 1\"",[84,102215,101470],{"class":477},[35,102217,102218,102219,102221,102222,102225,102226,102229,102230,102232],{},"这行创建地面。",[81,102220,101446],{}," 是几何体。",[81,102223,102224],{},"name=\"floor\""," 是名字。",[81,102227,102228],{},"type=\"plane\""," 表示平面。",[81,102231,55436],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[75,102234,102236],{"className":53394,"code":102235,"language":53396,"meta":66,"style":66},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[81,102237,102238],{"__ignoreMap":66},[84,102239,102240,102242,102244,102246,102248,102250,102252,102254,102256],{"class":86,"line":87},[84,102241,1383],{"class":477},[84,102243,52127],{"class":51627},[84,102245,15249],{"class":90},[84,102247,523],{"class":477},[84,102249,53818],{"class":104},[84,102251,101432],{"class":90},[84,102253,523],{"class":477},[84,102255,101437],{"class":104},[84,102257,51634],{"class":477},[35,102259,102260,102261,28712,102263,102266,102267,102269],{},"这行创建一个刚体，名字叫 ",[81,102262,54041],{},[81,102264,102265],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[81,102268,101495],{},"，也就是离地面 1 米高。",[75,102271,102273],{"className":53394,"code":102272,"language":53396,"meta":66,"style":66},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[81,102274,102275],{"__ignoreMap":66},[84,102276,102277,102279,102281,102283,102285,102288],{"class":86,"line":87},[84,102278,1383],{"class":477},[84,102280,101946],{"class":51627},[84,102282,15249],{"class":90},[84,102284,523],{"class":477},[84,102286,102287],{"class":104},"\"box_free\"",[84,102289,101470],{"class":477},[35,102291,102292,102293,102295],{},"这行很重要。",[81,102294,101946],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[75,102297,102299],{"className":53394,"code":102298,"language":53396,"meta":66,"style":66},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[81,102300,102301],{"__ignoreMap":66},[84,102302,102303,102305,102307,102309,102311,102313,102315,102317,102319,102321,102323,102325,102328,102330,102332,102334,102336,102339],{"class":86,"line":87},[84,102304,1383],{"class":477},[84,102306,101446],{"class":51627},[84,102308,15249],{"class":90},[84,102310,523],{"class":477},[84,102312,101453],{"class":104},[84,102314,54150],{"class":90},[84,102316,523],{"class":477},[84,102318,53818],{"class":104},[84,102320,101462],{"class":90},[84,102322,523],{"class":477},[84,102324,101467],{"class":104},[84,102326,102327],{"class":90}," mass",[84,102329,523],{"class":477},[84,102331,4007],{"class":104},[84,102333,79093],{"class":90},[84,102335,523],{"class":477},[84,102337,102338],{"class":104},"\"1 0 0 1\"",[84,102340,101470],{"class":477},[35,102342,102343,102344,102347,102348,102351,102352,102355,102356,102359],{},"这行给 box body 添加一个盒子形状。",[81,102345,102346],{},"type=\"box\""," 表示形状是盒子。",[81,102349,102350],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[81,102353,102354],{},"mass=\"1\""," 表示质量是 1。",[81,102357,102358],{},"rgba=\"1 0 0 1\""," 表示红色。",[75,102361,102363],{"className":30705,"code":102362,"language":30707,"meta":66,"style":66},"def main() -> None:\n",[81,102364,102365],{"__ignoreMap":66},[84,102366,102367,102369,102371,102373,102375],{"class":86,"line":87},[84,102368,32274],{"class":473},[84,102370,2302],{"class":90},[84,102372,101724],{"class":477},[84,102374,96012],{"class":94},[84,102376,4068],{"class":477},[35,102378,102379,102381,102382,102385,102386,102389],{},[81,102380,32274],{}," 用来定义函数。这里定义了一个叫 ",[81,102383,102384],{},"main"," 的函数。",[81,102387,102388],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[75,102391,102392],{"className":30705,"code":101953,"language":30707,"meta":66,"style":66},[81,102393,102394],{"__ignoreMap":66},[84,102395,102396,102398,102400,102402,102404],{"class":86,"line":87},[84,102397,101960],{"class":477},[84,102399,523],{"class":473},[84,102401,101738],{"class":477},[84,102403,101640],{"class":94},[84,102405,484],{"class":477},[35,102407,102408,102409,102412],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[81,102410,102411],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[75,102414,102415],{"className":30705,"code":101977,"language":30707,"meta":66,"style":66},[81,102416,102417],{"__ignoreMap":66},[84,102418,102419,102421,102423],{"class":86,"line":87},[84,102420,101984],{"class":477},[84,102422,523],{"class":473},[84,102424,101752],{"class":477},[35,102426,102427,102428,102430,102431,102433],{},"这行创建仿真数据。",[81,102429,33728],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[81,102432,33728],{}," 都会变化。",[75,102435,102437],{"className":30705,"code":102436,"language":30707,"meta":66,"style":66},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[81,102438,102439,102449,102459],{"__ignoreMap":66},[84,102440,102441,102443,102445,102447],{"class":86,"line":87},[84,102442,30742],{"class":94},[84,102444,478],{"class":477},[84,102446,101765],{"class":104},[84,102448,101768],{"class":477},[84,102450,102451,102453,102455,102457],{"class":86,"line":98},[84,102452,30742],{"class":94},[84,102454,478],{"class":477},[84,102456,101777],{"class":104},[84,102458,101780],{"class":477},[84,102460,102461,102463,102465,102467],{"class":86,"line":70},[84,102462,30742],{"class":94},[84,102464,478],{"class":477},[84,102466,101789],{"class":104},[84,102468,101792],{"class":477},[35,102470,102471,102473,102474,102477,102478,102481,102482,102485,102486,102489],{},[81,102472,30742],{}," 用来输出信息。",[81,102475,102476],{},"model.nq"," 是位置变量数量，",[81,102479,102480],{},"model.nv"," 是速度变量数量，",[81,102483,102484],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[81,102487,102488],{},"nu"," 是 0。",[75,102491,102493],{"className":30705,"code":102492,"language":30707,"meta":66,"style":66},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[81,102494,102495,102505],{"__ignoreMap":66},[84,102496,102497,102499,102501,102503],{"class":86,"line":87},[84,102498,30742],{"class":94},[84,102500,478],{"class":477},[84,102502,101801],{"class":104},[84,102504,101804],{"class":477},[84,102506,102507,102509,102511,102513],{"class":86,"line":98},[84,102508,30742],{"class":94},[84,102510,478],{"class":477},[84,102512,101813],{"class":104},[84,102514,101816],{"class":477},[35,102516,102517,102518,102520,102521,102523,102524,102527],{},"这里打印初始时间和初始位置。",[81,102519,101393],{}," 一开始是 0。",[81,102522,101396],{}," 是位置数组。",[81,102525,102526],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[75,102529,102530],{"className":30705,"code":102002,"language":30707,"meta":66,"style":66},[81,102531,102532,102548],{"__ignoreMap":66},[84,102533,102534,102536,102538,102540,102542,102544,102546],{"class":86,"line":87},[84,102535,3354],{"class":473},[84,102537,101827],{"class":477},[84,102539,26371],{"class":473},[84,102541,32770],{"class":94},[84,102543,478],{"class":477},[84,102545,784],{"class":94},[84,102547,31113],{"class":477},[84,102549,102550],{"class":86,"line":98},[84,102551,102025],{"class":477},[35,102553,102554,102556,102557,102560,102561,102563,102564,102566],{},[81,102555,3354],{}," 是循环。",[81,102558,102559],{},"range(100)"," 表示循环 100 次。",[81,102562,1465],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[81,102565,101541],{},"，仿真就前进一步。",[75,102568,102570],{"className":30705,"code":102569,"language":30707,"meta":66,"style":66},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[81,102571,102572,102582],{"__ignoreMap":66},[84,102573,102574,102576,102578,102580],{"class":86,"line":87},[84,102575,30742],{"class":94},[84,102577,478],{"class":477},[84,102579,101855],{"class":104},[84,102581,101804],{"class":477},[84,102583,102584,102586,102588,102590],{"class":86,"line":98},[84,102585,30742],{"class":94},[84,102587,478],{"class":477},[84,102589,101866],{"class":104},[84,102591,101816],{"class":477},[35,102593,102594],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[75,102596,102598],{"className":30705,"code":102597,"language":30707,"meta":66,"style":66},"if __name__ == \"__main__\":\n    main()\n",[81,102599,102600,102612],{"__ignoreMap":66},[84,102601,102602,102604,102606,102608,102610],{"class":86,"line":87},[84,102603,1871],{"class":473},[84,102605,31547],{"class":94},[84,102607,101885],{"class":473},[84,102609,101888],{"class":104},[84,102611,4068],{"class":477},[84,102613,102614],{"class":86,"line":98},[84,102615,101895],{"class":477},[35,102617,102618,102619,102622,102623,28712],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[81,102620,102621],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[81,102624,102621],{},[35,102626,102627],{},"运行:",[75,102629,102631],{"className":24151,"code":102630,"language":24153,"meta":66,"style":66},"python ch1_first_sim.py\n",[81,102632,102633],{"__ignoreMap":66},[84,102634,102635,102637],{"class":86,"line":87},[84,102636,30707],{"class":90},[84,102638,101612],{"class":104},[14,102640,102642],{"id":102641},"_5运行结果说明","5.运行结果说明",[35,102644,102645],{},"你应该看到类似输出:",[75,102647,102650],{"className":102648,"code":102649,"language":5516,"meta":66},[5514],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[81,102651,102649],{"__ignoreMap":66},[35,102653,102654,102656,102657,102660,102661,28712],{},[81,102655,101946],{}," 有 7 个位置变量: ",[81,102658,102659],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[81,102662,102663],{},"vx vy vz wx wy wz",[35,102665,102666,102667,102670],{},"你还会看到 ",[81,102668,102669],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102672,102674],{"id":102673},"_6验证步骤","6.验证步骤",[35,102676,102677],{},"确认版本:",[75,102679,102680],{"className":24151,"code":101265,"language":24153,"meta":66,"style":66},[81,102681,102682],{"__ignoreMap":66},[84,102683,102684,102686,102688],{"class":86,"line":87},[84,102685,30707],{"class":90},[84,102687,30685],{"class":94},[84,102689,101276],{"class":104},[35,102691,102692],{},"确认导入的是官方 bindings:",[75,102694,102696],{"className":24151,"code":102695,"language":24153,"meta":66,"style":66},"python -c \"import mujoco; print(mujoco)\"\n",[81,102697,102698],{"__ignoreMap":66},[84,102699,102700,102702,102704],{"class":86,"line":87},[84,102701,30707],{"class":90},[84,102703,30685],{"class":94},[84,102705,102706],{"class":104}," \"import mujoco; print(mujoco)\"\n",[35,102708,102709],{},"运行程序:",[75,102711,102712],{"className":24151,"code":102630,"language":24153,"meta":66,"style":66},[81,102713,102714],{"__ignoreMap":66},[84,102715,102716,102718],{"class":86,"line":87},[84,102717,30707],{"class":90},[84,102719,101612],{"class":104},[35,102721,102722,102723,102726,102727,28712],{},"检查 ",[81,102724,102725],{},"final time"," 是否约等于 ",[81,102728,102729],{},"1.0",[35,102731,102732],{},"再做几个小实验：",[28,102734,102735,102745,102753,102766],{},[31,102736,102737,102738,102740,102741,102744],{},"把 ",[81,102739,102265],{}," 改成 ",[81,102742,102743],{},"pos=\"0 0 2\"","，观察初始高度变化。",[31,102746,102737,102747,102740,102749,102752],{},[81,102748,102154],{},[81,102750,102751],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[31,102754,102737,102755,102740,102757,102760,102761,102763,102764,28712],{},[81,102756,102150],{},[81,102758,102759],{},"timestep=\"0.005\"","，观察 100 步后的 ",[81,102762,102725],{}," 是否变成约 ",[81,102765,35656],{},[31,102767,102768,102769,102772],{},"删除 ",[81,102770,102771],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[35,102774,102775],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102777,102779],{"id":102778},"_7常见错误与解决方案","7.常见错误与解决方案",[23,102781,102783],{"id":102782},"modulenotfounderror-no-module-named-mujoco",[81,102784,102785],{},"ModuleNotFoundError: No module named 'mujoco'",[35,102787,102788],{},"解决:",[75,102790,102792],{"className":24151,"code":102791,"language":24153,"meta":66,"style":66},"pip install \"mujoco>=2.3\"\n",[81,102793,102794],{"__ignoreMap":66},[84,102795,102796,102798,102800],{"class":86,"line":87},[84,102797,24160],{"class":90},[84,102799,24163],{"class":104},[84,102801,102802],{"class":104}," \"mujoco>=2.3\"\n",[23,102804,102806],{"id":102805},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[35,102808,102809],{},"先安装系统依赖:",[75,102811,102813],{"className":24151,"code":102812,"language":24153,"meta":66,"style":66},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[81,102814,102815],{"__ignoreMap":66},[84,102816,102817,102819,102821,102823,102825,102828,102830,102833,102835,102838,102840],{"class":86,"line":87},[84,102818,24905],{"class":90},[84,102820,26643],{"class":104},[84,102822,24163],{"class":104},[84,102824,26728],{"class":94},[84,102826,102827],{"class":104}," mesa-libGL",[84,102829,101140],{"class":104},[84,102831,102832],{"class":104}," glfw",[84,102834,101160],{"class":104},[84,102836,102837],{"class":104}," libX11",[84,102839,101173],{"class":104},[84,102841,102842],{"class":104}," libXrandr\n",[23,102844,102846],{"id":102845},"xml-解析失败","XML 解析失败",[35,102848,102849],{},"检查:",[28,102851,102852,102855,102858,102864],{},[31,102853,102854],{},"标签是否闭合",[31,102856,102857],{},"属性是否带引号",[31,102859,102860,102861],{},"根节点是否是 ",[81,102862,102863],{},"\u003Cmujoco>",[31,102865,102866,102868,102869,102872],{},[81,102867,52127],{}," 是否放在 ",[81,102870,102871],{},"\u003Cworldbody>"," 内部",[23,102874,102876,102878,102879],{"id":102875},"final-time-不是严格等于-10",[81,102877,102725],{}," 不是严格等于 ",[81,102880,102729],{},[35,102882,102883],{},"这通常不是错误。浮点数计算可能得到：",[75,102885,102888],{"className":102886,"code":102887,"language":5516,"meta":66},[5514],"1.0000000000000007\n",[81,102889,102887],{"__ignoreMap":66},[35,102891,102892,102893,102895],{},"只要接近 ",[81,102894,102729],{}," 就正常。",[23,102897,102898],{"id":102898},"方块没有掉下来",[35,102900,102901],{},"检查：",[28,102903,102904,102910,102916,102921],{},[31,102905,102906,102907],{},"方块 body 里是否有 ",[81,102908,102909],{},"\u003Cfreejoint\u002F>",[31,102911,102912,102913],{},"重力是否是 ",[81,102914,102915],{},"0 0 -9.81",[31,102917,102918,102919],{},"是否真的调用了 ",[81,102920,101011],{},[31,102922,102923,102924,102926,102927],{},"你看的是否是 ",[81,102925,102669],{},"，不是 ",[81,102928,102929],{},"initial qpos",[14,102931,102933],{"id":102932},"_8本章小结","8.本章小结",[35,102935,102936],{},"本章你已经完成了 MuJoCo 的最小闭环：",[75,102938,102941],{"className":102939,"code":102940,"language":5516,"meta":66},[5514],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[81,102942,102940],{"__ignoreMap":66},[35,102944,102945],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[389,102947,102948],{},"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":66,"searchDepth":98,"depth":98,"links":102950},[102951,102952,102953,102958,102962,102963,102964,102972],{"id":100972,"depth":98,"text":100973},{"id":101095,"depth":98,"text":101096},{"id":101370,"depth":98,"text":101371,"children":102954},[102955,102956,102957],{"id":101408,"depth":70,"text":101409},{"id":101502,"depth":70,"text":101503},{"id":101554,"depth":70,"text":101555},{"id":101578,"depth":98,"text":101579,"children":102959},[102960,102961],{"id":101898,"depth":70,"text":101898},{"id":102034,"depth":70,"text":102034},{"id":102641,"depth":98,"text":102642},{"id":102673,"depth":98,"text":102674},{"id":102778,"depth":98,"text":102779,"children":102965},[102966,102967,102968,102969,102971],{"id":102782,"depth":70,"text":102785},{"id":102805,"depth":70,"text":102806},{"id":102845,"depth":70,"text":102846},{"id":102875,"depth":70,"text":102970},"final time 不是严格等于 1.0",{"id":102898,"depth":70,"text":102898},{"id":102932,"depth":98,"text":102933},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100964,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102979,"title":102980,"body":102981,"description":66,"extension":401,"meta":104637,"navigation":403,"path":104638,"seo":104639,"stem":104640,"__hash__":104641},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102982,"toc":104613},[102983,102986,102988,102991,102994,103011,103106,103109,103115,103117,103119,103143,103146,103160,103163,103204,103206,103219,103221,103224,103272,103284,103287,103290,103296,103309,103376,103379,103398,103401,103404,103410,103412,103421,103424,103428,103437,103519,103528,103532,103538,103552,103562,103564,103894,103897,103909,103911,103922,103924,103927,103945,103948,103951,103969,103980,103983,103998,104008,104010,104031,104048,104068,104074,104114,104130,104146,104152,104155,104179,104195,104200,104230,104247,104272,104275,104290,104299,104314,104323,104338,104345,104347,104357,104370,104377,104380,104419,104426,104428,104480,104482,104488,104491,104498,104505,104508,104510,104528,104531,104534,104568,104580,104582,104585,104607,104610],[10,102984,102980],{"id":102985},"_2xml-与-mjcf-物理建模基础",[14,102987,100973],{"id":100972},[35,102989,102990],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[35,102992,102993],{},"本章结束后，你应该能看懂一个简单模型里：",[28,102995,102996,102999,103002,103005,103008],{},[31,102997,102998],{},"地面在哪里。",[31,103000,103001],{},"物体初始位置在哪里。",[31,103003,103004],{},"几何体是什么形状。",[31,103006,103007],{},"哪些 body 可以自由运动。",[31,103009,103010],{},"如何用名字在 Python 里找到 XML 中的对象。",[612,103012,103013,103023],{},[615,103014,103015],{},[618,103016,103017,103020],{},[621,103018,103019],{"align":24065},"标签",[621,103021,103022],{"align":24065},"作用",[659,103024,103025,103034,103044,103053,103063,103073,103086,103096],{},[618,103026,103027,103031],{},[664,103028,103029],{"align":24065},[81,103030,102863],{},[664,103032,103033],{"align":24065},"根节点",[618,103035,103036,103041],{},[664,103037,103038],{"align":24065},[81,103039,103040],{},"\u003Coption>",[664,103042,103043],{"align":24065},"仿真参数",[618,103045,103046,103050],{},[664,103047,103048],{"align":24065},[81,103049,102871],{},[664,103051,103052],{"align":24065},"世界中的物体",[618,103054,103055,103060],{},[664,103056,103057],{"align":24065},[81,103058,103059],{},"\u003Cbody>",[664,103061,103062],{"align":24065},"刚体",[618,103064,103065,103070],{},[664,103066,103067],{"align":24065},[81,103068,103069],{},"\u003Cgeom>",[664,103071,103072],{"align":24065},"几何体、碰撞体、可视体",[618,103074,103075,103083],{},[664,103076,103077,25306,103080],{"align":24065},[81,103078,103079],{},"\u003Cjoint>",[81,103081,103082],{},"\u003Cfreejoint>",[664,103084,103085],{"align":24065},"关节",[618,103087,103088,103093],{},[664,103089,103090],{"align":24065},[81,103091,103092],{},"\u003Csite>",[664,103094,103095],{"align":24065},"标记点",[618,103097,103098,103103],{},[664,103099,103100],{"align":24065},[81,103101,103102],{},"\u003Cactuator>",[664,103104,103105],{"align":24065},"控制器",[35,103107,103108],{},"初学时可以先记住：",[75,103110,103113],{"className":103111,"code":103112,"language":5516,"meta":66},[5514],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[81,103114,103112],{"__ignoreMap":66},[14,103116,101096],{"id":101095},[35,103118,101099],{},[75,103120,103122],{"className":24151,"code":103121,"language":24153,"meta":66,"style":66},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[81,103123,103124],{"__ignoreMap":66},[84,103125,103126,103128,103130,103132,103134,103136,103138,103140],{"class":86,"line":87},[84,103127,24905],{"class":90},[84,103129,26643],{"class":104},[84,103131,24163],{"class":104},[84,103133,26728],{"class":94},[84,103135,102827],{"class":104},[84,103137,101140],{"class":104},[84,103139,102832],{"class":104},[84,103141,103142],{"class":104}," glfw-devel\n",[35,103144,103145],{},"pip:",[75,103147,103148],{"className":24151,"code":101245,"language":24153,"meta":66,"style":66},[81,103149,103150],{"__ignoreMap":66},[84,103151,103152,103154,103156,103158],{"class":86,"line":87},[84,103153,24160],{"class":90},[84,103155,24163],{"class":104},[84,103157,101256],{"class":104},[84,103159,101259],{"class":104},[35,103161,103162],{},"conda:",[75,103164,103166],{"className":24151,"code":103165,"language":24153,"meta":66,"style":66},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[81,103167,103168,103185,103194],{"__ignoreMap":66},[84,103169,103170,103172,103174,103176,103179,103181,103183],{"class":86,"line":87},[84,103171,30657],{"class":90},[84,103173,29503],{"class":104},[84,103175,25443],{"class":94},[84,103177,103178],{"class":104}," mujoco-xml",[84,103180,101301],{"class":104},[84,103182,101304],{"class":94},[84,103184,101307],{"class":94},[84,103186,103187,103189,103191],{"class":86,"line":98},[84,103188,30657],{"class":90},[84,103190,101314],{"class":104},[84,103192,103193],{"class":104}," mujoco-xml\n",[84,103195,103196,103198,103200,103202],{"class":86,"line":70},[84,103197,24160],{"class":90},[84,103199,24163],{"class":104},[84,103201,101256],{"class":104},[84,103203,101259],{"class":104},[35,103205,101330],{},[28,103207,103208,103211,103216],{},[31,103209,103210],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[31,103212,103213,103214,28712],{},"本章使用基础标签，适用于 ",[81,103215,101353],{},[31,103217,103218],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103220,101371],{"id":101370},[35,103222,103223],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[75,103225,103227],{"className":53394,"code":103226,"language":53396,"meta":66,"style":66},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[81,103228,103229,103243,103251,103256,103264],{"__ignoreMap":66},[84,103230,103231,103233,103235,103237,103239,103241],{"class":86,"line":87},[84,103232,1383],{"class":477},[84,103234,101347],{"class":51627},[84,103236,102101],{"class":90},[84,103238,523],{"class":477},[84,103240,63005],{"class":104},[84,103242,51634],{"class":477},[84,103244,103245,103247,103249],{"class":86,"line":98},[84,103246,52471],{"class":477},[84,103248,102167],{"class":51627},[84,103250,51634],{"class":477},[84,103252,103253],{"class":86,"line":70},[84,103254,103255],{"class":477},"    ...\n",[84,103257,103258,103260,103262],{"class":86,"line":120},[84,103259,52744],{"class":477},[84,103261,102167],{"class":51627},[84,103263,51634],{"class":477},[84,103265,103266,103268,103270],{"class":86,"line":131},[84,103267,52112],{"class":477},[84,103269,101347],{"class":51627},[84,103271,51634],{"class":477},[35,103273,103274,103276,103277,103279,103280,103283],{},[81,103275,52127],{}," 表示刚体。",[81,103278,101446],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[81,103281,103282],{},"joint"," 表示刚体相对父刚体如何运动。",[23,103285,103286],{"id":103286},"层级结构非常重要",[35,103288,103289],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[75,103291,103294],{"className":103292,"code":103293,"language":5516,"meta":66},[5514],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[81,103295,103293],{"__ignoreMap":66},[35,103297,103298,101344,103301,103304,103305,103308],{},[81,103299,103300],{},"red_box_geom",[81,103302,103303],{},"box_center"," 都属于 ",[81,103306,103307],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[75,103310,103312],{"className":53394,"code":103311,"language":53396,"meta":66,"style":66},"\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",[81,103313,103314,103334,103348,103368],{"__ignoreMap":66},[84,103315,103316,103318,103320,103322,103324,103326,103328,103330,103332],{"class":86,"line":87},[84,103317,1383],{"class":477},[84,103319,52127],{"class":51627},[84,103321,15249],{"class":90},[84,103323,523],{"class":477},[84,103325,53818],{"class":104},[84,103327,101432],{"class":90},[84,103329,523],{"class":477},[84,103331,101437],{"class":104},[84,103333,51634],{"class":477},[84,103335,103336,103338,103340,103342,103344,103346],{"class":86,"line":98},[84,103337,52471],{"class":477},[84,103339,101946],{"class":51627},[84,103341,15249],{"class":90},[84,103343,523],{"class":477},[84,103345,102287],{"class":104},[84,103347,101470],{"class":477},[84,103349,103350,103352,103354,103356,103358,103360,103362,103364,103366],{"class":86,"line":70},[84,103351,52471],{"class":477},[84,103353,101446],{"class":51627},[84,103355,54150],{"class":90},[84,103357,523],{"class":477},[84,103359,53818],{"class":104},[84,103361,101462],{"class":90},[84,103363,523],{"class":477},[84,103365,101467],{"class":104},[84,103367,101470],{"class":477},[84,103369,103370,103372,103374],{"class":86,"line":120},[84,103371,52112],{"class":477},[84,103373,52127],{"class":51627},[84,103375,51634],{"class":477},[35,103377,103378],{},"含义:",[28,103380,103381,103387,103392,103395],{},[31,103382,103383,103384,103386],{},"创建名为 ",[81,103385,54041],{}," 的刚体",[31,103388,103389,103390],{},"初始位置在世界坐标 ",[81,103391,101495],{},[31,103393,103394],{},"它有一个自由关节",[31,103396,103397],{},"它有一个盒子几何体",[23,103399,103400],{"id":103400},"坐标怎么理解",[35,103402,103403],{},"MuJoCo 默认使用三维坐标：",[75,103405,103408],{"className":103406,"code":103407,"language":5516,"meta":66},[5514],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[81,103409,103407],{"__ignoreMap":66},[35,103411,14962],{},[75,103413,103415],{"className":53394,"code":103414,"language":53396,"meta":66,"style":66},"pos=\"0 0 1\"\n",[81,103416,103417],{"__ignoreMap":66},[84,103418,103419],{"class":86,"line":87},[84,103420,103414],{"class":477},[35,103422,103423],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[23,103425,103427],{"id":103426},"geom-的-size-怎么理解","geom 的 size 怎么理解",[35,103429,103430,103431,82856,103434,103436],{},"不同 ",[81,103432,103433],{},"type",[81,103435,31823],{}," 含义不同：",[612,103438,103439,103454],{},[615,103440,103441],{},[618,103442,103443,103447,103452],{},[621,103444,103445],{"align":24065},[81,103446,103433],{},[621,103448,103449,103451],{"align":24065},[81,103450,31823],{}," 示例",[621,103453,101026],{"align":24065},[659,103455,103456,103470,103485,103504],{},[618,103457,103458,103462,103467],{},[664,103459,103460],{"align":24065},[81,103461,54041],{},[664,103463,103464],{"align":24065},[81,103465,103466],{},"size=\"0.1 0.2 0.3\"",[664,103468,103469],{"align":24065},"x\u002Fy\u002Fz 半边长，不是完整长度",[618,103471,103472,103477,103482],{},[664,103473,103474],{"align":24065},[81,103475,103476],{},"sphere",[664,103478,103479],{"align":24065},[81,103480,103481],{},"size=\"0.1\"",[664,103483,103484],{"align":24065},"球半径",[618,103486,103487,103492,103497],{},[664,103488,103489],{"align":24065},[81,103490,103491],{},"capsule",[664,103493,103494],{"align":24065},[81,103495,103496],{},"size=\"0.03\"",[664,103498,103499,103500,103503],{"align":24065},"胶囊半径，长度常用 ",[81,103501,103502],{},"fromto"," 指定",[618,103505,103506,103511,103516],{},[664,103507,103508],{"align":24065},[81,103509,103510],{},"plane",[664,103512,103513],{"align":24065},[81,103514,103515],{},"size=\"3 3 0.1\"",[664,103517,103518],{"align":24065},"可视平面大小，通常当地面",[35,103520,103521,103522,103524,103525,103527],{},"最容易踩坑的是 box：",[81,103523,102350],{}," 表示边长大约是 ",[81,103526,32364],{},"，因为 MuJoCo 用的是半边长。",[23,103529,103531],{"id":103530},"site-是什么","site 是什么",[35,103533,103534,103537],{},[81,103535,103536],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[28,103539,103540,103543,103546,103549],{},[31,103541,103542],{},"标记机械臂末端。",[31,103544,103545],{},"标记目标位置。",[31,103547,103548],{},"放传感器或相机参考点。",[31,103550,103551],{},"在 Python 中读取某个关键点的世界坐标。",[35,103553,103554,103555,101344,103558,103561],{},"在后面的 Reacher 任务中，",[81,103556,103557],{},"tip",[81,103559,103560],{},"target"," 就会用 site 表示。",[14,103563,101579],{"id":101578},[75,103565,103567],{"className":30705,"code":103566,"language":30707,"meta":66,"style":66},"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",[81,103568,103569,103575,103585,103589,103593,103601,103606,103610,103614,103618,103623,103627,103632,103637,103642,103647,103651,103655,103659,103663,103667,103671,103683,103695,103703,103707,103722,103737,103741,103754,103769,103782,103795,103799,103815,103819,103823,103834,103846,103858,103870,103874,103878,103890],{"__ignoreMap":66},[84,103570,103571,103573],{"class":86,"line":87},[84,103572,30719],{"class":473},[84,103574,101627],{"class":477},[84,103576,103577,103579,103581,103583],{"class":86,"line":98},[84,103578,30719],{"class":473},[84,103580,31707],{"class":477},[84,103582,31710],{"class":473},[84,103584,31713],{"class":477},[84,103586,103587],{"class":86,"line":70},[84,103588,2729],{"emptyLinePlaceholder":403},[84,103590,103591],{"class":86,"line":120},[84,103592,2729],{"emptyLinePlaceholder":403},[84,103594,103595,103597,103599],{"class":86,"line":131},[84,103596,101640],{"class":94},[84,103598,13893],{"class":473},[84,103600,101645],{"class":104},[84,103602,103603],{"class":86,"line":145},[84,103604,103605],{"class":104},"\u003Cmujoco model=\"xml_basic\">\n",[84,103607,103608],{"class":86,"line":156},[84,103609,101655],{"class":104},[84,103611,103612],{"class":86,"line":164},[84,103613,2729],{"emptyLinePlaceholder":403},[84,103615,103616],{"class":86,"line":175},[84,103617,101664],{"class":104},[84,103619,103620],{"class":86,"line":185},[84,103621,103622],{"class":104},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[84,103624,103625],{"class":86,"line":195},[84,103626,2729],{"emptyLinePlaceholder":403},[84,103628,103629],{"class":86,"line":206},[84,103630,103631],{"class":104},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[84,103633,103634],{"class":86,"line":217},[84,103635,103636],{"class":104},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[84,103638,103639],{"class":86,"line":227},[84,103640,103641],{"class":104},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[84,103643,103644],{"class":86,"line":238},[84,103645,103646],{"class":104},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[84,103648,103649],{"class":86,"line":249},[84,103650,101693],{"class":104},[84,103652,103653],{"class":86,"line":262},[84,103654,101698],{"class":104},[84,103656,103657],{"class":86,"line":273},[84,103658,101703],{"class":104},[84,103660,103661],{"class":86,"line":283},[84,103662,96024],{"class":104},[84,103664,103665],{"class":86,"line":294},[84,103666,2729],{"emptyLinePlaceholder":403},[84,103668,103669],{"class":86,"line":2028},[84,103670,2729],{"emptyLinePlaceholder":403},[84,103672,103673,103675,103677,103679,103681],{"class":86,"line":2057},[84,103674,32274],{"class":473},[84,103676,2302],{"class":90},[84,103678,101724],{"class":477},[84,103680,96012],{"class":94},[84,103682,4068],{"class":477},[84,103684,103685,103687,103689,103691,103693],{"class":86,"line":2062},[84,103686,101733],{"class":477},[84,103688,523],{"class":473},[84,103690,101738],{"class":477},[84,103692,101640],{"class":94},[84,103694,484],{"class":477},[84,103696,103697,103699,103701],{"class":86,"line":2079},[84,103698,101747],{"class":477},[84,103700,523],{"class":473},[84,103702,101752],{"class":477},[84,103704,103705],{"class":86,"line":2084},[84,103706,2729],{"emptyLinePlaceholder":403},[84,103708,103709,103712,103714,103717,103720],{"class":86,"line":2089},[84,103710,103711],{"class":477},"    box_body_id ",[84,103713,523],{"class":473},[84,103715,103716],{"class":477}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[84,103718,103719],{"class":104},"\"red_box\"",[84,103721,484],{"class":477},[84,103723,103724,103727,103729,103732,103735],{"class":86,"line":2094},[84,103725,103726],{"class":477},"    site_id ",[84,103728,523],{"class":473},[84,103730,103731],{"class":477}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[84,103733,103734],{"class":104},"\"box_center\"",[84,103736,484],{"class":477},[84,103738,103739],{"class":86,"line":2108},[84,103740,2729],{"emptyLinePlaceholder":403},[84,103742,103743,103745,103748,103750,103752],{"class":86,"line":2113},[84,103744,3430],{"class":473},[84,103746,103747],{"class":477}," box_body_id ",[84,103749,1383],{"class":473},[84,103751,4422],{"class":94},[84,103753,4068],{"class":477},[84,103755,103756,103759,103762,103764,103767],{"class":86,"line":2906},[84,103757,103758],{"class":473},"        raise",[84,103760,103761],{"class":94}," RuntimeError",[84,103763,478],{"class":477},[84,103765,103766],{"class":104},"\"body red_box not found\"",[84,103768,484],{"class":477},[84,103770,103771,103773,103776,103778,103780],{"class":86,"line":2920},[84,103772,3430],{"class":473},[84,103774,103775],{"class":477}," site_id ",[84,103777,1383],{"class":473},[84,103779,4422],{"class":94},[84,103781,4068],{"class":477},[84,103783,103784,103786,103788,103790,103793],{"class":86,"line":2928},[84,103785,103758],{"class":473},[84,103787,103761],{"class":94},[84,103789,478],{"class":477},[84,103791,103792],{"class":104},"\"site box_center not found\"",[84,103794,484],{"class":477},[84,103796,103797],{"class":86,"line":2933},[84,103798,2729],{"emptyLinePlaceholder":403},[84,103800,103801,103803,103805,103807,103809,103811,103813],{"class":86,"line":2939},[84,103802,3530],{"class":473},[84,103804,101827],{"class":477},[84,103806,26371],{"class":473},[84,103808,32770],{"class":94},[84,103810,478],{"class":477},[84,103812,2052],{"class":94},[84,103814,31113],{"class":477},[84,103816,103817],{"class":86,"line":2945},[84,103818,101842],{"class":477},[84,103820,103821],{"class":86,"line":2950},[84,103822,2729],{"emptyLinePlaceholder":403},[84,103824,103825,103827,103829,103832],{"class":86,"line":8277},[84,103826,31626],{"class":94},[84,103828,478],{"class":477},[84,103830,103831],{"class":104},"\"simulation time:\"",[84,103833,101804],{"class":477},[84,103835,103836,103838,103840,103843],{"class":86,"line":8301},[84,103837,31626],{"class":94},[84,103839,478],{"class":477},[84,103841,103842],{"class":104},"\"box body position:\"",[84,103844,103845],{"class":477},", data.xpos[box_body_id].copy())\n",[84,103847,103848,103850,103852,103855],{"class":86,"line":8306},[84,103849,31626],{"class":94},[84,103851,478],{"class":477},[84,103853,103854],{"class":104},"\"site position:\"",[84,103856,103857],{"class":477},", data.site_xpos[site_id].copy())\n",[84,103859,103860,103862,103864,103867],{"class":86,"line":8312},[84,103861,31626],{"class":94},[84,103863,478],{"class":477},[84,103865,103866],{"class":104},"\"box qpos:\"",[84,103868,103869],{"class":477},", np.array(data.qpos))\n",[84,103871,103872],{"class":86,"line":8339},[84,103873,2729],{"emptyLinePlaceholder":403},[84,103875,103876],{"class":86,"line":8344},[84,103877,2729],{"emptyLinePlaceholder":403},[84,103879,103880,103882,103884,103886,103888],{"class":86,"line":8350},[84,103881,1871],{"class":473},[84,103883,31547],{"class":94},[84,103885,101885],{"class":473},[84,103887,101888],{"class":104},[84,103889,4068],{"class":477},[84,103891,103892],{"class":86,"line":8362},[84,103893,101895],{"class":477},[35,103895,103896],{},"保存为：",[75,103898,103900],{"className":24151,"code":103899,"language":24153,"meta":66,"style":66},"touch ch2_xml_basic.py\n",[81,103901,103902],{"__ignoreMap":66},[84,103903,103904,103906],{"class":86,"line":87},[84,103905,101609],{"class":90},[84,103907,103908],{"class":104}," ch2_xml_basic.py\n",[35,103910,102627],{},[75,103912,103914],{"className":24151,"code":103913,"language":24153,"meta":66,"style":66},"python ch2_xml_basic.py\n",[81,103915,103916],{"__ignoreMap":66},[84,103917,103918,103920],{"class":86,"line":87},[84,103919,30707],{"class":90},[84,103921,103908],{"class":104},[23,103923,101898],{"id":101898},[35,103925,103926],{},"用名字查找 body：",[75,103928,103930],{"className":30705,"code":103929,"language":30707,"meta":66,"style":66},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[81,103931,103932],{"__ignoreMap":66},[84,103933,103934,103937,103939,103941,103943],{"class":86,"line":87},[84,103935,103936],{"class":477},"box_body_id ",[84,103938,523],{"class":473},[84,103940,103716],{"class":477},[84,103942,103719],{"class":104},[84,103944,484],{"class":477},[35,103946,103947],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[35,103949,103950],{},"用名字查找 site：",[75,103952,103954],{"className":30705,"code":103953,"language":30707,"meta":66,"style":66},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[81,103955,103956],{"__ignoreMap":66},[84,103957,103958,103961,103963,103965,103967],{"class":86,"line":87},[84,103959,103960],{"class":477},"site_id ",[84,103962,523],{"class":473},[84,103964,103731],{"class":477},[84,103966,103734],{"class":104},[84,103968,484],{"class":477},[35,103970,103971,103972,103975,103976,103979],{},"注意第二个参数是对象类型。查 body 就用 ",[81,103973,103974],{},"mjOBJ_BODY","，查 site 就用 ",[81,103977,103978],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[35,103981,103982],{},"读取世界坐标：",[75,103984,103986],{"className":30705,"code":103985,"language":30707,"meta":66,"style":66},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[81,103987,103988,103993],{"__ignoreMap":66},[84,103989,103990],{"class":86,"line":87},[84,103991,103992],{"class":477},"data.xpos[box_body_id]\n",[84,103994,103995],{"class":86,"line":98},[84,103996,103997],{"class":477},"data.site_xpos[site_id]\n",[35,103999,104000,104003,104004,104007],{},[81,104001,104002],{},"xpos"," 是 body 的世界坐标，",[81,104005,104006],{},"site_xpos"," 是 site 的世界坐标。",[23,104009,102034],{"id":102034},[75,104011,104013],{"className":30705,"code":104012,"language":30707,"meta":66,"style":66},"import mujoco\nimport numpy as np\n",[81,104014,104015,104021],{"__ignoreMap":66},[84,104016,104017,104019],{"class":86,"line":87},[84,104018,30719],{"class":473},[84,104020,101627],{"class":477},[84,104022,104023,104025,104027,104029],{"class":86,"line":98},[84,104024,30719],{"class":473},[84,104026,31707],{"class":477},[84,104028,31710],{"class":473},[84,104030,31713],{"class":477},[35,104032,104033,104034,104037,104038,104041,104042,687,104045,28712],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[81,104035,104036],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[81,104039,104040],{},"as np"," 是习惯写法，后面就可以写 ",[81,104043,104044],{},"np.array(...)",[81,104046,104047],{},"np.round(...)",[75,104049,104050],{"className":30705,"code":101921,"language":30707,"meta":66,"style":66},[81,104051,104052,104060,104064],{"__ignoreMap":66},[84,104053,104054,104056,104058],{"class":86,"line":87},[84,104055,101640],{"class":94},[84,104057,13893],{"class":473},[84,104059,101645],{"class":104},[84,104061,104062],{"class":86,"line":98},[84,104063,101936],{"class":104},[84,104065,104066],{"class":86,"line":70},[84,104067,96024],{"class":104},[35,104069,104070,104071,28712],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[81,104072,104073],{},"mujoco.MjModel.from_xml_string(XML)",[75,104075,104077],{"className":53394,"code":104076,"language":53396,"meta":66,"style":66},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[81,104078,104079],{"__ignoreMap":66},[84,104080,104081,104083,104085,104087,104089,104091,104093,104095,104098,104100,104102,104105,104107,104109,104112],{"class":86,"line":87},[84,104082,1383],{"class":477},[84,104084,103536],{"class":51627},[84,104086,15249],{"class":90},[84,104088,523],{"class":477},[84,104090,103734],{"class":104},[84,104092,101432],{"class":90},[84,104094,523],{"class":477},[84,104096,104097],{"class":104},"\"0 0 0\"",[84,104099,101462],{"class":90},[84,104101,523],{"class":477},[84,104103,104104],{"class":104},"\"0.03\"",[84,104106,79093],{"class":90},[84,104108,523],{"class":477},[84,104110,104111],{"class":104},"\"0 1 0 1\"",[84,104113,101470],{"class":477},[35,104115,104116,104118,104119,104122,104123,104125,104126,104129],{},[81,104117,103536],{}," 是标记点。",[81,104120,104121],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[81,104124,103496],{}," 表示显示出来的小球大小。",[81,104127,104128],{},"rgba=\"0 1 0 1\""," 表示绿色。",[75,104131,104132],{"className":30705,"code":103929,"language":30707,"meta":66,"style":66},[81,104133,104134],{"__ignoreMap":66},[84,104135,104136,104138,104140,104142,104144],{"class":86,"line":87},[84,104137,103936],{"class":477},[84,104139,523],{"class":473},[84,104141,103716],{"class":477},[84,104143,103719],{"class":104},[84,104145,484],{"class":477},[35,104147,104148,104149,104151],{},"这行的作用是：根据名字 ",[81,104150,103719],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[35,104153,104154],{},"拆开看：",[28,104156,104157,104163,104168,104174],{},[31,104158,104159,104162],{},[81,104160,104161],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[31,104164,104165,104167],{},[81,104166,102411],{}," 是被查询的模型。",[31,104169,104170,104173],{},[81,104171,104172],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[31,104175,104176,104178],{},[81,104177,103719],{}," 是 XML 里写的名字。",[75,104180,104181],{"className":30705,"code":103953,"language":30707,"meta":66,"style":66},[81,104182,104183],{"__ignoreMap":66},[84,104184,104185,104187,104189,104191,104193],{"class":86,"line":87},[84,104186,103960],{"class":477},[84,104188,523],{"class":473},[84,104190,103731],{"class":477},[84,104192,103734],{"class":104},[84,104194,484],{"class":477},[35,104196,104197,104198,28712],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[81,104199,103734],{},[75,104201,104203],{"className":30705,"code":104202,"language":30707,"meta":66,"style":66},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[81,104204,104205,104217],{"__ignoreMap":66},[84,104206,104207,104209,104211,104213,104215],{"class":86,"line":87},[84,104208,1871],{"class":473},[84,104210,103747],{"class":477},[84,104212,1383],{"class":473},[84,104214,4422],{"class":94},[84,104216,4068],{"class":477},[84,104218,104219,104222,104224,104226,104228],{"class":86,"line":98},[84,104220,104221],{"class":473},"    raise",[84,104223,103761],{"class":94},[84,104225,478],{"class":477},[84,104227,103766],{"class":104},[84,104229,484],{"class":477},[35,104231,104232,104234,104235,104238,104239,104242,104243,104246],{},[81,104233,1871],{}," 是条件判断。",[81,104236,104237],{},"mj_name2id"," 找不到对象时会返回 ",[81,104240,104241],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[81,104244,104245],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[75,104248,104250],{"className":30705,"code":104249,"language":30707,"meta":66,"style":66},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[81,104251,104252,104268],{"__ignoreMap":66},[84,104253,104254,104256,104258,104260,104262,104264,104266],{"class":86,"line":87},[84,104255,3354],{"class":473},[84,104257,101827],{"class":477},[84,104259,26371],{"class":473},[84,104261,32770],{"class":94},[84,104263,478],{"class":477},[84,104265,2052],{"class":94},[84,104267,31113],{"class":477},[84,104269,104270],{"class":86,"line":98},[84,104271,102025],{"class":477},[35,104273,104274],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[75,104276,104278],{"className":30705,"code":104277,"language":30707,"meta":66,"style":66},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[81,104279,104280],{"__ignoreMap":66},[84,104281,104282,104284,104286,104288],{"class":86,"line":87},[84,104283,30742],{"class":94},[84,104285,478],{"class":477},[84,104287,103842],{"class":104},[84,104289,103845],{"class":477},[35,104291,104292,104294,104295,104298],{},[81,104293,101405],{}," 保存所有 body 的世界坐标。",[81,104296,104297],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[75,104300,104302],{"className":30705,"code":104301,"language":30707,"meta":66,"style":66},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[81,104303,104304],{"__ignoreMap":66},[84,104305,104306,104308,104310,104312],{"class":86,"line":87},[84,104307,30742],{"class":94},[84,104309,478],{"class":477},[84,104311,103854],{"class":104},[84,104313,103857],{"class":477},[35,104315,104316,104319,104320,104322],{},[81,104317,104318],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[81,104321,103303],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[75,104324,104326],{"className":30705,"code":104325,"language":30707,"meta":66,"style":66},"print(\"box qpos:\", np.array(data.qpos))\n",[81,104327,104328],{"__ignoreMap":66},[84,104329,104330,104332,104334,104336],{"class":86,"line":87},[84,104331,30742],{"class":94},[84,104333,478],{"class":477},[84,104335,103866],{"class":104},[84,104337,103869],{"class":477},[35,104339,104340,104341,104344],{},"这里打印广义位置数组。",[81,104342,104343],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104346,102642],{"id":102641},[35,104348,104349,104350,104353,104354,28712],{},"程序会输出 ",[81,104351,104352],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[81,104355,104356],{},"qpos",[35,104358,104359,104361,104362,104365,104366,104369],{},[81,104360,104297],{}," 是 body 的世界坐标位置。",[81,104363,104364],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[81,104367,104368],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[35,104371,82548,104372,82856,104374,104376],{},[81,104373,103303],{},[81,104375,104121],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[35,104378,104379],{},"如果你把 site 改成：",[75,104381,104383],{"className":53394,"code":104382,"language":53396,"meta":66,"style":66},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[81,104384,104385],{"__ignoreMap":66},[84,104386,104387,104389,104391,104393,104395,104398,104400,104402,104405,104407,104409,104411,104413,104415,104417],{"class":86,"line":87},[84,104388,1383],{"class":477},[84,104390,103536],{"class":51627},[84,104392,15249],{"class":90},[84,104394,523],{"class":477},[84,104396,104397],{"class":104},"\"box_top\"",[84,104399,101432],{"class":90},[84,104401,523],{"class":477},[84,104403,104404],{"class":104},"\"0 0 0.15\"",[84,104406,101462],{"class":90},[84,104408,523],{"class":477},[84,104410,104104],{"class":104},[84,104412,79093],{"class":90},[84,104414,523],{"class":477},[84,104416,104111],{"class":104},[84,104418,101470],{"class":477},[35,104420,104421,104422,104425],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[81,104423,104424],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104427,102674],{"id":102673},[28,104429,104430,104439,104442,104449,104455,104466],{},[31,104431,102737,104432,104434,104435,102740,104437,28712],{},[81,104433,103307],{}," 的初始高度从 ",[81,104436,692],{},[81,104438,553],{},[31,104440,104441],{},"重新运行程序。",[31,104443,104444,104445,104448],{},"观察 ",[81,104446,104447],{},"box qpos"," 和最终位置是否变化。",[31,104450,104451,104452,104454],{},"故意把 ",[81,104453,103536],{}," 名称改错，确认程序能报错。",[31,104456,102737,104457,104459,104460,102740,104462,104465],{},[81,104458,101446],{}," 的颜色 ",[81,104461,102358],{},[81,104463,104464],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[31,104467,102737,104468,82856,104470,102740,104473,104476,104477,104479],{},[81,104469,103303],{},[81,104471,104472],{},"pos",[81,104474,104475],{},"0 0 0.2","，观察 ",[81,104478,104424],{}," 如何变化。",[14,104481,102779],{"id":102778},[23,104483,104485],{"id":104484},"xml-error-schema-violation",[81,104486,104487],{},"XML Error: Schema violation",[35,104489,104490],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[23,104492,104494,81616,104496],{"id":104493},"mj_name2id-返回-1",[81,104495,104237],{},[81,104497,104241],{},[35,104499,104500,104501,104504],{},"说明名字没有找到。检查 XML 中 ",[81,104502,104503],{},"name=\"...\"","，并确认对象类型正确。",[23,104506,104507],{"id":104507},"物体不下落",[35,104509,102849],{},[28,104511,104512,104517,104522],{},[31,104513,104514,104515],{},"body 是否有 ",[81,104516,101946],{},[31,104518,104519,104520],{},"gravity 是否为 ",[81,104521,102915],{},[31,104523,104524,104525,104527],{},"body 是否被固定在 ",[81,104526,102167],{}," 中",[23,104529,104530],{"id":104530},"坐标看起来不符合预期",[35,104532,104533],{},"先区分两种坐标：",[612,104535,104536,104545],{},[615,104537,104538],{},[618,104539,104540,104543],{},[621,104541,104542],{"align":24065},"坐标",[621,104544,101026],{"align":24065},[659,104546,104547,104557],{},[618,104548,104549,104554],{},[664,104550,104551,104552],{"align":24065},"XML 里的 ",[81,104553,104472],{},[664,104555,104556],{"align":24065},"相对父 body 的局部坐标",[618,104558,104559,104565],{},[664,104560,104561,25306,104563],{"align":24065},[81,104562,101405],{},[81,104564,104318],{},[664,104566,104567],{"align":24065},"仿真更新后的世界坐标",[35,104569,104570,104571,104573,104574,82865,104577,104579],{},"如果你修改了 ",[81,104572,101396],{},"，但还没调用 ",[81,104575,104576],{},"mj_forward",[81,104578,101541],{},"，世界坐标可能还没有更新。",[14,104581,102933],{"id":102932},[35,104583,104584],{},"MJCF 建模先掌握四件事：",[28,104586,104587,104592,104597,104602],{},[31,104588,104589,104591],{},[81,104590,52127],{}," 表示刚体层级。",[31,104593,104594,104596],{},[81,104595,101446],{}," 表示形状、碰撞和质量。",[31,104598,104599,104601],{},[81,104600,103282],{}," 决定 body 能不能动、怎么动。",[31,104603,104604,104606],{},[81,104605,103536],{}," 用来标记关键点，方便 Python 读取位置。",[35,104608,104609],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[389,104611,104612],{},"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":66,"searchDepth":98,"depth":98,"links":104614},[104615,104616,104617,104623,104627,104628,104629,104636],{"id":100972,"depth":98,"text":100973},{"id":101095,"depth":98,"text":101096},{"id":101370,"depth":98,"text":101371,"children":104618},[104619,104620,104621,104622],{"id":103286,"depth":70,"text":103286},{"id":103400,"depth":70,"text":103400},{"id":103426,"depth":70,"text":103427},{"id":103530,"depth":70,"text":103531},{"id":101578,"depth":98,"text":101579,"children":104624},[104625,104626],{"id":101898,"depth":70,"text":101898},{"id":102034,"depth":70,"text":102034},{"id":102641,"depth":98,"text":102642},{"id":102673,"depth":98,"text":102674},{"id":102778,"depth":98,"text":102779,"children":104630},[104631,104632,104634,104635],{"id":104484,"depth":70,"text":104487},{"id":104493,"depth":70,"text":104633},"mj_name2id 返回 -1",{"id":104507,"depth":70,"text":104507},{"id":104530,"depth":70,"text":104530},{"id":102932,"depth":98,"text":102933},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102980,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104643,"title":104644,"body":104645,"description":66,"extension":401,"meta":106140,"navigation":403,"path":106141,"seo":106142,"stem":106143,"__hash__":106144},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104646,"toc":106112},[104647,104650,104652,104655,104658,104696,104699,104705,104708,104710,104712,104739,104741,104755,104757,104798,104800,104824,104826,104829,104838,104847,104850,104859,104867,104876,104879,104889,104892,104944,104951,104957,104965,105013,105016,105035,105038,105046,105050,105059,105092,105094,105442,105444,105456,105458,105469,105471,105474,105495,105501,105504,105529,105539,105542,105550,105553,105556,105577,105588,105590,105610,105613,105634,105643,105662,105668,105693,105696,105710,105717,105741,105744,105752,105761,105777,105789,105797,105806,105808,105811,105835,105840,105843,105865,105867,105906,105908,105915,105917,105925,105928,105931,105943,105984,105991,106002,106009,106012,106061,106064,106067,106073,106075,106080,106106,106109],[10,104648,104644],{"id":104649},"_3python-控制接口读取状态与推进仿真",[14,104651,100973],{"id":100972},[35,104653,104654],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[35,104656,104657],{},"你将学习:",[28,104659,104660,104665,104670,104674,104679,104690],{},[31,104661,104662],{},[81,104663,104664],{},"MjModel.from_xml_string",[31,104666,104667],{},[81,104668,104669],{},"MjData(model)",[31,104671,104672],{},[81,104673,101541],{},[31,104675,104676],{},[81,104677,104678],{},"mj_resetData",[31,104680,104681,104682,687,104684,687,104687],{},"读取 ",[81,104683,104356],{},[81,104685,104686],{},"qvel",[81,104688,104689],{},"ctrl",[31,104691,104692,104693],{},"使用 ",[81,104694,104695],{},"model.opt.timestep",[35,104697,104698],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[75,104700,104703],{"className":104701,"code":104702,"language":5516,"meta":66},[5514],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[81,104704,104702],{"__ignoreMap":66},[35,104706,104707],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104709,101096],{"id":101095},[35,104711,101099],{},[75,104713,104715],{"className":24151,"code":104714,"language":24153,"meta":66,"style":66},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[81,104716,104717],{"__ignoreMap":66},[84,104718,104719,104721,104723,104725,104727,104730,104732,104734,104736],{"class":86,"line":87},[84,104720,24905],{"class":90},[84,104722,26643],{"class":104},[84,104724,24163],{"class":104},[84,104726,26728],{"class":94},[84,104728,104729],{"class":104}," python3",[84,104731,101124],{"class":104},[84,104733,102827],{"class":104},[84,104735,101140],{"class":104},[84,104737,104738],{"class":104}," glfw\n",[35,104740,103145],{},[75,104742,104743],{"className":24151,"code":101245,"language":24153,"meta":66,"style":66},[81,104744,104745],{"__ignoreMap":66},[84,104746,104747,104749,104751,104753],{"class":86,"line":87},[84,104748,24160],{"class":90},[84,104750,24163],{"class":104},[84,104752,101256],{"class":104},[84,104754,101259],{"class":104},[35,104756,103162],{},[75,104758,104760],{"className":24151,"code":104759,"language":24153,"meta":66,"style":66},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[81,104761,104762,104779,104788],{"__ignoreMap":66},[84,104763,104764,104766,104768,104770,104773,104775,104777],{"class":86,"line":87},[84,104765,30657],{"class":90},[84,104767,29503],{"class":104},[84,104769,25443],{"class":94},[84,104771,104772],{"class":104}," mujoco-python-api",[84,104774,101301],{"class":104},[84,104776,101304],{"class":94},[84,104778,101307],{"class":94},[84,104780,104781,104783,104785],{"class":86,"line":98},[84,104782,30657],{"class":90},[84,104784,101314],{"class":104},[84,104786,104787],{"class":104}," mujoco-python-api\n",[84,104789,104790,104792,104794,104796],{"class":86,"line":70},[84,104791,24160],{"class":90},[84,104793,24163],{"class":104},[84,104795,101256],{"class":104},[84,104797,101259],{"class":104},[35,104799,101330],{},[28,104801,104802,104809,104818],{},[31,104803,104804,101344,104806,104808],{},[81,104805,101001],{},[81,104807,101006],{}," 是官方 Python bindings 的类名。",[31,104810,104811,104812,104815,104816,28712],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[81,104813,104814],{},"mjModel"," 在 Python 中是 ",[81,104817,101035],{},[31,104819,104820,104821,28712],{},"不要使用 ",[81,104822,104823],{},"sim = mujoco_py.MjSim(...)",[14,104825,101371],{"id":101370},[35,104827,104828],{},"仿真推进核心代码:",[75,104830,104832],{"className":30705,"code":104831,"language":30707,"meta":66,"style":66},"mujoco.mj_step(model, data)\n",[81,104833,104834],{"__ignoreMap":66},[84,104835,104836],{"class":86,"line":87},[84,104837,104831],{"class":477},[35,104839,104840,104841,687,104843,687,104845,28712],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[81,104842,101396],{},[81,104844,101399],{},[81,104846,101393],{},[35,104848,104849],{},"重置仿真:",[75,104851,104853],{"className":30705,"code":104852,"language":30707,"meta":66,"style":66},"mujoco.mj_resetData(model, data)\n",[81,104854,104855],{"__ignoreMap":66},[84,104856,104857],{"class":86,"line":87},[84,104858,104852],{"class":477},[35,104860,104861,104862,82865,104864,104866],{},"如果手动修改了 ",[81,104863,101396],{},[81,104865,101399],{},"，通常应调用:",[75,104868,104870],{"className":30705,"code":104869,"language":30707,"meta":66,"style":66},"mujoco.mj_forward(model, data)\n",[81,104871,104872],{"__ignoreMap":66},[84,104873,104874],{"class":86,"line":87},[84,104875,104869],{"class":477},[35,104877,104878],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[23,104880,104882,687,104884,687,104886,104888],{"id":104881},"qposqvelctrl-是什么",[81,104883,104356],{},[81,104885,104686],{},[81,104887,104689],{}," 是什么",[35,104890,104891],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[612,104893,104894,104906],{},[615,104895,104896],{},[618,104897,104898,104901,104903],{},[621,104899,104900],{"align":24065},"字段",[621,104902,101026],{"align":24065},[621,104904,104905],{"align":24065},"谁来修改",[659,104907,104908,104920,104932],{},[618,104909,104910,104914,104917],{},[664,104911,104912],{"align":24065},[81,104913,101396],{},[664,104915,104916],{"align":24065},"广义位置，例如小车位置、关节角、自由物体位置姿态",[664,104918,104919],{"align":24065},"MuJoCo 更新，也可以手动设置初始状态",[618,104921,104922,104926,104929],{},[664,104923,104924],{"align":24065},[81,104925,101399],{},[664,104927,104928],{"align":24065},"广义速度，例如小车速度、关节角速度",[664,104930,104931],{"align":24065},"MuJoCo 更新，也可以手动清零",[618,104933,104934,104938,104941],{},[664,104935,104936],{"align":24065},[81,104937,101402],{},[664,104939,104940],{"align":24065},"actuator 的控制输入",[664,104942,104943],{"align":24065},"主要由你的控制代码写入",[35,104945,9354,104946,101344,104948,104950],{},[81,104947,104356],{},[81,104949,104686],{}," 不一定同维。自由刚体就是典型例子：",[75,104952,104955],{"className":104953,"code":104954,"language":5516,"meta":66},[5514],"freejoint: qpos 7 维，qvel 6 维\n",[81,104956,104954],{"__ignoreMap":66},[23,104958,104960,101344,104962,104964],{"id":104959},"mj_step-和-mj_forward-的区别",[81,104961,101541],{},[81,104963,104576],{}," 的区别",[612,104966,104967,104980],{},[615,104968,104969],{},[618,104970,104971,104974,104977],{},[621,104972,104973],{"align":24065},"函数",[621,104975,104976],{"align":24065},"是否推进时间",[621,104978,104979],{"align":24065},"什么时候用",[659,104981,104982,104995],{},[618,104983,104984,104989,104992],{},[664,104985,104986],{"align":24065},[81,104987,104988],{},"mj_step(model, data)",[664,104990,104991],{"align":24065},"是",[664,104993,104994],{"align":24065},"正常仿真循环，每调用一次前进一步",[618,104996,104997,105002,105005],{},[664,104998,104999],{"align":24065},[81,105000,105001],{},"mj_forward(model, data)",[664,105003,105004],{"align":24065},"否",[664,105006,105007,105008,687,105010,105012],{"align":24065},"手动改了 ",[81,105009,104356],{},[81,105011,104686],{}," 后，刷新派生量",[35,105014,105015],{},"例如你写：",[75,105017,105019],{"className":30705,"code":105018,"language":30707,"meta":66,"style":66},"data.qpos[2] = 2.0\n",[81,105020,105021],{"__ignoreMap":66},[84,105022,105023,105026,105028,105030,105032],{"class":86,"line":87},[84,105024,105025],{"class":477},"data.qpos[",[84,105027,553],{"class":94},[84,105029,4772],{"class":477},[84,105031,523],{"class":473},[84,105033,105034],{"class":94}," 2.0\n",[35,105036,105037],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[75,105039,105040],{"className":30705,"code":104869,"language":30707,"meta":66,"style":66},[81,105041,105042],{"__ignoreMap":66},[84,105043,105044],{"class":86,"line":87},[84,105045,104869],{"class":477},[23,105047,105049],{"id":105048},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[35,105051,105052,105055,105056,105058],{},[81,105053,105054],{},"mujoco.mj_resetData(model, data)"," 会把 ",[81,105057,33728],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[75,105060,105062],{"className":30705,"code":105061,"language":30707,"meta":66,"style":66},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[81,105063,105064,105068,105078,105088],{"__ignoreMap":66},[84,105065,105066],{"class":86,"line":87},[84,105067,104852],{"class":477},[84,105069,105070,105073,105075],{"class":86,"line":98},[84,105071,105072],{"class":477},"data.qpos[:] ",[84,105074,523],{"class":473},[84,105076,105077],{"class":477}," random_qpos\n",[84,105079,105080,105083,105085],{"class":86,"line":70},[84,105081,105082],{"class":477},"data.qvel[:] ",[84,105084,523],{"class":473},[84,105086,105087],{"class":94}," 0.0\n",[84,105089,105090],{"class":86,"line":120},[84,105091,104869],{"class":477},[14,105093,101579],{"id":101578},[75,105095,105097],{"className":30705,"code":105096,"language":30707,"meta":66,"style":66},"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",[81,105098,105099,105105,105115,105119,105123,105131,105136,105140,105144,105148,105153,105157,105162,105167,105172,105176,105180,105184,105188,105192,105196,105215,105222,105234,105245,105261,105277,105281,105285,105297,105309,105317,105321,105332,105336,105352,105356,105360,105369,105373,105378,105387,105391,105404,105409,105418,105422,105426,105438],{"__ignoreMap":66},[84,105100,105101,105103],{"class":86,"line":87},[84,105102,30719],{"class":473},[84,105104,101627],{"class":477},[84,105106,105107,105109,105111,105113],{"class":86,"line":98},[84,105108,30719],{"class":473},[84,105110,31707],{"class":477},[84,105112,31710],{"class":473},[84,105114,31713],{"class":477},[84,105116,105117],{"class":86,"line":70},[84,105118,2729],{"emptyLinePlaceholder":403},[84,105120,105121],{"class":86,"line":120},[84,105122,2729],{"emptyLinePlaceholder":403},[84,105124,105125,105127,105129],{"class":86,"line":131},[84,105126,101640],{"class":94},[84,105128,13893],{"class":473},[84,105130,101645],{"class":104},[84,105132,105133],{"class":86,"line":145},[84,105134,105135],{"class":104},"\u003Cmujoco model=\"state_api\">\n",[84,105137,105138],{"class":86,"line":156},[84,105139,101655],{"class":104},[84,105141,105142],{"class":86,"line":164},[84,105143,2729],{"emptyLinePlaceholder":403},[84,105145,105146],{"class":86,"line":175},[84,105147,101664],{"class":104},[84,105149,105150],{"class":86,"line":185},[84,105151,105152],{"class":104},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[84,105154,105155],{"class":86,"line":195},[84,105156,2729],{"emptyLinePlaceholder":403},[84,105158,105159],{"class":86,"line":206},[84,105160,105161],{"class":104},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[84,105163,105164],{"class":86,"line":217},[84,105165,105166],{"class":104},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[84,105168,105169],{"class":86,"line":227},[84,105170,105171],{"class":104},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[84,105173,105174],{"class":86,"line":238},[84,105175,101693],{"class":104},[84,105177,105178],{"class":86,"line":249},[84,105179,101698],{"class":104},[84,105181,105182],{"class":86,"line":262},[84,105183,101703],{"class":104},[84,105185,105186],{"class":86,"line":273},[84,105187,96024],{"class":104},[84,105189,105190],{"class":86,"line":283},[84,105191,2729],{"emptyLinePlaceholder":403},[84,105193,105194],{"class":86,"line":294},[84,105195,2729],{"emptyLinePlaceholder":403},[84,105197,105198,105200,105203,105206,105208,105211,105213],{"class":86,"line":2028},[84,105199,32274],{"class":473},[84,105201,105202],{"class":90}," print_state",[84,105204,105205],{"class":477},"(prefix: ",[84,105207,1643],{"class":94},[84,105209,105210],{"class":477},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[84,105212,96012],{"class":94},[84,105214,4068],{"class":477},[84,105216,105217,105219],{"class":86,"line":2057},[84,105218,31626],{"class":94},[84,105220,105221],{"class":477},"(prefix)\n",[84,105223,105224,105226,105228,105231],{"class":86,"line":2062},[84,105225,31626],{"class":94},[84,105227,478],{"class":477},[84,105229,105230],{"class":104},"\"  timestep:\"",[84,105232,105233],{"class":477},", model.opt.timestep)\n",[84,105235,105236,105238,105240,105243],{"class":86,"line":2079},[84,105237,31626],{"class":94},[84,105239,478],{"class":477},[84,105241,105242],{"class":104},"\"  time:\"",[84,105244,101804],{"class":477},[84,105246,105247,105249,105251,105254,105257,105259],{"class":86,"line":2084},[84,105248,31626],{"class":94},[84,105250,478],{"class":477},[84,105252,105253],{"class":104},"\"  qpos:\"",[84,105255,105256],{"class":477},", np.round(data.qpos.copy(), ",[84,105258,140],{"class":94},[84,105260,30824],{"class":477},[84,105262,105263,105265,105267,105270,105273,105275],{"class":86,"line":2089},[84,105264,31626],{"class":94},[84,105266,478],{"class":477},[84,105268,105269],{"class":104},"\"  qvel:\"",[84,105271,105272],{"class":477},", np.round(data.qvel.copy(), ",[84,105274,140],{"class":94},[84,105276,30824],{"class":477},[84,105278,105279],{"class":86,"line":2094},[84,105280,2729],{"emptyLinePlaceholder":403},[84,105282,105283],{"class":86,"line":2108},[84,105284,2729],{"emptyLinePlaceholder":403},[84,105286,105287,105289,105291,105293,105295],{"class":86,"line":2113},[84,105288,32274],{"class":473},[84,105290,2302],{"class":90},[84,105292,101724],{"class":477},[84,105294,96012],{"class":94},[84,105296,4068],{"class":477},[84,105298,105299,105301,105303,105305,105307],{"class":86,"line":2906},[84,105300,101733],{"class":477},[84,105302,523],{"class":473},[84,105304,101738],{"class":477},[84,105306,101640],{"class":94},[84,105308,484],{"class":477},[84,105310,105311,105313,105315],{"class":86,"line":2920},[84,105312,101747],{"class":477},[84,105314,523],{"class":473},[84,105316,101752],{"class":477},[84,105318,105319],{"class":86,"line":2928},[84,105320,2729],{"emptyLinePlaceholder":403},[84,105322,105323,105326,105329],{"class":86,"line":2933},[84,105324,105325],{"class":477},"    print_state(",[84,105327,105328],{"class":104},"\"initial\"",[84,105330,105331],{"class":477},", model, data)\n",[84,105333,105334],{"class":86,"line":2939},[84,105335,2729],{"emptyLinePlaceholder":403},[84,105337,105338,105340,105342,105344,105346,105348,105350],{"class":86,"line":2945},[84,105339,3530],{"class":473},[84,105341,101827],{"class":477},[84,105343,26371],{"class":473},[84,105345,32770],{"class":94},[84,105347,478],{"class":477},[84,105349,1129],{"class":94},[84,105351,31113],{"class":477},[84,105353,105354],{"class":86,"line":2950},[84,105355,101842],{"class":477},[84,105357,105358],{"class":86,"line":8277},[84,105359,2729],{"emptyLinePlaceholder":403},[84,105361,105362,105364,105367],{"class":86,"line":8301},[84,105363,105325],{"class":477},[84,105365,105366],{"class":104},"\"after 50 steps\"",[84,105368,105331],{"class":477},[84,105370,105371],{"class":86,"line":8306},[84,105372,2729],{"emptyLinePlaceholder":403},[84,105374,105375],{"class":86,"line":8312},[84,105376,105377],{"class":477},"    mujoco.mj_resetData(model, data)\n",[84,105379,105380,105382,105385],{"class":86,"line":8339},[84,105381,105325],{"class":477},[84,105383,105384],{"class":104},"\"after reset\"",[84,105386,105331],{"class":477},[84,105388,105389],{"class":86,"line":8344},[84,105390,2729],{"emptyLinePlaceholder":403},[84,105392,105393,105396,105398,105400,105402],{"class":86,"line":8350},[84,105394,105395],{"class":477},"    data.qpos[",[84,105397,553],{"class":94},[84,105399,4772],{"class":477},[84,105401,523],{"class":473},[84,105403,105034],{"class":94},[84,105405,105406],{"class":86,"line":8362},[84,105407,105408],{"class":477},"    mujoco.mj_forward(model, data)\n",[84,105410,105411,105413,105416],{"class":86,"line":8374},[84,105412,105325],{"class":477},[84,105414,105415],{"class":104},"\"after manual qpos edit\"",[84,105417,105331],{"class":477},[84,105419,105420],{"class":86,"line":8386},[84,105421,2729],{"emptyLinePlaceholder":403},[84,105423,105424],{"class":86,"line":10045},[84,105425,2729],{"emptyLinePlaceholder":403},[84,105427,105428,105430,105432,105434,105436],{"class":86,"line":10070},[84,105429,1871],{"class":473},[84,105431,31547],{"class":94},[84,105433,101885],{"class":473},[84,105435,101888],{"class":104},[84,105437,4068],{"class":477},[84,105439,105440],{"class":86,"line":10093},[84,105441,101895],{"class":477},[35,105443,103896],{},[75,105445,105447],{"className":24151,"code":105446,"language":24153,"meta":66,"style":66},"touch ch3_python_state.py\n",[81,105448,105449],{"__ignoreMap":66},[84,105450,105451,105453],{"class":86,"line":87},[84,105452,101609],{"class":90},[84,105454,105455],{"class":104}," ch3_python_state.py\n",[35,105457,102627],{},[75,105459,105461],{"className":24151,"code":105460,"language":24153,"meta":66,"style":66},"python ch3_python_state.py\n",[81,105462,105463],{"__ignoreMap":66},[84,105464,105465,105467],{"class":86,"line":87},[84,105466,30707],{"class":90},[84,105468,105455],{"class":104},[23,105470,101898],{"id":101898},[35,105472,105473],{},"打印状态的函数：",[75,105475,105477],{"className":30705,"code":105476,"language":30707,"meta":66,"style":66},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[81,105478,105479],{"__ignoreMap":66},[84,105480,105481,105483,105485,105487,105489,105491,105493],{"class":86,"line":87},[84,105482,32274],{"class":473},[84,105484,105202],{"class":90},[84,105486,105205],{"class":477},[84,105488,1643],{"class":94},[84,105490,105210],{"class":477},[84,105492,96012],{"class":94},[84,105494,4068],{"class":477},[35,105496,105497,105498,105500],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[81,105499,33728],{}," 里发生了什么。",[35,105502,105503],{},"推进 50 步：",[75,105505,105507],{"className":30705,"code":105506,"language":30707,"meta":66,"style":66},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[81,105508,105509,105525],{"__ignoreMap":66},[84,105510,105511,105513,105515,105517,105519,105521,105523],{"class":86,"line":87},[84,105512,3354],{"class":473},[84,105514,101827],{"class":477},[84,105516,26371],{"class":473},[84,105518,32770],{"class":94},[84,105520,478],{"class":477},[84,105522,1129],{"class":94},[84,105524,31113],{"class":477},[84,105526,105527],{"class":86,"line":98},[84,105528,102025],{"class":477},[35,105530,105531,105532,105535,105536,105538],{},"由于 ",[81,105533,105534],{},"timestep=0.01","，所以 50 步后时间约为 ",[81,105537,35656],{}," 秒。",[35,105540,105541],{},"重置：",[75,105543,105544],{"className":30705,"code":104852,"language":30707,"meta":66,"style":66},[81,105545,105546],{"__ignoreMap":66},[84,105547,105548],{"class":86,"line":87},[84,105549,104852],{"class":477},[35,105551,105552],{},"这会把时间、位置、速度恢复到初始状态。",[35,105554,105555],{},"手动改高度：",[75,105557,105559],{"className":30705,"code":105558,"language":30707,"meta":66,"style":66},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[81,105560,105561,105573],{"__ignoreMap":66},[84,105562,105563,105565,105567,105569,105571],{"class":86,"line":87},[84,105564,105025],{"class":477},[84,105566,553],{"class":94},[84,105568,4772],{"class":477},[84,105570,523],{"class":473},[84,105572,105034],{"class":94},[84,105574,105575],{"class":86,"line":98},[84,105576,104869],{"class":477},[35,105578,105579,105580,105583,105584,105587],{},"这个例子里 ",[81,105581,105582],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[81,105585,105586],{},"2.0"," 表示把小球放到更高的位置。",[23,105589,102034],{"id":102034},[75,105591,105592],{"className":30705,"code":105476,"language":30707,"meta":66,"style":66},[81,105593,105594],{"__ignoreMap":66},[84,105595,105596,105598,105600,105602,105604,105606,105608],{"class":86,"line":87},[84,105597,32274],{"class":473},[84,105599,105202],{"class":90},[84,105601,105205],{"class":477},[84,105603,1643],{"class":94},[84,105605,105210],{"class":477},[84,105607,96012],{"class":94},[84,105609,4068],{"class":477},[35,105611,105612],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[28,105614,105615,105624,105629],{},[31,105616,105617,105620,105621,105623],{},[81,105618,105619],{},"prefix","：一段文字，比如 ",[81,105622,105328],{},"，用来说明现在打印的是哪个阶段。",[31,105625,105626,105628],{},[81,105627,102411],{},"：MuJoCo 模型。",[31,105630,105631,105633],{},[81,105632,33728],{},"：MuJoCo 当前状态。",[35,105635,105636,687,105639,105642],{},[81,105637,105638],{},"prefix: str",[81,105640,105641],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[75,105644,105646],{"className":30705,"code":105645,"language":30707,"meta":66,"style":66},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[81,105647,105648],{"__ignoreMap":66},[84,105649,105650,105652,105654,105656,105658,105660],{"class":86,"line":87},[84,105651,30742],{"class":94},[84,105653,478],{"class":477},[84,105655,105253],{"class":104},[84,105657,105256],{"class":477},[84,105659,140],{"class":94},[84,105661,30824],{"class":477},[35,105663,105664,105667],{},[81,105665,105666],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[75,105669,105671],{"className":30705,"code":105670,"language":30707,"meta":66,"style":66},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[81,105672,105673,105685],{"__ignoreMap":66},[84,105674,105675,105677,105679,105681,105683],{"class":86,"line":87},[84,105676,101960],{"class":477},[84,105678,523],{"class":473},[84,105680,101738],{"class":477},[84,105682,101640],{"class":94},[84,105684,484],{"class":477},[84,105686,105687,105689,105691],{"class":86,"line":98},[84,105688,101984],{"class":477},[84,105690,523],{"class":473},[84,105692,101752],{"class":477},[35,105694,105695],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[75,105697,105699],{"className":30705,"code":105698,"language":30707,"meta":66,"style":66},"print_state(\"initial\", model, data)\n",[81,105700,105701],{"__ignoreMap":66},[84,105702,105703,105706,105708],{"class":86,"line":87},[84,105704,105705],{"class":477},"print_state(",[84,105707,105328],{"class":104},[84,105709,105331],{"class":477},[35,105711,105712,105713,105716],{},"调用刚才定义的 ",[81,105714,105715],{},"print_state"," 函数，打印初始状态。",[75,105718,105719],{"className":30705,"code":105506,"language":30707,"meta":66,"style":66},[81,105720,105721,105737],{"__ignoreMap":66},[84,105722,105723,105725,105727,105729,105731,105733,105735],{"class":86,"line":87},[84,105724,3354],{"class":473},[84,105726,101827],{"class":477},[84,105728,26371],{"class":473},[84,105730,32770],{"class":94},[84,105732,478],{"class":477},[84,105734,1129],{"class":94},[84,105736,31113],{"class":477},[84,105738,105739],{"class":86,"line":98},[84,105740,102025],{"class":477},[35,105742,105743],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[75,105745,105746],{"className":30705,"code":104852,"language":30707,"meta":66,"style":66},[81,105747,105748],{"__ignoreMap":66},[84,105749,105750],{"class":86,"line":87},[84,105751,104852],{"class":477},[35,105753,105754,105755,105757,105758,105760],{},"重置 ",[81,105756,33728],{},"。注意它不会重新创建 ",[81,105759,102411],{},"，因为模型结构没有变，只是状态回到初始值。",[75,105762,105763],{"className":30705,"code":105018,"language":30707,"meta":66,"style":66},[81,105764,105765],{"__ignoreMap":66},[84,105766,105767,105769,105771,105773,105775],{"class":86,"line":87},[84,105768,105025],{"class":477},[84,105770,553],{"class":94},[84,105772,4772],{"class":477},[84,105774,523],{"class":473},[84,105776,105034],{"class":94},[35,105778,105779,105780,687,105783,687,105786,105788],{},"这行是“手动改状态”。在 freejoint 中，",[81,105781,105782],{},"qpos[0]",[81,105784,105785],{},"qpos[1]",[81,105787,105582],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[75,105790,105791],{"className":30705,"code":104869,"language":30707,"meta":66,"style":66},[81,105792,105793],{"__ignoreMap":66},[84,105794,105795],{"class":86,"line":87},[84,105796,104869],{"class":477},[35,105798,105799,105800,105802,105803,105805],{},"手动改完 ",[81,105801,104356],{}," 后，调用 ",[81,105804,104576],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105807,102642],{"id":102641},[35,105809,105810],{},"你会看到:",[28,105812,105813,105818,105823,105826],{},[31,105814,105815,105816],{},"初始时间为 ",[81,105817,666],{},[31,105819,105820,105821],{},"50 步后时间约为 ",[81,105822,35656],{},[31,105824,105825],{},"reset 后状态恢复",[31,105827,105828,105829,105832,105833],{},"手动修改 ",[81,105830,105831],{},"data.qpos[2]"," 后，小球高度变为 ",[81,105834,105586],{},[35,105836,105837,105839],{},[81,105838,105582],{}," 在这个例子中表示自由刚体的 z 坐标。",[35,105841,105842],{},"输出里可以重点看三件事：",[28,105844,105845,105853,105858],{},[31,105846,105847,105849,105850,105852],{},[81,105848,2716],{}," 是否随着 ",[81,105851,101541],{}," 增加。",[31,105854,105855,105857],{},[81,105856,104356],{}," 的 z 坐标是否因为下落而变化。",[31,105859,105860,105862,105863,28712],{},[81,105861,104678],{}," 后时间是否回到 ",[81,105864,666],{},[14,105866,102674],{"id":102673},[28,105868,105869,105875,105881,105887,105890,105899],{},[31,105870,105871,105872,28712],{},"修改 timestep 为 ",[81,105873,105874],{},"0.005",[31,105876,105877,105878,28712],{},"重新运行，检查 50 步后时间是否约为 ",[81,105879,105880],{},"0.25",[31,105882,105883,105884,28712],{},"修改重力为 ",[81,105885,105886],{},"0 0 -1.0",[31,105888,105889],{},"观察小球下降速度是否变慢。",[31,105891,102737,105892,102740,105895,105898],{},[81,105893,105894],{},"data.qpos[2] = 2.0",[81,105896,105897],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[31,105900,105901,105902,105905],{},"注释掉 ",[81,105903,105904],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105907,102779],{"id":102778},[23,105909,105911,105912,105914],{"id":105910},"修改-dataqpos-后位置没有更新","修改 ",[81,105913,101396],{}," 后位置没有更新",[35,105916,102788],{},[75,105918,105919],{"className":30705,"code":104869,"language":30707,"meta":66,"style":66},[81,105920,105921],{"__ignoreMap":66},[84,105922,105923],{"class":86,"line":87},[84,105924,104869],{"class":477},[23,105926,105927],{"id":105927},"数组维度看不懂",[35,105929,105930],{},"打印模型维度:",[75,105932,105934],{"className":30705,"code":105933,"language":30707,"meta":66,"style":66},"print(model.nq, model.nv, model.nu)\n",[81,105935,105936],{"__ignoreMap":66},[84,105937,105938,105940],{"class":86,"line":87},[84,105939,30742],{"class":94},[84,105941,105942],{"class":477},"(model.nq, model.nv, model.nu)\n",[612,105944,105945,105953],{},[615,105946,105947],{},[618,105948,105949,105951],{},[621,105950,104900],{"align":24065},[621,105952,101026],{"align":24065},[659,105954,105955,105965,105975],{},[618,105956,105957,105962],{},[664,105958,105959],{"align":24065},[81,105960,105961],{},"nq",[664,105963,105964],{"align":24065},"位置变量数量",[618,105966,105967,105972],{},[664,105968,105969],{"align":24065},[81,105970,105971],{},"nv",[664,105973,105974],{"align":24065},"速度变量数量",[618,105976,105977,105981],{},[664,105978,105979],{"align":24065},[81,105980,102488],{},[664,105982,105983],{"align":24065},"控制输入数量",[23,105985,105987,105988,105990],{"id":105986},"误以为-qpos-一定等于关节数","误以为 ",[81,105989,104356],{}," 一定等于关节数",[35,105992,105993,105994,82856,105996,105998,105999,106001],{},"不是。例如 ",[81,105995,101946],{},[81,105997,104356],{}," 是 7 维，但 ",[81,106000,104686],{}," 是 6 维。",[23,106003,106005,106006,106008],{"id":106004},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[81,106007,104356],{}," 的第几位",[35,106010,106011],{},"初学时可以先打印：",[75,106013,106015],{"className":30705,"code":106014,"language":30707,"meta":66,"style":66},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[81,106016,106017,106027,106037,106049],{"__ignoreMap":66},[84,106018,106019,106021,106023,106025],{"class":86,"line":87},[84,106020,30742],{"class":94},[84,106022,478],{"class":477},[84,106024,101765],{"class":104},[84,106026,101768],{"class":477},[84,106028,106029,106031,106033,106035],{"class":86,"line":98},[84,106030,30742],{"class":94},[84,106032,478],{"class":477},[84,106034,101777],{"class":104},[84,106036,101780],{"class":477},[84,106038,106039,106041,106043,106046],{"class":86,"line":70},[84,106040,30742],{"class":94},[84,106042,478],{"class":477},[84,106044,106045],{"class":104},"\"qpos:\"",[84,106047,106048],{"class":477},", data.qpos)\n",[84,106050,106051,106053,106055,106058],{"class":86,"line":120},[84,106052,30742],{"class":94},[84,106054,478],{"class":477},[84,106056,106057],{"class":104},"\"qvel:\"",[84,106059,106060],{"class":477},", data.qvel)\n",[35,106062,106063],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[23,106065,106066],{"id":106066},"仿真结果每次都一样",[35,106068,106069,106070,106072],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[81,106071,104356],{},"、目标点或控制输入。",[14,106074,102933],{"id":102932},[35,106076,106077,106078,24947],{},"Python 控制 MuJoCo 的核心就是读写 ",[81,106079,33728],{},[28,106081,106082,106090,106095,106100],{},[31,106083,106084,106085,101344,106087,106089],{},"用 ",[81,106086,101396],{},[81,106088,101399],{}," 读取状态。",[31,106091,106084,106092,106094],{},[81,106093,101402],{}," 写入控制。",[31,106096,106084,106097,106099],{},[81,106098,101541],{}," 推进时间。",[31,106101,106102,106103,106105],{},"手动改状态后用 ",[81,106104,104576],{}," 刷新派生量。",[35,106107,106108],{},"理解这一章后，就可以进入关节和 actuator 控制。",[389,106110,106111],{},"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":66,"searchDepth":98,"depth":98,"links":106113},[106114,106115,106116,106123,106127,106128,106129,106139],{"id":100972,"depth":98,"text":100973},{"id":101095,"depth":98,"text":101096},{"id":101370,"depth":98,"text":101371,"children":106117},[106118,106120,106122],{"id":104881,"depth":70,"text":106119},"qpos、qvel、ctrl 是什么",{"id":104959,"depth":70,"text":106121},"mj_step 和 mj_forward 的区别",{"id":105048,"depth":70,"text":105049},{"id":101578,"depth":98,"text":101579,"children":106124},[106125,106126],{"id":101898,"depth":70,"text":101898},{"id":102034,"depth":70,"text":102034},{"id":102641,"depth":98,"text":102642},{"id":102673,"depth":98,"text":102674},{"id":102778,"depth":98,"text":102779,"children":106130},[106131,106133,106134,106136,106138],{"id":105910,"depth":70,"text":106132},"修改 data.qpos 后位置没有更新",{"id":105927,"depth":70,"text":105927},{"id":105986,"depth":70,"text":106135},"误以为 qpos 一定等于关节数",{"id":106004,"depth":70,"text":106137},"不知道某个元素在 qpos 的第几位",{"id":106066,"depth":70,"text":106066},{"id":102932,"depth":98,"text":102933},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104644,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106146,"title":106147,"body":106148,"description":66,"extension":401,"meta":107838,"navigation":403,"path":107839,"seo":107840,"stem":107841,"__hash__":107842},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106149,"toc":107814},[106150,106153,106155,106158,106160,106185,106188,106207,106210,106212,106214,106238,106240,106254,106256,106297,106299,106323,106325,106328,106362,106364,106377,106380,106448,106457,106461,106464,106498,106504,106507,106511,106550,106553,106573,106577,106620,106622,106651,106654,106660,106663,106665,107059,107061,107073,107075,107086,107088,107091,107120,107128,107131,107166,107169,107171,107179,107182,107184,107195,107205,107225,107228,107264,107276,107324,107343,107385,107398,107426,107431,107452,107462,107480,107483,107517,107520,107540,107543,107562,107568,107570,107573,107579,107585,107595,107598,107604,107613,107615,107661,107663,107669,107675,107678,107681,107701,107704,107710,107716,107718,107741,107744,107747,107756,107759,107797,107799,107802,107808,107811],[10,106151,106147],{"id":106152},"_4关节actuator-与力控制",[14,106154,100973],{"id":100972},[35,106156,106157],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[35,106159,104657],{},[28,106161,106162,106168,106173,106177,106182],{},[31,106163,106164,106167],{},[81,106165,106166],{},"hinge"," 关节",[31,106169,106170],{},[81,106171,106172],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[31,106174,106175],{},[81,106176,101402],{},[31,106178,106179],{},[81,106180,106181],{},"ctrlrange",[31,106183,106184],{},"读取关节角和角速度",[35,106186,106187],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[75,106189,106191],{"className":30705,"code":106190,"language":30707,"meta":66,"style":66},"data.ctrl[0] = ...\n",[81,106192,106193],{"__ignoreMap":66},[84,106194,106195,106198,106200,106202,106204],{"class":86,"line":87},[84,106196,106197],{"class":477},"data.ctrl[",[84,106199,666],{"class":94},[84,106201,4772],{"class":477},[84,106203,523],{"class":473},[84,106205,106206],{"class":94}," ...\n",[35,106208,106209],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106211,101096],{"id":101095},[35,106213,101099],{},[75,106215,106216],{"className":24151,"code":104714,"language":24153,"meta":66,"style":66},[81,106217,106218],{"__ignoreMap":66},[84,106219,106220,106222,106224,106226,106228,106230,106232,106234,106236],{"class":86,"line":87},[84,106221,24905],{"class":90},[84,106223,26643],{"class":104},[84,106225,24163],{"class":104},[84,106227,26728],{"class":94},[84,106229,104729],{"class":104},[84,106231,101124],{"class":104},[84,106233,102827],{"class":104},[84,106235,101140],{"class":104},[84,106237,104738],{"class":104},[35,106239,103145],{},[75,106241,106242],{"className":24151,"code":101245,"language":24153,"meta":66,"style":66},[81,106243,106244],{"__ignoreMap":66},[84,106245,106246,106248,106250,106252],{"class":86,"line":87},[84,106247,24160],{"class":90},[84,106249,24163],{"class":104},[84,106251,101256],{"class":104},[84,106253,101259],{"class":104},[35,106255,103162],{},[75,106257,106259],{"className":24151,"code":106258,"language":24153,"meta":66,"style":66},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[81,106260,106261,106278,106287],{"__ignoreMap":66},[84,106262,106263,106265,106267,106269,106272,106274,106276],{"class":86,"line":87},[84,106264,30657],{"class":90},[84,106266,29503],{"class":104},[84,106268,25443],{"class":94},[84,106270,106271],{"class":104}," mujoco-control",[84,106273,101301],{"class":104},[84,106275,101304],{"class":94},[84,106277,101307],{"class":94},[84,106279,106280,106282,106284],{"class":86,"line":98},[84,106281,30657],{"class":90},[84,106283,101314],{"class":104},[84,106285,106286],{"class":104}," mujoco-control\n",[84,106288,106289,106291,106293,106295],{"class":86,"line":70},[84,106290,24160],{"class":90},[84,106292,24163],{"class":104},[84,106294,101256],{"class":104},[84,106296,101259],{"class":104},[35,106298,101330],{},[28,106300,106301,106307,106314,106320],{},[31,106302,106303,106306],{},[81,106304,106305],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[31,106308,106309,106311,106312,28712],{},[81,106310,101402],{}," 长度等于 ",[81,106313,102484],{},[31,106315,82548,106316,106319],{},[81,106317,106318],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[31,106321,106322],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106324,101371],{"id":101370},[35,106326,106327],{},"关节决定 body 如何运动:",[75,106329,106331],{"className":53394,"code":106330,"language":53396,"meta":66,"style":66},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[81,106332,106333],{"__ignoreMap":66},[84,106334,106335,106337,106339,106341,106343,106346,106348,106350,106352,106355,106357,106360],{"class":86,"line":87},[84,106336,1383],{"class":477},[84,106338,103282],{"class":51627},[84,106340,15249],{"class":90},[84,106342,523],{"class":477},[84,106344,106345],{"class":104},"\"hinge\"",[84,106347,54150],{"class":90},[84,106349,523],{"class":477},[84,106351,106345],{"class":104},[84,106353,106354],{"class":90}," axis",[84,106356,523],{"class":477},[84,106358,106359],{"class":104},"\"0 1 0\"",[84,106361,101470],{"class":477},[35,106363,103378],{},[28,106365,106366,106371,106374],{},[31,106367,106368,106369],{},"名字是 ",[81,106370,106166],{},[31,106372,106373],{},"类型是旋转关节",[31,106375,106376],{},"绕 y 轴旋转",[35,106378,106379],{},"actuator 决定如何施加控制:",[75,106381,106383],{"className":53394,"code":106382,"language":53396,"meta":66,"style":66},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[81,106384,106385,106394,106440],{"__ignoreMap":66},[84,106386,106387,106389,106392],{"class":86,"line":87},[84,106388,1383],{"class":477},[84,106390,106391],{"class":51627},"actuator",[84,106393,51634],{"class":477},[84,106395,106396,106398,106401,106403,106405,106408,106411,106413,106415,106418,106420,106422,106425,106427,106430,106433,106435,106438],{"class":86,"line":98},[84,106397,52471],{"class":477},[84,106399,106400],{"class":51627},"motor",[84,106402,15249],{"class":90},[84,106404,523],{"class":477},[84,106406,106407],{"class":104},"\"hinge_motor\"",[84,106409,106410],{"class":90}," joint",[84,106412,523],{"class":477},[84,106414,106345],{"class":104},[84,106416,106417],{"class":90}," gear",[84,106419,523],{"class":477},[84,106421,4007],{"class":104},[84,106423,106424],{"class":90}," ctrlrange",[84,106426,523],{"class":477},[84,106428,106429],{"class":104},"\"-2 2\"",[84,106431,106432],{"class":90}," ctrllimited",[84,106434,523],{"class":477},[84,106436,106437],{"class":104},"\"true\"",[84,106439,101470],{"class":477},[84,106441,106442,106444,106446],{"class":86,"line":70},[84,106443,52112],{"class":477},[84,106445,106391],{"class":51627},[84,106447,51634],{"class":477},[35,106449,106450,106453,106454,28712],{},[81,106451,106452],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[81,106455,106456],{},"[-2, 2]",[23,106458,106460],{"id":106459},"joint-和-actuator-的关系","joint 和 actuator 的关系",[35,106462,106463],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[612,106465,106466,106476],{},[615,106467,106468],{},[618,106469,106470,106472,106474],{},[621,106471,26081],{"align":24065},[621,106473,103022],{"align":24065},[621,106475,101060],{"align":24065},[659,106477,106478,106488],{},[618,106479,106480,106482,106485],{},[664,106481,103282],{"align":24065},[664,106483,106484],{"align":24065},"定义能怎么动",[664,106486,106487],{"align":24065},"门轴允许门旋转",[618,106489,106490,106492,106495],{},[664,106491,106391],{"align":24065},[664,106493,106494],{"align":24065},"定义怎么施力或控制",[664,106496,106497],{"align":24065},"人推门、马达带动门",[35,106499,106500,106501,106503],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[81,106502,101402],{}," 主动控制它。",[35,106505,106506],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[23,106508,106510],{"id":106509},"hinge-joint","hinge joint",[75,106512,106514],{"className":53394,"code":106513,"language":53396,"meta":66,"style":66},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[81,106515,106516],{"__ignoreMap":66},[84,106517,106518,106520,106522,106524,106526,106528,106530,106532,106534,106536,106538,106540,106543,106545,106548],{"class":86,"line":87},[84,106519,1383],{"class":477},[84,106521,103282],{"class":51627},[84,106523,15249],{"class":90},[84,106525,523],{"class":477},[84,106527,106345],{"class":104},[84,106529,54150],{"class":90},[84,106531,523],{"class":477},[84,106533,106345],{"class":104},[84,106535,106354],{"class":90},[84,106537,523],{"class":477},[84,106539,106359],{"class":104},[84,106541,106542],{"class":90}," damping",[84,106544,523],{"class":477},[84,106546,106547],{"class":104},"\"0.1\"",[84,106549,101470],{"class":477},[35,106551,106552],{},"含义：",[28,106554,106555,106561,106567],{},[31,106556,106557,106560],{},[81,106558,106559],{},"type=\"hinge\"","：只能绕一个轴旋转。",[31,106562,106563,106566],{},[81,106564,106565],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[31,106568,106569,106572],{},[81,106570,106571],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[23,106574,106576],{"id":106575},"motor-actuator","motor actuator",[75,106578,106580],{"className":53394,"code":106579,"language":53396,"meta":66,"style":66},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[81,106581,106582],{"__ignoreMap":66},[84,106583,106584,106586,106588,106590,106592,106594,106596,106598,106600,106602,106604,106606,106608,106610,106612,106614,106616,106618],{"class":86,"line":87},[84,106585,1383],{"class":477},[84,106587,106400],{"class":51627},[84,106589,15249],{"class":90},[84,106591,523],{"class":477},[84,106593,106407],{"class":104},[84,106595,106410],{"class":90},[84,106597,523],{"class":477},[84,106599,106345],{"class":104},[84,106601,106417],{"class":90},[84,106603,523],{"class":477},[84,106605,4007],{"class":104},[84,106607,106424],{"class":90},[84,106609,523],{"class":477},[84,106611,106429],{"class":104},[84,106613,106432],{"class":90},[84,106615,523],{"class":477},[84,106617,106437],{"class":104},[84,106619,101470],{"class":477},[35,106621,106552],{},[28,106623,106624,106633,106639,106645],{},[31,106625,106626,106629,106630,106632],{},[81,106627,106628],{},"joint=\"hinge\"","：这个电机作用在名为 ",[81,106631,106166],{}," 的关节上。",[31,106634,106635,106638],{},[81,106636,106637],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[31,106640,106641,106644],{},[81,106642,106643],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[31,106646,106647,106650],{},[81,106648,106649],{},"ctrllimited=\"true\"","：启用控制范围限制。",[35,106652,106653],{},"简单理解：",[75,106655,106658],{"className":106656,"code":106657,"language":5516,"meta":66},[5514],"实际施加效果 ≈ data.ctrl[0] * gear\n",[81,106659,106657],{"__ignoreMap":66},[35,106661,106662],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106664,101579],{"id":101578},[75,106666,106668],{"className":30705,"code":106667,"language":30707,"meta":66,"style":66},"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",[81,106669,106670,106677,106681,106687,106697,106701,106705,106713,106718,106723,106727,106731,106736,106741,106745,106750,106755,106760,106765,106769,106773,106777,106782,106787,106792,106796,106800,106804,106808,106820,106832,106840,106844,106854,106864,106874,106878,106891,106904,106908,106925,106939,106974,106978,106982,106993,107008,107023,107035,107039,107043,107055],{"__ignoreMap":66},[84,106671,106672,106674],{"class":86,"line":87},[84,106673,30719],{"class":473},[84,106675,106676],{"class":477}," math\n",[84,106678,106679],{"class":86,"line":98},[84,106680,2729],{"emptyLinePlaceholder":403},[84,106682,106683,106685],{"class":86,"line":70},[84,106684,30719],{"class":473},[84,106686,101627],{"class":477},[84,106688,106689,106691,106693,106695],{"class":86,"line":120},[84,106690,30719],{"class":473},[84,106692,31707],{"class":477},[84,106694,31710],{"class":473},[84,106696,31713],{"class":477},[84,106698,106699],{"class":86,"line":131},[84,106700,2729],{"emptyLinePlaceholder":403},[84,106702,106703],{"class":86,"line":145},[84,106704,2729],{"emptyLinePlaceholder":403},[84,106706,106707,106709,106711],{"class":86,"line":156},[84,106708,101640],{"class":94},[84,106710,13893],{"class":473},[84,106712,101645],{"class":104},[84,106714,106715],{"class":86,"line":164},[84,106716,106717],{"class":104},"\u003Cmujoco model=\"one_link_motor\">\n",[84,106719,106720],{"class":86,"line":175},[84,106721,106722],{"class":104},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[84,106724,106725],{"class":86,"line":185},[84,106726,2729],{"emptyLinePlaceholder":403},[84,106728,106729],{"class":86,"line":195},[84,106730,101664],{"class":104},[84,106732,106733],{"class":86,"line":206},[84,106734,106735],{"class":104},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[84,106737,106738],{"class":86,"line":217},[84,106739,106740],{"class":104},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[84,106742,106743],{"class":86,"line":227},[84,106744,2729],{"emptyLinePlaceholder":403},[84,106746,106747],{"class":86,"line":238},[84,106748,106749],{"class":104},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[84,106751,106752],{"class":86,"line":249},[84,106753,106754],{"class":104},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[84,106756,106757],{"class":86,"line":262},[84,106758,106759],{"class":104},"        \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",[84,106761,106762],{"class":86,"line":273},[84,106763,106764],{"class":104},"      \u003C\u002Fbody>\n",[84,106766,106767],{"class":86,"line":283},[84,106768,101693],{"class":104},[84,106770,106771],{"class":86,"line":294},[84,106772,101698],{"class":104},[84,106774,106775],{"class":86,"line":2028},[84,106776,2729],{"emptyLinePlaceholder":403},[84,106778,106779],{"class":86,"line":2057},[84,106780,106781],{"class":104},"  \u003Cactuator>\n",[84,106783,106784],{"class":86,"line":2062},[84,106785,106786],{"class":104},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[84,106788,106789],{"class":86,"line":2079},[84,106790,106791],{"class":104},"  \u003C\u002Factuator>\n",[84,106793,106794],{"class":86,"line":2084},[84,106795,101703],{"class":104},[84,106797,106798],{"class":86,"line":2089},[84,106799,96024],{"class":104},[84,106801,106802],{"class":86,"line":2094},[84,106803,2729],{"emptyLinePlaceholder":403},[84,106805,106806],{"class":86,"line":2108},[84,106807,2729],{"emptyLinePlaceholder":403},[84,106809,106810,106812,106814,106816,106818],{"class":86,"line":2113},[84,106811,32274],{"class":473},[84,106813,2302],{"class":90},[84,106815,101724],{"class":477},[84,106817,96012],{"class":94},[84,106819,4068],{"class":477},[84,106821,106822,106824,106826,106828,106830],{"class":86,"line":2906},[84,106823,101733],{"class":477},[84,106825,523],{"class":473},[84,106827,101738],{"class":477},[84,106829,101640],{"class":94},[84,106831,484],{"class":477},[84,106833,106834,106836,106838],{"class":86,"line":2920},[84,106835,101747],{"class":477},[84,106837,523],{"class":473},[84,106839,101752],{"class":477},[84,106841,106842],{"class":86,"line":2928},[84,106843,2729],{"emptyLinePlaceholder":403},[84,106845,106846,106848,106850,106852],{"class":86,"line":2933},[84,106847,31626],{"class":94},[84,106849,478],{"class":477},[84,106851,101765],{"class":104},[84,106853,101768],{"class":477},[84,106855,106856,106858,106860,106862],{"class":86,"line":2939},[84,106857,31626],{"class":94},[84,106859,478],{"class":477},[84,106861,101777],{"class":104},[84,106863,101780],{"class":477},[84,106865,106866,106868,106870,106872],{"class":86,"line":2945},[84,106867,31626],{"class":94},[84,106869,478],{"class":477},[84,106871,101789],{"class":104},[84,106873,101792],{"class":477},[84,106875,106876],{"class":86,"line":2950},[84,106877,2729],{"emptyLinePlaceholder":403},[84,106879,106880,106882,106885,106887,106889],{"class":86,"line":8277},[84,106881,3430],{"class":473},[84,106883,106884],{"class":477}," model.nu ",[84,106886,21277],{"class":473},[84,106888,25446],{"class":94},[84,106890,4068],{"class":477},[84,106892,106893,106895,106897,106899,106902],{"class":86,"line":8301},[84,106894,103758],{"class":473},[84,106896,103761],{"class":94},[84,106898,478],{"class":477},[84,106900,106901],{"class":104},"\"expected exactly one actuator\"",[84,106903,484],{"class":477},[84,106905,106906],{"class":86,"line":8306},[84,106907,2729],{"emptyLinePlaceholder":403},[84,106909,106910,106912,106914,106916,106918,106920,106923],{"class":86,"line":8312},[84,106911,3530],{"class":473},[84,106913,31943],{"class":477},[84,106915,26371],{"class":473},[84,106917,32770],{"class":94},[84,106919,478],{"class":477},[84,106921,106922],{"class":94},"2000",[84,106924,31113],{"class":477},[84,106926,106927,106930,106932,106934,106936],{"class":86,"line":8339},[84,106928,106929],{"class":477},"        t ",[84,106931,523],{"class":473},[84,106933,31943],{"class":477},[84,106935,928],{"class":473},[84,106937,106938],{"class":477}," model.opt.timestep\n",[84,106940,106941,106944,106946,106948,106950,106953,106955,106958,106960,106962,106965,106967,106969,106971],{"class":86,"line":8344},[84,106942,106943],{"class":477},"        data.ctrl[",[84,106945,666],{"class":94},[84,106947,4772],{"class":477},[84,106949,523],{"class":473},[84,106951,106952],{"class":94}," 1.5",[84,106954,6847],{"class":473},[84,106956,106957],{"class":477}," math.sin(",[84,106959,105586],{"class":94},[84,106961,6847],{"class":473},[84,106963,106964],{"class":477}," math.pi ",[84,106966,928],{"class":473},[84,106968,62193],{"class":94},[84,106970,6847],{"class":473},[84,106972,106973],{"class":477}," t)\n",[84,106975,106976],{"class":86,"line":8350},[84,106977,101842],{"class":477},[84,106979,106980],{"class":86,"line":8362},[84,106981,2729],{"emptyLinePlaceholder":403},[84,106983,106984,106986,106988,106991],{"class":86,"line":8374},[84,106985,31626],{"class":94},[84,106987,478],{"class":477},[84,106989,106990],{"class":104},"\"time:\"",[84,106992,101804],{"class":477},[84,106994,106995,106997,106999,107002,107004,107006],{"class":86,"line":8386},[84,106996,31626],{"class":94},[84,106998,478],{"class":477},[84,107000,107001],{"class":104},"\"joint qpos:\"",[84,107003,105256],{"class":477},[84,107005,140],{"class":94},[84,107007,30824],{"class":477},[84,107009,107010,107012,107014,107017,107019,107021],{"class":86,"line":10045},[84,107011,31626],{"class":94},[84,107013,478],{"class":477},[84,107015,107016],{"class":104},"\"joint qvel:\"",[84,107018,105272],{"class":477},[84,107020,140],{"class":94},[84,107022,30824],{"class":477},[84,107024,107025,107027,107029,107032],{"class":86,"line":10070},[84,107026,31626],{"class":94},[84,107028,478],{"class":477},[84,107030,107031],{"class":104},"\"last ctrl:\"",[84,107033,107034],{"class":477},", data.ctrl.copy())\n",[84,107036,107037],{"class":86,"line":10093},[84,107038,2729],{"emptyLinePlaceholder":403},[84,107040,107041],{"class":86,"line":10117},[84,107042,2729],{"emptyLinePlaceholder":403},[84,107044,107045,107047,107049,107051,107053],{"class":86,"line":10122},[84,107046,1871],{"class":473},[84,107048,31547],{"class":94},[84,107050,101885],{"class":473},[84,107052,101888],{"class":104},[84,107054,4068],{"class":477},[84,107056,107057],{"class":86,"line":10127},[84,107058,101895],{"class":477},[35,107060,103896],{},[75,107062,107064],{"className":24151,"code":107063,"language":24153,"meta":66,"style":66},"touch ch4_joint_motor.py\n",[81,107065,107066],{"__ignoreMap":66},[84,107067,107068,107070],{"class":86,"line":87},[84,107069,101609],{"class":90},[84,107071,107072],{"class":104}," ch4_joint_motor.py\n",[35,107074,102627],{},[75,107076,107078],{"className":24151,"code":107077,"language":24153,"meta":66,"style":66},"python ch4_joint_motor.py\n",[81,107079,107080],{"__ignoreMap":66},[84,107081,107082,107084],{"class":86,"line":87},[84,107083,30707],{"class":90},[84,107085,107072],{"class":104},[23,107087,101898],{"id":101898},[35,107089,107090],{},"检查 actuator 数量：",[75,107092,107094],{"className":30705,"code":107093,"language":30707,"meta":66,"style":66},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[81,107095,107096,107108],{"__ignoreMap":66},[84,107097,107098,107100,107102,107104,107106],{"class":86,"line":87},[84,107099,1871],{"class":473},[84,107101,106884],{"class":477},[84,107103,21277],{"class":473},[84,107105,25446],{"class":94},[84,107107,4068],{"class":477},[84,107109,107110,107112,107114,107116,107118],{"class":86,"line":98},[84,107111,104221],{"class":473},[84,107113,103761],{"class":94},[84,107115,478],{"class":477},[84,107117,106901],{"class":104},[84,107119,484],{"class":477},[35,107121,107122,107124,107125,107127],{},[81,107123,102484],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[81,107126,101402],{}," 长度应该是 1。",[35,107129,107130],{},"产生正弦控制信号：",[75,107132,107134],{"className":30705,"code":107133,"language":30707,"meta":66,"style":66},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[81,107135,107136],{"__ignoreMap":66},[84,107137,107138,107140,107142,107144,107146,107148,107150,107152,107154,107156,107158,107160,107162,107164],{"class":86,"line":87},[84,107139,106197],{"class":477},[84,107141,666],{"class":94},[84,107143,4772],{"class":477},[84,107145,523],{"class":473},[84,107147,106952],{"class":94},[84,107149,6847],{"class":473},[84,107151,106957],{"class":477},[84,107153,105586],{"class":94},[84,107155,6847],{"class":473},[84,107157,106964],{"class":477},[84,107159,928],{"class":473},[84,107161,62193],{"class":94},[84,107163,6847],{"class":473},[84,107165,106973],{"class":477},[35,107167,107168],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[35,107170,101999],{},[75,107172,107173],{"className":30705,"code":104831,"language":30707,"meta":66,"style":66},[81,107174,107175],{"__ignoreMap":66},[84,107176,107177],{"class":86,"line":87},[84,107178,104831],{"class":477},[35,107180,107181],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[23,107183,102034],{"id":102034},[75,107185,107187],{"className":30705,"code":107186,"language":30707,"meta":66,"style":66},"import math\n",[81,107188,107189],{"__ignoreMap":66},[84,107190,107191,107193],{"class":86,"line":87},[84,107192,30719],{"class":473},[84,107194,106676],{"class":477},[35,107196,107197,107198,101344,107201,107204],{},"导入 Python 标准库里的数学模块。后面要用 ",[81,107199,107200],{},"math.sin",[81,107202,107203],{},"math.pi"," 生成周期变化的控制信号。",[75,107206,107207],{"className":30705,"code":104012,"language":30707,"meta":66,"style":66},[81,107208,107209,107215],{"__ignoreMap":66},[84,107210,107211,107213],{"class":86,"line":87},[84,107212,30719],{"class":473},[84,107214,101627],{"class":477},[84,107216,107217,107219,107221,107223],{"class":86,"line":98},[84,107218,30719],{"class":473},[84,107220,31707],{"class":477},[84,107222,31710],{"class":473},[84,107224,31713],{"class":477},[35,107226,107227],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[75,107229,107230],{"className":53394,"code":106513,"language":53396,"meta":66,"style":66},[81,107231,107232],{"__ignoreMap":66},[84,107233,107234,107236,107238,107240,107242,107244,107246,107248,107250,107252,107254,107256,107258,107260,107262],{"class":86,"line":87},[84,107235,1383],{"class":477},[84,107237,103282],{"class":51627},[84,107239,15249],{"class":90},[84,107241,523],{"class":477},[84,107243,106345],{"class":104},[84,107245,54150],{"class":90},[84,107247,523],{"class":477},[84,107249,106345],{"class":104},[84,107251,106354],{"class":90},[84,107253,523],{"class":477},[84,107255,106359],{"class":104},[84,107257,106542],{"class":90},[84,107259,523],{"class":477},[84,107261,106547],{"class":104},[84,107263,101470],{"class":477},[35,107265,107266,107267,107269,107270,107272,107273,107275],{},"这行定义关节。",[81,107268,106166],{}," 表示旋转关节。",[81,107271,106565],{}," 表示绕 y 轴旋转。",[81,107274,106571],{}," 表示有一点阻尼，运动不会完全无损耗。",[75,107277,107279],{"className":53394,"code":107278,"language":53396,"meta":66,"style":66},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[81,107280,107281],{"__ignoreMap":66},[84,107282,107283,107285,107287,107289,107291,107294,107296,107298,107301,107304,107306,107309,107311,107313,107315,107317,107319,107322],{"class":86,"line":87},[84,107284,1383],{"class":477},[84,107286,101446],{"class":51627},[84,107288,15249],{"class":90},[84,107290,523],{"class":477},[84,107292,107293],{"class":104},"\"link_geom\"",[84,107295,54150],{"class":90},[84,107297,523],{"class":477},[84,107299,107300],{"class":104},"\"capsule\"",[84,107302,107303],{"class":90}," fromto",[84,107305,523],{"class":477},[84,107307,107308],{"class":104},"\"0 0 0 0 0 0.5\"",[84,107310,101462],{"class":90},[84,107312,523],{"class":477},[84,107314,104104],{"class":104},[84,107316,102327],{"class":90},[84,107318,523],{"class":477},[84,107320,107321],{"class":104},"\"0.5\"",[84,107323,101470],{"class":477},[35,107325,107326,107327,107329,107330,107332,107333,107336,107337,28712,107340,107342],{},"这行定义摆杆的形状。",[81,107328,103491],{}," 是胶囊体，适合表示杆子。",[81,107331,103502],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[81,107334,107335],{},"(0,0,0)"," 延伸到 ",[81,107338,107339],{},"(0,0,0.5)",[81,107341,103496],{}," 是半径。",[75,107344,107345],{"className":53394,"code":106579,"language":53396,"meta":66,"style":66},[81,107346,107347],{"__ignoreMap":66},[84,107348,107349,107351,107353,107355,107357,107359,107361,107363,107365,107367,107369,107371,107373,107375,107377,107379,107381,107383],{"class":86,"line":87},[84,107350,1383],{"class":477},[84,107352,106400],{"class":51627},[84,107354,15249],{"class":90},[84,107356,523],{"class":477},[84,107358,106407],{"class":104},[84,107360,106410],{"class":90},[84,107362,523],{"class":477},[84,107364,106345],{"class":104},[84,107366,106417],{"class":90},[84,107368,523],{"class":477},[84,107370,4007],{"class":104},[84,107372,106424],{"class":90},[84,107374,523],{"class":477},[84,107376,106429],{"class":104},[84,107378,106432],{"class":90},[84,107380,523],{"class":477},[84,107382,106437],{"class":104},[84,107384,101470],{"class":477},[35,107386,107387,107388,107390,107391,107394,107395,107397],{},"这行定义电机。它作用在 ",[81,107389,106166],{}," 关节上。",[81,107392,107393],{},"gear"," 可以理解成放大倍数。",[81,107396,106181],{}," 限制控制输入范围。",[75,107399,107400],{"className":30705,"code":107093,"language":30707,"meta":66,"style":66},[81,107401,107402,107414],{"__ignoreMap":66},[84,107403,107404,107406,107408,107410,107412],{"class":86,"line":87},[84,107405,1871],{"class":473},[84,107407,106884],{"class":477},[84,107409,21277],{"class":473},[84,107411,25446],{"class":94},[84,107413,4068],{"class":477},[84,107415,107416,107418,107420,107422,107424],{"class":86,"line":98},[84,107417,104221],{"class":473},[84,107419,103761],{"class":94},[84,107421,478],{"class":477},[84,107423,106901],{"class":104},[84,107425,484],{"class":477},[35,107427,107428,107430],{},[81,107429,102484],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[75,107432,107434],{"className":30705,"code":107433,"language":30707,"meta":66,"style":66},"for step in range(2000):\n",[81,107435,107436],{"__ignoreMap":66},[84,107437,107438,107440,107442,107444,107446,107448,107450],{"class":86,"line":87},[84,107439,3354],{"class":473},[84,107441,31943],{"class":477},[84,107443,26371],{"class":473},[84,107445,32770],{"class":94},[84,107447,478],{"class":477},[84,107449,106922],{"class":94},[84,107451,31113],{"class":477},[35,107453,107454,107455,107457,107458,107461],{},"循环 2000 步。这里没有用 ",[81,107456,1465],{},"，而是用 ",[81,107459,107460],{},"step","，因为后面要用当前步数计算时间。",[75,107463,107465],{"className":30705,"code":107464,"language":30707,"meta":66,"style":66},"t = step * model.opt.timestep\n",[81,107466,107467],{"__ignoreMap":66},[84,107468,107469,107472,107474,107476,107478],{"class":86,"line":87},[84,107470,107471],{"class":477},"t ",[84,107473,523],{"class":473},[84,107475,31943],{"class":477},[84,107477,928],{"class":473},[84,107479,106938],{"class":477},[35,107481,107482],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[75,107484,107485],{"className":30705,"code":107133,"language":30707,"meta":66,"style":66},[81,107486,107487],{"__ignoreMap":66},[84,107488,107489,107491,107493,107495,107497,107499,107501,107503,107505,107507,107509,107511,107513,107515],{"class":86,"line":87},[84,107490,106197],{"class":477},[84,107492,666],{"class":94},[84,107494,4772],{"class":477},[84,107496,523],{"class":473},[84,107498,106952],{"class":94},[84,107500,6847],{"class":473},[84,107502,106957],{"class":477},[84,107504,105586],{"class":94},[84,107506,6847],{"class":473},[84,107508,106964],{"class":477},[84,107510,928],{"class":473},[84,107512,62193],{"class":94},[84,107514,6847],{"class":473},[84,107516,106973],{"class":477},[35,107518,107519],{},"这行给电机输入一个正弦波。拆开看：",[28,107521,107522,107528,107534],{},[31,107523,107524,107527],{},[81,107525,107526],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[31,107529,107530,107533],{},[81,107531,107532],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[31,107535,107536,107539],{},[81,107537,107538],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[35,107541,107542],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[75,107544,107546],{"className":30705,"code":107545,"language":30707,"meta":66,"style":66},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[81,107547,107548],{"__ignoreMap":66},[84,107549,107550,107552,107554,107556,107558,107560],{"class":86,"line":87},[84,107551,30742],{"class":94},[84,107553,478],{"class":477},[84,107555,107001],{"class":104},[84,107557,105256],{"class":477},[84,107559,140],{"class":94},[84,107561,30824],{"class":477},[35,107563,107564,107565,107567],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[81,107566,101396],{}," 只有一个数。",[14,107569,102642],{"id":102641},[35,107571,107572],{},"输出类似:",[75,107574,107577],{"className":107575,"code":107576,"language":5516,"meta":66},[5514],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[81,107578,107576],{"__ignoreMap":66},[35,107580,107581,107582,107584],{},"这里 ",[81,107583,106452],{}," 是电机输入。",[35,107586,107587,107590,107591,107594],{},[81,107588,107589],{},"joint qpos"," 是关节角度，单位通常是弧度。",[81,107592,107593],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[35,107596,107597],{},"角度单位提示：",[75,107599,107602],{"className":107600,"code":107601,"language":5516,"meta":66},[5514],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[81,107603,107601],{"__ignoreMap":66},[35,107605,107606,107607,107609,107610,107612],{},"如果你看到 ",[81,107608,104356],{}," 是 ",[81,107611,35656],{},"，大约就是 28.6 度。",[14,107614,102674],{"id":102673},[28,107616,107617,107624,107627,107634,107637,107645,107653],{},[31,107618,102737,107619,102740,107621,28712],{},[81,107620,106637],{},[81,107622,107623],{},"gear=\"5\"",[31,107625,107626],{},"重新运行，观察关节运动是否更剧烈。",[31,107628,102737,107629,102740,107631,28712],{},[81,107630,106181],{},[81,107632,107633],{},"-0.2 0.2",[31,107635,107636],{},"重新运行，观察控制能力是否变弱。",[31,107638,107639,107640,107642,107643,28712],{},"去掉 actuator，确认 ",[81,107641,102484],{}," 变成 ",[81,107644,666],{},[31,107646,102737,107647,102740,107649,107652],{},[81,107648,106571],{},[81,107650,107651],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[31,107654,102737,107655,102740,107657,107660],{},[81,107656,106565],{},[81,107658,107659],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107662,102779],{"id":102778},[23,107664,107666],{"id":107665},"indexerror-index-0-is-out-of-bounds",[81,107667,107668],{},"IndexError: index 0 is out of bounds",[35,107670,107671,107672,107674],{},"原因是 ",[81,107673,106318],{},"，没有 actuator。",[23,107676,107677],{"id":107677},"关节几乎不动",[35,107679,107680],{},"可能原因:",[28,107682,107683,107688,107692,107698],{},[31,107684,107685,107687],{},[81,107686,107393],{}," 太小",[31,107689,107690,107687],{},[81,107691,106181],{},[31,107693,107694,107697],{},[81,107695,107696],{},"damping"," 太大",[31,107699,107700],{},"重力方向导致运动不明显",[23,107702,107703],{"id":107703},"模型编译失败",[35,107705,107706,107707,107709],{},"检查 actuator 引用的 ",[81,107708,106628],{}," 是否存在，joint 名称是否拼写一致。",[23,107711,107713,107715],{"id":107712},"datactrl0-写了但没有效果",[81,107714,106452],{}," 写了但没有效果",[35,107717,102901],{},[28,107719,107720,107725,107728,107733,107738],{},[31,107721,107722,107724],{},[81,107723,102484],{}," 是否大于 0。",[31,107726,107727],{},"motor 是否引用了正确 joint。",[31,107729,107730,107732],{},[81,107731,107393],{}," 是否太小。",[31,107734,107735,107737],{},[81,107736,106181],{}," 是否把输入限制得太小。",[31,107739,107740],{},"body 是否真的有可动 joint。",[23,107742,107743],{"id":107743},"控制输入超过范围会怎样",[35,107745,107746],{},"如果设置了：",[75,107748,107750],{"className":53394,"code":107749,"language":53396,"meta":66,"style":66},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[81,107751,107752],{"__ignoreMap":66},[84,107753,107754],{"class":86,"line":87},[84,107755,107749],{"class":477},[35,107757,107758],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[75,107760,107762],{"className":30705,"code":107761,"language":30707,"meta":66,"style":66},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[81,107763,107764,107784],{"__ignoreMap":66},[84,107765,107766,107769,107771,107774,107776,107778,107780,107782],{"class":86,"line":87},[84,107767,107768],{"class":477},"action ",[84,107770,523],{"class":473},[84,107772,107773],{"class":477}," np.clip(action, ",[84,107775,1005],{"class":473},[84,107777,105586],{"class":94},[84,107779,12764],{"class":477},[84,107781,105586],{"class":94},[84,107783,484],{"class":477},[84,107785,107786,107788,107790,107792,107794],{"class":86,"line":98},[84,107787,106197],{"class":477},[84,107789,666],{"class":94},[84,107791,4772],{"class":477},[84,107793,523],{"class":473},[84,107795,107796],{"class":477}," action\n",[14,107798,102933],{"id":102932},[35,107800,107801],{},"这一章建立了控制任务的基本形式：",[75,107803,107806],{"className":107804,"code":107805,"language":5516,"meta":66},[5514],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[81,107807,107805],{"__ignoreMap":66},[35,107809,107810],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[389,107812,107813],{},"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":66,"searchDepth":98,"depth":98,"links":107815},[107816,107817,107818,107823,107827,107828,107829,107837],{"id":100972,"depth":98,"text":100973},{"id":101095,"depth":98,"text":101096},{"id":101370,"depth":98,"text":101371,"children":107819},[107820,107821,107822],{"id":106459,"depth":70,"text":106460},{"id":106509,"depth":70,"text":106510},{"id":106575,"depth":70,"text":106576},{"id":101578,"depth":98,"text":101579,"children":107824},[107825,107826],{"id":101898,"depth":70,"text":101898},{"id":102034,"depth":70,"text":102034},{"id":102641,"depth":98,"text":102642},{"id":102673,"depth":98,"text":102674},{"id":102778,"depth":98,"text":102779,"children":107830},[107831,107832,107833,107834,107836],{"id":107665,"depth":70,"text":107668},{"id":107677,"depth":70,"text":107677},{"id":107703,"depth":70,"text":107703},{"id":107712,"depth":70,"text":107835},"data.ctrl[0] 写了但没有效果",{"id":107743,"depth":70,"text":107743},{"id":102932,"depth":98,"text":102933},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106147,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107844,"title":107845,"body":107846,"description":66,"extension":401,"meta":109755,"navigation":403,"path":109756,"seo":109757,"stem":109758,"__hash__":109759},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107847,"toc":109731},[107848,107851,107853,107856,107864,107867,107884,107887,107912,107915,107961,107963,107965,108020,108022,108041,108043,108086,108089,108106,108109,108125,108135,108142,108144,108147,108150,108184,108187,108235,108239,108242,108256,108265,108269,108272,108297,108300,108304,108317,108320,108326,108329,108344,108346,108349,108609,108611,108623,108626,108938,108940,108952,108954,108957,108972,108977,108980,109002,109005,109008,109042,109045,109049,109060,109063,109080,109083,109097,109104,109124,109131,109145,109148,109160,109175,109195,109198,109220,109223,109227,109242,109253,109268,109271,109301,109317,109346,109354,109378,109381,109399,109409,109421,109428,109437,109443,109452,109455,109457,109466,109469,109484,109486,109489,109500,109503,109514,109517,109535,109537,109554,109557,109585,109587,109591,109594,109624,109630,109633,109637,109645,109648,109650,109671,109674,109677,109693,109696,109712,109714,109717,109728],[10,107849,107845],{"id":107850},"_5viewer-可视化与-renderer-离屏渲染",[14,107852,100973],{"id":100972},[35,107854,107855],{},"本章掌握两类可视化方式:",[28,107857,107858,107861],{},[31,107859,107860],{},"交互式 viewer: 适合人工观察仿真",[31,107862,107863],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[35,107865,107866],{},"使用官方接口:",[75,107868,107870],{"className":30705,"code":107869,"language":30707,"meta":66,"style":66},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[81,107871,107872,107879],{"__ignoreMap":66},[84,107873,107874,107876],{"class":86,"line":87},[84,107875,30719],{"class":473},[84,107877,107878],{"class":477}," mujoco.viewer\n",[84,107880,107881],{"class":86,"line":98},[84,107882,107883],{"class":477},"mujoco.viewer.launch_passive(model, data)\n",[35,107885,107886],{},"以及:",[75,107888,107890],{"className":30705,"code":107889,"language":30707,"meta":66,"style":66},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[81,107891,107892,107902],{"__ignoreMap":66},[84,107893,107894,107897,107899],{"class":86,"line":87},[84,107895,107896],{"class":477},"renderer ",[84,107898,523],{"class":473},[84,107900,107901],{"class":477}," mujoco.Renderer(model)\n",[84,107903,107904,107907,107909],{"class":86,"line":98},[84,107905,107906],{"class":477},"image ",[84,107908,523],{"class":473},[84,107910,107911],{"class":477}," renderer.render()\n",[35,107913,107914],{},"新手建议先理解二者区别：",[612,107916,107917,107933],{},[615,107918,107919],{},[618,107920,107921,107924,107927,107930],{},[621,107922,107923],{"align":24065},"工具",[621,107925,107926],{"align":24065},"用途",[621,107928,107929],{"align":24065},"是否打开窗口",[621,107931,107932],{"align":24065},"常见场景",[659,107934,107935,107948],{},[618,107936,107937,107940,107943,107945],{},[664,107938,107939],{"align":24065},"Viewer",[664,107941,107942],{"align":24065},"人眼实时观察仿真",[664,107944,104991],{"align":24065},[664,107946,107947],{"align":24065},"调试模型、看控制效果",[618,107949,107950,107953,107956,107958],{},[664,107951,107952],{"align":24065},"Renderer",[664,107954,107955],{"align":24065},"生成图像数组",[664,107957,105004],{"align":24065},[664,107959,107960],{"align":24065},"保存图片、训练视觉策略、服务器批量采集",[14,107962,101096],{"id":101095},[35,107964,101099],{},[75,107966,107968],{"className":24151,"code":107967,"language":24153,"meta":66,"style":66},"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",[81,107969,107970,107982,107992,108000,108008],{"__ignoreMap":66},[84,107971,107972,107974,107976,107978,107980],{"class":86,"line":87},[84,107973,24905],{"class":90},[84,107975,26643],{"class":104},[84,107977,24163],{"class":104},[84,107979,26728],{"class":94},[84,107981,95],{"class":94},[84,107983,107984,107986,107988,107990],{"class":86,"line":98},[84,107985,101134],{"class":104},[84,107987,101137],{"class":104},[84,107989,101140],{"class":104},[84,107991,95],{"class":94},[84,107993,107994,107996,107998],{"class":86,"line":70},[84,107995,101147],{"class":104},[84,107997,101150],{"class":104},[84,107999,95],{"class":94},[84,108001,108002,108004,108006],{"class":86,"line":120},[84,108003,101157],{"class":104},[84,108005,101160],{"class":104},[84,108007,95],{"class":94},[84,108009,108010,108012,108014,108016,108018],{"class":86,"line":131},[84,108011,101167],{"class":104},[84,108013,101170],{"class":104},[84,108015,101173],{"class":104},[84,108017,101176],{"class":104},[84,108019,102842],{"class":104},[35,108021,103145],{},[75,108023,108025],{"className":24151,"code":108024,"language":24153,"meta":66,"style":66},"pip install \"mujoco>=2.3\" numpy pillow\n",[81,108026,108027],{"__ignoreMap":66},[84,108028,108029,108031,108033,108035,108038],{"class":86,"line":87},[84,108030,24160],{"class":90},[84,108032,24163],{"class":104},[84,108034,101256],{"class":104},[84,108036,108037],{"class":104}," numpy",[84,108039,108040],{"class":104}," pillow\n",[35,108042,103162],{},[75,108044,108046],{"className":24151,"code":108045,"language":24153,"meta":66,"style":66},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[81,108047,108048,108065,108074],{"__ignoreMap":66},[84,108049,108050,108052,108054,108056,108059,108061,108063],{"class":86,"line":87},[84,108051,30657],{"class":90},[84,108053,29503],{"class":104},[84,108055,25443],{"class":94},[84,108057,108058],{"class":104}," mujoco-render",[84,108060,101301],{"class":104},[84,108062,101304],{"class":94},[84,108064,101307],{"class":94},[84,108066,108067,108069,108071],{"class":86,"line":98},[84,108068,30657],{"class":90},[84,108070,101314],{"class":104},[84,108072,108073],{"class":104}," mujoco-render\n",[84,108075,108076,108078,108080,108082,108084],{"class":86,"line":70},[84,108077,24160],{"class":90},[84,108079,24163],{"class":104},[84,108081,101256],{"class":104},[84,108083,108037],{"class":104},[84,108085,108040],{"class":104},[35,108087,108088],{},"离屏渲染后端:",[75,108090,108092],{"className":24151,"code":108091,"language":24153,"meta":66,"style":66},"export MUJOCO_GL=egl\n",[81,108093,108094],{"__ignoreMap":66},[84,108095,108096,108098,108101,108103],{"class":86,"line":87},[84,108097,25370],{"class":473},[84,108099,108100],{"class":477}," MUJOCO_GL",[84,108102,523],{"class":473},[84,108104,108105],{"class":477},"egl\n",[35,108107,108108],{},"或:",[75,108110,108112],{"className":24151,"code":108111,"language":24153,"meta":66,"style":66},"export MUJOCO_GL=osmesa\n",[81,108113,108114],{"__ignoreMap":66},[84,108115,108116,108118,108120,108122],{"class":86,"line":87},[84,108117,25370],{"class":473},[84,108119,108100],{"class":477},[84,108121,523],{"class":473},[84,108123,108124],{"class":477},"osmesa\n",[35,108126,108127,108128,108131,108132,28712],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[81,108129,108130],{},"egl"," 失败，再尝试 ",[81,108133,108134],{},"osmesa",[35,108136,108137,108138,108141],{},"如果你在本机桌面环境运行，通常先不要设置 ",[81,108139,108140],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108143,101371],{"id":101370},[35,108145,108146],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[35,108148,108149],{},"典型 viewer 流程:",[75,108151,108153],{"className":30705,"code":108152,"language":30707,"meta":66,"style":66},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[81,108154,108155,108168,108175,108179],{"__ignoreMap":66},[84,108156,108157,108160,108163,108165],{"class":86,"line":87},[84,108158,108159],{"class":473},"with",[84,108161,108162],{"class":477}," mujoco.viewer.launch_passive(model, data) ",[84,108164,31710],{"class":473},[84,108166,108167],{"class":477}," viewer:\n",[84,108169,108170,108172],{"class":86,"line":98},[84,108171,2580],{"class":473},[84,108173,108174],{"class":477}," viewer.is_running():\n",[84,108176,108177],{"class":86,"line":70},[84,108178,101842],{"class":477},[84,108180,108181],{"class":86,"line":120},[84,108182,108183],{"class":477},"        viewer.sync()\n",[35,108185,108186],{},"典型 renderer 流程:",[75,108188,108190],{"className":30705,"code":108189,"language":30707,"meta":66,"style":66},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[81,108191,108192,108218,108222,108227],{"__ignoreMap":66},[84,108193,108194,108196,108198,108201,108203,108205,108207,108209,108211,108213,108216],{"class":86,"line":87},[84,108195,107896],{"class":477},[84,108197,523],{"class":473},[84,108199,108200],{"class":477}," mujoco.Renderer(model, ",[84,108202,25309],{"class":5545},[84,108204,523],{"class":473},[84,108206,42669],{"class":94},[84,108208,12764],{"class":477},[84,108210,25305],{"class":5545},[84,108212,523],{"class":473},[84,108214,108215],{"class":94},"640",[84,108217,484],{"class":477},[84,108219,108220],{"class":86,"line":98},[84,108221,104831],{"class":477},[84,108223,108224],{"class":86,"line":70},[84,108225,108226],{"class":477},"renderer.update_scene(data)\n",[84,108228,108229,108231,108233],{"class":86,"line":120},[84,108230,107906],{"class":477},[84,108232,523],{"class":473},[84,108234,107911],{"class":477},[23,108236,108238],{"id":108237},"viewer-的同步逻辑","viewer 的同步逻辑",[35,108240,108241],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[75,108243,108245],{"className":30705,"code":108244,"language":30707,"meta":66,"style":66},"mujoco.mj_step(model, data)\nviewer.sync()\n",[81,108246,108247,108251],{"__ignoreMap":66},[84,108248,108249],{"class":86,"line":87},[84,108250,104831],{"class":477},[84,108252,108253],{"class":86,"line":98},[84,108254,108255],{"class":477},"viewer.sync()\n",[35,108257,108258,108260,108261,108264],{},[81,108259,101541],{}," 负责算物理，",[81,108262,108263],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[23,108266,108268],{"id":108267},"为什么要-sleep","为什么要 sleep",[35,108270,108271],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[75,108273,108275],{"className":30705,"code":108274,"language":30707,"meta":66,"style":66},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[81,108276,108277],{"__ignoreMap":66},[84,108278,108279,108282,108284,108287,108289,108292,108294],{"class":86,"line":87},[84,108280,108281],{"class":477},"sleep_time ",[84,108283,523],{"class":473},[84,108285,108286],{"class":477}," model.opt.timestep ",[84,108288,1005],{"class":473},[84,108290,108291],{"class":477}," (time.time() ",[84,108293,1005],{"class":473},[84,108295,108296],{"class":477}," step_start)\n",[35,108298,108299],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[23,108301,108303],{"id":108302},"renderer-输出是什么","renderer 输出是什么",[75,108305,108307],{"className":30705,"code":108306,"language":30707,"meta":66,"style":66},"image = renderer.render()\n",[81,108308,108309],{"__ignoreMap":66},[84,108310,108311,108313,108315],{"class":86,"line":87},[84,108312,107906],{"class":477},[84,108314,523],{"class":473},[84,108316,107911],{"class":477},[35,108318,108319],{},"得到的是 NumPy 数组，形状通常是：",[75,108321,108324],{"className":108322,"code":108323,"language":5516,"meta":66},[5514],"(height, width, 3)\n",[81,108325,108323],{"__ignoreMap":66},[35,108327,108328],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[75,108330,108332],{"className":30705,"code":108331,"language":30707,"meta":66,"style":66},"Image.fromarray(image).save(\"render_output.png\")\n",[81,108333,108334],{"__ignoreMap":66},[84,108335,108336,108339,108342],{"class":86,"line":87},[84,108337,108338],{"class":477},"Image.fromarray(image).save(",[84,108340,108341],{"class":104},"\"render_output.png\"",[84,108343,484],{"class":477},[14,108345,101579],{"id":101578},[35,108347,108348],{},"交互式 Viewer:",[75,108350,108352],{"className":30705,"code":108351,"language":30707,"meta":66,"style":66},"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",[81,108353,108354,108360,108364,108370,108376,108380,108384,108392,108397,108401,108405,108409,108414,108419,108423,108427,108431,108436,108440,108444,108448,108452,108456,108460,108472,108484,108492,108496,108506,108526,108536,108541,108546,108550,108567,108580,108585,108589,108593,108605],{"__ignoreMap":66},[84,108355,108356,108358],{"class":86,"line":87},[84,108357,30719],{"class":473},[84,108359,32156],{"class":477},[84,108361,108362],{"class":86,"line":98},[84,108363,2729],{"emptyLinePlaceholder":403},[84,108365,108366,108368],{"class":86,"line":70},[84,108367,30719],{"class":473},[84,108369,101627],{"class":477},[84,108371,108372,108374],{"class":86,"line":120},[84,108373,30719],{"class":473},[84,108375,107878],{"class":477},[84,108377,108378],{"class":86,"line":131},[84,108379,2729],{"emptyLinePlaceholder":403},[84,108381,108382],{"class":86,"line":145},[84,108383,2729],{"emptyLinePlaceholder":403},[84,108385,108386,108388,108390],{"class":86,"line":156},[84,108387,101640],{"class":94},[84,108389,13893],{"class":473},[84,108391,101645],{"class":104},[84,108393,108394],{"class":86,"line":164},[84,108395,108396],{"class":104},"\u003Cmujoco model=\"viewer_demo\">\n",[84,108398,108399],{"class":86,"line":175},[84,108400,101655],{"class":104},[84,108402,108403],{"class":86,"line":185},[84,108404,2729],{"emptyLinePlaceholder":403},[84,108406,108407],{"class":86,"line":195},[84,108408,101664],{"class":104},[84,108410,108411],{"class":86,"line":206},[84,108412,108413],{"class":104},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[84,108415,108416],{"class":86,"line":217},[84,108417,108418],{"class":104},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[84,108420,108421],{"class":86,"line":227},[84,108422,2729],{"emptyLinePlaceholder":403},[84,108424,108425],{"class":86,"line":238},[84,108426,101678],{"class":104},[84,108428,108429],{"class":86,"line":249},[84,108430,101683],{"class":104},[84,108432,108433],{"class":86,"line":262},[84,108434,108435],{"class":104},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[84,108437,108438],{"class":86,"line":273},[84,108439,101693],{"class":104},[84,108441,108442],{"class":86,"line":283},[84,108443,101698],{"class":104},[84,108445,108446],{"class":86,"line":294},[84,108447,101703],{"class":104},[84,108449,108450],{"class":86,"line":2028},[84,108451,96024],{"class":104},[84,108453,108454],{"class":86,"line":2057},[84,108455,2729],{"emptyLinePlaceholder":403},[84,108457,108458],{"class":86,"line":2062},[84,108459,2729],{"emptyLinePlaceholder":403},[84,108461,108462,108464,108466,108468,108470],{"class":86,"line":2079},[84,108463,32274],{"class":473},[84,108465,2302],{"class":90},[84,108467,101724],{"class":477},[84,108469,96012],{"class":94},[84,108471,4068],{"class":477},[84,108473,108474,108476,108478,108480,108482],{"class":86,"line":2084},[84,108475,101733],{"class":477},[84,108477,523],{"class":473},[84,108479,101738],{"class":477},[84,108481,101640],{"class":94},[84,108483,484],{"class":477},[84,108485,108486,108488,108490],{"class":86,"line":2089},[84,108487,101747],{"class":477},[84,108489,523],{"class":473},[84,108491,101752],{"class":477},[84,108493,108494],{"class":86,"line":2094},[84,108495,2729],{"emptyLinePlaceholder":403},[84,108497,108498,108500,108502,108504],{"class":86,"line":2108},[84,108499,34505],{"class":473},[84,108501,108162],{"class":477},[84,108503,31710],{"class":473},[84,108505,108167],{"class":477},[84,108507,108508,108511,108514,108516,108519,108521,108524],{"class":86,"line":2113},[84,108509,108510],{"class":473},"        while",[84,108512,108513],{"class":477}," viewer.is_running() ",[84,108515,30789],{"class":473},[84,108517,108518],{"class":477}," data.time ",[84,108520,1383],{"class":473},[84,108522,108523],{"class":94}," 5.0",[84,108525,4068],{"class":477},[84,108527,108528,108531,108533],{"class":86,"line":2906},[84,108529,108530],{"class":477},"            step_start ",[84,108532,523],{"class":473},[84,108534,108535],{"class":477}," time.time()\n",[84,108537,108538],{"class":86,"line":2920},[84,108539,108540],{"class":477},"            mujoco.mj_step(model, data)\n",[84,108542,108543],{"class":86,"line":2928},[84,108544,108545],{"class":477},"            viewer.sync()\n",[84,108547,108548],{"class":86,"line":2933},[84,108549,2729],{"emptyLinePlaceholder":403},[84,108551,108552,108555,108557,108559,108561,108563,108565],{"class":86,"line":2939},[84,108553,108554],{"class":477},"            sleep_time ",[84,108556,523],{"class":473},[84,108558,108286],{"class":477},[84,108560,1005],{"class":473},[84,108562,108291],{"class":477},[84,108564,1005],{"class":473},[84,108566,108296],{"class":477},[84,108568,108569,108571,108574,108576,108578],{"class":86,"line":2945},[84,108570,4971],{"class":473},[84,108572,108573],{"class":477}," sleep_time ",[84,108575,1433],{"class":473},[84,108577,4422],{"class":94},[84,108579,4068],{"class":477},[84,108581,108582],{"class":86,"line":2950},[84,108583,108584],{"class":477},"                time.sleep(sleep_time)\n",[84,108586,108587],{"class":86,"line":8277},[84,108588,2729],{"emptyLinePlaceholder":403},[84,108590,108591],{"class":86,"line":8301},[84,108592,2729],{"emptyLinePlaceholder":403},[84,108594,108595,108597,108599,108601,108603],{"class":86,"line":8306},[84,108596,1871],{"class":473},[84,108598,31547],{"class":94},[84,108600,101885],{"class":473},[84,108602,101888],{"class":104},[84,108604,4068],{"class":477},[84,108606,108607],{"class":86,"line":8312},[84,108608,101895],{"class":477},[35,108610,103896],{},[75,108612,108614],{"className":24151,"code":108613,"language":24153,"meta":66,"style":66},"touch ch5_viewer.py\n",[81,108615,108616],{"__ignoreMap":66},[84,108617,108618,108620],{"class":86,"line":87},[84,108619,101609],{"class":90},[84,108621,108622],{"class":104}," ch5_viewer.py\n",[35,108624,108625],{},"离屏 Renderer 保存图片:",[75,108627,108629],{"className":30705,"code":108628,"language":30707,"meta":66,"style":66},"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",[81,108630,108631,108643,108647,108653,108663,108667,108671,108679,108684,108688,108692,108696,108700,108705,108709,108713,108717,108721,108725,108729,108733,108737,108741,108745,108749,108761,108773,108781,108806,108810,108826,108830,108834,108849,108858,108862,108876,108881,108886,108890,108902,108914,108918,108922,108934],{"__ignoreMap":66},[84,108632,108633,108635,108638,108640],{"class":86,"line":87},[84,108634,31064],{"class":473},[84,108636,108637],{"class":477}," pathlib ",[84,108639,30719],{"class":473},[84,108641,108642],{"class":477}," Path\n",[84,108644,108645],{"class":86,"line":98},[84,108646,2729],{"emptyLinePlaceholder":403},[84,108648,108649,108651],{"class":86,"line":70},[84,108650,30719],{"class":473},[84,108652,101627],{"class":477},[84,108654,108655,108657,108659,108661],{"class":86,"line":120},[84,108656,31064],{"class":473},[84,108658,47590],{"class":94},[84,108660,47593],{"class":473},[84,108662,47596],{"class":477},[84,108664,108665],{"class":86,"line":131},[84,108666,2729],{"emptyLinePlaceholder":403},[84,108668,108669],{"class":86,"line":145},[84,108670,2729],{"emptyLinePlaceholder":403},[84,108672,108673,108675,108677],{"class":86,"line":156},[84,108674,101640],{"class":94},[84,108676,13893],{"class":473},[84,108678,101645],{"class":104},[84,108680,108681],{"class":86,"line":164},[84,108682,108683],{"class":104},"\u003Cmujoco model=\"renderer_demo\">\n",[84,108685,108686],{"class":86,"line":175},[84,108687,101655],{"class":104},[84,108689,108690],{"class":86,"line":185},[84,108691,2729],{"emptyLinePlaceholder":403},[84,108693,108694],{"class":86,"line":195},[84,108695,101664],{"class":104},[84,108697,108698],{"class":86,"line":206},[84,108699,108413],{"class":104},[84,108701,108702],{"class":86,"line":217},[84,108703,108704],{"class":104},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[84,108706,108707],{"class":86,"line":227},[84,108708,108418],{"class":104},[84,108710,108711],{"class":86,"line":238},[84,108712,2729],{"emptyLinePlaceholder":403},[84,108714,108715],{"class":86,"line":249},[84,108716,101678],{"class":104},[84,108718,108719],{"class":86,"line":262},[84,108720,101683],{"class":104},[84,108722,108723],{"class":86,"line":273},[84,108724,108435],{"class":104},[84,108726,108727],{"class":86,"line":283},[84,108728,101693],{"class":104},[84,108730,108731],{"class":86,"line":294},[84,108732,101698],{"class":104},[84,108734,108735],{"class":86,"line":2028},[84,108736,101703],{"class":104},[84,108738,108739],{"class":86,"line":2057},[84,108740,96024],{"class":104},[84,108742,108743],{"class":86,"line":2062},[84,108744,2729],{"emptyLinePlaceholder":403},[84,108746,108747],{"class":86,"line":2079},[84,108748,2729],{"emptyLinePlaceholder":403},[84,108750,108751,108753,108755,108757,108759],{"class":86,"line":2084},[84,108752,32274],{"class":473},[84,108754,2302],{"class":90},[84,108756,101724],{"class":477},[84,108758,96012],{"class":94},[84,108760,4068],{"class":477},[84,108762,108763,108765,108767,108769,108771],{"class":86,"line":2089},[84,108764,101733],{"class":477},[84,108766,523],{"class":473},[84,108768,101738],{"class":477},[84,108770,101640],{"class":94},[84,108772,484],{"class":477},[84,108774,108775,108777,108779],{"class":86,"line":2094},[84,108776,101747],{"class":477},[84,108778,523],{"class":473},[84,108780,101752],{"class":477},[84,108782,108783,108786,108788,108790,108792,108794,108796,108798,108800,108802,108804],{"class":86,"line":2108},[84,108784,108785],{"class":477},"    renderer ",[84,108787,523],{"class":473},[84,108789,108200],{"class":477},[84,108791,25309],{"class":5545},[84,108793,523],{"class":473},[84,108795,42669],{"class":94},[84,108797,12764],{"class":477},[84,108799,25305],{"class":5545},[84,108801,523],{"class":473},[84,108803,108215],{"class":94},[84,108805,484],{"class":477},[84,108807,108808],{"class":86,"line":2113},[84,108809,2729],{"emptyLinePlaceholder":403},[84,108811,108812,108814,108816,108818,108820,108822,108824],{"class":86,"line":2906},[84,108813,3530],{"class":473},[84,108815,101827],{"class":477},[84,108817,26371],{"class":473},[84,108819,32770],{"class":94},[84,108821,478],{"class":477},[84,108823,784],{"class":94},[84,108825,31113],{"class":477},[84,108827,108828],{"class":86,"line":2920},[84,108829,101842],{"class":477},[84,108831,108832],{"class":86,"line":2928},[84,108833,2729],{"emptyLinePlaceholder":403},[84,108835,108836,108839,108842,108844,108847],{"class":86,"line":2933},[84,108837,108838],{"class":477},"    renderer.update_scene(data, ",[84,108840,108841],{"class":5545},"camera",[84,108843,523],{"class":473},[84,108845,108846],{"class":104},"\"fixed_camera\"",[84,108848,484],{"class":477},[84,108850,108851,108854,108856],{"class":86,"line":2939},[84,108852,108853],{"class":477},"    image ",[84,108855,523],{"class":473},[84,108857,107911],{"class":477},[84,108859,108860],{"class":86,"line":2945},[84,108861,2729],{"emptyLinePlaceholder":403},[84,108863,108864,108867,108869,108872,108874],{"class":86,"line":2950},[84,108865,108866],{"class":477},"    output_path ",[84,108868,523],{"class":473},[84,108870,108871],{"class":477}," Path(",[84,108873,108341],{"class":104},[84,108875,484],{"class":477},[84,108877,108878],{"class":86,"line":8277},[84,108879,108880],{"class":477},"    Image.fromarray(image).save(output_path)\n",[84,108882,108883],{"class":86,"line":8301},[84,108884,108885],{"class":477},"    renderer.close()\n",[84,108887,108888],{"class":86,"line":8306},[84,108889,2729],{"emptyLinePlaceholder":403},[84,108891,108892,108894,108896,108899],{"class":86,"line":8312},[84,108893,31626],{"class":94},[84,108895,478],{"class":477},[84,108897,108898],{"class":104},"\"saved:\"",[84,108900,108901],{"class":477},", output_path.resolve())\n",[84,108903,108904,108906,108908,108911],{"class":86,"line":8339},[84,108905,31626],{"class":94},[84,108907,478],{"class":477},[84,108909,108910],{"class":104},"\"image shape:\"",[84,108912,108913],{"class":477},", image.shape)\n",[84,108915,108916],{"class":86,"line":8344},[84,108917,2729],{"emptyLinePlaceholder":403},[84,108919,108920],{"class":86,"line":8350},[84,108921,2729],{"emptyLinePlaceholder":403},[84,108923,108924,108926,108928,108930,108932],{"class":86,"line":8362},[84,108925,1871],{"class":473},[84,108927,31547],{"class":94},[84,108929,101885],{"class":473},[84,108931,101888],{"class":104},[84,108933,4068],{"class":477},[84,108935,108936],{"class":86,"line":8374},[84,108937,101895],{"class":477},[35,108939,103896],{},[75,108941,108943],{"className":24151,"code":108942,"language":24153,"meta":66,"style":66},"touch ch5_renderer.py\n",[81,108944,108945],{"__ignoreMap":66},[84,108946,108947,108949],{"class":86,"line":87},[84,108948,101609],{"class":90},[84,108950,108951],{"class":104}," ch5_renderer.py\n",[23,108953,101898],{"id":101898},[35,108955,108956],{},"viewer 上下文：",[75,108958,108960],{"className":30705,"code":108959,"language":30707,"meta":66,"style":66},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[81,108961,108962],{"__ignoreMap":66},[84,108963,108964,108966,108968,108970],{"class":86,"line":87},[84,108965,108159],{"class":473},[84,108967,108162],{"class":477},[84,108969,31710],{"class":473},[84,108971,108167],{"class":477},[35,108973,108974,108976],{},[81,108975,108159],{}," 语句会创建窗口，并在退出时自动清理资源。",[35,108978,108979],{},"窗口循环：",[75,108981,108983],{"className":30705,"code":108982,"language":30707,"meta":66,"style":66},"while viewer.is_running() and data.time \u003C 5.0:\n",[81,108984,108985],{"__ignoreMap":66},[84,108986,108987,108990,108992,108994,108996,108998,109000],{"class":86,"line":87},[84,108988,108989],{"class":473},"while",[84,108991,108513],{"class":477},[84,108993,30789],{"class":473},[84,108995,108518],{"class":477},[84,108997,1383],{"class":473},[84,108999,108523],{"class":94},[84,109001,4068],{"class":477},[35,109003,109004],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[35,109006,109007],{},"固定相机：",[75,109009,109011],{"className":53394,"code":109010,"language":53396,"meta":66,"style":66},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[81,109012,109013],{"__ignoreMap":66},[84,109014,109015,109017,109019,109021,109023,109025,109027,109029,109032,109035,109037,109040],{"class":86,"line":87},[84,109016,1383],{"class":477},[84,109018,108841],{"class":51627},[84,109020,15249],{"class":90},[84,109022,523],{"class":477},[84,109024,108846],{"class":104},[84,109026,101432],{"class":90},[84,109028,523],{"class":477},[84,109030,109031],{"class":104},"\"1.5 -2.0 1.2\"",[84,109033,109034],{"class":90}," xyaxes",[84,109036,523],{"class":477},[84,109038,109039],{"class":104},"\"1 0.75 0 0 0 1\"",[84,109041,101470],{"class":477},[35,109043,109044],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[23,109046,109048],{"id":109047},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[75,109050,109052],{"className":30705,"code":109051,"language":30707,"meta":66,"style":66},"import time\n",[81,109053,109054],{"__ignoreMap":66},[84,109055,109056,109058],{"class":86,"line":87},[84,109057,30719],{"class":473},[84,109059,32156],{"class":477},[35,109061,109062],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[75,109064,109066],{"className":30705,"code":109065,"language":30707,"meta":66,"style":66},"import mujoco\nimport mujoco.viewer\n",[81,109067,109068,109074],{"__ignoreMap":66},[84,109069,109070,109072],{"class":86,"line":87},[84,109071,30719],{"class":473},[84,109073,101627],{"class":477},[84,109075,109076,109078],{"class":86,"line":98},[84,109077,30719],{"class":473},[84,109079,107878],{"class":477},[35,109081,109082],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[75,109084,109085],{"className":30705,"code":108959,"language":30707,"meta":66,"style":66},[81,109086,109087],{"__ignoreMap":66},[84,109088,109089,109091,109093,109095],{"class":86,"line":87},[84,109090,108159],{"class":473},[84,109092,108162],{"class":477},[84,109094,31710],{"class":473},[84,109096,108167],{"class":477},[35,109098,109099,109100,109103],{},"打开一个 viewer 窗口。",[81,109101,109102],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[75,109105,109106],{"className":30705,"code":108982,"language":30707,"meta":66,"style":66},[81,109107,109108],{"__ignoreMap":66},[84,109109,109110,109112,109114,109116,109118,109120,109122],{"class":86,"line":87},[84,109111,108989],{"class":473},[84,109113,108513],{"class":477},[84,109115,30789],{"class":473},[84,109117,108518],{"class":477},[84,109119,1383],{"class":473},[84,109121,108523],{"class":94},[84,109123,4068],{"class":477},[35,109125,109126,109127,109130],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[81,109128,109129],{},"viewer.is_running()"," 会变成 false，循环结束。",[75,109132,109134],{"className":30705,"code":109133,"language":30707,"meta":66,"style":66},"step_start = time.time()\n",[81,109135,109136],{"__ignoreMap":66},[84,109137,109138,109141,109143],{"class":86,"line":87},[84,109139,109140],{"class":477},"step_start ",[84,109142,523],{"class":473},[84,109144,108535],{"class":477},[35,109146,109147],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[75,109149,109150],{"className":30705,"code":108244,"language":30707,"meta":66,"style":66},[81,109151,109152,109156],{"__ignoreMap":66},[84,109153,109154],{"class":86,"line":87},[84,109155,104831],{"class":477},[84,109157,109158],{"class":86,"line":98},[84,109159,108255],{"class":477},[35,109161,109162,109164,109165,109167,109168,109170,109171,109174],{},[81,109163,101541],{}," 推进物理仿真。",[81,109166,108263],{}," 把最新的 ",[81,109169,33728],{}," 同步到窗口里显示。没有 ",[81,109172,109173],{},"sync()","，窗口可能看不到最新状态。",[75,109176,109177],{"className":30705,"code":108274,"language":30707,"meta":66,"style":66},[81,109178,109179],{"__ignoreMap":66},[84,109180,109181,109183,109185,109187,109189,109191,109193],{"class":86,"line":87},[84,109182,108281],{"class":477},[84,109184,523],{"class":473},[84,109186,108286],{"class":477},[84,109188,1005],{"class":473},[84,109190,108291],{"class":477},[84,109192,1005],{"class":473},[84,109194,108296],{"class":477},[35,109196,109197],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[75,109199,109201],{"className":30705,"code":109200,"language":30707,"meta":66,"style":66},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[81,109202,109203,109215],{"__ignoreMap":66},[84,109204,109205,109207,109209,109211,109213],{"class":86,"line":87},[84,109206,1871],{"class":473},[84,109208,108573],{"class":477},[84,109210,1433],{"class":473},[84,109212,4422],{"class":94},[84,109214,4068],{"class":477},[84,109216,109217],{"class":86,"line":98},[84,109218,109219],{"class":477},"    time.sleep(sleep_time)\n",[35,109221,109222],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[23,109224,109226],{"id":109225},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[75,109228,109230],{"className":30705,"code":109229,"language":30707,"meta":66,"style":66},"from pathlib import Path\n",[81,109231,109232],{"__ignoreMap":66},[84,109233,109234,109236,109238,109240],{"class":86,"line":87},[84,109235,31064],{"class":473},[84,109237,108637],{"class":477},[84,109239,30719],{"class":473},[84,109241,108642],{"class":477},[35,109243,109244,109245,109248,109249,109252],{},"导入 ",[81,109246,109247],{},"Path","，用来处理文件路径。相比直接写字符串，",[81,109250,109251],{},"Path(\"render_output.png\")"," 更清晰。",[75,109254,109256],{"className":30705,"code":109255,"language":30707,"meta":66,"style":66},"from PIL import Image\n",[81,109257,109258],{"__ignoreMap":66},[84,109259,109260,109262,109264,109266],{"class":86,"line":87},[84,109261,31064],{"class":473},[84,109263,47590],{"class":94},[84,109265,47593],{"class":473},[84,109267,47596],{"class":477},[35,109269,109270],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[75,109272,109273],{"className":53394,"code":109010,"language":53396,"meta":66,"style":66},[81,109274,109275],{"__ignoreMap":66},[84,109276,109277,109279,109281,109283,109285,109287,109289,109291,109293,109295,109297,109299],{"class":86,"line":87},[84,109278,1383],{"class":477},[84,109280,108841],{"class":51627},[84,109282,15249],{"class":90},[84,109284,523],{"class":477},[84,109286,108846],{"class":104},[84,109288,101432],{"class":90},[84,109290,523],{"class":477},[84,109292,109031],{"class":104},[84,109294,109034],{"class":90},[84,109296,523],{"class":477},[84,109298,109039],{"class":104},[84,109300,101470],{"class":477},[35,109302,109303,109304,109306,109307,109309,109310,109313,109314,109316],{},"定义一个相机。",[81,109305,80136],{}," 是相机名字。",[81,109308,104472],{}," 是相机在世界里的位置。",[81,109311,109312],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[81,109315,104472],{}," 来调视角。",[75,109318,109320],{"className":30705,"code":109319,"language":30707,"meta":66,"style":66},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[81,109321,109322],{"__ignoreMap":66},[84,109323,109324,109326,109328,109330,109332,109334,109336,109338,109340,109342,109344],{"class":86,"line":87},[84,109325,107896],{"class":477},[84,109327,523],{"class":473},[84,109329,108200],{"class":477},[84,109331,25309],{"class":5545},[84,109333,523],{"class":473},[84,109335,42669],{"class":94},[84,109337,12764],{"class":477},[84,109339,25305],{"class":5545},[84,109341,523],{"class":473},[84,109343,108215],{"class":94},[84,109345,484],{"class":477},[35,109347,109348,109349,101344,109351,109353],{},"创建离屏渲染器。",[81,109350,25309],{},[81,109352,25305],{}," 决定输出图片大小。",[75,109355,109356],{"className":30705,"code":102002,"language":30707,"meta":66,"style":66},[81,109357,109358,109374],{"__ignoreMap":66},[84,109359,109360,109362,109364,109366,109368,109370,109372],{"class":86,"line":87},[84,109361,3354],{"class":473},[84,109363,101827],{"class":477},[84,109365,26371],{"class":473},[84,109367,32770],{"class":94},[84,109369,478],{"class":477},[84,109371,784],{"class":94},[84,109373,31113],{"class":477},[84,109375,109376],{"class":86,"line":98},[84,109377,102025],{"class":477},[35,109379,109380],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[75,109382,109384],{"className":30705,"code":109383,"language":30707,"meta":66,"style":66},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[81,109385,109386],{"__ignoreMap":66},[84,109387,109388,109391,109393,109395,109397],{"class":86,"line":87},[84,109389,109390],{"class":477},"renderer.update_scene(data, ",[84,109392,108841],{"class":5545},[84,109394,523],{"class":473},[84,109396,108846],{"class":104},[84,109398,484],{"class":477},[35,109400,109401,109402,109404,109405,109408],{},"告诉 renderer：用当前 ",[81,109403,33728],{}," 的状态更新画面，并使用名为 ",[81,109406,109407],{},"fixed_camera"," 的相机视角。",[75,109410,109411],{"className":30705,"code":108306,"language":30707,"meta":66,"style":66},[81,109412,109413],{"__ignoreMap":66},[84,109414,109415,109417,109419],{"class":86,"line":87},[84,109416,107906],{"class":477},[84,109418,523],{"class":473},[84,109420,107911],{"class":477},[35,109422,109423,109424,109427],{},"真正渲染出图像。",[81,109425,109426],{},"image"," 是一个 NumPy 数组，不是文件。",[75,109429,109431],{"className":30705,"code":109430,"language":30707,"meta":66,"style":66},"Image.fromarray(image).save(output_path)\n",[81,109432,109433],{"__ignoreMap":66},[84,109434,109435],{"class":86,"line":87},[84,109436,109430],{"class":477},[35,109438,109439,109440,28712],{},"把数组转换成图片，并保存到 ",[81,109441,109442],{},"render_output.png",[75,109444,109446],{"className":30705,"code":109445,"language":30707,"meta":66,"style":66},"renderer.close()\n",[81,109447,109448],{"__ignoreMap":66},[84,109449,109450],{"class":86,"line":87},[84,109451,109445],{"class":477},[35,109453,109454],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109456,102642],{"id":102641},[35,109458,109459,109460,109462,109463,28712],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[81,109461,109442],{},"，并输出图像数组形状，例如 ",[81,109464,109465],{},"(480, 640, 3)",[35,109467,109468],{},"如果图片里看不到方块，先检查：",[28,109470,109471,109474,109477],{},[31,109472,109473],{},"方块是否掉到相机视野外。",[31,109475,109476],{},"camera 位置是否合理。",[31,109478,109479,109480,109483],{},"是否在 ",[81,109481,109482],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109485,102674],{"id":102673},[35,109487,109488],{},"运行 viewer:",[75,109490,109492],{"className":24151,"code":109491,"language":24153,"meta":66,"style":66},"python ch5_viewer.py\n",[81,109493,109494],{"__ignoreMap":66},[84,109495,109496,109498],{"class":86,"line":87},[84,109497,30707],{"class":90},[84,109499,108622],{"class":104},[35,109501,109502],{},"运行 renderer:",[75,109504,109506],{"className":24151,"code":109505,"language":24153,"meta":66,"style":66},"python ch5_renderer.py\n",[81,109507,109508],{"__ignoreMap":66},[84,109509,109510,109512],{"class":86,"line":87},[84,109511,30707],{"class":90},[84,109513,108951],{"class":104},[35,109515,109516],{},"如果在服务器上运行:",[75,109518,109520],{"className":24151,"code":109519,"language":24153,"meta":66,"style":66},"MUJOCO_GL=egl python ch5_renderer.py\n",[81,109521,109522],{"__ignoreMap":66},[84,109523,109524,109526,109528,109530,109533],{"class":86,"line":87},[84,109525,108140],{"class":477},[84,109527,523],{"class":473},[84,109529,108130],{"class":104},[84,109531,109532],{"class":90}," python",[84,109534,108951],{"class":104},[35,109536,108108],{},[75,109538,109540],{"className":24151,"code":109539,"language":24153,"meta":66,"style":66},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[81,109541,109542],{"__ignoreMap":66},[84,109543,109544,109546,109548,109550,109552],{"class":86,"line":87},[84,109545,108140],{"class":477},[84,109547,523],{"class":473},[84,109549,108134],{"class":104},[84,109551,109532],{"class":90},[84,109553,108951],{"class":104},[35,109555,109556],{},"再做几个练习：",[28,109558,109559,109566,109569,109575],{},[31,109560,109561,109562,109565],{},"把 renderer 分辨率改成 ",[81,109563,109564],{},"height=240, width=320","，观察输出 shape。",[31,109567,109568],{},"把方块颜色改成蓝色，重新保存图片。",[31,109570,109571,109572,109574],{},"把相机 ",[81,109573,104472],{}," 改远一点，观察画面中物体是否变小。",[31,109576,109577,109578,102740,109581,109584],{},"把 viewer 示例中的 ",[81,109579,109580],{},"data.time \u003C 5.0",[81,109582,109583],{},"data.time \u003C 20.0","，观察更长时间。",[14,109586,102779],{"id":102778},[23,109588,109590],{"id":109589},"viewer-窗口打不开","viewer 窗口打不开",[35,109592,109593],{},"安装:",[75,109595,109597],{"className":24151,"code":109596,"language":24153,"meta":66,"style":66},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[81,109598,109599],{"__ignoreMap":66},[84,109600,109601,109603,109605,109607,109609,109611,109613,109615,109617,109619,109621],{"class":86,"line":87},[84,109602,24905],{"class":90},[84,109604,26643],{"class":104},[84,109606,24163],{"class":104},[84,109608,26728],{"class":94},[84,109610,102832],{"class":104},[84,109612,101160],{"class":104},[84,109614,102837],{"class":104},[84,109616,101173],{"class":104},[84,109618,101179],{"class":104},[84,109620,101170],{"class":104},[84,109622,109623],{"class":104}," libXinerama\n",[23,109625,109627],{"id":109626},"glfwerror",[81,109628,109629],{},"GLFWError",[35,109631,109632],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[23,109634,109636],{"id":109635},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[35,109638,109639,109640,82865,109642,109644],{},"尝试 ",[81,109641,101363],{},[81,109643,101366],{},"。可能存在版本差异。",[23,109646,109647],{"id":109647},"保存图片是黑的",[35,109649,102901],{},[28,109651,109652,109655,109658,109668],{},[31,109653,109654],{},"XML 里是否有 light。",[31,109656,109657],{},"相机是否对着模型。",[31,109659,109660,109661,109664,109665,28712],{},"是否先 ",[81,109662,109663],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[81,109666,109667],{},"renderer.render()",[31,109669,109670],{},"物体是否已经掉出视野。",[23,109672,109673],{"id":109673},"远程服务器没有显示器",[35,109675,109676],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[75,109678,109679],{"className":24151,"code":109519,"language":24153,"meta":66,"style":66},[81,109680,109681],{"__ignoreMap":66},[84,109682,109683,109685,109687,109689,109691],{"class":86,"line":87},[84,109684,108140],{"class":477},[84,109686,523],{"class":473},[84,109688,108130],{"class":104},[84,109690,109532],{"class":90},[84,109692,108951],{"class":104},[35,109694,109695],{},"如果 EGL 不可用，再尝试：",[75,109697,109698],{"className":24151,"code":109539,"language":24153,"meta":66,"style":66},[81,109699,109700],{"__ignoreMap":66},[84,109701,109702,109704,109706,109708,109710],{"class":86,"line":87},[84,109703,108140],{"class":477},[84,109705,523],{"class":473},[84,109707,108134],{"class":104},[84,109709,109532],{"class":90},[84,109711,108951],{"class":104},[14,109713,102933],{"id":102932},[35,109715,109716],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[28,109718,109719,109722,109725],{},[31,109720,109721],{},"先用 viewer 看模型和控制是否正常。",[31,109723,109724],{},"再用 renderer 保存图片或构造视觉观测。",[31,109726,109727],{},"最后把状态、动作、图像、奖励组织成训练数据。",[389,109729,109730],{},"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":66,"searchDepth":98,"depth":98,"links":109732},[109733,109734,109735,109740,109745,109746,109747,109754],{"id":100972,"depth":98,"text":100973},{"id":101095,"depth":98,"text":101096},{"id":101370,"depth":98,"text":101371,"children":109736},[109737,109738,109739],{"id":108237,"depth":70,"text":108238},{"id":108267,"depth":70,"text":108268},{"id":108302,"depth":70,"text":108303},{"id":101578,"depth":98,"text":101579,"children":109741},[109742,109743,109744],{"id":101898,"depth":70,"text":101898},{"id":109047,"depth":70,"text":109048},{"id":109225,"depth":70,"text":109226},{"id":102641,"depth":98,"text":102642},{"id":102673,"depth":98,"text":102674},{"id":102778,"depth":98,"text":102779,"children":109748},[109749,109750,109751,109752,109753],{"id":109589,"depth":70,"text":109590},{"id":109626,"depth":70,"text":109629},{"id":109635,"depth":70,"text":109636},{"id":109647,"depth":70,"text":109647},{"id":109673,"depth":70,"text":109673},{"id":102932,"depth":98,"text":102933},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107845,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109761,"title":109762,"body":109763,"description":66,"extension":401,"meta":111674,"navigation":403,"path":111675,"seo":111676,"stem":111677,"__hash__":111678},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109764,"toc":111650},[109765,109768,109770,109773,109775,109794,109797,109803,109806,109808,109810,109834,109836,109850,109852,109893,109895,109906,109908,109911,109917,109920,109954,109957,109989,109992,110024,110028,110031,110071,110074,110080,110083,110089,110093,110096,110102,110105,110109,110112,110152,110154,110167,110170,110172,110754,110756,110768,110771,110782,110784,110787,110806,110818,110821,110842,110845,110848,110891,110894,110897,110917,110924,110926,110944,110959,110962,110968,110971,110977,110994,111001,111032,111043,111077,111088,111105,111114,111122,111127,111141,111144,111165,111171,111185,111190,111220,111230,111255,111263,111286,111289,111305,111308,111316,111322,111344,111357,111378,111387,111426,111437,111439,111442,111448,111451,111454,111460,111463,111483,111486,111488,111527,111529,111532,111540,111543,111546,111573,111576,111586,111592,111595,111601,111603,111609,111613,111616,111618,111621,111645,111648],[10,109766,109762],{"id":109767},"_6控制任务cartpole",[14,109769,100973],{"id":100972},[35,109771,109772],{},"本章搭建一个最小 Cartpole 控制任务。",[35,109774,104657],{},[28,109776,109777,109780,109782,109785,109788,109791],{},[31,109778,109779],{},"slide joint",[31,109781,106510],{},[31,109783,109784],{},"cart force actuator",[31,109786,109787],{},"状态观测",[31,109789,109790],{},"简单控制循环",[31,109792,109793],{},"reward 设计雏形",[35,109795,109796],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[75,109798,109801],{"className":109799,"code":109800,"language":5516,"meta":66},[5514],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[81,109802,109800],{"__ignoreMap":66},[35,109804,109805],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109807,101096],{"id":101095},[35,109809,101099],{},[75,109811,109812],{"className":24151,"code":104714,"language":24153,"meta":66,"style":66},[81,109813,109814],{"__ignoreMap":66},[84,109815,109816,109818,109820,109822,109824,109826,109828,109830,109832],{"class":86,"line":87},[84,109817,24905],{"class":90},[84,109819,26643],{"class":104},[84,109821,24163],{"class":104},[84,109823,26728],{"class":94},[84,109825,104729],{"class":104},[84,109827,101124],{"class":104},[84,109829,102827],{"class":104},[84,109831,101140],{"class":104},[84,109833,104738],{"class":104},[35,109835,103145],{},[75,109837,109838],{"className":24151,"code":101245,"language":24153,"meta":66,"style":66},[81,109839,109840],{"__ignoreMap":66},[84,109841,109842,109844,109846,109848],{"class":86,"line":87},[84,109843,24160],{"class":90},[84,109845,24163],{"class":104},[84,109847,101256],{"class":104},[84,109849,101259],{"class":104},[35,109851,103162],{},[75,109853,109855],{"className":24151,"code":109854,"language":24153,"meta":66,"style":66},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[81,109856,109857,109874,109883],{"__ignoreMap":66},[84,109858,109859,109861,109863,109865,109868,109870,109872],{"class":86,"line":87},[84,109860,30657],{"class":90},[84,109862,29503],{"class":104},[84,109864,25443],{"class":94},[84,109866,109867],{"class":104}," mujoco-cartpole",[84,109869,101301],{"class":104},[84,109871,101304],{"class":94},[84,109873,101307],{"class":94},[84,109875,109876,109878,109880],{"class":86,"line":98},[84,109877,30657],{"class":90},[84,109879,101314],{"class":104},[84,109881,109882],{"class":104}," mujoco-cartpole\n",[84,109884,109885,109887,109889,109891],{"class":86,"line":70},[84,109886,24160],{"class":90},[84,109888,24163],{"class":104},[84,109890,101256],{"class":104},[84,109892,101259],{"class":104},[35,109894,101330],{},[28,109896,109897,109900,109903],{},[31,109898,109899],{},"本章不依赖 Gymnasium。",[31,109901,109902],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[31,109904,109905],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109907,101371],{"id":101370},[35,109909,109910],{},"Cartpole 的模型结构:",[75,109912,109915],{"className":109913,"code":109914,"language":5516,"meta":66},[5514],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[81,109916,109914],{"__ignoreMap":66},[35,109918,109919],{},"小车通过 slide joint 左右移动:",[75,109921,109923],{"className":53394,"code":109922,"language":53396,"meta":66,"style":66},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[81,109924,109925],{"__ignoreMap":66},[84,109926,109927,109929,109931,109933,109935,109938,109940,109942,109945,109947,109949,109952],{"class":86,"line":87},[84,109928,1383],{"class":477},[84,109930,103282],{"class":51627},[84,109932,15249],{"class":90},[84,109934,523],{"class":477},[84,109936,109937],{"class":104},"\"cart_x\"",[84,109939,54150],{"class":90},[84,109941,523],{"class":477},[84,109943,109944],{"class":104},"\"slide\"",[84,109946,106354],{"class":90},[84,109948,523],{"class":477},[84,109950,109951],{"class":104},"\"1 0 0\"",[84,109953,101470],{"class":477},[35,109955,109956],{},"杆子通过 hinge joint 旋转:",[75,109958,109960],{"className":53394,"code":109959,"language":53396,"meta":66,"style":66},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[81,109961,109962],{"__ignoreMap":66},[84,109963,109964,109966,109968,109970,109972,109975,109977,109979,109981,109983,109985,109987],{"class":86,"line":87},[84,109965,1383],{"class":477},[84,109967,103282],{"class":51627},[84,109969,15249],{"class":90},[84,109971,523],{"class":477},[84,109973,109974],{"class":104},"\"pole_hinge\"",[84,109976,54150],{"class":90},[84,109978,523],{"class":477},[84,109980,106345],{"class":104},[84,109982,106354],{"class":90},[84,109984,523],{"class":477},[84,109986,106359],{"class":104},[84,109988,101470],{"class":477},[35,109990,109991],{},"控制力作用在小车 slide joint 上:",[75,109993,109995],{"className":53394,"code":109994,"language":53396,"meta":66,"style":66},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[81,109996,109997],{"__ignoreMap":66},[84,109998,109999,110001,110003,110005,110007,110010,110012,110014,110016,110018,110020,110022],{"class":86,"line":87},[84,110000,1383],{"class":477},[84,110002,106400],{"class":51627},[84,110004,15249],{"class":90},[84,110006,523],{"class":477},[84,110008,110009],{"class":104},"\"cart_motor\"",[84,110011,106410],{"class":90},[84,110013,523],{"class":477},[84,110015,109937],{"class":104},[84,110017,106417],{"class":90},[84,110019,523],{"class":477},[84,110021,54642],{"class":104},[84,110023,101470],{"class":477},[23,110025,110027],{"id":110026},"cartpole-的状态是什么","Cartpole 的状态是什么",[35,110029,110030],{},"这个简化模型有两个关节：",[612,110032,110033,110044],{},[615,110034,110035],{},[618,110036,110037,110039,110041],{},[621,110038,103085],{"align":24065},[621,110040,24066],{"align":24065},[621,110042,110043],{"align":24065},"对应状态",[659,110045,110046,110059],{},[618,110047,110048,110053,110056],{},[664,110049,110050],{"align":24065},[81,110051,110052],{},"cart_x",[664,110054,110055],{"align":24065},"slide",[664,110057,110058],{"align":24065},"小车 x 位置",[618,110060,110061,110066,110068],{},[664,110062,110063],{"align":24065},[81,110064,110065],{},"pole_hinge",[664,110067,106166],{"align":24065},[664,110069,110070],{"align":24065},"杆子角度",[35,110072,110073],{},"所以：",[75,110075,110078],{"className":110076,"code":110077,"language":5516,"meta":66},[5514],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[81,110079,110077],{"__ignoreMap":66},[35,110081,110082],{},"把它们拼起来就是观测：",[75,110084,110087],{"className":110085,"code":110086,"language":5516,"meta":66},[5514],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[81,110088,110086],{"__ignoreMap":66},[23,110090,110092],{"id":110091},"action-是什么","action 是什么",[35,110094,110095],{},"本章只有一个 actuator：",[75,110097,110100],{"className":110098,"code":110099,"language":5516,"meta":66},[5514],"data.ctrl[0] = action\n",[81,110101,110099],{"__ignoreMap":66},[35,110103,110104],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[23,110106,110108],{"id":110107},"reward-是什么","reward 是什么",[35,110110,110111],{},"奖励函数：",[75,110113,110115],{"className":30705,"code":110114,"language":30707,"meta":66,"style":66},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[81,110116,110117],{"__ignoreMap":66},[84,110118,110119,110121,110124,110126,110128,110130,110133,110135,110138,110140,110142,110144,110147,110149],{"class":86,"line":87},[84,110120,17375],{"class":473},[84,110122,110123],{"class":94}," float",[84,110125,478],{"class":477},[84,110127,102729],{"class":94},[84,110129,52598],{"class":473},[84,110131,110132],{"class":94}," 0.1",[84,110134,6847],{"class":473},[84,110136,110137],{"class":477}," cart_x ",[84,110139,928],{"class":473},[84,110141,110137],{"class":477},[84,110143,1005],{"class":473},[84,110145,110146],{"class":477}," pole_angle ",[84,110148,928],{"class":473},[84,110150,110151],{"class":477}," pole_angle)\n",[35,110153,106552],{},[28,110155,110156,110161,110164],{},[31,110157,110158,110159,28712],{},"基础奖励是 ",[81,110160,102729],{},[31,110162,110163],{},"小车离中心越远，扣分越多。",[31,110165,110166],{},"杆子角度越大，扣分越多。",[35,110168,110169],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110171,101579],{"id":101578},[75,110173,110175],{"className":30705,"code":110174,"language":30707,"meta":66,"style":66},"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",[81,110176,110177,110183,110193,110197,110201,110209,110214,110218,110222,110226,110231,110235,110240,110245,110250,110254,110259,110264,110269,110273,110277,110281,110285,110289,110294,110298,110302,110306,110310,110314,110324,110331,110335,110339,110353,110367,110380,110410,110414,110418,110430,110442,110450,110454,110467,110471,110475,110484,110488,110504,110514,110527,110540,110544,110567,110585,110589,110601,110605,110609,110619,110629,110633,110649,110690,110694,110714,110730,110734,110738,110750],{"__ignoreMap":66},[84,110178,110179,110181],{"class":86,"line":87},[84,110180,30719],{"class":473},[84,110182,101627],{"class":477},[84,110184,110185,110187,110189,110191],{"class":86,"line":98},[84,110186,30719],{"class":473},[84,110188,31707],{"class":477},[84,110190,31710],{"class":473},[84,110192,31713],{"class":477},[84,110194,110195],{"class":86,"line":70},[84,110196,2729],{"emptyLinePlaceholder":403},[84,110198,110199],{"class":86,"line":120},[84,110200,2729],{"emptyLinePlaceholder":403},[84,110202,110203,110205,110207],{"class":86,"line":131},[84,110204,101640],{"class":94},[84,110206,13893],{"class":473},[84,110208,101645],{"class":104},[84,110210,110211],{"class":86,"line":145},[84,110212,110213],{"class":104},"\u003Cmujoco model=\"cartpole\">\n",[84,110215,110216],{"class":86,"line":156},[84,110217,101655],{"class":104},[84,110219,110220],{"class":86,"line":164},[84,110221,2729],{"emptyLinePlaceholder":403},[84,110223,110224],{"class":86,"line":175},[84,110225,101664],{"class":104},[84,110227,110228],{"class":86,"line":185},[84,110229,110230],{"class":104},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[84,110232,110233],{"class":86,"line":195},[84,110234,2729],{"emptyLinePlaceholder":403},[84,110236,110237],{"class":86,"line":206},[84,110238,110239],{"class":104},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[84,110241,110242],{"class":86,"line":217},[84,110243,110244],{"class":104},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[84,110246,110247],{"class":86,"line":227},[84,110248,110249],{"class":104},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[84,110251,110252],{"class":86,"line":238},[84,110253,2729],{"emptyLinePlaceholder":403},[84,110255,110256],{"class":86,"line":249},[84,110257,110258],{"class":104},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[84,110260,110261],{"class":86,"line":262},[84,110262,110263],{"class":104},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[84,110265,110266],{"class":86,"line":273},[84,110267,110268],{"class":104},"        \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",[84,110270,110271],{"class":86,"line":283},[84,110272,106764],{"class":104},[84,110274,110275],{"class":86,"line":294},[84,110276,101693],{"class":104},[84,110278,110279],{"class":86,"line":2028},[84,110280,101698],{"class":104},[84,110282,110283],{"class":86,"line":2057},[84,110284,2729],{"emptyLinePlaceholder":403},[84,110286,110287],{"class":86,"line":2062},[84,110288,106781],{"class":104},[84,110290,110291],{"class":86,"line":2079},[84,110292,110293],{"class":104},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[84,110295,110296],{"class":86,"line":2084},[84,110297,106791],{"class":104},[84,110299,110300],{"class":86,"line":2089},[84,110301,101703],{"class":104},[84,110303,110304],{"class":86,"line":2094},[84,110305,96024],{"class":104},[84,110307,110308],{"class":86,"line":2108},[84,110309,2729],{"emptyLinePlaceholder":403},[84,110311,110312],{"class":86,"line":2113},[84,110313,2729],{"emptyLinePlaceholder":403},[84,110315,110316,110318,110321],{"class":86,"line":2906},[84,110317,32274],{"class":473},[84,110319,110320],{"class":90}," get_observation",[84,110322,110323],{"class":477},"(data: mujoco.MjData) -> np.ndarray:\n",[84,110325,110326,110328],{"class":86,"line":2920},[84,110327,4419],{"class":473},[84,110329,110330],{"class":477}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[84,110332,110333],{"class":86,"line":2928},[84,110334,2729],{"emptyLinePlaceholder":403},[84,110336,110337],{"class":86,"line":2933},[84,110338,2729],{"emptyLinePlaceholder":403},[84,110340,110341,110343,110346,110349,110351],{"class":86,"line":2939},[84,110342,32274],{"class":473},[84,110344,110345],{"class":90}," compute_reward",[84,110347,110348],{"class":477},"(obs: np.ndarray) -> ",[84,110350,517],{"class":94},[84,110352,4068],{"class":477},[84,110354,110355,110358,110360,110363,110365],{"class":86,"line":2945},[84,110356,110357],{"class":477},"    cart_x ",[84,110359,523],{"class":473},[84,110361,110362],{"class":477}," obs[",[84,110364,666],{"class":94},[84,110366,33573],{"class":477},[84,110368,110369,110372,110374,110376,110378],{"class":86,"line":2950},[84,110370,110371],{"class":477},"    pole_angle ",[84,110373,523],{"class":473},[84,110375,110362],{"class":477},[84,110377,692],{"class":94},[84,110379,33573],{"class":477},[84,110381,110382,110384,110386,110388,110390,110392,110394,110396,110398,110400,110402,110404,110406,110408],{"class":86,"line":8277},[84,110383,4419],{"class":473},[84,110385,110123],{"class":94},[84,110387,478],{"class":477},[84,110389,102729],{"class":94},[84,110391,52598],{"class":473},[84,110393,110132],{"class":94},[84,110395,6847],{"class":473},[84,110397,110137],{"class":477},[84,110399,928],{"class":473},[84,110401,110137],{"class":477},[84,110403,1005],{"class":473},[84,110405,110146],{"class":477},[84,110407,928],{"class":473},[84,110409,110151],{"class":477},[84,110411,110412],{"class":86,"line":8301},[84,110413,2729],{"emptyLinePlaceholder":403},[84,110415,110416],{"class":86,"line":8306},[84,110417,2729],{"emptyLinePlaceholder":403},[84,110419,110420,110422,110424,110426,110428],{"class":86,"line":8312},[84,110421,32274],{"class":473},[84,110423,2302],{"class":90},[84,110425,101724],{"class":477},[84,110427,96012],{"class":94},[84,110429,4068],{"class":477},[84,110431,110432,110434,110436,110438,110440],{"class":86,"line":8339},[84,110433,101733],{"class":477},[84,110435,523],{"class":473},[84,110437,101738],{"class":477},[84,110439,101640],{"class":94},[84,110441,484],{"class":477},[84,110443,110444,110446,110448],{"class":86,"line":8344},[84,110445,101747],{"class":477},[84,110447,523],{"class":473},[84,110449,101752],{"class":477},[84,110451,110452],{"class":86,"line":8350},[84,110453,2729],{"emptyLinePlaceholder":403},[84,110455,110456,110458,110460,110462,110464],{"class":86,"line":8362},[84,110457,105395],{"class":477},[84,110459,692],{"class":94},[84,110461,4772],{"class":477},[84,110463,523],{"class":473},[84,110465,110466],{"class":94}," 0.1\n",[84,110468,110469],{"class":86,"line":8374},[84,110470,105408],{"class":477},[84,110472,110473],{"class":86,"line":8386},[84,110474,2729],{"emptyLinePlaceholder":403},[84,110476,110477,110480,110482],{"class":86,"line":10045},[84,110478,110479],{"class":477},"    total_reward ",[84,110481,523],{"class":473},[84,110483,105087],{"class":94},[84,110485,110486],{"class":86,"line":10070},[84,110487,2729],{"emptyLinePlaceholder":403},[84,110489,110490,110492,110494,110496,110498,110500,110502],{"class":86,"line":10093},[84,110491,3530],{"class":473},[84,110493,31943],{"class":477},[84,110495,26371],{"class":473},[84,110497,32770],{"class":94},[84,110499,478],{"class":477},[84,110501,6739],{"class":94},[84,110503,31113],{"class":477},[84,110505,110506,110509,110511],{"class":86,"line":10117},[84,110507,110508],{"class":477},"        obs ",[84,110510,523],{"class":473},[84,110512,110513],{"class":477}," get_observation(data)\n",[84,110515,110516,110519,110521,110523,110525],{"class":86,"line":10122},[84,110517,110518],{"class":477},"        pole_angle ",[84,110520,523],{"class":473},[84,110522,110362],{"class":477},[84,110524,692],{"class":94},[84,110526,33573],{"class":477},[84,110528,110529,110532,110534,110536,110538],{"class":86,"line":10127},[84,110530,110531],{"class":477},"        pole_angular_velocity ",[84,110533,523],{"class":473},[84,110535,110362],{"class":477},[84,110537,547],{"class":94},[84,110539,33573],{"class":477},[84,110541,110542],{"class":86,"line":10132},[84,110543,2729],{"emptyLinePlaceholder":403},[84,110545,110546,110549,110551,110554,110556,110558,110560,110562,110564],{"class":86,"line":10141},[84,110547,110548],{"class":477},"        action ",[84,110550,523],{"class":473},[84,110552,110553],{"class":94}," 2.0",[84,110555,6847],{"class":473},[84,110557,110146],{"class":477},[84,110559,954],{"class":473},[84,110561,62193],{"class":94},[84,110563,6847],{"class":473},[84,110565,110566],{"class":477}," pole_angular_velocity\n",[84,110568,110569,110571,110573,110575,110577,110579,110581,110583],{"class":86,"line":10146},[84,110570,110548],{"class":477},[84,110572,523],{"class":473},[84,110574,107773],{"class":477},[84,110576,1005],{"class":473},[84,110578,102729],{"class":94},[84,110580,12764],{"class":477},[84,110582,102729],{"class":94},[84,110584,484],{"class":477},[84,110586,110587],{"class":86,"line":10152},[84,110588,2729],{"emptyLinePlaceholder":403},[84,110590,110591,110593,110595,110597,110599],{"class":86,"line":10173},[84,110592,106943],{"class":477},[84,110594,666],{"class":94},[84,110596,4772],{"class":477},[84,110598,523],{"class":473},[84,110600,107796],{"class":477},[84,110602,110603],{"class":86,"line":10179},[84,110604,101842],{"class":477},[84,110606,110607],{"class":86,"line":10193},[84,110608,2729],{"emptyLinePlaceholder":403},[84,110610,110611,110614,110616],{"class":86,"line":10199},[84,110612,110613],{"class":477},"        reward ",[84,110615,523],{"class":473},[84,110617,110618],{"class":477}," compute_reward(get_observation(data))\n",[84,110620,110621,110624,110626],{"class":86,"line":10226},[84,110622,110623],{"class":477},"        total_reward ",[84,110625,9806],{"class":473},[84,110627,110628],{"class":477}," reward\n",[84,110630,110631],{"class":86,"line":10235},[84,110632,2729],{"emptyLinePlaceholder":403},[84,110634,110635,110637,110639,110641,110643,110645,110647],{"class":86,"line":10241},[84,110636,2826],{"class":473},[84,110638,31943],{"class":477},[84,110640,801],{"class":473},[84,110642,6083],{"class":94},[84,110644,101885],{"class":473},[84,110646,4422],{"class":94},[84,110648,4068],{"class":477},[84,110650,110651,110653,110655,110658,110661,110664,110667,110669,110672,110675,110677,110679,110681,110683,110686,110688],{"class":86,"line":10249},[84,110652,34977],{"class":94},[84,110654,478],{"class":477},[84,110656,110657],{"class":104},"\"step:\"",[84,110659,110660],{"class":477},", step, ",[84,110662,110663],{"class":104},"\"obs:\"",[84,110665,110666],{"class":477},", np.round(obs, ",[84,110668,547],{"class":94},[84,110670,110671],{"class":477},"), ",[84,110673,110674],{"class":104},"\"action:\"",[84,110676,12764],{"class":477},[84,110678,32345],{"class":94},[84,110680,478],{"class":477},[84,110682,517],{"class":94},[84,110684,110685],{"class":477},"(action), ",[84,110687,547],{"class":94},[84,110689,30824],{"class":477},[84,110691,110692],{"class":86,"line":10254},[84,110693,2729],{"emptyLinePlaceholder":403},[84,110695,110696,110698,110700,110703,110705,110707,110710,110712],{"class":86,"line":16933},[84,110697,31626],{"class":94},[84,110699,478],{"class":477},[84,110701,110702],{"class":104},"\"total_reward:\"",[84,110704,12764],{"class":477},[84,110706,32345],{"class":94},[84,110708,110709],{"class":477},"(total_reward, ",[84,110711,547],{"class":94},[84,110713,30824],{"class":477},[84,110715,110716,110718,110720,110723,110726,110728],{"class":86,"line":16939},[84,110717,31626],{"class":94},[84,110719,478],{"class":477},[84,110721,110722],{"class":104},"\"final obs:\"",[84,110724,110725],{"class":477},", np.round(get_observation(data), ",[84,110727,547],{"class":94},[84,110729,30824],{"class":477},[84,110731,110732],{"class":86,"line":16962},[84,110733,2729],{"emptyLinePlaceholder":403},[84,110735,110736],{"class":86,"line":16968},[84,110737,2729],{"emptyLinePlaceholder":403},[84,110739,110740,110742,110744,110746,110748],{"class":86,"line":16991},[84,110741,1871],{"class":473},[84,110743,31547],{"class":94},[84,110745,101885],{"class":473},[84,110747,101888],{"class":104},[84,110749,4068],{"class":477},[84,110751,110752],{"class":86,"line":17005},[84,110753,101895],{"class":477},[35,110755,103896],{},[75,110757,110759],{"className":24151,"code":110758,"language":24153,"meta":66,"style":66},"touch ch6_cartpole.py\n",[81,110760,110761],{"__ignoreMap":66},[84,110762,110763,110765],{"class":86,"line":87},[84,110764,101609],{"class":90},[84,110766,110767],{"class":104}," ch6_cartpole.py\n",[35,110769,110770],{},"运行：",[75,110772,110774],{"className":24151,"code":110773,"language":24153,"meta":66,"style":66},"python ch6_cartpole.py\n",[81,110775,110776],{"__ignoreMap":66},[84,110777,110778,110780],{"class":86,"line":87},[84,110779,30707],{"class":90},[84,110781,110767],{"class":104},[23,110783,101898],{"id":101898},[35,110785,110786],{},"构造观测：",[75,110788,110790],{"className":30705,"code":110789,"language":30707,"meta":66,"style":66},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[81,110791,110792,110800],{"__ignoreMap":66},[84,110793,110794,110796,110798],{"class":86,"line":87},[84,110795,32274],{"class":473},[84,110797,110320],{"class":90},[84,110799,110323],{"class":477},[84,110801,110802,110804],{"class":86,"line":98},[84,110803,4419],{"class":473},[84,110805,110330],{"class":477},[35,110807,110808,110811,110812,110814,110815,110817],{},[81,110809,110810],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[81,110813,104356],{}," 2 维，",[81,110816,104686],{}," 2 维，所以 obs 是 4 维。",[35,110819,110820],{},"设置初始角度：",[75,110822,110824],{"className":30705,"code":110823,"language":30707,"meta":66,"style":66},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[81,110825,110826,110838],{"__ignoreMap":66},[84,110827,110828,110830,110832,110834,110836],{"class":86,"line":87},[84,110829,105025],{"class":477},[84,110831,692],{"class":94},[84,110833,4772],{"class":477},[84,110835,523],{"class":473},[84,110837,110466],{"class":94},[84,110839,110840],{"class":86,"line":98},[84,110841,104869],{"class":477},[35,110843,110844],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[35,110846,110847],{},"简单反馈控制：",[75,110849,110851],{"className":30705,"code":110850,"language":30707,"meta":66,"style":66},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[81,110852,110853,110873],{"__ignoreMap":66},[84,110854,110855,110857,110859,110861,110863,110865,110867,110869,110871],{"class":86,"line":87},[84,110856,107768],{"class":477},[84,110858,523],{"class":473},[84,110860,110553],{"class":94},[84,110862,6847],{"class":473},[84,110864,110146],{"class":477},[84,110866,954],{"class":473},[84,110868,62193],{"class":94},[84,110870,6847],{"class":473},[84,110872,110566],{"class":477},[84,110874,110875,110877,110879,110881,110883,110885,110887,110889],{"class":86,"line":98},[84,110876,107768],{"class":477},[84,110878,523],{"class":473},[84,110880,107773],{"class":477},[84,110882,1005],{"class":473},[84,110884,102729],{"class":94},[84,110886,12764],{"class":477},[84,110888,102729],{"class":94},[84,110890,484],{"class":477},[35,110892,110893],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[35,110895,110896],{},"限制动作：",[75,110898,110900],{"className":30705,"code":110899,"language":30707,"meta":66,"style":66},"np.clip(action, -1.0, 1.0)\n",[81,110901,110902],{"__ignoreMap":66},[84,110903,110904,110907,110909,110911,110913,110915],{"class":86,"line":87},[84,110905,110906],{"class":477},"np.clip(action, ",[84,110908,1005],{"class":473},[84,110910,102729],{"class":94},[84,110912,12764],{"class":477},[84,110914,102729],{"class":94},[84,110916,484],{"class":477},[35,110918,110919,110920,110923],{},"因为 XML 里 ",[81,110921,110922],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[23,110925,102034],{"id":102034},[75,110927,110928],{"className":30705,"code":110789,"language":30707,"meta":66,"style":66},[81,110929,110930,110938],{"__ignoreMap":66},[84,110931,110932,110934,110936],{"class":86,"line":87},[84,110933,32274],{"class":473},[84,110935,110320],{"class":90},[84,110937,110323],{"class":477},[84,110939,110940,110942],{"class":86,"line":98},[84,110941,4419],{"class":473},[84,110943,110330],{"class":477},[35,110945,110946,110947,110950,110951,110954,110955,110958],{},"这段定义了一个函数，用来获取当前观测。",[81,110948,110949],{},"data.qpos.copy()"," 是位置数组副本，",[81,110952,110953],{},"data.qvel.copy()"," 是速度数组副本。",[81,110956,110957],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[35,110960,110961],{},"在本章模型里：",[75,110963,110966],{"className":110964,"code":110965,"language":5516,"meta":66},[5514],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[81,110967,110965],{"__ignoreMap":66},[35,110969,110970],{},"所以返回的 obs 是：",[75,110972,110975],{"className":110973,"code":110974,"language":5516,"meta":66},[5514],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[81,110976,110974],{"__ignoreMap":66},[75,110978,110980],{"className":30705,"code":110979,"language":30707,"meta":66,"style":66},"def compute_reward(obs: np.ndarray) -> float:\n",[81,110981,110982],{"__ignoreMap":66},[84,110983,110984,110986,110988,110990,110992],{"class":86,"line":87},[84,110985,32274],{"class":473},[84,110987,110345],{"class":90},[84,110989,110348],{"class":477},[84,110991,517],{"class":94},[84,110993,4068],{"class":477},[35,110995,110996,110997,111000],{},"这行定义奖励函数。输入是观测 ",[81,110998,110999],{},"obs","，输出是一个浮点数奖励。",[75,111002,111004],{"className":30705,"code":111003,"language":30707,"meta":66,"style":66},"cart_x = obs[0]\npole_angle = obs[1]\n",[81,111005,111006,111019],{"__ignoreMap":66},[84,111007,111008,111011,111013,111015,111017],{"class":86,"line":87},[84,111009,111010],{"class":477},"cart_x ",[84,111012,523],{"class":473},[84,111014,110362],{"class":477},[84,111016,666],{"class":94},[84,111018,33573],{"class":477},[84,111020,111021,111024,111026,111028,111030],{"class":86,"line":98},[84,111022,111023],{"class":477},"pole_angle ",[84,111025,523],{"class":473},[84,111027,110362],{"class":477},[84,111029,692],{"class":94},[84,111031,33573],{"class":477},[35,111033,111034,111035,111038,111039,111042],{},"数组索引从 0 开始。",[81,111036,111037],{},"obs[0]"," 是第一个元素，也就是小车位置。",[81,111040,111041],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[75,111044,111045],{"className":30705,"code":110114,"language":30707,"meta":66,"style":66},[81,111046,111047],{"__ignoreMap":66},[84,111048,111049,111051,111053,111055,111057,111059,111061,111063,111065,111067,111069,111071,111073,111075],{"class":86,"line":87},[84,111050,17375],{"class":473},[84,111052,110123],{"class":94},[84,111054,478],{"class":477},[84,111056,102729],{"class":94},[84,111058,52598],{"class":473},[84,111060,110132],{"class":94},[84,111062,6847],{"class":473},[84,111064,110137],{"class":477},[84,111066,928],{"class":473},[84,111068,110137],{"class":477},[84,111070,1005],{"class":473},[84,111072,110146],{"class":477},[84,111074,928],{"class":473},[84,111076,110151],{"class":477},[35,111078,111079,111080,111083,111084,111087],{},"这行计算奖励。",[81,111081,111082],{},"cart_x * cart_x"," 是小车位置的平方，",[81,111085,111086],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[75,111089,111091],{"className":30705,"code":111090,"language":30707,"meta":66,"style":66},"data.qpos[1] = 0.1\n",[81,111092,111093],{"__ignoreMap":66},[84,111094,111095,111097,111099,111101,111103],{"class":86,"line":87},[84,111096,105025],{"class":477},[84,111098,692],{"class":94},[84,111100,4772],{"class":477},[84,111102,523],{"class":473},[84,111104,110466],{"class":94},[35,111106,111107,111108,111110,111111,111113],{},"手动设置杆子的初始角度。因为 ",[81,111109,105782],{}," 是小车位置，",[81,111112,105785],{}," 是杆子角度，所以这里改的是杆子。",[75,111115,111116],{"className":30705,"code":104869,"language":30707,"meta":66,"style":66},[81,111117,111118],{"__ignoreMap":66},[84,111119,111120],{"class":86,"line":87},[84,111121,104869],{"class":477},[35,111123,105828,111124,111126],{},[81,111125,104356],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[75,111128,111130],{"className":30705,"code":111129,"language":30707,"meta":66,"style":66},"total_reward = 0.0\n",[81,111131,111132],{"__ignoreMap":66},[84,111133,111134,111137,111139],{"class":86,"line":87},[84,111135,111136],{"class":477},"total_reward ",[84,111138,523],{"class":473},[84,111140,105087],{"class":94},[35,111142,111143],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[75,111145,111147],{"className":30705,"code":111146,"language":30707,"meta":66,"style":66},"for step in range(1000):\n",[81,111148,111149],{"__ignoreMap":66},[84,111150,111151,111153,111155,111157,111159,111161,111163],{"class":86,"line":87},[84,111152,3354],{"class":473},[84,111154,31943],{"class":477},[84,111156,26371],{"class":473},[84,111158,32770],{"class":94},[84,111160,478],{"class":477},[84,111162,6739],{"class":94},[84,111164,31113],{"class":477},[35,111166,111167,111168,111170],{},"循环 1000 步。",[81,111169,107460],{}," 是当前步数，从 0 到 999。",[75,111172,111174],{"className":30705,"code":111173,"language":30707,"meta":66,"style":66},"obs = get_observation(data)\n",[81,111175,111176],{"__ignoreMap":66},[84,111177,111178,111181,111183],{"class":86,"line":87},[84,111179,111180],{"class":477},"obs ",[84,111182,523],{"class":473},[84,111184,110513],{"class":477},[35,111186,111187,111188,28712],{},"读取当前状态，保存到 ",[81,111189,110999],{},[75,111191,111193],{"className":30705,"code":111192,"language":30707,"meta":66,"style":66},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[81,111194,111195,111207],{"__ignoreMap":66},[84,111196,111197,111199,111201,111203,111205],{"class":86,"line":87},[84,111198,111023],{"class":477},[84,111200,523],{"class":473},[84,111202,110362],{"class":477},[84,111204,692],{"class":94},[84,111206,33573],{"class":477},[84,111208,111209,111212,111214,111216,111218],{"class":86,"line":98},[84,111210,111211],{"class":477},"pole_angular_velocity ",[84,111213,523],{"class":473},[84,111215,110362],{"class":477},[84,111217,547],{"class":94},[84,111219,33573],{"class":477},[35,111221,111222,111223,111226,111227,28712],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[81,111224,111225],{},"obs[3]","？因为 obs 的顺序是 ",[81,111228,111229],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[75,111231,111233],{"className":30705,"code":111232,"language":30707,"meta":66,"style":66},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[81,111234,111235],{"__ignoreMap":66},[84,111236,111237,111239,111241,111243,111245,111247,111249,111251,111253],{"class":86,"line":87},[84,111238,107768],{"class":477},[84,111240,523],{"class":473},[84,111242,110553],{"class":94},[84,111244,6847],{"class":473},[84,111246,110146],{"class":477},[84,111248,954],{"class":473},[84,111250,62193],{"class":94},[84,111252,6847],{"class":473},[84,111254,110566],{"class":477},[35,111256,111257,111258,101344,111260,111262],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[81,111259,105586],{},[81,111261,35656],{}," 是人为设置的系数，不是固定公式。",[75,111264,111266],{"className":30705,"code":111265,"language":30707,"meta":66,"style":66},"action = np.clip(action, -1.0, 1.0)\n",[81,111267,111268],{"__ignoreMap":66},[84,111269,111270,111272,111274,111276,111278,111280,111282,111284],{"class":86,"line":87},[84,111271,107768],{"class":477},[84,111273,523],{"class":473},[84,111275,107773],{"class":477},[84,111277,1005],{"class":473},[84,111279,102729],{"class":94},[84,111281,12764],{"class":477},[84,111283,102729],{"class":94},[84,111285,484],{"class":477},[35,111287,111288],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[75,111290,111291],{"className":30705,"code":110099,"language":30707,"meta":66,"style":66},[81,111292,111293],{"__ignoreMap":66},[84,111294,111295,111297,111299,111301,111303],{"class":86,"line":87},[84,111296,106197],{"class":477},[84,111298,666],{"class":94},[84,111300,4772],{"class":477},[84,111302,523],{"class":473},[84,111304,107796],{"class":477},[35,111306,111307],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[75,111309,111310],{"className":30705,"code":104831,"language":30707,"meta":66,"style":66},[81,111311,111312],{"__ignoreMap":66},[84,111313,111314],{"class":86,"line":87},[84,111315,104831],{"class":477},[35,111317,111318,111319,111321],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[81,111320,106452],{}," 计算小车和杆子的下一刻状态。",[75,111323,111325],{"className":30705,"code":111324,"language":30707,"meta":66,"style":66},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[81,111326,111327,111336],{"__ignoreMap":66},[84,111328,111329,111332,111334],{"class":86,"line":87},[84,111330,111331],{"class":477},"reward ",[84,111333,523],{"class":473},[84,111335,110618],{"class":477},[84,111337,111338,111340,111342],{"class":86,"line":98},[84,111339,111136],{"class":477},[84,111341,9806],{"class":473},[84,111343,110628],{"class":477},[35,111345,111346,111347,111349,111350,111353,111354,28712],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[81,111348,9806],{}," 是简写，",[81,111351,111352],{},"total_reward += reward"," 等价于 ",[81,111355,111356],{},"total_reward = total_reward + reward",[75,111358,111360],{"className":30705,"code":111359,"language":30707,"meta":66,"style":66},"if step % 100 == 0:\n",[81,111361,111362],{"__ignoreMap":66},[84,111363,111364,111366,111368,111370,111372,111374,111376],{"class":86,"line":87},[84,111365,1871],{"class":473},[84,111367,31943],{"class":477},[84,111369,801],{"class":473},[84,111371,6083],{"class":94},[84,111373,101885],{"class":473},[84,111375,4422],{"class":94},[84,111377,4068],{"class":477},[35,111379,111380,111382,111383,111386],{},[81,111381,801],{}," 是取余数。",[81,111384,111385],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[75,111388,111390],{"className":30705,"code":111389,"language":30707,"meta":66,"style":66},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[81,111391,111392],{"__ignoreMap":66},[84,111393,111394,111396,111398,111400,111402,111404,111406,111408,111410,111412,111414,111416,111418,111420,111422,111424],{"class":86,"line":87},[84,111395,30742],{"class":94},[84,111397,478],{"class":477},[84,111399,110657],{"class":104},[84,111401,110660],{"class":477},[84,111403,110663],{"class":104},[84,111405,110666],{"class":477},[84,111407,547],{"class":94},[84,111409,110671],{"class":477},[84,111411,110674],{"class":104},[84,111413,12764],{"class":477},[84,111415,32345],{"class":94},[84,111417,478],{"class":477},[84,111419,517],{"class":94},[84,111421,110685],{"class":477},[84,111423,547],{"class":94},[84,111425,30824],{"class":477},[35,111427,111428,111429,111432,111433,111436],{},"打印当前步数、观测和动作。",[81,111430,111431],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[81,111434,111435],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111438,102642],{"id":102641},[35,111440,111441],{},"观测向量:",[75,111443,111446],{"className":111444,"code":111445,"language":5516,"meta":66},[5514],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[81,111447,111445],{"__ignoreMap":66},[35,111449,111450],{},"控制器是教学用的简单线性反馈，不保证最优。",[35,111452,111453],{},"每隔 100 步会打印一次：",[75,111455,111458],{"className":111456,"code":111457,"language":5516,"meta":66},[5514],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[81,111459,111457],{"__ignoreMap":66},[35,111461,111462],{},"重点观察：",[28,111464,111465,111471,111476],{},[31,111466,111467,111470],{},[81,111468,111469],{},"pole_angle"," 是否越来越大。",[31,111472,111473,111475],{},[81,111474,110052],{}," 是否跑得太远。",[31,111477,111478,111479,82865,111481,28712],{},"action 是否经常被 clip 到 ",[81,111480,104241],{},[81,111482,692],{},[35,111484,111485],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111487,102674],{"id":102673},[28,111489,111490,111496,111499,111505,111515,111521,111524],{},[31,111491,111492,111493,28712],{},"把初始角度改为 ",[81,111494,111495],{},"data.qpos[1] = 0.3",[31,111497,111498],{},"重新运行，观察控制是否变差。",[31,111500,111501,111502,111504],{},"把 actuator ",[81,111503,107393],{}," 改小。",[31,111506,111507,111508,111511,111512,28712],{},"打印 ",[81,111509,111510],{},"model.nq, model.nv, model.nu","，应为 ",[81,111513,111514],{},"2 2 1",[31,111516,111517,111518,111520],{},"把 reward 里的 ",[81,111519,111086],{}," 系数改大，观察总奖励变化。",[31,111522,111523],{},"把控制器改成反号，观察杆子是否更容易倒。",[31,111525,111526],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111528,102779],{"id":102778},[23,111530,111531],{"id":111531},"杆子方向和预期不一致",[35,111533,102722,111534,111536,111537,111539],{},[81,111535,106565],{}," 和 capsule 的 ",[81,111538,103502],{},"，必要时用 viewer 可视化确认。",[23,111541,111542],{"id":111542},"控制器越控越倒",[35,111544,111545],{},"说明反馈符号可能反了，尝试:",[75,111547,111549],{"className":30705,"code":111548,"language":30707,"meta":66,"style":66},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[81,111550,111551],{"__ignoreMap":66},[84,111552,111553,111555,111557,111559,111561,111563,111565,111567,111569,111571],{"class":86,"line":87},[84,111554,107768],{"class":477},[84,111556,523],{"class":473},[84,111558,52598],{"class":473},[84,111560,105586],{"class":94},[84,111562,6847],{"class":473},[84,111564,110146],{"class":477},[84,111566,1005],{"class":473},[84,111568,62193],{"class":94},[84,111570,6847],{"class":473},[84,111572,110566],{"class":477},[23,111574,111575],{"id":111575},"小车飞走",[35,111577,111578,111579,111581,111582,111585],{},"降低 ",[81,111580,107393],{}," 或缩小 ",[81,111583,111584],{},"action"," 的 clip 范围。",[23,111587,111589,111591],{"id":111588},"obs3-为什么是杆子角速度",[81,111590,111225],{}," 为什么是杆子角速度",[35,111593,111594],{},"因为这个模型里：",[75,111596,111599],{"className":111597,"code":111598,"language":5516,"meta":66},[5514],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[81,111600,111598],{"__ignoreMap":66},[35,111602,110073],{},[75,111604,111607],{"className":111605,"code":111606,"language":5516,"meta":66},[5514],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[81,111608,111606],{"__ignoreMap":66},[23,111610,111612],{"id":111611},"reward-变成负数是否错误","reward 变成负数是否错误",[35,111614,111615],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111617,102933],{"id":102932},[35,111619,111620],{},"一个控制任务通常包含：",[28,111622,111623,111626,111634,111639,111642],{},[31,111624,111625],{},"模型：Cartpole 的 body、joint、actuator。",[31,111627,111628,111629,687,111631,111633],{},"观测：从 ",[81,111630,104356],{},[81,111632,104686],{}," 里取状态。",[31,111635,111636,111637,28712],{},"动作：写入 ",[81,111638,101402],{},[31,111640,111641],{},"奖励：根据任务目标打分。",[31,111643,111644],{},"循环：obs -> action -> step -> reward。",[35,111646,111647],{},"这就是后面 Gymnasium 环境的基本骨架。",[389,111649,104612],{},{"title":66,"searchDepth":98,"depth":98,"links":111651},[111652,111653,111654,111659,111663,111664,111665,111673],{"id":100972,"depth":98,"text":100973},{"id":101095,"depth":98,"text":101096},{"id":101370,"depth":98,"text":101371,"children":111655},[111656,111657,111658],{"id":110026,"depth":70,"text":110027},{"id":110091,"depth":70,"text":110092},{"id":110107,"depth":70,"text":110108},{"id":101578,"depth":98,"text":101579,"children":111660},[111661,111662],{"id":101898,"depth":70,"text":101898},{"id":102034,"depth":70,"text":102034},{"id":102641,"depth":98,"text":102642},{"id":102673,"depth":98,"text":102674},{"id":102778,"depth":98,"text":102779,"children":111666},[111667,111668,111669,111670,111672],{"id":111531,"depth":70,"text":111531},{"id":111542,"depth":70,"text":111542},{"id":111575,"depth":70,"text":111575},{"id":111588,"depth":70,"text":111671},"obs[3] 为什么是杆子角速度",{"id":111611,"depth":70,"text":111612},{"id":102932,"depth":98,"text":102933},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109762,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111680,"title":111681,"body":111682,"description":66,"extension":401,"meta":113696,"navigation":403,"path":113697,"seo":113698,"stem":113699,"__hash__":113700},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111683,"toc":113672},[111684,111687,111689,111692,111694,111711,111714,111717,111723,111726,111728,111730,111754,111756,111770,111772,111813,111815,111833,111835,111838,111844,111847,111875,111879,111885,111910,111913,111944,111951,111954,111957,111963,111966,111972,111975,111981,111985,111988,112013,112016,112018,112778,112780,112792,112794,112805,112807,112810,112827,112830,112832,112843,112846,112848,112894,112897,112910,112913,112995,112998,113000,113016,113026,113039,113042,113081,113091,113102,113112,113125,113128,113157,113160,113170,113173,113179,113196,113207,113209,113215,113232,113243,113264,113267,113279,113282,113303,113306,113314,113322,113339,113342,113411,113418,113426,113429,113442,113449,113451,113454,113460,113463,113466,113472,113478,113480,113520,113522,113528,113537,113540,113542,113562,113565,113568,113574,113578,113580,113607,113610,113613,113640,113646,113649,113652,113654,113657,113660,113666,113669],[10,111685,111681],{"id":111686},"_7控制任务reacher-机械臂到达目标",[14,111688,100973],{"id":100972},[35,111690,111691],{},"本章搭建一个二维两关节 reacher 任务。",[35,111693,104657],{},[28,111695,111696,111699,111702,111705,111708],{},[31,111697,111698],{},"两个 hinge joint",[31,111700,111701],{},"两个 motor actuator",[31,111703,111704],{},"site 作为末端点和目标点",[31,111706,111707],{},"根据末端和目标距离设计 reward",[31,111709,111710],{},"构造机械臂任务的基本形式",[35,111712,111713],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[35,111715,111716],{},"Reacher 任务可以理解为：",[75,111718,111721],{"className":111719,"code":111720,"language":5516,"meta":66},[5514],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[81,111722,111720],{"__ignoreMap":66},[35,111724,111725],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111727,101096],{"id":101095},[35,111729,101099],{},[75,111731,111732],{"className":24151,"code":104714,"language":24153,"meta":66,"style":66},[81,111733,111734],{"__ignoreMap":66},[84,111735,111736,111738,111740,111742,111744,111746,111748,111750,111752],{"class":86,"line":87},[84,111737,24905],{"class":90},[84,111739,26643],{"class":104},[84,111741,24163],{"class":104},[84,111743,26728],{"class":94},[84,111745,104729],{"class":104},[84,111747,101124],{"class":104},[84,111749,102827],{"class":104},[84,111751,101140],{"class":104},[84,111753,104738],{"class":104},[35,111755,103145],{},[75,111757,111758],{"className":24151,"code":101245,"language":24153,"meta":66,"style":66},[81,111759,111760],{"__ignoreMap":66},[84,111761,111762,111764,111766,111768],{"class":86,"line":87},[84,111763,24160],{"class":90},[84,111765,24163],{"class":104},[84,111767,101256],{"class":104},[84,111769,101259],{"class":104},[35,111771,103162],{},[75,111773,111775],{"className":24151,"code":111774,"language":24153,"meta":66,"style":66},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[81,111776,111777,111794,111803],{"__ignoreMap":66},[84,111778,111779,111781,111783,111785,111788,111790,111792],{"class":86,"line":87},[84,111780,30657],{"class":90},[84,111782,29503],{"class":104},[84,111784,25443],{"class":94},[84,111786,111787],{"class":104}," mujoco-reacher",[84,111789,101301],{"class":104},[84,111791,101304],{"class":94},[84,111793,101307],{"class":94},[84,111795,111796,111798,111800],{"class":86,"line":98},[84,111797,30657],{"class":90},[84,111799,101314],{"class":104},[84,111801,111802],{"class":104}," mujoco-reacher\n",[84,111804,111805,111807,111809,111811],{"class":86,"line":70},[84,111806,24160],{"class":90},[84,111808,24163],{"class":104},[84,111810,101256],{"class":104},[84,111812,101259],{"class":104},[35,111814,101330],{},[28,111816,111817,111820,111823],{},[31,111818,111819],{},"本章使用低维状态，不使用图像输入。",[31,111821,111822],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[31,111824,111825,111826,687,111828,687,111830,111832],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[81,111827,104356],{},[81,111829,104686],{},[81,111831,104006],{}," 的方法一致。",[14,111834,101371],{"id":101370},[35,111836,111837],{},"Reacher 任务核心:",[75,111839,111842],{"className":111840,"code":111841,"language":5516,"meta":66},[5514],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[81,111843,111841],{"__ignoreMap":66},[35,111845,111846],{},"读取 site 世界坐标:",[75,111848,111850],{"className":30705,"code":111849,"language":30707,"meta":66,"style":66},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[81,111851,111852,111865],{"__ignoreMap":66},[84,111853,111854,111856,111858,111860,111863],{"class":86,"line":87},[84,111855,103960],{"class":477},[84,111857,523],{"class":473},[84,111859,103731],{"class":477},[84,111861,111862],{"class":104},"\"tip\"",[84,111864,484],{"class":477},[84,111866,111867,111870,111872],{"class":86,"line":98},[84,111868,111869],{"class":477},"tip_pos ",[84,111871,523],{"class":473},[84,111873,111874],{"class":477}," data.site_xpos[site_id]\n",[23,111876,111878],{"id":111877},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[35,111880,111881,111882,111884],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[81,111883,104356],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[75,111886,111888],{"className":30705,"code":111887,"language":30707,"meta":66,"style":66},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[81,111889,111890,111900],{"__ignoreMap":66},[84,111891,111892,111895,111897],{"class":86,"line":87},[84,111893,111894],{"class":477},"tip ",[84,111896,523],{"class":473},[84,111898,111899],{"class":477}," data.site_xpos[tip_site_id]\n",[84,111901,111902,111905,111907],{"class":86,"line":98},[84,111903,111904],{"class":477},"target ",[84,111906,523],{"class":473},[84,111908,111909],{"class":477}," data.site_xpos[target_site_id]\n",[35,111911,111912],{},"这样 reward 就很容易写：",[75,111914,111916],{"className":30705,"code":111915,"language":30707,"meta":66,"style":66},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[81,111917,111918,111933],{"__ignoreMap":66},[84,111919,111920,111923,111925,111928,111930],{"class":86,"line":87},[84,111921,111922],{"class":477},"dist ",[84,111924,523],{"class":473},[84,111926,111927],{"class":477}," np.linalg.norm(tip ",[84,111929,1005],{"class":473},[84,111931,111932],{"class":477}," target)\n",[84,111934,111935,111937,111939,111941],{"class":86,"line":98},[84,111936,111331],{"class":477},[84,111938,523],{"class":473},[84,111940,52598],{"class":473},[84,111942,111943],{"class":477},"dist\n",[35,111945,111946,111947,111950],{},"距离越小，",[81,111948,111949],{},"-dist"," 越接近 0，奖励越高。",[23,111952,111953],{"id":111953},"两关节机械臂的状态",[35,111955,111956],{},"这个模型有两个 hinge joint：",[75,111958,111961],{"className":111959,"code":111960,"language":5516,"meta":66},[5514],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[81,111962,111960],{"__ignoreMap":66},[35,111964,111965],{},"再加上末端和目标位置：",[75,111967,111970],{"className":111968,"code":111969,"language":5516,"meta":66},[5514],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[81,111971,111969],{"__ignoreMap":66},[35,111973,111974],{},"总维度：",[75,111976,111979],{"className":111977,"code":111978,"language":5516,"meta":66},[5514],"2 + 2 + 3 + 3 = 10\n",[81,111980,111978],{"__ignoreMap":66},[23,111982,111984],{"id":111983},"为什么-gravity-是-0","为什么 gravity 是 0",[35,111986,111987],{},"本章把重力设为：",[75,111989,111991],{"className":53394,"code":111990,"language":53396,"meta":66,"style":66},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[81,111992,111993],{"__ignoreMap":66},[84,111994,111995,111997,111999,112001,112003,112005,112007,112009,112011],{"class":86,"line":87},[84,111996,1383],{"class":477},[84,111998,69492],{"class":51627},[84,112000,101520],{"class":90},[84,112002,523],{"class":477},[84,112004,101525],{"class":104},[84,112006,101528],{"class":90},[84,112008,523],{"class":477},[84,112010,104097],{"class":104},[84,112012,101470],{"class":477},[35,112014,112015],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112017,101579],{"id":101578},[75,112019,112021],{"className":30705,"code":112020,"language":30707,"meta":66,"style":66},"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",[81,112022,112023,112029,112039,112043,112047,112055,112060,112065,112069,112073,112078,112083,112087,112092,112097,112102,112106,112111,112116,112121,112126,112130,112134,112138,112142,112146,112151,112156,112160,112164,112168,112172,112176,112191,112200,112212,112235,112242,112246,112250,112260,112274,112288,112295,112299,112303,112317,112329,112341,112354,112369,112386,112390,112394,112406,112418,112426,112434,112438,112454,112459,112472,112485,112500,112504,112539,112571,112575,112579,112588,112592,112608,112618,112629,112645,112661,112677,112693,112697,112715,112735,112754,112758,112762,112774],{"__ignoreMap":66},[84,112024,112025,112027],{"class":86,"line":87},[84,112026,30719],{"class":473},[84,112028,101627],{"class":477},[84,112030,112031,112033,112035,112037],{"class":86,"line":98},[84,112032,30719],{"class":473},[84,112034,31707],{"class":477},[84,112036,31710],{"class":473},[84,112038,31713],{"class":477},[84,112040,112041],{"class":86,"line":70},[84,112042,2729],{"emptyLinePlaceholder":403},[84,112044,112045],{"class":86,"line":120},[84,112046,2729],{"emptyLinePlaceholder":403},[84,112048,112049,112051,112053],{"class":86,"line":131},[84,112050,101640],{"class":94},[84,112052,13893],{"class":473},[84,112054,101645],{"class":104},[84,112056,112057],{"class":86,"line":145},[84,112058,112059],{"class":104},"\u003Cmujoco model=\"two_link_reacher\">\n",[84,112061,112062],{"class":86,"line":156},[84,112063,112064],{"class":104},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[84,112066,112067],{"class":86,"line":164},[84,112068,2729],{"emptyLinePlaceholder":403},[84,112070,112071],{"class":86,"line":175},[84,112072,101664],{"class":104},[84,112074,112075],{"class":86,"line":185},[84,112076,112077],{"class":104},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[84,112079,112080],{"class":86,"line":195},[84,112081,112082],{"class":104},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[84,112084,112085],{"class":86,"line":206},[84,112086,2729],{"emptyLinePlaceholder":403},[84,112088,112089],{"class":86,"line":217},[84,112090,112091],{"class":104},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[84,112093,112094],{"class":86,"line":227},[84,112095,112096],{"class":104},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[84,112098,112099],{"class":86,"line":238},[84,112100,112101],{"class":104},"      \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",[84,112103,112104],{"class":86,"line":249},[84,112105,2729],{"emptyLinePlaceholder":403},[84,112107,112108],{"class":86,"line":262},[84,112109,112110],{"class":104},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[84,112112,112113],{"class":86,"line":273},[84,112114,112115],{"class":104},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[84,112117,112118],{"class":86,"line":283},[84,112119,112120],{"class":104},"        \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",[84,112122,112123],{"class":86,"line":294},[84,112124,112125],{"class":104},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[84,112127,112128],{"class":86,"line":2028},[84,112129,106764],{"class":104},[84,112131,112132],{"class":86,"line":2057},[84,112133,101693],{"class":104},[84,112135,112136],{"class":86,"line":2062},[84,112137,101698],{"class":104},[84,112139,112140],{"class":86,"line":2079},[84,112141,2729],{"emptyLinePlaceholder":403},[84,112143,112144],{"class":86,"line":2084},[84,112145,106781],{"class":104},[84,112147,112148],{"class":86,"line":2089},[84,112149,112150],{"class":104},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[84,112152,112153],{"class":86,"line":2094},[84,112154,112155],{"class":104},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[84,112157,112158],{"class":86,"line":2108},[84,112159,106791],{"class":104},[84,112161,112162],{"class":86,"line":2113},[84,112163,101703],{"class":104},[84,112165,112166],{"class":86,"line":2906},[84,112167,96024],{"class":104},[84,112169,112170],{"class":86,"line":2920},[84,112171,2729],{"emptyLinePlaceholder":403},[84,112173,112174],{"class":86,"line":2928},[84,112175,2729],{"emptyLinePlaceholder":403},[84,112177,112178,112180,112183,112186,112188],{"class":86,"line":2933},[84,112179,32274],{"class":473},[84,112181,112182],{"class":90}," site_position",[84,112184,112185],{"class":477},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[84,112187,1643],{"class":94},[84,112189,112190],{"class":477},") -> np.ndarray:\n",[84,112192,112193,112195,112197],{"class":86,"line":2939},[84,112194,103726],{"class":477},[84,112196,523],{"class":473},[84,112198,112199],{"class":477}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[84,112201,112202,112204,112206,112208,112210],{"class":86,"line":2945},[84,112203,3430],{"class":473},[84,112205,103775],{"class":477},[84,112207,1383],{"class":473},[84,112209,4422],{"class":94},[84,112211,4068],{"class":477},[84,112213,112214,112216,112218,112220,112222,112225,112227,112229,112231,112233],{"class":86,"line":2950},[84,112215,103758],{"class":473},[84,112217,103761],{"class":94},[84,112219,478],{"class":477},[84,112221,529],{"class":473},[84,112223,112224],{"class":104},"\"site not found: ",[84,112226,1369],{"class":94},[84,112228,80136],{"class":477},[84,112230,1419],{"class":94},[84,112232,725],{"class":104},[84,112234,484],{"class":477},[84,112236,112237,112239],{"class":86,"line":8277},[84,112238,4419],{"class":473},[84,112240,112241],{"class":477}," data.site_xpos[site_id].copy()\n",[84,112243,112244],{"class":86,"line":8301},[84,112245,2729],{"emptyLinePlaceholder":403},[84,112247,112248],{"class":86,"line":8306},[84,112249,2729],{"emptyLinePlaceholder":403},[84,112251,112252,112254,112257],{"class":86,"line":8312},[84,112253,32274],{"class":473},[84,112255,112256],{"class":90}," get_obs",[84,112258,112259],{"class":477},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[84,112261,112262,112265,112267,112270,112272],{"class":86,"line":8339},[84,112263,112264],{"class":477},"    tip ",[84,112266,523],{"class":473},[84,112268,112269],{"class":477}," site_position(model, data, ",[84,112271,111862],{"class":104},[84,112273,484],{"class":477},[84,112275,112276,112279,112281,112283,112286],{"class":86,"line":8344},[84,112277,112278],{"class":477},"    target ",[84,112280,523],{"class":473},[84,112282,112269],{"class":477},[84,112284,112285],{"class":104},"\"target\"",[84,112287,484],{"class":477},[84,112289,112290,112292],{"class":86,"line":8350},[84,112291,4419],{"class":473},[84,112293,112294],{"class":477}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[84,112296,112297],{"class":86,"line":8362},[84,112298,2729],{"emptyLinePlaceholder":403},[84,112300,112301],{"class":86,"line":8374},[84,112302,2729],{"emptyLinePlaceholder":403},[84,112304,112305,112307,112310,112313,112315],{"class":86,"line":8386},[84,112306,32274],{"class":473},[84,112308,112309],{"class":90}," reward",[84,112311,112312],{"class":477},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[84,112314,517],{"class":94},[84,112316,4068],{"class":477},[84,112318,112319,112321,112323,112325,112327],{"class":86,"line":10045},[84,112320,112264],{"class":477},[84,112322,523],{"class":473},[84,112324,112269],{"class":477},[84,112326,111862],{"class":104},[84,112328,484],{"class":477},[84,112330,112331,112333,112335,112337,112339],{"class":86,"line":10070},[84,112332,112278],{"class":477},[84,112334,523],{"class":473},[84,112336,112269],{"class":477},[84,112338,112285],{"class":104},[84,112340,484],{"class":477},[84,112342,112343,112346,112348,112350,112352],{"class":86,"line":10093},[84,112344,112345],{"class":477},"    dist ",[84,112347,523],{"class":473},[84,112349,111927],{"class":477},[84,112351,1005],{"class":473},[84,112353,111932],{"class":477},[84,112355,112356,112359,112361,112364,112366],{"class":86,"line":10117},[84,112357,112358],{"class":477},"    control_cost ",[84,112360,523],{"class":473},[84,112362,112363],{"class":94}," 0.01",[84,112365,6847],{"class":473},[84,112367,112368],{"class":477}," np.sum(np.square(data.ctrl))\n",[84,112370,112371,112373,112375,112377,112379,112381,112383],{"class":86,"line":10122},[84,112372,4419],{"class":473},[84,112374,110123],{"class":94},[84,112376,478],{"class":477},[84,112378,1005],{"class":473},[84,112380,111922],{"class":477},[84,112382,1005],{"class":473},[84,112384,112385],{"class":477}," control_cost)\n",[84,112387,112388],{"class":86,"line":10127},[84,112389,2729],{"emptyLinePlaceholder":403},[84,112391,112392],{"class":86,"line":10132},[84,112393,2729],{"emptyLinePlaceholder":403},[84,112395,112396,112398,112400,112402,112404],{"class":86,"line":10141},[84,112397,32274],{"class":473},[84,112399,2302],{"class":90},[84,112401,101724],{"class":477},[84,112403,96012],{"class":94},[84,112405,4068],{"class":477},[84,112407,112408,112410,112412,112414,112416],{"class":86,"line":10146},[84,112409,101733],{"class":477},[84,112411,523],{"class":473},[84,112413,101738],{"class":477},[84,112415,101640],{"class":94},[84,112417,484],{"class":477},[84,112419,112420,112422,112424],{"class":86,"line":10152},[84,112421,101747],{"class":477},[84,112423,523],{"class":473},[84,112425,101752],{"class":477},[84,112427,112428,112430,112432],{"class":86,"line":10173},[84,112429,110479],{"class":477},[84,112431,523],{"class":473},[84,112433,105087],{"class":94},[84,112435,112436],{"class":86,"line":10179},[84,112437,2729],{"emptyLinePlaceholder":403},[84,112439,112440,112442,112444,112446,112448,112450,112452],{"class":86,"line":10193},[84,112441,3530],{"class":473},[84,112443,31943],{"class":477},[84,112445,26371],{"class":473},[84,112447,32770],{"class":94},[84,112449,478],{"class":477},[84,112451,65400],{"class":94},[84,112453,31113],{"class":477},[84,112455,112456],{"class":86,"line":10199},[84,112457,112458],{"class":477},"        mujoco.mj_forward(model, data)\n",[84,112460,112461,112464,112466,112468,112470],{"class":86,"line":10226},[84,112462,112463],{"class":477},"        tip ",[84,112465,523],{"class":473},[84,112467,112269],{"class":477},[84,112469,111862],{"class":104},[84,112471,484],{"class":477},[84,112473,112474,112477,112479,112481,112483],{"class":86,"line":10235},[84,112475,112476],{"class":477},"        target ",[84,112478,523],{"class":473},[84,112480,112269],{"class":477},[84,112482,112285],{"class":104},[84,112484,484],{"class":477},[84,112486,112487,112490,112492,112495,112497],{"class":86,"line":10241},[84,112488,112489],{"class":477},"        error ",[84,112491,523],{"class":473},[84,112493,112494],{"class":477}," target ",[84,112496,1005],{"class":473},[84,112498,112499],{"class":477}," tip\n",[84,112501,112502],{"class":86,"line":10249},[84,112503,2729],{"emptyLinePlaceholder":403},[84,112505,112506,112508,112510,112512,112514,112517,112519,112521,112524,112526,112529,112531,112533,112535,112537],{"class":86,"line":10254},[84,112507,106943],{"class":477},[84,112509,666],{"class":94},[84,112511,4772],{"class":477},[84,112513,523],{"class":473},[84,112515,112516],{"class":477}," np.clip(",[84,112518,105586],{"class":94},[84,112520,6847],{"class":473},[84,112522,112523],{"class":477}," error[",[84,112525,553],{"class":94},[84,112527,112528],{"class":477},"], ",[84,112530,1005],{"class":473},[84,112532,102729],{"class":94},[84,112534,12764],{"class":477},[84,112536,102729],{"class":94},[84,112538,484],{"class":477},[84,112540,112541,112543,112545,112547,112549,112551,112553,112555,112557,112559,112561,112563,112565,112567,112569],{"class":86,"line":16933},[84,112542,106943],{"class":477},[84,112544,692],{"class":94},[84,112546,4772],{"class":477},[84,112548,523],{"class":473},[84,112550,112516],{"class":477},[84,112552,105586],{"class":94},[84,112554,6847],{"class":473},[84,112556,112523],{"class":477},[84,112558,666],{"class":94},[84,112560,112528],{"class":477},[84,112562,1005],{"class":473},[84,112564,102729],{"class":94},[84,112566,12764],{"class":477},[84,112568,102729],{"class":94},[84,112570,484],{"class":477},[84,112572,112573],{"class":86,"line":16939},[84,112574,2729],{"emptyLinePlaceholder":403},[84,112576,112577],{"class":86,"line":16962},[84,112578,101842],{"class":477},[84,112580,112581,112583,112585],{"class":86,"line":16968},[84,112582,110623],{"class":477},[84,112584,9806],{"class":473},[84,112586,112587],{"class":477}," reward(model, data)\n",[84,112589,112590],{"class":86,"line":16991},[84,112591,2729],{"emptyLinePlaceholder":403},[84,112593,112594,112596,112598,112600,112602,112604,112606],{"class":86,"line":17005},[84,112595,2826],{"class":473},[84,112597,31943],{"class":477},[84,112599,801],{"class":473},[84,112601,6083],{"class":94},[84,112603,101885],{"class":473},[84,112605,4422],{"class":94},[84,112607,4068],{"class":477},[84,112609,112610,112613,112615],{"class":86,"line":17025},[84,112611,112612],{"class":477},"            obs ",[84,112614,523],{"class":473},[84,112616,112617],{"class":477}," get_obs(model, data)\n",[84,112619,112620,112622,112624,112626],{"class":86,"line":17031},[84,112621,34977],{"class":94},[84,112623,478],{"class":477},[84,112625,110657],{"class":104},[84,112627,112628],{"class":477},", step)\n",[84,112630,112631,112633,112635,112638,112641,112643],{"class":86,"line":17042},[84,112632,34977],{"class":94},[84,112634,478],{"class":477},[84,112636,112637],{"class":104},"\"  tip:\"",[84,112639,112640],{"class":477},", np.round(tip, ",[84,112642,547],{"class":94},[84,112644,30824],{"class":477},[84,112646,112647,112649,112651,112654,112657,112659],{"class":86,"line":17065},[84,112648,34977],{"class":94},[84,112650,478],{"class":477},[84,112652,112653],{"class":104},"\"  target:\"",[84,112655,112656],{"class":477},", np.round(target, ",[84,112658,547],{"class":94},[84,112660,30824],{"class":477},[84,112662,112663,112665,112667,112670,112673,112675],{"class":86,"line":17087},[84,112664,34977],{"class":94},[84,112666,478],{"class":477},[84,112668,112669],{"class":104},"\"  ctrl:\"",[84,112671,112672],{"class":477},", np.round(data.ctrl.copy(), ",[84,112674,547],{"class":94},[84,112676,30824],{"class":477},[84,112678,112679,112681,112683,112686,112689,112691],{"class":86,"line":17092},[84,112680,34977],{"class":94},[84,112682,478],{"class":477},[84,112684,112685],{"class":104},"\"  obs_dim:\"",[84,112687,112688],{"class":477},", obs.shape[",[84,112690,666],{"class":94},[84,112692,4986],{"class":477},[84,112694,112695],{"class":86,"line":17098},[84,112696,2729],{"emptyLinePlaceholder":403},[84,112698,112699,112701,112703,112705,112707,112709,112711,112713],{"class":86,"line":17112},[84,112700,31626],{"class":94},[84,112702,478],{"class":477},[84,112704,110702],{"class":104},[84,112706,12764],{"class":477},[84,112708,32345],{"class":94},[84,112710,110709],{"class":477},[84,112712,547],{"class":94},[84,112714,30824],{"class":477},[84,112716,112717,112719,112721,112724,112727,112729,112731,112733],{"class":86,"line":17125},[84,112718,31626],{"class":94},[84,112720,478],{"class":477},[84,112722,112723],{"class":104},"\"final tip:\"",[84,112725,112726],{"class":477},", np.round(site_position(model, data, ",[84,112728,111862],{"class":104},[84,112730,110671],{"class":477},[84,112732,547],{"class":94},[84,112734,30824],{"class":477},[84,112736,112737,112739,112741,112744,112746,112748,112750,112752],{"class":86,"line":17130},[84,112738,31626],{"class":94},[84,112740,478],{"class":477},[84,112742,112743],{"class":104},"\"target:\"",[84,112745,112726],{"class":477},[84,112747,112285],{"class":104},[84,112749,110671],{"class":477},[84,112751,547],{"class":94},[84,112753,30824],{"class":477},[84,112755,112756],{"class":86,"line":17144},[84,112757,2729],{"emptyLinePlaceholder":403},[84,112759,112760],{"class":86,"line":17149},[84,112761,2729],{"emptyLinePlaceholder":403},[84,112763,112764,112766,112768,112770,112772],{"class":86,"line":17155},[84,112765,1871],{"class":473},[84,112767,31547],{"class":94},[84,112769,101885],{"class":473},[84,112771,101888],{"class":104},[84,112773,4068],{"class":477},[84,112775,112776],{"class":86,"line":17160},[84,112777,101895],{"class":477},[35,112779,103896],{},[75,112781,112783],{"className":24151,"code":112782,"language":24153,"meta":66,"style":66},"touch ch7_reacher.py\n",[81,112784,112785],{"__ignoreMap":66},[84,112786,112787,112789],{"class":86,"line":87},[84,112788,101609],{"class":90},[84,112790,112791],{"class":104}," ch7_reacher.py\n",[35,112793,110770],{},[75,112795,112797],{"className":24151,"code":112796,"language":24153,"meta":66,"style":66},"python ch7_reacher.py\n",[81,112798,112799],{"__ignoreMap":66},[84,112800,112801,112803],{"class":86,"line":87},[84,112802,30707],{"class":90},[84,112804,112791],{"class":104},[23,112806,101898],{"id":101898},[35,112808,112809],{},"读取 site 坐标：",[75,112811,112813],{"className":30705,"code":112812,"language":30707,"meta":66,"style":66},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[81,112814,112815],{"__ignoreMap":66},[84,112816,112817,112819,112821,112823,112825],{"class":86,"line":87},[84,112818,32274],{"class":473},[84,112820,112182],{"class":90},[84,112822,112185],{"class":477},[84,112824,1643],{"class":94},[84,112826,112190],{"class":477},[35,112828,112829],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[35,112831,110786],{},[75,112833,112835],{"className":30705,"code":112834,"language":30707,"meta":66,"style":66},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[81,112836,112837],{"__ignoreMap":66},[84,112838,112839,112841],{"class":86,"line":87},[84,112840,17375],{"class":473},[84,112842,112294],{"class":477},[35,112844,112845],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[35,112847,110111],{},[75,112849,112851],{"className":30705,"code":112850,"language":30707,"meta":66,"style":66},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[81,112852,112853,112865,112878],{"__ignoreMap":66},[84,112854,112855,112857,112859,112861,112863],{"class":86,"line":87},[84,112856,111922],{"class":477},[84,112858,523],{"class":473},[84,112860,111927],{"class":477},[84,112862,1005],{"class":473},[84,112864,111932],{"class":477},[84,112866,112867,112870,112872,112874,112876],{"class":86,"line":98},[84,112868,112869],{"class":477},"control_cost ",[84,112871,523],{"class":473},[84,112873,112363],{"class":94},[84,112875,6847],{"class":473},[84,112877,112368],{"class":477},[84,112879,112880,112882,112884,112886,112888,112890,112892],{"class":86,"line":70},[84,112881,17375],{"class":473},[84,112883,110123],{"class":94},[84,112885,478],{"class":477},[84,112887,1005],{"class":473},[84,112889,111922],{"class":477},[84,112891,1005],{"class":473},[84,112893,112385],{"class":477},[35,112895,112896],{},"奖励由两部分组成：",[28,112898,112899,112904],{},[31,112900,112901,112903],{},[81,112902,111949],{},"：末端离目标越远，奖励越低。",[31,112905,112906,112909],{},[81,112907,112908],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[35,112911,112912],{},"简单控制器：",[75,112914,112916],{"className":30705,"code":112915,"language":30707,"meta":66,"style":66},"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",[81,112917,112918,112931,112963],{"__ignoreMap":66},[84,112919,112920,112923,112925,112927,112929],{"class":86,"line":87},[84,112921,112922],{"class":477},"error ",[84,112924,523],{"class":473},[84,112926,112494],{"class":477},[84,112928,1005],{"class":473},[84,112930,112499],{"class":477},[84,112932,112933,112935,112937,112939,112941,112943,112945,112947,112949,112951,112953,112955,112957,112959,112961],{"class":86,"line":98},[84,112934,106197],{"class":477},[84,112936,666],{"class":94},[84,112938,4772],{"class":477},[84,112940,523],{"class":473},[84,112942,112516],{"class":477},[84,112944,105586],{"class":94},[84,112946,6847],{"class":473},[84,112948,112523],{"class":477},[84,112950,553],{"class":94},[84,112952,112528],{"class":477},[84,112954,1005],{"class":473},[84,112956,102729],{"class":94},[84,112958,12764],{"class":477},[84,112960,102729],{"class":94},[84,112962,484],{"class":477},[84,112964,112965,112967,112969,112971,112973,112975,112977,112979,112981,112983,112985,112987,112989,112991,112993],{"class":86,"line":70},[84,112966,106197],{"class":477},[84,112968,692],{"class":94},[84,112970,4772],{"class":477},[84,112972,523],{"class":473},[84,112974,112516],{"class":477},[84,112976,105586],{"class":94},[84,112978,6847],{"class":473},[84,112980,112523],{"class":477},[84,112982,666],{"class":94},[84,112984,112528],{"class":477},[84,112986,1005],{"class":473},[84,112988,102729],{"class":94},[84,112990,12764],{"class":477},[84,112992,102729],{"class":94},[84,112994,484],{"class":477},[35,112996,112997],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[23,112999,102034],{"id":102034},[75,113001,113002],{"className":30705,"code":112812,"language":30707,"meta":66,"style":66},[81,113003,113004],{"__ignoreMap":66},[84,113005,113006,113008,113010,113012,113014],{"class":86,"line":87},[84,113007,32274],{"class":473},[84,113009,112182],{"class":90},[84,113011,112185],{"class":477},[84,113013,1643],{"class":94},[84,113015,112190],{"class":477},[35,113017,113018,113019,113021,113022,82865,113024,28712],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[81,113020,80136],{}," 是 site 的名字，比如 ",[81,113023,111862],{},[81,113025,112285],{},[75,113027,113029],{"className":30705,"code":113028,"language":30707,"meta":66,"style":66},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[81,113030,113031],{"__ignoreMap":66},[84,113032,113033,113035,113037],{"class":86,"line":87},[84,113034,103960],{"class":477},[84,113036,523],{"class":473},[84,113038,112199],{"class":477},[35,113040,113041],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[75,113043,113045],{"className":30705,"code":113044,"language":30707,"meta":66,"style":66},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[81,113046,113047,113059],{"__ignoreMap":66},[84,113048,113049,113051,113053,113055,113057],{"class":86,"line":87},[84,113050,1871],{"class":473},[84,113052,103775],{"class":477},[84,113054,1383],{"class":473},[84,113056,4422],{"class":94},[84,113058,4068],{"class":477},[84,113060,113061,113063,113065,113067,113069,113071,113073,113075,113077,113079],{"class":86,"line":98},[84,113062,104221],{"class":473},[84,113064,103761],{"class":94},[84,113066,478],{"class":477},[84,113068,529],{"class":473},[84,113070,112224],{"class":104},[84,113072,1369],{"class":94},[84,113074,80136],{"class":477},[84,113076,1419],{"class":94},[84,113078,725],{"class":104},[84,113080,484],{"class":477},[35,113082,113083,113084,113087,113088,113090],{},"如果 site 没找到，就主动报错。",[81,113085,113086],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[81,113089,80136],{}," 的值放进字符串里。",[75,113092,113094],{"className":30705,"code":113093,"language":30707,"meta":66,"style":66},"return data.site_xpos[site_id].copy()\n",[81,113095,113096],{"__ignoreMap":66},[84,113097,113098,113100],{"class":86,"line":87},[84,113099,17375],{"class":473},[84,113101,112241],{"class":477},[35,113103,113104,113105,113107,113108,113111],{},"返回这个 site 的世界坐标。",[81,113106,104006],{}," 里的每一行都是一个 site 的 ",[81,113109,113110],{},"(x, y, z)"," 坐标。",[75,113113,113115],{"className":30705,"code":113114,"language":30707,"meta":66,"style":66},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[81,113116,113117],{"__ignoreMap":66},[84,113118,113119,113121,113123],{"class":86,"line":87},[84,113120,32274],{"class":473},[84,113122,112256],{"class":90},[84,113124,112259],{"class":477},[35,113126,113127],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[75,113129,113131],{"className":30705,"code":113130,"language":30707,"meta":66,"style":66},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[81,113132,113133,113145],{"__ignoreMap":66},[84,113134,113135,113137,113139,113141,113143],{"class":86,"line":87},[84,113136,111894],{"class":477},[84,113138,523],{"class":473},[84,113140,112269],{"class":477},[84,113142,111862],{"class":104},[84,113144,484],{"class":477},[84,113146,113147,113149,113151,113153,113155],{"class":86,"line":98},[84,113148,111904],{"class":477},[84,113150,523],{"class":473},[84,113152,112269],{"class":477},[84,113154,112285],{"class":104},[84,113156,484],{"class":477},[35,113158,113159],{},"分别读取末端点和目标点的世界坐标。",[75,113161,113162],{"className":30705,"code":112834,"language":30707,"meta":66,"style":66},[81,113163,113164],{"__ignoreMap":66},[84,113165,113166,113168],{"class":86,"line":87},[84,113167,17375],{"class":473},[84,113169,112294],{"class":477},[35,113171,113172],{},"把四部分拼成一个观测数组：",[75,113174,113177],{"className":113175,"code":113176,"language":5516,"meta":66},[5514],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[81,113178,113176],{"__ignoreMap":66},[75,113180,113182],{"className":30705,"code":113181,"language":30707,"meta":66,"style":66},"dist = np.linalg.norm(tip - target)\n",[81,113183,113184],{"__ignoreMap":66},[84,113185,113186,113188,113190,113192,113194],{"class":86,"line":87},[84,113187,111922],{"class":477},[84,113189,523],{"class":473},[84,113191,111927],{"class":477},[84,113193,1005],{"class":473},[84,113195,111932],{"class":477},[35,113197,113198,113199,113202,113203,113206],{},"计算 tip 到 target 的距离。",[81,113200,113201],{},"tip - target"," 得到一个三维向量，",[81,113204,113205],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[35,113208,14962],{},[75,113210,113213],{"className":113211,"code":113212,"language":5516,"meta":66},[5514],"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",[81,113214,113212],{"__ignoreMap":66},[75,113216,113218],{"className":30705,"code":113217,"language":30707,"meta":66,"style":66},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[81,113219,113220],{"__ignoreMap":66},[84,113221,113222,113224,113226,113228,113230],{"class":86,"line":87},[84,113223,112869],{"class":477},[84,113225,523],{"class":473},[84,113227,112363],{"class":94},[84,113229,6847],{"class":473},[84,113231,112368],{"class":477},[35,113233,113234,113235,113238,113239,113242],{},"计算动作惩罚。",[81,113236,113237],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[81,113240,113241],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[75,113244,113246],{"className":30705,"code":113245,"language":30707,"meta":66,"style":66},"return float(-dist - control_cost)\n",[81,113247,113248],{"__ignoreMap":66},[84,113249,113250,113252,113254,113256,113258,113260,113262],{"class":86,"line":87},[84,113251,17375],{"class":473},[84,113253,110123],{"class":94},[84,113255,478],{"class":477},[84,113257,1005],{"class":473},[84,113259,111922],{"class":477},[84,113261,1005],{"class":473},[84,113263,112385],{"class":477},[35,113265,113266],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[75,113268,113269],{"className":30705,"code":111129,"language":30707,"meta":66,"style":66},[81,113270,113271],{"__ignoreMap":66},[84,113272,113273,113275,113277],{"class":86,"line":87},[84,113274,111136],{"class":477},[84,113276,523],{"class":473},[84,113278,105087],{"class":94},[35,113280,113281],{},"累计奖励变量，记录整个运行过程的总分。",[75,113283,113285],{"className":30705,"code":113284,"language":30707,"meta":66,"style":66},"for step in range(500):\n",[81,113286,113287],{"__ignoreMap":66},[84,113288,113289,113291,113293,113295,113297,113299,113301],{"class":86,"line":87},[84,113290,3354],{"class":473},[84,113292,31943],{"class":477},[84,113294,26371],{"class":473},[84,113296,32770],{"class":94},[84,113298,478],{"class":477},[84,113300,65400],{"class":94},[84,113302,31113],{"class":477},[35,113304,113305],{},"运行 500 个控制步。",[75,113307,113308],{"className":30705,"code":104869,"language":30707,"meta":66,"style":66},[81,113309,113310],{"__ignoreMap":66},[84,113311,113312],{"class":86,"line":87},[84,113313,104869],{"class":477},[35,113315,113316,113317,101344,113319,113321],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[81,113318,103557],{},[81,113320,103560],{}," 是当前状态下的坐标。",[75,113323,113325],{"className":30705,"code":113324,"language":30707,"meta":66,"style":66},"error = target - tip\n",[81,113326,113327],{"__ignoreMap":66},[84,113328,113329,113331,113333,113335,113337],{"class":86,"line":87},[84,113330,112922],{"class":477},[84,113332,523],{"class":473},[84,113334,112494],{"class":477},[84,113336,1005],{"class":473},[84,113338,112499],{"class":477},[35,113340,113341],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[75,113343,113345],{"className":30705,"code":113344,"language":30707,"meta":66,"style":66},"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",[81,113346,113347,113379],{"__ignoreMap":66},[84,113348,113349,113351,113353,113355,113357,113359,113361,113363,113365,113367,113369,113371,113373,113375,113377],{"class":86,"line":87},[84,113350,106197],{"class":477},[84,113352,666],{"class":94},[84,113354,4772],{"class":477},[84,113356,523],{"class":473},[84,113358,112516],{"class":477},[84,113360,105586],{"class":94},[84,113362,6847],{"class":473},[84,113364,112523],{"class":477},[84,113366,553],{"class":94},[84,113368,112528],{"class":477},[84,113370,1005],{"class":473},[84,113372,102729],{"class":94},[84,113374,12764],{"class":477},[84,113376,102729],{"class":94},[84,113378,484],{"class":477},[84,113380,113381,113383,113385,113387,113389,113391,113393,113395,113397,113399,113401,113403,113405,113407,113409],{"class":86,"line":98},[84,113382,106197],{"class":477},[84,113384,692],{"class":94},[84,113386,4772],{"class":477},[84,113388,523],{"class":473},[84,113390,112516],{"class":477},[84,113392,105586],{"class":94},[84,113394,6847],{"class":473},[84,113396,112523],{"class":477},[84,113398,666],{"class":94},[84,113400,112528],{"class":477},[84,113402,1005],{"class":473},[84,113404,102729],{"class":94},[84,113406,12764],{"class":477},[84,113408,102729],{"class":94},[84,113410,484],{"class":477},[35,113412,113413,113414,113417],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[81,113415,113416],{},"error -> ctrl -> step"," 的流程。",[75,113419,113420],{"className":30705,"code":104831,"language":30707,"meta":66,"style":66},[81,113421,113422],{"__ignoreMap":66},[84,113423,113424],{"class":86,"line":87},[84,113425,104831],{"class":477},[35,113427,113428],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[75,113430,113432],{"className":30705,"code":113431,"language":30707,"meta":66,"style":66},"obs = get_obs(model, data)\n",[81,113433,113434],{"__ignoreMap":66},[84,113435,113436,113438,113440],{"class":86,"line":87},[84,113437,111180],{"class":477},[84,113439,523],{"class":473},[84,113441,112617],{"class":477},[35,113443,113444,113445,113448],{},"读取最新观测。后面打印 ",[81,113446,113447],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113450,102642],{"id":102641},[35,113452,113453],{},"观测维度为:",[75,113455,113458],{"className":113456,"code":113457,"language":5516,"meta":66},[5514],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[81,113459,113457],{"__ignoreMap":66},[35,113461,113462],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[35,113464,113465],{},"程序每 100 步打印：",[75,113467,113470],{"className":113468,"code":113469,"language":5516,"meta":66},[5514],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[81,113471,113469],{"__ignoreMap":66},[35,113473,113474,113475,113477],{},"如果控制有效，你应该看到最终 ",[81,113476,103557],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113479,102674],{"id":102673},[28,113481,113482,113485,113488,113494,113500,113507,113517],{},[31,113483,113484],{},"修改目标点位置。",[31,113486,113487],{},"重新运行，观察最终 tip 是否变化。",[31,113489,113490,113491,113493],{},"把 gravity 改成 ",[81,113492,102915],{},"，观察控制是否变差。",[31,113495,111507,113496,111511,113498,28712],{},[81,113497,102484],{},[81,113499,553],{},[31,113501,102737,113502,102740,113504,113506],{},[81,113503,110922],{},[81,113505,107633],{},"，观察机械臂是否更难移动。",[31,113508,102737,113509,82856,113511,102740,113513,113516],{},[81,113510,103560],{},[81,113512,104472],{},[81,113514,113515],{},"0.2 0 0.6","，观察 reward 和 final tip。",[31,113518,113519],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113521,102779],{"id":102778},[23,113523,113525],{"id":113524},"site-not-found",[81,113526,113527],{},"site not found",[35,113529,113530,113531,101344,113534,28712],{},"检查 XML 中是否有 ",[81,113532,113533],{},"site name=\"tip\"",[81,113535,113536],{},"site name=\"target\"",[23,113538,113539],{"id":113539},"机械臂完全不动",[35,113541,102849],{},[28,113543,113544,113549,113552,113557],{},[31,113545,113546,113548],{},[81,113547,102484],{}," 是否为 2",[31,113550,113551],{},"actuator 是否引用正确 joint",[31,113553,113554,113556],{},[81,113555,101402],{}," 是否被赋值",[31,113558,113559,113560],{},"是否执行了 ",[81,113561,101011],{},[23,113563,113564],{"id":113564},"控制效果不好",[35,113566,113567],{},"正常。本章重点不是控制器最优，而是任务结构:",[75,113569,113572],{"className":113570,"code":113571,"language":5516,"meta":66},[5514],"obs → action → mj_step → reward → next_obs\n",[81,113573,113571],{"__ignoreMap":66},[23,113575,113577],{"id":113576},"tip-坐标不变化","tip 坐标不变化",[35,113579,102901],{},[28,113581,113582,113587,113595,113604],{},[31,113583,113584,113585,28712],{},"是否每步调用了 ",[81,113586,101011],{},[31,113588,113589,113590,101344,113592,28712],{},"是否写入了 ",[81,113591,106452],{},[81,113593,113594],{},"data.ctrl[1]",[31,113596,113597,113598,687,113601,28712],{},"actuator 是否正确引用 ",[81,113599,113600],{},"joint1",[81,113602,113603],{},"joint2",[31,113605,113606],{},"控制输入是否太小。",[23,113608,113609],{"id":113609},"目标点不会动",[35,113611,113612],{},"本章的 target 是固定 site：",[75,113614,113616],{"className":53394,"code":113615,"language":53396,"meta":66,"style":66},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[81,113617,113618],{"__ignoreMap":66},[84,113619,113620,113622,113624,113626,113628,113630,113632,113634,113637],{"class":86,"line":87},[84,113621,1383],{"class":477},[84,113623,103536],{"class":51627},[84,113625,15249],{"class":90},[84,113627,523],{"class":477},[84,113629,112285],{"class":104},[84,113631,101432],{"class":90},[84,113633,523],{"class":477},[84,113635,113636],{"class":104},"\"0.5 0 0.4\"",[84,113638,113639],{"class":477}," ...\u002F>\n",[35,113641,113642,113643,113645],{},"它直接挂在 ",[81,113644,102167],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[23,113647,113648],{"id":113648},"机械臂不像真实机械臂",[35,113650,113651],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113653,102933],{"id":102932},[35,113655,113656],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[35,113658,113659],{},"核心公式：",[75,113661,113664],{"className":113662,"code":113663,"language":5516,"meta":66},[5514],"distance = ||tip - target||\nreward = -distance - action_cost\n",[81,113665,113663],{"__ignoreMap":66},[35,113667,113668],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[389,113670,113671],{},"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":66,"searchDepth":98,"depth":98,"links":113673},[113674,113675,113676,113681,113685,113686,113687,113695],{"id":100972,"depth":98,"text":100973},{"id":101095,"depth":98,"text":101096},{"id":101370,"depth":98,"text":101371,"children":113677},[113678,113679,113680],{"id":111877,"depth":70,"text":111878},{"id":111953,"depth":70,"text":111953},{"id":111983,"depth":70,"text":111984},{"id":101578,"depth":98,"text":101579,"children":113682},[113683,113684],{"id":101898,"depth":70,"text":101898},{"id":102034,"depth":70,"text":102034},{"id":102641,"depth":98,"text":102642},{"id":102673,"depth":98,"text":102674},{"id":102778,"depth":98,"text":102779,"children":113688},[113689,113690,113691,113692,113693,113694],{"id":113524,"depth":70,"text":113527},{"id":113539,"depth":70,"text":113539},{"id":113564,"depth":70,"text":113564},{"id":113576,"depth":70,"text":113577},{"id":113609,"depth":70,"text":113609},{"id":113648,"depth":70,"text":113648},{"id":102932,"depth":98,"text":102933},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111681,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113702,"title":113703,"body":113704,"description":66,"extension":401,"meta":117166,"navigation":403,"path":117167,"seo":117168,"stem":117169,"__hash__":117170},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113705,"toc":117137},[113706,113709,113711,113714,113717,113742,113745,113751,113754,113760,113762,113764,113788,113790,113808,113810,113853,113855,113882,113884,113887,113939,113942,113948,113957,113960,113998,114001,114040,114043,114051,114058,114061,114067,114069,114123,114130,114175,114178,114182,114198,114208,114210,115471,115473,115485,115487,115498,115500,115503,115524,115527,115530,115563,115569,115572,115605,115608,115611,115652,115657,115671,115674,115687,115692,115715,115717,115732,115742,115757,115764,115784,115799,115817,115820,115837,115845,115861,115867,115899,115912,115944,115954,115989,116003,116049,116063,116105,116116,116129,116135,116168,116171,116198,116208,116248,116258,116275,116282,116300,116303,116344,116357,116372,116375,116398,116401,116413,116416,116435,116440,116461,116464,116479,116482,116516,116528,116543,116546,116571,116574,116593,116596,116628,116631,116655,116661,116691,116698,116711,116714,116716,116718,116724,116727,116730,116742,116745,116747,116801,116803,116807,116813,116822,116825,116832,116834,116857,116860,116864,116866,116884,116890,116892,116925,116928,116934,116938,116941,116961,116966,116970,116977,116997,117002,117006,117009,117029,117032,117118,117122,117125,117131,117134],[10,113707,113703],{"id":113708},"_8gymnasium-风格强化学习接口基础",[14,113710,100973],{"id":100972},[35,113712,113713],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[35,113715,113716],{},"你将实现:",[75,113718,113720],{"className":30705,"code":113719,"language":30707,"meta":66,"style":66},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[81,113721,113722,113732],{"__ignoreMap":66},[84,113723,113724,113727,113729],{"class":86,"line":87},[84,113725,113726],{"class":477},"obs, info ",[84,113728,523],{"class":473},[84,113730,113731],{"class":477}," env.reset()\n",[84,113733,113734,113737,113739],{"class":86,"line":98},[84,113735,113736],{"class":477},"obs, reward, terminated, truncated, info ",[84,113738,523],{"class":473},[84,113740,113741],{"class":477}," env.step(action)\n",[35,113743,113744],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[35,113746,113747,113748,113750],{},"前面章节的代码都是“脚本式”的：在 ",[81,113749,102621],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[35,113752,113753],{},"可以先记住 Gymnasium 环境的核心交互：",[75,113755,113758],{"className":113756,"code":113757,"language":5516,"meta":66},[5514],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[81,113759,113757],{"__ignoreMap":66},[14,113761,101096],{"id":101095},[35,113763,101099],{},[75,113765,113766],{"className":24151,"code":104714,"language":24153,"meta":66,"style":66},[81,113767,113768],{"__ignoreMap":66},[84,113769,113770,113772,113774,113776,113778,113780,113782,113784,113786],{"class":86,"line":87},[84,113771,24905],{"class":90},[84,113773,26643],{"class":104},[84,113775,24163],{"class":104},[84,113777,26728],{"class":94},[84,113779,104729],{"class":104},[84,113781,101124],{"class":104},[84,113783,102827],{"class":104},[84,113785,101140],{"class":104},[84,113787,104738],{"class":104},[35,113789,103145],{},[75,113791,113793],{"className":24151,"code":113792,"language":24153,"meta":66,"style":66},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[81,113794,113795],{"__ignoreMap":66},[84,113796,113797,113799,113801,113803,113805],{"class":86,"line":87},[84,113798,24160],{"class":90},[84,113800,24163],{"class":104},[84,113802,101256],{"class":104},[84,113804,108037],{"class":104},[84,113806,113807],{"class":104}," gymnasium\n",[35,113809,103162],{},[75,113811,113813],{"className":24151,"code":113812,"language":24153,"meta":66,"style":66},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[81,113814,113815,113832,113841],{"__ignoreMap":66},[84,113816,113817,113819,113821,113823,113826,113828,113830],{"class":86,"line":87},[84,113818,30657],{"class":90},[84,113820,29503],{"class":104},[84,113822,25443],{"class":94},[84,113824,113825],{"class":104}," mujoco-gym-api",[84,113827,101301],{"class":104},[84,113829,101304],{"class":94},[84,113831,101307],{"class":94},[84,113833,113834,113836,113838],{"class":86,"line":98},[84,113835,30657],{"class":90},[84,113837,101314],{"class":104},[84,113839,113840],{"class":104}," mujoco-gym-api\n",[84,113842,113843,113845,113847,113849,113851],{"class":86,"line":70},[84,113844,24160],{"class":90},[84,113846,24163],{"class":104},[84,113848,101256],{"class":104},[84,113850,108037],{"class":104},[84,113852,113807],{"class":104},[35,113854,101330],{},[28,113856,113857,113867,113870,113876],{},[31,113858,113859,113860,113863,113864,28712],{},"本章使用 ",[81,113861,113862],{},"gymnasium","，不是旧版 ",[81,113865,113866],{},"gym",[31,113868,113869],{},"Gymnasium API 与旧 Gym API 有差异。",[31,113871,113872,113873,28712],{},"旧 Gym 常见返回值是 4 个: ",[81,113874,113875],{},"obs, reward, done, info",[31,113877,113878,113879,28712],{},"Gymnasium 返回值是 5 个: ",[81,113880,113881],{},"obs, reward, terminated, truncated, info",[14,113883,101371],{"id":101370},[35,113885,113886],{},"强化学习环境接口包含:",[612,113888,113889,113898],{},[615,113890,113891],{},[618,113892,113893,113896],{},[621,113894,113895],{"align":24065},"方法",[621,113897,103022],{"align":24065},[659,113899,113900,113910,113920,113930],{},[618,113901,113902,113907],{},[664,113903,113904],{"align":24065},[81,113905,113906],{},"reset()",[664,113908,113909],{"align":24065},"重置环境",[618,113911,113912,113917],{},[664,113913,113914],{"align":24065},[81,113915,113916],{},"step(action)",[664,113918,113919],{"align":24065},"执行动作",[618,113921,113922,113927],{},[664,113923,113924],{"align":24065},[81,113925,113926],{},"observation_space",[664,113928,113929],{"align":24065},"观测空间",[618,113931,113932,113937],{},[664,113933,113934],{"align":24065},[81,113935,113936],{},"action_space",[664,113938,23983],{"align":24065},[35,113940,113941],{},"一个最小环境需要完成:",[75,113943,113946],{"className":113944,"code":113945,"language":5516,"meta":66},[5514],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[81,113947,113945],{"__ignoreMap":66},[23,113949,113951,101344,113954,104964],{"id":113950},"terminated-和-truncated-的区别",[81,113952,113953],{},"terminated",[81,113955,113956],{},"truncated",[35,113958,113959],{},"Gymnasium 把“结束”拆成两个概念：",[612,113961,113962,113972],{},[615,113963,113964],{},[618,113965,113966,113968,113970],{},[621,113967,104900],{"align":24065},[621,113969,101026],{"align":24065},[621,113971,21516],{"align":24065},[659,113973,113974,113986],{},[618,113975,113976,113980,113983],{},[664,113977,113978],{"align":24065},[81,113979,113953],{},[664,113981,113982],{"align":24065},"任务自然结束",[664,113984,113985],{"align":24065},"机械臂到达目标、机器人摔倒",[618,113987,113988,113992,113995],{},[664,113989,113990],{"align":24065},[81,113991,113956],{},[664,113993,113994],{"align":24065},"因外部限制截断",[664,113996,113997],{"align":24065},"达到最大步数、时间限制",[35,113999,114000],{},"本章中：",[75,114002,114004],{"className":30705,"code":114003,"language":30707,"meta":66,"style":66},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[81,114005,114006,114021],{"__ignoreMap":66},[84,114007,114008,114011,114013,114016,114018],{"class":86,"line":87},[84,114009,114010],{"class":477},"terminated ",[84,114012,523],{"class":473},[84,114014,114015],{"class":477}," dist ",[84,114017,1383],{"class":473},[84,114019,114020],{"class":94}," 0.05\n",[84,114022,114023,114026,114028,114030,114033,114035,114037],{"class":86,"line":98},[84,114024,114025],{"class":477},"truncated ",[84,114027,523],{"class":473},[84,114029,39200],{"class":94},[84,114031,114032],{"class":477},".steps ",[84,114034,2040],{"class":473},[84,114036,39200],{"class":94},[84,114038,114039],{"class":477},".max_steps\n",[35,114041,114042],{},"也就是：",[28,114044,114045,114048],{},[31,114046,114047],{},"末端距离目标小于 0.05，任务成功结束。",[31,114049,114050],{},"步数超过上限，episode 被截断。",[23,114052,114054,101344,114056],{"id":114053},"observation_space-和-action_space",[81,114055,113926],{},[81,114057,113936],{},[35,114059,114060],{},"这两个对象告诉算法：",[75,114062,114065],{"className":114063,"code":114064,"language":5516,"meta":66},[5514],"观测长什么样\n动作允许多大\n",[81,114066,114064],{"__ignoreMap":66},[35,114068,14962],{},[75,114070,114072],{"className":30705,"code":114071,"language":30707,"meta":66,"style":66},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[81,114073,114074],{"__ignoreMap":66},[84,114075,114076,114078,114081,114083,114086,114089,114092,114094,114096,114099,114101,114103,114105,114107,114109,114111,114113,114116,114118,114120],{"class":86,"line":87},[84,114077,31150],{"class":94},[84,114079,114080],{"class":477},".action_space ",[84,114082,523],{"class":473},[84,114084,114085],{"class":477}," spaces.Box(",[84,114087,114088],{"class":5545},"low",[84,114090,114091],{"class":473},"=-",[84,114093,102729],{"class":94},[84,114095,12764],{"class":477},[84,114097,114098],{"class":5545},"high",[84,114100,523],{"class":473},[84,114102,102729],{"class":94},[84,114104,12764],{"class":477},[84,114106,96289],{"class":5545},[84,114108,523],{"class":473},[84,114110,478],{"class":477},[84,114112,553],{"class":94},[84,114114,114115],{"class":477},",), ",[84,114117,93826],{"class":5545},[84,114119,523],{"class":473},[84,114121,114122],{"class":477},"np.float32)\n",[35,114124,114125,114126,114129],{},"表示动作是 2 维数组，每个值都在 ",[81,114127,114128],{},"[-1, 1]"," 范围内。",[75,114131,114133],{"className":30705,"code":114132,"language":30707,"meta":66,"style":66},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[81,114134,114135],{"__ignoreMap":66},[84,114136,114137,114139,114142,114144,114146,114148,114150,114153,114155,114157,114159,114161,114163,114165,114167,114169,114171,114173],{"class":86,"line":87},[84,114138,31150],{"class":94},[84,114140,114141],{"class":477},".observation_space ",[84,114143,523],{"class":473},[84,114145,114085],{"class":477},[84,114147,114088],{"class":5545},[84,114149,114091],{"class":473},[84,114151,114152],{"class":477},"np.inf, ",[84,114154,114098],{"class":5545},[84,114156,523],{"class":473},[84,114158,114152],{"class":477},[84,114160,96289],{"class":5545},[84,114162,523],{"class":473},[84,114164,478],{"class":477},[84,114166,919],{"class":94},[84,114168,114115],{"class":477},[84,114170,93826],{"class":5545},[84,114172,523],{"class":473},[84,114174,114122],{"class":477},[35,114176,114177],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[23,114179,114181],{"id":114180},"frame_skip-是什么","frame_skip 是什么",[75,114183,114185],{"className":30705,"code":114184,"language":30707,"meta":66,"style":66},"self.frame_skip = 5\n",[81,114186,114187],{"__ignoreMap":66},[84,114188,114189,114191,114194,114196],{"class":86,"line":87},[84,114190,31150],{"class":94},[84,114192,114193],{"class":477},".frame_skip ",[84,114195,523],{"class":473},[84,114197,54753],{"class":94},[35,114199,114200,114201,114204,114205,114207],{},"表示外部调用一次 ",[81,114202,114203],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[81,114206,101541],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114209,101579],{"id":101578},[75,114211,114213],{"className":30705,"code":114212,"language":30707,"meta":66,"style":66},"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",[81,114214,114215,114227,114233,114243,114254,114258,114262,114270,114275,114279,114283,114287,114291,114295,114299,114303,114308,114312,114316,114320,114325,114329,114333,114337,114341,114345,114349,114353,114357,114361,114365,114369,114373,114377,114395,114410,114414,114427,114437,114452,114469,114473,114494,114513,114538,114552,114556,114566,114578,114588,114592,114634,114672,114676,114686,114702,114717,114736,114743,114747,114760,114775,114790,114803,114822,114838,114842,114883,114898,114913,114917,114956,114967,114980,114984,114994,115003,115007,115017,115032,115050,115054,115065,115082,115095,115099,115109,115113,115124,115135,115139,115153,115167,115183,115187,115200,115217,115232,115239,115243,115247,115259,115269,115287,115299,115311,115315,115323,115339,115348,115357,115365,115407,115420,115425,115429,115447,115451,115455,115467],{"__ignoreMap":66},[84,114216,114217,114219,114222,114224],{"class":86,"line":87},[84,114218,30719],{"class":473},[84,114220,114221],{"class":477}," gymnasium ",[84,114223,31710],{"class":473},[84,114225,114226],{"class":477}," gym\n",[84,114228,114229,114231],{"class":86,"line":98},[84,114230,30719],{"class":473},[84,114232,101627],{"class":477},[84,114234,114235,114237,114239,114241],{"class":86,"line":70},[84,114236,30719],{"class":473},[84,114238,31707],{"class":477},[84,114240,31710],{"class":473},[84,114242,31713],{"class":477},[84,114244,114245,114247,114249,114251],{"class":86,"line":120},[84,114246,31064],{"class":473},[84,114248,114221],{"class":477},[84,114250,30719],{"class":473},[84,114252,114253],{"class":477}," spaces\n",[84,114255,114256],{"class":86,"line":131},[84,114257,2729],{"emptyLinePlaceholder":403},[84,114259,114260],{"class":86,"line":145},[84,114261,2729],{"emptyLinePlaceholder":403},[84,114263,114264,114266,114268],{"class":86,"line":156},[84,114265,101640],{"class":94},[84,114267,13893],{"class":473},[84,114269,101645],{"class":104},[84,114271,114272],{"class":86,"line":164},[84,114273,114274],{"class":104},"\u003Cmujoco model=\"gym_reacher\">\n",[84,114276,114277],{"class":86,"line":175},[84,114278,112064],{"class":104},[84,114280,114281],{"class":86,"line":185},[84,114282,2729],{"emptyLinePlaceholder":403},[84,114284,114285],{"class":86,"line":195},[84,114286,101664],{"class":104},[84,114288,114289],{"class":86,"line":206},[84,114290,112082],{"class":104},[84,114292,114293],{"class":86,"line":217},[84,114294,2729],{"emptyLinePlaceholder":403},[84,114296,114297],{"class":86,"line":227},[84,114298,112091],{"class":104},[84,114300,114301],{"class":86,"line":238},[84,114302,112096],{"class":104},[84,114304,114305],{"class":86,"line":249},[84,114306,114307],{"class":104},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[84,114309,114310],{"class":86,"line":262},[84,114311,2729],{"emptyLinePlaceholder":403},[84,114313,114314],{"class":86,"line":273},[84,114315,112110],{"class":104},[84,114317,114318],{"class":86,"line":283},[84,114319,112115],{"class":104},[84,114321,114322],{"class":86,"line":294},[84,114323,114324],{"class":104},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[84,114326,114327],{"class":86,"line":2028},[84,114328,112125],{"class":104},[84,114330,114331],{"class":86,"line":2057},[84,114332,106764],{"class":104},[84,114334,114335],{"class":86,"line":2062},[84,114336,101693],{"class":104},[84,114338,114339],{"class":86,"line":2079},[84,114340,101698],{"class":104},[84,114342,114343],{"class":86,"line":2084},[84,114344,2729],{"emptyLinePlaceholder":403},[84,114346,114347],{"class":86,"line":2089},[84,114348,106781],{"class":104},[84,114350,114351],{"class":86,"line":2094},[84,114352,112150],{"class":104},[84,114354,114355],{"class":86,"line":2108},[84,114356,112155],{"class":104},[84,114358,114359],{"class":86,"line":2113},[84,114360,106791],{"class":104},[84,114362,114363],{"class":86,"line":2906},[84,114364,101703],{"class":104},[84,114366,114367],{"class":86,"line":2920},[84,114368,96024],{"class":104},[84,114370,114371],{"class":86,"line":2928},[84,114372,2729],{"emptyLinePlaceholder":403},[84,114374,114375],{"class":86,"line":2933},[84,114376,2729],{"emptyLinePlaceholder":403},[84,114378,114379,114381,114384,114386,114388,114390,114393],{"class":86,"line":2939},[84,114380,15023],{"class":473},[84,114382,114383],{"class":90}," ReacherEnv",[84,114385,478],{"class":477},[84,114387,113866],{"class":90},[84,114389,1031],{"class":477},[84,114391,114392],{"class":90},"Env",[84,114394,31113],{"class":477},[84,114396,114397,114400,114402,114404,114407],{"class":86,"line":2945},[84,114398,114399],{"class":477},"    metadata ",[84,114401,523],{"class":473},[84,114403,4777],{"class":477},[84,114405,114406],{"class":104},"\"render_modes\"",[84,114408,114409],{"class":477},": []}\n",[84,114411,114412],{"class":86,"line":2950},[84,114413,2729],{"emptyLinePlaceholder":403},[84,114415,114416,114418,114420,114423,114425],{"class":86,"line":8277},[84,114417,31128],{"class":473},[84,114419,31131],{"class":94},[84,114421,114422],{"class":477},"(self) -> ",[84,114424,96012],{"class":94},[84,114426,4068],{"class":477},[84,114428,114429,114431,114433,114435],{"class":86,"line":8301},[84,114430,31144],{"class":94},[84,114432,17590],{"class":477},[84,114434,31156],{"class":94},[84,114436,2305],{"class":477},[84,114438,114439,114441,114444,114446,114448,114450],{"class":86,"line":8306},[84,114440,31172],{"class":94},[84,114442,114443],{"class":477},".model ",[84,114445,523],{"class":473},[84,114447,101738],{"class":477},[84,114449,101640],{"class":94},[84,114451,484],{"class":477},[84,114453,114454,114456,114459,114461,114464,114466],{"class":86,"line":8312},[84,114455,31172],{"class":94},[84,114457,114458],{"class":477},".data ",[84,114460,523],{"class":473},[84,114462,114463],{"class":477}," mujoco.MjData(",[84,114465,31150],{"class":94},[84,114467,114468],{"class":477},".model)\n",[84,114470,114471],{"class":86,"line":8339},[84,114472,2729],{"emptyLinePlaceholder":403},[84,114474,114475,114477,114480,114482,114485,114487,114490,114492],{"class":86,"line":8344},[84,114476,31172],{"class":94},[84,114478,114479],{"class":477},".tip_site_id ",[84,114481,523],{"class":473},[84,114483,114484],{"class":477}," mujoco.mj_name2id(",[84,114486,31150],{"class":94},[84,114488,114489],{"class":477},".model, mujoco.mjtObj.mjOBJ_SITE, ",[84,114491,111862],{"class":104},[84,114493,484],{"class":477},[84,114495,114496,114498,114501,114503,114505,114507,114509,114511],{"class":86,"line":8350},[84,114497,31172],{"class":94},[84,114499,114500],{"class":477},".target_site_id ",[84,114502,523],{"class":473},[84,114504,114484],{"class":477},[84,114506,31150],{"class":94},[84,114508,114489],{"class":477},[84,114510,112285],{"class":104},[84,114512,484],{"class":477},[84,114514,114515,114517,114519,114521,114523,114525,114528,114530,114532,114534,114536],{"class":86,"line":8362},[84,114516,2826],{"class":473},[84,114518,39200],{"class":94},[84,114520,114479],{"class":477},[84,114522,1383],{"class":473},[84,114524,4422],{"class":94},[84,114526,114527],{"class":473}," or",[84,114529,39200],{"class":94},[84,114531,114500],{"class":477},[84,114533,1383],{"class":473},[84,114535,4422],{"class":94},[84,114537,4068],{"class":477},[84,114539,114540,114543,114545,114547,114550],{"class":86,"line":8374},[84,114541,114542],{"class":473},"            raise",[84,114544,103761],{"class":94},[84,114546,478],{"class":477},[84,114548,114549],{"class":104},"\"required sites not found\"",[84,114551,484],{"class":477},[84,114553,114554],{"class":86,"line":8386},[84,114555,2729],{"emptyLinePlaceholder":403},[84,114557,114558,114560,114562,114564],{"class":86,"line":10045},[84,114559,31172],{"class":94},[84,114561,114193],{"class":477},[84,114563,523],{"class":473},[84,114565,54753],{"class":94},[84,114567,114568,114570,114573,114575],{"class":86,"line":10070},[84,114569,31172],{"class":94},[84,114571,114572],{"class":477},".max_steps ",[84,114574,523],{"class":473},[84,114576,114577],{"class":94}," 200\n",[84,114579,114580,114582,114584,114586],{"class":86,"line":10093},[84,114581,31172],{"class":94},[84,114583,114032],{"class":477},[84,114585,523],{"class":473},[84,114587,47660],{"class":94},[84,114589,114590],{"class":86,"line":10117},[84,114591,2729],{"emptyLinePlaceholder":403},[84,114593,114594,114596,114598,114600,114602,114604,114606,114608,114610,114612,114614,114616,114618,114620,114622,114624,114626,114628,114630,114632],{"class":86,"line":10122},[84,114595,31172],{"class":94},[84,114597,114080],{"class":477},[84,114599,523],{"class":473},[84,114601,114085],{"class":477},[84,114603,114088],{"class":5545},[84,114605,114091],{"class":473},[84,114607,102729],{"class":94},[84,114609,12764],{"class":477},[84,114611,114098],{"class":5545},[84,114613,523],{"class":473},[84,114615,102729],{"class":94},[84,114617,12764],{"class":477},[84,114619,96289],{"class":5545},[84,114621,523],{"class":473},[84,114623,478],{"class":477},[84,114625,553],{"class":94},[84,114627,114115],{"class":477},[84,114629,93826],{"class":5545},[84,114631,523],{"class":473},[84,114633,114122],{"class":477},[84,114635,114636,114638,114640,114642,114644,114646,114648,114650,114652,114654,114656,114658,114660,114662,114664,114666,114668,114670],{"class":86,"line":10127},[84,114637,31172],{"class":94},[84,114639,114141],{"class":477},[84,114641,523],{"class":473},[84,114643,114085],{"class":477},[84,114645,114088],{"class":5545},[84,114647,114091],{"class":473},[84,114649,114152],{"class":477},[84,114651,114098],{"class":5545},[84,114653,523],{"class":473},[84,114655,114152],{"class":477},[84,114657,96289],{"class":5545},[84,114659,523],{"class":473},[84,114661,478],{"class":477},[84,114663,919],{"class":94},[84,114665,114115],{"class":477},[84,114667,93826],{"class":5545},[84,114669,523],{"class":473},[84,114671,114122],{"class":477},[84,114673,114674],{"class":86,"line":10132},[84,114675,2729],{"emptyLinePlaceholder":403},[84,114677,114678,114680,114683],{"class":86,"line":10141},[84,114679,31128],{"class":473},[84,114681,114682],{"class":90}," _get_obs",[84,114684,114685],{"class":477},"(self) -> np.ndarray:\n",[84,114687,114688,114690,114692,114694,114697,114699],{"class":86,"line":10146},[84,114689,112463],{"class":477},[84,114691,523],{"class":473},[84,114693,39200],{"class":94},[84,114695,114696],{"class":477},".data.site_xpos[",[84,114698,31150],{"class":94},[84,114700,114701],{"class":477},".tip_site_id].copy()\n",[84,114703,114704,114706,114708,114710,114712,114714],{"class":86,"line":10152},[84,114705,112476],{"class":477},[84,114707,523],{"class":473},[84,114709,39200],{"class":94},[84,114711,114696],{"class":477},[84,114713,31150],{"class":94},[84,114715,114716],{"class":477},".target_site_id].copy()\n",[84,114718,114719,114721,114723,114726,114728,114731,114733],{"class":86,"line":10173},[84,114720,110508],{"class":477},[84,114722,523],{"class":473},[84,114724,114725],{"class":477}," np.concatenate([",[84,114727,31150],{"class":94},[84,114729,114730],{"class":477},".data.qpos.copy(), ",[84,114732,31150],{"class":94},[84,114734,114735],{"class":477},".data.qvel.copy(), tip, target])\n",[84,114737,114738,114740],{"class":86,"line":10179},[84,114739,15081],{"class":473},[84,114741,114742],{"class":477}," obs.astype(np.float32)\n",[84,114744,114745],{"class":86,"line":10193},[84,114746,2729],{"emptyLinePlaceholder":403},[84,114748,114749,114751,114754,114756,114758],{"class":86,"line":10199},[84,114750,31128],{"class":473},[84,114752,114753],{"class":90}," _get_reward",[84,114755,114422],{"class":477},[84,114757,517],{"class":94},[84,114759,4068],{"class":477},[84,114761,114762,114764,114766,114768,114770,114772],{"class":86,"line":10226},[84,114763,112463],{"class":477},[84,114765,523],{"class":473},[84,114767,39200],{"class":94},[84,114769,114696],{"class":477},[84,114771,31150],{"class":94},[84,114773,114774],{"class":477},".tip_site_id]\n",[84,114776,114777,114779,114781,114783,114785,114787],{"class":86,"line":10235},[84,114778,112476],{"class":477},[84,114780,523],{"class":473},[84,114782,39200],{"class":94},[84,114784,114696],{"class":477},[84,114786,31150],{"class":94},[84,114788,114789],{"class":477},".target_site_id]\n",[84,114791,114792,114795,114797,114799,114801],{"class":86,"line":10241},[84,114793,114794],{"class":477},"        dist ",[84,114796,523],{"class":473},[84,114798,111927],{"class":477},[84,114800,1005],{"class":473},[84,114802,111932],{"class":477},[84,114804,114805,114808,114810,114812,114814,114817,114819],{"class":86,"line":10249},[84,114806,114807],{"class":477},"        control_cost ",[84,114809,523],{"class":473},[84,114811,112363],{"class":94},[84,114813,6847],{"class":473},[84,114815,114816],{"class":477}," np.sum(np.square(",[84,114818,31150],{"class":94},[84,114820,114821],{"class":477},".data.ctrl))\n",[84,114823,114824,114826,114828,114830,114832,114834,114836],{"class":86,"line":10254},[84,114825,15081],{"class":473},[84,114827,110123],{"class":94},[84,114829,478],{"class":477},[84,114831,1005],{"class":473},[84,114833,111922],{"class":477},[84,114835,1005],{"class":473},[84,114837,112385],{"class":477},[84,114839,114840],{"class":86,"line":16933},[84,114841,2729],{"emptyLinePlaceholder":403},[84,114843,114844,114846,114849,114852,114854,114857,114859,114861,114863,114865,114867,114870,114873,114875,114877,114879,114881],{"class":86,"line":16939},[84,114845,31128],{"class":473},[84,114847,114848],{"class":90}," reset",[84,114850,114851],{"class":477},"(self, ",[84,114853,928],{"class":473},[84,114855,114856],{"class":477},", seed: ",[84,114858,481],{"class":94},[84,114860,25437],{"class":473},[84,114862,39260],{"class":94},[84,114864,13893],{"class":473},[84,114866,39260],{"class":94},[84,114868,114869],{"class":477},", options: ",[84,114871,114872],{"class":94},"dict",[84,114874,25437],{"class":473},[84,114876,39260],{"class":94},[84,114878,13893],{"class":473},[84,114880,39260],{"class":94},[84,114882,31113],{"class":477},[84,114884,114885,114887,114890,114893,114895],{"class":86,"line":16962},[84,114886,31144],{"class":94},[84,114888,114889],{"class":477},"().reset(",[84,114891,114892],{"class":5545},"seed",[84,114894,523],{"class":473},[84,114896,114897],{"class":477},"seed)\n",[84,114899,114900,114903,114905,114908,114910],{"class":86,"line":16968},[84,114901,114902],{"class":477},"        mujoco.mj_resetData(",[84,114904,31150],{"class":94},[84,114906,114907],{"class":477},".model, ",[84,114909,31150],{"class":94},[84,114911,114912],{"class":477},".data)\n",[84,114914,114915],{"class":86,"line":16991},[84,114916,2729],{"emptyLinePlaceholder":403},[84,114918,114919,114921,114924,114926,114928,114931,114933,114935,114937,114939,114941,114943,114945,114947,114949,114951,114953],{"class":86,"line":17005},[84,114920,31172],{"class":94},[84,114922,114923],{"class":477},".data.qpos[:] ",[84,114925,523],{"class":473},[84,114927,39200],{"class":94},[84,114929,114930],{"class":477},".np_random.uniform(",[84,114932,114088],{"class":5545},[84,114934,114091],{"class":473},[84,114936,86536],{"class":94},[84,114938,12764],{"class":477},[84,114940,114098],{"class":5545},[84,114942,523],{"class":473},[84,114944,86536],{"class":94},[84,114946,12764],{"class":477},[84,114948,31823],{"class":5545},[84,114950,523],{"class":473},[84,114952,31150],{"class":94},[84,114954,114955],{"class":477},".model.nq)\n",[84,114957,114958,114960,114963,114965],{"class":86,"line":17025},[84,114959,31172],{"class":94},[84,114961,114962],{"class":477},".data.qvel[:] ",[84,114964,523],{"class":473},[84,114966,105087],{"class":94},[84,114968,114969,114972,114974,114976,114978],{"class":86,"line":17031},[84,114970,114971],{"class":477},"        mujoco.mj_forward(",[84,114973,31150],{"class":94},[84,114975,114907],{"class":477},[84,114977,31150],{"class":94},[84,114979,114912],{"class":477},[84,114981,114982],{"class":86,"line":17042},[84,114983,2729],{"emptyLinePlaceholder":403},[84,114985,114986,114988,114990,114992],{"class":86,"line":17065},[84,114987,31172],{"class":94},[84,114989,114032],{"class":477},[84,114991,523],{"class":473},[84,114993,47660],{"class":94},[84,114995,114996,114998,115000],{"class":86,"line":17087},[84,114997,15081],{"class":473},[84,114999,39200],{"class":94},[84,115001,115002],{"class":477},"._get_obs(), {}\n",[84,115004,115005],{"class":86,"line":17092},[84,115006,2729],{"emptyLinePlaceholder":403},[84,115008,115009,115011,115014],{"class":86,"line":17098},[84,115010,31128],{"class":473},[84,115012,115013],{"class":90}," step",[84,115015,115016],{"class":477},"(self, action):\n",[84,115018,115019,115021,115023,115026,115028,115030],{"class":86,"line":17112},[84,115020,110548],{"class":477},[84,115022,523],{"class":473},[84,115024,115025],{"class":477}," np.asarray(action, ",[84,115027,93826],{"class":5545},[84,115029,523],{"class":473},[84,115031,114122],{"class":477},[84,115033,115034,115036,115038,115040,115042,115045,115047],{"class":86,"line":17125},[84,115035,110548],{"class":477},[84,115037,523],{"class":473},[84,115039,107773],{"class":477},[84,115041,31150],{"class":94},[84,115043,115044],{"class":477},".action_space.low, ",[84,115046,31150],{"class":94},[84,115048,115049],{"class":477},".action_space.high)\n",[84,115051,115052],{"class":86,"line":17130},[84,115053,2729],{"emptyLinePlaceholder":403},[84,115055,115056,115058,115061,115063],{"class":86,"line":17144},[84,115057,31172],{"class":94},[84,115059,115060],{"class":477},".data.ctrl[:] ",[84,115062,523],{"class":473},[84,115064,107796],{"class":477},[84,115066,115067,115069,115071,115073,115075,115077,115079],{"class":86,"line":17149},[84,115068,3732],{"class":473},[84,115070,101827],{"class":477},[84,115072,26371],{"class":473},[84,115074,32770],{"class":94},[84,115076,478],{"class":477},[84,115078,31150],{"class":94},[84,115080,115081],{"class":477},".frame_skip):\n",[84,115083,115084,115087,115089,115091,115093],{"class":86,"line":17155},[84,115085,115086],{"class":477},"            mujoco.mj_step(",[84,115088,31150],{"class":94},[84,115090,114907],{"class":477},[84,115092,31150],{"class":94},[84,115094,114912],{"class":477},[84,115096,115097],{"class":86,"line":17160},[84,115098,2729],{"emptyLinePlaceholder":403},[84,115100,115101,115103,115105,115107],{"class":86,"line":17174},[84,115102,31172],{"class":94},[84,115104,114032],{"class":477},[84,115106,9806],{"class":473},[84,115108,56025],{"class":94},[84,115110,115111],{"class":86,"line":17179},[84,115112,2729],{"emptyLinePlaceholder":403},[84,115114,115115,115117,115119,115121],{"class":86,"line":17184},[84,115116,110508],{"class":477},[84,115118,523],{"class":473},[84,115120,39200],{"class":94},[84,115122,115123],{"class":477},"._get_obs()\n",[84,115125,115126,115128,115130,115132],{"class":86,"line":17198},[84,115127,110613],{"class":477},[84,115129,523],{"class":473},[84,115131,39200],{"class":94},[84,115133,115134],{"class":477},"._get_reward()\n",[84,115136,115137],{"class":86,"line":17210},[84,115138,2729],{"emptyLinePlaceholder":403},[84,115140,115141,115143,115145,115147,115149,115151],{"class":86,"line":17215},[84,115142,112463],{"class":477},[84,115144,523],{"class":473},[84,115146,39200],{"class":94},[84,115148,114696],{"class":477},[84,115150,31150],{"class":94},[84,115152,114774],{"class":477},[84,115154,115155,115157,115159,115161,115163,115165],{"class":86,"line":17228},[84,115156,112476],{"class":477},[84,115158,523],{"class":473},[84,115160,39200],{"class":94},[84,115162,114696],{"class":477},[84,115164,31150],{"class":94},[84,115166,114789],{"class":477},[84,115168,115169,115171,115173,115175,115178,115180],{"class":86,"line":17233},[84,115170,114794],{"class":477},[84,115172,523],{"class":473},[84,115174,110123],{"class":94},[84,115176,115177],{"class":477},"(np.linalg.norm(tip ",[84,115179,1005],{"class":473},[84,115181,115182],{"class":477}," target))\n",[84,115184,115185],{"class":86,"line":17238},[84,115186,2729],{"emptyLinePlaceholder":403},[84,115188,115189,115192,115194,115196,115198],{"class":86,"line":17243},[84,115190,115191],{"class":477},"        terminated ",[84,115193,523],{"class":473},[84,115195,114015],{"class":477},[84,115197,1383],{"class":473},[84,115199,114020],{"class":94},[84,115201,115202,115205,115207,115209,115211,115213,115215],{"class":86,"line":17256},[84,115203,115204],{"class":477},"        truncated ",[84,115206,523],{"class":473},[84,115208,39200],{"class":94},[84,115210,114032],{"class":477},[84,115212,2040],{"class":473},[84,115214,39200],{"class":94},[84,115216,114039],{"class":477},[84,115218,115219,115222,115224,115226,115229],{"class":86,"line":17261},[84,115220,115221],{"class":477},"        info ",[84,115223,523],{"class":473},[84,115225,4777],{"class":477},[84,115227,115228],{"class":104},"\"distance\"",[84,115230,115231],{"class":477},": dist}\n",[84,115233,115234,115236],{"class":86,"line":32960},[84,115235,15081],{"class":473},[84,115237,115238],{"class":477}," obs, reward, terminated, truncated, info\n",[84,115240,115241],{"class":86,"line":32966},[84,115242,2729],{"emptyLinePlaceholder":403},[84,115244,115245],{"class":86,"line":32972},[84,115246,2729],{"emptyLinePlaceholder":403},[84,115248,115249,115251,115253,115255,115257],{"class":86,"line":32978},[84,115250,32274],{"class":473},[84,115252,2302],{"class":90},[84,115254,101724],{"class":477},[84,115256,96012],{"class":94},[84,115258,4068],{"class":477},[84,115260,115261,115264,115266],{"class":86,"line":32984},[84,115262,115263],{"class":477},"    env ",[84,115265,523],{"class":473},[84,115267,115268],{"class":477}," ReacherEnv()\n",[84,115270,115271,115274,115276,115279,115281,115283,115285],{"class":86,"line":32995},[84,115272,115273],{"class":477},"    obs, info ",[84,115275,523],{"class":473},[84,115277,115278],{"class":477}," env.reset(",[84,115280,114892],{"class":5545},[84,115282,523],{"class":473},[84,115284,666],{"class":94},[84,115286,484],{"class":477},[84,115288,115289,115291,115293,115296],{"class":86,"line":33001},[84,115290,31626],{"class":94},[84,115292,478],{"class":477},[84,115294,115295],{"class":104},"\"initial obs shape:\"",[84,115297,115298],{"class":477},", obs.shape)\n",[84,115300,115301,115303,115305,115308],{"class":86,"line":33021},[84,115302,31626],{"class":94},[84,115304,478],{"class":477},[84,115306,115307],{"class":104},"\"initial info:\"",[84,115309,115310],{"class":477},", info)\n",[84,115312,115313],{"class":86,"line":33027},[84,115314,2729],{"emptyLinePlaceholder":403},[84,115316,115317,115319,115321],{"class":86,"line":33038},[84,115318,110479],{"class":477},[84,115320,523],{"class":473},[84,115322,105087],{"class":94},[84,115324,115325,115327,115329,115331,115333,115335,115337],{"class":86,"line":33044},[84,115326,3530],{"class":473},[84,115328,31943],{"class":477},[84,115330,26371],{"class":473},[84,115332,32770],{"class":94},[84,115334,478],{"class":477},[84,115336,1173],{"class":94},[84,115338,31113],{"class":477},[84,115340,115341,115343,115345],{"class":86,"line":33050},[84,115342,110548],{"class":477},[84,115344,523],{"class":473},[84,115346,115347],{"class":477}," env.action_space.sample()\n",[84,115349,115350,115353,115355],{"class":86,"line":33056},[84,115351,115352],{"class":477},"        obs, reward, terminated, truncated, info ",[84,115354,523],{"class":473},[84,115356,113741],{"class":477},[84,115358,115359,115361,115363],{"class":86,"line":33062},[84,115360,110623],{"class":477},[84,115362,9806],{"class":473},[84,115364,110628],{"class":477},[84,115366,115367,115369,115371,115373,115375,115378,115380,115382,115385,115387,115389,115392,115394,115396,115399,115401,115403,115405],{"class":86,"line":33068},[84,115368,32778],{"class":94},[84,115370,478],{"class":477},[84,115372,110657],{"class":104},[84,115374,110660],{"class":477},[84,115376,115377],{"class":104},"\"reward:\"",[84,115379,12764],{"class":477},[84,115381,32345],{"class":94},[84,115383,115384],{"class":477},"(reward, ",[84,115386,547],{"class":94},[84,115388,110671],{"class":477},[84,115390,115391],{"class":104},"\"distance:\"",[84,115393,12764],{"class":477},[84,115395,32345],{"class":94},[84,115397,115398],{"class":477},"(info[",[84,115400,115228],{"class":104},[84,115402,112528],{"class":477},[84,115404,547],{"class":94},[84,115406,30824],{"class":477},[84,115408,115409,115411,115414,115417],{"class":86,"line":33074},[84,115410,2826],{"class":473},[84,115412,115413],{"class":477}," terminated ",[84,115415,115416],{"class":473},"or",[84,115418,115419],{"class":477}," truncated:\n",[84,115421,115422],{"class":86,"line":33080},[84,115423,115424],{"class":473},"            break\n",[84,115426,115427],{"class":86,"line":33100},[84,115428,2729],{"emptyLinePlaceholder":403},[84,115430,115431,115433,115435,115437,115439,115441,115443,115445],{"class":86,"line":33106},[84,115432,31626],{"class":94},[84,115434,478],{"class":477},[84,115436,110702],{"class":104},[84,115438,12764],{"class":477},[84,115440,32345],{"class":94},[84,115442,110709],{"class":477},[84,115444,547],{"class":94},[84,115446,30824],{"class":477},[84,115448,115449],{"class":86,"line":33122},[84,115450,2729],{"emptyLinePlaceholder":403},[84,115452,115453],{"class":86,"line":33128},[84,115454,2729],{"emptyLinePlaceholder":403},[84,115456,115457,115459,115461,115463,115465],{"class":86,"line":33142},[84,115458,1871],{"class":473},[84,115460,31547],{"class":94},[84,115462,101885],{"class":473},[84,115464,101888],{"class":104},[84,115466,4068],{"class":477},[84,115468,115469],{"class":86,"line":33148},[84,115470,101895],{"class":477},[35,115472,103896],{},[75,115474,115476],{"className":24151,"code":115475,"language":24153,"meta":66,"style":66},"touch ch8_gym_env.py\n",[81,115477,115478],{"__ignoreMap":66},[84,115479,115480,115482],{"class":86,"line":87},[84,115481,101609],{"class":90},[84,115483,115484],{"class":104}," ch8_gym_env.py\n",[35,115486,110770],{},[75,115488,115490],{"className":24151,"code":115489,"language":24153,"meta":66,"style":66},"python ch8_gym_env.py\n",[81,115491,115492],{"__ignoreMap":66},[84,115493,115494,115496],{"class":86,"line":87},[84,115495,30707],{"class":90},[84,115497,115484],{"class":104},[23,115499,101898],{"id":101898},[35,115501,115502],{},"继承 Gymnasium 环境：",[75,115504,115506],{"className":30705,"code":115505,"language":30707,"meta":66,"style":66},"class ReacherEnv(gym.Env):\n",[81,115507,115508],{"__ignoreMap":66},[84,115509,115510,115512,115514,115516,115518,115520,115522],{"class":86,"line":87},[84,115511,15023],{"class":473},[84,115513,114383],{"class":90},[84,115515,478],{"class":477},[84,115517,113866],{"class":90},[84,115519,1031],{"class":477},[84,115521,114392],{"class":90},[84,115523,31113],{"class":477},[35,115525,115526],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[35,115528,115529],{},"初始化模型：",[75,115531,115533],{"className":30705,"code":115532,"language":30707,"meta":66,"style":66},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[81,115534,115535,115549],{"__ignoreMap":66},[84,115536,115537,115539,115541,115543,115545,115547],{"class":86,"line":87},[84,115538,31150],{"class":94},[84,115540,114443],{"class":477},[84,115542,523],{"class":473},[84,115544,101738],{"class":477},[84,115546,101640],{"class":94},[84,115548,484],{"class":477},[84,115550,115551,115553,115555,115557,115559,115561],{"class":86,"line":98},[84,115552,31150],{"class":94},[84,115554,114458],{"class":477},[84,115556,523],{"class":473},[84,115558,114463],{"class":477},[84,115560,31150],{"class":94},[84,115562,114468],{"class":477},[35,115564,115565,115566,115568],{},"这和前面章节一样，只是现在放到了类的 ",[81,115567,31156],{}," 里。",[35,115570,115571],{},"缓存 site ID：",[75,115573,115575],{"className":30705,"code":115574,"language":30707,"meta":66,"style":66},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[81,115576,115577,115591],{"__ignoreMap":66},[84,115578,115579,115581,115583,115585,115587,115589],{"class":86,"line":87},[84,115580,31150],{"class":94},[84,115582,114479],{"class":477},[84,115584,523],{"class":473},[84,115586,114484],{"class":477},[84,115588,89880],{"class":94},[84,115590,484],{"class":477},[84,115592,115593,115595,115597,115599,115601,115603],{"class":86,"line":98},[84,115594,31150],{"class":94},[84,115596,114500],{"class":477},[84,115598,523],{"class":473},[84,115600,114484],{"class":477},[84,115602,89880],{"class":94},[84,115604,484],{"class":477},[35,115606,115607],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[35,115609,115610],{},"reset：",[75,115612,115614],{"className":30705,"code":115613,"language":30707,"meta":66,"style":66},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[81,115615,115616],{"__ignoreMap":66},[84,115617,115618,115620,115622,115624,115626,115628,115630,115632,115634,115636,115638,115640,115642,115644,115646,115648,115650],{"class":86,"line":87},[84,115619,32274],{"class":473},[84,115621,114848],{"class":90},[84,115623,114851],{"class":477},[84,115625,928],{"class":473},[84,115627,114856],{"class":477},[84,115629,481],{"class":94},[84,115631,25437],{"class":473},[84,115633,39260],{"class":94},[84,115635,13893],{"class":473},[84,115637,39260],{"class":94},[84,115639,114869],{"class":477},[84,115641,114872],{"class":94},[84,115643,25437],{"class":473},[84,115645,39260],{"class":94},[84,115647,13893],{"class":473},[84,115649,39260],{"class":94},[84,115651,31113],{"class":477},[35,115653,115654,115656],{},[81,115655,70382],{}," 做四件事：",[28,115658,115659,115662,115665,115668],{},[31,115660,115661],{},"设置随机种子。",[31,115663,115664],{},"重置 MuJoCo data。",[31,115666,115667],{},"随机初始化关节角。",[31,115669,115670],{},"返回初始观测和 info。",[35,115672,115673],{},"step：",[75,115675,115677],{"className":30705,"code":115676,"language":30707,"meta":66,"style":66},"def step(self, action):\n",[81,115678,115679],{"__ignoreMap":66},[84,115680,115681,115683,115685],{"class":86,"line":87},[84,115682,32274],{"class":473},[84,115684,115013],{"class":90},[84,115686,115016],{"class":477},[35,115688,115689,115691],{},[81,115690,107460],{}," 做六件事：",[28,115693,115694,115697,115703,115706,115709,115712],{},[31,115695,115696],{},"检查并裁剪 action。",[31,115698,115699,115700,28712],{},"写入 ",[81,115701,115702],{},"self.data.ctrl",[31,115704,115705],{},"连续推进若干个 MuJoCo 物理步。",[31,115707,115708],{},"计算新观测。",[31,115710,115711],{},"计算奖励和结束条件。",[31,115713,115714],{},"返回 Gymnasium 标准五元组。",[23,115716,102034],{"id":102034},[75,115718,115720],{"className":30705,"code":115719,"language":30707,"meta":66,"style":66},"import gymnasium as gym\n",[81,115721,115722],{"__ignoreMap":66},[84,115723,115724,115726,115728,115730],{"class":86,"line":87},[84,115725,30719],{"class":473},[84,115727,114221],{"class":477},[84,115729,31710],{"class":473},[84,115731,114226],{"class":477},[35,115733,115734,115735,115737,115738,115741],{},"导入 Gymnasium，并起别名 ",[81,115736,113866],{},"。后面写 ",[81,115739,115740],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[75,115743,115745],{"className":30705,"code":115744,"language":30707,"meta":66,"style":66},"from gymnasium import spaces\n",[81,115746,115747],{"__ignoreMap":66},[84,115748,115749,115751,115753,115755],{"class":86,"line":87},[84,115750,31064],{"class":473},[84,115752,114221],{"class":477},[84,115754,30719],{"class":473},[84,115756,114253],{"class":477},[35,115758,115759,115760,115763],{},"导入空间定义工具。",[81,115761,115762],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[75,115765,115766],{"className":30705,"code":115505,"language":30707,"meta":66,"style":66},[81,115767,115768],{"__ignoreMap":66},[84,115769,115770,115772,115774,115776,115778,115780,115782],{"class":86,"line":87},[84,115771,15023],{"class":473},[84,115773,114383],{"class":90},[84,115775,478],{"class":477},[84,115777,113866],{"class":90},[84,115779,1031],{"class":477},[84,115781,114392],{"class":90},[84,115783,31113],{"class":477},[35,115785,115786,115787,115790,115791,115793,115794,101344,115796,115798],{},"定义一个类，名字叫 ",[81,115788,115789],{},"ReacherEnv","。括号里的 ",[81,115792,115740],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[81,115795,70382],{},[81,115797,107460],{}," 这两个核心方法。",[75,115800,115802],{"className":30705,"code":115801,"language":30707,"meta":66,"style":66},"metadata = {\"render_modes\": []}\n",[81,115803,115804],{"__ignoreMap":66},[84,115805,115806,115809,115811,115813,115815],{"class":86,"line":87},[84,115807,115808],{"class":477},"metadata ",[84,115810,523],{"class":473},[84,115812,4777],{"class":477},[84,115814,114406],{"class":104},[84,115816,114409],{"class":477},[35,115818,115819],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[75,115821,115823],{"className":30705,"code":115822,"language":30707,"meta":66,"style":66},"def __init__(self) -> None:\n",[81,115824,115825],{"__ignoreMap":66},[84,115826,115827,115829,115831,115833,115835],{"class":86,"line":87},[84,115828,32274],{"class":473},[84,115830,31131],{"class":94},[84,115832,114422],{"class":477},[84,115834,96012],{"class":94},[84,115836,4068],{"class":477},[35,115838,115839,115841,115842,28712],{},[81,115840,31156],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[81,115843,115844],{},"env = ReacherEnv()",[75,115846,115848],{"className":30705,"code":115847,"language":30707,"meta":66,"style":66},"super().__init__()\n",[81,115849,115850],{"__ignoreMap":66},[84,115851,115852,115855,115857,115859],{"class":86,"line":87},[84,115853,115854],{"class":94},"super",[84,115856,17590],{"class":477},[84,115858,31156],{"class":94},[84,115860,2305],{"class":477},[35,115862,115863,115864,115866],{},"调用父类 ",[81,115865,115740],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[75,115868,115869],{"className":30705,"code":115532,"language":30707,"meta":66,"style":66},[81,115870,115871,115885],{"__ignoreMap":66},[84,115872,115873,115875,115877,115879,115881,115883],{"class":86,"line":87},[84,115874,31150],{"class":94},[84,115876,114443],{"class":477},[84,115878,523],{"class":473},[84,115880,101738],{"class":477},[84,115882,101640],{"class":94},[84,115884,484],{"class":477},[84,115886,115887,115889,115891,115893,115895,115897],{"class":86,"line":98},[84,115888,31150],{"class":94},[84,115890,114458],{"class":477},[84,115892,523],{"class":473},[84,115894,114463],{"class":477},[84,115896,31150],{"class":94},[84,115898,114468],{"class":477},[35,115900,115901,115902,115904,115905,101344,115908,115911],{},"把 MuJoCo 模型和状态保存到 ",[81,115903,31150],{}," 上。",[81,115906,115907],{},"self.model",[81,115909,115910],{},"self.data"," 表示这个环境对象自己的模型和状态。",[75,115913,115914],{"className":30705,"code":115574,"language":30707,"meta":66,"style":66},[81,115915,115916,115930],{"__ignoreMap":66},[84,115917,115918,115920,115922,115924,115926,115928],{"class":86,"line":87},[84,115919,31150],{"class":94},[84,115921,114479],{"class":477},[84,115923,523],{"class":473},[84,115925,114484],{"class":477},[84,115927,89880],{"class":94},[84,115929,484],{"class":477},[84,115931,115932,115934,115936,115938,115940,115942],{"class":86,"line":98},[84,115933,31150],{"class":94},[84,115935,114500],{"class":477},[84,115937,523],{"class":473},[84,115939,114484],{"class":477},[84,115941,89880],{"class":94},[84,115943,484],{"class":477},[35,115945,115946,115947,101344,115950,115953],{},"提前查好 tip 和 target 的 site ID。这样 ",[81,115948,115949],{},"_get_obs",[81,115951,115952],{},"_get_reward"," 里就不用每次按名字查找。",[75,115955,115957],{"className":30705,"code":115956,"language":30707,"meta":66,"style":66},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[81,115958,115959,115969,115979],{"__ignoreMap":66},[84,115960,115961,115963,115965,115967],{"class":86,"line":87},[84,115962,31150],{"class":94},[84,115964,114193],{"class":477},[84,115966,523],{"class":473},[84,115968,54753],{"class":94},[84,115970,115971,115973,115975,115977],{"class":86,"line":98},[84,115972,31150],{"class":94},[84,115974,114572],{"class":477},[84,115976,523],{"class":473},[84,115978,114577],{"class":94},[84,115980,115981,115983,115985,115987],{"class":86,"line":70},[84,115982,31150],{"class":94},[84,115984,114032],{"class":477},[84,115986,523],{"class":473},[84,115988,47660],{"class":94},[35,115990,115991,115994,115995,115998,115999,116002],{},[81,115992,115993],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[81,115996,115997],{},"max_steps"," 是一个 episode 最多运行多少步。",[81,116000,116001],{},"steps"," 记录当前 episode 已经走了多少步。",[75,116004,116005],{"className":30705,"code":114071,"language":30707,"meta":66,"style":66},[81,116006,116007],{"__ignoreMap":66},[84,116008,116009,116011,116013,116015,116017,116019,116021,116023,116025,116027,116029,116031,116033,116035,116037,116039,116041,116043,116045,116047],{"class":86,"line":87},[84,116010,31150],{"class":94},[84,116012,114080],{"class":477},[84,116014,523],{"class":473},[84,116016,114085],{"class":477},[84,116018,114088],{"class":5545},[84,116020,114091],{"class":473},[84,116022,102729],{"class":94},[84,116024,12764],{"class":477},[84,116026,114098],{"class":5545},[84,116028,523],{"class":473},[84,116030,102729],{"class":94},[84,116032,12764],{"class":477},[84,116034,96289],{"class":5545},[84,116036,523],{"class":473},[84,116038,478],{"class":477},[84,116040,553],{"class":94},[84,116042,114115],{"class":477},[84,116044,93826],{"class":5545},[84,116046,523],{"class":473},[84,116048,114122],{"class":477},[35,116050,116051,116052,116055,116056,101344,116059,116062],{},"定义动作空间。",[81,116053,116054],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[81,116057,116058],{},"low=-1.0",[81,116060,116061],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[75,116064,116065],{"className":30705,"code":114132,"language":30707,"meta":66,"style":66},[81,116066,116067],{"__ignoreMap":66},[84,116068,116069,116071,116073,116075,116077,116079,116081,116083,116085,116087,116089,116091,116093,116095,116097,116099,116101,116103],{"class":86,"line":87},[84,116070,31150],{"class":94},[84,116072,114141],{"class":477},[84,116074,523],{"class":473},[84,116076,114085],{"class":477},[84,116078,114088],{"class":5545},[84,116080,114091],{"class":473},[84,116082,114152],{"class":477},[84,116084,114098],{"class":5545},[84,116086,523],{"class":473},[84,116088,114152],{"class":477},[84,116090,96289],{"class":5545},[84,116092,523],{"class":473},[84,116094,478],{"class":477},[84,116096,919],{"class":94},[84,116098,114115],{"class":477},[84,116100,93826],{"class":5545},[84,116102,523],{"class":473},[84,116104,114122],{"class":477},[35,116106,116107,116108,116111,116112,116115],{},"定义观测空间。",[81,116109,116110],{},"shape=(10,)"," 表示观测是 10 个数。",[81,116113,116114],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[75,116117,116119],{"className":30705,"code":116118,"language":30707,"meta":66,"style":66},"def _get_obs(self) -> np.ndarray:\n",[81,116120,116121],{"__ignoreMap":66},[84,116122,116123,116125,116127],{"class":86,"line":87},[84,116124,32274],{"class":473},[84,116126,114682],{"class":90},[84,116128,114685],{"class":477},[35,116130,116131,116132,116134],{},"定义内部函数，用来生成观测。函数名前面的 ",[81,116133,1465],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[75,116136,116138],{"className":30705,"code":116137,"language":30707,"meta":66,"style":66},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[81,116139,116140,116154],{"__ignoreMap":66},[84,116141,116142,116144,116146,116148,116150,116152],{"class":86,"line":87},[84,116143,111894],{"class":477},[84,116145,523],{"class":473},[84,116147,39200],{"class":94},[84,116149,114696],{"class":477},[84,116151,31150],{"class":94},[84,116153,114701],{"class":477},[84,116155,116156,116158,116160,116162,116164,116166],{"class":86,"line":98},[84,116157,111904],{"class":477},[84,116159,523],{"class":473},[84,116161,39200],{"class":94},[84,116163,114696],{"class":477},[84,116165,31150],{"class":94},[84,116167,114716],{"class":477},[35,116169,116170],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[75,116172,116174],{"className":30705,"code":116173,"language":30707,"meta":66,"style":66},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[81,116175,116176,116192],{"__ignoreMap":66},[84,116177,116178,116180,116182,116184,116186,116188,116190],{"class":86,"line":87},[84,116179,111180],{"class":477},[84,116181,523],{"class":473},[84,116183,114725],{"class":477},[84,116185,31150],{"class":94},[84,116187,114730],{"class":477},[84,116189,31150],{"class":94},[84,116191,114735],{"class":477},[84,116193,116194,116196],{"class":86,"line":98},[84,116195,17375],{"class":473},[84,116197,114742],{"class":477},[35,116199,116200,116201,116204,116205,116207],{},"拼接观测，并转换成 ",[81,116202,116203],{},"float32","。很多强化学习库默认使用 ",[81,116206,116203],{},"，所以这里主动转换。",[75,116209,116210],{"className":30705,"code":115613,"language":30707,"meta":66,"style":66},[81,116211,116212],{"__ignoreMap":66},[84,116213,116214,116216,116218,116220,116222,116224,116226,116228,116230,116232,116234,116236,116238,116240,116242,116244,116246],{"class":86,"line":87},[84,116215,32274],{"class":473},[84,116217,114848],{"class":90},[84,116219,114851],{"class":477},[84,116221,928],{"class":473},[84,116223,114856],{"class":477},[84,116225,481],{"class":94},[84,116227,25437],{"class":473},[84,116229,39260],{"class":94},[84,116231,13893],{"class":473},[84,116233,39260],{"class":94},[84,116235,114869],{"class":477},[84,116237,114872],{"class":94},[84,116239,25437],{"class":473},[84,116241,39260],{"class":94},[84,116243,13893],{"class":473},[84,116245,39260],{"class":94},[84,116247,31113],{"class":477},[35,116249,116250,116251,116253,116254,116257],{},"定义 reset。",[81,116252,114892],{}," 用来控制随机数，保证实验可以复现。",[81,116255,116256],{},"options"," 用来接收额外配置，本章暂时不用。",[75,116259,116261],{"className":30705,"code":116260,"language":30707,"meta":66,"style":66},"super().reset(seed=seed)\n",[81,116262,116263],{"__ignoreMap":66},[84,116264,116265,116267,116269,116271,116273],{"class":86,"line":87},[84,116266,115854],{"class":94},[84,116268,114889],{"class":477},[84,116270,114892],{"class":5545},[84,116272,523],{"class":473},[84,116274,114897],{"class":477},[35,116276,116277,116278,116281],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[81,116279,116280],{},"self.np_random"," 生成可复现的随机数。",[75,116283,116285],{"className":30705,"code":116284,"language":30707,"meta":66,"style":66},"mujoco.mj_resetData(self.model, self.data)\n",[81,116286,116287],{"__ignoreMap":66},[84,116288,116289,116292,116294,116296,116298],{"class":86,"line":87},[84,116290,116291],{"class":477},"mujoco.mj_resetData(",[84,116293,31150],{"class":94},[84,116295,114907],{"class":477},[84,116297,31150],{"class":94},[84,116299,114912],{"class":477},[35,116301,116302],{},"把 MuJoCo 状态重置到默认状态。",[75,116304,116306],{"className":30705,"code":116305,"language":30707,"meta":66,"style":66},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[81,116307,116308],{"__ignoreMap":66},[84,116309,116310,116312,116314,116316,116318,116320,116322,116324,116326,116328,116330,116332,116334,116336,116338,116340,116342],{"class":86,"line":87},[84,116311,31150],{"class":94},[84,116313,114923],{"class":477},[84,116315,523],{"class":473},[84,116317,39200],{"class":94},[84,116319,114930],{"class":477},[84,116321,114088],{"class":5545},[84,116323,114091],{"class":473},[84,116325,86536],{"class":94},[84,116327,12764],{"class":477},[84,116329,114098],{"class":5545},[84,116331,523],{"class":473},[84,116333,86536],{"class":94},[84,116335,12764],{"class":477},[84,116337,31823],{"class":5545},[84,116339,523],{"class":473},[84,116341,31150],{"class":94},[84,116343,114955],{"class":477},[35,116345,115667,116346,116349,116350,116353,116354,116356],{},[81,116347,116348],{},"[:]"," 表示修改整个数组。",[81,116351,116352],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[81,116355,102476],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[75,116358,116360],{"className":30705,"code":116359,"language":30707,"meta":66,"style":66},"self.data.qvel[:] = 0.0\n",[81,116361,116362],{"__ignoreMap":66},[84,116363,116364,116366,116368,116370],{"class":86,"line":87},[84,116365,31150],{"class":94},[84,116367,114962],{"class":477},[84,116369,523],{"class":473},[84,116371,105087],{"class":94},[35,116373,116374],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[75,116376,116378],{"className":30705,"code":116377,"language":30707,"meta":66,"style":66},"self.steps = 0\nreturn self._get_obs(), {}\n",[81,116379,116380,116390],{"__ignoreMap":66},[84,116381,116382,116384,116386,116388],{"class":86,"line":87},[84,116383,31150],{"class":94},[84,116385,114032],{"class":477},[84,116387,523],{"class":473},[84,116389,47660],{"class":94},[84,116391,116392,116394,116396],{"class":86,"line":98},[84,116393,17375],{"class":473},[84,116395,39200],{"class":94},[84,116397,115002],{"class":477},[35,116399,116400],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[75,116402,116403],{"className":30705,"code":115676,"language":30707,"meta":66,"style":66},[81,116404,116405],{"__ignoreMap":66},[84,116406,116407,116409,116411],{"class":86,"line":87},[84,116408,32274],{"class":473},[84,116410,115013],{"class":90},[84,116412,115016],{"class":477},[35,116414,116415],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[75,116417,116419],{"className":30705,"code":116418,"language":30707,"meta":66,"style":66},"action = np.asarray(action, dtype=np.float32)\n",[81,116420,116421],{"__ignoreMap":66},[84,116422,116423,116425,116427,116429,116431,116433],{"class":86,"line":87},[84,116424,107768],{"class":477},[84,116426,523],{"class":473},[84,116428,115025],{"class":477},[84,116430,93826],{"class":5545},[84,116432,523],{"class":473},[84,116434,114122],{"class":477},[35,116436,116437,116438,28712],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[81,116439,116203],{},[75,116441,116443],{"className":30705,"code":116442,"language":30707,"meta":66,"style":66},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[81,116444,116445],{"__ignoreMap":66},[84,116446,116447,116449,116451,116453,116455,116457,116459],{"class":86,"line":87},[84,116448,107768],{"class":477},[84,116450,523],{"class":473},[84,116452,107773],{"class":477},[84,116454,31150],{"class":94},[84,116456,115044],{"class":477},[84,116458,31150],{"class":94},[84,116460,115049],{"class":477},[35,116462,116463],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[75,116465,116467],{"className":30705,"code":116466,"language":30707,"meta":66,"style":66},"self.data.ctrl[:] = action\n",[81,116468,116469],{"__ignoreMap":66},[84,116470,116471,116473,116475,116477],{"class":86,"line":87},[84,116472,31150],{"class":94},[84,116474,115060],{"class":477},[84,116476,523],{"class":473},[84,116478,107796],{"class":477},[35,116480,116481],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[75,116483,116485],{"className":30705,"code":116484,"language":30707,"meta":66,"style":66},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[81,116486,116487,116503],{"__ignoreMap":66},[84,116488,116489,116491,116493,116495,116497,116499,116501],{"class":86,"line":87},[84,116490,3354],{"class":473},[84,116492,101827],{"class":477},[84,116494,26371],{"class":473},[84,116496,32770],{"class":94},[84,116498,478],{"class":477},[84,116500,31150],{"class":94},[84,116502,115081],{"class":477},[84,116504,116505,116508,116510,116512,116514],{"class":86,"line":98},[84,116506,116507],{"class":477},"    mujoco.mj_step(",[84,116509,31150],{"class":94},[84,116511,114907],{"class":477},[84,116513,31150],{"class":94},[84,116515,114912],{"class":477},[35,116517,116518,116519,116522,116523,116525,116526,28712],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[81,116520,116521],{},"frame_skip=5","，所以外部调用一次 ",[81,116524,114203],{},"，内部实际执行 5 次 ",[81,116527,101541],{},[75,116529,116531],{"className":30705,"code":116530,"language":30707,"meta":66,"style":66},"self.steps += 1\n",[81,116532,116533],{"__ignoreMap":66},[84,116534,116535,116537,116539,116541],{"class":86,"line":87},[84,116536,31150],{"class":94},[84,116538,114032],{"class":477},[84,116540,9806],{"class":473},[84,116542,56025],{"class":94},[35,116544,116545],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[75,116547,116549],{"className":30705,"code":116548,"language":30707,"meta":66,"style":66},"obs = self._get_obs()\nreward = self._get_reward()\n",[81,116550,116551,116561],{"__ignoreMap":66},[84,116552,116553,116555,116557,116559],{"class":86,"line":87},[84,116554,111180],{"class":477},[84,116556,523],{"class":473},[84,116558,39200],{"class":94},[84,116560,115123],{"class":477},[84,116562,116563,116565,116567,116569],{"class":86,"line":98},[84,116564,111331],{"class":477},[84,116566,523],{"class":473},[84,116568,39200],{"class":94},[84,116570,115134],{"class":477},[35,116572,116573],{},"计算新的观测和奖励。",[75,116575,116577],{"className":30705,"code":116576,"language":30707,"meta":66,"style":66},"dist = float(np.linalg.norm(tip - target))\n",[81,116578,116579],{"__ignoreMap":66},[84,116580,116581,116583,116585,116587,116589,116591],{"class":86,"line":87},[84,116582,111922],{"class":477},[84,116584,523],{"class":473},[84,116586,110123],{"class":94},[84,116588,115177],{"class":477},[84,116590,1005],{"class":473},[84,116592,115182],{"class":477},[35,116594,116595],{},"计算末端到目标的距离，并转换成 Python float。",[75,116597,116598],{"className":30705,"code":114003,"language":30707,"meta":66,"style":66},[81,116599,116600,116612],{"__ignoreMap":66},[84,116601,116602,116604,116606,116608,116610],{"class":86,"line":87},[84,116603,114010],{"class":477},[84,116605,523],{"class":473},[84,116607,114015],{"class":477},[84,116609,1383],{"class":473},[84,116611,114020],{"class":94},[84,116613,116614,116616,116618,116620,116622,116624,116626],{"class":86,"line":98},[84,116615,114025],{"class":477},[84,116617,523],{"class":473},[84,116619,39200],{"class":94},[84,116621,114032],{"class":477},[84,116623,2040],{"class":473},[84,116625,39200],{"class":94},[84,116627,114039],{"class":477},[35,116629,116630],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[75,116632,116634],{"className":30705,"code":116633,"language":30707,"meta":66,"style":66},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[81,116635,116636,116649],{"__ignoreMap":66},[84,116637,116638,116641,116643,116645,116647],{"class":86,"line":87},[84,116639,116640],{"class":477},"info ",[84,116642,523],{"class":473},[84,116644,4777],{"class":477},[84,116646,115228],{"class":104},[84,116648,115231],{"class":477},[84,116650,116651,116653],{"class":86,"line":98},[84,116652,17375],{"class":473},[84,116654,115238],{"class":477},[35,116656,116657,116660],{},[81,116658,116659],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[75,116662,116664],{"className":30705,"code":116663,"language":30707,"meta":66,"style":66},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[81,116665,116666,116675],{"__ignoreMap":66},[84,116667,116668,116671,116673],{"class":86,"line":87},[84,116669,116670],{"class":477},"env ",[84,116672,523],{"class":473},[84,116674,115268],{"class":477},[84,116676,116677,116679,116681,116683,116685,116687,116689],{"class":86,"line":98},[84,116678,113726],{"class":477},[84,116680,523],{"class":473},[84,116682,115278],{"class":477},[84,116684,114892],{"class":5545},[84,116686,523],{"class":473},[84,116688,666],{"class":94},[84,116690,484],{"class":477},[35,116692,116693,116694,116697],{},"创建环境并重置。",[81,116695,116696],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[75,116699,116701],{"className":30705,"code":116700,"language":30707,"meta":66,"style":66},"action = env.action_space.sample()\n",[81,116702,116703],{"__ignoreMap":66},[84,116704,116705,116707,116709],{"class":86,"line":87},[84,116706,107768],{"class":477},[84,116708,523],{"class":473},[84,116710,115347],{"class":477},[35,116712,116713],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116715,102642],{"id":102641},[35,116717,105810],{},[75,116719,116722],{"className":116720,"code":116721,"language":5516,"meta":66},[5514],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[81,116723,116721],{"__ignoreMap":66},[35,116725,116726],{},"这个环境已经具备强化学习环境的基本结构。",[35,116728,116729],{},"主函数里使用随机动作：",[75,116731,116732],{"className":30705,"code":116700,"language":30707,"meta":66,"style":66},[81,116733,116734],{"__ignoreMap":66},[84,116735,116736,116738,116740],{"class":86,"line":87},[84,116737,107768],{"class":477},[84,116739,523],{"class":473},[84,116741,115347],{"class":477},[35,116743,116744],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116746,102674],{"id":102673},[28,116748,116749,116752,116758,116767,116776,116785,116791],{},[31,116750,116751],{},"运行程序。",[31,116753,116754,116755,28712],{},"确认 ",[81,116756,116757],{},"obs.shape == (10,)",[31,116759,111507,116760,116763,116764,28712],{},[81,116761,116762],{},"env.action_space","，应类似 ",[81,116765,116766],{},"Box(-1.0, 1.0, (2,), float32)",[31,116768,105911,116769,116772,116773,28712],{},[81,116770,116771],{},"self.max_steps = 10","，确认环境会更快 ",[81,116774,116775],{},"truncated=True",[31,116777,102737,116778,102740,116781,116784],{},[81,116779,116780],{},"terminated = dist \u003C 0.05",[81,116782,116783],{},"dist \u003C 0.2","，观察是否更容易结束。",[31,116786,102737,116787,116790],{},[81,116788,116789],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[31,116792,116793,116794,116796,116797,116800],{},"在 ",[81,116795,116659],{}," 里加入 ",[81,116798,116799],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116802,102779],{"id":102778},[23,116804,116806],{"id":116805},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[35,116808,116809,116810,116812],{},"Gymnasium 的 ",[81,116811,107460],{}," 返回 5 个值:",[75,116814,116816],{"className":30705,"code":116815,"language":30707,"meta":66,"style":66},"obs, reward, terminated, truncated, info\n",[81,116817,116818],{"__ignoreMap":66},[84,116819,116820],{"class":86,"line":87},[84,116821,116815],{"class":477},[35,116823,116824],{},"不是旧 Gym 的 4 个值。",[23,116826,116828,116831],{"id":116827},"datactrl-action-维度错误",[81,116829,116830],{},"data.ctrl[:] = action"," 维度错误",[35,116833,102849],{},[75,116835,116837],{"className":30705,"code":116836,"language":30707,"meta":66,"style":66},"print(self.model.nu)\nprint(action.shape)\n",[81,116838,116839,116850],{"__ignoreMap":66},[84,116840,116841,116843,116845,116847],{"class":86,"line":87},[84,116842,30742],{"class":94},[84,116844,478],{"class":477},[84,116846,31150],{"class":94},[84,116848,116849],{"class":477},".model.nu)\n",[84,116851,116852,116854],{"class":86,"line":98},[84,116853,30742],{"class":94},[84,116855,116856],{"class":477},"(action.shape)\n",[35,116858,116859],{},"两者必须匹配。",[23,116861,116863],{"id":116862},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[35,116865,102788],{},[75,116867,116869],{"className":30705,"code":116868,"language":30707,"meta":66,"style":66},"mujoco.mj_forward(self.model, self.data)\n",[81,116870,116871],{"__ignoreMap":66},[84,116872,116873,116876,116878,116880,116882],{"class":86,"line":87},[84,116874,116875],{"class":477},"mujoco.mj_forward(",[84,116877,31150],{"class":94},[84,116879,114907],{"class":477},[84,116881,31150],{"class":94},[84,116883,114912],{"class":477},[23,116885,116887,116889],{"id":116886},"observation_space-维度和-obs-不一致",[81,116888,113926],{}," 维度和 obs 不一致",[35,116891,102901],{},[75,116893,116895],{"className":30705,"code":116894,"language":30707,"meta":66,"style":66},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[81,116896,116897,116907,116914],{"__ignoreMap":66},[84,116898,116899,116901,116903,116905],{"class":86,"line":87},[84,116900,111180],{"class":477},[84,116902,523],{"class":473},[84,116904,39200],{"class":94},[84,116906,115123],{"class":477},[84,116908,116909,116911],{"class":86,"line":98},[84,116910,30742],{"class":94},[84,116912,116913],{"class":477},"(obs.shape)\n",[84,116915,116916,116918,116920,116922],{"class":86,"line":70},[84,116917,30742],{"class":94},[84,116919,478],{"class":477},[84,116921,31150],{"class":94},[84,116923,116924],{"class":477},".observation_space.shape)\n",[35,116926,116927],{},"两者必须一致。本章观测是：",[75,116929,116932],{"className":116930,"code":116931,"language":5516,"meta":66},[5514],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[81,116933,116931],{"__ignoreMap":66},[23,116935,116937],{"id":116936},"action-超过范围","action 超过范围",[35,116939,116940],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[75,116942,116943],{"className":30705,"code":116442,"language":30707,"meta":66,"style":66},[81,116944,116945],{"__ignoreMap":66},[84,116946,116947,116949,116951,116953,116955,116957,116959],{"class":86,"line":87},[84,116948,107768],{"class":477},[84,116950,523],{"class":473},[84,116952,107773],{"class":477},[84,116954,31150],{"class":94},[84,116956,115044],{"class":477},[84,116958,31150],{"class":94},[84,116960,115049],{"class":477},[35,116962,116963,116964,28712],{},"这能避免无效动作直接写入 ",[81,116965,101402],{},[23,116967,116969],{"id":116968},"忘记返回-info","忘记返回 info",[35,116971,116809,116972,101344,116974,116976],{},[81,116973,70382],{},[81,116975,107460],{}," 都会返回 info：",[75,116978,116979],{"className":30705,"code":113719,"language":30707,"meta":66,"style":66},[81,116980,116981,116989],{"__ignoreMap":66},[84,116982,116983,116985,116987],{"class":86,"line":87},[84,116984,113726],{"class":477},[84,116986,523],{"class":473},[84,116988,113731],{"class":477},[84,116990,116991,116993,116995],{"class":86,"line":98},[84,116992,113736],{"class":477},[84,116994,523],{"class":473},[84,116996,113741],{"class":477},[35,116998,116999,117000,28712],{},"即使暂时没有额外信息，也返回 ",[81,117001,32786],{},[14,117003,117005],{"id":117004},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[35,117007,117008],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[28,117010,117011,117014,117017,117020,117023,117026],{},[31,117012,117013],{},"更稳定的 reward。",[31,117015,117016],{},"合理的 episode 长度。",[31,117018,117019],{},"可重复的随机目标采样。",[31,117021,117022],{},"render 接口。",[31,117024,117025],{},"环境注册代码。",[31,117027,117028],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[35,117030,117031],{},"如果只是自己写训练循环，最小形式是：",[75,117033,117035],{"className":30705,"code":117034,"language":30707,"meta":66,"style":66},"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",[81,117036,117037,117045,117061,117065,117081,117090,117099,117109],{"__ignoreMap":66},[84,117038,117039,117041,117043],{"class":86,"line":87},[84,117040,116670],{"class":477},[84,117042,523],{"class":473},[84,117044,115268],{"class":477},[84,117046,117047,117049,117051,117053,117055,117057,117059],{"class":86,"line":98},[84,117048,113726],{"class":477},[84,117050,523],{"class":473},[84,117052,115278],{"class":477},[84,117054,114892],{"class":5545},[84,117056,523],{"class":473},[84,117058,666],{"class":94},[84,117060,484],{"class":477},[84,117062,117063],{"class":86,"line":70},[84,117064,2729],{"emptyLinePlaceholder":403},[84,117066,117067,117069,117071,117073,117075,117077,117079],{"class":86,"line":120},[84,117068,3354],{"class":473},[84,117070,101827],{"class":477},[84,117072,26371],{"class":473},[84,117074,32770],{"class":94},[84,117076,478],{"class":477},[84,117078,6739],{"class":94},[84,117080,31113],{"class":477},[84,117082,117083,117086,117088],{"class":86,"line":131},[84,117084,117085],{"class":477},"    action ",[84,117087,523],{"class":473},[84,117089,115347],{"class":477},[84,117091,117092,117095,117097],{"class":86,"line":145},[84,117093,117094],{"class":477},"    obs, reward, terminated, truncated, info ",[84,117096,523],{"class":473},[84,117098,113741],{"class":477},[84,117100,117101,117103,117105,117107],{"class":86,"line":156},[84,117102,3430],{"class":473},[84,117104,115413],{"class":477},[84,117106,115416],{"class":473},[84,117108,115419],{"class":477},[84,117110,117111,117114,117116],{"class":86,"line":164},[84,117112,117113],{"class":477},"        obs, info ",[84,117115,523],{"class":473},[84,117117,113731],{"class":477},[14,117119,117121],{"id":117120},"_9本章小结","9.本章小结",[35,117123,117124],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[75,117126,117129],{"className":117127,"code":117128,"language":5516,"meta":66},[5514],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[81,117130,117128],{"__ignoreMap":66},[35,117132,117133],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[389,117135,117136],{},"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":66,"searchDepth":98,"depth":98,"links":117138},[117139,117140,117141,117148,117152,117153,117154,117164,117165],{"id":100972,"depth":98,"text":100973},{"id":101095,"depth":98,"text":101096},{"id":101370,"depth":98,"text":101371,"children":117142},[117143,117145,117147],{"id":113950,"depth":70,"text":117144},"terminated 和 truncated 的区别",{"id":114053,"depth":70,"text":117146},"observation_space 和 action_space",{"id":114180,"depth":70,"text":114181},{"id":101578,"depth":98,"text":101579,"children":117149},[117150,117151],{"id":101898,"depth":70,"text":101898},{"id":102034,"depth":70,"text":102034},{"id":102641,"depth":98,"text":102642},{"id":102673,"depth":98,"text":102674},{"id":102778,"depth":98,"text":102779,"children":117155},[117156,117157,117159,117160,117162,117163],{"id":116805,"depth":70,"text":116806},{"id":116827,"depth":70,"text":117158},"data.ctrl[:] = action 维度错误",{"id":116862,"depth":70,"text":116863},{"id":116886,"depth":70,"text":117161},"observation_space 维度和 obs 不一致",{"id":116936,"depth":70,"text":116937},{"id":116968,"depth":70,"text":116969},{"id":117004,"depth":98,"text":117005},{"id":117120,"depth":98,"text":117121},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113703,"description":66},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117172,"title":117173,"body":117174,"description":117597,"extension":401,"meta":117598,"navigation":403,"path":117599,"seo":117600,"stem":117601,"__hash__":117602},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117175,"toc":117587},[117176,117180,117183,117186,117206,117212,117218,117228,117231,117234,117254,117257,117261,117264,117270,117273,117287,117290,117293,117367,117370,117376,117379,117402,117405,117455,117458,117464,117467,117470,117473,117492,117495,117501,117504,117507,117510,117530,117533,117536,117539,117584],[10,117177,117179],{"id":117178},"mujoco-学习","MuJoCo 学习",[35,117181,117182],{},"初版",[35,117184,117185],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[28,117187,117188,117191,117194,117203],{},[31,117189,117190],{},"MuJoCo 模型文件在描述什么。",[31,117192,117193],{},"Python 代码怎样读取和推进仿真。",[31,117195,117196,687,117198,687,117200,117202],{},[81,117197,104356],{},[81,117199,104686],{},[81,117201,104689],{}," 这些数组为什么重要。",[31,117204,117205],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[35,117207,117208,117209,117211],{},"默认环境为 Fedora 44、Python >= 3.10、",[81,117210,101353],{}," 官方 Python bindings。",[35,117213,117214,117215,117217],{},"注意：本文禁止使用 ",[81,117216,101338],{},"。所有示例均使用：",[75,117219,117220],{"className":30705,"code":101904,"language":30707,"meta":66,"style":66},[81,117221,117222],{"__ignoreMap":66},[84,117223,117224,117226],{"class":86,"line":87},[84,117225,30719],{"class":473},[84,117227,101627],{"class":477},[14,117229,117230],{"id":117230},"适合谁阅读",[35,117232,117233],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[28,117235,117236,117239,117242,117245],{},[31,117237,117238],{},"没学过 MuJoCo，只会一点 Python。",[31,117240,117241],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[31,117243,117244],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[31,117246,117247,117248,117250,117251,117253],{},"以前接触过 ",[81,117249,101338],{},"，现在想迁移到官方 ",[81,117252,101347],{}," Python bindings。",[35,117255,117256],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117258,117260],{"id":117259},"mujoco-到底是什么","MuJoCo 到底是什么",[35,117262,117263],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[75,117265,117268],{"className":117266,"code":117267,"language":5516,"meta":66},[5514],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[81,117269,117267],{"__ignoreMap":66},[35,117271,117272],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[28,117274,117275,117278,117281,117284],{},[31,117276,117277],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[31,117279,117280],{},"快速测试控制算法，不必一开始就上真实机器人。",[31,117282,117283],{},"生成强化学习环境。",[31,117285,117286],{},"采集状态、动作、图像、奖励等训练数据。",[14,117288,117289],{"id":117289},"学习前的心智模型",[35,117291,117292],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[612,117294,117295,117307],{},[615,117296,117297],{},[618,117298,117299,117302,117305],{},[621,117300,117301],{"align":24065},"部分",[621,117303,117304],{"align":24065},"负责什么",[621,117306,21516],{"align":24065},[659,117308,117309,117320,117332,117344,117356],{},[618,117310,117311,117314,117317],{},[664,117312,117313],{"align":24065},"MJCF XML",[664,117315,117316],{"align":24065},"定义世界和机器人结构",[664,117318,117319],{"align":24065},"地面、盒子、关节、电机、摄像头",[618,117321,117322,117326,117329],{},[664,117323,117324],{"align":24065},[81,117325,101035],{},[664,117327,117328],{"align":24065},"编译后的静态模型",[664,117330,117331],{"align":24065},"有几个关节、有几个电机、时间步长是多少",[618,117333,117334,117338,117341],{},[664,117335,117336],{"align":24065},[81,117337,101045],{},[664,117339,117340],{"align":24065},"运行中的动态状态",[664,117342,117343],{"align":24065},"当前时间、位置、速度、电机输入",[618,117345,117346,117350,117353],{},[664,117347,117348],{"align":24065},[81,117349,101541],{},[664,117351,117352],{"align":24065},"推进一步物理仿真",[664,117354,117355],{"align":24065},"根据重力、力、碰撞更新状态",[618,117357,117358,117361,117364],{},[664,117359,117360],{"align":24065},"Viewer \u002F Renderer",[664,117362,117363],{"align":24065},"把仿真显示出来",[664,117365,117366],{"align":24065},"打开窗口或保存图片",[35,117368,117369],{},"一句话总结：",[75,117371,117374],{"className":117372,"code":117373,"language":5516,"meta":66},[5514],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[81,117375,117373],{"__ignoreMap":66},[35,117377,117378],{},"参考来源：",[1480,117380,117381,117388,117395],{},[31,117382,117383,117384],{},"MuJoCo Python 官方文档：",[39,117385,117386],{"href":117386,"rel":117387},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[43],[31,117389,117390,117391],{},"MuJoCo XML Reference：",[39,117392,117393],{"href":117393,"rel":117394},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[43],[31,117396,117397,117398],{},"MuJoCo Overview：",[39,117399,117400],{"href":117400,"rel":117401},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[43],[14,117403,117404],{"id":117404},"章节目录",[28,117406,117407,117413,117419,117425,117431,117437,117443,117449],{},[31,117408,117409],{},[39,117410,117412],{"href":117411},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[31,117414,117415],{},[39,117416,117418],{"href":117417},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[31,117420,117421],{},[39,117422,117424],{"href":117423},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[31,117426,117427],{},[39,117428,117430],{"href":117429},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[31,117432,117433],{},[39,117434,117436],{"href":117435},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[31,117438,117439],{},[39,117440,117442],{"href":117441},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[31,117444,117445],{},[39,117446,117448],{"href":117447},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[31,117450,117451],{},[39,117452,117454],{"href":117453},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117456,117457],{"id":117457},"推荐学习路线",[75,117459,117462],{"className":117460,"code":117461,"language":5516,"meta":66},[5514],"环境安装\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",[81,117463,117461],{"__ignoreMap":66},[35,117465,117466],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117468,117469],{"id":117469},"建议的目录结构",[35,117471,117472],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[75,117474,117476],{"className":24151,"code":117475,"language":24153,"meta":66,"style":66},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[81,117477,117478,117486],{"__ignoreMap":66},[84,117479,117480,117482,117484],{"class":86,"line":87},[84,117481,101592],{"class":90},[84,117483,29543],{"class":94},[84,117485,101597],{"class":104},[84,117487,117488,117490],{"class":86,"line":98},[84,117489,101602],{"class":94},[84,117491,101597],{"class":104},[35,117493,117494],{},"每一章的代码都单独保存：",[75,117496,117499],{"className":117497,"code":117498,"language":5516,"meta":66},[5514],"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",[81,117500,117498],{"__ignoreMap":66},[35,117502,117503],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117505,117506],{"id":117506},"学习方法",[35,117508,117509],{},"每章建议按这个顺序操作：",[28,117511,117512,117515,117518,117521,117524,117527],{},[31,117513,117514],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[31,117516,117517],{},"复制最小可运行代码，保存成指定文件。",[31,117519,117520],{},"运行代码，确认没有报错。",[31,117522,117523],{},"对照“运行结果说明”理解输出。",[31,117525,117526],{},"做“验证步骤”，主动改一两个参数。",[31,117528,117529],{},"遇到报错先看“常见错误与解决方案”。",[35,117531,117532],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117534,117535],{"id":117535},"全局排错顺序",[35,117537,117538],{},"遇到问题时，按下面顺序查：",[28,117540,117541,117547,117553,117558,117561,117564,117571,117581],{},[31,117542,117543,117544],{},"Python 环境是否激活：",[81,117545,117546],{},"which python",[31,117548,117549,117550],{},"MuJoCo 是否能导入：",[81,117551,117552],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[31,117554,117555,117556],{},"是否误装了 ",[81,117557,101338],{},[31,117559,117560],{},"XML 标签是否闭合、属性是否拼写正确",[31,117562,117563],{},"actuator 引用的 joint 名字是否存在",[31,117565,117566,117568,117569],{},[81,117567,101402],{}," 的长度是否等于 ",[81,117570,102484],{},[31,117572,105911,117573,82865,117575,117577,117578],{},[81,117574,104356],{},[81,117576,104686],{}," 后是否调用了 ",[81,117579,117580],{},"mujoco.mj_forward",[31,117582,117583],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[389,117585,117586],{},"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":66,"searchDepth":98,"depth":98,"links":117588},[117589,117590,117591,117592,117593,117594,117595,117596],{"id":117230,"depth":98,"text":117230},{"id":117259,"depth":98,"text":117260},{"id":117289,"depth":98,"text":117289},{"id":117404,"depth":98,"text":117404},{"id":117457,"depth":98,"text":117457},{"id":117469,"depth":98,"text":117469},{"id":117506,"depth":98,"text":117506},{"id":117535,"depth":98,"text":117535},"仿真搭建。",{"category":23707},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117173,"description":117597},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117604,"title":117605,"body":117606,"description":400,"extension":401,"meta":118059,"navigation":403,"path":118060,"seo":118061,"stem":118062,"__hash__":118063},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117607,"toc":118057},[117608,117611,117614,117620,118054],[10,117609,117605],{"id":117610},"_1-最常用的基本操作更新",[35,117612,117613],{},"装linux系统教程：",[35,117615,117616],{},[39,117617,117618],{"href":117618,"rel":117619},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[43],[75,117621,117623],{"className":77,"code":117622,"language":79,"meta":66,"style":66},"#更新相关的知识\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",[81,117624,117625,117630,117635,117644,117649,117658,117663,117683,117688,117699,117704,117713,117718,117746,117751,117770,117775,117794,117798,117803,117819,117823,117828,117858,117862,117867,117883,117887,117892,117907,117911,117916,117932,117936,117941,117953,117965,117969,117974,117991,117995,118000,118018,118022,118027,118036,118040,118045],{"__ignoreMap":66},[84,117626,117627],{"class":86,"line":87},[84,117628,117629],{"class":328},"#更新相关的知识\n",[84,117631,117632],{"class":86,"line":98},[84,117633,117634],{"class":328},"# 更新软件包列表（从服务器获取最新软件信息）\n",[84,117636,117637,117639,117642],{"class":86,"line":70},[84,117638,24905],{"class":90},[84,117640,117641],{"class":104}," apt",[84,117643,26570],{"class":104},[84,117645,117646],{"class":86,"line":120},[84,117647,117648],{"class":328},"# 升级所有可更新的软件包（不删除旧包）\n",[84,117650,117651,117653,117655],{"class":86,"line":131},[84,117652,24905],{"class":90},[84,117654,117641],{"class":104},[84,117656,117657],{"class":104}," upgrade\n",[84,117659,117660],{"class":86,"line":145},[84,117661,117662],{"class":328},"#更新和升级软件包\n",[84,117664,117665,117667,117669,117672,117674,117676,117678,117681],{"class":86,"line":156},[84,117666,24905],{"class":90},[84,117668,117641],{"class":104},[84,117670,117671],{"class":104}," update",[84,117673,26518],{"class":477},[84,117675,24905],{"class":90},[84,117677,117641],{"class":104},[84,117679,117680],{"class":104}," upgrade",[84,117682,101307],{"class":94},[84,117684,117685],{"class":86,"line":164},[84,117686,117687],{"class":328},"#列出可更新的软件包及版本信息\n",[84,117689,117690,117693,117696],{"class":86,"line":175},[84,117691,117692],{"class":90},"apt",[84,117694,117695],{"class":104}," list",[84,117697,117698],{"class":94}," --upgradable\n",[84,117700,117701],{"class":86,"line":185},[84,117702,117703],{"class":328},"#彻底升级（处理依赖关系，可能删除旧包）\n",[84,117705,117706,117708,117710],{"class":86,"line":195},[84,117707,24905],{"class":90},[84,117709,117641],{"class":104},[84,117711,117712],{"class":104}," full-upgrade\n",[84,117714,117715],{"class":86,"line":206},[84,117716,117717],{"class":328},"#设置指定版本\n",[84,117719,117720,117722,117724,117726,117728,117731,117733,117735,117737,117739,117742,117744],{"class":86,"line":217},[84,117721,24905],{"class":90},[84,117723,117641],{"class":104},[84,117725,24163],{"class":104},[84,117727,29229],{"class":473},[84,117729,117730],{"class":104},"package_nam",[84,117732,550],{"class":477},[84,117734,1433],{"class":473},[84,117736,523],{"class":104},[84,117738,1383],{"class":473},[84,117740,117741],{"class":104},"version_numbe",[84,117743,1143],{"class":477},[84,117745,51634],{"class":473},[84,117747,117748],{"class":86,"line":227},[84,117749,117750],{"class":328},"#只安装软件包不升级\n",[84,117752,117753,117755,117757,117759,117761,117763,117765,117767],{"class":86,"line":238},[84,117754,24905],{"class":90},[84,117756,117641],{"class":104},[84,117758,24163],{"class":104},[84,117760,29229],{"class":473},[84,117762,117730],{"class":104},[84,117764,550],{"class":477},[84,117766,1433],{"class":473},[84,117768,117769],{"class":94}," --no-upgrade\n",[84,117771,117772],{"class":86,"line":249},[84,117773,117774],{"class":328},"#只升级，不存在就不安装\n",[84,117776,117777,117779,117781,117783,117785,117787,117789,117791],{"class":86,"line":262},[84,117778,24905],{"class":90},[84,117780,117641],{"class":104},[84,117782,24163],{"class":104},[84,117784,29229],{"class":473},[84,117786,117730],{"class":104},[84,117788,550],{"class":477},[84,117790,1433],{"class":473},[84,117792,117793],{"class":94}," --only-upgrade\n",[84,117795,117796],{"class":86,"line":273},[84,117797,2729],{"emptyLinePlaceholder":403},[84,117799,117800],{"class":86,"line":283},[84,117801,117802],{"class":328},"#安装指定的软件命令\n",[84,117804,117805,117807,117809,117811,117813,117815,117817],{"class":86,"line":294},[84,117806,24905],{"class":90},[84,117808,117641],{"class":104},[84,117810,24163],{"class":104},[84,117812,29229],{"class":473},[84,117814,117730],{"class":104},[84,117816,550],{"class":477},[84,117818,51634],{"class":473},[84,117820,117821],{"class":86,"line":2028},[84,117822,2729],{"emptyLinePlaceholder":403},[84,117824,117825],{"class":86,"line":2057},[84,117826,117827],{"class":328},"#安装多个软件包\n",[84,117829,117830,117832,117834,117836,117838,117841,117844,117846,117848,117851,117853,117855],{"class":86,"line":2062},[84,117831,24905],{"class":90},[84,117833,117641],{"class":104},[84,117835,24163],{"class":104},[84,117837,29229],{"class":473},[84,117839,117840],{"class":104},"package_",[84,117842,117843],{"class":473},"1>",[84,117845,29229],{"class":473},[84,117847,117840],{"class":104},[84,117849,117850],{"class":473},"2>",[84,117852,29229],{"class":473},[84,117854,117840],{"class":104},[84,117856,117857],{"class":473},"3>\n",[84,117859,117860],{"class":86,"line":2079},[84,117861,2729],{"emptyLinePlaceholder":403},[84,117863,117864],{"class":86,"line":2084},[84,117865,117866],{"class":328},"#更新指定的软件命令\n",[84,117868,117869,117871,117873,117875,117877,117879,117881],{"class":86,"line":2089},[84,117870,24905],{"class":90},[84,117872,117641],{"class":104},[84,117874,117671],{"class":104},[84,117876,29229],{"class":473},[84,117878,117730],{"class":104},[84,117880,550],{"class":477},[84,117882,51634],{"class":473},[84,117884,117885],{"class":86,"line":2094},[84,117886,2729],{"emptyLinePlaceholder":403},[84,117888,117889],{"class":86,"line":2108},[84,117890,117891],{"class":328},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[84,117893,117894,117896,117899,117901,117903,117905],{"class":86,"line":2113},[84,117895,117692],{"class":90},[84,117897,117898],{"class":104}," show",[84,117900,29229],{"class":473},[84,117902,117730],{"class":104},[84,117904,550],{"class":477},[84,117906,51634],{"class":473},[84,117908,117909],{"class":86,"line":2906},[84,117910,2729],{"emptyLinePlaceholder":403},[84,117912,117913],{"class":86,"line":2920},[84,117914,117915],{"class":328},"#删除软件包命令\n",[84,117917,117918,117920,117922,117924,117926,117928,117930],{"class":86,"line":2928},[84,117919,24905],{"class":90},[84,117921,117641],{"class":104},[84,117923,26407],{"class":104},[84,117925,29229],{"class":473},[84,117927,117730],{"class":104},[84,117929,550],{"class":477},[84,117931,51634],{"class":473},[84,117933,117934],{"class":86,"line":2933},[84,117935,2729],{"emptyLinePlaceholder":403},[84,117937,117938],{"class":86,"line":2939},[84,117939,117940],{"class":328},"# 清理旧版本和缓存（释放磁盘空间）\n",[84,117942,117943,117945,117947,117950],{"class":86,"line":2945},[84,117944,24905],{"class":90},[84,117946,117641],{"class":104},[84,117948,117949],{"class":104}," autoremove",[84,117951,117952],{"class":328},"  # 删除不再需要的依赖和库文件\n",[84,117954,117955,117957,117959,117962],{"class":86,"line":2950},[84,117956,24905],{"class":90},[84,117958,117641],{"class":104},[84,117960,117961],{"class":104}," clean",[84,117963,117964],{"class":328},"       # 清理下载的缓存包\n",[84,117966,117967],{"class":86,"line":8277},[84,117968,2729],{"emptyLinePlaceholder":403},[84,117970,117971],{"class":86,"line":8301},[84,117972,117973],{"class":328},"#移除软件包及配置文件\n",[84,117975,117976,117978,117980,117983,117985,117987,117989],{"class":86,"line":8306},[84,117977,24905],{"class":90},[84,117979,117641],{"class":104},[84,117981,117982],{"class":104}," purge",[84,117984,29229],{"class":473},[84,117986,117730],{"class":104},[84,117988,550],{"class":477},[84,117990,51634],{"class":473},[84,117992,117993],{"class":86,"line":8312},[84,117994,2729],{"emptyLinePlaceholder":403},[84,117996,117997],{"class":86,"line":8339},[84,117998,117999],{"class":328},"#查找软件包命令\n",[84,118001,118002,118004,118006,118009,118011,118014,118016],{"class":86,"line":8344},[84,118003,24905],{"class":90},[84,118005,117641],{"class":104},[84,118007,118008],{"class":104}," search",[84,118010,29229],{"class":473},[84,118012,118013],{"class":104},"keywor",[84,118015,787],{"class":477},[84,118017,51634],{"class":473},[84,118019,118020],{"class":86,"line":8350},[84,118021,2729],{"emptyLinePlaceholder":403},[84,118023,118024],{"class":86,"line":8362},[84,118025,118026],{"class":328},"#列出所有已安装的包\n",[84,118028,118029,118031,118033],{"class":86,"line":8374},[84,118030,117692],{"class":90},[84,118032,117695],{"class":104},[84,118034,118035],{"class":94}," --installed\n",[84,118037,118038],{"class":86,"line":8386},[84,118039,2729],{"emptyLinePlaceholder":403},[84,118041,118042],{"class":86,"line":10045},[84,118043,118044],{"class":328},"#列出所有已安装的包的版本信息\n",[84,118046,118047,118049,118051],{"class":86,"line":10070},[84,118048,117692],{"class":90},[84,118050,117695],{"class":104},[84,118052,118053],{"class":94}," --all-versions\n",[389,118055,118056],{},"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":66,"searchDepth":98,"depth":98,"links":118058},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117605,"description":400},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118065,"title":118066,"body":118067,"description":400,"extension":401,"meta":118808,"navigation":403,"path":118809,"seo":118810,"stem":118811,"__hash__":118812},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118068,"toc":118795},[118069,118072,118076,118079,118085,118089,118093,118099,118104,118109,118114,118119,118124,118127,118130,118133,118136,118140,118143,118148,118151,118156,118159,118164,118171,118174,118177,118180,118183,118186,118197,118201,118205,118210,118215,118219,118224,118228,118233,118237,118241,118246,118249,118294,118299,118303,118307,118312,118318,118323,118333,118338,118348,118353,118358,118385,118389,118392,118397,118400,118425,118429,118434,118437,118442,118447,118467,118472,118475,118490,118494,118547,118550,118555,118559,118562,118577,118580,118583,118588,118592,118596,118599,118603,118607,118610,118615,118620,118624,118631,118639,118642,118649,118654,118659,118662,118667,118674,118679,118686,118690,118692,118697,118701,118704,118707,118712,118715,118720,118723,118728,118733,118738,118742,118747,118751,118792],[10,118070,118066],{"id":118071},"_2-linux装机教程",[14,118073,118075],{"id":118074},"_21-实体机","2.1 实体机",[35,118077,118078],{},"使用清华源：（Ubuntu24.04）",[35,118080,118081],{},[39,118082,118083],{"href":118083,"rel":118084},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[43],[14,118086,118088],{"id":118087},"_22-普通虚拟机","2.2 普通虚拟机",[23,118090,118092],{"id":118091},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[35,118094,118095],{},[39,118096,118097],{"href":118097,"rel":118098},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[43],[35,118100,118101],{},[64,118102],{"alt":66,"src":118103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[35,118105,118106],{},[64,118107],{"alt":66,"src":118108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[35,118110,118111],{},[64,118112],{"alt":66,"src":118113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[35,118115,118116],{},[64,118117],{"alt":66,"src":118118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[35,118120,118121],{},[64,118122],{"alt":66,"src":118123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[35,118125,118126],{},"内存4G（4096MB）；",[35,118128,118129],{},"CPU给4个核；",[35,118131,118132],{},"硬盘动态分配60G；",[35,118134,118135],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[23,118137,118139],{"id":118138},"_222-安装ubuntu","2.2.2 安装Ubuntu",[35,118141,118142],{},"按照1.1的步骤下载Ubuntu",[35,118144,118145],{},[64,118146],{"alt":66,"src":118147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[35,118149,118150],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[35,118152,118153],{},[64,118154],{"alt":66,"src":118155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[35,118157,118158],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[35,118160,118161],{},[64,118162],{"alt":66,"src":118163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[35,118165,118166,118167,118170],{},"选择“正常安装”(找不到都用Alt+F7)， ",[624,118168,118169],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[35,118172,118173],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[35,118175,118176],{},"将改动写入磁盘吗 继续",[35,118178,118179],{},"选择东八区（shanghai，大致在地图上点一下），继续",[35,118181,118182],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[35,118184,118185],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[35,118187,118188,118189,118192,118193,118196],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[624,118190,118191],{},"除了"," 选不发送系统信息与不升级之外， ",[624,118194,118195],{},"其它"," 都跳过或前进）",[23,118198,118200],{"id":118199},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22327,118202,118204],{"id":118203},"_2231-全屏","2.2.3.1 全屏",[35,118206,118207],{},[64,118208],{"alt":66,"src":118209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[35,118211,118212],{},[64,118213],{"alt":66,"src":118214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22327,118216,118218],{"id":118217},"_2232-文件交换","2.2.3.2 文件交换",[35,118220,118221],{},[64,118222],{"alt":66,"src":118223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22327,118225,118227],{"id":118226},"_2233-新建文本文档","2.2.3.3 新建文本文档",[35,118229,118230],{},[64,118231],{"alt":66,"src":118232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118234,118236],{"id":118235},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[23,118238,118240],{"id":118239},"_231-简介与优缺点","2.3.1 简介与优缺点",[28,118242,118243],{},[31,118244,118245],{},"什么情况下推荐？",[35,118247,118248],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[28,118250,118251],{"start":98},[31,118252,118253,118254],{},"优缺点：",[28,118255,118256,118286],{},[31,118257,118258,118259],{},"优点：",[28,118260,118261,118264,118271,118274,118277,118280,118283],{},[31,118262,118263],{},"WSL2是最好的Linux发行版;(bushi)",[31,118265,118266,118267,118270],{},"性能损耗极低。且比在Windows上跑深度性能 ",[624,118268,118269],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[31,118272,118273],{},"非常方便调用USB设备，可以USB直通;",[31,118275,118276],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[31,118278,118279],{},"非常方便Win与WSL2互相传文件等协同操作;",[31,118281,118282],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[31,118284,118285],{},"非常方便使用Windows的VScode远程开发;",[31,118287,118288,118289],{},"缺点：",[28,118290,118291],{},[31,118292,118293],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[35,118295,118296],{},[64,118297],{"alt":66,"src":118298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[23,118300,118302],{"id":118301},"_232-安装教程","2.3.2 安装教程",[22327,118304,118306],{"id":118305},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[28,118308,118309],{},[31,118310,118311],{},"方法一(图形界面)",[35,118313,118314,118315,24947],{},"用Win+R输入",[81,118316,118317],{},"appwiz.cpl",[35,118319,118320],{},[64,118321],{"alt":66,"src":118322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[35,118324,118325,118326,118329,118330,26801],{},"点击OK进入 ",[624,118327,118328],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[624,118331,118332],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[35,118334,118335],{},[64,118336],{"alt":66,"src":118337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[35,118339,118340,118341,101344,118344,118347],{},"选择 ",[624,118342,118343],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[624,118345,118346],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[35,118349,118350],{},[64,118351],{"alt":66,"src":118352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[28,118354,118355],{"start":98},[31,118356,118357],{},"方法二(命令行)",[75,118359,118363],{"className":118360,"code":118361,"language":118362,"meta":66,"style":66},"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",[81,118364,118365,118370,118375,118380],{"__ignoreMap":66},[84,118366,118367],{"class":86,"line":87},[84,118368,118369],{},"# 开启 Linux 子系统\n",[84,118371,118372],{"class":86,"line":98},[84,118373,118374],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[84,118376,118377],{"class":86,"line":70},[84,118378,118379],{},"# 开启虚拟机平台\n",[84,118381,118382],{"class":86,"line":120},[84,118383,118384],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22327,118386,118388],{"id":118387},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[35,118390,118391],{},"用管理员权限打开powershell",[35,118393,118394],{},[64,118395],{"alt":66,"src":118396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[35,118398,118399],{},"升级WSL并设置默认版本为WSL2",[75,118401,118403],{"className":118360,"code":118402,"language":118362,"meta":66,"style":66},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[81,118404,118405,118410,118415,118420],{"__ignoreMap":66},[84,118406,118407],{"class":86,"line":87},[84,118408,118409],{},"# 更新 wsl\n",[84,118411,118412],{"class":86,"line":98},[84,118413,118414],{},"wsl --update\n",[84,118416,118417],{"class":86,"line":70},[84,118418,118419],{},"# 将 wsl 版本设置为 wsl2\n",[84,118421,118422],{"class":86,"line":120},[84,118423,118424],{},"wsl --set-default-version 2\n",[22327,118426,118428],{"id":118427},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[28,118430,118431],{},[31,118432,118433],{},"方式一(商店下载)",[35,118435,118436],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[35,118438,118439],{},[64,118440],{"alt":66,"src":118441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[28,118443,118444],{"start":98},[31,118445,118446],{},"方式二(命令行安装)",[75,118448,118450],{"className":118360,"code":118449,"language":118362,"meta":66,"style":66},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[81,118451,118452,118457,118462],{"__ignoreMap":66},[84,118453,118454],{"class":86,"line":87},[84,118455,118456],{},"# 列出可安装的 Linux 版本\n",[84,118458,118459],{"class":86,"line":98},[84,118460,118461],{},"#（需要科学手段）\n",[84,118463,118464],{"class":86,"line":70},[84,118465,118466],{},"wsl --list --online\n",[35,118468,118469],{},[64,118470],{"alt":66,"src":118471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[35,118473,118474],{},"选择对应发行版并安装",[75,118476,118478],{"className":118360,"code":118477,"language":118362,"meta":66,"style":66},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[81,118479,118480,118485],{"__ignoreMap":66},[84,118481,118482],{"class":86,"line":87},[84,118483,118484],{},"# Ubuntu安装完毕后需要重启系统\n",[84,118486,118487],{"class":86,"line":98},[84,118488,118489],{},"wsl --install -d Ubuntu-24.04\n",[22327,118491,118493],{"id":118492},"_2324-查看系统状态","2.3.2.4 查看系统状态",[75,118495,118497],{"className":118360,"code":118496,"language":118362,"meta":66,"style":66},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[81,118498,118499,118504,118509,118514,118519,118523,118527,118532,118537,118542],{"__ignoreMap":66},[84,118500,118501],{"class":86,"line":87},[84,118502,118503],{},"# 查看 wsl\n",[84,118505,118506],{"class":86,"line":98},[84,118507,118508],{},"wsl -l\n",[84,118510,118511],{"class":86,"line":70},[84,118512,118513],{},"# 查看 wsl 运行版本或模式\n",[84,118515,118516],{"class":86,"line":120},[84,118517,118518],{},"wsl -l -v\n",[84,118520,118521],{"class":86,"line":131},[84,118522,2729],{"emptyLinePlaceholder":403},[84,118524,118525],{"class":86,"line":145},[84,118526,2729],{"emptyLinePlaceholder":403},[84,118528,118529],{"class":86,"line":156},[84,118530,118531],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[84,118533,118534],{"class":86,"line":164},[84,118535,118536],{},"wsl --set-version \u003Cdistro> 2\n",[84,118538,118539],{"class":86,"line":175},[84,118540,118541],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[84,118543,118544],{"class":86,"line":185},[84,118545,118546],{},"wsl --unregister \u003Cdistro>\n",[35,118548,118549],{},"输出Version为2即正常",[35,118551,118552],{},[64,118553],{"alt":66,"src":118554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22327,118556,118558],{"id":118557},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[35,118560,118561],{},"直接在Powershell里输入wsl命令进入子系统",[75,118563,118565],{"className":118360,"code":118564,"language":118362,"meta":66,"style":66},"# 进入子系统\nwsl\n",[81,118566,118567,118572],{"__ignoreMap":66},[84,118568,118569],{"class":86,"line":87},[84,118570,118571],{},"# 进入子系统\n",[84,118573,118574],{"class":86,"line":98},[84,118575,118576],{},"wsl\n",[35,118578,118579],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[35,118581,118582],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[35,118584,118585],{},[64,118586],{"alt":66,"src":118587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[23,118589,118591],{"id":118590},"_233-配置各种环境","2.3.3 配置各种环境",[22327,118593,118595],{"id":118594},"_2331-换源","2.3.3.1 换源",[35,118597,118598],{},"(同实体机LINUX，往下找教程)",[22327,118600,118602],{"id":118601},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23239,118604,118606],{"id":118605},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[35,118608,118609],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[35,118611,118612],{},[64,118613],{"alt":66,"src":118614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[35,118616,118617],{},[64,118618],{"alt":66,"src":118619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23239,118621,118623],{"id":118622},"_23322-cuda","2.3.3.2.2 CUDA",[35,118625,118626,118627],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[39,118628,118629],{"href":118629,"rel":118630},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[43],[35,118632,118633,118636],{},[64,118634],{"alt":66,"src":118635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[64,118637],{"alt":66,"src":118638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[35,118640,118641],{},"在下方的网站，选择合适的版本。",[35,118643,118644,118645],{},"WSL2 专属 CUDA 指南：",[39,118646,118647],{"href":118647,"rel":118648},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[43],[35,118650,118651],{},[624,118652,118653],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[35,118655,118656],{},[64,118657],{"alt":66,"src":118658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[35,118660,118661],{},"挨行敲一遍",[35,118663,118664],{},[64,118665],{"alt":66,"src":118666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[35,118668,118669,118670,118673],{},"敲完后，输入",[81,118671,118672],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[35,118675,118676],{},[64,118677],{"alt":66,"src":118678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[35,118680,118681,118682,118685],{},"（请详看下方教程的",[624,118683,118684],{},"安装CUDA的配置环境来看","如何配置环境）",[23239,118687,118689],{"id":118688},"_23323-cudnn","2.3.3.2.3 cuDNN",[35,118691,118598],{},[35,118693,118694],{},[64,118695],{"alt":66,"src":118696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22327,118698,118700],{"id":118699},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[35,118702,118703],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[35,118705,118706],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[35,118708,118709],{},[64,118710],{"alt":66,"src":118711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[35,118713,118714],{},"连接WSL2",[35,118716,118717],{},[64,118718],{"alt":66,"src":118719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[35,118721,118722],{},"远程开发成功。",[35,118724,118725],{},[64,118726],{"alt":66,"src":118727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[35,118729,118730],{},[64,118731],{"alt":66,"src":118732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[35,118734,118735],{},[64,118736],{"alt":66,"src":118737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22327,118739,118741],{"id":118740},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[35,118743,118744],{},[64,118745],{"alt":66,"src":118746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22327,118748,118750],{"id":118749},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[75,118752,118754],{"className":77,"code":118753,"language":79,"meta":66,"style":66},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[81,118755,118756,118764,118772,118783,118787],{"__ignoreMap":66},[84,118757,118758,118760,118762],{"class":86,"line":87},[84,118759,24905],{"class":90},[84,118761,117641],{"class":104},[84,118763,26570],{"class":104},[84,118765,118766,118768,118770],{"class":86,"line":98},[84,118767,24905],{"class":90},[84,118769,117641],{"class":104},[84,118771,117657],{"class":104},[84,118773,118774,118776,118778,118780],{"class":86,"line":70},[84,118775,24905],{"class":90},[84,118777,117641],{"class":104},[84,118779,24163],{"class":104},[84,118781,118782],{"class":104}," mesa-utils\n",[84,118784,118785],{"class":86,"line":120},[84,118786,2729],{"emptyLinePlaceholder":403},[84,118788,118789],{"class":86,"line":131},[84,118790,118791],{"class":328},"#然后重启wsl2即可\n",[389,118793,118794],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":66,"searchDepth":98,"depth":98,"links":118796},[118797,118798,118803],{"id":118074,"depth":98,"text":118075},{"id":118087,"depth":98,"text":118088,"children":118799},[118800,118801,118802],{"id":118091,"depth":70,"text":118092},{"id":118138,"depth":70,"text":118139},{"id":118199,"depth":70,"text":118200},{"id":118235,"depth":98,"text":118236,"children":118804},[118805,118806,118807],{"id":118239,"depth":70,"text":118240},{"id":118301,"depth":70,"text":118302},{"id":118590,"depth":70,"text":118591},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118066,"description":400},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118814,"title":118815,"body":118816,"description":400,"extension":401,"meta":121752,"navigation":403,"path":121753,"seo":121754,"stem":121755,"__hash__":121756},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118817,"toc":121724},[118818,118821,118825,118831,118835,118841,118845,119033,119036,119041,119045,119049,119052,119055,119061,119066,119069,119072,119077,119110,119115,119119,119196,119199,119204,119208,119211,119250,119253,119262,119280,119285,119292,119409,119414,119417,119444,119449,119453,119462,119512,119519,119523,119526,119540,119547,119581,119586,119590,119613,119616,119621,119625,119628,119631,119634,119676,119680,119683,119686,119727,119731,119735,119738,119743,119748,119751,119774,119777,119785,119790,119793,119798,119803,119806,119811,119815,119820,119843,119848,119910,119918,119923,119928,119931,119936,119939,119944,119949,119967,119972,119978,119983,119997,120001,120004,120007,120010,120053,120056,120061,120162,120165,120170,120174,120178,120215,120219,120223,120227,120273,120277,120322,120326,120333,120341,120396,120399,120476,120479,120502,120506,120509,120514,120519,120527,120530,120535,120540,120545,120548,120553,120562,120565,120570,120573,120644,120649,120652,120657,120660,120665,120668,120673,120676,120681,120686,120689,120764,120767,120780,120785,120788,120802,120805,120834,120839,120868,120871,120876,120880,120885,120894,120897,120902,120905,120910,120913,120916,120921,120924,120929,120934,120937,120942,120945,121070,121075,121105,121108,121113,121118,121135,121138,121181,121184,121211,121216,121229,121372,121376,121381,121395,121398,121449,121452,121482,121485,121501,121506,121520,121523,121590,121595,121604,121609,121612,121624,121629,121636,121660,121663,121668,121671,121690,121695,121702,121714,121721],[10,118819,118815],{"id":118820},"_3-安装必备配置",[14,118822,118824],{"id":118823},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[75,118826,118829],{"className":118827,"code":118828,"language":5516},[5514],"  打开下方网站（注意，该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",[81,118830,118828],{"__ignoreMap":66},[23,118832,118834],{"id":118833},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[75,118836,118839],{"className":118837,"code":118838,"language":5516},[5514],"  输入以下命令\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",[81,118840,118838],{"__ignoreMap":66},[23,118842,118844],{"id":118843},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[75,118846,118850],{"className":118847,"code":118848,"language":118849,"meta":66,"style":66},"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",[81,118851,118852,118860,118871,118883,118897,118901,118911,118916,118920,118924,118929,118933,118945,118949,118954,118958,118969,118973,118989,118993,119004,119008,119013,119017,119025],{"__ignoreMap":66},[84,118853,118854,118856,118858],{"class":86,"line":87},[84,118855,24905],{"class":90},[84,118857,117641],{"class":104},[84,118859,26570],{"class":104},[84,118861,118862,118864,118866,118868],{"class":86,"line":98},[84,118863,24905],{"class":90},[84,118865,117641],{"class":104},[84,118867,24163],{"class":104},[84,118869,118870],{"class":104}," vim\n",[84,118872,118873,118875,118878,118880],{"class":86,"line":70},[84,118874,24905],{"class":90},[84,118876,118877],{"class":104}," rm",[84,118879,25653],{"class":94},[84,118881,118882],{"class":104}," \u002Fetc\u002Fapt\u002Fsources.list\n",[84,118884,118885,118887,118889,118891,118894],{"class":86,"line":120},[84,118886,24905],{"class":90},[84,118888,118877],{"class":104},[84,118890,25653],{"class":94},[84,118892,118893],{"class":104}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[84,118895,118896],{"class":94},"**\n",[84,118898,118899],{"class":86,"line":131},[84,118900,2729],{"emptyLinePlaceholder":403},[84,118902,118903,118905,118908],{"class":86,"line":145},[84,118904,24905],{"class":90},[84,118906,118907],{"class":104}," vim",[84,118909,118910],{"class":104}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[84,118912,118913],{"class":86,"line":156},[84,118914,118915],{"class":104},"```\n",[84,118917,118918],{"class":86,"line":164},[84,118919,2729],{"emptyLinePlaceholder":403},[84,118921,118922],{"class":86,"line":175},[84,118923,2729],{"emptyLinePlaceholder":403},[84,118925,118926],{"class":86,"line":185},[84,118927,118928],{"class":90},"选择好Ubuntu版本后，复制下方的内容。\n",[84,118930,118931],{"class":86,"line":195},[84,118932,2729],{"emptyLinePlaceholder":403},[84,118934,118935,118937,118940,118943],{"class":86,"line":206},[84,118936,701],{"class":473},[84,118938,118939],{"class":104},"[](",[84,118941,118942],{"class":90},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[84,118944,484],{"class":104},[84,118946,118947],{"class":86,"line":217},[84,118948,2729],{"emptyLinePlaceholder":403},[84,118950,118951],{"class":86,"line":227},[84,118952,118953],{"class":90},"粘贴进去\n",[84,118955,118956],{"class":86,"line":238},[84,118957,2729],{"emptyLinePlaceholder":403},[84,118959,118960,118962,118964,118967],{"class":86,"line":249},[84,118961,701],{"class":473},[84,118963,118939],{"class":104},[84,118965,118966],{"class":90},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[84,118968,484],{"class":104},[84,118970,118971],{"class":86,"line":262},[84,118972,2729],{"emptyLinePlaceholder":403},[84,118974,118975,118978,118981,118984,118986],{"class":86,"line":273},[84,118976,118977],{"class":90},"按一下ESC，然后英文冒号，输入",[84,118979,118980],{"class":104}," `",[84,118982,118983],{"class":90},":wq!",[84,118985,1445],{"class":104},[84,118987,118988],{"class":90},"然后回车\n",[84,118990,118991],{"class":86,"line":283},[84,118992,2729],{"emptyLinePlaceholder":403},[84,118994,118995,118997,118999,119002],{"class":86,"line":294},[84,118996,701],{"class":473},[84,118998,118939],{"class":104},[84,119000,119001],{"class":90},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[84,119003,484],{"class":104},[84,119005,119006],{"class":86,"line":2028},[84,119007,2729],{"emptyLinePlaceholder":403},[84,119009,119010],{"class":86,"line":2057},[84,119011,119012],{"class":90},"输入以下命令\n",[84,119014,119015],{"class":86,"line":2062},[84,119016,2729],{"emptyLinePlaceholder":403},[84,119018,119019,119022],{"class":86,"line":2079},[84,119020,119021],{"class":104},"```",[84,119023,119024],{"class":90},"Bash\n",[84,119026,119027,119029,119031],{"class":86,"line":2084},[84,119028,24905],{"class":90},[84,119030,117641],{"class":104},[84,119032,26570],{"class":104},[35,119034,119035],{},"这里被替换成对应学校则成功",[35,119037,119038],{},[64,119039],{"alt":66,"src":119040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119042,119044],{"id":119043},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[23,119046,119048],{"id":119047},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[35,119050,119051],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[35,119053,119054],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[35,119056,119057],{},[39,119058,119059],{"href":119059,"rel":119060},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[43],[35,119062,119063],{},[64,119064],{"alt":66,"src":119065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[35,119067,119068],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[35,119070,119071],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[35,119073,119074],{},[64,119075],{"alt":66,"src":119076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[75,119078,119080],{"className":77,"code":119079,"language":79,"meta":66,"style":66},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[81,119081,119082,119087,119094,119099],{"__ignoreMap":66},[84,119083,119084],{"class":86,"line":87},[84,119085,119086],{"class":328},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[84,119088,119089,119091],{"class":86,"line":98},[84,119090,101602],{"class":94},[84,119092,119093],{"class":104}," ~\u002FDownloads\n",[84,119095,119096],{"class":86,"line":70},[84,119097,119098],{"class":328},"#下方chrome安装包名不一定是这个，根据名字来看\n",[84,119100,119101,119103,119105,119107],{"class":86,"line":120},[84,119102,24905],{"class":90},[84,119104,117641],{"class":104},[84,119106,24163],{"class":104},[84,119108,119109],{"class":104}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[35,119111,119112],{},[64,119113],{"alt":66,"src":119114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[23,119116,119118],{"id":119117},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[75,119120,119122],{"className":77,"code":119121,"language":79,"meta":66,"style":66},"# 老版\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",[81,119123,119124,119129,119137,119148,119153,119157,119162,119172,119180,119191],{"__ignoreMap":66},[84,119125,119126],{"class":86,"line":87},[84,119127,119128],{"class":328},"# 老版\n",[84,119130,119131,119133,119135],{"class":86,"line":98},[84,119132,24905],{"class":90},[84,119134,117641],{"class":104},[84,119136,26570],{"class":104},[84,119138,119139,119141,119143,119145],{"class":86,"line":70},[84,119140,24905],{"class":90},[84,119142,117641],{"class":104},[84,119144,24163],{"class":104},[84,119146,119147],{"class":104}," neofetch\n",[84,119149,119150],{"class":86,"line":120},[84,119151,119152],{"class":90},"neofetch\n",[84,119154,119155],{"class":86,"line":131},[84,119156,2729],{"emptyLinePlaceholder":403},[84,119158,119159],{"class":86,"line":145},[84,119160,119161],{"class":328},"# 新版\n",[84,119163,119164,119166,119169],{"class":86,"line":156},[84,119165,24905],{"class":90},[84,119167,119168],{"class":104}," add-apt-repository",[84,119170,119171],{"class":104}," ppa:zhangsongcui3371\u002Ffastfetch\n",[84,119173,119174,119176,119178],{"class":86,"line":164},[84,119175,24905],{"class":90},[84,119177,117641],{"class":104},[84,119179,26570],{"class":104},[84,119181,119182,119184,119186,119188],{"class":86,"line":175},[84,119183,24905],{"class":90},[84,119185,117641],{"class":104},[84,119187,24163],{"class":104},[84,119189,119190],{"class":104}," fastfetch\n",[84,119192,119193],{"class":86,"line":185},[84,119194,119195],{"class":90},"fastfetch\n",[35,119197,119198],{},"这里显示，一共有3162个debian的程序，7个snap程序",[35,119200,119201],{},[64,119202],{"alt":66,"src":119203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[23,119205,119207],{"id":119206},"_323-移除snap应用","3.2.3 移除snap应用",[35,119209,119210],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[75,119212,119214],{"className":77,"code":119213,"language":79,"meta":66,"style":66},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[81,119215,119216,119228,119239],{"__ignoreMap":66},[84,119217,119218,119220,119222,119225],{"class":86,"line":87},[84,119219,24905],{"class":90},[84,119221,26841],{"class":104},[84,119223,119224],{"class":104}," disable",[84,119226,119227],{"class":104}," snapd.service\n",[84,119229,119230,119232,119234,119236],{"class":86,"line":98},[84,119231,24905],{"class":90},[84,119233,26841],{"class":104},[84,119235,119224],{"class":104},[84,119237,119238],{"class":104}," snapd.socket\n",[84,119240,119241,119243,119245,119247],{"class":86,"line":70},[84,119242,24905],{"class":90},[84,119244,26841],{"class":104},[84,119246,119224],{"class":104},[84,119248,119249],{"class":104}," snapd.seeded.service\n",[35,119251,119252],{},"然后查看snap应用列表",[35,119254,119255,119256,119261],{},"根据你安装的选择不同（最小安装或普通安装），有",[39,119257,119260],{"href":119258,"rel":119259},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[43],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[75,119263,119265],{"className":77,"code":119264,"language":79,"meta":66,"style":66},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[81,119266,119267,119272],{"__ignoreMap":66},[84,119268,119269],{"class":86,"line":87},[84,119270,119271],{"class":328},"# 查询当前系统上snap安装了哪些app\n",[84,119273,119274,119277],{"class":86,"line":98},[84,119275,119276],{"class":90},"snap",[84,119278,119279],{"class":104}," list\n",[35,119281,119282],{},[64,119283],{"alt":66,"src":119284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[35,119286,119287,119288,119291],{},"卸载掉图中所有应用，按照 ",[624,119289,119290],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[75,119293,119295],{"className":77,"code":119294,"language":79,"meta":66,"style":66},"#移除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",[81,119296,119297,119302,119314,119319,119330,119335,119346,119351,119362,119367,119371,119376,119387,119398],{"__ignoreMap":66},[84,119298,119299],{"class":86,"line":87},[84,119300,119301],{"class":328},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[84,119303,119304,119306,119309,119311],{"class":86,"line":98},[84,119305,24905],{"class":90},[84,119307,119308],{"class":104}," snap",[84,119310,26407],{"class":104},[84,119312,119313],{"class":104}," snap-store\n",[84,119315,119316],{"class":86,"line":70},[84,119317,119318],{"class":328},"#移除firefox浏览器\n",[84,119320,119321,119323,119325,119327],{"class":86,"line":120},[84,119322,24905],{"class":90},[84,119324,119308],{"class":104},[84,119326,26407],{"class":104},[84,119328,119329],{"class":104}," firefox\n",[84,119331,119332],{"class":86,"line":131},[84,119333,119334],{"class":328},"#移除gnome-42-2204\n",[84,119336,119337,119339,119341,119343],{"class":86,"line":145},[84,119338,24905],{"class":90},[84,119340,119308],{"class":104},[84,119342,26407],{"class":104},[84,119344,119345],{"class":104}," gnome-42-2204\n",[84,119347,119348],{"class":86,"line":156},[84,119349,119350],{"class":328},"#移除gtk-common-themes\n",[84,119352,119353,119355,119357,119359],{"class":86,"line":164},[84,119354,24905],{"class":90},[84,119356,119308],{"class":104},[84,119358,26407],{"class":104},[84,119360,119361],{"class":104}," gtk-common-themes\n",[84,119363,119364],{"class":86,"line":175},[84,119365,119366],{"class":328},"#移除其它...\n",[84,119368,119369],{"class":86,"line":185},[84,119370,3003],{"class":477},[84,119372,119373],{"class":86,"line":195},[84,119374,119375],{"class":328},"#移除core22,bare以及snapd\n",[84,119377,119378,119380,119382,119384],{"class":86,"line":206},[84,119379,24905],{"class":90},[84,119381,119308],{"class":104},[84,119383,26407],{"class":104},[84,119385,119386],{"class":104}," core22\n",[84,119388,119389,119391,119393,119395],{"class":86,"line":217},[84,119390,24905],{"class":90},[84,119392,119308],{"class":104},[84,119394,26407],{"class":104},[84,119396,119397],{"class":104}," bare\n",[84,119399,119400,119402,119404,119406],{"class":86,"line":227},[84,119401,24905],{"class":90},[84,119403,119308],{"class":104},[84,119405,26407],{"class":104},[84,119407,119408],{"class":104}," snapd\n",[35,119410,119411],{},[64,119412],{"alt":66,"src":119413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[35,119415,119416],{},"输入以下命令查看是否还有snap包",[75,119418,119420],{"className":77,"code":119419,"language":79,"meta":66,"style":66},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[81,119421,119422,119428,119432,119436,119440],{"__ignoreMap":66},[84,119423,119424,119426],{"class":86,"line":87},[84,119425,119276],{"class":90},[84,119427,119279],{"class":104},[84,119429,119430],{"class":86,"line":98},[84,119431,119128],{"class":328},[84,119433,119434],{"class":86,"line":70},[84,119435,119152],{"class":90},[84,119437,119438],{"class":86,"line":120},[84,119439,119161],{"class":328},[84,119441,119442],{"class":86,"line":131},[84,119443,119195],{"class":90},[35,119445,119446],{},[64,119447],{"alt":66,"src":119448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[23,119450,119452],{"id":119451},"_324-移除snap","3.2.4 移除snap",[35,119454,119455,119456,119461],{},"在删除掉",[39,119457,119460],{"href":119458,"rel":119459},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[43],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[75,119463,119465],{"className":77,"code":119464,"language":79,"meta":66,"style":66}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[81,119466,119467,119472,119485,119490,119501],{"__ignoreMap":66},[84,119468,119469],{"class":86,"line":87},[84,119470,119471],{"class":328}," #使用apt移除掉snap\n",[84,119473,119474,119476,119478,119480,119483],{"class":86,"line":98},[84,119475,24905],{"class":90},[84,119477,117641],{"class":104},[84,119479,117949],{"class":104},[84,119481,119482],{"class":94}," --purge",[84,119484,119408],{"class":104},[84,119486,119487],{"class":86,"line":70},[84,119488,119489],{"class":328},"#移除snapd的一些目录\n",[84,119491,119492,119494,119496,119498],{"class":86,"line":120},[84,119493,24905],{"class":90},[84,119495,118877],{"class":104},[84,119497,25653],{"class":94},[84,119499,119500],{"class":104}," \u002Fvar\u002Fcache\u002Fsnapd\n",[84,119502,119503,119505,119507,119509],{"class":86,"line":131},[84,119504,24905],{"class":90},[84,119506,118877],{"class":104},[84,119508,25653],{"class":94},[84,119510,119511],{"class":104}," ~\u002Fsnap\n",[35,119513,119514,119515,119518],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[81,119516,119517],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[23,119520,119522],{"id":119521},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[35,119524,119525],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[75,119527,119529],{"className":77,"code":119528,"language":79,"meta":66,"style":66},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[81,119530,119531],{"__ignoreMap":66},[84,119532,119533,119535,119537],{"class":86,"line":87},[84,119534,24905],{"class":90},[84,119536,118907],{"class":104},[84,119538,119539],{"class":104}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[35,119541,119542,119543,119546],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[81,119544,119545],{},":wq"," 回车",[75,119548,119550],{"className":77,"code":119549,"language":79,"meta":66,"style":66},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[81,119551,119552,119559,119573],{"__ignoreMap":66},[84,119553,119554,119557],{"class":86,"line":87},[84,119555,119556],{"class":90},"Package:",[84,119558,119408],{"class":104},[84,119560,119561,119564,119567,119570],{"class":86,"line":98},[84,119562,119563],{"class":90},"Pin:",[84,119565,119566],{"class":104}," release",[84,119568,119569],{"class":104}," a=",[84,119571,119572],{"class":94},"*\n",[84,119574,119575,119578],{"class":86,"line":70},[84,119576,119577],{"class":90},"Pin-Priority:",[84,119579,119580],{"class":94}," -10\n",[35,119582,119583],{},[64,119584],{"alt":66,"src":119585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[23,119587,119589],{"id":119588},"_326-测试是否成功","3.2.6 测试是否成功",[75,119591,119593],{"className":77,"code":119592,"language":79,"meta":66,"style":66},"sudo apt update\nsudo apt install firefox\n",[81,119594,119595,119603],{"__ignoreMap":66},[84,119596,119597,119599,119601],{"class":86,"line":87},[84,119598,24905],{"class":90},[84,119600,117641],{"class":104},[84,119602,26570],{"class":104},[84,119604,119605,119607,119609,119611],{"class":86,"line":98},[84,119606,24905],{"class":90},[84,119608,117641],{"class":104},[84,119610,24163],{"class":104},[84,119612,119329],{"class":104},[35,119614,119615],{},"这里提示snapd无法被安装，就证明成功了",[35,119617,119618],{},[64,119619],{"alt":66,"src":119620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[23,119622,119624],{"id":119623},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[35,119626,119627],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[35,119629,119630],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[35,119632,119633],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[75,119635,119637],{"className":77,"code":119636,"language":79,"meta":66,"style":66},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[81,119638,119639,119644,119653,119658,119666],{"__ignoreMap":66},[84,119640,119641],{"class":86,"line":87},[84,119642,119643],{"class":328},"# 添加Mozilla提供的源\n",[84,119645,119646,119648,119650],{"class":86,"line":98},[84,119647,24905],{"class":90},[84,119649,119168],{"class":104},[84,119651,119652],{"class":104}," ppa:mozillateam\u002Fppa\n",[84,119654,119655],{"class":86,"line":70},[84,119656,119657],{"class":328},"# 安装Firefox\n",[84,119659,119660,119662,119664],{"class":86,"line":120},[84,119661,24905],{"class":90},[84,119663,117641],{"class":104},[84,119665,26570],{"class":104},[84,119667,119668,119670,119672,119674],{"class":86,"line":131},[84,119669,24905],{"class":90},[84,119671,117641],{"class":104},[84,119673,24163],{"class":104},[84,119675,119329],{"class":104},[23,119677,119679],{"id":119678},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[35,119681,119682],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[35,119684,119685],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[75,119687,119689],{"className":77,"code":119688,"language":79,"meta":66,"style":66},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[81,119690,119691,119696,119706,119714,119718],{"__ignoreMap":66},[84,119692,119693],{"class":86,"line":87},[84,119694,119695],{"class":328},"#删掉禁止安装snap的配置文件\n",[84,119697,119698,119700,119702,119704],{"class":86,"line":98},[84,119699,24905],{"class":90},[84,119701,118877],{"class":104},[84,119703,25653],{"class":94},[84,119705,119539],{"class":104},[84,119707,119708,119710,119712],{"class":86,"line":70},[84,119709,24905],{"class":90},[84,119711,117641],{"class":104},[84,119713,26570],{"class":104},[84,119715,119716],{"class":86,"line":120},[84,119717,2729],{"emptyLinePlaceholder":403},[84,119719,119720,119722,119724],{"class":86,"line":131},[84,119721,24905],{"class":90},[84,119723,117641],{"class":104},[84,119725,119726],{"class":104}," dist-update\n",[14,119728,119730],{"id":119729},"_33-中文输入法","3.3 中文输入法",[23,119732,119734],{"id":119733},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[35,119736,119737],{},"官网下载搜狗输入法",[35,119739,119740],{},[64,119741],{"alt":66,"src":119742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[35,119744,119745],{},[64,119746],{"alt":66,"src":119747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[35,119749,119750],{},"打开终端输入如下",[75,119752,119754],{"className":77,"code":119753,"language":79,"meta":66,"style":66},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[81,119755,119756,119763],{"__ignoreMap":66},[84,119757,119758,119760],{"class":86,"line":87},[84,119759,101602],{"class":94},[84,119761,119762],{"class":104}," ~\u002FDownloads\u002F\n",[84,119764,119765,119767,119769,119771],{"class":86,"line":98},[84,119766,24905],{"class":90},[84,119768,117641],{"class":104},[84,119770,24163],{"class":104},[84,119772,119773],{"class":104}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[35,119775,119776],{},"打开Fcitx",[35,119778,119779,119782],{},[64,119780],{"alt":66,"src":119781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[64,119783],{"alt":66,"src":119784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[35,119786,119787],{},[64,119788],{"alt":66,"src":119789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[35,119791,119792],{},"添加搜狗输入法",[35,119794,119795],{},[64,119796],{"alt":66,"src":119797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[35,119799,119800],{},[64,119801],{"alt":66,"src":119802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[35,119804,119805],{},"将搜狗输入法设置为唯一输入法",[35,119807,119808],{},[64,119809],{"alt":66,"src":119810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[23,119812,119814],{"id":119813},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[28,119816,119817],{},[31,119818,119819],{},"卸载旧输入法",[75,119821,119823],{"className":118847,"code":119822,"language":118849,"meta":66,"style":66},"sudo apt purge fcitx* ibus*\n",[81,119824,119825],{"__ignoreMap":66},[84,119826,119827,119829,119831,119833,119836,119838,119841],{"class":86,"line":87},[84,119828,24905],{"class":90},[84,119830,117641],{"class":104},[84,119832,117982],{"class":104},[84,119834,119835],{"class":104}," fcitx",[84,119837,928],{"class":94},[84,119839,119840],{"class":104}," ibus",[84,119842,119572],{"class":94},[28,119844,119845],{"start":98},[31,119846,119847],{},"安装Fcitx5",[75,119849,119851],{"className":77,"code":119850,"language":79,"meta":66,"style":66},"# 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",[81,119852,119853,119858,119872,119876,119881,119890,119898],{"__ignoreMap":66},[84,119854,119855],{"class":86,"line":87},[84,119856,119857],{"class":328},"# Ubuntu22.04及以上、Debian12及以上\n",[84,119859,119860,119862,119864,119866,119869],{"class":86,"line":98},[84,119861,24905],{"class":90},[84,119863,117641],{"class":104},[84,119865,24163],{"class":104},[84,119867,119868],{"class":104}," fcitx5",[84,119870,119871],{"class":104}," fcitx5-chinese-addons\n",[84,119873,119874],{"class":86,"line":70},[84,119875,2729],{"emptyLinePlaceholder":403},[84,119877,119878],{"class":86,"line":120},[84,119879,119880],{"class":328},"# Ubuntu20.04\n",[84,119882,119883,119885,119887],{"class":86,"line":131},[84,119884,24905],{"class":90},[84,119886,119168],{"class":104},[84,119888,119889],{"class":104}," ppa:zhsj\u002Ffcitx5\n",[84,119891,119892,119894,119896],{"class":86,"line":145},[84,119893,24905],{"class":90},[84,119895,117641],{"class":104},[84,119897,26570],{"class":104},[84,119899,119900,119902,119904,119906,119908],{"class":86,"line":156},[84,119901,24905],{"class":90},[84,119903,117641],{"class":104},[84,119905,24163],{"class":104},[84,119907,119868],{"class":104},[84,119909,119871],{"class":104},[28,119911,119912,119915],{"start":70},[31,119913,119914],{},"Reboot System",[31,119916,119917],{},"启动Fcitx5",[35,119919,119920],{},[64,119921],{"alt":66,"src":119922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[28,119924,119925],{"start":131},[31,119926,119927],{},"修改一些设置",[35,119929,119930],{},"将Pinyin和Keyboard - English US加入到左边。",[35,119932,119933],{},[64,119934],{"alt":66,"src":119935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[35,119937,119938],{},"添加快捷键以便于更好切换中英文",[35,119940,119941],{},[64,119942],{"alt":66,"src":119943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[28,119945,119946],{"start":145},[31,119947,119948],{},"重启",[75,119950,119952],{"className":118847,"code":119951,"language":118849,"meta":66,"style":66},"sudo shutdown -r now\n",[81,119953,119954],{"__ignoreMap":66},[84,119955,119956,119958,119961,119964],{"class":86,"line":87},[84,119957,24905],{"class":90},[84,119959,119960],{"class":104}," shutdown",[84,119962,119963],{"class":94}," -r",[84,119965,119966],{"class":104}," now\n",[28,119968,119969],{"start":156},[31,119970,119971],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[35,119973,119974],{},[39,119975,119976],{"href":119976,"rel":119977},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[43],[28,119979,119980],{"start":164},[31,119981,119982],{},"再重启",[75,119984,119985],{"className":118847,"code":119951,"language":118849,"meta":66,"style":66},[81,119986,119987],{"__ignoreMap":66},[84,119988,119989,119991,119993,119995],{"class":86,"line":87},[84,119990,24905],{"class":90},[84,119992,119960],{"class":104},[84,119994,119963],{"class":94},[84,119996,119966],{"class":104},[14,119998,120000],{"id":119999},"_34-pip3源替换","3.4 pip3源替换",[35,120002,120003],{},"非Debian系发行版需要做。",[35,120005,120006],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[35,120008,120009],{},"使用dnf的系统也可能不用做。",[75,120011,120013],{"className":77,"code":120012,"language":79,"meta":66,"style":66},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[81,120014,120015,120020,120027,120032,120037],{"__ignoreMap":66},[84,120016,120017],{"class":86,"line":87},[84,120018,120019],{"class":328},"# 检查是否已安装 pip\n",[84,120021,120022,120025],{"class":86,"line":98},[84,120023,120024],{"class":90},"pip3",[84,120026,26621],{"class":94},[84,120028,120029],{"class":86,"line":70},[84,120030,120031],{"class":328},"# 如果未安装，先安装 pip3（见下方）\n",[84,120033,120034],{"class":86,"line":120},[84,120035,120036],{"class":328},"# 配置 pip 使用清华源\n",[84,120038,120039,120041,120044,120047,120050],{"class":86,"line":131},[84,120040,120024],{"class":90},[84,120042,120043],{"class":104}," config",[84,120045,120046],{"class":104}," set",[84,120048,120049],{"class":104}," global.index-url",[84,120051,120052],{"class":104}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[35,120054,120055],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[35,120057,120058],{},[64,120059],{"alt":66,"src":120060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[75,120062,120064],{"className":77,"code":120063,"language":79,"meta":66,"style":66},"#安装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",[81,120065,120066,120071,120079,120090,120094,120099,120118,120122,120127,120139,120143,120148],{"__ignoreMap":66},[84,120067,120068],{"class":86,"line":87},[84,120069,120070],{"class":328},"#安装pip3\n",[84,120072,120073,120075,120077],{"class":86,"line":98},[84,120074,24905],{"class":90},[84,120076,117641],{"class":104},[84,120078,26570],{"class":104},[84,120080,120081,120083,120085,120087],{"class":86,"line":70},[84,120082,24905],{"class":90},[84,120084,26404],{"class":104},[84,120086,24163],{"class":104},[84,120088,120089],{"class":104}," python3-pip\n",[84,120091,120092],{"class":86,"line":120},[84,120093,2729],{"emptyLinePlaceholder":403},[84,120095,120096],{"class":86,"line":131},[84,120097,120098],{"class":328},"#更新pip3\n",[84,120100,120101,120103,120105,120107,120109,120111,120114,120116],{"class":86,"line":145},[84,120102,101205],{"class":90},[84,120104,101208],{"class":94},[84,120106,101231],{"class":104},[84,120108,24163],{"class":104},[84,120110,26758],{"class":94},[84,120112,120113],{"class":104}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[84,120115,101236],{"class":94},[84,120117,101239],{"class":104},[84,120119,120120],{"class":86,"line":156},[84,120121,2729],{"emptyLinePlaceholder":403},[84,120123,120124],{"class":86,"line":164},[84,120125,120126],{"class":328},"#设置pip源为清华源\n",[84,120128,120129,120131,120133,120135,120137],{"class":86,"line":175},[84,120130,120024],{"class":90},[84,120132,120043],{"class":104},[84,120134,120046],{"class":104},[84,120136,120049],{"class":104},[84,120138,120052],{"class":104},[84,120140,120141],{"class":86,"line":185},[84,120142,2729],{"emptyLinePlaceholder":403},[84,120144,120145],{"class":86,"line":195},[84,120146,120147],{"class":328},"#测试\n",[84,120149,120150,120152,120154,120156,120158,120160],{"class":86,"line":206},[84,120151,101205],{"class":90},[84,120153,101208],{"class":94},[84,120155,101231],{"class":104},[84,120157,24163],{"class":104},[84,120159,101236],{"class":94},[84,120161,101239],{"class":104},[35,120163,120164],{},"成功的话，会看到Looking后面是tsinghua字样。",[35,120166,120167],{},[64,120168],{"alt":66,"src":120169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120171,120173],{"id":120172},"_35-显卡驱动安装","3.5 显卡驱动安装",[23,120175,120177],{"id":120176},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[75,120179,120181],{"className":118847,"code":120180,"language":118849,"meta":66,"style":66},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[81,120182,120183,120188,120203,120208],{"__ignoreMap":66},[84,120184,120185],{"class":86,"line":87},[84,120186,120187],{"class":328},"# 如果是使用apt安装的驱动\n",[84,120189,120190,120192,120194,120196,120198,120201],{"class":86,"line":98},[84,120191,24905],{"class":90},[84,120193,26404],{"class":104},[84,120195,26407],{"class":104},[84,120197,119482],{"class":94},[84,120199,120200],{"class":104}," nvidia",[84,120202,119572],{"class":94},[84,120204,120205],{"class":86,"line":70},[84,120206,120207],{"class":328},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[84,120209,120210,120212],{"class":86,"line":120},[84,120211,24905],{"class":90},[84,120213,120214],{"class":104}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[23,120216,120218],{"id":120217},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22327,120220,120222],{"id":120221},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23239,120224,120226],{"id":120225},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[75,120228,120230],{"className":118847,"code":120229,"language":118849,"meta":66,"style":66},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[81,120231,120232,120237,120248,120253,120263,120268],{"__ignoreMap":66},[84,120233,120234],{"class":86,"line":87},[84,120235,120236],{"class":328},"# 安装英伟达驱动\n",[84,120238,120239,120241,120243,120245],{"class":86,"line":98},[84,120240,24905],{"class":90},[84,120242,117641],{"class":104},[84,120244,24163],{"class":104},[84,120246,120247],{"class":104}," nvidia-driver-版本号\n",[84,120249,120250],{"class":86,"line":70},[84,120251,120252],{"class":328},"# 重启 \n",[84,120254,120255,120257,120259,120261],{"class":86,"line":120},[84,120256,24905],{"class":90},[84,120258,119960],{"class":104},[84,120260,119963],{"class":94},[84,120262,119966],{"class":104},[84,120264,120265],{"class":86,"line":131},[84,120266,120267],{"class":328},"# 检查驱动是否安装成功\n",[84,120269,120270],{"class":86,"line":145},[84,120271,120272],{"class":90},"nvidia-smi\n",[23239,120274,120276],{"id":120275},"_35212-debian","3.5.2.1.2 Debian",[75,120278,120280],{"className":118847,"code":120279,"language":118849,"meta":66,"style":66},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[81,120281,120282,120286,120300,120304,120314,120318],{"__ignoreMap":66},[84,120283,120284],{"class":86,"line":87},[84,120285,120236],{"class":328},[84,120287,120288,120290,120292,120294,120297],{"class":86,"line":98},[84,120289,24905],{"class":90},[84,120291,117641],{"class":104},[84,120293,24163],{"class":104},[84,120295,120296],{"class":104}," nvidia-driver",[84,120298,120299],{"class":104}," nvidia-settings\n",[84,120301,120302],{"class":86,"line":70},[84,120303,120252],{"class":328},[84,120305,120306,120308,120310,120312],{"class":86,"line":120},[84,120307,24905],{"class":90},[84,120309,119960],{"class":104},[84,120311,119963],{"class":94},[84,120313,119966],{"class":104},[84,120315,120316],{"class":86,"line":131},[84,120317,120267],{"class":328},[84,120319,120320],{"class":86,"line":145},[84,120321,120272],{"class":90},[22327,120323,120325],{"id":120324},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[35,120327,120328,120329,120332],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[624,120330,120331],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[35,120334,120335,120336],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23882,120337,120338],{},[624,120339,120340],{},"（也可以不禁用桌面环境，直接进行下一步。）",[75,120342,120344],{"className":118847,"code":120343,"language":118849,"meta":66,"style":66},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[81,120345,120346,120351,120361,120366,120379,120384],{"__ignoreMap":66},[84,120347,120348],{"class":86,"line":87},[84,120349,120350],{"class":328},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[84,120352,120353,120355,120358],{"class":86,"line":98},[84,120354,24905],{"class":90},[84,120356,120357],{"class":104}," telinit",[84,120359,120360],{"class":94}," 3\n",[84,120362,120363],{"class":86,"line":70},[84,120364,120365],{"class":328},"# ubuntu 使用下方命令\n",[84,120367,120368,120370,120373,120376],{"class":86,"line":120},[84,120369,24905],{"class":90},[84,120371,120372],{"class":104}," service",[84,120374,120375],{"class":104}," lightdm",[84,120377,120378],{"class":104}," stop\n",[84,120380,120381],{"class":86,"line":131},[84,120382,120383],{"class":328},"# Fedora 使用下方命令\n",[84,120385,120386,120388,120390,120393],{"class":86,"line":145},[84,120387,24905],{"class":90},[84,120389,26841],{"class":104},[84,120391,120392],{"class":104}," isolate",[84,120394,120395],{"class":104}," multi-user.target\n",[35,120397,120398],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[75,120400,120402],{"className":118847,"code":120401,"language":118849,"meta":66,"style":66},"# 编译环境+准备工作\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",[81,120403,120404,120409,120420,120425,120432,120437,120449,120454,120461,120466],{"__ignoreMap":66},[84,120405,120406],{"class":86,"line":87},[84,120407,120408],{"class":328},"# 编译环境+准备工作\n",[84,120410,120411,120413,120415,120417],{"class":86,"line":98},[84,120412,24905],{"class":90},[84,120414,117641],{"class":104},[84,120416,24163],{"class":104},[84,120418,120419],{"class":104}," build-essential\n",[84,120421,120422],{"class":86,"line":70},[84,120423,120424],{"class":328},"# 进入到.run目录中\n",[84,120426,120427,120429],{"class":86,"line":120},[84,120428,101602],{"class":94},[84,120430,120431],{"class":104}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[84,120433,120434],{"class":86,"line":131},[84,120435,120436],{"class":328},"# 给驱动文件增加可执行权限：\n",[84,120438,120439,120441,120443,120446],{"class":86,"line":145},[84,120440,24905],{"class":90},[84,120442,24908],{"class":104},[84,120444,120445],{"class":104}," a+x",[84,120447,120448],{"class":104}," NVIDIA-Linux-x86_64-550.107.02.run\n",[84,120450,120451],{"class":86,"line":156},[84,120452,120453],{"class":328},"# 然后执行安装：\n",[84,120455,120456,120458],{"class":86,"line":164},[84,120457,24905],{"class":90},[84,120459,120460],{"class":104}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[84,120462,120463],{"class":86,"line":175},[84,120464,120465],{"class":328},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[84,120467,120468,120470,120473],{"class":86,"line":185},[84,120469,24905],{"class":90},[84,120471,120472],{"class":104}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[84,120474,120475],{"class":94},"  --no-opengl-files\n",[35,120477,120478],{},"安装完毕重启即可",[75,120480,120482],{"className":118847,"code":120481,"language":118849,"meta":66,"style":66},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[81,120483,120484,120488,120494,120498],{"__ignoreMap":66},[84,120485,120486],{"class":86,"line":87},[84,120487,120252],{"class":328},[84,120489,120490,120492],{"class":86,"line":98},[84,120491,24905],{"class":90},[84,120493,26975],{"class":104},[84,120495,120496],{"class":86,"line":70},[84,120497,120267],{"class":328},[84,120499,120500],{"class":86,"line":120},[84,120501,120272],{"class":90},[23,120503,120505],{"id":120504},"_353-安装cuda","3.5.3 安装CUDA",[35,120507,120508],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[35,120510,120511],{},[64,120512],{"alt":66,"src":120513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[28,120515,120516],{},[31,120517,120518],{},"先查看显卡驱动所支持的最高CUDA版本",[75,120520,120521],{"className":118847,"code":120272,"language":118849,"meta":66,"style":66},[81,120522,120523],{"__ignoreMap":66},[84,120524,120525],{"class":86,"line":87},[84,120526,120272],{"class":90},[35,120528,120529],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[35,120531,120532],{},[64,120533],{"alt":66,"src":120534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[28,120536,120537],{"start":98},[31,120538,120539],{},"下载CUDA并安装CUDA",[35,120541,118626,120542],{},[39,120543,118629],{"href":118629,"rel":120544},[43],[35,120546,120547],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[35,120549,120550],{},[64,120551],{"alt":66,"src":120552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[35,120554,120555,120556,120561],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[39,120557,120560],{"href":120558,"rel":120559},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[43],"Vinci机器人队单片机教程","）",[35,120563,120564],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[35,120566,120567],{},[64,120568],{"alt":66,"src":120569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[35,120571,120572],{},"将最下方框框里的命令敲入终端",[75,120574,120576],{"className":118847,"code":120575,"language":118849,"meta":66,"style":66},"# 在当前文件夹下创建一个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",[81,120577,120578,120583,120592,120597,120604,120609,120617,120622,120633,120638],{"__ignoreMap":66},[84,120579,120580],{"class":86,"line":87},[84,120581,120582],{"class":328},"# 在当前文件夹下创建一个ttt的子文件夹\n",[84,120584,120585,120587,120589],{"class":86,"line":98},[84,120586,101592],{"class":90},[84,120588,29543],{"class":94},[84,120590,120591],{"class":104}," .\u002Fttt\n",[84,120593,120594],{"class":86,"line":70},[84,120595,120596],{"class":328},"# 进入ttt文件夹\n",[84,120598,120599,120601],{"class":86,"line":120},[84,120600,101602],{"class":94},[84,120602,120603],{"class":104}," ttt\n",[84,120605,120606],{"class":86,"line":131},[84,120607,120608],{"class":328},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[84,120610,120611,120614],{"class":86,"line":145},[84,120612,120613],{"class":90},"wget",[84,120615,120616],{"class":104}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[84,120618,120619],{"class":86,"line":156},[84,120620,120621],{"class":328},"# 给予权限\n",[84,120623,120624,120626,120628,120630],{"class":86,"line":164},[84,120625,24905],{"class":90},[84,120627,24908],{"class":104},[84,120629,120445],{"class":104},[84,120631,120632],{"class":104}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[84,120634,120635],{"class":86,"line":175},[84,120636,120637],{"class":328},"# 运行脚本\n",[84,120639,120640,120642],{"class":86,"line":185},[84,120641,24905],{"class":90},[84,120643,120632],{"class":104},[35,120645,120646],{},[64,120647],{"alt":66,"src":120648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[35,120650,120651],{},"正在安装中：",[35,120653,120654],{},[64,120655],{"alt":66,"src":120656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[35,120658,120659],{},"输入accept接受即可",[35,120661,120662],{},[64,120663],{"alt":66,"src":120664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[35,120666,120667],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[35,120669,120670],{},[64,120671],{"alt":66,"src":120672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[35,120674,120675],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[35,120677,120678],{},[64,120679],{"alt":66,"src":120680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[28,120682,120683],{"start":70},[31,120684,120685],{},"配置环境",[35,120687,120688],{},"根据上方确认一下路径，比如我上面红色框起来的为",[75,120690,120692],{"className":118847,"code":120691,"language":118849,"meta":66,"style":66},"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",[81,120693,120694,120710,120725],{"__ignoreMap":66},[84,120695,120696,120699,120702,120705,120708],{"class":86,"line":87},[84,120697,120698],{"class":90},"Please",[84,120700,120701],{"class":104}," make",[84,120703,120704],{"class":104}," sure",[84,120706,120707],{"class":104}," that",[84,120709,3003],{"class":477},[84,120711,120712,120714,120717,120720,120723],{"class":86,"line":98},[84,120713,52598],{"class":90},[84,120715,120716],{"class":104},"   PATH",[84,120718,120719],{"class":104}," includes",[84,120721,120722],{"class":104}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[84,120724,3003],{"class":477},[84,120726,120727,120729,120732,120734,120737,120740,120742,120745,120748,120751,120754,120756,120759,120761],{"class":86,"line":70},[84,120728,52598],{"class":90},[84,120730,120731],{"class":104},"   LD_LIBRARY_PATH",[84,120733,120719],{"class":104},[84,120735,120736],{"class":104}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[84,120738,120739],{"class":104}," or,",[84,120741,5538],{"class":104},[84,120743,120744],{"class":104}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[84,120746,120747],{"class":104}," to",[84,120749,120750],{"class":104}," \u002Fetc\u002Fld.so.conf",[84,120752,120753],{"class":104}," and",[84,120755,27557],{"class":104},[84,120757,120758],{"class":104}," ldconfig",[84,120760,64930],{"class":104},[84,120762,120763],{"class":104}," root\n",[35,120765,120766],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[75,120768,120770],{"className":118847,"code":120769,"language":118849,"meta":66,"style":66},"which nvcc\n",[81,120771,120772],{"__ignoreMap":66},[84,120773,120774,120777],{"class":86,"line":87},[84,120775,120776],{"class":94},"which",[84,120778,120779],{"class":104}," nvcc\n",[35,120781,120782],{},[64,120783],{"alt":66,"src":120784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[35,120786,120787],{},"所以我进行以下操作：",[75,120789,120791],{"className":118847,"code":120790,"language":118849,"meta":66,"style":66},"sudo vim ~\u002F.bashrc\n",[81,120792,120793],{"__ignoreMap":66},[84,120794,120795,120797,120799],{"class":86,"line":87},[84,120796,24905],{"class":90},[84,120798,118907],{"class":104},[84,120800,120801],{"class":104}," ~\u002F.bashrc\n",[35,120803,120804],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[75,120806,120808],{"className":118847,"code":120807,"language":118849,"meta":66,"style":66},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[81,120809,120810,120822],{"__ignoreMap":66},[84,120811,120812,120814,120817,120819],{"class":86,"line":87},[84,120813,25370],{"class":473},[84,120815,120816],{"class":477}," PATH",[84,120818,523],{"class":473},[84,120820,120821],{"class":477},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[84,120823,120824,120826,120829,120831],{"class":86,"line":98},[84,120825,25370],{"class":473},[84,120827,120828],{"class":477}," LD_LIBRARY_PATH",[84,120830,523],{"class":473},[84,120832,120833],{"class":477},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[35,120835,120836],{},[64,120837],{"alt":66,"src":120838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[75,120840,120842],{"className":118847,"code":120841,"language":118849,"meta":66,"style":66},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[81,120843,120844,120849,120855,120860],{"__ignoreMap":66},[84,120845,120846],{"class":86,"line":87},[84,120847,120848],{"class":328},"# 刷新当前终端的环境变量\n",[84,120850,120851,120853],{"class":86,"line":98},[84,120852,101219],{"class":94},[84,120854,120801],{"class":104},[84,120856,120857],{"class":86,"line":70},[84,120858,120859],{"class":328},"# 验证CUDA是否安装成功\n",[84,120861,120862,120865],{"class":86,"line":120},[84,120863,120864],{"class":90},"nvcc",[84,120866,120867],{"class":94}," -V\n",[35,120869,120870],{},"出现下图这种则安装成功。",[35,120872,120873],{},[64,120874],{"alt":66,"src":120875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[23,120877,120879],{"id":120878},"_354-安装cudnn","3.5.4 安装cuDNN",[28,120881,120882],{},[31,120883,120884],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[35,120886,120887,120888,120893],{},"前往 NVIDIA cuDNN 下载页面：",[39,120889,120892],{"href":120890,"rel":120891},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[43],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[35,120895,120896],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[35,120898,120899],{},[64,120900],{"alt":66,"src":120901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[35,120903,120904],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[35,120906,120907],{},[64,120908],{"alt":66,"src":120909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[35,120911,120912],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[35,120914,120915],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[35,120917,120918],{},[624,120919,120920],{},"我这里选择所有Linux X86_64最通用的办法：",[35,120922,120923],{},"下载好的：",[35,120925,120926],{},[64,120927],{"alt":66,"src":120928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[28,120930,120931],{"start":98},[31,120932,120933],{},"安装cuDNN",[35,120935,120936],{},"找到该文件所在目录，并打开终端，cd到该目录。",[35,120938,120939],{},[64,120940],{"alt":66,"src":120941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[35,120943,120944],{},"解压文件，并复制到对应位置完成安装",[75,120946,120948],{"className":118847,"code":120947,"language":118849,"meta":66,"style":66},"# 解压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",[81,120949,120950,120955,120966,120971,120978,120983,120999,121013,121018,121029,121038,121042,121058],{"__ignoreMap":66},[84,120951,120952],{"class":86,"line":87},[84,120953,120954],{"class":328},"# 解压cuDNN文件\n",[84,120956,120957,120960,120963],{"class":86,"line":98},[84,120958,120959],{"class":90},"tar",[84,120961,120962],{"class":94}," -xvf",[84,120964,120965],{"class":104}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[84,120967,120968],{"class":86,"line":70},[84,120969,120970],{"class":328},"# cd进文件夹\n",[84,120972,120973,120975],{"class":86,"line":120},[84,120974,101602],{"class":94},[84,120976,120977],{"class":104}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[84,120979,120980],{"class":86,"line":131},[84,120981,120982],{"class":328},"# 复制cuDNN文件到CUDA目录\n",[84,120984,120985,120987,120989,120992,120994,120997],{"class":86,"line":145},[84,120986,24905],{"class":90},[84,120988,28188],{"class":104},[84,120990,120991],{"class":104}," include\u002Fcudnn",[84,120993,928],{"class":94},[84,120995,120996],{"class":104},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[84,120998,3003],{"class":477},[84,121000,121001,121003,121005,121008,121010],{"class":86,"line":156},[84,121002,24905],{"class":90},[84,121004,28188],{"class":104},[84,121006,121007],{"class":104}," lib\u002Flibcudnn",[84,121009,928],{"class":94},[84,121011,121012],{"class":104},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[84,121014,121015],{"class":86,"line":164},[84,121016,121017],{"class":328},"# 对比一下有没有缺文件\n",[84,121019,121020,121022,121025,121027],{"class":86,"line":175},[84,121021,27089],{"class":90},[84,121023,121024],{"class":104}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[84,121026,928],{"class":94},[84,121028,3003],{"class":477},[84,121030,121031,121033,121036],{"class":86,"line":185},[84,121032,27089],{"class":90},[84,121034,121035],{"class":104}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[84,121037,119572],{"class":94},[84,121039,121040],{"class":86,"line":195},[84,121041,120621],{"class":328},[84,121043,121044,121046,121048,121051,121053,121055],{"class":86,"line":206},[84,121045,24905],{"class":90},[84,121047,24908],{"class":104},[84,121049,121050],{"class":104}," a+r",[84,121052,121024],{"class":104},[84,121054,928],{"class":94},[84,121056,121057],{"class":477},"   \n",[84,121059,121060,121062,121064,121066,121068],{"class":86,"line":217},[84,121061,24905],{"class":90},[84,121063,24908],{"class":104},[84,121065,121050],{"class":104},[84,121067,121035],{"class":104},[84,121069,119572],{"class":94},[28,121071,121072],{"start":70},[31,121073,121074],{},"检查是否安装成功",[75,121076,121078],{"className":118847,"code":121077,"language":118849,"meta":66,"style":66},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[81,121079,121080,121085],{"__ignoreMap":66},[84,121081,121082],{"class":86,"line":87},[84,121083,121084],{"class":328},"# 检查cuDNN版本命令\n",[84,121086,121087,121090,121093,121095,121097,121100,121103],{"class":86,"line":98},[84,121088,121089],{"class":90},"cat",[84,121091,121092],{"class":104}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[84,121094,25437],{"class":473},[84,121096,30563],{"class":90},[84,121098,121099],{"class":104}," CUDNN_MAJOR",[84,121101,121102],{"class":94}," -A",[84,121104,48050],{"class":94},[35,121106,121107],{},"出现下图这样的就是安装成功了",[35,121109,121110],{},[64,121111],{"alt":66,"src":121112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[28,121114,121115],{"start":120},[31,121116,121117],{},"软链接(一般不需要)",[75,121119,121121],{"className":118847,"code":121120,"language":118849,"meta":66,"style":66},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[81,121122,121123,121128],{"__ignoreMap":66},[84,121124,121125],{"class":86,"line":87},[84,121126,121127],{"class":328},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[84,121129,121130,121132],{"class":86,"line":98},[84,121131,24905],{"class":90},[84,121133,121134],{"class":104}," ldconfig\n",[35,121136,121137],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[75,121139,121144],{"className":121140,"code":121141,"language":121142,"meta":121143,"style":66},"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",[81,121145,121146,121151,121156,121161,121166,121171,121176],{"__ignoreMap":66},[84,121147,121148],{"class":86,"line":87},[84,121149,121150],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[84,121152,121153],{"class":86,"line":98},[84,121154,121155],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[84,121157,121158],{"class":86,"line":70},[84,121159,121160],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[84,121162,121163],{"class":86,"line":120},[84,121164,121165],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[84,121167,121168],{"class":86,"line":131},[84,121169,121170],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[84,121172,121173],{"class":86,"line":145},[84,121174,121175],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[84,121177,121178],{"class":86,"line":156},[84,121179,121180],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[35,121182,121183],{},"运行下方的命令",[75,121185,121187],{"className":118847,"code":121186,"language":118849,"meta":66,"style":66},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[81,121188,121189,121194,121201,121206],{"__ignoreMap":66},[84,121190,121191],{"class":86,"line":87},[84,121192,121193],{"class":328},"# cd进入CUDA路径\n",[84,121195,121196,121198],{"class":86,"line":98},[84,121197,101602],{"class":94},[84,121199,121200],{"class":104}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[84,121202,121203],{"class":86,"line":70},[84,121204,121205],{"class":328}," # 查看本路径下的需要软链接的文件名\n",[84,121207,121208],{"class":86,"line":120},[84,121209,121210],{"class":90}," ls\n",[35,121212,121213],{},[64,121214],{"alt":66,"src":121215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[35,121217,121218,121219,18739,121222,18739,121225,121228],{},"如上图，我需要将",[81,121220,121221],{},"libcudnn_xxx_xxxxx.so.8.9.7",[81,121223,121224],{},"libcudnn_xxx_xxxxx.so.8",[81,121226,121227],{},"libcudnn_xxx_xxxxx.so","软链接",[75,121230,121232],{"className":118847,"code":121231,"language":118849,"meta":66,"style":66},"# 创建符号链接。对于每个 .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",[81,121233,121234,121239,121255,121269,121283,121297,121311,121325,121339,121344,121350,121355],{"__ignoreMap":66},[84,121235,121236],{"class":86,"line":87},[84,121237,121238],{"class":328},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[84,121240,121241,121243,121246,121249,121252],{"class":86,"line":98},[84,121242,24905],{"class":90},[84,121244,121245],{"class":104}," ln",[84,121247,121248],{"class":94}," -sf",[84,121250,121251],{"class":104}," libcudnn_cnn_train.so.8.9.7",[84,121253,121254],{"class":104}," libcudnn_cnn_train.so.8\n",[84,121256,121257,121259,121261,121263,121266],{"class":86,"line":70},[84,121258,24905],{"class":90},[84,121260,121245],{"class":104},[84,121262,121248],{"class":94},[84,121264,121265],{"class":104}," libcudnn_adv_infer.so.8.9.7",[84,121267,121268],{"class":104}," libcudnn_adv_infer.so.8\n",[84,121270,121271,121273,121275,121277,121280],{"class":86,"line":120},[84,121272,24905],{"class":90},[84,121274,121245],{"class":104},[84,121276,121248],{"class":94},[84,121278,121279],{"class":104}," libcudnn_adv_train.so.8.9.7",[84,121281,121282],{"class":104}," libcudnn_adv_train.so.8\n",[84,121284,121285,121287,121289,121291,121294],{"class":86,"line":131},[84,121286,24905],{"class":90},[84,121288,121245],{"class":104},[84,121290,121248],{"class":94},[84,121292,121293],{"class":104}," libcudnn_cnn_infer.so.8.9.7",[84,121295,121296],{"class":104}," libcudnn_cnn_infer.so.8\n",[84,121298,121299,121301,121303,121305,121308],{"class":86,"line":145},[84,121300,24905],{"class":90},[84,121302,121245],{"class":104},[84,121304,121248],{"class":94},[84,121306,121307],{"class":104}," libcudnn.so.8.9.7",[84,121309,121310],{"class":104}," libcudnn.so.8\n",[84,121312,121313,121315,121317,121319,121322],{"class":86,"line":156},[84,121314,24905],{"class":90},[84,121316,121245],{"class":104},[84,121318,121248],{"class":94},[84,121320,121321],{"class":104}," libcudnn_ops_infer.so.8.9.7",[84,121323,121324],{"class":104}," libcudnn_ops_infer.so.8\n",[84,121326,121327,121329,121331,121333,121336],{"class":86,"line":164},[84,121328,24905],{"class":90},[84,121330,121245],{"class":104},[84,121332,121248],{"class":94},[84,121334,121335],{"class":104}," libcudnn_ops_train.so.8.9.7",[84,121337,121338],{"class":104}," libcudnn_ops_train.so.8\n",[84,121340,121341],{"class":86,"line":175},[84,121342,121343],{"class":328},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[84,121345,121346,121348],{"class":86,"line":185},[84,121347,24905],{"class":90},[84,121349,121134],{"class":104},[84,121351,121352],{"class":86,"line":195},[84,121353,121354],{"class":328},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[84,121356,121357,121359,121362,121365,121367,121370],{"class":86,"line":206},[84,121358,27089],{"class":90},[84,121360,121361],{"class":94}," -l",[84,121363,121364],{"class":104}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[84,121366,928],{"class":94},[84,121368,121369],{"class":104},".so",[84,121371,119572],{"class":94},[23,121373,121375],{"id":121374},"_355-常见问题","3.5.5 常见问题",[28,121377,121378],{},[31,121379,121380],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[75,121382,121384],{"className":118847,"code":121383,"language":118849,"meta":66,"style":66},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[81,121385,121386],{"__ignoreMap":66},[84,121387,121388,121390,121392],{"class":86,"line":87},[84,121389,24905],{"class":90},[84,121391,118907],{"class":104},[84,121393,121394],{"class":104}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[35,121396,121397],{},"blacklist-nouveau.conf文件内容如下：",[75,121399,121401],{"className":118847,"code":121400,"language":118849,"meta":66,"style":66},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[81,121402,121403,121411,121418,121430,121440],{"__ignoreMap":66},[84,121404,121405,121408],{"class":86,"line":87},[84,121406,121407],{"class":90},"blacklist",[84,121409,121410],{"class":104}," nouveau\n",[84,121412,121413,121415],{"class":86,"line":98},[84,121414,121407],{"class":90},[84,121416,121417],{"class":104}," lbm-nouveau\n",[84,121419,121420,121422,121425,121428],{"class":86,"line":70},[84,121421,116256],{"class":90},[84,121423,121424],{"class":104}," nouveau",[84,121426,121427],{"class":104}," modeset=",[84,121429,3414],{"class":94},[84,121431,121432,121435,121437],{"class":86,"line":120},[84,121433,121434],{"class":94},"alias",[84,121436,121424],{"class":104},[84,121438,121439],{"class":104}," off\n",[84,121441,121442,121444,121447],{"class":86,"line":131},[84,121443,121434],{"class":94},[84,121445,121446],{"class":104}," lbm-nouveau",[84,121448,121439],{"class":104},[35,121450,121451],{},"接着运行下方命令",[75,121453,121455],{"className":118847,"code":121454,"language":118849,"meta":66,"style":66},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[81,121456,121457,121467,121472],{"__ignoreMap":66},[84,121458,121459,121461,121464],{"class":86,"line":87},[84,121460,24905],{"class":90},[84,121462,121463],{"class":104}," update-initramfs",[84,121465,121466],{"class":94}," -u\n",[84,121468,121469],{"class":86,"line":98},[84,121470,121471],{"class":90},"或者\n",[84,121473,121474,121476,121479],{"class":86,"line":70},[84,121475,24905],{"class":90},[84,121477,121478],{"class":104}," dracut",[84,121480,121481],{"class":94}," --force\n",[35,121483,121484],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[75,121486,121488],{"className":118847,"code":121487,"language":118849,"meta":66,"style":66},"lsmod | grep nouveau\n",[81,121489,121490],{"__ignoreMap":66},[84,121491,121492,121495,121497,121499],{"class":86,"line":87},[84,121493,121494],{"class":90},"lsmod",[84,121496,25437],{"class":473},[84,121498,30563],{"class":90},[84,121500,121410],{"class":104},[28,121502,121503],{"start":98},[31,121504,121505],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[75,121507,121509],{"className":118847,"code":121508,"language":118849,"meta":66,"style":66},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[81,121510,121511],{"__ignoreMap":66},[84,121512,121513,121515,121517],{"class":86,"line":87},[84,121514,24905],{"class":90},[84,121516,118907],{"class":104},[84,121518,121519],{"class":104}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[35,121521,121522],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[75,121524,121526],{"className":118847,"code":121525,"language":118849,"meta":66,"style":66},"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",[81,121527,121528,121536,121544,121552,121559,121567,121577,121585],{"__ignoreMap":66},[84,121529,121530,121533],{"class":86,"line":87},[84,121531,121532],{"class":90},"Section",[84,121534,121535],{"class":104}," \"OutputClass\"\n",[84,121537,121538,121541],{"class":86,"line":98},[84,121539,121540],{"class":90},"   Identifier",[84,121542,121543],{"class":104}," \"nvidia\"\n",[84,121545,121546,121549],{"class":86,"line":70},[84,121547,121548],{"class":90},"   MatchDriver",[84,121550,121551],{"class":104}," \"nvidia-drm\"\n",[84,121553,121554,121557],{"class":86,"line":120},[84,121555,121556],{"class":90},"   Driver",[84,121558,121543],{"class":104},[84,121560,121561,121564],{"class":86,"line":131},[84,121562,121563],{"class":90},"   Option",[84,121565,121566],{"class":104}," \"AllowEmptyInitialConfiguration\"\n",[84,121568,121569,121571,121574],{"class":86,"line":145},[84,121570,121563],{"class":90},[84,121572,121573],{"class":104}," \"PrimaryGPU\"",[84,121575,121576],{"class":104}," \"yes\"\n",[84,121578,121579,121582],{"class":86,"line":156},[84,121580,121581],{"class":90},"   ModulePath",[84,121583,121584],{"class":104}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[84,121586,121587],{"class":86,"line":164},[84,121588,121589],{"class":90},"EndSection\n",[28,121591,121592],{"start":70},[31,121593,121594],{},"安装N卡驱动提示错误",[75,121596,121598],{"className":121140,"code":121597,"language":121142,"meta":121143,"style":66},"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",[81,121599,121600],{"__ignoreMap":66},[84,121601,121602],{"class":86,"line":87},[84,121603,121597],{},[28,121605,121606],{},[31,121607,121608],{},"检查当前运行的内核版本：",[35,121610,121611],{},"运行以下命令以查看你当前正在使用的内核版本：",[75,121613,121615],{"className":77,"code":121614,"language":79,"meta":66,"style":66},"uname -r\n",[81,121616,121617],{"__ignoreMap":66},[84,121618,121619,121621],{"class":86,"line":87},[84,121620,70530],{"class":90},[84,121622,121623],{"class":94}," -r\n",[28,121625,121626],{"start":98},[31,121627,121628],{},"安装内核开发文件：",[35,121630,121631,121632,121635],{},"确保你已经安装了与当前内核版本相匹配的 ",[81,121633,121634],{},"kernel-devel"," 包。运行以下命令来安装：",[75,121637,121639],{"className":77,"code":121638,"language":79,"meta":66,"style":66},"sudo dnf install kernel-devel-$(uname -r)\n",[81,121640,121641],{"__ignoreMap":66},[84,121642,121643,121645,121647,121649,121652,121654,121656,121658],{"class":86,"line":87},[84,121644,24905],{"class":90},[84,121646,26643],{"class":104},[84,121648,24163],{"class":104},[84,121650,121651],{"class":104}," kernel-devel-",[84,121653,25427],{"class":477},[84,121655,70530],{"class":90},[84,121657,119963],{"class":94},[84,121659,484],{"class":477},[35,121661,121662],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[28,121664,121665],{"start":70},[31,121666,121667],{},"安装内核源代码（如果需要）：",[35,121669,121670],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[75,121672,121674],{"className":77,"code":121673,"language":79,"meta":66,"style":66},"sudo dnf install kernel-headers kernel-source\n",[81,121675,121676],{"__ignoreMap":66},[84,121677,121678,121680,121682,121684,121687],{"class":86,"line":87},[84,121679,24905],{"class":90},[84,121681,26643],{"class":104},[84,121683,24163],{"class":104},[84,121685,121686],{"class":104}," kernel-headers",[84,121688,121689],{"class":104}," kernel-source\n",[28,121691,121692],{"start":120},[31,121693,121694],{},"检查安装：",[35,121696,121697,121698,121701],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[81,121699,121700],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[75,121703,121705],{"className":77,"code":121704,"language":79,"meta":66,"style":66},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[81,121706,121707],{"__ignoreMap":66},[84,121708,121709,121711],{"class":86,"line":87},[84,121710,27089],{"class":90},[84,121712,121713],{"class":104}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[35,121715,121716,121717,121720],{},"如果仍然遇到问题，可以通过 ",[81,121718,121719],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[389,121722,121723],{},"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":66,"searchDepth":98,"depth":98,"links":121725},[121726,121730,121740,121744,121745],{"id":118823,"depth":98,"text":118824,"children":121727},[121728,121729],{"id":118833,"depth":70,"text":118834},{"id":118843,"depth":70,"text":118844},{"id":119043,"depth":98,"text":119044,"children":121731},[121732,121733,121734,121735,121736,121737,121738,121739],{"id":119047,"depth":70,"text":119048},{"id":119117,"depth":70,"text":119118},{"id":119206,"depth":70,"text":119207},{"id":119451,"depth":70,"text":119452},{"id":119521,"depth":70,"text":119522},{"id":119588,"depth":70,"text":119589},{"id":119623,"depth":70,"text":119624},{"id":119678,"depth":70,"text":119679},{"id":119729,"depth":98,"text":119730,"children":121741},[121742,121743],{"id":119733,"depth":70,"text":119734},{"id":119813,"depth":70,"text":119814},{"id":119999,"depth":98,"text":120000},{"id":120172,"depth":98,"text":120173,"children":121746},[121747,121748,121749,121750,121751],{"id":120176,"depth":70,"text":120177},{"id":120217,"depth":70,"text":120218},{"id":120504,"depth":70,"text":120505},{"id":120878,"depth":70,"text":120879},{"id":121374,"depth":70,"text":121375},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118815,"description":400},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121758,"title":121759,"body":121760,"description":400,"extension":401,"meta":122100,"navigation":403,"path":122101,"seo":122102,"stem":122103,"__hash__":122104},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121761,"toc":122098},[121762,121765,121770,121773,122019,122024,122027,122063,122066,122095],[10,121763,121759],{"id":121764},"_4-命令教程长期积累",[28,121766,121767],{},[31,121768,121769],{},"大多数命令",[35,121771,121772],{},"常用 Linux 命令速查：",[75,121774,121776],{"className":77,"code":121775,"language":79,"meta":66,"style":66},"# 文件与目录\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",[81,121777,121778,121783,121790,121797,121805,121812,121819,121827,121835,121842,121849,121857,121861,121866,121873,121881,121888,121892,121897,121904,121912,121920,121928,121936,121940,121945,121953,121960,121967,121975,121983,121987,121992,122001,122010],{"__ignoreMap":66},[84,121779,121780],{"class":86,"line":87},[84,121781,121782],{"class":328},"# 文件与目录\n",[84,121784,121785,121787],{"class":86,"line":98},[84,121786,27089],{"class":90},[84,121788,121789],{"class":328},"        # 列出目录内容\n",[84,121791,121792,121794],{"class":86,"line":70},[84,121793,101602],{"class":94},[84,121795,121796],{"class":328},"        # 切换目录\n",[84,121798,121799,121802],{"class":86,"line":120},[84,121800,121801],{"class":94},"pwd",[84,121803,121804],{"class":328},"       # 显示当前路径\n",[84,121806,121807,121809],{"class":86,"line":131},[84,121808,101592],{"class":90},[84,121810,121811],{"class":328},"     # 创建目录\n",[84,121813,121814,121816],{"class":86,"line":145},[84,121815,25650],{"class":90},[84,121817,121818],{"class":328},"        # 删除文件或目录\n",[84,121820,121821,121824],{"class":86,"line":156},[84,121822,121823],{"class":90},"cp",[84,121825,121826],{"class":328},"        # 复制文件或目录\n",[84,121828,121829,121832],{"class":86,"line":164},[84,121830,121831],{"class":90},"mv",[84,121833,121834],{"class":328},"        # 移动\u002F重命名文件或目录\n",[84,121836,121837,121839],{"class":86,"line":175},[84,121838,101609],{"class":90},[84,121840,121841],{"class":328},"     # 创建空文件\n",[84,121843,121844,121846],{"class":86,"line":185},[84,121845,121089],{"class":90},[84,121847,121848],{"class":328},"       # 查看文件内容\n",[84,121850,121851,121854],{"class":86,"line":195},[84,121852,121853],{"class":90},"head\u002Ftail",[84,121855,121856],{"class":328}," # 查看文件头部\u002F尾部\n",[84,121858,121859],{"class":86,"line":206},[84,121860,2729],{"emptyLinePlaceholder":403},[84,121862,121863],{"class":86,"line":217},[84,121864,121865],{"class":328},"# 权限管理\n",[84,121867,121868,121870],{"class":86,"line":227},[84,121869,24940],{"class":90},[84,121871,121872],{"class":328},"     # 修改文件权限\n",[84,121874,121875,121878],{"class":86,"line":238},[84,121876,121877],{"class":90},"chown",[84,121879,121880],{"class":328},"     # 修改文件所有者\n",[84,121882,121883,121885],{"class":86,"line":249},[84,121884,24905],{"class":90},[84,121886,121887],{"class":328},"      # 以管理员身份执行\n",[84,121889,121890],{"class":86,"line":262},[84,121891,2729],{"emptyLinePlaceholder":403},[84,121893,121894],{"class":86,"line":273},[84,121895,121896],{"class":328},"# 系统信息\n",[84,121898,121899,121901],{"class":86,"line":283},[84,121900,70530],{"class":90},[84,121902,121903],{"class":328},"     # 系统信息\n",[84,121905,121906,121909],{"class":86,"line":294},[84,121907,121908],{"class":90},"df",[84,121910,121911],{"class":328},"        # 磁盘使用情况\n",[84,121913,121914,121917],{"class":86,"line":2028},[84,121915,121916],{"class":90},"free",[84,121918,121919],{"class":328},"      # 内存使用情况\n",[84,121921,121922,121925],{"class":86,"line":2057},[84,121923,121924],{"class":90},"top\u002Fhtop",[84,121926,121927],{"class":328},"  # 进程监控\n",[84,121929,121930,121933],{"class":86,"line":2062},[84,121931,121932],{"class":90},"ps",[84,121934,121935],{"class":328},"        # 查看进程\n",[84,121937,121938],{"class":86,"line":2079},[84,121939,2729],{"emptyLinePlaceholder":403},[84,121941,121942],{"class":86,"line":2084},[84,121943,121944],{"class":328},"# 网络\n",[84,121946,121947,121950],{"class":86,"line":2089},[84,121948,121949],{"class":90},"ping",[84,121951,121952],{"class":328},"      # 测试网络连通性\n",[84,121954,121955,121957],{"class":86,"line":2094},[84,121956,27177],{"class":90},[84,121958,121959],{"class":328},"      # 发送 HTTP 请求\n",[84,121961,121962,121964],{"class":86,"line":2108},[84,121963,120613],{"class":90},[84,121965,121966],{"class":328},"      # 下载文件\n",[84,121968,121969,121972],{"class":86,"line":2113},[84,121970,121971],{"class":90},"ssh",[84,121973,121974],{"class":328},"       # 远程登录\n",[84,121976,121977,121980],{"class":86,"line":2906},[84,121978,121979],{"class":90},"scp",[84,121981,121982],{"class":328},"       # 远程文件传输\n",[84,121984,121985],{"class":86,"line":2920},[84,121986,2729],{"emptyLinePlaceholder":403},[84,121988,121989],{"class":86,"line":2928},[84,121990,121991],{"class":328},"# 包管理（Debian\u002FUbuntu）\n",[84,121993,121994,121996,121998],{"class":86,"line":2933},[84,121995,117692],{"class":90},[84,121997,117671],{"class":104},[84,121999,122000],{"class":328},"   # 更新软件源\n",[84,122002,122003,122005,122007],{"class":86,"line":2939},[84,122004,117692],{"class":90},[84,122006,24163],{"class":104},[84,122008,122009],{"class":328},"  # 安装软件包\n",[84,122011,122012,122014,122016],{"class":86,"line":2945},[84,122013,117692],{"class":90},[84,122015,26407],{"class":104},[84,122017,122018],{"class":328},"   # 卸载软件包\n",[28,122020,122021],{"start":98},[31,122022,122023],{},"KDE Dolphin 以root打开",[35,122025,122026],{},"kde5",[75,122028,122030],{"className":77,"code":122029,"language":79,"meta":66,"style":66},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[81,122031,122032],{"__ignoreMap":66},[84,122033,122034,122037,122040,122043,122045,122047,122050,122053,122055,122058,122060],{"class":86,"line":87},[84,122035,122036],{"class":90},"pkexec",[84,122038,122039],{"class":104}," env",[84,122041,122042],{"class":104}," DISPLAY=",[84,122044,28470],{"class":477},[84,122046,28528],{"class":104},[84,122048,122049],{"class":477},"$XAUTHORITY ",[84,122051,122052],{"class":104},"KDE_SESSION_VERSION=",[84,122054,792],{"class":94},[84,122056,122057],{"class":104}," KDE_FULL_SESSION=",[84,122059,1703],{"class":94},[84,122061,122062],{"class":104}," dolphin\n",[35,122064,122065],{},"kde6",[75,122067,122069],{"className":77,"code":122068,"language":79,"meta":66,"style":66},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[81,122070,122071],{"__ignoreMap":66},[84,122072,122073,122075,122077,122079,122081,122083,122085,122087,122089,122091,122093],{"class":86,"line":87},[84,122074,122036],{"class":90},[84,122076,122039],{"class":104},[84,122078,122042],{"class":104},[84,122080,28470],{"class":477},[84,122082,28528],{"class":104},[84,122084,122049],{"class":477},[84,122086,122052],{"class":104},[84,122088,817],{"class":94},[84,122090,122057],{"class":104},[84,122092,1703],{"class":94},[84,122094,122062],{"class":104},[389,122096,122097],{},"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":66,"searchDepth":98,"depth":98,"links":122099},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121759,"description":400},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122106,"title":122107,"body":122108,"description":400,"extension":401,"meta":122122,"navigation":403,"path":122123,"seo":122124,"stem":122125,"__hash__":122126},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122109,"toc":122120},[122110,122113],[10,122111,122107],{"id":122112},"_5-各种环境配置",[35,122114,122115],{},[39,122116,122119],{"href":122117,"rel":122118},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[43],"电控组环境搭建大全",{"title":66,"searchDepth":98,"depth":98,"links":122121},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122107,"description":400},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":4,"title":5,"body":122128,"description":400,"extension":401,"meta":122403,"navigation":403,"path":404,"seo":122404,"stem":406,"__hash__":407},{"type":7,"value":122129,"toc":122395},[122130,122132,122134,122136,122138,122142,122147,122149,122386,122388,122393],[10,122131,5],{"id":12},[14,122133,17],{"id":16},[14,122135,21],{"id":20},[23,122137,26],{"id":25},[28,122139,122140],{},[31,122141,33],{},[35,122143,37,122144],{},[39,122145,41],{"href":41,"rel":122146},[43],[23,122148,47],{"id":46},[28,122150,122151],{},[31,122152,52,122153,56,122155,122158,122160,122162,122166,122328],{},[54,122154],{},[39,122156,59],{"href":59,"rel":122157},[43],[54,122159],{},[64,122161],{"alt":66,"src":67},[28,122163,122164],{"start":70},[31,122165,73],{},[75,122167,122168],{"className":77,"code":78,"language":79,"meta":66,"style":66},[81,122169,122170,122176,122184,122192,122200,122210,122218,122224,122232,122240,122248,122256,122264,122272,122280,122288,122298,122306,122314,122322],{"__ignoreMap":66},[84,122171,122172,122174],{"class":86,"line":87},[84,122173,91],{"class":90},[84,122175,95],{"class":94},[84,122177,122178,122180,122182],{"class":86,"line":98},[84,122179,101],{"class":94},[84,122181,105],{"class":104},[84,122183,95],{"class":94},[84,122185,122186,122188,122190],{"class":86,"line":70},[84,122187,112],{"class":94},[84,122189,115],{"class":104},[84,122191,95],{"class":94},[84,122193,122194,122196,122198],{"class":86,"line":120},[84,122195,123],{"class":94},[84,122197,126],{"class":104},[84,122199,95],{"class":94},[84,122201,122202,122204,122206,122208],{"class":86,"line":131},[84,122203,134],{"class":94},[84,122205,137],{"class":104},[84,122207,140],{"class":94},[84,122209,95],{"class":94},[84,122211,122212,122214,122216],{"class":86,"line":145},[84,122213,148],{"class":94},[84,122215,151],{"class":104},[84,122217,95],{"class":94},[84,122219,122220,122222],{"class":86,"line":156},[84,122221,159],{"class":94},[84,122223,95],{"class":94},[84,122225,122226,122228,122230],{"class":86,"line":164},[84,122227,167],{"class":94},[84,122229,170],{"class":104},[84,122231,95],{"class":94},[84,122233,122234,122236,122238],{"class":86,"line":175},[84,122235,167],{"class":94},[84,122237,180],{"class":104},[84,122239,95],{"class":94},[84,122241,122242,122244,122246],{"class":86,"line":185},[84,122243,167],{"class":94},[84,122245,190],{"class":104},[84,122247,95],{"class":94},[84,122249,122250,122252,122254],{"class":86,"line":195},[84,122251,198],{"class":94},[84,122253,201],{"class":104},[84,122255,95],{"class":94},[84,122257,122258,122260,122262],{"class":86,"line":206},[84,122259,209],{"class":94},[84,122261,212],{"class":104},[84,122263,95],{"class":94},[84,122265,122266,122268,122270],{"class":86,"line":217},[84,122267,209],{"class":94},[84,122269,222],{"class":104},[84,122271,95],{"class":94},[84,122273,122274,122276,122278],{"class":86,"line":227},[84,122275,230],{"class":94},[84,122277,233],{"class":104},[84,122279,95],{"class":94},[84,122281,122282,122284,122286],{"class":86,"line":238},[84,122283,241],{"class":94},[84,122285,244],{"class":104},[84,122287,95],{"class":94},[84,122289,122290,122292,122294,122296],{"class":86,"line":249},[84,122291,167],{"class":94},[84,122293,254],{"class":104},[84,122295,257],{"class":94},[84,122297,95],{"class":94},[84,122299,122300,122302,122304],{"class":86,"line":262},[84,122301,265],{"class":94},[84,122303,268],{"class":104},[84,122305,95],{"class":94},[84,122307,122308,122310,122312],{"class":86,"line":273},[84,122309,265],{"class":94},[84,122311,278],{"class":104},[84,122313,95],{"class":94},[84,122315,122316,122318,122320],{"class":86,"line":283},[84,122317,286],{"class":94},[84,122319,289],{"class":104},[84,122321,95],{"class":94},[84,122323,122324,122326],{"class":86,"line":294},[84,122325,297],{"class":94},[84,122327,300],{"class":104},[28,122329,122330],{"start":131},[31,122331,305,122332],{},[28,122333,122334,122336,122380],{},[31,122335,310],{},[31,122337,313,122338,122342],{},[28,122339,122340],{},[31,122341,318],{},[75,122343,122344],{"className":77,"code":321,"language":79,"meta":66,"style":66},[81,122345,122346,122350,122358,122362,122372,122376],{"__ignoreMap":66},[84,122347,122348],{"class":86,"line":87},[84,122349,329],{"class":328},[84,122351,122352,122354,122356],{"class":86,"line":98},[84,122353,334],{"class":90},[84,122355,337],{"class":104},[84,122357,340],{"class":94},[84,122359,122360],{"class":86,"line":70},[84,122361,345],{"class":328},[84,122363,122364,122366,122368,122370],{"class":86,"line":120},[84,122365,334],{"class":90},[84,122367,352],{"class":94},[84,122369,355],{"class":104},[84,122371,358],{"class":104},[84,122373,122374],{"class":86,"line":131},[84,122375,363],{"class":328},[84,122377,122378],{"class":86,"line":145},[84,122379,368],{"class":90},[31,122381,371,122382],{},[28,122383,122384],{},[31,122385,376],{},[14,122387,380],{"id":379},[35,122389,383,122390],{},[39,122391,386],{"href":386,"rel":122392},[43],[389,122394,391],{},{"title":66,"searchDepth":98,"depth":98,"links":122396},[122397,122398,122402],{"id":16,"depth":98,"text":17},{"id":20,"depth":98,"text":21,"children":122399},[122400,122401],{"id":25,"depth":70,"text":26},{"id":46,"depth":70,"text":47},{"id":379,"depth":98,"text":380},{},{"title":5,"description":400},{"id":122406,"title":122407,"body":122408,"description":400,"extension":401,"meta":125707,"navigation":403,"path":125708,"seo":125709,"stem":125710,"__hash__":125711},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122409,"toc":125681},[122410,122413,122417,122420,122427,122677,122680,122752,122755,122759,122763,122768,122771,122774,122777,122782,122785,122788,122791,122796,122799,122804,122807,122810,122815,122818,122823,122826,122830,122834,122837,122842,122845,122859,122862,122865,122874,122877,122886,122889,122892,122901,122904,122913,122916,122919,122928,122931,122934,122949,122952,122955,122964,122969,122972,122975,122984,122987,122996,122999,123008,123011,123020,123025,123028,123036,123041,123044,123053,123056,123064,123069,123072,123081,123084,123087,123091,123094,123099,123102,123107,123121,123126,123131,123142,123147,123153,123158,123173,123178,123181,123186,123191,123196,123204,123209,123216,123221,123232,123237,123240,123244,123247,123250,123255,123258,123277,123282,123285,123294,123299,123302,123324,123327,123357,123360,123365,123368,123382,123387,123406,123409,123412,123417,123429,123434,123439,123442,123447,123450,123465,123468,123473,123478,123482,123487,123527,123530,123534,123540,123546,123551,123554,123561,123566,123573,123576,123579,123586,123600,123603,123663,123666,123680,123692,123695,123698,123701,123765,123768,123771,123774,123794,123797,123802,123809,123813,123816,123820,123825,123830,123834,123837,123840,123882,123887,123890,123912,123927,123929,123934,123946,124006,124008,124010,124064,124066,124068,124074,124079,124082,124087,124091,124094,124156,124161,124164,124166,124170,124182,124264,124266,124268,124322,124328,124330,124334,124339,124341,124346,124350,124370,124405,124409,124412,124415,124418,124425,124428,124440,124443,124458,124461,124480,124528,124531,124548,124551,124565,124570,124573,124582,124597,124609,124647,124652,124661,124666,124671,124697,124706,124710,124714,124719,124722,124726,124730,124735,124738,124743,124746,124751,124754,124759,124762,124766,124771,124774,124779,124782,124786,124791,124794,124799,124802,124807,124810,124814,124819,124822,124827,124830,124835,124838,124842,124847,124850,124855,124858,124863,124866,124871,124874,124879,124882,124887,124890,124894,124899,124902,124907,124914,124918,124923,124926,124931,124934,124938,124943,124946,124949,124952,124955,124958,124962,124965,124975,124980,124985,125007,125012,125017,125024,125028,125033,125036,125039,125044,125047,125050,125053,125056,125059,125062,125065,125068,125071,125074,125077,125080,125085,125090,125095,125100,125105,125110,125115,125118,125122,125125,125129,125134,125139,125144,125149,125153,125159,125167,125172,125175,125180,125195,125198,125203,125237,125252,125255,125310,125336,125348,125351,125360,125363,125378,125383,125386,125392,125397,125400,125405,125408,125413,125418,125425,125428,125443,125446,125481,125486,125494,125532,125535,125538,125543,125546,125551,125562,125596,125601,125604,125613,125618,125624,125627,125632,125641,125646,125649,125652,125657,125665,125668,125673,125678],[10,122411,122407],{"id":122412},"_7-其他操作",[14,122414,122416],{"id":122415},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[35,122418,122419],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[35,122421,122422,122423,122426],{},"进入工控机的硬盘目录，进入",[81,122424,122425],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[75,122428,122432],{"className":122429,"code":122430,"language":122431,"meta":66,"style":66},"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",[81,122433,122434,122442,122453,122460,122467,122479,122486,122498,122509,122520,122527,122534,122541,122553,122565,122572,122584,122596,122603,122615,122627,122639,122650,122657,122668],{"__ignoreMap":66},[84,122435,122436,122439],{"class":86,"line":87},[84,122437,122438],{"class":51627},"network",[84,122440,122441],{"class":477},": \n",[84,122443,122444,122447,122449,122451],{"class":86,"line":98},[84,122445,122446],{"class":51627},"  version",[84,122448,51764],{"class":477},[84,122450,553],{"class":94},[84,122452,3003],{"class":477},[84,122454,122455,122458],{"class":86,"line":70},[84,122456,122457],{"class":51627},"  wifis",[84,122459,122441],{"class":477},[84,122461,122462,122465],{"class":86,"line":120},[84,122463,122464],{"class":51627},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[84,122466,122441],{"class":477},[84,122468,122469,122472,122474,122477],{"class":86,"line":131},[84,122470,122471],{"class":51627},"      renderer",[84,122473,51764],{"class":477},[84,122475,122476],{"class":104},"NetworkManager",[84,122478,3003],{"class":477},[84,122480,122481,122484],{"class":86,"line":145},[84,122482,122483],{"class":51627},"      match",[84,122485,122441],{"class":477},[84,122487,122488,122491,122493,122496],{"class":86,"line":156},[84,122489,122490],{"class":51627},"        name",[84,122492,51764],{"class":477},[84,122494,122495],{"class":104},"\"wlan0\"",[84,122497,3003],{"class":477},[84,122499,122500,122503,122505,122507],{"class":86,"line":164},[84,122501,122502],{"class":51627},"      dhcp4",[84,122504,51764],{"class":477},[84,122506,1703],{"class":94},[84,122508,3003],{"class":477},[84,122510,122511,122514,122516,122518],{"class":86,"line":175},[84,122512,122513],{"class":51627},"      dhcp6",[84,122515,51764],{"class":477},[84,122517,1703],{"class":94},[84,122519,3003],{"class":477},[84,122521,122522,122525],{"class":86,"line":185},[84,122523,122524],{"class":51627},"      access-points",[84,122526,122441],{"class":477},[84,122528,122529,122532],{"class":86,"line":195},[84,122530,122531],{"class":104},"        \"EMIS_Vinci_Robocon_5G\"",[84,122533,122441],{"class":477},[84,122535,122536,122539],{"class":86,"line":206},[84,122537,122538],{"class":51627},"          auth",[84,122540,122441],{"class":477},[84,122542,122543,122546,122548,122551],{"class":86,"line":217},[84,122544,122545],{"class":51627},"            key-management",[84,122547,51764],{"class":477},[84,122549,122550],{"class":104},"\"psk\"",[84,122552,3003],{"class":477},[84,122554,122555,122558,122560,122563],{"class":86,"line":227},[84,122556,122557],{"class":51627},"            password",[84,122559,51764],{"class":477},[84,122561,122562],{"class":104},"\"vinci666\"",[84,122564,3003],{"class":477},[84,122566,122567,122570],{"class":86,"line":238},[84,122568,122569],{"class":51627},"          networkmanager",[84,122571,122441],{"class":477},[84,122573,122574,122577,122579,122582],{"class":86,"line":249},[84,122575,122576],{"class":51627},"            uuid",[84,122578,51764],{"class":477},[84,122580,122581],{"class":104},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[84,122583,3003],{"class":477},[84,122585,122586,122589,122591,122594],{"class":86,"line":262},[84,122587,122588],{"class":51627},"            name",[84,122590,51764],{"class":477},[84,122592,122593],{"class":104},"\"EMIS_Vinci_Robocon_5G\"",[84,122595,3003],{"class":477},[84,122597,122598,122601],{"class":86,"line":273},[84,122599,122600],{"class":51627},"            passthrough",[84,122602,122441],{"class":477},[84,122604,122605,122608,122610,122613],{"class":86,"line":283},[84,122606,122607],{"class":51627},"              wifi-security.auth-alg",[84,122609,51764],{"class":477},[84,122611,122612],{"class":104},"\"open\"",[84,122614,3003],{"class":477},[84,122616,122617,122620,122622,122625],{"class":86,"line":294},[84,122618,122619],{"class":51627},"              ipv6.addr-gen-mode",[84,122621,51764],{"class":477},[84,122623,122624],{"class":104},"\"default\"",[84,122626,3003],{"class":477},[84,122628,122629,122632,122634,122637],{"class":86,"line":2028},[84,122630,122631],{"class":51627},"              ipv6.ip6-privacy",[84,122633,51764],{"class":477},[84,122635,122636],{"class":104},"\"-1\"",[84,122638,3003],{"class":477},[84,122640,122641,122644,122646,122648],{"class":86,"line":2057},[84,122642,122643],{"class":51627},"              proxy._",[84,122645,51764],{"class":477},[84,122647,7981],{"class":104},[84,122649,3003],{"class":477},[84,122651,122652,122655],{"class":86,"line":2062},[84,122653,122654],{"class":51627},"      networkmanager",[84,122656,122441],{"class":477},[84,122658,122659,122662,122664,122666],{"class":86,"line":2079},[84,122660,122661],{"class":51627},"        uuid",[84,122663,51764],{"class":477},[84,122665,122581],{"class":104},[84,122667,3003],{"class":477},[84,122669,122670,122672,122674],{"class":86,"line":2084},[84,122671,122490],{"class":51627},[84,122673,51764],{"class":477},[84,122675,122676],{"class":104},"\"EMIS_Vinci_Robocon_5G\"\n",[35,122678,122679],{},"将其改为新wifi的名和密码：",[75,122681,122683],{"className":122429,"code":122682,"language":122431,"meta":66,"style":66},"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",[81,122684,122685,122691,122700,122706,122713,122722,122730,122736,122742],{"__ignoreMap":66},[84,122686,122687,122689],{"class":86,"line":87},[84,122688,122438],{"class":51627},[84,122690,4068],{"class":477},[84,122692,122693,122695,122697],{"class":86,"line":98},[84,122694,122446],{"class":51627},[84,122696,51764],{"class":477},[84,122698,122699],{"class":94},"2\n",[84,122701,122702,122704],{"class":86,"line":70},[84,122703,122457],{"class":51627},[84,122705,4068],{"class":477},[84,122707,122708,122711],{"class":86,"line":120},[84,122709,122710],{"class":51627},"    wlan0",[84,122712,4068],{"class":477},[84,122714,122715,122717,122719],{"class":86,"line":131},[84,122716,122502],{"class":51627},[84,122718,51764],{"class":477},[84,122720,122721],{"class":94},"true\n",[84,122723,122724,122726,122728],{"class":86,"line":145},[84,122725,122513],{"class":51627},[84,122727,51764],{"class":477},[84,122729,122721],{"class":94},[84,122731,122732,122734],{"class":86,"line":156},[84,122733,122524],{"class":51627},[84,122735,4068],{"class":477},[84,122737,122738,122740],{"class":86,"line":164},[84,122739,122531],{"class":104},[84,122741,4068],{"class":477},[84,122743,122744,122747,122749],{"class":86,"line":175},[84,122745,122746],{"class":51627},"          password",[84,122748,51764],{"class":477},[84,122750,122751],{"class":104},"\"vinci666\"\n",[35,122753,122754],{},"工控机开机即可连上网。",[14,122756,122758],{"id":122757},"_72-ssh远程开发","7.2 SSH远程开发",[23,122760,122762],{"id":122761},"_721-环境准备","7.2.1 环境准备",[35,122764,122765],{},[624,122766,122767],{},"1.硬件准备",[35,122769,122770],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[35,122772,122773],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[35,122775,122776],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[35,122778,122779],{},[624,122780,122781],{},"2.设置固定IP",[35,122783,122784],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[35,122786,122787],{},"1.进入设置界面",[35,122789,122790],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[35,122792,122793],{},[64,122794],{"alt":66,"src":122795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[35,122797,122798],{},"2.配置所连接的网络",[35,122800,122801],{},[64,122802],{"alt":66,"src":122803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[35,122805,122806],{},"3.设置固定IP",[35,122808,122809],{},"查看当前IP地址。",[35,122811,122812],{},[64,122813],{"alt":66,"src":122814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[35,122816,122817],{},"设置固定IP。",[35,122819,122820],{},[64,122821],{"alt":66,"src":122822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[35,122824,122825],{},"至此，IP配置完毕。",[23,122827,122829],{"id":122828},"_722-环境搭建","7.2.2 环境搭建",[35,122831,122832],{},[624,122833,26081],{},[35,122835,122836],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[35,122838,122839],{},[624,122840,122841],{},"实现",[35,122843,122844],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[28,122846,122847,122850,122853,122856],{},[31,122848,122849],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[31,122851,122852],{},"远程主机启动SSH服务；",[31,122854,122855],{},"本地主机登陆远程主机；",[31,122857,122858],{},"实现数据传输。",[35,122860,122861],{},"1.安装SSH客户端与服务端",[35,122863,122864],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[75,122866,122868],{"className":121140,"code":122867,"language":121142,"meta":121143,"style":66}," sudo apt install openssh-server\n",[81,122869,122870],{"__ignoreMap":66},[84,122871,122872],{"class":86,"line":87},[84,122873,122867],{},[35,122875,122876],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[75,122878,122880],{"className":121140,"code":122879,"language":121142,"meta":121143,"style":66},"sudo apt install openssh-client\n",[81,122881,122882],{"__ignoreMap":66},[84,122883,122884],{"class":86,"line":87},[84,122885,122879],{},[35,122887,122888],{},"2.远程主机启动SSH服务",[35,122890,122891],{},"远程主机启动 ssh 服务命令如下：",[75,122893,122895],{"className":121140,"code":122894,"language":121142,"meta":121143,"style":66},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[81,122896,122897],{"__ignoreMap":66},[84,122898,122899],{"class":86,"line":87},[84,122900,122894],{},[35,122902,122903],{},"启动后可使用如下命令查看服务是否正常运行：",[75,122905,122907],{"className":121140,"code":122906,"language":121142,"meta":121143,"style":66},"ps -e | grep ssh\n",[81,122908,122909],{"__ignoreMap":66},[84,122910,122911],{"class":86,"line":87},[84,122912,122906],{},[35,122914,122915],{},"如果启动成功，会包含 sshd 程序。",[35,122917,122918],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[75,122920,122922],{"className":121140,"code":122921,"language":121142,"meta":121143,"style":66},"sudo systemctl enable ssh\n",[81,122923,122924],{"__ignoreMap":66},[84,122925,122926],{"class":86,"line":87},[84,122927,122921],{},[35,122929,122930],{},"3.本地远程登录",[35,122932,122933],{},"登录远程主机可以调用如下命令:",[75,122935,122937],{"className":77,"code":122936,"language":79,"meta":66,"style":66},"ssh -X 用户名@ip地址\n",[81,122938,122939],{"__ignoreMap":66},[84,122940,122941,122943,122946],{"class":86,"line":87},[84,122942,121971],{"class":90},[84,122944,122945],{"class":94}," -X",[84,122947,122948],{"class":104}," 用户名@ip地址\n",[35,122950,122951],{},"然后根据提示，录入登陆密码，即可成功登录。",[35,122953,122954],{},"如果退出，可以调用exit命令：",[75,122956,122958],{"className":121140,"code":122957,"language":121142,"meta":121143,"style":66},"exit\n",[81,122959,122960],{"__ignoreMap":66},[84,122961,122962],{"class":86,"line":87},[84,122963,122957],{},[35,122965,122966],{},[624,122967,122968],{},"4.实现数据传输",[35,122970,122971],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[35,122973,122974],{},"上传文件指令格式如下：",[75,122976,122978],{"className":121140,"code":122977,"language":121142,"meta":121143,"style":66},"scp 本地文件路径 账号@ip:路径\n",[81,122979,122980],{"__ignoreMap":66},[84,122981,122982],{"class":86,"line":87},[84,122983,122977],{},[35,122985,122986],{},"上传文件夹指令格式如下：",[75,122988,122990],{"className":121140,"code":122989,"language":121142,"meta":121143,"style":66},"scp -r 本地文件夹路径 账号@ip:路径\n",[81,122991,122992],{"__ignoreMap":66},[84,122993,122994],{"class":86,"line":87},[84,122995,122989],{},[35,122997,122998],{},"下载文件指令格式如下：",[75,123000,123002],{"className":121140,"code":123001,"language":121142,"meta":121143,"style":66},"scp 账号@ip:路径 本地文件夹路径\n",[81,123003,123004],{"__ignoreMap":66},[84,123005,123006],{"class":86,"line":87},[84,123007,123001],{},[35,123009,123010],{},"下载文件夹指令格式如下：",[75,123012,123014],{"className":121140,"code":123013,"language":121142,"meta":121143,"style":66},"scp -r 账号@ip:路径 本地文件夹路径\n",[81,123015,123016],{"__ignoreMap":66},[84,123017,123018],{"class":86,"line":87},[84,123019,123013],{},[35,123021,123022],{},[624,123023,123024],{},"优化",[35,123026,123027],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[28,123029,123030,123033],{},[31,123031,123032],{},"本地生成密钥对；",[31,123034,123035],{},"将公钥上传至远程主机。",[35,123037,123038],{},[624,123039,123040],{},"1.生成密钥对",[35,123042,123043],{},"本地客户端生成公私钥：（一路回车默认即可）",[75,123045,123047],{"className":121140,"code":123046,"language":121142,"meta":121143,"style":66},"ssh-keygen\n",[81,123048,123049],{"__ignoreMap":66},[84,123050,123051],{"class":86,"line":87},[84,123052,123046],{},[35,123054,123055],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[28,123057,123058,123061],{},[31,123059,123060],{},"id_rsa （私钥）；",[31,123062,123063],{},"id_rsa.pub (公钥)。",[35,123065,123066],{},[624,123067,123068],{},"2.公钥上传",[35,123070,123071],{},"上传指令如下：",[75,123073,123075],{"className":121140,"code":123074,"language":121142,"meta":121143,"style":66},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[81,123076,123077],{"__ignoreMap":66},[84,123078,123079],{"class":86,"line":87},[84,123080,123074],{},[35,123082,123083],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[35,123085,123086],{},"以后再远程登录就无需录入密码了。",[23,123088,123090],{"id":123089},"_723-使用vscode优化","7.2.3 使用VScode优化",[35,123092,123093],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[35,123095,123096],{},[624,123097,123098],{},"1.准备工作",[35,123100,123101],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[35,123103,123104],{},[624,123105,123106],{},"2.为VScode安装远程开发插件",[35,123108,123109,123110,123113,123114,123117,123118,28712],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[81,123111,123112],{},"扩展：商店","的搜索栏输入",[81,123115,123116],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[81,123119,123120],{},"安装",[35,123122,123123],{},[64,123124],{"alt":66,"src":123125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[35,123127,123128],{},[624,123129,123130],{},"3.配置远程连接",[35,123132,123133,123134,123137,123138,123141],{},"步骤1：使用快捷键",[81,123135,123136],{},"ctrl + shift + p","打开命令输入窗口，并输入",[81,123139,123140],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[35,123143,123144],{},[64,123145],{"alt":66,"src":123146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[35,123148,123149,123150,28712],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[81,123151,123152],{},"Add New SSH Host",[35,123154,123155],{},[64,123156],{"alt":66,"src":123157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[35,123159,123160,123161,123164,123165,123168,123169,123172],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[81,123162,123163],{},"ssh +X ubuntu@192.168.43.164","，其中，",[81,123166,123167],{},"ubuntu","需要替换为你的登录用户名，",[81,123170,123171],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[35,123174,123175],{},[64,123176],{"alt":66,"src":123177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[35,123179,123180],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[35,123182,123183],{},[64,123184],{"alt":66,"src":123185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[35,123187,123188],{},[64,123189],{"alt":66,"src":123190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[35,123192,123193],{},[624,123194,123195],{},"4.使用",[35,123197,123198,123199,123137,123201,123203],{},"步骤1：继续使用快捷键",[81,123200,123136],{},[81,123202,123140],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[35,123205,123206],{},[64,123207],{"alt":66,"src":123208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[35,123210,123211,123212,123215],{},"或者，也可以点击侧边栏的",[81,123213,123214],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[35,123217,123218],{},[64,123219],{"alt":66,"src":123220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[35,123222,123223,123224,123227,123228,123231],{},"步骤2：选择菜单栏的",[81,123225,123226],{},"文件","下的",[81,123229,123230],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[35,123233,123234],{},[64,123235],{"alt":66,"src":123236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[35,123238,123239],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123241,123243],{"id":123242},"_73-远程桌面","7.3 远程桌面",[35,123245,123246],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[35,123248,123249],{},"我们选择使用VNC来看。",[28,123251,123252],{},[31,123253,123254],{},"安装VNC服务器：",[35,123256,123257],{},"这里以TigerVNC为例进行安装：",[75,123259,123261],{"className":77,"code":123260,"language":79,"meta":66,"style":66},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[81,123262,123263],{"__ignoreMap":66},[84,123264,123265,123267,123269,123271,123274],{"class":86,"line":87},[84,123266,24905],{"class":90},[84,123268,117641],{"class":104},[84,123270,24163],{"class":104},[84,123272,123273],{"class":104}," tigervnc-standalone-server",[84,123275,123276],{"class":104}," tigervnc-common\n",[28,123278,123279],{"start":98},[31,123280,123281],{},"设置VNC密码：",[35,123283,123284],{},"为VNC用户设置密码，运行以下命令：",[75,123286,123288],{"className":77,"code":123287,"language":79,"meta":66,"style":66},"vncpasswd\n",[81,123289,123290],{"__ignoreMap":66},[84,123291,123292],{"class":86,"line":87},[84,123293,123287],{"class":90},[28,123295,123296],{"start":70},[31,123297,123298],{},"配置VNC启动脚本:",[35,123300,123301],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[75,123303,123305],{"className":77,"code":123304,"language":79,"meta":66,"style":66},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[81,123306,123307,123316],{"__ignoreMap":66},[84,123308,123309,123311,123313],{"class":86,"line":87},[84,123310,101592],{"class":90},[84,123312,29543],{"class":94},[84,123314,123315],{"class":104}," ~\u002F.vnc\n",[84,123317,123318,123321],{"class":86,"line":98},[84,123319,123320],{"class":90},"nano",[84,123322,123323],{"class":104}," ~\u002F.vnc\u002Fxstartup\n",[35,123325,123326],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[75,123328,123330],{"className":77,"code":123329,"language":79,"meta":66,"style":66},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[81,123331,123332,123337,123345,123352],{"__ignoreMap":66},[84,123333,123334],{"class":86,"line":87},[84,123335,123336],{"class":328},"#!\u002Fbin\u002Fsh\n",[84,123338,123339,123342],{"class":86,"line":98},[84,123340,123341],{"class":94},"unset",[84,123343,123344],{"class":104}," SESSION_MANAGER\n",[84,123346,123347,123349],{"class":86,"line":70},[84,123348,123341],{"class":94},[84,123350,123351],{"class":104}," DBUS_SESSION_BUS_ADDRESS\n",[84,123353,123354],{"class":86,"line":120},[84,123355,123356],{"class":90},"gnome-session\n",[35,123358,123359],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[28,123361,123362],{"start":120},[31,123363,123364],{},"给予执行权限：",[35,123366,123367],{},"为xstartup文件设置执行权限：",[75,123369,123371],{"className":77,"code":123370,"language":79,"meta":66,"style":66},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[81,123372,123373],{"__ignoreMap":66},[84,123374,123375,123377,123380],{"class":86,"line":87},[84,123376,24940],{"class":90},[84,123378,123379],{"class":104}," +x",[84,123381,123323],{"class":104},[28,123383,123384],{"start":131},[31,123385,123386],{},"启动VNC服务器：",[75,123388,123390],{"className":77,"code":123389,"language":79,"meta":66,"style":66},"vncserver -geometry 1920x1080 -localhost=0\n",[81,123391,123392],{"__ignoreMap":66},[84,123393,123394,123397,123400,123403],{"class":86,"line":87},[84,123395,123396],{"class":90},"vncserver",[84,123398,123399],{"class":94}," -geometry",[84,123401,123402],{"class":104}," 1920x1080",[84,123404,123405],{"class":94}," -localhost=0\n",[35,123407,123408],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[35,123410,123411],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[28,123413,123414],{"start":145},[31,123415,123416],{},"查看已开启的VNC服务器：",[75,123418,123420],{"className":77,"code":123419,"language":79,"meta":66,"style":66},"vncserver -list\n",[81,123421,123422],{"__ignoreMap":66},[84,123423,123424,123426],{"class":86,"line":87},[84,123425,123396],{"class":90},[84,123427,123428],{"class":94}," -list\n",[35,123430,123431],{},[64,123432],{"alt":66,"src":123433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[28,123435,123436],{"start":156},[31,123437,123438],{},"连接到VNC服务器：",[35,123440,123441],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[28,123443,123444],{"start":164},[31,123445,123446],{},"停止VNC服务器：",[35,123448,123449],{},"如果需要停止VNC服务器，可以使用以下命令：",[75,123451,123453],{"className":77,"code":123452,"language":79,"meta":66,"style":66},"vncserver -kill :1\n",[81,123454,123455],{"__ignoreMap":66},[84,123456,123457,123459,123462],{"class":86,"line":87},[84,123458,123396],{"class":90},[84,123460,123461],{"class":94}," -kill",[84,123463,123464],{"class":104}," :1\n",[35,123466,123467],{},"将:1替换为你实际使用的显示编号。",[35,123469,123470],{},[64,123471],{"alt":66,"src":123472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[35,123474,123475],{},[64,123476],{"alt":66,"src":123477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123479,123481],{"id":123480},"_74-usb端口设置","7.4 USB端口设置",[35,123483,123484],{},[624,123485,123486],{},"首先先配置好权限",[75,123488,123490],{"className":77,"code":123489,"language":79,"meta":66,"style":66},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[81,123491,123492,123497,123510,123517,123522],{"__ignoreMap":66},[84,123493,123494],{"class":86,"line":87},[84,123495,123496],{"class":328},"# 将用户权限提高\n",[84,123498,123499,123501,123503,123505,123508],{"class":86,"line":98},[84,123500,24905],{"class":90},[84,123502,26902],{"class":104},[84,123504,26905],{"class":94},[84,123506,123507],{"class":104}," dialout",[84,123509,26910],{"class":477},[84,123511,123512,123514],{"class":86,"line":70},[84,123513,26929],{"class":90},[84,123515,123516],{"class":104}," dialout\n",[84,123518,123519],{"class":86,"line":120},[84,123520,123521],{"class":328},"# 查看下面命令是否输出dialout（若输出才正常）\n",[84,123523,123524],{"class":86,"line":131},[84,123525,123526],{"class":90},"groups\n",[35,123528,123529],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[23,123531,123533],{"id":123532},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[35,123535,123536,123539],{},[624,123537,123538],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[35,123541,123542,123545],{},[624,123543,123544],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[35,123547,123548],{},[624,123549,123550],{},"流程如下：",[35,123552,123553],{},"（1）.查找设备idVendor和idProduct",[35,123555,123556,123557,123560],{},"接入两个USB设备，在终端调用指令",[81,123558,123559],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[35,123562,123563],{},[64,123564],{"alt":66,"src":123565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[35,123567,123568,123569,123572],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[81,123570,123571],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[35,123574,123575],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[35,123577,123578],{},"（2）.编写映射规则",[35,123580,123581,123582,123585],{},"在",[81,123583,123584],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[75,123587,123589],{"className":77,"code":123588,"language":79,"meta":66,"style":66},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[81,123590,123591],{"__ignoreMap":66},[84,123592,123593,123595,123597],{"class":86,"line":87},[84,123594,24905],{"class":90},[84,123596,118907],{"class":104},[84,123598,123599],{"class":104}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[35,123601,123602],{},"输入如下内容：",[75,123604,123606],{"className":77,"code":123605,"language":79,"meta":66,"style":66},"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",[81,123607,123608,123638],{"__ignoreMap":66},[84,123609,123610,123613,123615,123618,123621,123624,123627,123629,123632,123635],{"class":86,"line":87},[84,123611,123612],{"class":477},"KERNEL",[84,123614,523],{"class":473},[84,123616,123617],{"class":104},"=\"ttyUSB*\",",[84,123619,123620],{"class":90}," ATTRS",[84,123622,123623],{"class":104},"{idVendor}==",[84,123625,123626],{"class":90},"\"10c4\"",[84,123628,851],{"class":90},[84,123630,123631],{"class":104}," ATTRS{idProduct}==\"ea60\",",[84,123633,123634],{"class":104}," MODE:=\"0777\",",[84,123636,123637],{"class":104}," SYMLINK+=\"mylidar\"\n",[84,123639,123640,123642,123644,123646,123648,123650,123653,123655,123658,123660],{"class":86,"line":98},[84,123641,123612],{"class":477},[84,123643,523],{"class":473},[84,123645,123617],{"class":104},[84,123647,123620],{"class":90},[84,123649,123623],{"class":104},[84,123651,123652],{"class":90},"\"1a86\"",[84,123654,851],{"class":90},[84,123656,123657],{"class":104}," ATTRS{idProduct}==\"7523\",",[84,123659,123634],{"class":104},[84,123661,123662],{"class":104}," SYMLINK+=\"mycar\"\n",[35,123664,123665],{},"代码解释：",[1480,123667,123668,123671,123674,123677],{},[31,123669,123670],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[31,123672,123673],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[31,123675,123676],{},"SYMLINK是符号连接，即绑定的别名；",[31,123678,123679],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[35,123681,123682,123683,123686,123689],{},"***小提示：***",[23882,123684,123685],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[81,123687,123688],{},"\u002Fetc\u002Fudev\u002Frule.d",[23882,123690,123691],{},"目录即可。",[35,123693,123694],{},"表格 还在加载中，请等待加载完成后再尝试复制",[35,123696,123697],{},"（3）.使规则生效",[35,123699,123700],{},"在终端下输入如下指令：",[75,123702,123704],{"className":77,"code":123703,"language":79,"meta":66,"style":66},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[81,123705,123706,123711,123723,123734,123738,123743,123756],{"__ignoreMap":66},[84,123707,123708],{"class":86,"line":87},[84,123709,123710],{"class":328},"# Ubuntu用下方命令\n",[84,123712,123713,123715,123717,123720],{"class":86,"line":98},[84,123714,24905],{"class":90},[84,123716,120372],{"class":104},[84,123718,123719],{"class":104}," udev",[84,123721,123722],{"class":104}," reload\n",[84,123724,123725,123727,123729,123731],{"class":86,"line":70},[84,123726,24905],{"class":90},[84,123728,120372],{"class":104},[84,123730,123719],{"class":104},[84,123732,123733],{"class":104}," restart\n",[84,123735,123736],{"class":86,"line":120},[84,123737,2729],{"emptyLinePlaceholder":403},[84,123739,123740],{"class":86,"line":131},[84,123741,123742],{"class":328},"#Fedora用下方命令\n",[84,123744,123745,123747,123750,123753],{"class":86,"line":145},[84,123746,24905],{"class":90},[84,123748,123749],{"class":104}," udevadm",[84,123751,123752],{"class":104}," control",[84,123754,123755],{"class":94}," --reload\n",[84,123757,123758,123760,123762],{"class":86,"line":156},[84,123759,24905],{"class":90},[84,123761,123749],{"class":104},[84,123763,123764],{"class":104}," trigger\n",[35,123766,123767],{},"再重新插拔设备即可。",[35,123769,123770],{},"（4）.测试",[35,123772,123773],{},"终端下输入如下指令",[75,123775,123777],{"className":77,"code":123776,"language":79,"meta":66,"style":66},"ll \u002Fdev | grep ttyUSB\n",[81,123778,123779],{"__ignoreMap":66},[84,123780,123781,123784,123787,123789,123791],{"class":86,"line":87},[84,123782,123783],{"class":90},"ll",[84,123785,123786],{"class":104}," \u002Fdev",[84,123788,25437],{"class":473},[84,123790,30563],{"class":90},[84,123792,123793],{"class":104}," ttyUSB\n",[35,123795,123796],{},"运行结果如下：",[35,123798,123799],{},[64,123800],{"alt":66,"src":123801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[35,123803,123804,123805,123808],{},"也可以多次插拔USB设备，会发现设备端口",[81,123806,123807],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[35,123810,123811],{},[624,123812,118288],{},[35,123814,123815],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[23,123817,123819],{"id":123818},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[35,123821,123822,123824],{},[624,123823,123538],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[35,123826,123827,123829],{},[624,123828,123544],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[35,123831,123832],{},[624,123833,123550],{},[35,123835,123836],{},"（1）.查看所连接的主机USB接口的KERNELS",[35,123838,123839],{},"调用如下指令查看第一台雷达的USB信息：",[75,123841,123843],{"className":77,"code":123842,"language":79,"meta":66,"style":66},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[81,123844,123845,123865],{"__ignoreMap":66},[84,123846,123847,123850,123852,123855,123858,123860,123862],{"class":86,"line":87},[84,123848,123849],{"class":90},"udevadm",[84,123851,70147],{"class":104},[84,123853,123854],{"class":94}," --attribute-walk",[84,123856,123857],{"class":94}," --name=\u002Fdev\u002FttyUSB0",[84,123859,25437],{"class":473},[84,123861,30563],{"class":90},[84,123863,123864],{"class":104}," KERNELS\n",[84,123866,123867,123869,123871,123873,123876,123878,123880],{"class":86,"line":98},[84,123868,123849],{"class":90},[84,123870,70147],{"class":104},[84,123872,123854],{"class":94},[84,123874,123875],{"class":94}," --name=\u002Fdev\u002FttyACM0",[84,123877,25437],{"class":473},[84,123879,30563],{"class":90},[84,123881,123864],{"class":104},[35,123883,123884],{},[64,123885],{"alt":66,"src":123886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[35,123888,123889],{},"调用如下指令查看第二台雷达的USB信息：",[75,123891,123893],{"className":77,"code":123892,"language":79,"meta":66,"style":66},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[81,123894,123895],{"__ignoreMap":66},[84,123896,123897,123899,123901,123903,123906,123908,123910],{"class":86,"line":87},[84,123898,123849],{"class":90},[84,123900,70147],{"class":104},[84,123902,123854],{"class":94},[84,123904,123905],{"class":94}," --name=\u002Fdev\u002FttyUSB1",[84,123907,25437],{"class":473},[84,123909,30563],{"class":90},[84,123911,123864],{"class":104},[35,123913,123914,123915,123918,123919,123922,123923,123926],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[81,123916,123917],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[81,123920,123921],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[624,123924,123925],{},"唯一性标识","”。",[35,123928,123578],{},[35,123930,123581,123931,123933],{},[81,123932,123584],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[75,123935,123936],{"className":77,"code":123588,"language":79,"meta":66,"style":66},[81,123937,123938],{"__ignoreMap":66},[84,123939,123940,123942,123944],{"class":86,"line":87},[84,123941,24905],{"class":90},[84,123943,118907],{"class":104},[84,123945,123599],{"class":104},[75,123947,123949],{"className":77,"code":123948,"language":79,"meta":66,"style":66},"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",[81,123950,123951,123980],{"__ignoreMap":66},[84,123952,123953,123955,123957,123959,123962,123964,123967,123970,123972,123975,123977],{"class":86,"line":87},[84,123954,123612],{"class":477},[84,123956,523],{"class":473},[84,123958,123617],{"class":104},[84,123960,123961],{"class":477}," KERNELS",[84,123963,523],{"class":473},[84,123965,123966],{"class":104},"=\"1-1.3:1.0\",",[84,123968,123969],{"class":90}," MODE:",[84,123971,523],{"class":104},[84,123973,123974],{"class":90},"\"0777\"",[84,123976,851],{"class":90},[84,123978,123979],{"class":104}," SYMLINK+=\"rplidar_front\"\n",[84,123981,123982,123984,123986,123988,123990,123992,123995,123997,123999,124001,124003],{"class":86,"line":98},[84,123983,123612],{"class":477},[84,123985,523],{"class":473},[84,123987,123617],{"class":104},[84,123989,123961],{"class":477},[84,123991,523],{"class":473},[84,123993,123994],{"class":104},"=\"1-1.4:1.0\",",[84,123996,123969],{"class":90},[84,123998,523],{"class":104},[84,124000,123974],{"class":90},[84,124002,851],{"class":90},[84,124004,124005],{"class":104}," SYMLINK+=\"rplidar_back\"\n",[35,124007,123697],{},[35,124009,123700],{},[75,124011,124012],{"className":77,"code":123703,"language":79,"meta":66,"style":66},[81,124013,124014,124018,124028,124038,124042,124046,124056],{"__ignoreMap":66},[84,124015,124016],{"class":86,"line":87},[84,124017,123710],{"class":328},[84,124019,124020,124022,124024,124026],{"class":86,"line":98},[84,124021,24905],{"class":90},[84,124023,120372],{"class":104},[84,124025,123719],{"class":104},[84,124027,123722],{"class":104},[84,124029,124030,124032,124034,124036],{"class":86,"line":70},[84,124031,24905],{"class":90},[84,124033,120372],{"class":104},[84,124035,123719],{"class":104},[84,124037,123733],{"class":104},[84,124039,124040],{"class":86,"line":120},[84,124041,2729],{"emptyLinePlaceholder":403},[84,124043,124044],{"class":86,"line":131},[84,124045,123742],{"class":328},[84,124047,124048,124050,124052,124054],{"class":86,"line":145},[84,124049,24905],{"class":90},[84,124051,123749],{"class":104},[84,124053,123752],{"class":104},[84,124055,123755],{"class":94},[84,124057,124058,124060,124062],{"class":86,"line":156},[84,124059,24905],{"class":90},[84,124061,123749],{"class":104},[84,124063,123764],{"class":104},[35,124065,123767],{},[35,124067,123770],{},[35,124069,123773,124070,124073],{},[81,124071,124072],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[35,124075,124076],{},[64,124077],{"alt":66,"src":124078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[35,124080,124081],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[35,124083,124084,124086],{},[624,124085,118288],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[23,124088,124090],{"id":124089},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[35,124092,124093],{},"（1）.查看所连接的主机USB接口的信息",[75,124095,124097],{"className":77,"code":124096,"language":79,"meta":66,"style":66},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[81,124098,124099,124129],{"__ignoreMap":66},[84,124100,124101,124103,124105,124108,124110,124112,124114,124116,124119,124122,124124,124127],{"class":86,"line":87},[84,124102,123849],{"class":90},[84,124104,70147],{"class":104},[84,124106,124107],{"class":94}," -a",[84,124109,29543],{"class":94},[84,124111,28749],{"class":477},[84,124113,123849],{"class":90},[84,124115,70147],{"class":104},[84,124117,124118],{"class":94}," -q",[84,124120,124121],{"class":104}," path",[84,124123,25443],{"class":94},[84,124125,124126],{"class":104}," \u002Fdev\u002FttyACM0",[84,124128,484],{"class":477},[84,124130,124131,124133,124135,124137,124139,124141,124143,124145,124147,124149,124151,124154],{"class":86,"line":98},[84,124132,123849],{"class":90},[84,124134,70147],{"class":104},[84,124136,124107],{"class":94},[84,124138,29543],{"class":94},[84,124140,28749],{"class":477},[84,124142,123849],{"class":90},[84,124144,70147],{"class":104},[84,124146,124118],{"class":94},[84,124148,124121],{"class":104},[84,124150,25443],{"class":94},[84,124152,124153],{"class":104}," \u002Fdev\u002FttyUSB0",[84,124155,484],{"class":477},[35,124157,124158],{},[64,124159],{"alt":66,"src":124160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[35,124162,124163],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[35,124165,123578],{},[35,124167,123581,124168,123933],{},[81,124169,123584],{},[75,124171,124172],{"className":77,"code":123588,"language":79,"meta":66,"style":66},[81,124173,124174],{"__ignoreMap":66},[84,124175,124176,124178,124180],{"class":86,"line":87},[84,124177,24905],{"class":90},[84,124179,118907],{"class":104},[84,124181,123599],{"class":104},[75,124183,124185],{"className":77,"code":124184,"language":79,"meta":66,"style":66},"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",[81,124186,124187,124215,124241],{"__ignoreMap":66},[84,124188,124189,124191,124193,124196,124198,124200,124202,124204,124207,124210,124212],{"class":86,"line":87},[84,124190,123612],{"class":477},[84,124192,523],{"class":473},[84,124194,124195],{"class":104},"=\"ttyACM*\",",[84,124197,123620],{"class":90},[84,124199,123623],{"class":104},[84,124201,123652],{"class":90},[84,124203,851],{"class":90},[84,124205,124206],{"class":104}," ATTRS{idProduct}==\"55d4\",",[84,124208,124209],{"class":104}," ATTRS{serial}==\"0001\",",[84,124211,123634],{"class":104},[84,124213,124214],{"class":104}," SYMLINK+=\"ttyACM_MCU\"\n",[84,124216,124217,124219,124221,124223,124225,124227,124229,124231,124233,124236,124238],{"class":86,"line":98},[84,124218,123612],{"class":477},[84,124220,523],{"class":473},[84,124222,124195],{"class":104},[84,124224,123620],{"class":90},[84,124226,123623],{"class":104},[84,124228,123652],{"class":90},[84,124230,851],{"class":90},[84,124232,124206],{"class":104},[84,124234,124235],{"class":104}," ATTRS{serial}==\"0002\",",[84,124237,123634],{"class":104},[84,124239,124240],{"class":104}," SYMLINK+=\"ttyACM_Lidar\"\n",[84,124242,124243,124245,124247,124249,124251,124253,124255,124257,124259,124261],{"class":86,"line":70},[84,124244,123612],{"class":477},[84,124246,523],{"class":473},[84,124248,123617],{"class":104},[84,124250,123620],{"class":90},[84,124252,123623],{"class":104},[84,124254,123652],{"class":90},[84,124256,851],{"class":90},[84,124258,123657],{"class":104},[84,124260,123634],{"class":104},[84,124262,124263],{"class":104}," SYMLINK+=\"ttyUSB_IMU\"\n",[35,124265,123697],{},[35,124267,123700],{},[75,124269,124270],{"className":77,"code":123703,"language":79,"meta":66,"style":66},[81,124271,124272,124276,124286,124296,124300,124304,124314],{"__ignoreMap":66},[84,124273,124274],{"class":86,"line":87},[84,124275,123710],{"class":328},[84,124277,124278,124280,124282,124284],{"class":86,"line":98},[84,124279,24905],{"class":90},[84,124281,120372],{"class":104},[84,124283,123719],{"class":104},[84,124285,123722],{"class":104},[84,124287,124288,124290,124292,124294],{"class":86,"line":70},[84,124289,24905],{"class":90},[84,124291,120372],{"class":104},[84,124293,123719],{"class":104},[84,124295,123733],{"class":104},[84,124297,124298],{"class":86,"line":120},[84,124299,2729],{"emptyLinePlaceholder":403},[84,124301,124302],{"class":86,"line":131},[84,124303,123742],{"class":328},[84,124305,124306,124308,124310,124312],{"class":86,"line":145},[84,124307,24905],{"class":90},[84,124309,123749],{"class":104},[84,124311,123752],{"class":104},[84,124313,123755],{"class":94},[84,124315,124316,124318,124320],{"class":86,"line":156},[84,124317,24905],{"class":90},[84,124319,123749],{"class":104},[84,124321,123764],{"class":104},[35,124323,124324,124325],{},"再重新插拔设备即可，或者 ",[624,124326,124327],{},"直接重启系统。",[35,124329,123770],{},[35,124331,123773,124332,124073],{},[81,124333,124072],{},[35,124335,124336],{},[64,124337],{"alt":66,"src":124338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[35,124340,124081],{},[35,124342,124343,124345],{},[624,124344,118288],{}," 一些设备可能没有串口号等。",[23,124347,124349],{"id":124348},"_744-其他注意事项","7.4.4 其他注意事项",[35,124351,124352,124353,124355,124356,124359,124360,18739,124363,124366,124367,124369],{},"并非所有的USB设备端口号都是",[81,124354,123807],{},"的格式，比如Arduino的端口号可能是",[81,124357,124358],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[81,124361,124362],{},"videon",[81,124364,124365],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[81,124368,124362],{},"端口，绑定时需要关联的也是该接口。",[35,124371,124372,124373,124376,124377,124380,124381,124383,124384,124387,124388,124391,124392,124395,124396,124395,124399,124395,124402,28712],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[81,124374,124375],{},"KERNEL==\"ttyUSB*\"","修改为",[81,124378,124379],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[81,124382,124375],{},"修改为类似于",[81,124385,124386],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[81,124389,124390],{},"video[0,2,4,6]","表示可以绑定的端口为",[81,124393,124394],{},"video0","或",[81,124397,124398],{},"video2",[81,124400,124401],{},"video4",[81,124403,124404],{},"video6",[14,124406,124408],{"id":124407},"_75-挂载内网网页","7.5 挂载内网网页",[35,124410,124411],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[35,124413,124414],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[35,124416,124417],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[35,124419,124420,124421],{},"Termux 下载地址（F-Droid）：",[39,124422,124423],{"href":124423,"rel":124424},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[43],[35,124426,124427],{},"首先打开app后，先更新软件缓存：",[75,124429,124431],{"className":77,"code":124430,"language":79,"meta":66,"style":66},"pkg update\n",[81,124432,124433],{"__ignoreMap":66},[84,124434,124435,124438],{"class":86,"line":87},[84,124436,124437],{"class":90},"pkg",[84,124439,26570],{"class":104},[35,124441,124442],{},"然后换源",[75,124444,124446],{"className":77,"code":124445,"language":79,"meta":66,"style":66},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[81,124447,124448],{"__ignoreMap":66},[84,124449,124450,124452,124455],{"class":86,"line":87},[84,124451,123320],{"class":90},[84,124453,124454],{"class":477}," $PREFIX",[84,124456,124457],{"class":104},"\u002Fetc\u002Fapt\u002Fsources.list\n",[35,124459,124460],{},"将该文件内容替换为下面：",[75,124462,124464],{"className":77,"code":124463,"language":79,"meta":66,"style":66},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[81,124465,124466],{"__ignoreMap":66},[84,124467,124468,124471,124474,124477],{"class":86,"line":87},[84,124469,124470],{"class":90},"deb",[84,124472,124473],{"class":104}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[84,124475,124476],{"class":104}," stable",[84,124478,124479],{"class":104}," main\n",[1480,124481,124482,124509],{},[31,124483,124484,124485,124487,124488],{},"如果你使用的是",[81,124486,123320],{},"编辑器：",[1480,124489,124490,124497,124503],{},[31,124491,124492,124493,124496],{},"按 ",[81,124494,124495],{},"Ctrl+O"," 保存文件。",[31,124498,124492,124499,124502],{},[81,124500,124501],{},"Enter"," 确认文件名。",[31,124504,124492,124505,124508],{},[81,124506,124507],{},"Ctrl+X"," 退出编辑器。",[31,124510,124484,124511,124487,124514],{},[81,124512,124513],{},"vim",[1480,124515,124516,124522],{},[31,124517,124492,124518,124521],{},[81,124519,124520],{},"Esc"," 退出编辑模式。",[31,124523,124524,124525,124527],{},"输入 ",[81,124526,119545],{}," 保存并退出。",[35,124529,124530],{},"接下来重新更新软件源：",[75,124532,124534],{"className":77,"code":124533,"language":79,"meta":66,"style":66},"pkg update && pkg upgrade\n",[81,124535,124536],{"__ignoreMap":66},[84,124537,124538,124540,124542,124544,124546],{"class":86,"line":87},[84,124539,124437],{"class":90},[84,124541,117671],{"class":104},[84,124543,26518],{"class":477},[84,124545,124437],{"class":90},[84,124547,117657],{"class":104},[35,124549,124550],{},"安装python：",[75,124552,124554],{"className":77,"code":124553,"language":79,"meta":66,"style":66},"pkg install python\n",[81,124555,124556],{"__ignoreMap":66},[84,124557,124558,124560,124562],{"class":86,"line":87},[84,124559,124437],{"class":90},[84,124561,24163],{"class":104},[84,124563,124564],{"class":104}," python\n",[35,124566,124567,26801],{},[624,124568,124569],{},"通过Termux访问设备存储",[35,124571,124572],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[75,124574,124576],{"className":77,"code":124575,"language":79,"meta":66,"style":66},"termux-setup-storage\n",[81,124577,124578],{"__ignoreMap":66},[84,124579,124580],{"class":86,"line":87},[84,124581,124575],{"class":90},[28,124583,124584],{},[31,124585,124586,26801,124589],{},[624,124587,124588],{},"进入HTML文件所在的目录",[28,124590,124591],{},[31,124592,124593,124594,124596],{},"使用",[81,124595,101602],{},"命令进入HTML文件所在的目录：",[75,124598,124600],{"className":77,"code":124599,"language":79,"meta":66,"style":66},"cd ~\u002Fyour_html_folder\n",[81,124601,124602],{"__ignoreMap":66},[84,124603,124604,124606],{"class":86,"line":87},[84,124605,101602],{"class":94},[84,124607,124608],{"class":104}," ~\u002Fyour_html_folder\n",[28,124610,124611],{"start":98},[31,124612,124613,26801,124616,124621,124638],{},[624,124614,124615],{},"启动Python HTTP服务器",[28,124617,124618],{},[31,124619,124620],{},"运行以下命令启动一个简单的HTTP服务器：",[75,124622,124624],{"className":77,"code":124623,"language":79,"meta":66,"style":66},"python -m http.server 8000\n",[81,124625,124626],{"__ignoreMap":66},[84,124627,124628,124630,124632,124635],{"class":86,"line":87},[84,124629,30707],{"class":90},[84,124631,101208],{"class":94},[84,124633,124634],{"class":104}," http.server",[84,124636,124637],{"class":94}," 8000\n",[28,124639,124640],{"start":70},[31,124641,124642,124643,124646],{},"这会在端口",[81,124644,124645],{},"8000","上启动一个Web服务器。",[1480,124648,124649],{},[31,124650,124651],{},"启动服务器后，Termux会显示日志信息，例如：",[75,124653,124655],{"className":121140,"code":124654,"language":121142,"meta":121143,"style":66},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[81,124656,124657],{"__ignoreMap":66},[84,124658,124659],{"class":86,"line":87},[84,124660,124654],{},[1480,124662,124663],{},[31,124664,124665],{},"这表示服务器已成功启动。",[35,124667,124668],{},[624,124669,124670],{},"在浏览器中访问HTML文件",[28,124672,124673],{},[31,124674,124675,26801,124678,124683],{},[624,124676,124677],{},"在同一设备上访问",[28,124679,124680],{},[31,124681,124682],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[75,124684,124687],{"className":124685,"code":124686,"language":71990,"meta":66,"style":66},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[81,124688,124689],{"__ignoreMap":66},[84,124690,124691,124694],{"class":86,"line":87},[84,124692,124693],{"class":477},"http:",[84,124695,124696],{"class":328},"\u002F\u002Flocalhost:8000\n",[1480,124698,124699],{},[31,124700,124701,124702,124705],{},"如果HTML文件中有",[81,124703,124704],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124707,124709],{"id":124708},"_76-linux重点知识","7.6 Linux重点知识",[23,124711,124713],{"id":124712},"_761-关于点的说明","7.6.1 关于点的说明",[35,124715,124716],{},[64,124717],{"alt":66,"src":124718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[35,124720,124721],{},"一点本目录，两点上目录",[23,124723,124725],{"id":124724},"_762-目录","7.6.2 目录",[22327,124727,124729],{"id":124728},"_7621-系统启动必须","7.6.2.1 系统启动必须",[35,124731,124732],{},[624,124733,124734],{},"\u002Fboot:",[35,124736,124737],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[35,124739,124740],{},[624,124741,124742],{},"\u002Fetc:",[35,124744,124745],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[35,124747,124748],{},[624,124749,124750],{},"\u002Flib：",[35,124752,124753],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[35,124755,124756],{},[624,124757,124758],{},"\u002Fsys:",[35,124760,124761],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22327,124763,124765],{"id":124764},"_7622-指令集合","7.6.2.2 指令集合",[35,124767,124768],{},[624,124769,124770],{},"\u002Fbin:",[35,124772,124773],{},"为二进制文件的缩写，存放最经常使用的命令",[35,124775,124776],{},[624,124777,124778],{},"\u002Fsbin:",[35,124780,124781],{},"只有系统管理员才能使用的程序和指令",[22327,124783,124785],{"id":124784},"_7623-外部文件管理","7.6.2.3 外部文件管理",[35,124787,124788],{},[624,124789,124790],{},"\u002Fdev:",[35,124792,124793],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[35,124795,124796],{},[624,124797,124798],{},"\u002Fmedia:",[35,124800,124801],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[35,124803,124804],{},[624,124805,124806],{},"\u002Fmnt:",[35,124808,124809],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22327,124811,124813],{"id":124812},"_7624-临时文件","7.6.2.4 临时文件",[35,124815,124816],{},[624,124817,124818],{},"\u002Frun:",[35,124820,124821],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[35,124823,124824],{},[624,124825,124826],{},"\u002Flost+found:",[35,124828,124829],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[35,124831,124832],{},[624,124833,124834],{},"\u002Ftmp:",[35,124836,124837],{},"这个目录是用来存放一些临时文件的",[22327,124839,124841],{"id":124840},"_7625-账户","7.6.2.5 账户",[35,124843,124844],{},[624,124845,124846],{},"\u002Froot：",[35,124848,124849],{},"系统管理员的用户主目录",[35,124851,124852,26801],{},[624,124853,124854],{},"\u002Fhome",[35,124856,124857],{},"用户的主目录，以用户的账号命名的",[35,124859,124860,26801],{},[624,124861,124862],{},"\u002Fusr",[35,124864,124865],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[35,124867,124868],{},[624,124869,124870],{},"\u002Fusr\u002Fbin：",[35,124872,124873],{},"系统用户使用的应用程序与指令",[35,124875,124876],{},[624,124877,124878],{},"\u002Fusr\u002Fsbin：",[35,124880,124881],{},"超级用户使用的比较高级的管理程序和系统守护程序",[35,124883,124884],{},[624,124885,124886],{},"\u002Fusr\u002Fsrc：",[35,124888,124889],{},"内核源代码默认的放置目录",[22327,124891,124893],{"id":124892},"_7626-运行过程要用","7.6.2.6 运行过程要用",[35,124895,124896],{},[624,124897,124898],{},"\u002Fvar：",[35,124900,124901],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[35,124903,124904],{},[624,124905,124906],{},"\u002Fproc:",[35,124908,124909,124910,124913],{},"管理 ",[624,124911,124912],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22327,124915,124917],{"id":124916},"_7627-扩展用的","7.6.2.7 扩展用的",[35,124919,124920],{},[624,124921,124922],{},"\u002Fopt:",[35,124924,124925],{},"默认是空的，我们安装额外软件可以放在这个里面",[35,124927,124928],{},[624,124929,124930],{},"\u002Fsrv:",[35,124932,124933],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[23,124935,124937],{"id":124936},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[35,124939,124940],{},[64,124941],{"alt":66,"src":124942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[35,124944,124945],{},"windows-->linux:",[35,124947,124948],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[35,124950,124951],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[35,124953,124954],{},"linux传输文件到windows",[35,124956,124957],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[23,124959,124961],{"id":124960},"_764-易忘知识","7.6.4 易忘知识",[35,124963,124964],{},"操作系统内核查看",[75,124966,124967],{"className":77,"code":121614,"language":79,"meta":66,"style":66},[81,124968,124969],{"__ignoreMap":66},[84,124970,124971,124973],{"class":86,"line":87},[84,124972,70530],{"class":90},[84,124974,121623],{"class":94},[35,124976,124977],{},[64,124978],{"alt":66,"src":124979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[35,124981,124982],{},[64,124983],{"alt":66,"src":124984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[75,124986,124988],{"className":77,"code":124987,"language":79,"meta":66,"style":66},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[81,124989,124990,125002],{"__ignoreMap":66},[84,124991,124992,124994,124997,125000],{"class":86,"line":87},[84,124993,121831],{"class":90},[84,124995,124996],{"class":104}," mvtest",[84,124998,124999],{"class":104}," mvtest2",[84,125001,3003],{"class":477},[84,125003,125004],{"class":86,"line":98},[84,125005,125006],{"class":90},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[35,125008,125009],{},[64,125010],{"alt":66,"src":125011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[35,125013,125014],{},[64,125015],{"alt":66,"src":125016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[35,125018,125019,125020,125023],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[81,125021,125022],{},"du -a"," 可以快速查看磁盘使用细节。",[23,125025,125027],{"id":125026},"_765-vim","7.6.5 Vim",[35,125029,125030],{},[64,125031],{"alt":66,"src":125032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[35,125034,125035],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[35,125037,125038],{},"一开始进去为命令模式，此时点击输入的字母为命令",[35,125040,125041],{},[624,125042,125043],{},"1.命令模式：",[35,125045,125046],{},"i 切换到输入模式，在光标当前位置开始输入文本",[35,125048,125049],{},"x 删除当前光标所在处的字符",[35,125051,125052],{},"：切换到底线命令模式，以在最底一行输入命令",[35,125054,125055],{},"a 进行插入模式，在光标下一个位置输入文本",[35,125057,125058],{},"o 在当前的下方插入一个新行，并进入插入模式",[35,125060,125061],{},"0 在当前行的上方插入一个新行，并进入插入模式",[35,125063,125064],{},"dd 剪切当前行",[35,125066,125067],{},"yy 复制当前行",[35,125069,125070],{},"p 粘贴剪贴板内容到光标下方",[35,125072,125073],{},"P 粘贴剪贴板内容到光标上方",[35,125075,125076],{},"u 撤销上一次操作",[35,125078,125079],{},"ctrl+r 重做上一次操作",[35,125081,125082,125084],{},[1268,125083],{}," 保存文件",[35,125086,125087,125089],{},[1118,125088],{}," 退出Vim编辑器",[35,125091,125092,125094],{},[1118,125093],{},"! 强制退出Vim编辑器，不保存修改",[35,125096,125097],{},[624,125098,125099],{},"2.输入模式：",[35,125101,125102],{},[64,125103],{"alt":66,"src":125104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[35,125106,125107],{},[624,125108,125109],{},"3.底线命令模式：",[35,125111,125112],{},[64,125113],{"alt":66,"src":125114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[35,125116,125117],{},"按下esc可以退出底线命令模式",[23,125119,125121],{"id":125120},"_766-apt","7.6.6 apt",[35,125123,125124],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[23,125126,125128],{"id":125127},"_767-home与root的区别","7.6.7 home与root的区别",[35,125130,125131],{},[64,125132],{"alt":66,"src":125133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[35,125135,125136],{},[64,125137],{"alt":66,"src":125138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[35,125140,125141],{},[64,125142],{"alt":66,"src":125143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[35,125145,125146],{},[64,125147],{"alt":66,"src":125148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[23,125150,125152],{"id":125151},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[35,125154,125155],{},[39,125156,125157],{"href":125157,"rel":125158},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[43],[28,125160,125161,125164],{},[31,125162,125163],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[31,125165,125166],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[35,125168,125169],{},[64,125170],{"alt":66,"src":125171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[35,125173,125174],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[35,125176,125177],{},[64,125178],{"alt":66,"src":125179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[75,125181,125183],{"className":121140,"code":125182,"language":121142,"meta":121143,"style":66},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[81,125184,125185,125190],{"__ignoreMap":66},[84,125186,125187],{"class":86,"line":87},[84,125188,125189],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[84,125191,125192],{"class":86,"line":98},[84,125193,125194],{},".\u002Fpycharm.sh\n",[35,125196,125197],{},"3️⃣创建.desktop文件",[35,125199,125200],{},[624,125201,125202],{},"原理：",[1480,125204,125205,125215],{},[31,125206,125207,125208,125214],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[624,125209,125210,125213],{},[81,125211,125212],{},".desktop"," 文件"," 来识别应用。",[31,125216,125217,125219,125220],{},[81,125218,125212],{}," 文件相当于一个“应用注册表”，告诉系统：",[1480,125221,125222,125225,125228,125231,125234],{},[31,125223,125224],{},"应用名字（Name）",[31,125226,125227],{},"图标（Icon）",[31,125229,125230],{},"执行命令（Exec）",[31,125232,125233],{},"分类（Categories）",[31,125235,125236],{},"是否需要终端（Terminal）",[75,125238,125240],{"className":121140,"code":125239,"language":121142,"meta":121143,"style":66},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[81,125241,125242,125247],{"__ignoreMap":66},[84,125243,125244],{"class":86,"line":87},[84,125245,125246],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[84,125248,125249],{"class":86,"line":98},[84,125250,125251],{},"nano pycharm.desktop\n",[35,125253,125254],{},"nano是一个命令行下的编辑器，也可以使用vim",[75,125256,125258],{"className":121140,"code":125257,"language":121142,"meta":121143,"style":66},"[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",[81,125259,125260,125265,125270,125275,125280,125285,125290,125295,125300,125305],{"__ignoreMap":66},[84,125261,125262],{"class":86,"line":87},[84,125263,125264],{},"[Desktop Entry]\n",[84,125266,125267],{"class":86,"line":98},[84,125268,125269],{},"Version=1.0\n",[84,125271,125272],{"class":86,"line":70},[84,125273,125274],{},"Type=Application\n",[84,125276,125277],{"class":86,"line":120},[84,125278,125279],{},"Name=PyCharm\n",[84,125281,125282],{"class":86,"line":131},[84,125283,125284],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[84,125286,125287],{"class":86,"line":145},[84,125288,125289],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[84,125291,125292],{"class":86,"line":156},[84,125293,125294],{},"Comment=JetBrains PyCharm IDE\n",[84,125296,125297],{"class":86,"line":164},[84,125298,125299],{},"Categories=Development;IDE;\n",[84,125301,125302],{"class":86,"line":175},[84,125303,125304],{},"Terminal=false\n",[84,125306,125307],{"class":86,"line":185},[84,125308,125309],{},"StartupWMClass=jetbrains-pycharm\n",[1480,125311,125312,125318,125324,125330],{},[31,125313,125314,125317],{},[81,125315,125316],{},"Exec"," → 点击图标时执行的命令",[31,125319,125320,125323],{},[81,125321,125322],{},"Icon"," → 显示在菜单和桌面上的图标",[31,125325,125326,125329],{},[81,125327,125328],{},"Terminal=false"," → 不打开终端",[31,125331,125332,125335],{},[81,125333,125334],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125337,125338,125339],"blockquote",{},[35,125340,125341,125342,125344,125345],{},"可以理解成 ",[81,125343,125212],{}," 文件是 Linux 的 ",[624,125346,125347],{},"快捷方式配置文件",[35,125349,125350],{},"4️⃣设置可执行权限",[75,125352,125354],{"className":121140,"code":125353,"language":121142,"meta":121143,"style":66},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[81,125355,125356],{"__ignoreMap":66},[84,125357,125358],{"class":86,"line":87},[84,125359,125353],{},[35,125361,125362],{},"5️⃣桌面图标启动的话如下：",[75,125364,125366],{"className":121140,"code":125365,"language":121142,"meta":121143,"style":66},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[81,125367,125368,125373],{"__ignoreMap":66},[84,125369,125370],{"class":86,"line":87},[84,125371,125372],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[84,125374,125375],{"class":86,"line":98},[84,125376,125377],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[28,125379,125380],{"start":70},[31,125381,125382],{},"下载Appimage文件实现软件的安装",[35,125384,125385],{},"1️⃣先下载appimage",[35,125387,125388],{},[39,125389,125390],{"href":125390,"rel":125391},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[43],[35,125393,125394],{},[64,125395],{"alt":66,"src":125396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[35,125398,125399],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[35,125401,125402],{},[64,125403],{"alt":66,"src":125404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[35,125406,125407],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[35,125409,125410],{},[64,125411],{"alt":66,"src":125412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[35,125414,125415],{},[64,125416],{"alt":66,"src":125417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[35,125419,125420,125421,125424],{},"3️⃣给他们放在",[81,125422,125423],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[35,125426,125427],{},"4️⃣给软件执行权限",[75,125429,125431],{"className":121140,"code":125430,"language":121142,"meta":121143,"style":66},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[81,125432,125433,125438],{"__ignoreMap":66},[84,125434,125435],{"class":86,"line":87},[84,125436,125437],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[84,125439,125440],{"class":86,"line":98},[84,125441,125442],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[35,125444,125445],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[75,125447,125449],{"className":77,"code":125448,"language":79,"meta":66,"style":66},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[81,125450,125451,125458,125465,125471],{"__ignoreMap":66},[84,125452,125453,125455],{"class":86,"line":87},[84,125454,101602],{"class":94},[84,125456,125457],{"class":104}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[84,125459,125460,125462],{"class":86,"line":98},[84,125461,101609],{"class":90},[84,125463,125464],{"class":104}," .\u002Fqqmusic.desktop\n",[84,125466,125467,125469],{"class":86,"line":70},[84,125468,124513],{"class":90},[84,125470,125464],{"class":104},[84,125472,125473,125475,125477,125479],{"class":86,"line":120},[84,125474,24905],{"class":90},[84,125476,24908],{"class":104},[84,125478,123379],{"class":104},[84,125480,125464],{"class":104},[35,125482,125483,125485],{},[81,125484,101609],{},"：一个 Linux 命令，主要功能是：",[1480,125487,125488,125491],{},[31,125489,125490],{},"如果文件不存在，就创建一个新的空文件",[31,125492,125493],{},"如果文件已存在，就更新该文件的最后修改时间",[75,125495,125497],{"className":121140,"code":125496,"language":121142,"meta":121143,"style":66},"[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",[81,125498,125499,125503,125508,125513,125518,125522,125527],{"__ignoreMap":66},[84,125500,125501],{"class":86,"line":87},[84,125502,125264],{},[84,125504,125505],{"class":86,"line":98},[84,125506,125507],{},"Name=QQ音乐\n",[84,125509,125510],{"class":86,"line":70},[84,125511,125512],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[84,125514,125515],{"class":86,"line":120},[84,125516,125517],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[84,125519,125520],{"class":86,"line":131},[84,125521,125274],{},[84,125523,125524],{"class":86,"line":145},[84,125525,125526],{},"Categories=Audio;Music;Player;\n",[84,125528,125529],{"class":86,"line":156},[84,125530,125531],{},"Comment=QQ Music Client for Linux\n",[35,125533,125534],{},"将文件复制进去",[35,125536,125537],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[35,125539,125540],{},[64,125541],{"alt":66,"src":125542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[35,125544,125545],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[35,125547,125548],{},[64,125549],{"alt":66,"src":125550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[35,125552,125553,125554,125557,125558,125561],{},"如果你用的不是KDE，那么也可以直接修改",[81,125555,125556],{},"qqmuic.desktop","：在exec的末尾加上",[81,125559,125560],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[75,125563,125565],{"className":121140,"code":125564,"language":121142,"meta":121143,"style":66},"[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",[81,125566,125567,125571,125575,125580,125584,125588,125592],{"__ignoreMap":66},[84,125568,125569],{"class":86,"line":87},[84,125570,125264],{},[84,125572,125573],{"class":86,"line":98},[84,125574,125507],{},[84,125576,125577],{"class":86,"line":70},[84,125578,125579],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[84,125581,125582],{"class":86,"line":120},[84,125583,125517],{},[84,125585,125586],{"class":86,"line":131},[84,125587,125274],{},[84,125589,125590],{"class":86,"line":145},[84,125591,125526],{},[84,125593,125594],{"class":86,"line":156},[84,125595,125531],{},[35,125597,125598],{},[64,125599],{"alt":66,"src":125600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[35,125602,125603],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[75,125605,125607],{"className":121140,"code":125606,"language":121142,"meta":121143,"style":66},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[81,125608,125609],{"__ignoreMap":66},[84,125610,125611],{"class":86,"line":87},[84,125612,125606],{},[28,125614,125615],{"start":120},[31,125616,125617],{},"去Flathub上安装软件",[35,125619,125620],{},[39,125621,125622],{"href":125622,"rel":125623},"https:\u002F\u002Fflathub.org\u002F",[43],[35,125625,125626],{},"1️⃣去上面的官网搜索软件+下载软件",[35,125628,125629],{},[64,125630],{"alt":66,"src":125631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[75,125633,125635],{"className":121140,"code":125634,"language":121142,"meta":121143,"style":66},"flatpak install flathub com.obsproject.Studio\n",[81,125636,125637],{"__ignoreMap":66},[84,125638,125639],{"class":86,"line":87},[84,125640,125634],{},[35,125642,125643],{},[64,125644],{"alt":66,"src":125645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[35,125647,125648],{},"2️⃣运行软件",[35,125650,125651],{},"a.官方方式：",[35,125653,125654],{},[64,125655],{"alt":66,"src":125656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[75,125658,125659],{"className":121140,"code":125634,"language":121142,"meta":121143,"style":66},[81,125660,125661],{"__ignoreMap":66},[84,125662,125663],{"class":86,"line":87},[84,125664,125634],{},[35,125666,125667],{},"b.当普通软件运行：",[35,125669,125670],{},[64,125671],{"alt":66,"src":125672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[35,125674,125675],{},[64,125676],{"alt":66,"src":125677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[389,125679,125680],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":66,"searchDepth":98,"depth":98,"links":125682},[125683,125684,125689,125690,125696,125697],{"id":122415,"depth":98,"text":122416},{"id":122757,"depth":98,"text":122758,"children":125685},[125686,125687,125688],{"id":122761,"depth":70,"text":122762},{"id":122828,"depth":70,"text":122829},{"id":123089,"depth":70,"text":123090},{"id":123242,"depth":98,"text":123243},{"id":123480,"depth":98,"text":123481,"children":125691},[125692,125693,125694,125695],{"id":123532,"depth":70,"text":123533},{"id":123818,"depth":70,"text":123819},{"id":124089,"depth":70,"text":124090},{"id":124348,"depth":70,"text":124349},{"id":124407,"depth":98,"text":124408},{"id":124708,"depth":98,"text":124709,"children":125698},[125699,125700,125701,125702,125703,125704,125705,125706],{"id":124712,"depth":70,"text":124713},{"id":124724,"depth":70,"text":124725},{"id":124936,"depth":70,"text":124937},{"id":124960,"depth":70,"text":124961},{"id":125026,"depth":70,"text":125027},{"id":125120,"depth":70,"text":125121},{"id":125127,"depth":70,"text":125128},{"id":125151,"depth":70,"text":125152},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122407,"description":400},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125713,"title":125714,"body":125715,"description":400,"extension":401,"meta":125719,"navigation":403,"path":125720,"seo":125721,"stem":125722,"__hash__":125723},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125716,"toc":125717},[],{"title":66,"searchDepth":98,"depth":98,"links":125718},[],{"category":30590},"\u002Fwiki\u002F2025-01-27-linux",{"title":125714,"description":400},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125725,"title":125726,"body":125727,"description":125731,"extension":401,"meta":126122,"navigation":403,"path":126123,"seo":126124,"stem":126125,"__hash__":126126},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125728,"toc":126120},[125729,125732,125736,125753,125756,125809,125813,125815,125855,125864,125868,125871,126112,126117],[35,125730,125731],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125733,125735],{"id":125734},"_1ubuntu环境配置","1.Ubuntu环境配置",[28,125737,125738,125741,125744,125747,125750],{},[31,125739,125740],{},"ubuntu环境换源",[31,125742,125743],{},"安装cuda",[31,125745,125746],{},"安装miniconda",[31,125748,125749],{},"安装pytorch",[31,125751,125752],{},"安装genesis",[35,125754,125755],{},"参考链接：",[75,125757,125759],{"className":24151,"code":125758,"language":24153,"meta":66,"style":66},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[81,125760,125761],{"__ignoreMap":66},[84,125762,125763,125766,125769,125772,125774,125777,125780,125782,125785,125788,125790,125793,125796,125798,125801,125804,125806],{"class":86,"line":87},[84,125764,125765],{"class":90},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[84,125767,125768],{"class":104},"=blogdetail",[84,125770,125771],{"class":477},"&sharetype",[84,125773,523],{"class":473},[84,125775,125776],{"class":104},"blogdetail",[84,125778,125779],{"class":477},"&sharerId",[84,125781,523],{"class":473},[84,125783,125784],{"class":104},"144728092",[84,125786,125787],{"class":477},"&sharerefer",[84,125789,523],{"class":473},[84,125791,125792],{"class":104},"PC",[84,125794,125795],{"class":477},"&sharesource",[84,125797,523],{"class":473},[84,125799,125800],{"class":104},"qq_69379513",[84,125802,125803],{"class":477},"&sharefrom",[84,125805,523],{"class":473},[84,125807,125808],{"class":104},"from_link\n",[10,125810,125812],{"id":125811},"_2genesis-报错issue","2.Genesis 报错issue",[35,125814,125755],{},[75,125816,125817],{"className":24151,"code":125758,"language":24153,"meta":66,"style":66},[81,125818,125819],{"__ignoreMap":66},[84,125820,125821,125823,125825,125827,125829,125831,125833,125835,125837,125839,125841,125843,125845,125847,125849,125851,125853],{"class":86,"line":87},[84,125822,125765],{"class":90},[84,125824,125768],{"class":104},[84,125826,125771],{"class":477},[84,125828,523],{"class":473},[84,125830,125776],{"class":104},[84,125832,125779],{"class":477},[84,125834,523],{"class":473},[84,125836,125784],{"class":104},[84,125838,125787],{"class":477},[84,125840,523],{"class":473},[84,125842,125792],{"class":104},[84,125844,125795],{"class":477},[84,125846,523],{"class":473},[84,125848,125800],{"class":104},[84,125850,125803],{"class":477},[84,125852,523],{"class":473},[84,125854,125808],{"class":104},[75,125856,125858],{"className":24151,"code":125857,"language":24153,"meta":66,"style":66},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[81,125859,125860],{"__ignoreMap":66},[84,125861,125862],{"class":86,"line":87},[84,125863,125857],{"class":90},[10,125865,125867],{"id":125866},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[35,125869,125870],{},"hello_robot.py",[75,125872,125874],{"className":30705,"code":125873,"language":30707,"meta":66,"style":66},"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",[81,125875,125876,125882,125897,125901,125913,125925,125929,125942,125946,125965,125975,125985,125999,126003,126007,126012,126016,126026,126033,126047,126054,126064,126069,126073,126091,126096,126100,126107],{"__ignoreMap":66},[84,125877,125878,125880],{"class":86,"line":87},[84,125879,30719],{"class":473},[84,125881,45632],{"class":477},[84,125883,125884,125887,125890,125892,125894],{"class":86,"line":98},[84,125885,125886],{"class":477},"os.environ[",[84,125888,125889],{"class":104},"'PYOPENGL_PLATFORM'",[84,125891,4772],{"class":477},[84,125893,523],{"class":473},[84,125895,125896],{"class":104}," 'glx'\n",[84,125898,125899],{"class":86,"line":70},[84,125900,2729],{"emptyLinePlaceholder":403},[84,125902,125903,125905,125908,125910],{"class":86,"line":120},[84,125904,30719],{"class":473},[84,125906,125907],{"class":477}," genesis ",[84,125909,31710],{"class":473},[84,125911,125912],{"class":477}," gs\n",[84,125914,125915,125917,125920,125922],{"class":86,"line":131},[84,125916,31064],{"class":473},[84,125918,125919],{"class":477}," pynput ",[84,125921,30719],{"class":473},[84,125923,125924],{"class":477}," keyboard\n",[84,125926,125927],{"class":86,"line":145},[84,125928,2729],{"emptyLinePlaceholder":403},[84,125930,125931,125934,125937,125939],{"class":86,"line":156},[84,125932,125933],{"class":477},"gs.init(",[84,125935,125936],{"class":5545},"backend",[84,125938,523],{"class":473},[84,125940,125941],{"class":477},"gs.gpu)\n",[84,125943,125944],{"class":86,"line":164},[84,125945,2729],{"emptyLinePlaceholder":403},[84,125947,125948,125951,125953,125956,125959,125961,125963],{"class":86,"line":175},[84,125949,125950],{"class":477},"scene ",[84,125952,523],{"class":473},[84,125954,125955],{"class":477}," gs.Scene(",[84,125957,125958],{"class":5545},"show_viewer",[84,125960,523],{"class":473},[84,125962,31803],{"class":94},[84,125964,484],{"class":477},[84,125966,125967,125970,125972],{"class":86,"line":185},[84,125968,125969],{"class":477},"plane ",[84,125971,523],{"class":473},[84,125973,125974],{"class":477}," scene.add_entity(gs.morphs.Plane())\n",[84,125976,125977,125980,125982],{"class":86,"line":195},[84,125978,125979],{"class":477},"franka ",[84,125981,523],{"class":473},[84,125983,125984],{"class":477}," scene.add_entity(\n",[84,125986,125987,125990,125992,125994,125997],{"class":86,"line":206},[84,125988,125989],{"class":477},"    gs.morphs.MJCF(",[84,125991,45681],{"class":5545},[84,125993,523],{"class":473},[84,125995,125996],{"class":104},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[84,125998,38374],{"class":477},[84,126000,126001],{"class":86,"line":217},[84,126002,484],{"class":477},[84,126004,126005],{"class":86,"line":227},[84,126006,2729],{"emptyLinePlaceholder":403},[84,126008,126009],{"class":86,"line":238},[84,126010,126011],{"class":477},"scene.build()\n",[84,126013,126014],{"class":86,"line":249},[84,126015,2729],{"emptyLinePlaceholder":403},[84,126017,126018,126020,126023],{"class":86,"line":262},[84,126019,32274],{"class":473},[84,126021,126022],{"class":90}," on_press",[84,126024,126025],{"class":477},"(key):\n",[84,126027,126028,126031],{"class":86,"line":273},[84,126029,126030],{"class":473},"    try",[84,126032,4068],{"class":477},[84,126034,126035,126037,126040,126042,126045],{"class":86,"line":283},[84,126036,2826],{"class":473},[84,126038,126039],{"class":477}," key.char ",[84,126041,3278],{"class":473},[84,126043,126044],{"class":104}," 'q'",[84,126046,4068],{"class":477},[84,126048,126049,126051],{"class":86,"line":294},[84,126050,16061],{"class":473},[84,126052,126053],{"class":94}," False\n",[84,126055,126056,126059,126062],{"class":86,"line":2028},[84,126057,126058],{"class":473},"    except",[84,126060,126061],{"class":94}," AttributeError",[84,126063,4068],{"class":477},[84,126065,126066],{"class":86,"line":2057},[84,126067,126068],{"class":473},"        pass\n",[84,126070,126071],{"class":86,"line":2062},[84,126072,2729],{"emptyLinePlaceholder":403},[84,126074,126075,126078,126080,126083,126086,126088],{"class":86,"line":2079},[84,126076,126077],{"class":477},"listener ",[84,126079,523],{"class":473},[84,126081,126082],{"class":477}," keyboard.Listener(",[84,126084,126085],{"class":5545},"on_press",[84,126087,523],{"class":473},[84,126089,126090],{"class":477},"on_press)\n",[84,126092,126093],{"class":86,"line":2084},[84,126094,126095],{"class":477},"listener.start()\n",[84,126097,126098],{"class":86,"line":2089},[84,126099,2729],{"emptyLinePlaceholder":403},[84,126101,126102,126104],{"class":86,"line":2094},[84,126103,108989],{"class":473},[84,126105,126106],{"class":477}," listener.running:\n",[84,126108,126109],{"class":86,"line":2108},[84,126110,126111],{"class":477},"    scene.step()\n",[35,126113,126114],{},[64,126115],{"alt":66,"src":126116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[389,126118,126119],{},"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":66,"searchDepth":98,"depth":98,"links":126121},[],{"category":23707},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125726,"description":125731},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126128,"title":126129,"body":126130,"description":400,"extension":401,"meta":126145,"navigation":403,"path":126146,"seo":126147,"stem":126148,"__hash__":126149},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126131,"toc":126142},[126132,126135,126139],[10,126133,126129],{"id":126134},"_1-基础知识",[14,126136,126138],{"id":126137},"_11-js的组成","1.1 js的组成",[35,126140,126141],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":66,"searchDepth":98,"depth":98,"links":126143},[126144],{"id":126137,"depth":98,"text":126138},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126129,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126151,"title":126152,"body":126153,"description":400,"extension":401,"meta":126292,"navigation":403,"path":126293,"seo":126294,"stem":126295,"__hash__":126296},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126154,"toc":126280},[126155,126158,126162,126165,126169,126179,126183,126186,126189,126192,126196,126203,126209,126213,126219,126230,126234,126237,126241,126244,126248,126251,126255,126258,126262,126265,126268,126271,126274,126277],[10,126156,126152],{"id":126157},"_2-vscode必备内容",[14,126159,126161],{"id":126160},"_21-标签分类","2.1 标签分类",[35,126163,126164],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126166,126168],{"id":126167},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[35,126170,126171,126172,126174,126175,126178],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[81,126173,701],{}," 然后按 ",[81,126176,126177],{},"Tab","，快速自动生成基本结构。",[14,126180,126182],{"id":126181},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[35,126184,126185],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[35,126187,126188],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[35,126190,126191],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126193,126195],{"id":126194},"_24-视图缩放","2.4 视图缩放",[35,126197,126198,126199,126202],{},"缩放视图 ",[81,126200,126201],{},"ctrl+"," 可实现代码增大。",[35,126204,126205,126208],{},[81,126206,126207],{},"ctrl-"," 可实现代码减小。",[14,126210,126212],{"id":126211},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[35,126214,126215,126216,28712],{},"VSCode 新建文件快捷键为 ",[81,126217,126218],{},"ctrl+N",[35,126220,126221,126222,126225,126226,126229],{},"保存快捷键为 ",[81,126223,126224],{},"ctrl+S","，将文本保存为 ",[81,126227,126228],{},".html"," 文件。",[14,126231,126233],{"id":126232},"_26-auto-rename-tag","2.6 Auto Rename Tag",[35,126235,126236],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126238,126240],{"id":126239},"_27-vscode-icons","2.7 vscode-icons",[35,126242,126243],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126245,126247],{"id":126246},"_28-easy-less","2.8 Easy LESS",[35,126249,126250],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126252,126254],{"id":126253},"_29-会了吧插件","2.9 会了吧插件",[35,126256,126257],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126259,126261],{"id":126260},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[35,126263,126264],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[35,126266,126267],{},"②选定多个相同的单词:ctrl+D",[35,126269,126270],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[35,126272,126273],{},"④全局替换某些单词:ctrl+h",[35,126275,126276],{},"⑤快速定位到某一行:ctrl+g",[35,126278,126279],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":66,"searchDepth":98,"depth":98,"links":126281},[126282,126283,126284,126285,126286,126287,126288,126289,126290,126291],{"id":126160,"depth":98,"text":126161},{"id":126167,"depth":98,"text":126168},{"id":126181,"depth":98,"text":126182},{"id":126194,"depth":98,"text":126195},{"id":126211,"depth":98,"text":126212},{"id":126232,"depth":98,"text":126233},{"id":126239,"depth":98,"text":126240},{"id":126246,"depth":98,"text":126247},{"id":126253,"depth":98,"text":126254},{"id":126260,"depth":98,"text":126261},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126152,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126298,"title":126299,"body":126300,"description":400,"extension":401,"meta":126459,"navigation":403,"path":126460,"seo":126461,"stem":126462,"__hash__":126463},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126301,"toc":126451},[126302,126305,126309,126319,126325,126331,126335,126344,126348,126353,126356,126359,126363,126366,126376,126385,126394,126403,126413,126420,126425,126430,126443],[10,126303,126299],{"id":126304},"_3-html文本与容器标签",[14,126306,126308],{"id":126307},"_31-标题标签","3.1 标题标签",[35,126310,126311,126314,126315,126318],{},[81,126312,126313],{},"\u003Ch1>","我是一级标签",[81,126316,126317],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[35,126320,126321,126314,126323],{},[81,126322,126313],{},[81,126324,126317],{},[35,126326,123581,126327,126330],{},[81,126328,126329],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126332,126334],{"id":126333},"_32-段落标签","3.2 段落标签",[35,126336,126337,126340,126341],{},[81,126338,126339],{},"\u003Cp>","....",[81,126342,126343],{},"\u003C\u002Fp>",[14,126345,126347],{"id":126346},"_33-换行标签","3.3 换行标签",[35,126349,126350],{},[81,126351,126352],{},"\u003Cbr \u002F>",[35,126354,126355],{},"具有强制换行的作用",[35,126357,126358],{},"单标签",[14,126360,126362],{"id":126361},"_34-文本格式化标签","3.4 文本格式化标签",[35,126364,126365],{},"提供粗体、斜体和下划线等效果",[35,126367,126368,126369,82865,126372,126375],{},"加粗：",[81,126370,126371],{},"\u003Cstrong>...\u003C\u002Fstrong>",[81,126373,126374],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[35,126377,126378,126379,82865,126382,126375],{},"斜体：",[81,126380,126381],{},"\u003Cem>...\u003C\u002Fem>",[81,126383,126384],{},"\u003Ci>...\u003C\u002Fi>",[35,126386,126387,126388,82865,126391,126375],{},"删除线：",[81,126389,126390],{},"\u003Cdel>...\u003C\u002Fdel>",[81,126392,126393],{},"\u003Cs>...\u003C\u002Fs>",[35,126395,126396,126397,82865,126400,126375],{},"下划线：",[81,126398,126399],{},"\u003Cins>...\u003C\u002Fins>",[81,126401,126402],{},"\u003Cu>...\u003C\u002Fu>",[14,126404,126406,126407,18739,126410,103019],{"id":126405},"_35-div和span标签","3.5 ",[81,126408,126409],{},"\u003Cdiv>",[81,126411,126412],{},"\u003Cspan>",[35,126414,126415,101344,126417,126419],{},[81,126416,126409],{},[81,126418,126412],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[35,126421,126422],{},[81,126423,126424],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[35,126426,126427],{},[81,126428,126429],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[35,126431,126432,126433,126435,126436,126438,126439,126442],{},"两者特点：①",[81,126434,126409],{}," 标签用来布局，但一行通常只放一个 ",[81,126437,126409],{},"。可以理解为一个大盒子，独占一行，在 ",[81,126440,126441],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[35,126444,77575,126445,126447,126448,126450],{},[81,126446,126412],{}," 标签也可用于布局，一行可以放多个 ",[81,126449,126412],{},"，可理解为小盒子。",{"title":66,"searchDepth":98,"depth":98,"links":126452},[126453,126454,126455,126456,126457],{"id":126307,"depth":98,"text":126308},{"id":126333,"depth":98,"text":126334},{"id":126346,"depth":98,"text":126347},{"id":126361,"depth":98,"text":126362},{"id":126405,"depth":98,"text":126458},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126299,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126465,"title":126466,"body":126467,"description":400,"extension":401,"meta":126664,"navigation":403,"path":126665,"seo":126666,"stem":126667,"__hash__":126668},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126468,"toc":126656},[126469,126472,126476,126479,126485,126492,126498,126504,126507,126510,126513,126516,126519,126522,126525,126529,126532,126535,126538,126544,126550,126556,126563,126567,126573,126579,126582,126585,126591,126597,126603,126606,126609,126613,126616,126626,126632,126636,126645,126649,126652],[10,126470,126466],{"id":126471},"_4-html图像与链接",[14,126473,126475],{"id":126474},"_41-图像标签","4.1 图像标签",[35,126477,126478],{},"（1）标签",[35,126480,126481,126484],{},[81,126482,126483],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[35,126486,126487,126488,126491],{},"src是",[81,126489,126490],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[35,126493,126494,126495],{},"alt:文本，替换文本。图像不能显示的文字 ",[81,126496,126497],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[35,126499,126500,126501],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[81,126502,126503],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[35,126505,126506],{},"width:像素，设置图像的宽度",[35,126508,126509],{},"height:像素，设置图像的高度",[35,126511,126512],{},"border：像素，设置图像的边框粗细",[35,126514,126515],{},"（2）图像标签属性的注意点：",[35,126517,126518],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[35,126520,126521],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[35,126523,126524],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126526,126528],{"id":126527},"_42-路径注意要点","4.2 路径注意要点：",[35,126530,126531],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[35,126533,126534],{},"（2）根目录：就是打开文件夹的第一层根目录",[35,126536,126537],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[35,126539,126540,126541],{},"①同一级路径：图像文件位于HTML文件同一级，如",[81,126542,126543],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[35,126545,126546,126547],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[81,126548,126549],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[35,126551,126552,126553],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[81,126554,126555],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[35,126557,126558,126559,725],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[39,126560,126561],{"href":126561,"rel":126562},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[43],[14,126564,126566],{"id":126565},"_43-超链接标签","4.3 超链接标签",[35,126568,126569,126572],{},[81,126570,126571],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[35,126574,126575,126576],{},"①语法格式：",[81,126577,126578],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[35,126580,126581],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[35,126583,126584],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[35,126586,126587,126588],{},"③链接分类：外部链接：",[81,126589,126590],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[35,126592,126593,126594],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[81,126595,126596],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[35,126598,126599,126600],{},"空链接：如果当时没有确定链接目标时，",[81,126601,126602],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[35,126604,126605],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[35,126607,126608],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126610,126612],{"id":126611},"_44-锚点链接","4.4 锚点链接",[35,126614,126615],{},"点我们点击链接，可以快速定位到页面中的某个位置",[35,126617,126618,126619,126622,126623],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[81,126620,126621],{},"\u003Ca href=\"#two\">","第二级",[81,126624,126625],{},"\u003C\u002Fa>",[35,126627,126628,126629],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[81,126630,126631],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126633,126635],{"id":126634},"_45-注释标签","4.5 注释标签",[35,126637,126638,126641,126642],{},[81,126639,126640],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[81,126643,126644],{},"ctrl+\u002F",[14,126646,126648],{"id":126647},"_46-特殊字符","4.6 特殊字符",[35,126650,126651],{},"可以实现添加多个空格",[64,126653],{"style":126654,"src":126655},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":66,"searchDepth":98,"depth":98,"links":126657},[126658,126659,126660,126661,126662,126663],{"id":126474,"depth":98,"text":126475},{"id":126527,"depth":98,"text":126528},{"id":126565,"depth":98,"text":126566},{"id":126611,"depth":98,"text":126612},{"id":126634,"depth":98,"text":126635},{"id":126647,"depth":98,"text":126648},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126466,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126670,"title":126671,"body":126672,"description":400,"extension":401,"meta":126965,"navigation":403,"path":126966,"seo":126967,"stem":126968,"__hash__":126969},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126673,"toc":126956},[126674,126677,126681,126684,126687,126690,126693,126696,126699,126702,126705,126708,126728,126734,126738,126741,126744,126747,126750,126753,126756,126760,126763,126766,126769,126772,126785,126790,126793,126796,126811,126814,126817,126820,126823,126826,126830,126833,126840,126843,126846,126849,126852,126855,126861,126864,126867,126873,126876,126879,126882,126888,126891,126894,126908,126915,126918,126921,126928,126937,126940,126943,126946,126950,126953],[10,126675,126671],{"id":126676},"_5-html表格列表与表单",[14,126678,126680],{"id":126679},"_51-表格标签","5.1 表格标签",[35,126682,126683],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[35,126685,126686],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[35,126688,126689],{},"②表格基本语法：",[64,126691],{"style":126654,"src":126692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[35,126694,126695],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[64,126697],{"style":126654,"src":126698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[35,126700,126701],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[64,126703],{"style":126654,"src":126704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[35,126706,126707],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[35,126709,126710,126713,126714,126716,126717,126720,126721,126723,126724,126727],{},[81,126711,126712],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[81,126715,126712],{},"内部必须拥有",[81,126718,126719],{},"\u003Ctr>","标签，一般位于第一行，",[81,126722,126712],{},"比",[81,126725,126726],{},"\u003Cth>","范围广",[35,126729,126730,126733],{},[81,126731,126732],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126735,126737],{"id":126736},"_52-合并单元格","5.2 合并单元格",[35,126739,126740],{},"（1）合并单元格方式：",[35,126742,126743],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[35,126745,126746],{},"②跨列合并：colspan=\"合并单元格的个数\"",[35,126748,126749],{},"（2）目标单元格：",[35,126751,126752],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[35,126754,126755],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126757,126759],{"id":126758},"_53-列表标签","5.3 列表标签",[35,126761,126762],{},"（1）分类：无序列表、有序列表、自定义列表",[35,126764,126765],{},"①无序列表：",[64,126767],{"style":126654,"src":126768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[35,126770,126771],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[35,126773,126774,126777,126778,126781,126782,126784],{},[81,126775,126776],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[81,126779,126780],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[81,126783,126776],{},"中输入其他标签或文字是不对的",[35,126786,126787,126789],{},[81,126788,126780],{},"之间相当于一个容器，可以容纳所有元素",[35,126791,126792],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[35,126794,126795],{},"在css中去除前边的小圆点采用如下代码:",[75,126797,126801],{"className":126798,"code":126799,"language":126800,"meta":66,"style":66},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[81,126802,126803],{"__ignoreMap":66},[84,126804,126805,126808],{"class":86,"line":87},[84,126806,126807],{"class":51627},"list-style",[84,126809,126810],{"class":477},": none;\n",[35,126812,126813],{},"②有序列表：",[64,126815],{"style":126654,"src":126816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[35,126818,126819],{},"③自定义列表：",[64,126821],{"style":126654,"src":126822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[64,126824],{"style":126654,"src":126825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126827,126829],{"id":126828},"_54-表单标签","5.4 表单标签",[35,126831,126832],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[35,126834,126835,126836,126839],{},"（1）表单域：包含单元素的区域，",[81,126837,126838],{},"\u003Cform>","标签可以实现信息的收集和传递。",[64,126841],{"style":126654,"src":126842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[35,126844,126845],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[35,126847,126848],{},"表单元素提交必须有name属性",[35,126850,126851],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[35,126853,126854],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[35,126856,77552,126857,126860],{},[81,126858,126859],{},"\u003Cinput>","输入表单元素",[64,126862],{"style":126654,"src":126863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[64,126865],{"style":126654,"src":126866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[35,126868,126869,126870],{},"单选按钮：",[81,126871,126872],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[64,126874],{"style":126654,"src":126875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[35,126877,126878],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[64,126880],{"style":126654,"src":126881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[35,126883,126884,126887],{},[624,126885,126886],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[35,126889,126890],{},"②select下拉表单元素：可以节约页面控件",[64,126892],{"style":126654,"src":126893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[35,126895,126896,14124,126898,126901,126902,126904,126905,126907],{},[624,126897,507],{},[81,126899,126900],{},"\u003Cselect>","中至少包含一对",[81,126903,103040],{},"；在",[81,126906,103040],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[35,126909,126910,126911,126914],{},"③",[81,126912,126913],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[64,126916],{"style":126654,"src":126917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[35,126919,126920],{},"3行20列",[14,126922,126924,126925,103019],{"id":126923},"_55-lable标签","5.5 ",[81,126926,126927],{},"\u003Clable>",[35,126929,126930,126931,126933,126934,126936],{},"它不是表单标签，但常常与表单标签搭配使用，",[81,126932,126927],{},"标签用于绑定一个表单标签，当点击",[81,126935,126927],{},"标签内的文本",[35,126938,126939],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[64,126941],{"style":126654,"src":126942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[64,126944],{"style":126654,"src":126945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,126947,126949],{"id":126948},"_56-实例","5.6 实例",[64,126951],{"style":126654,"src":126952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[389,126954,126955],{},"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":66,"searchDepth":98,"depth":98,"links":126957},[126958,126959,126960,126961,126962,126964],{"id":126679,"depth":98,"text":126680},{"id":126736,"depth":98,"text":126737},{"id":126758,"depth":98,"text":126759},{"id":126828,"depth":98,"text":126829},{"id":126923,"depth":98,"text":126963},"5.5 \u003Clable>标签",{"id":126948,"depth":98,"text":126949},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126671,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126971,"title":126972,"body":126973,"description":400,"extension":401,"meta":127522,"navigation":403,"path":127523,"seo":127524,"stem":127525,"__hash__":127526},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126974,"toc":127497},[126975,126978,126982,126985,126988,126992,126995,126998,127001,127004,127007,127010,127013,127017,127020,127024,127027,127030,127033,127037,127040,127043,127046,127052,127055,127058,127061,127064,127067,127070,127073,127106,127110,127113,127116,127119,127123,127126,127129,127132,127135,127138,127142,127145,127148,127151,127155,127158,127162,127165,127169,127172,127177,127181,127184,127188,127191,127194,127197,127200,127227,127230,127234,127237,127240,127245,127248,127251,127255,127258,127263,127266,127269,127272,127276,127279,127282,127285,127289,127292,127295,127298,127302,127306,127309,127349,127352,127356,127363,127366,127370,127373,127419,127423,127426,127429,127432,127460,127464,127467,127494],[10,126976,126972],{"id":126977},"_6-css语法与文本样式",[14,126979,126981],{"id":126980},"_61-css语法规范","6.1 css语法规范",[35,126983,126984],{},"由两部分组成，选择器及一条或多条声明",[64,126986],{"style":126654,"src":126987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[35,126989,126990],{},[624,126991,507],{},[35,126993,126994],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[35,126996,126997],{},"②属性与属性值以“键值对”的形式出现",[35,126999,127000],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[35,127002,127003],{},"④属性和属性值之间用英文“;”分开",[64,127005],{"style":126654,"src":127006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[64,127008],{"style":126654,"src":127009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[64,127011],{"style":126654,"src":127012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127014,127016],{"id":127015},"_62-css选择器","6.2 css选择器",[35,127018,127019],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[23,127021,127023],{"id":127022},"_621-标签选择器","6.2.1 标签选择器",[35,127025,127026],{},"①优点：能快速为页面中同类型的标签统一设置样式",[35,127028,127029],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[64,127031],{"style":126654,"src":127032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[23,127034,127036],{"id":127035},"_622-类选择器","6.2.2 类选择器",[35,127038,127039],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[35,127041,127042],{},"②样例",[64,127044],{"style":126654,"src":127045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[35,127047,127048,127049,127051],{},"③ ",[624,127050,126886],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[35,127053,127054],{},"可以理解为给这个标签起了个名字，来表示；",[35,127056,127057],{},"长名称或词组可以使用横线来为选择器命名；",[35,127059,127060],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[35,127062,127063],{},"命名要有意义；",[64,127065],{"style":126654,"src":127066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[35,127068,127069],{},"类选择器也可以指定特殊的元素p.center{}",[35,127071,127072],{},"p.center和.center都对",[75,127074,127076],{"className":126798,"code":127075,"language":126800,"meta":66,"style":66},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[81,127077,127078,127083,127092,127102],{"__ignoreMap":66},[84,127079,127080],{"class":86,"line":87},[84,127081,127082],{"class":328},"\u002F* 类选择器指定特殊元素 *\u002F\n",[84,127084,127085,127087,127090],{"class":86,"line":98},[84,127086,35],{"class":51627},[84,127088,127089],{"class":90},".center",[84,127091,15901],{"class":477},[84,127093,127094,127096,127098,127100],{"class":86,"line":70},[84,127095,70852],{"class":94},[84,127097,51764],{"class":477},[84,127099,51919],{"class":94},[84,127101,1634],{"class":477},[84,127103,127104],{"class":86,"line":120},[84,127105,1905],{"class":477},[23,127107,127109],{"id":127108},"_623-多类名使用","6.2.3 多类名使用",[35,127111,127112],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[64,127114],{"style":126654,"src":127115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[35,127117,127118],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[23,127120,127122],{"id":127121},"_624-id选择器","6.2.4 id选择器",[35,127124,127125],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[35,127127,127128],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[64,127130],{"style":126654,"src":127131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[35,127133,127134],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[35,127136,127137],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[23,127139,127141],{"id":127140},"_625-通配符选择器","6.2.5 通配符选择器",[35,127143,127144],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[35,127146,127147],{},"* {",[35,127149,127150],{},"color=\"red\"}",[23,127152,127154],{"id":127153},"_626-总结","6.2.6 总结",[64,127156],{"style":126654,"src":127157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127159,127161],{"id":127160},"_63-css字体属性","6.3 css字体属性",[35,127163,127164],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[23,127166,127168],{"id":127167},"_631-字体系列","6.3.1 字体系列",[35,127170,127171],{},"font-family: '宋体';",[35,127173,127174,127176],{},[624,127175,507],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[23,127178,127180],{"id":127179},"_632-字体大小","6.3.2 字体大小",[35,127182,127183],{},"font-size: 20px",[35,127185,127186,26801],{},[624,127187,126886],{},[35,127189,127190],{},"①px（像素）大小是网页的最常用单位",[35,127192,127193],{},"②谷歌浏览器默认为16px",[35,127195,127196],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[35,127198,127199],{},"④可以给body指定整个页面的大小：会自动引用",[75,127201,127203],{"className":126798,"code":127202,"language":126800,"meta":66,"style":66},"body {\n  font-size: 16px;\n}\n",[81,127204,127205,127211,127223],{"__ignoreMap":66},[84,127206,127207,127209],{"class":86,"line":87},[84,127208,52127],{"class":51627},[84,127210,15901],{"class":477},[84,127212,127213,127215,127217,127219,127221],{"class":86,"line":98},[84,127214,70952],{"class":94},[84,127216,51764],{"class":477},[84,127218,1074],{"class":94},[84,127220,51819],{"class":473},[84,127222,1634],{"class":477},[84,127224,127225],{"class":86,"line":70},[84,127226,1905],{"class":477},[35,127228,127229],{},"⑤标题标签比较特殊，需要单独指定大小",[23,127231,127233],{"id":127232},"_633-字体粗细","6.3.3 字体粗细",[35,127235,127236],{},"font-weight: bold;",[35,127238,127239],{},"font-weight: 100；",[35,127241,127242,127244],{},[624,127243,507],{}," ①粗体文字变细：尽量别用normal，多用数字",[35,127246,127247],{},"font-weight= 400;",[35,127249,127250],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[23,127252,127254],{"id":127253},"_634-文字样式","6.3.4 文字样式",[35,127256,127257],{},"font-style: normal；",[35,127259,127260,26801],{},[624,127261,127262],{},"属性值",[35,127264,127265],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[35,127267,127268],{},"②italic：浏览器会显示斜体的字体样式",[64,127270],{"style":126654,"src":127271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[23,127273,127275],{"id":127274},"_635-字体符合属性","6.3.5 字体符合属性",[64,127277],{"style":126654,"src":127278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[64,127280],{"style":126654,"src":127281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[35,127283,127284],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[35,127286,127287,26801],{},[624,127288,126886],{},[35,127290,127291],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[35,127293,127294],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[35,127296,127297],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127299,127301],{"id":127300},"_64-css-test文本属性","6.4 css test文本属性",[23,127303,127305],{"id":127304},"_641-文本颜色","6.4.1 文本颜色",[35,127307,127308],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[75,127310,127312],{"className":126798,"code":127311,"language":126800,"meta":66,"style":66},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[81,127313,127314,127319,127325,127335,127340,127345],{"__ignoreMap":66},[84,127315,127316],{"class":86,"line":87},[84,127317,127318],{"class":328},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[84,127320,127321,127323],{"class":86,"line":98},[84,127322,35],{"class":51627},[84,127324,15901],{"class":477},[84,127326,127327,127329,127331,127333],{"class":86,"line":70},[84,127328,71231],{"class":94},[84,127330,51764],{"class":477},[84,127332,57747],{"class":94},[84,127334,1634],{"class":477},[84,127336,127337],{"class":86,"line":120},[84,127338,127339],{"class":328},"  \u002F* color: #ff0000; *\u002F\n",[84,127341,127342],{"class":86,"line":131},[84,127343,127344],{"class":328},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[84,127346,127347],{"class":86,"line":145},[84,127348,1905],{"class":477},[64,127350],{"style":126654,"src":127351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[23,127353,127355],{"id":127354},"_642-对齐文本","6.4.2 对齐文本",[35,127357,127358,127359,127362],{},"text-align属于用于设置元素内文本内容的 ",[624,127360,127361],{},"水平对齐"," 方式",[35,127364,127365],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[23,127367,127369],{"id":127368},"_643-装饰文本","6.4.3 装饰文本",[35,127371,127372],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[75,127374,127376],{"className":126798,"code":127375,"language":126800,"meta":66,"style":66},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[81,127377,127378,127384,127394,127398,127404,127415],{"__ignoreMap":66},[84,127379,127380,127382],{"class":86,"line":87},[84,127381,39],{"class":51627},[84,127383,15901],{"class":477},[84,127385,127386,127388,127390,127392],{"class":86,"line":98},[84,127387,70828],{"class":94},[84,127389,51764],{"class":477},[84,127391,55063],{"class":94},[84,127393,1634],{"class":477},[84,127395,127396],{"class":86,"line":70},[84,127397,1905],{"class":477},[84,127399,127400,127402],{"class":86,"line":120},[84,127401,35],{"class":51627},[84,127403,15901],{"class":477},[84,127405,127406,127408,127410,127413],{"class":86,"line":131},[84,127407,70828],{"class":94},[84,127409,51764],{"class":477},[84,127411,127412],{"class":94},"underline",[84,127414,1634],{"class":477},[84,127416,127417],{"class":86,"line":145},[84,127418,1905],{"class":477},[23,127420,127422],{"id":127421},"_644-文本缩进","6.4.4 文本缩进",[35,127424,127425],{},"实现文本的第一行首行缩进自己指定的距离",[35,127427,127428],{},"20px往右边走；-20px往左边走",[35,127430,127431],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[75,127433,127435],{"className":126798,"code":127434,"language":126800,"meta":66,"style":66},"p {\n  text-indent: 2em;\n}\n",[81,127436,127437,127443,127456],{"__ignoreMap":66},[84,127438,127439,127441],{"class":86,"line":87},[84,127440,35],{"class":51627},[84,127442,15901],{"class":477},[84,127444,127445,127448,127450,127452,127454],{"class":86,"line":98},[84,127446,127447],{"class":94},"  text-indent",[84,127449,51764],{"class":477},[84,127451,553],{"class":94},[84,127453,23882],{"class":473},[84,127455,1634],{"class":477},[84,127457,127458],{"class":86,"line":70},[84,127459,1905],{"class":477},[23,127461,127463],{"id":127462},"_645-行间距","6.4.5 行间距",[35,127465,127466],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[75,127468,127470],{"className":126798,"code":127469,"language":126800,"meta":66,"style":66},"p {\n  line-height: 1.6;\n}\n",[81,127471,127472,127478,127490],{"__ignoreMap":66},[84,127473,127474,127476],{"class":86,"line":87},[84,127475,35],{"class":51627},[84,127477,15901],{"class":477},[84,127479,127480,127483,127485,127488],{"class":86,"line":98},[84,127481,127482],{"class":94},"  line-height",[84,127484,51764],{"class":477},[84,127486,127487],{"class":94},"1.6",[84,127489,1634],{"class":477},[84,127491,127492],{"class":86,"line":70},[84,127493,1905],{"class":477},[389,127495,127496],{},"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":66,"searchDepth":98,"depth":98,"links":127498},[127499,127500,127508,127515],{"id":126980,"depth":98,"text":126981},{"id":127015,"depth":98,"text":127016,"children":127501},[127502,127503,127504,127505,127506,127507],{"id":127022,"depth":70,"text":127023},{"id":127035,"depth":70,"text":127036},{"id":127108,"depth":70,"text":127109},{"id":127121,"depth":70,"text":127122},{"id":127140,"depth":70,"text":127141},{"id":127153,"depth":70,"text":127154},{"id":127160,"depth":98,"text":127161,"children":127509},[127510,127511,127512,127513,127514],{"id":127167,"depth":70,"text":127168},{"id":127179,"depth":70,"text":127180},{"id":127232,"depth":70,"text":127233},{"id":127253,"depth":70,"text":127254},{"id":127274,"depth":70,"text":127275},{"id":127300,"depth":98,"text":127301,"children":127516},[127517,127518,127519,127520,127521],{"id":127304,"depth":70,"text":127305},{"id":127354,"depth":70,"text":127355},{"id":127368,"depth":70,"text":127369},{"id":127421,"depth":70,"text":127422},{"id":127462,"depth":70,"text":127463},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126972,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127528,"title":127529,"body":127530,"description":400,"extension":401,"meta":128179,"navigation":403,"path":128180,"seo":128181,"stem":128182,"__hash__":128183},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127531,"toc":128160},[127532,127535,127539,127543,127603,127607,127617,127620,127623,127627,127652,127656,127659,127662,127665,127668,127671,127675,127678,127681,127723,127726,127752,127758,127761,127765,127769,127775,127778,127781,127784,127787,127790,127793,127838,127842,127845,127848,127852,127856,127885,127888,127893,127896,127899,127902,127905,127909,127913,127916,127918,127921,127925,127928,127932,127935,127938,127941,127945,127949,127955,127965,127968,127971,127974,127977,127980,128103,128111,128119,128157],[10,127533,127529],{"id":127534},"_7-css引入方式与选择器进阶",[14,127536,127538],{"id":127537},"_71-css引入方式","7.1 css引入方式",[23,127540,127542],{"id":127541},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[75,127544,127548],{"className":127545,"code":127546,"language":127547,"meta":66,"style":66},"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",[81,127549,127550,127558,127565,127577,127590,127595],{"__ignoreMap":66},[84,127551,127552,127554,127556],{"class":86,"line":87},[84,127553,1383],{"class":477},[84,127555,389],{"class":51627},[84,127557,51634],{"class":477},[84,127559,127560,127563],{"class":86,"line":98},[84,127561,127562],{"class":51627},"  h1",[84,127564,15901],{"class":477},[84,127566,127567,127570,127572,127575],{"class":86,"line":70},[84,127568,127569],{"class":94},"    color",[84,127571,51764],{"class":477},[84,127573,127574],{"class":94},"blue",[84,127576,1634],{"class":477},[84,127578,127579,127582,127584,127586,127588],{"class":86,"line":120},[84,127580,127581],{"class":94},"    font-size",[84,127583,51764],{"class":477},[84,127585,1273],{"class":94},[84,127587,51819],{"class":473},[84,127589,1634],{"class":477},[84,127591,127592],{"class":86,"line":131},[84,127593,127594],{"class":477},"  }\n",[84,127596,127597,127599,127601],{"class":86,"line":145},[84,127598,52112],{"class":477},[84,127600,389],{"class":51627},[84,127602,51634],{"class":477},[35,127604,127605,26801],{},[624,127606,126886],{},[35,127608,77552,127609,127612,127613,127616],{},[81,127610,127611],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[81,127614,127615],{},"\u003Chead>","标签中",[35,127618,127619],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[35,127621,127622],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[23,127624,127626],{"id":127625},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[75,127628,127630],{"className":127545,"code":127629,"language":127547,"meta":66,"style":66},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[81,127631,127632],{"__ignoreMap":66},[84,127633,127634,127636,127638,127640,127642,127645,127648,127650],{"class":86,"line":87},[84,127635,1383],{"class":477},[84,127637,35],{"class":51627},[84,127639,62952],{"class":90},[84,127641,523],{"class":477},[84,127643,127644],{"class":104},"\"color: red; font-size: 16px;\"",[84,127646,127647],{"class":477},">这是一个段落\u003C\u002F",[84,127649,35],{"class":51627},[84,127651,51634],{"class":477},[35,127653,127654,26801],{},[624,127655,126886],{},[35,127657,127658],{},"①style其实就是标签的属性",[35,127660,127661],{},"②在双引号中间，写法要符合css规范",[35,127663,127664],{},"③可以控制当前的标签设置样式",[35,127666,127667],{},"④书写繁琐，简单时才用",[35,127669,127670],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[23,127672,127674],{"id":127673},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[35,127676,127677],{},"使用最多，单独建一个css文件，然后html引用",[35,127679,127680],{},"①css文件部分： style.css",[75,127682,127684],{"className":126798,"code":127683,"language":126800,"meta":66,"style":66},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[81,127685,127686,127691,127697,127707,127719],{"__ignoreMap":66},[84,127687,127688],{"class":86,"line":87},[84,127689,127690],{"class":328},"\u002F* style.css *\u002F\n",[84,127692,127693,127695],{"class":86,"line":98},[84,127694,10],{"class":51627},[84,127696,15901],{"class":477},[84,127698,127699,127701,127703,127705],{"class":86,"line":70},[84,127700,71231],{"class":94},[84,127702,51764],{"class":477},[84,127704,127574],{"class":94},[84,127706,1634],{"class":477},[84,127708,127709,127711,127713,127715,127717],{"class":86,"line":120},[84,127710,70952],{"class":94},[84,127712,51764],{"class":477},[84,127714,1273],{"class":94},[84,127716,51819],{"class":473},[84,127718,1634],{"class":477},[84,127720,127721],{"class":86,"line":131},[84,127722,1905],{"class":477},[35,127724,127725],{},"②html部分",[75,127727,127729],{"className":127545,"code":127728,"language":127547,"meta":66,"style":66},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[81,127730,127731],{"__ignoreMap":66},[84,127732,127733,127735,127737,127739,127741,127743,127745,127747,127750],{"class":86,"line":87},[84,127734,1383],{"class":477},[84,127736,69331],{"class":51627},[84,127738,69334],{"class":90},[84,127740,523],{"class":477},[84,127742,69339],{"class":104},[84,127744,61383],{"class":90},[84,127746,523],{"class":477},[84,127748,127749],{"class":104},"\"style.css\"",[84,127751,51634],{"class":477},[35,127753,127754,127757],{},[81,127755,127756],{},"\u003Chr>","水平线标签（但是不常用！）",[35,127759,127760],{},"ctrl+0回到页面原来大小",[14,127762,127764],{"id":127763},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[23,127766,127768],{"id":127767},"_721-快速生成html","7.2.1 快速生成html",[35,127770,127771,127772],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[81,127773,127774],{},"\u003Cdiv>``\u003C\u002Fdiv>",[35,127776,127777],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[35,127779,127780],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[35,127782,127783],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[35,127785,127786],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[35,127788,127789],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[35,127791,127792],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[75,127794,127796],{"className":127545,"code":127795,"language":127547,"meta":66,"style":66},"\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",[81,127797,127798,127803,127808,127813,127818,127823,127828,127833],{"__ignoreMap":66},[84,127799,127800],{"class":86,"line":87},[84,127801,127802],{"class":328},"\u003C!-- Emmet 语法示例 -->\n",[84,127804,127805],{"class":86,"line":98},[84,127806,127807],{"class":328},"\u003C!-- div*3        → 生成3个div -->\n",[84,127809,127810],{"class":86,"line":70},[84,127811,127812],{"class":328},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[84,127814,127815],{"class":86,"line":120},[84,127816,127817],{"class":328},"\u003C!-- div+p        → 兄弟div和p -->\n",[84,127819,127820],{"class":86,"line":131},[84,127821,127822],{"class":328},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[84,127824,127825],{"class":86,"line":145},[84,127826,127827],{"class":328},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[84,127829,127830],{"class":86,"line":156},[84,127831,127832],{"class":328},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[84,127834,127835],{"class":86,"line":164},[84,127836,127837],{"class":328},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[23,127839,127841],{"id":127840},"_722-快速生成css","7.2.2 快速生成css",[35,127843,127844],{},"简写开头",[35,127846,127847],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127849,127851],{"id":127850},"_73-css复合选择器","7.3 css复合选择器",[23,127853,127855],{"id":127854},"_731-后代选择器","7.3.1 后代选择器",[75,127857,127859],{"className":126798,"code":127858,"language":126800,"meta":66,"style":66},".parent .child {\n  color: blue;\n}\n",[81,127860,127861,127871,127881],{"__ignoreMap":66},[84,127862,127863,127866,127869],{"class":86,"line":87},[84,127864,127865],{"class":90},".parent",[84,127867,127868],{"class":90}," .child",[84,127870,15901],{"class":477},[84,127872,127873,127875,127877,127879],{"class":86,"line":98},[84,127874,71231],{"class":94},[84,127876,51764],{"class":477},[84,127878,127574],{"class":94},[84,127880,1634],{"class":477},[84,127882,127883],{"class":86,"line":70},[84,127884,1905],{"class":477},[35,127886,127887],{},"元素1 元素2 {样式声明}",[35,127889,127890],{},[624,127891,127892],{},"注意点:",[35,127894,127895],{},"①元素1和元素2中间用空格隔开",[35,127897,127898],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[35,127900,127901],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[35,127903,127904],{},"④元素1和元素2可以是任意基础选择器",[23,127906,127908],{"id":127907},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[35,127910,127911],{},[624,127912,127892],{},[35,127914,127915],{},"①元素1和元素2中间用大于号隔开",[35,127917,127898],{},[35,127919,127920],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[23,127922,127924],{"id":127923},"_733-并集选择器","7.3.3 并集选择器",[35,127926,127927],{},"元素1，元素2 {样式声明}",[35,127929,127930],{},[624,127931,127892],{},[35,127933,127934],{},"①元素1和元素2中间用逗号隔开",[35,127936,127937],{},"②逗号可以理解为和的意思",[35,127939,127940],{},"③并集选择器通常用于集体声明",[23,127942,127944],{"id":127943},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[35,127946,127947],{},[624,127948,127892],{},[35,127950,127951,127952,127954],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69331,127953],{},"－:visited－:hover－:active。",[35,127956,127957,127958,127961,127962,26068],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127959,127960],"hover",{}," 、 ",[127963,127964],"first-child",{},[35,127966,127967],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[35,127969,127970],{},"link对没访问的进行设置",[35,127972,127973],{},"vistied对已访问的进行改变",[35,127975,127976],{},"hover鼠标经过就会变",[35,127978,127979],{},"active常按(点)就会变",[75,127981,127983],{"className":126798,"code":127982,"language":126800,"meta":66,"style":66},"\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",[81,127984,127985,127990,127999,128009,128019,128023,128032,128043,128047,128055,128065,128075,128079,128088,128099],{"__ignoreMap":66},[84,127986,127987],{"class":86,"line":87},[84,127988,127989],{"class":328},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[84,127991,127992,127994,127997],{"class":86,"line":98},[84,127993,39],{"class":51627},[84,127995,127996],{"class":90},":link",[84,127998,15901],{"class":477},[84,128000,128001,128003,128005,128007],{"class":86,"line":70},[84,128002,71231],{"class":94},[84,128004,51764],{"class":477},[84,128006,62695],{"class":94},[84,128008,1634],{"class":477},[84,128010,128011,128013,128015,128017],{"class":86,"line":120},[84,128012,70828],{"class":94},[84,128014,51764],{"class":477},[84,128016,55063],{"class":94},[84,128018,1634],{"class":477},[84,128020,128021],{"class":86,"line":131},[84,128022,1905],{"class":477},[84,128024,128025,128027,128030],{"class":86,"line":145},[84,128026,39],{"class":51627},[84,128028,128029],{"class":90},":visited",[84,128031,15901],{"class":477},[84,128033,128034,128036,128038,128041],{"class":86,"line":156},[84,128035,71231],{"class":94},[84,128037,51764],{"class":477},[84,128039,128040],{"class":94},"purple",[84,128042,1634],{"class":477},[84,128044,128045],{"class":86,"line":164},[84,128046,1905],{"class":477},[84,128048,128049,128051,128053],{"class":86,"line":175},[84,128050,39],{"class":51627},[84,128052,61266],{"class":90},[84,128054,15901],{"class":477},[84,128056,128057,128059,128061,128063],{"class":86,"line":185},[84,128058,71231],{"class":94},[84,128060,51764],{"class":477},[84,128062,55215],{"class":94},[84,128064,1634],{"class":477},[84,128066,128067,128069,128071,128073],{"class":86,"line":195},[84,128068,70828],{"class":94},[84,128070,51764],{"class":477},[84,128072,127412],{"class":94},[84,128074,1634],{"class":477},[84,128076,128077],{"class":86,"line":206},[84,128078,1905],{"class":477},[84,128080,128081,128083,128086],{"class":86,"line":217},[84,128082,39],{"class":51627},[84,128084,128085],{"class":90},":active",[84,128087,15901],{"class":477},[84,128089,128090,128092,128094,128097],{"class":86,"line":227},[84,128091,71231],{"class":94},[84,128093,51764],{"class":477},[84,128095,128096],{"class":94},"green",[84,128098,1634],{"class":477},[84,128100,128101],{"class":86,"line":238},[84,128102,1905],{"class":477},[23,128104,128106,128107,128110],{"id":128105},"_735-伪类选择器","7.3.5 ",[128108,128109],"focus",{},"伪类选择器",[35,128112,128113,128115,128116,128118],{},[128108,128114],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[81,128117,126859],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[75,128120,128122],{"className":126798,"code":128121,"language":126800,"meta":66,"style":66},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[81,128123,128124,128132,128143,128153],{"__ignoreMap":66},[84,128125,128126,128128,128130],{"class":86,"line":87},[84,128127,54147],{"class":51627},[84,128129,62226],{"class":90},[84,128131,15901],{"class":477},[84,128133,128134,128137,128139,128141],{"class":86,"line":98},[84,128135,128136],{"class":94},"  border-color",[84,128138,51764],{"class":477},[84,128140,55215],{"class":94},[84,128142,1634],{"class":477},[84,128144,128145,128147,128149,128151],{"class":86,"line":70},[84,128146,71124],{"class":94},[84,128148,51764],{"class":477},[84,128150,55063],{"class":94},[84,128152,1634],{"class":477},[84,128154,128155],{"class":86,"line":120},[84,128156,1905],{"class":477},[389,128158,128159],{},"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":66,"searchDepth":98,"depth":98,"links":128161},[128162,128167,128171],{"id":127537,"depth":98,"text":127538,"children":128163},[128164,128165,128166],{"id":127541,"depth":70,"text":127542},{"id":127625,"depth":70,"text":127626},{"id":127673,"depth":70,"text":127674},{"id":127763,"depth":98,"text":127764,"children":128168},[128169,128170],{"id":127767,"depth":70,"text":127768},{"id":127840,"depth":70,"text":127841},{"id":127850,"depth":98,"text":127851,"children":128172},[128173,128174,128175,128176,128177],{"id":127854,"depth":70,"text":127855},{"id":127907,"depth":70,"text":127908},{"id":127923,"depth":70,"text":127924},{"id":127943,"depth":70,"text":127944},{"id":128105,"depth":70,"text":128178},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127529,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128185,"title":128186,"body":128187,"description":400,"extension":401,"meta":130110,"navigation":403,"path":130111,"seo":130112,"stem":130113,"__hash__":130114},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128188,"toc":130084},[128189,128192,128196,128205,128209,128235,128240,128243,128246,128249,128252,128256,128259,128269,128277,128281,128316,128321,128324,128327,128330,128333,128337,128340,128349,128353,128366,128371,128374,128377,128380,128384,128387,128391,128394,128449,128452,128483,128486,128540,128544,128547,128713,128836,128839,128842,128845,128848,128852,128855,128859,128862,128865,128869,128872,128903,128930,128958,128961,128965,128991,129034,129038,129132,129135,129162,129165,129168,129171,129174,129177,129180,129183,129186,129189,129193,129250,129277,129281,129329,129333,129374,129376,129379,129382,129385,129388,129392,129484,129487,129490,129493,129497,129620,129821,129825,129829,129832,129835,129838,129842,129845,129848,129873,129876,129879,129882,129885,129888,129892,129900,129962,129965,130023,130026,130029,130032,130035,130038,130041,130044,130081],[10,128190,128186],{"id":128191},"_8-css显示模式与背景特性",[14,128193,128195],{"id":128194},"_81-css元素显示模式","8.1 css元素显示模式",[35,128197,128198,128199,128201,128202,128204],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[81,128200,126409],{},"自己占一行，比如一行可以放多个",[81,128203,126412],{},"，HTML 元素一般分为块元素和行内元素两种类型",[23,128206,128208],{"id":128207},"_811-块元素","8.1.1 块元素",[35,128210,128211,128212,128214,128215,687,128218,687,128220,687,128222,687,128225,687,128228,128231,128232,128234],{},"常见的块元素有",[81,128213,126313],{},"~",[81,128216,128217],{},"\u003Ch6>",[81,128219,126339],{},[81,128221,126409],{},[81,128223,128224],{},"\u003Cul>",[81,128226,128227],{},"\u003Col>",[81,128229,128230],{},"\u003Cli>","等，其中 ",[81,128233,126409],{}," 标签是最典型的块元素",[35,128236,128237],{},[624,128238,128239],{},"块级元素的特点：",[35,128241,128242],{},"① 比较霸道，自己独占一行。",[35,128244,128245],{},"② 高度，宽度、外边距以及内边距都可以控制。",[35,128247,128248],{},"③ 宽度默认是容器（父级宽度）的100%。",[35,128250,128251],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[35,128253,128254],{},[624,128255,507],{},[35,128257,128258],{},"①文字类的元素内不能使用块级元素",[35,128260,77575,128261,128263,128264,128266,128267],{},[81,128262,126339],{}," 标签主要用于存放文字，因此 ",[81,128265,126339],{}," 里面不能放块级元素，特别是不能放",[81,128268,126409],{},[35,128270,128271,128272,128214,128274,128276],{},"⑥同理， ",[81,128273,126313],{},[81,128275,128217],{},"等都是文字类块级标签，里面也不能放其他块级元素",[23,128278,128280],{"id":128279},"_812-行内元素","8.1.2 行内元素",[35,128282,128283,128284,687,128286,687,128289,687,128292,687,128295,687,128298,687,128301,687,128304,687,128307,687,128310,128312,128313,128315],{},"常见的行内元素有 ",[81,128285,126571],{},[81,128287,128288],{},"\u003Cstrong>",[81,128290,128291],{},"\u003Cb>",[81,128293,128294],{},"\u003Cem>",[81,128296,128297],{},"\u003Ci>",[81,128299,128300],{},"\u003Cdel>",[81,128302,128303],{},"\u003Cs>",[81,128305,128306],{},"\u003Cins>",[81,128308,128309],{},"\u003Cu>",[81,128311,126412],{}," 等，其中 ",[81,128314,126412],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[35,128317,128318],{},[624,128319,128320],{},"特点：",[35,128322,128323],{},"① 相邻行内元素在一行上，一行可以显示多个。",[35,128325,128326],{},"② 高、宽直接设置是无效的。",[35,128328,128329],{},"③ 默认宽度就是它本身内容的宽度。",[35,128331,128332],{},"④ 行内元素只能容纳文本或其他行内元素。",[35,128334,128335],{},[624,128336,507],{},[35,128338,128339],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[35,128341,128342,128343,128345,128346,128348],{},"②特殊情况链接 ",[81,128344,126571],{}," 里面可以放块级元素，但是给 ",[81,128347,126571],{}," 转换一下块级模式最安全",[23,128350,128352],{"id":128351},"_813-行内块元素","8.1.3 行内块元素",[35,128354,128355,128356,687,128359,687,128362,128365],{},"在行内元素中有几个特殊的标签 —— ",[81,128357,128358],{},"\u003Cimg \u002F>",[81,128360,128361],{},"\u003Cinput \u002F>",[81,128363,128364],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[35,128367,128368],{},[624,128369,128370],{},"行内块元素的特点：",[35,128372,128373],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[35,128375,128376],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[35,128378,128379],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[23,128381,128383],{"id":128382},"_814-总结","8.1.4 总结",[64,128385],{"style":126654,"src":128386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[23,128388,128390],{"id":128389},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[35,128392,128393],{},"①转换为块元素：display:block;",[75,128395,128397],{"className":126798,"code":128396,"language":126800,"meta":66,"style":66},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[81,128398,128399,128404,128410,128421,128433,128445],{"__ignoreMap":66},[84,128400,128401],{"class":86,"line":87},[84,128402,128403],{"class":328},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[84,128405,128406,128408],{"class":86,"line":98},[84,128407,39],{"class":51627},[84,128409,15901],{"class":477},[84,128411,128412,128415,128417,128419],{"class":86,"line":70},[84,128413,128414],{"class":94},"  display",[84,128416,51764],{"class":477},[84,128418,61195],{"class":94},[84,128420,1634],{"class":477},[84,128422,128423,128425,128427,128429,128431],{"class":86,"line":120},[84,128424,70894],{"class":94},[84,128426,51764],{"class":477},[84,128428,784],{"class":94},[84,128430,51819],{"class":473},[84,128432,1634],{"class":477},[84,128434,128435,128437,128439,128441,128443],{"class":86,"line":131},[84,128436,71114],{"class":94},[84,128438,51764],{"class":477},[84,128440,874],{"class":94},[84,128442,51819],{"class":473},[84,128444,1634],{"class":477},[84,128446,128447],{"class":86,"line":145},[84,128448,1905],{"class":477},[35,128450,128451],{},"②转换为行内元素：display:inline;",[75,128453,128455],{"className":126798,"code":128454,"language":126800,"meta":66,"style":66},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[81,128456,128457,128462,128468,128479],{"__ignoreMap":66},[84,128458,128459],{"class":86,"line":87},[84,128460,128461],{"class":328},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[84,128463,128464,128466],{"class":86,"line":98},[84,128465,51938],{"class":51627},[84,128467,15901],{"class":477},[84,128469,128470,128472,128474,128477],{"class":86,"line":70},[84,128471,128414],{"class":94},[84,128473,51764],{"class":477},[84,128475,128476],{"class":94},"inline",[84,128478,1634],{"class":477},[84,128480,128481],{"class":86,"line":120},[84,128482,1905],{"class":477},[35,128484,128485],{},"③转换为行内块：display:inline-block;",[75,128487,128489],{"className":126798,"code":128488,"language":126800,"meta":66,"style":66},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[81,128490,128491,128496,128502,128512,128524,128536],{"__ignoreMap":66},[84,128492,128493],{"class":86,"line":87},[84,128494,128495],{"class":328},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[84,128497,128498,128500],{"class":86,"line":98},[84,128499,84],{"class":51627},[84,128501,15901],{"class":477},[84,128503,128504,128506,128508,128510],{"class":86,"line":70},[84,128505,128414],{"class":94},[84,128507,51764],{"class":477},[84,128509,72709],{"class":94},[84,128511,1634],{"class":477},[84,128513,128514,128516,128518,128520,128522],{"class":86,"line":120},[84,128515,70894],{"class":94},[84,128517,51764],{"class":477},[84,128519,1085],{"class":94},[84,128521,51819],{"class":473},[84,128523,1634],{"class":477},[84,128525,128526,128528,128530,128532,128534],{"class":86,"line":131},[84,128527,71114],{"class":94},[84,128529,51764],{"class":477},[84,128531,1424],{"class":94},[84,128533,51819],{"class":473},[84,128535,1634],{"class":477},[84,128537,128538],{"class":86,"line":145},[84,128539,1905],{"class":477},[23,128541,128543],{"id":128542},"_816-小米侧边栏","8.1.6 小米侧边栏",[64,128545],{"style":126654,"src":128546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[75,128548,128550],{"className":127545,"code":128549,"language":127547,"meta":66,"style":66},"\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",[81,128551,128552,128557,128572,128591,128610,128629,128648,128667,128686,128705],{"__ignoreMap":66},[84,128553,128554],{"class":86,"line":87},[84,128555,128556],{"class":328},"\u003C!-- 小米侧边栏案例 -->\n",[84,128558,128559,128561,128563,128565,128567,128570],{"class":86,"line":98},[84,128560,1383],{"class":477},[84,128562,51938],{"class":51627},[84,128564,53813],{"class":90},[84,128566,523],{"class":477},[84,128568,128569],{"class":104},"\"sidebar\"",[84,128571,51634],{"class":477},[84,128573,128574,128576,128578,128580,128582,128584,128587,128589],{"class":86,"line":70},[84,128575,52471],{"class":477},[84,128577,39],{"class":51627},[84,128579,61383],{"class":90},[84,128581,523],{"class":477},[84,128583,61388],{"class":104},[84,128585,128586],{"class":477},">手机 电话卡\u003C\u002F",[84,128588,39],{"class":51627},[84,128590,51634],{"class":477},[84,128592,128593,128595,128597,128599,128601,128603,128606,128608],{"class":86,"line":120},[84,128594,52471],{"class":477},[84,128596,39],{"class":51627},[84,128598,61383],{"class":90},[84,128600,523],{"class":477},[84,128602,61388],{"class":104},[84,128604,128605],{"class":477},">电视 盒子\u003C\u002F",[84,128607,39],{"class":51627},[84,128609,51634],{"class":477},[84,128611,128612,128614,128616,128618,128620,128622,128625,128627],{"class":86,"line":131},[84,128613,52471],{"class":477},[84,128615,39],{"class":51627},[84,128617,61383],{"class":90},[84,128619,523],{"class":477},[84,128621,61388],{"class":104},[84,128623,128624],{"class":477},">笔记本 平板\u003C\u002F",[84,128626,39],{"class":51627},[84,128628,51634],{"class":477},[84,128630,128631,128633,128635,128637,128639,128641,128644,128646],{"class":86,"line":145},[84,128632,52471],{"class":477},[84,128634,39],{"class":51627},[84,128636,61383],{"class":90},[84,128638,523],{"class":477},[84,128640,61388],{"class":104},[84,128642,128643],{"class":477},">出行 穿戴\u003C\u002F",[84,128645,39],{"class":51627},[84,128647,51634],{"class":477},[84,128649,128650,128652,128654,128656,128658,128660,128663,128665],{"class":86,"line":156},[84,128651,52471],{"class":477},[84,128653,39],{"class":51627},[84,128655,61383],{"class":90},[84,128657,523],{"class":477},[84,128659,61388],{"class":104},[84,128661,128662],{"class":477},">智能 路由器\u003C\u002F",[84,128664,39],{"class":51627},[84,128666,51634],{"class":477},[84,128668,128669,128671,128673,128675,128677,128679,128682,128684],{"class":86,"line":164},[84,128670,52471],{"class":477},[84,128672,39],{"class":51627},[84,128674,61383],{"class":90},[84,128676,523],{"class":477},[84,128678,61388],{"class":104},[84,128680,128681],{"class":477},">健康 儿童\u003C\u002F",[84,128683,39],{"class":51627},[84,128685,51634],{"class":477},[84,128687,128688,128690,128692,128694,128696,128698,128701,128703],{"class":86,"line":175},[84,128689,52471],{"class":477},[84,128691,39],{"class":51627},[84,128693,61383],{"class":90},[84,128695,523],{"class":477},[84,128697,61388],{"class":104},[84,128699,128700],{"class":477},">耳机 音响\u003C\u002F",[84,128702,39],{"class":51627},[84,128704,51634],{"class":477},[84,128706,128707,128709,128711],{"class":86,"line":185},[84,128708,52112],{"class":477},[84,128710,51938],{"class":51627},[84,128712,51634],{"class":477},[75,128714,128716],{"className":126798,"code":128715,"language":126800,"meta":66,"style":66},".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",[81,128717,128718,128727,128737,128750,128762,128774,128786,128796,128807,128811,128821,128832],{"__ignoreMap":66},[84,128719,128720,128723,128725],{"class":86,"line":87},[84,128721,128722],{"class":90},".sidebar",[84,128724,1739],{"class":51627},[84,128726,15901],{"class":477},[84,128728,128729,128731,128733,128735],{"class":86,"line":98},[84,128730,128414],{"class":94},[84,128732,51764],{"class":477},[84,128734,61195],{"class":94},[84,128736,1634],{"class":477},[84,128738,128739,128741,128743,128746,128748],{"class":86,"line":70},[84,128740,70894],{"class":94},[84,128742,51764],{"class":477},[84,128744,128745],{"class":94},"234",[84,128747,51819],{"class":473},[84,128749,1634],{"class":477},[84,128751,128752,128754,128756,128758,128760],{"class":86,"line":120},[84,128753,71114],{"class":94},[84,128755,51764],{"class":477},[84,128757,925],{"class":94},[84,128759,51819],{"class":473},[84,128761,1634],{"class":477},[84,128763,128764,128766,128768,128770,128772],{"class":86,"line":131},[84,128765,127482],{"class":94},[84,128767,51764],{"class":477},[84,128769,925],{"class":94},[84,128771,51819],{"class":473},[84,128773,1634],{"class":477},[84,128775,128776,128778,128780,128782,128784],{"class":86,"line":145},[84,128777,71149],{"class":94},[84,128779,51764],{"class":477},[84,128781,1424],{"class":94},[84,128783,51819],{"class":473},[84,128785,1634],{"class":477},[84,128787,128788,128790,128792,128794],{"class":86,"line":156},[84,128789,71231],{"class":94},[84,128791,51764],{"class":477},[84,128793,61168],{"class":94},[84,128795,1634],{"class":477},[84,128797,128798,128800,128802,128805],{"class":86,"line":164},[84,128799,71204],{"class":94},[84,128801,51764],{"class":477},[84,128803,128804],{"class":94},"#55585a",[84,128806,1634],{"class":477},[84,128808,128809],{"class":86,"line":175},[84,128810,1905],{"class":477},[84,128812,128813,128815,128817,128819],{"class":86,"line":185},[84,128814,128722],{"class":90},[84,128816,1739],{"class":51627},[84,128818,61266],{"class":90},[84,128820,15901],{"class":477},[84,128822,128823,128825,128827,128830],{"class":86,"line":195},[84,128824,71204],{"class":94},[84,128826,51764],{"class":477},[84,128828,128829],{"class":94},"#ff6700",[84,128831,1634],{"class":477},[84,128833,128834],{"class":86,"line":206},[84,128835,1905],{"class":477},[64,128837],{"style":126654,"src":128838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[35,128840,128841],{},"行高=盒子高度：实现文字的垂直居中",[35,128843,128844],{},"原理讲解：",[64,128846],{"style":126654,"src":128847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128849,128851],{"id":128850},"_82-css背景","8.2 css背景",[35,128853,128854],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[23,128856,128858],{"id":128857},"_821-背景颜色","8.2.1 背景颜色",[35,128860,128861],{},"background-color:颜色值;",[35,128863,128864],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[23,128866,128868],{"id":128867},"_822-背景图片","8.2.2 背景图片",[35,128870,128871],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[75,128873,128875],{"className":126798,"code":128874,"language":126800,"meta":66,"style":66},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[81,128876,128877,128883,128899],{"__ignoreMap":66},[84,128878,128879,128881],{"class":86,"line":87},[84,128880,51938],{"class":51627},[84,128882,15901],{"class":477},[84,128884,128885,128888,128890,128892,128894,128897],{"class":86,"line":98},[84,128886,128887],{"class":94},"  background-image",[84,128889,51764],{"class":477},[84,128891,62052],{"class":94},[84,128893,478],{"class":477},[84,128895,128896],{"class":5545},"images\u002Fbg.png",[84,128898,3048],{"class":477},[84,128900,128901],{"class":86,"line":70},[84,128902,1905],{"class":477},[612,128904,128905,128914],{},[615,128906,128907],{},[618,128908,128909,128912],{},[621,128910,128911],{"align":24065},"参数值",[621,128913,103022],{"align":24065},[659,128915,128916,128923],{},[618,128917,128918,128920],{},[664,128919,55063],{"align":24065},[664,128921,128922],{"align":24065},"无背景图（默认的）",[618,128924,128925,128927],{},[664,128926,62052],{"align":24065},[664,128928,128929],{"align":24065},"使用绝对或相对地址指定背景图像",[75,128931,128932],{"className":126798,"code":128874,"language":126800,"meta":66,"style":66},[81,128933,128934,128940,128954],{"__ignoreMap":66},[84,128935,128936,128938],{"class":86,"line":87},[84,128937,51938],{"class":51627},[84,128939,15901],{"class":477},[84,128941,128942,128944,128946,128948,128950,128952],{"class":86,"line":98},[84,128943,128887],{"class":94},[84,128945,51764],{"class":477},[84,128947,62052],{"class":94},[84,128949,478],{"class":477},[84,128951,128896],{"class":5545},[84,128953,3048],{"class":477},[84,128955,128956],{"class":86,"line":70},[84,128957,1905],{"class":477},[35,128959,128960],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[23,128962,128964],{"id":128963},"_823-背景平铺","8.2.3 背景平铺",[75,128966,128968],{"className":126798,"code":128967,"language":126800,"meta":66,"style":66},"div {\n  background-repeat: no-repeat;\n}\n",[81,128969,128970,128976,128987],{"__ignoreMap":66},[84,128971,128972,128974],{"class":86,"line":87},[84,128973,51938],{"class":51627},[84,128975,15901],{"class":477},[84,128977,128978,128981,128983,128985],{"class":86,"line":98},[84,128979,128980],{"class":94},"  background-repeat",[84,128982,51764],{"class":477},[84,128984,62062],{"class":94},[84,128986,1634],{"class":477},[84,128988,128989],{"class":86,"line":70},[84,128990,1905],{"class":477},[612,128992,128993,129001],{},[615,128994,128995],{},[618,128996,128997,128999],{},[621,128998,128911],{"align":24065},[621,129000,103022],{"align":24065},[659,129002,129003,129011,129018,129026],{},[618,129004,129005,129008],{},[664,129006,129007],{"align":24065},"repeat",[664,129009,129010],{"align":24065},"背景图像在纵向和横向上平铺（默认的）",[618,129012,129013,129015],{},[664,129014,62062],{"align":24065},[664,129016,129017],{"align":24065},"背景图像不平铺",[618,129019,129020,129023],{},[664,129021,129022],{"align":24065},"repeat-x",[664,129024,129025],{"align":24065},"背景图像在横向上平铺",[618,129027,129028,129031],{},[664,129029,129030],{"align":24065},"repeat-y",[664,129032,129033],{"align":24065},"背景图像在纵向平铺",[23,129035,129037],{"id":129036},"_824-背景图片位置","8.2.4 背景图片位置",[75,129039,129041],{"className":126798,"code":129040,"language":126800,"meta":66,"style":66},"\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",[81,129042,129043,129048,129054,129068,129072,129077,129083,129099,129103,129108,129114,129128],{"__ignoreMap":66},[84,129044,129045],{"class":86,"line":87},[84,129046,129047],{"class":328},"\u002F* 方位名词 *\u002F\n",[84,129049,129050,129052],{"class":86,"line":98},[84,129051,51938],{"class":51627},[84,129053,15901],{"class":477},[84,129055,129056,129059,129061,129063,129066],{"class":86,"line":70},[84,129057,129058],{"class":94},"  background-position",[84,129060,51764],{"class":477},[84,129062,51919],{"class":94},[84,129064,129065],{"class":94}," top",[84,129067,1634],{"class":477},[84,129069,129070],{"class":86,"line":120},[84,129071,1905],{"class":477},[84,129073,129074],{"class":86,"line":131},[84,129075,129076],{"class":328},"\u002F* 精确单位 *\u002F\n",[84,129078,129079,129081],{"class":86,"line":145},[84,129080,51938],{"class":51627},[84,129082,15901],{"class":477},[84,129084,129085,129087,129089,129091,129093,129095,129097],{"class":86,"line":156},[84,129086,129058],{"class":94},[84,129088,51764],{"class":477},[84,129090,1173],{"class":94},[84,129092,51819],{"class":473},[84,129094,57830],{"class":94},[84,129096,51819],{"class":473},[84,129098,1634],{"class":477},[84,129100,129101],{"class":86,"line":164},[84,129102,1905],{"class":477},[84,129104,129105],{"class":86,"line":175},[84,129106,129107],{"class":328},"\u002F* 混合单位 *\u002F\n",[84,129109,129110,129112],{"class":86,"line":185},[84,129111,51938],{"class":51627},[84,129113,15901],{"class":477},[84,129115,129116,129118,129120,129122,129124,129126],{"class":86,"line":195},[84,129117,129058],{"class":94},[84,129119,51764],{"class":477},[84,129121,1173],{"class":94},[84,129123,51819],{"class":473},[84,129125,17473],{"class":94},[84,129127,1634],{"class":477},[84,129129,129130],{"class":86,"line":206},[84,129131,1905],{"class":477},[35,129133,129134],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[612,129136,129137,129145],{},[615,129138,129139],{},[618,129140,129141,129143],{},[621,129142,128911],{"align":24065},[621,129144,26197],{"align":24065},[659,129146,129147,129154],{},[618,129148,129149,129151],{},[664,129150,52295],{"align":24065},[664,129152,129153],{"align":24065},"百分数|由浮点数和单位标识符组成的长度值",[618,129155,129156,129159],{},[664,129157,129158],{"align":24065},"position",[664,129160,129161],{"align":24065},"top|center|bottom|left|center|right 方位名词",[35,129163,129164],{},"其他说明：",[35,129166,129167],{},"①参数是方位名词",[35,129169,129170],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[35,129172,129173],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[35,129175,129176],{},"②参数是精确单位",[35,129178,129179],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[35,129181,129182],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[35,129184,129185],{},"③参数是混合单位",[35,129187,129188],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[23,129190,129192],{"id":129191},"_825-背景图片固定","8.2.5 背景图片固定",[75,129194,129196],{"className":126798,"code":129195,"language":126800,"meta":66,"style":66},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[81,129197,129198,129203,129209,129221,129225,129230,129236,129246],{"__ignoreMap":66},[84,129199,129200],{"class":86,"line":87},[84,129201,129202],{"class":328},"\u002F* 背景滚动（默认） *\u002F\n",[84,129204,129205,129207],{"class":86,"line":98},[84,129206,51938],{"class":51627},[84,129208,15901],{"class":477},[84,129210,129211,129214,129216,129219],{"class":86,"line":70},[84,129212,129213],{"class":94},"  background-attachment",[84,129215,51764],{"class":477},[84,129217,129218],{"class":94},"scroll",[84,129220,1634],{"class":477},[84,129222,129223],{"class":86,"line":120},[84,129224,1905],{"class":477},[84,129226,129227],{"class":86,"line":131},[84,129228,129229],{"class":328},"\u002F* 背景固定 *\u002F\n",[84,129231,129232,129234],{"class":86,"line":145},[84,129233,51938],{"class":51627},[84,129235,15901],{"class":477},[84,129237,129238,129240,129242,129244],{"class":86,"line":156},[84,129239,129213],{"class":94},[84,129241,51764],{"class":477},[84,129243,86559],{"class":94},[84,129245,1634],{"class":477},[84,129247,129248],{"class":86,"line":164},[84,129249,1905],{"class":477},[612,129251,129252,129261],{},[615,129253,129254],{},[618,129255,129256,129259],{},[621,129257,129258],{"align":24065},"参数",[621,129260,103022],{"align":24065},[659,129262,129263,129270],{},[618,129264,129265,129267],{},[664,129266,129218],{"align":24065},[664,129268,129269],{"align":24065},"背景图像是随对象内容滚动",[618,129271,129272,129274],{},[664,129273,86559],{"align":24065},[664,129275,129276],{"align":24065},"背景图像固定",[23,129278,129280],{"id":129279},"_826-背景样式合写","8.2.6 背景样式合写",[75,129282,129284],{"className":126798,"code":129283,"language":126800,"meta":66,"style":66},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[81,129285,129286,129291,129297,129325],{"__ignoreMap":66},[84,129287,129288],{"class":86,"line":87},[84,129289,129290],{"class":328},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[84,129292,129293,129295],{"class":86,"line":98},[84,129294,51938],{"class":51627},[84,129296,15901],{"class":477},[84,129298,129299,129301,129303,129305,129308,129310,129312,129314,129316,129319,129321,129323],{"class":86,"line":70},[84,129300,70937],{"class":94},[84,129302,51764],{"class":477},[84,129304,61168],{"class":94},[84,129306,129307],{"class":94}," url",[84,129309,478],{"class":477},[84,129311,128896],{"class":5545},[84,129313,14043],{"class":477},[84,129315,62062],{"class":94},[84,129317,129318],{"class":94}," fixed",[84,129320,17473],{"class":94},[84,129322,129065],{"class":94},[84,129324,1634],{"class":477},[84,129326,129327],{"class":86,"line":120},[84,129328,1905],{"class":477},[23,129330,129332],{"id":129331},"_827-背景色半透明","8.2.7 背景色半透明",[75,129334,129336],{"className":126798,"code":129335,"language":126800,"meta":66,"style":66},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[81,129337,129338,129344,129370],{"__ignoreMap":66},[84,129339,129340,129342],{"class":86,"line":87},[84,129341,51938],{"class":51627},[84,129343,15901],{"class":477},[84,129345,129346,129348,129350,129352,129354,129356,129358,129360,129362,129364,129366,129368],{"class":86,"line":98},[84,129347,70937],{"class":94},[84,129349,51764],{"class":477},[84,129351,55436],{"class":94},[84,129353,478],{"class":477},[84,129355,666],{"class":94},[84,129357,12764],{"class":477},[84,129359,666],{"class":94},[84,129361,12764],{"class":477},[84,129363,666],{"class":94},[84,129365,12764],{"class":477},[84,129367,100847],{"class":94},[84,129369,3048],{"class":477},[84,129371,129372],{"class":86,"line":70},[84,129373,1905],{"class":477},[35,129375,99722],{},[35,129377,129378],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[35,129380,129381],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[35,129383,129384],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[35,129386,129387],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[23,129389,129391],{"id":129390},"_828-总结","8.2.8 总结",[612,129393,129394,129405],{},[615,129395,129396],{},[618,129397,129398,129401,129403],{},[621,129399,129400],{"align":24065},"属性",[621,129402,103022],{"align":24065},[621,129404,627],{"align":24065},[659,129406,129407,129418,129429,129440,129451,129462,129473],{},[618,129408,129409,129412,129415],{},[664,129410,129411],{"align":24065},"background-color",[664,129413,129414],{"align":24065},"背景颜色",[664,129416,129417],{"align":24065},"预定义的颜色值\u002F十六进制\u002FRGB代码",[618,129419,129420,129423,129426],{},[664,129421,129422],{"align":24065},"background-image",[664,129424,129425],{"align":24065},"背景图片",[664,129427,129428],{"align":24065},"url(图片路径)",[618,129430,129431,129434,129437],{},[664,129432,129433],{"align":24065},"background-repeat",[664,129435,129436],{"align":24065},"是否平铺",[664,129438,129439],{"align":24065},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[618,129441,129442,129445,129448],{},[664,129443,129444],{"align":24065},"background-position",[664,129446,129447],{"align":24065},"背景位置",[664,129449,129450],{"align":24065},"length\u002Fposition 分别是x和y坐标",[618,129452,129453,129456,129459],{},[664,129454,129455],{"align":24065},"background-attachment",[664,129457,129458],{"align":24065},"背景附着",[664,129460,129461],{"align":24065},"scroll(背景滚动) \u002Ffixed (背景固定)",[618,129463,129464,129467,129470],{},[664,129465,129466],{"align":24065},"背景简写",[664,129468,129469],{"align":24065},"书写更简单",[664,129471,129472],{"align":24065},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[618,129474,129475,129478,129481],{},[664,129476,129477],{"align":24065},"背景半透明",[664,129479,129480],{"align":24065},"背景颜色半透明",[664,129482,129483],{"align":24065},"background: rgba(0,0,0.3); 后面必须是4个值",[35,129485,129486],{},"颜色渐变：",[64,129488],{"style":126654,"src":129489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[64,129491],{"style":126654,"src":129492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[23,129494,129496],{"id":129495},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[75,129498,129500],{"className":127545,"code":129499,"language":127547,"meta":66,"style":66},"\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",[81,129501,129502,129517,129536,129555,129574,129593,129612],{"__ignoreMap":66},[84,129503,129504,129506,129508,129510,129512,129515],{"class":86,"line":87},[84,129505,1383],{"class":477},[84,129507,51938],{"class":51627},[84,129509,53813],{"class":90},[84,129511,523],{"class":477},[84,129513,129514],{"class":104},"\"nav\"",[84,129516,51634],{"class":477},[84,129518,129519,129521,129523,129525,129527,129529,129532,129534],{"class":86,"line":98},[84,129520,52471],{"class":477},[84,129522,39],{"class":51627},[84,129524,61383],{"class":90},[84,129526,523],{"class":477},[84,129528,61388],{"class":104},[84,129530,129531],{"class":477},">五彩导航1\u003C\u002F",[84,129533,39],{"class":51627},[84,129535,51634],{"class":477},[84,129537,129538,129540,129542,129544,129546,129548,129551,129553],{"class":86,"line":70},[84,129539,52471],{"class":477},[84,129541,39],{"class":51627},[84,129543,61383],{"class":90},[84,129545,523],{"class":477},[84,129547,61388],{"class":104},[84,129549,129550],{"class":477},">五彩导航2\u003C\u002F",[84,129552,39],{"class":51627},[84,129554,51634],{"class":477},[84,129556,129557,129559,129561,129563,129565,129567,129570,129572],{"class":86,"line":120},[84,129558,52471],{"class":477},[84,129560,39],{"class":51627},[84,129562,61383],{"class":90},[84,129564,523],{"class":477},[84,129566,61388],{"class":104},[84,129568,129569],{"class":477},">五彩导航3\u003C\u002F",[84,129571,39],{"class":51627},[84,129573,51634],{"class":477},[84,129575,129576,129578,129580,129582,129584,129586,129589,129591],{"class":86,"line":131},[84,129577,52471],{"class":477},[84,129579,39],{"class":51627},[84,129581,61383],{"class":90},[84,129583,523],{"class":477},[84,129585,61388],{"class":104},[84,129587,129588],{"class":477},">五彩导航4\u003C\u002F",[84,129590,39],{"class":51627},[84,129592,51634],{"class":477},[84,129594,129595,129597,129599,129601,129603,129605,129608,129610],{"class":86,"line":145},[84,129596,52471],{"class":477},[84,129598,39],{"class":51627},[84,129600,61383],{"class":90},[84,129602,523],{"class":477},[84,129604,61388],{"class":104},[84,129606,129607],{"class":477},">五彩导航5\u003C\u002F",[84,129609,39],{"class":51627},[84,129611,51634],{"class":477},[84,129613,129614,129616,129618],{"class":86,"line":156},[84,129615,52112],{"class":477},[84,129617,51938],{"class":51627},[84,129619,51634],{"class":477},[75,129621,129623],{"className":126798,"code":129622,"language":126800,"meta":66,"style":66},".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",[81,129624,129625,129634,129644,129656,129668,129678,129690,129700,129704,129729,129752,129775,129798],{"__ignoreMap":66},[84,129626,129627,129630,129632],{"class":86,"line":87},[84,129628,129629],{"class":90},".nav",[84,129631,1739],{"class":51627},[84,129633,15901],{"class":477},[84,129635,129636,129638,129640,129642],{"class":86,"line":98},[84,129637,128414],{"class":94},[84,129639,51764],{"class":477},[84,129641,72709],{"class":94},[84,129643,1634],{"class":477},[84,129645,129646,129648,129650,129652,129654],{"class":86,"line":70},[84,129647,70894],{"class":94},[84,129649,51764],{"class":477},[84,129651,1290],{"class":94},[84,129653,51819],{"class":473},[84,129655,1634],{"class":477},[84,129657,129658,129660,129662,129664,129666],{"class":86,"line":120},[84,129659,71114],{"class":94},[84,129661,51764],{"class":477},[84,129663,1329],{"class":94},[84,129665,51819],{"class":473},[84,129667,1634],{"class":477},[84,129669,129670,129672,129674,129676],{"class":86,"line":131},[84,129671,70852],{"class":94},[84,129673,51764],{"class":477},[84,129675,51919],{"class":94},[84,129677,1634],{"class":477},[84,129679,129680,129682,129684,129686,129688],{"class":86,"line":145},[84,129681,127482],{"class":94},[84,129683,51764],{"class":477},[84,129685,1329],{"class":94},[84,129687,51819],{"class":473},[84,129689,1634],{"class":477},[84,129691,129692,129694,129696,129698],{"class":86,"line":156},[84,129693,71231],{"class":94},[84,129695,51764],{"class":477},[84,129697,61168],{"class":94},[84,129699,1634],{"class":477},[84,129701,129702],{"class":86,"line":164},[84,129703,1905],{"class":477},[84,129705,129706,129708,129710,129713,129715,129717,129720,129722,129724,129726],{"class":86,"line":175},[84,129707,129629],{"class":90},[84,129709,1739],{"class":51627},[84,129711,129712],{"class":90},":nth-child",[84,129714,478],{"class":477},[84,129716,692],{"class":94},[84,129718,129719],{"class":477},") { ",[84,129721,129411],{"class":94},[84,129723,51764],{"class":477},[84,129725,128829],{"class":94},[84,129727,129728],{"class":477},"; }\n",[84,129730,129731,129733,129735,129737,129739,129741,129743,129745,129747,129750],{"class":86,"line":185},[84,129732,129629],{"class":90},[84,129734,1739],{"class":51627},[84,129736,129712],{"class":90},[84,129738,478],{"class":477},[84,129740,553],{"class":94},[84,129742,129719],{"class":477},[84,129744,129411],{"class":94},[84,129746,51764],{"class":477},[84,129748,129749],{"class":94},"#ff0000",[84,129751,129728],{"class":477},[84,129753,129754,129756,129758,129760,129762,129764,129766,129768,129770,129773],{"class":86,"line":195},[84,129755,129629],{"class":90},[84,129757,1739],{"class":51627},[84,129759,129712],{"class":90},[84,129761,478],{"class":477},[84,129763,547],{"class":94},[84,129765,129719],{"class":477},[84,129767,129411],{"class":94},[84,129769,51764],{"class":477},[84,129771,129772],{"class":94},"#00a4ff",[84,129774,129728],{"class":477},[84,129776,129777,129779,129781,129783,129785,129787,129789,129791,129793,129796],{"class":86,"line":206},[84,129778,129629],{"class":90},[84,129780,1739],{"class":51627},[84,129782,129712],{"class":90},[84,129784,478],{"class":477},[84,129786,140],{"class":94},[84,129788,129719],{"class":477},[84,129790,129411],{"class":94},[84,129792,51764],{"class":477},[84,129794,129795],{"class":94},"#ff00ff",[84,129797,129728],{"class":477},[84,129799,129800,129802,129804,129806,129808,129810,129812,129814,129816,129819],{"class":86,"line":217},[84,129801,129629],{"class":90},[84,129803,1739],{"class":51627},[84,129805,129712],{"class":90},[84,129807,478],{"class":477},[84,129809,792],{"class":94},[84,129811,129719],{"class":477},[84,129813,129411],{"class":94},[84,129815,51764],{"class":477},[84,129817,129818],{"class":94},"#00ff00",[84,129820,129728],{"class":477},[14,129822,129824],{"id":129823},"_83-css三大特性","8.3 css三大特性",[23,129826,129828],{"id":129827},"_831-层叠性","8.3.1 层叠性",[35,129830,129831],{},"为了解决样式冲突问题",[35,129833,129834],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[35,129836,129837],{},"   ②样式不冲突，不会层叠",[23,129839,129841],{"id":129840},"_832-继承性","8.3.2 继承性",[35,129843,129844],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[35,129846,129847],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[75,129849,129851],{"className":126798,"code":129850,"language":126800,"meta":66,"style":66},"p {\n  color: #333;\n}\n",[81,129852,129853,129859,129869],{"__ignoreMap":66},[84,129854,129855,129857],{"class":86,"line":87},[84,129856,35],{"class":51627},[84,129858,15901],{"class":477},[84,129860,129861,129863,129865,129867],{"class":86,"line":98},[84,129862,71231],{"class":94},[84,129864,51764],{"class":477},[84,129866,62695],{"class":94},[84,129868,1634],{"class":477},[84,129870,129871],{"class":86,"line":70},[84,129872,1905],{"class":477},[64,129874],{"style":126654,"src":129875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[35,129877,129878],{},"解释：①行高可以跟单位也可以不跟单位",[35,129880,129881],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[35,129883,129884],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[35,129886,129887],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[23,129889,129891],{"id":129890},"_833-优先级","8.3.3 优先级",[28,129893,129894,129897],{},[31,129895,129896],{},"选择器相同，则执行层叠性",[31,129898,129899],{},"选择器不同，则根据选择器权重执行",[612,129901,129902,129912],{},[615,129903,129904],{},[618,129905,129906,129909],{},[621,129907,129908],{"align":24065},"选择器",[621,129910,129911],{"align":24065},"选择器权重",[659,129913,129914,129922,129930,129938,129946,129954],{},[618,129915,129916,129919],{},[664,129917,129918],{"align":24065},"继承 或者*",[664,129920,129921],{"align":24065},"0，0，0，0",[618,129923,129924,129927],{},[664,129925,129926],{"align":24065},"标签选择器",[664,129928,129929],{"align":24065},"0，0，0，1",[618,129931,129932,129935],{},[664,129933,129934],{"align":24065},"类选择器，伪类选择器",[664,129936,129937],{"align":24065},"0，0，1，0",[618,129939,129940,129943],{},[664,129941,129942],{"align":24065},"ID选择器",[664,129944,129945],{"align":24065},"0，1，0，0",[618,129947,129948,129951],{},[664,129949,129950],{"align":24065},"行内样式",[664,129952,129953],{"align":24065},"1，0，0，0",[618,129955,129956,129959],{},[664,129957,129958],{"align":24065},"！important",[664,129960,129961],{"align":24065},"无穷大",[35,129963,129964],{},"! important用法：",[75,129966,129968],{"className":126798,"code":129967,"language":126800,"meta":66,"style":66},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[81,129969,129970,129975,129981,129994,129998,130003,130009,130019],{"__ignoreMap":66},[84,129971,129972],{"class":86,"line":87},[84,129973,129974],{"class":328},"\u002F* !important 拥有最高优先级 *\u002F\n",[84,129976,129977,129979],{"class":86,"line":98},[84,129978,51938],{"class":51627},[84,129980,15901],{"class":477},[84,129982,129983,129985,129987,129989,129992],{"class":86,"line":70},[84,129984,71231],{"class":94},[84,129986,51764],{"class":477},[84,129988,51972],{"class":94},[84,129990,129991],{"class":473}," !important",[84,129993,1634],{"class":477},[84,129995,129996],{"class":86,"line":120},[84,129997,1905],{"class":477},[84,129999,130000],{"class":86,"line":131},[84,130001,130002],{"class":328},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[84,130004,130005,130007],{"class":86,"line":145},[84,130006,51938],{"class":51627},[84,130008,15901],{"class":477},[84,130010,130011,130013,130015,130017],{"class":86,"line":156},[84,130012,71231],{"class":94},[84,130014,51764],{"class":477},[84,130016,57747],{"class":94},[84,130018,1634],{"class":477},[84,130020,130021],{"class":86,"line":164},[84,130022,1905],{"class":477},[35,130024,130025],{},"优先级注意点：",[35,130027,130028],{},"①权重是有4组数字组成,但是不会有进位",[35,130030,130031],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[35,130033,130034],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[35,130036,130037],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[35,130039,130040],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[35,130042,130043],{},"⑥复合选择器",[612,130045,130046,130056],{},[615,130047,130048],{},[618,130049,130050,130053],{},[621,130051,130052],{"align":24065},"div ul li",[621,130054,130055],{"align":24065},"0,0,0,3",[659,130057,130058,130066,130074],{},[618,130059,130060,130063],{},[664,130061,130062],{"align":24065},".nav ul li",[664,130064,130065],{"align":24065},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[618,130067,130068,130071],{},[664,130069,130070],{"align":24065},"a:hover",[664,130072,130073],{"align":24065},"0,0,1,1",[618,130075,130076,130079],{},[664,130077,130078],{"align":24065},".nav a",[664,130080,130073],{"align":24065},[389,130082,130083],{},"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":66,"searchDepth":98,"depth":98,"links":130085},[130086,130094,130105],{"id":128194,"depth":98,"text":128195,"children":130087},[130088,130089,130090,130091,130092,130093],{"id":128207,"depth":70,"text":128208},{"id":128279,"depth":70,"text":128280},{"id":128351,"depth":70,"text":128352},{"id":128382,"depth":70,"text":128383},{"id":128389,"depth":70,"text":128390},{"id":128542,"depth":70,"text":128543},{"id":128850,"depth":98,"text":128851,"children":130095},[130096,130097,130098,130099,130100,130101,130102,130103,130104],{"id":128857,"depth":70,"text":128858},{"id":128867,"depth":70,"text":128868},{"id":128963,"depth":70,"text":128964},{"id":129036,"depth":70,"text":129037},{"id":129191,"depth":70,"text":129192},{"id":129279,"depth":70,"text":129280},{"id":129331,"depth":70,"text":129332},{"id":129390,"depth":70,"text":129391},{"id":129495,"depth":70,"text":129496},{"id":129823,"depth":98,"text":129824,"children":130106},[130107,130108,130109],{"id":129827,"depth":70,"text":129828},{"id":129840,"depth":70,"text":129841},{"id":129890,"depth":70,"text":129891},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128186,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130116,"title":130117,"body":130118,"description":400,"extension":401,"meta":131708,"navigation":403,"path":131709,"seo":131710,"stem":131711,"__hash__":131712},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130119,"toc":131687},[130120,130123,130127,130130,130133,130136,130139,130142,130145,130148,130152,130160,130197,130233,130236,130250,130255,130289,130292,130385,130390,130393,130423,130426,130431,130439,130443,130450,130496,130540,130545,130548,130551,130554,130557,130560,130563,130565,130568,130572,130577,130621,130626,130629,130632,130669,130674,130677,130680,130683,130686,130718,130721,130724,130727,130759,130762,130765,130768,130772,130775,130807,130810,130814,130834,130837,130845,130848,130852,130857,130860,130892,130897,130900,130938,130942,130947,130950,130953,130984,130987,131004,131009,131061,131121,131126,131180,131218,131222,131226,131229,131233,131241,131244,131246,131257,131262,131310,131344,131347,131350,131353,131356,131400,131403,131406,131409,131412,131415,131418,131462,131465,131468,131471,131474,131477,131480,131486,131489,131533,131536,131539,131542,131545,131548,131592,131595,131597,131600,131604,131608,131646,131650,131653,131656,131660,131668,131672,131675,131678,131681,131684],[10,130121,130117],{"id":130122},"_9-css盒模型浮动与切图",[14,130124,130126],{"id":130125},"_91-盒子模型","9.1 盒子模型",[35,130128,130129],{},"利用盒子来设计网页",[35,130131,130132],{},"盒子包含：边框、外边距、内边距、实际内容",[35,130134,130135],{},"网页布局设置：",[35,130137,130138],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[35,130140,130141],{},"②利用css设置好盒子样式，然后摆放到相应位置",[35,130143,130144],{},"③往盒子里装内容",[64,130146],{"style":126654,"src":130147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[23,130149,130151],{"id":130150},"_911-边框border","9.1.1 边框（border）",[28,130153,130154,130157],{},[31,130155,130156],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[31,130158,130159],{},"语法",[75,130161,130163],{"className":126798,"code":130162,"language":126800,"meta":66,"style":66},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[81,130164,130165,130170,130176,130193],{"__ignoreMap":66},[84,130166,130167],{"class":86,"line":87},[84,130168,130169],{"class":328},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[84,130171,130172,130174],{"class":86,"line":98},[84,130173,51938],{"class":51627},[84,130175,15901],{"class":477},[84,130177,130178,130180,130182,130184,130186,130188,130191],{"class":86,"line":70},[84,130179,71222],{"class":94},[84,130181,51764],{"class":477},[84,130183,692],{"class":94},[84,130185,51819],{"class":473},[84,130187,51848],{"class":94},[84,130189,130190],{"class":94}," #ccc",[84,130192,1634],{"class":477},[84,130194,130195],{"class":86,"line":120},[84,130196,1905],{"class":477},[612,130198,130199,130207],{},[615,130200,130201],{},[618,130202,130203,130205],{},[621,130204,129400],{"align":24065},[621,130206,103022],{"align":24065},[659,130208,130209,130217,130225],{},[618,130210,130211,130214],{},[664,130212,130213],{"align":24065},"border-width",[664,130215,130216],{"align":24065},"定义边框粗细，单位是px",[618,130218,130219,130222],{},[664,130220,130221],{"align":24065},"border-style",[664,130223,130224],{"align":24065},"边框的样式",[618,130226,130227,130230],{},[664,130228,130229],{"align":24065},"border-color",[664,130231,130232],{"align":24065},"边框的颜色",[35,130234,130235],{},"边框样式 border-style 可以设置如下值：",[1480,130237,130238,130241,130244,130247],{},[31,130239,130240],{},"none：没有边框即忽略所有边框的宽度（默认值）",[31,130242,130243],{},"solid：边框为单实线(最为常用的)",[31,130245,130246],{},"dashed：边框为虚线",[31,130248,130249],{},"dotted：边框为点线",[28,130251,130252],{"start":70},[31,130253,130254],{},"边框的合写分写",[75,130256,130257],{"className":126798,"code":130162,"language":126800,"meta":66,"style":66},[81,130258,130259,130263,130269,130285],{"__ignoreMap":66},[84,130260,130261],{"class":86,"line":87},[84,130262,130169],{"class":328},[84,130264,130265,130267],{"class":86,"line":98},[84,130266,51938],{"class":51627},[84,130268,15901],{"class":477},[84,130270,130271,130273,130275,130277,130279,130281,130283],{"class":86,"line":70},[84,130272,71222],{"class":94},[84,130274,51764],{"class":477},[84,130276,692],{"class":94},[84,130278,51819],{"class":473},[84,130280,51848],{"class":94},[84,130282,130190],{"class":94},[84,130284,1634],{"class":477},[84,130286,130287],{"class":86,"line":120},[84,130288,1905],{"class":477},[35,130290,130291],{},"边框分开写法：",[75,130293,130295],{"className":126798,"code":130294,"language":126800,"meta":66,"style":66},"\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",[81,130296,130297,130302,130308,130326,130344,130363,130381],{"__ignoreMap":66},[84,130298,130299],{"class":86,"line":87},[84,130300,130301],{"class":328},"\u002F* 边框分开写法 *\u002F\n",[84,130303,130304,130306],{"class":86,"line":98},[84,130305,51938],{"class":51627},[84,130307,15901],{"class":477},[84,130309,130310,130313,130315,130317,130319,130321,130324],{"class":86,"line":70},[84,130311,130312],{"class":94},"  border-top",[84,130314,51764],{"class":477},[84,130316,692],{"class":94},[84,130318,51819],{"class":473},[84,130320,51848],{"class":94},[84,130322,130323],{"class":94}," #000",[84,130325,1634],{"class":477},[84,130327,130328,130331,130333,130335,130337,130339,130342],{"class":86,"line":120},[84,130329,130330],{"class":94},"  border-right",[84,130332,51764],{"class":477},[84,130334,553],{"class":94},[84,130336,51819],{"class":473},[84,130338,62567],{"class":94},[84,130340,130341],{"class":94}," #333",[84,130343,1634],{"class":477},[84,130345,130346,130349,130351,130353,130355,130358,130361],{"class":86,"line":131},[84,130347,130348],{"class":94},"  border-bottom",[84,130350,51764],{"class":477},[84,130352,547],{"class":94},[84,130354,51819],{"class":473},[84,130356,130357],{"class":94}," dotted",[84,130359,130360],{"class":94}," #666",[84,130362,1634],{"class":477},[84,130364,130365,130368,130370,130372,130374,130376,130379],{"class":86,"line":145},[84,130366,130367],{"class":94},"  border-left",[84,130369,51764],{"class":477},[84,130371,692],{"class":94},[84,130373,51819],{"class":473},[84,130375,51848],{"class":94},[84,130377,130378],{"class":94}," #999",[84,130380,1634],{"class":477},[84,130382,130383],{"class":86,"line":156},[84,130384,1905],{"class":477},[28,130386,130387],{"start":120},[31,130388,130389],{},"表格的细线边框",[35,130391,130392],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[75,130394,130396],{"className":126798,"code":130395,"language":126800,"meta":66,"style":66},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[81,130397,130398,130403,130409,130419],{"__ignoreMap":66},[84,130399,130400],{"class":86,"line":87},[84,130401,130402],{"class":328},"\u002F* 表格细线边框合并 *\u002F\n",[84,130404,130405,130407],{"class":86,"line":98},[84,130406,612],{"class":51627},[84,130408,15901],{"class":477},[84,130410,130411,130413,130415,130417],{"class":86,"line":70},[84,130412,70904],{"class":94},[84,130414,51764],{"class":477},[84,130416,65361],{"class":94},[84,130418,1634],{"class":477},[84,130420,130421],{"class":86,"line":120},[84,130422,1905],{"class":477},[35,130424,130425],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[28,130427,130428],{"start":131},[31,130429,130430],{},"解决边框额外增加盒子的实际大小的方法：",[1480,130432,130433,130436],{},[31,130434,130435],{},"测量盒子大小的时候,不量边框",[31,130437,130438],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[23,130440,130442],{"id":130441},"_912-内边距","9.1.2 内边距",[28,130444,130445,130448],{},[31,130446,130447],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[31,130449,130159],{},[612,130451,130452,130462],{},[615,130453,130454],{},[618,130455,130456,130459],{},[621,130457,130458],{"align":24065},"值的个数",[621,130460,130461],{"align":24065},"表达意思",[659,130463,130464,130472,130480,130488],{},[618,130465,130466,130469],{},[664,130467,130468],{"align":24065},"padding: 5px;",[664,130470,130471],{"align":24065},"1个值，代表上下左右都有5个元素",[618,130473,130474,130477],{},[664,130475,130476],{"align":24065},"padding: 5px 10px;",[664,130478,130479],{"align":24065},"2个值，代表上下内边距为5像素，左右内边距为10像素",[618,130481,130482,130485],{},[664,130483,130484],{"align":24065},"padding: 5px 10px 20px;",[664,130486,130487],{"align":24065},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[618,130489,130490,130493],{},[664,130491,130492],{"align":24065},"padding: 5px 10px 20px 30px;",[664,130494,130495],{"align":24065},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[612,130497,130498,130506],{},[615,130499,130500],{},[618,130501,130502,130504],{},[621,130503,129400],{"align":24065},[621,130505,103022],{"align":24065},[659,130507,130508,130516,130524,130532],{},[618,130509,130510,130513],{},[664,130511,130512],{"align":24065},"padding-left",[664,130514,130515],{"align":24065},"左内边距",[618,130517,130518,130521],{},[664,130519,130520],{"align":24065},"padding-right",[664,130522,130523],{"align":24065},"右内边距",[618,130525,130526,130529],{},[664,130527,130528],{"align":24065},"padding-top",[664,130530,130531],{"align":24065},"上内边距",[618,130533,130534,130537],{},[664,130535,130536],{"align":24065},"padding-bottom",[664,130538,130539],{"align":24065},"下内边距",[28,130541,130542],{"start":70},[31,130543,130544],{},"内边距会影响盒子的实际大小",[35,130546,130547],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[35,130549,130550],{},"①内容和边框有了距离，添加了内边距",[35,130552,130553],{},"②padding影响了盒子实际大小",[35,130555,130556],{},"内边距对盒子大小的影响：",[35,130558,130559],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[35,130561,130562],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[35,130564,95546],{},[35,130566,130567],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[23,130569,130571],{"id":130570},"_913-外边距","9.1.3 外边距",[28,130573,130574],{},[31,130575,130576],{},"控制盒子与盒子之间的距离",[612,130578,130579,130587],{},[615,130580,130581],{},[618,130582,130583,130585],{},[621,130584,129400],{"align":24065},[621,130586,103022],{"align":24065},[659,130588,130589,130597,130605,130613],{},[618,130590,130591,130594],{},[664,130592,130593],{"align":24065},"margin-left",[664,130595,130596],{"align":24065},"左外边距",[618,130598,130599,130602],{},[664,130600,130601],{"align":24065},"margin-right",[664,130603,130604],{"align":24065},"右外边距",[618,130606,130607,130610],{},[664,130608,130609],{"align":24065},"margin-top",[664,130611,130612],{"align":24065},"上外边距",[618,130614,130615,130618],{},[664,130616,130617],{"align":24065},"margin-bottom",[664,130619,130620],{"align":24065},"下外边距",[28,130622,130623],{"start":98},[31,130624,130625],{},"外边距可以让块级盒子水平居中的两个条件：",[35,130627,130628],{},"①盒子必须指定了宽度（width）",[35,130630,130631],{},"②盒子左右的外边距都设置为 auto",[75,130633,130635],{"className":126798,"code":130634,"language":126800,"meta":66,"style":66},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[81,130636,130637,130642,130649,130665],{"__ignoreMap":66},[84,130638,130639],{"class":86,"line":87},[84,130640,130641],{"class":328},"\u002F* margin 复合写法（同上） *\u002F\n",[84,130643,130644,130647],{"class":86,"line":98},[84,130645,130646],{"class":90},".box",[84,130648,15901],{"class":477},[84,130650,130651,130653,130655,130657,130659,130662],{"class":86,"line":70},[84,130652,70796],{"class":94},[84,130654,51764],{"class":477},[84,130656,666],{"class":94},[84,130658,51883],{"class":94},[84,130660,130661],{"class":477},";  ",[84,130663,130664],{"class":328},"\u002F* 块级盒子水平居中 *\u002F\n",[84,130666,130667],{"class":86,"line":120},[84,130668,1905],{"class":477},[28,130670,130671],{"start":70},[31,130672,130673],{},"外边距塌陷问题",[35,130675,130676],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[64,130678],{"style":126654,"src":130679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[35,130681,130682],{},"解决方案：",[35,130684,130685],{},"①可以为父亲元素定义上边距",[75,130687,130688],{"className":126798,"code":130634,"language":126800,"meta":66,"style":66},[81,130689,130690,130694,130700,130714],{"__ignoreMap":66},[84,130691,130692],{"class":86,"line":87},[84,130693,130641],{"class":328},[84,130695,130696,130698],{"class":86,"line":98},[84,130697,130646],{"class":90},[84,130699,15901],{"class":477},[84,130701,130702,130704,130706,130708,130710,130712],{"class":86,"line":70},[84,130703,70796],{"class":94},[84,130705,51764],{"class":477},[84,130707,666],{"class":94},[84,130709,51883],{"class":94},[84,130711,130661],{"class":477},[84,130713,130664],{"class":328},[84,130715,130716],{"class":86,"line":120},[84,130717,1905],{"class":477},[35,130719,130720],{},"②可以为父亲元素定义上内边距",[35,130722,130723],{},"③可以为父亲元素添加overflow:hidden",[64,130725],{"style":126654,"src":130726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[75,130728,130729],{"className":126798,"code":130634,"language":126800,"meta":66,"style":66},[81,130730,130731,130735,130741,130755],{"__ignoreMap":66},[84,130732,130733],{"class":86,"line":87},[84,130734,130641],{"class":328},[84,130736,130737,130739],{"class":86,"line":98},[84,130738,130646],{"class":90},[84,130740,15901],{"class":477},[84,130742,130743,130745,130747,130749,130751,130753],{"class":86,"line":70},[84,130744,70796],{"class":94},[84,130746,51764],{"class":477},[84,130748,666],{"class":94},[84,130750,51883],{"class":94},[84,130752,130661],{"class":477},[84,130754,130664],{"class":328},[84,130756,130757],{"class":86,"line":120},[84,130758,1905],{"class":477},[64,130760],{"style":126654,"src":130761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[35,130763,130764],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[35,130766,130767],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[23,130769,130771],{"id":130770},"_914-清除内外边距","9.1.4 清除内外边距",[35,130773,130774],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[75,130776,130777],{"className":126798,"code":130634,"language":126800,"meta":66,"style":66},[81,130778,130779,130783,130789,130803],{"__ignoreMap":66},[84,130780,130781],{"class":86,"line":87},[84,130782,130641],{"class":328},[84,130784,130785,130787],{"class":86,"line":98},[84,130786,130646],{"class":90},[84,130788,15901],{"class":477},[84,130790,130791,130793,130795,130797,130799,130801],{"class":86,"line":70},[84,130792,70796],{"class":94},[84,130794,51764],{"class":477},[84,130796,666],{"class":94},[84,130798,51883],{"class":94},[84,130800,130661],{"class":477},[84,130802,130664],{"class":328},[84,130804,130805],{"class":86,"line":120},[84,130806,1905],{"class":477},[35,130808,130809],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[23,130811,130813],{"id":130812},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1480,130815,130816,130819,130822,130825,130828,130831],{},[31,130817,130818],{},"文件→打开 ：可以打开我们要测量的图片",[31,130820,130821],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[31,130823,130824],{},"右击标尺，把里面的单位改为像素",[31,130826,130827],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[31,130829,130830],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[31,130832,130833],{},"用选区拖动 可以测量大小",[64,130835],{"style":126654,"src":130836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1480,130838,130839,130842],{},[31,130840,130841],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[31,130843,130844],{},"吸管取色工具",[64,130846],{"style":126654,"src":130847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[23,130849,130851],{"id":130850},"_916-案例","9.1.6 案例",[28,130853,130854],{},[31,130855,130856],{},"小米商品",[64,130858],{"style":126654,"src":130859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[75,130861,130862],{"className":126798,"code":130634,"language":126800,"meta":66,"style":66},[81,130863,130864,130868,130874,130888],{"__ignoreMap":66},[84,130865,130866],{"class":86,"line":87},[84,130867,130641],{"class":328},[84,130869,130870,130872],{"class":86,"line":98},[84,130871,130646],{"class":90},[84,130873,15901],{"class":477},[84,130875,130876,130878,130880,130882,130884,130886],{"class":86,"line":70},[84,130877,70796],{"class":94},[84,130879,51764],{"class":477},[84,130881,666],{"class":94},[84,130883,51883],{"class":94},[84,130885,130661],{"class":477},[84,130887,130664],{"class":328},[84,130889,130890],{"class":86,"line":120},[84,130891,1905],{"class":477},[28,130893,130894],{"start":98},[31,130895,130896],{},"快报模块",[64,130898],{"style":126654,"src":130899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[75,130901,130903],{"className":127545,"code":130902,"language":127547,"meta":66,"style":66},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[81,130904,130905,130910,130925,130930],{"__ignoreMap":66},[84,130906,130907],{"class":86,"line":87},[84,130908,130909],{"class":328},"\u003C!-- HTML 代码示例 -->\n",[84,130911,130912,130914,130916,130918,130920,130923],{"class":86,"line":98},[84,130913,1383],{"class":477},[84,130915,51938],{"class":51627},[84,130917,53813],{"class":90},[84,130919,523],{"class":477},[84,130921,130922],{"class":104},"\"example\"",[84,130924,51634],{"class":477},[84,130926,130927],{"class":86,"line":70},[84,130928,130929],{"class":477},"  示例内容\n",[84,130931,130932,130934,130936],{"class":86,"line":120},[84,130933,52112],{"class":477},[84,130935,51938],{"class":51627},[84,130937,51634],{"class":477},[23,130939,130941],{"id":130940},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[28,130943,130944],{},[31,130945,130946],{},"圆角边框",[35,130948,130949],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[64,130951],{"style":126654,"src":130952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[75,130954,130956],{"className":126798,"code":130955,"language":126800,"meta":66,"style":66},"div {\n  border: 1px solid #ccc;\n}\n",[81,130957,130958,130964,130980],{"__ignoreMap":66},[84,130959,130960,130962],{"class":86,"line":87},[84,130961,51938],{"class":51627},[84,130963,15901],{"class":477},[84,130965,130966,130968,130970,130972,130974,130976,130978],{"class":86,"line":98},[84,130967,71222],{"class":94},[84,130969,51764],{"class":477},[84,130971,692],{"class":94},[84,130973,51819],{"class":473},[84,130975,51848],{"class":94},[84,130977,130190],{"class":94},[84,130979,1634],{"class":477},[84,130981,130982],{"class":86,"line":70},[84,130983,1905],{"class":477},[35,130985,130986],{},"解释:",[1480,130988,130989,130992,130995,130998,131001],{},[31,130990,130991],{},"参数值可以为数值或百分比的形式",[31,130993,130994],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[31,130996,130997],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[31,130999,131000],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[31,131002,131003],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[28,131005,131006],{"start":98},[31,131007,131008],{},"盒子阴影",[75,131010,131012],{"className":126798,"code":131011,"language":126800,"meta":66,"style":66},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[81,131013,131014,131020,131057],{"__ignoreMap":66},[84,131015,131016,131018],{"class":86,"line":87},[84,131017,51938],{"class":51627},[84,131019,15901],{"class":477},[84,131021,131022,131025,131027,131029,131031,131033,131035,131037,131039,131041,131043,131045,131047,131049,131051,131053,131055],{"class":86,"line":98},[84,131023,131024],{"class":94},"  box-shadow",[84,131026,51764],{"class":477},[84,131028,666],{"class":94},[84,131030,15084],{"class":94},[84,131032,51819],{"class":473},[84,131034,2367],{"class":94},[84,131036,51819],{"class":473},[84,131038,79093],{"class":94},[84,131040,478],{"class":477},[84,131042,666],{"class":94},[84,131044,12764],{"class":477},[84,131046,666],{"class":94},[84,131048,12764],{"class":477},[84,131050,666],{"class":94},[84,131052,12764],{"class":477},[84,131054,86536],{"class":94},[84,131056,3048],{"class":477},[84,131058,131059],{"class":86,"line":70},[84,131060,1905],{"class":477},[612,131062,131063,131071],{},[615,131064,131065],{},[618,131066,131067,131069],{},[621,131068,627],{"align":24065},[621,131070,27816],{"align":24065},[659,131072,131073,131081,131089,131097,131105,131113],{},[618,131074,131075,131078],{},[664,131076,131077],{"align":24065},"h-shadow",[664,131079,131080],{"align":24065},"必需,水平阴影的位置,允许负值",[618,131082,131083,131086],{},[664,131084,131085],{"align":24065},"v-shadow",[664,131087,131088],{"align":24065},"必需,垂直阴影的位置,允许负值",[618,131090,131091,131094],{},[664,131092,131093],{"align":24065},"blur",[664,131095,131096],{"align":24065},"可选,模糊距离,就是影子的虚实",[618,131098,131099,131102],{},[664,131100,131101],{"align":24065},"spread",[664,131103,131104],{"align":24065},"可选,阴影尺寸",[618,131106,131107,131110],{},[664,131108,131109],{"align":24065},"color",[664,131111,131112],{"align":24065},"可选,阴影的颜色",[618,131114,131115,131118],{},[664,131116,131117],{"align":24065},"inset",[664,131119,131120],{"align":24065},"可选,将外部阴影(outset)改为内部阴影",[28,131122,131123],{"start":70},[31,131124,131125],{},"文字阴影",[75,131127,131129],{"className":126798,"code":131128,"language":126800,"meta":66,"style":66},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[81,131130,131131,131137,131176],{"__ignoreMap":66},[84,131132,131133,131135],{"class":86,"line":87},[84,131134,35],{"class":51627},[84,131136,15901],{"class":477},[84,131138,131139,131142,131144,131146,131148,131150,131152,131154,131156,131158,131160,131162,131164,131166,131168,131170,131172,131174],{"class":86,"line":98},[84,131140,131141],{"class":94},"  text-shadow",[84,131143,51764],{"class":477},[84,131145,692],{"class":94},[84,131147,51819],{"class":473},[84,131149,25446],{"class":94},[84,131151,51819],{"class":473},[84,131153,15084],{"class":94},[84,131155,51819],{"class":473},[84,131157,79093],{"class":94},[84,131159,478],{"class":477},[84,131161,666],{"class":94},[84,131163,12764],{"class":477},[84,131165,666],{"class":94},[84,131167,12764],{"class":477},[84,131169,666],{"class":94},[84,131171,12764],{"class":477},[84,131173,100847],{"class":94},[84,131175,3048],{"class":477},[84,131177,131178],{"class":86,"line":70},[84,131179,1905],{"class":477},[612,131181,131182,131190],{},[615,131183,131184],{},[618,131185,131186,131188],{},[621,131187,627],{"align":24065},[621,131189,27816],{"align":24065},[659,131191,131192,131198,131205,131212],{},[618,131193,131194,131196],{},[664,131195,131077],{"align":24065},[664,131197,131080],{"align":24065},[618,131199,131200,131202],{},[664,131201,131085],{"align":24065},[664,131203,131204],{"align":24065},"必需,垂直阴影位置,允许负值",[618,131206,131207,131209],{},[664,131208,131093],{"align":24065},[664,131210,131211],{"align":24065},"可选,模糊的距离",[618,131213,131214,131216],{},[664,131215,131109],{"align":24065},[664,131217,131112],{"align":24065},[14,131219,131221],{"id":131220},"_92-浮动","9.2 浮动",[23,131223,131225],{"id":131224},"_921-浮动介绍","9.2.1 浮动介绍",[35,131227,131228],{},"在16.2中详细介绍",[23,131230,131232],{"id":131231},"_922-清除浮动","9.2.2 清除浮动",[28,131234,131235,131238],{},[31,131236,131237],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[31,131239,131240],{},"清除浮动的本质",[35,131242,131243],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[35,131245,9354],{},[1480,131247,131248,131251,131254],{},[31,131249,131250],{},"如果父盒子本身有高度，则不需要清除浮动",[31,131252,131253],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[31,131255,131256],{},"父级有了高度，就不会影响下面的标准流了",[28,131258,131259],{"start":70},[31,131260,131261],{},"清除浮动样式",[75,131263,131265],{"className":126798,"code":131264,"language":126800,"meta":66,"style":66},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[81,131266,131267,131274,131285,131289,131296,131306],{"__ignoreMap":66},[84,131268,131269,131272],{"class":86,"line":87},[84,131270,131271],{"class":90},".left",[84,131273,15901],{"class":477},[84,131275,131276,131279,131281,131283],{"class":86,"line":98},[84,131277,131278],{"class":94},"  float",[84,131280,51764],{"class":477},[84,131282,24065],{"class":94},[84,131284,1634],{"class":477},[84,131286,131287],{"class":86,"line":70},[84,131288,1905],{"class":477},[84,131290,131291,131294],{"class":86,"line":120},[84,131292,131293],{"class":90},".right",[84,131295,15901],{"class":477},[84,131297,131298,131300,131302,131304],{"class":86,"line":131},[84,131299,131278],{"class":94},[84,131301,51764],{"class":477},[84,131303,72848],{"class":94},[84,131305,1634],{"class":477},[84,131307,131308],{"class":86,"line":145},[84,131309,1905],{"class":477},[612,131311,131312,131320],{},[615,131313,131314],{},[618,131315,131316,131318],{},[621,131317,127262],{"align":24065},[621,131319,27816],{"align":24065},[659,131321,131322,131329,131336],{},[618,131323,131324,131326],{},[664,131325,24065],{"align":24065},[664,131327,131328],{"align":24065},"不允许左侧有浮动元素（清除左侧浮动的影响）",[618,131330,131331,131333],{},[664,131332,72848],{"align":24065},[664,131334,131335],{"align":24065},"不允许右侧有浮动元素（清除右侧浮动的影响）",[618,131337,131338,131341],{},[664,131339,131340],{"align":24065},"both",[664,131342,131343],{"align":24065},"同时清除左右侧浮动的影响",[35,131345,131346],{},"法一",[35,131348,131349],{},"额外标签法也称为隔墙法",[35,131351,131352],{},"使用方式：",[35,131354,131355],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[75,131357,131358],{"className":126798,"code":131264,"language":126800,"meta":66,"style":66},[81,131359,131360,131366,131376,131380,131386,131396],{"__ignoreMap":66},[84,131361,131362,131364],{"class":86,"line":87},[84,131363,131271],{"class":90},[84,131365,15901],{"class":477},[84,131367,131368,131370,131372,131374],{"class":86,"line":98},[84,131369,131278],{"class":94},[84,131371,51764],{"class":477},[84,131373,24065],{"class":94},[84,131375,1634],{"class":477},[84,131377,131378],{"class":86,"line":70},[84,131379,1905],{"class":477},[84,131381,131382,131384],{"class":86,"line":120},[84,131383,131293],{"class":90},[84,131385,15901],{"class":477},[84,131387,131388,131390,131392,131394],{"class":86,"line":131},[84,131389,131278],{"class":94},[84,131391,51764],{"class":477},[84,131393,72848],{"class":94},[84,131395,1634],{"class":477},[84,131397,131398],{"class":86,"line":145},[84,131399,1905],{"class":477},[35,131401,131402],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[35,131404,131405],{},"优点： 通俗易懂，书写方便",[35,131407,131408],{},"缺点： 添加许多无意义的标签，结构化较差",[35,131410,131411],{},"注意： 要求这个新的空标签必须是块级元素。",[35,131413,131414],{},"法二",[35,131416,131417],{},"父级添加overflow属性",[75,131419,131420],{"className":126798,"code":131264,"language":126800,"meta":66,"style":66},[81,131421,131422,131428,131438,131442,131448,131458],{"__ignoreMap":66},[84,131423,131424,131426],{"class":86,"line":87},[84,131425,131271],{"class":90},[84,131427,15901],{"class":477},[84,131429,131430,131432,131434,131436],{"class":86,"line":98},[84,131431,131278],{"class":94},[84,131433,51764],{"class":477},[84,131435,24065],{"class":94},[84,131437,1634],{"class":477},[84,131439,131440],{"class":86,"line":70},[84,131441,1905],{"class":477},[84,131443,131444,131446],{"class":86,"line":120},[84,131445,131293],{"class":90},[84,131447,15901],{"class":477},[84,131449,131450,131452,131454,131456],{"class":86,"line":131},[84,131451,131278],{"class":94},[84,131453,51764],{"class":477},[84,131455,72848],{"class":94},[84,131457,1634],{"class":477},[84,131459,131460],{"class":86,"line":145},[84,131461,1905],{"class":477},[35,131463,131464],{},"overflow: hidden;",[35,131466,131467],{},"优点：代码简洁",[35,131469,131470],{},"缺点：无法显示溢出的部分",[35,131472,131473],{},"注意：是给父元素添加代码",[35,131475,131476],{},"法三",[35,131478,131479],{},"父级添加after伪元素",[35,131481,131482,131485],{},[131483,131484],"after",{}," 方式是额外标签法的升级版",[35,131487,131488],{},"使用的时候复制就可以",[75,131490,131491],{"className":126798,"code":131264,"language":126800,"meta":66,"style":66},[81,131492,131493,131499,131509,131513,131519,131529],{"__ignoreMap":66},[84,131494,131495,131497],{"class":86,"line":87},[84,131496,131271],{"class":90},[84,131498,15901],{"class":477},[84,131500,131501,131503,131505,131507],{"class":86,"line":98},[84,131502,131278],{"class":94},[84,131504,51764],{"class":477},[84,131506,24065],{"class":94},[84,131508,1634],{"class":477},[84,131510,131511],{"class":86,"line":70},[84,131512,1905],{"class":477},[84,131514,131515,131517],{"class":86,"line":120},[84,131516,131293],{"class":90},[84,131518,15901],{"class":477},[84,131520,131521,131523,131525,131527],{"class":86,"line":131},[84,131522,131278],{"class":94},[84,131524,51764],{"class":477},[84,131526,72848],{"class":94},[84,131528,1634],{"class":477},[84,131530,131531],{"class":86,"line":145},[84,131532,1905],{"class":477},[35,131534,131535],{},"优点：没有增加标签，结构更简单",[35,131537,131538],{},"缺点：照顾低版本浏览器",[35,131540,131541],{},"代表网站： 百度、淘宝网、网易等",[35,131543,131544],{},"法四",[35,131546,131547],{},"父级添加双伪元素",[75,131549,131550],{"className":126798,"code":131264,"language":126800,"meta":66,"style":66},[81,131551,131552,131558,131568,131572,131578,131588],{"__ignoreMap":66},[84,131553,131554,131556],{"class":86,"line":87},[84,131555,131271],{"class":90},[84,131557,15901],{"class":477},[84,131559,131560,131562,131564,131566],{"class":86,"line":98},[84,131561,131278],{"class":94},[84,131563,51764],{"class":477},[84,131565,24065],{"class":94},[84,131567,1634],{"class":477},[84,131569,131570],{"class":86,"line":70},[84,131571,1905],{"class":477},[84,131573,131574,131576],{"class":86,"line":120},[84,131575,131293],{"class":90},[84,131577,15901],{"class":477},[84,131579,131580,131582,131584,131586],{"class":86,"line":131},[84,131581,131278],{"class":94},[84,131583,51764],{"class":477},[84,131585,72848],{"class":94},[84,131587,1634],{"class":477},[84,131589,131590],{"class":86,"line":145},[84,131591,1905],{"class":477},[35,131593,131594],{},"优点：代码更简洁",[35,131596,131538],{},[35,131598,131599],{},"代表网站：小米、腾讯等",[14,131601,131603],{"id":131602},"_93-ps切图","9.3 PS切图",[23,131605,131607],{"id":131606},"_931-常见图片格式","9.3.1 常见图片格式",[612,131609,131610,131620],{},[615,131611,131612],{},[618,131613,131614,131617],{},[621,131615,131616],{"align":24065},"jpg图像格式",[621,131618,131619],{"align":24065},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[659,131621,131622,131630,131638],{},[618,131623,131624,131627],{},[664,131625,131626],{"align":24065},"gif图像格式",[664,131628,131629],{"align":24065},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[618,131631,131632,131635],{},[664,131633,131634],{"align":24065},"png图像格式",[664,131636,131637],{"align":24065},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[618,131639,131640,131643],{},[664,131641,131642],{"align":24065},"PSD图像格式",[664,131644,131645],{"align":24065},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[23,131647,131649],{"id":131648},"_932-图层切图","9.3.2 图层切图",[35,131651,131652],{},"最简单的切图方式：右击图层 → 导出 → 切片",[35,131654,131655],{},"按住shift选中两个图层->图层菜单->合并图层",[23,131657,131659],{"id":131658},"_933-切片切图","9.3.3 切片切图",[1480,131661,131662,131665],{},[31,131663,131664],{},"利用切片工具手动划出",[31,131666,131667],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[23,131669,131671],{"id":131670},"_934-切图步骤","9.3.4 切图步骤",[35,131673,131674],{},"用切片工具选中：",[64,131676],{"style":126654,"src":131677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[35,131679,131680],{},"文件 -> 导出",[64,131682],{"style":126654,"src":131683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[389,131685,131686],{},"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":66,"searchDepth":98,"depth":98,"links":131688},[131689,131698,131702],{"id":130125,"depth":98,"text":130126,"children":131690},[131691,131692,131693,131694,131695,131696,131697],{"id":130150,"depth":70,"text":130151},{"id":130441,"depth":70,"text":130442},{"id":130570,"depth":70,"text":130571},{"id":130770,"depth":70,"text":130771},{"id":130812,"depth":70,"text":130813},{"id":130850,"depth":70,"text":130851},{"id":130940,"depth":70,"text":130941},{"id":131220,"depth":98,"text":131221,"children":131699},[131700,131701],{"id":131224,"depth":70,"text":131225},{"id":131231,"depth":70,"text":131232},{"id":131602,"depth":98,"text":131603,"children":131703},[131704,131705,131706,131707],{"id":131606,"depth":70,"text":131607},{"id":131648,"depth":70,"text":131649},{"id":131658,"depth":70,"text":131659},{"id":131670,"depth":70,"text":131671},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130117,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131714,"title":131715,"body":131716,"description":400,"extension":401,"meta":132357,"navigation":403,"path":132358,"seo":132359,"stem":132360,"__hash__":132361},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131717,"toc":132345},[131718,131721,131725,131751,131785,131789,131793,131796,131838,131845,131855,131863,131865,131868,131871,131874,131881,131895,131899,131902,131931,131935,131938,131952,131956,131959,131987,131991,131994,132020,132024,132029,132062,132067,132095,132099,132116,132162,132167,132211,132228,132335,132343],[10,131719,131715],{"id":131720},"_10-css规范与学成在线案例",[14,131722,131724],{"id":131723},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[28,131726,131727,131733,131739,131745],{},[31,131728,131729,131732],{},[624,131730,131731],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[31,131734,131735,131738],{},[624,131736,131737],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[31,131740,131741,131744],{},[624,131742,131743],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[31,131746,131747,131750],{},[624,131748,131749],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[75,131752,131753],{"className":126798,"code":130162,"language":126800,"meta":66,"style":66},[81,131754,131755,131759,131765,131781],{"__ignoreMap":66},[84,131756,131757],{"class":86,"line":87},[84,131758,130169],{"class":328},[84,131760,131761,131763],{"class":86,"line":98},[84,131762,51938],{"class":51627},[84,131764,15901],{"class":477},[84,131766,131767,131769,131771,131773,131775,131777,131779],{"class":86,"line":70},[84,131768,71222],{"class":94},[84,131770,51764],{"class":477},[84,131772,692],{"class":94},[84,131774,51819],{"class":473},[84,131776,51848],{"class":94},[84,131778,130190],{"class":94},[84,131780,1634],{"class":477},[84,131782,131783],{"class":86,"line":120},[84,131784,1905],{"class":477},[14,131786,131788],{"id":131787},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[23,131790,131792],{"id":131791},"_1021-header头部制作","10.2.1 header头部制作",[64,131794],{"style":126654,"src":131795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1480,131797,131798,131805,131812,131818,131825,131832],{},[31,131799,131800,131801,131804],{},"1号是版心盒子 ",[624,131802,131803],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[31,131806,131807,131808,131811],{},"版心盒子 里面包含 2号盒子 ",[624,131809,131810],{},"logo"," 图标",[31,131813,131814,131815,131817],{},"版心盒子 里面包含 3号盒子 ",[624,131816,54040],{}," 导航栏",[31,131819,131820,131821,131824],{},"版心盒子 里面包含 4号盒子 ",[624,131822,131823],{},"search"," 搜索框",[31,131826,131827,131828,131831],{},"版心盒子 里面包含 5号盒子 ",[624,131829,131830],{},"user"," 个人信息",[31,131833,131834,131835],{},"注意，要求里面的 ",[624,131836,131837],{},"4个子盒子 必须都浮动",[28,131839,131840],{},[31,131841,131842],{},[624,131843,131844],{},"导航栏注意点:",[35,131846,131847,131848,131851,131852],{},"实际开发中， ",[624,131849,131850],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[624,131853,131854],{},"用 li 包含链接(li+a)的做法",[1480,131856,131857,131860],{},[31,131858,131859],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[31,131861,131862],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[35,131864,9354],{},[35,131866,131867],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[35,131869,131870],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[35,131872,131873],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[28,131875,131876],{"start":98},[31,131877,131878],{},[624,131879,131880],{},"4号盒子search的细节：",[1480,131882,131883,131886,131889],{},[31,131884,131885],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[31,131887,131888],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[31,131890,131891,131894],{},[81,131892,131893],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[23,131896,131898],{"id":131897},"_1022-banner制作","10.2.2 banner制作",[64,131900],{"style":126654,"src":131901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1480,131903,131904,131911,131917,131924],{},[31,131905,131906,131907,131910],{},"1号盒子是通栏的大盒子 ",[624,131908,131909],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[31,131912,131913,131914,131916],{},"2号盒子是版心 ",[624,131915,1268],{}," ， 要水平居中对齐",[31,131918,131919,131920,131923],{},"3号盒子版心内，左对齐 ",[624,131921,131922],{},"subnav"," 侧导航栏",[31,131925,131926,131927,131930],{},"4号盒子版心内，右对齐 ",[624,131928,131929],{},"course"," 课程",[23,131932,131934],{"id":131933},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[64,131936],{"style":126654,"src":131937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1480,131939,131940,131943,131946,131949],{},[31,131941,131942],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[31,131944,131945],{},"1号盒子是标题 H3 左侧浮动",[31,131947,131948],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[31,131950,131951],{},"3号盒子 右浮动 mod 修改",[23,131953,131955],{"id":131954},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[64,131957],{"style":126654,"src":131958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1480,131960,131961,131967,131974,131981,131984],{},[31,131962,131963,131964,131966],{},"1号盒子为最大的盒子 ",[624,131965,54041],{}," 版心水平居中对齐",[31,131968,131969,131970,131973],{},"2号盒子为上面部分 ",[624,131971,131972],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[31,131975,131976,131977,131980],{},"3号盒子为底下部分 ",[624,131978,131979],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[31,131982,131983],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[31,131985,131986],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[23,131988,131990],{"id":131989},"_1025-底部模块制作","10.2.5 底部模块制作",[64,131992],{"style":126654,"src":131993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1480,131995,131996,132003,132006,132013],{},[31,131997,131998,131999,132002],{},"1号盒子通栏大盒子 底部 ",[624,132000,132001],{},"footer"," 给高度 底色是白色",[31,132004,132005],{},"2号盒子版心水平居中",[31,132007,132008,132009,132012],{},"3号盒子版权 ",[624,132010,132011],{},"copyright"," 左对齐",[31,132014,132015,132016,132019],{},"4号盒子 链接组 ",[624,132017,132018],{},"links"," 右对齐",[23,132021,132023],{"id":132022},"_1026-代码模块","10.2.6 代码模块",[28,132025,132026],{},[31,132027,132028],{},"html部分",[75,132030,132032],{"className":127545,"code":132031,"language":127547,"meta":66,"style":66},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[81,132033,132034],{"__ignoreMap":66},[84,132035,132036,132038,132040,132042,132044,132047,132050,132052,132055,132058,132060],{"class":86,"line":87},[84,132037,1383],{"class":477},[84,132039,39],{"class":51627},[84,132041,61383],{"class":90},[84,132043,523],{"class":477},[84,132045,132046],{"class":104},"\"https:\u002F\u002Fexample.com\"",[84,132048,132049],{"class":90}," target",[84,132051,523],{"class":477},[84,132053,132054],{"class":104},"\"_blank\"",[84,132056,132057],{"class":477},">链接文字\u003C\u002F",[84,132059,39],{"class":51627},[84,132061,51634],{"class":477},[28,132063,132064],{"start":98},[31,132065,132066],{},"css部分",[75,132068,132069],{"className":127545,"code":132031,"language":127547,"meta":66,"style":66},[81,132070,132071],{"__ignoreMap":66},[84,132072,132073,132075,132077,132079,132081,132083,132085,132087,132089,132091,132093],{"class":86,"line":87},[84,132074,1383],{"class":477},[84,132076,39],{"class":51627},[84,132078,61383],{"class":90},[84,132080,523],{"class":477},[84,132082,132046],{"class":104},[84,132084,132049],{"class":90},[84,132086,523],{"class":477},[84,132088,132054],{"class":104},[84,132090,132057],{"class":477},[84,132092,39],{"class":51627},[84,132094,51634],{"class":477},[23,132096,132098],{"id":132097},"_1027-收获","10.2.7 收获",[28,132100,132101,132104,132107,132110,132113],{},[31,132102,132103],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[31,132105,132106],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[31,132108,132109],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[31,132111,132112],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[31,132114,132115],{},"遗忘代码",[75,132117,132119],{"className":126798,"code":132118,"language":126800,"meta":66,"style":66},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[81,132120,132121,132143,132148,132158],{"__ignoreMap":66},[84,132122,132123,132125,132127,132129,132131,132133,132135,132137,132139,132141],{"class":86,"line":87},[84,132124,51938],{"class":51627},[84,132126,12764],{"class":477},[84,132128,35],{"class":51627},[84,132130,12764],{"class":477},[84,132132,10],{"class":51627},[84,132134,12764],{"class":477},[84,132136,1480],{"class":51627},[84,132138,12764],{"class":477},[84,132140,31],{"class":51627},[84,132142,15901],{"class":477},[84,132144,132145],{"class":86,"line":98},[84,132146,132147],{"class":328},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[84,132149,132150,132152,132154,132156],{"class":86,"line":70},[84,132151,128414],{"class":94},[84,132153,51764],{"class":477},[84,132155,61195],{"class":94},[84,132157,1634],{"class":477},[84,132159,132160],{"class":86,"line":120},[84,132161,1905],{"class":477},[28,132163,132164],{"start":145},[31,132165,132166],{},"html引css的程序",[75,132168,132169],{"className":126798,"code":132118,"language":126800,"meta":66,"style":66},[81,132170,132171,132193,132197,132207],{"__ignoreMap":66},[84,132172,132173,132175,132177,132179,132181,132183,132185,132187,132189,132191],{"class":86,"line":87},[84,132174,51938],{"class":51627},[84,132176,12764],{"class":477},[84,132178,35],{"class":51627},[84,132180,12764],{"class":477},[84,132182,10],{"class":51627},[84,132184,12764],{"class":477},[84,132186,1480],{"class":51627},[84,132188,12764],{"class":477},[84,132190,31],{"class":51627},[84,132192,15901],{"class":477},[84,132194,132195],{"class":86,"line":98},[84,132196,132147],{"class":328},[84,132198,132199,132201,132203,132205],{"class":86,"line":70},[84,132200,128414],{"class":94},[84,132202,51764],{"class":477},[84,132204,61195],{"class":94},[84,132206,1634],{"class":477},[84,132208,132209],{"class":86,"line":120},[84,132210,1905],{"class":477},[28,132212,132213,132216,132219,132222,132225],{"start":156},[31,132214,132215],{},"浮动的盒子不会有外边距合并问题",[31,132217,132218],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[31,132220,132221],{},"ctrl+g快速定位行；shift+alt多个光标",[31,132223,132224],{},"学习上方各个模块的选择器起名方法，以后就这样用",[31,132226,132227],{},"在写选择器时尽量写全一些，例如",[75,132229,132231],{"className":126798,"code":132230,"language":126800,"meta":66,"style":66},"\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",[81,132232,132233,132238,132254,132259,132274,132279,132294,132299,132314,132319],{"__ignoreMap":66},[84,132234,132235],{"class":86,"line":87},[84,132236,132237],{"class":328},"\u002F* 静态定位（默认） *\u002F\n",[84,132239,132240,132243,132245,132247,132249,132252],{"class":86,"line":98},[84,132241,132242],{"class":90},".static",[84,132244,80133],{"class":477},[84,132246,129158],{"class":94},[84,132248,51764],{"class":477},[84,132250,132251],{"class":94},"static",[84,132253,129728],{"class":477},[84,132255,132256],{"class":86,"line":70},[84,132257,132258],{"class":328},"\u002F* 相对定位 *\u002F\n",[84,132260,132261,132264,132266,132268,132270,132272],{"class":86,"line":120},[84,132262,132263],{"class":90},".relative",[84,132265,80133],{"class":477},[84,132267,129158],{"class":94},[84,132269,51764],{"class":477},[84,132271,55090],{"class":94},[84,132273,129728],{"class":477},[84,132275,132276],{"class":86,"line":131},[84,132277,132278],{"class":328},"\u002F* 绝对定位 *\u002F\n",[84,132280,132281,132284,132286,132288,132290,132292],{"class":86,"line":145},[84,132282,132283],{"class":90},".absolute",[84,132285,80133],{"class":477},[84,132287,129158],{"class":94},[84,132289,51764],{"class":477},[84,132291,55157],{"class":94},[84,132293,129728],{"class":477},[84,132295,132296],{"class":86,"line":156},[84,132297,132298],{"class":328},"\u002F* 固定定位 *\u002F\n",[84,132300,132301,132304,132306,132308,132310,132312],{"class":86,"line":164},[84,132302,132303],{"class":90},".fixed",[84,132305,80133],{"class":477},[84,132307,129158],{"class":94},[84,132309,51764],{"class":477},[84,132311,86559],{"class":94},[84,132313,129728],{"class":477},[84,132315,132316],{"class":86,"line":175},[84,132317,132318],{"class":328},"\u002F* 粘性定位 *\u002F\n",[84,132320,132321,132324,132326,132328,132330,132333],{"class":86,"line":185},[84,132322,132323],{"class":90},".sticky",[84,132325,80133],{"class":477},[84,132327,129158],{"class":94},[84,132329,51764],{"class":477},[84,132331,132332],{"class":94},"sticky",[84,132334,129728],{"class":477},[28,132336,132337,132340],{"start":206},[31,132338,132339],{},"一定要用好注释",[31,132341,132342],{},"浮动的盒子不会有外边距合并的问题",[389,132344,131686],{},{"title":66,"searchDepth":98,"depth":98,"links":132346},[132347,132348],{"id":131723,"depth":98,"text":131724},{"id":131787,"depth":98,"text":131788,"children":132349},[132350,132351,132352,132353,132354,132355,132356],{"id":131791,"depth":70,"text":131792},{"id":131897,"depth":70,"text":131898},{"id":131933,"depth":70,"text":131934},{"id":131954,"depth":70,"text":131955},{"id":131989,"depth":70,"text":131990},{"id":132022,"depth":70,"text":132023},{"id":132097,"depth":70,"text":132098},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131715,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132363,"title":132364,"body":132365,"description":400,"extension":401,"meta":133851,"navigation":403,"path":133852,"seo":133853,"stem":133854,"__hash__":133855},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132366,"toc":133843},[132367,132370,132374,132378,132389,132393,132410,132454,132487,132490,132507,132510,132513,132557,132561,132565,132568,132571,132575,132578,132589,132652,132693,132696,132711,132765,132773,132776,132787,132841,132867,132870,132883,132937,132969,133023,133046,133100,133103,133106,133113,133167,133188,133242,133245,133248,133333,133341,133398,133421,133425,133428,133446,133450,133469,133523,133561,133565,133568,133571,133593,133597,133605,133608,133613,133624,133627,133631,133645,133689,133692,133696,133699,133704,133730,133735,133812,133815,133819,133822,133825,133828,133831,133834,133837,133840],[10,132368,132364],{"id":132369},"_11-传统布局与定位体系",[14,132371,132373],{"id":132372},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[23,132375,132377],{"id":132376},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1480,132379,132380,132383,132386],{},[31,132381,132382],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[31,132384,132385],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[31,132387,132388],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[23,132390,132392],{"id":132391},"_1112-浮动","11.1.2 浮动",[1480,132394,132395,132398,132401,132404,132407],{},[31,132396,132397],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[31,132399,132400],{},"浮动可以改变元素标签默认的排列方式",[31,132402,132403],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[31,132405,132406],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[31,132408,132409],{},"在使用行内块转换时盒子之间是有空隙的",[75,132411,132412],{"className":126798,"code":131264,"language":126800,"meta":66,"style":66},[81,132413,132414,132420,132430,132434,132440,132450],{"__ignoreMap":66},[84,132415,132416,132418],{"class":86,"line":87},[84,132417,131271],{"class":90},[84,132419,15901],{"class":477},[84,132421,132422,132424,132426,132428],{"class":86,"line":98},[84,132423,131278],{"class":94},[84,132425,51764],{"class":477},[84,132427,24065],{"class":94},[84,132429,1634],{"class":477},[84,132431,132432],{"class":86,"line":70},[84,132433,1905],{"class":477},[84,132435,132436,132438],{"class":86,"line":120},[84,132437,131293],{"class":90},[84,132439,15901],{"class":477},[84,132441,132442,132444,132446,132448],{"class":86,"line":131},[84,132443,131278],{"class":94},[84,132445,51764],{"class":477},[84,132447,72848],{"class":94},[84,132449,1634],{"class":477},[84,132451,132452],{"class":86,"line":145},[84,132453,1905],{"class":477},[612,132455,132456,132464],{},[615,132457,132458],{},[618,132459,132460,132462],{},[621,132461,127262],{"align":24065},[621,132463,27816],{"align":24065},[659,132465,132466,132473,132480],{},[618,132467,132468,132470],{},[664,132469,55063],{"align":24065},[664,132471,132472],{"align":24065},"元素不浮动（默认值）",[618,132474,132475,132477],{},[664,132476,24065],{"align":24065},[664,132478,132479],{"align":24065},"元素向左浮动",[618,132481,132482,132484],{},[664,132483,72848],{"align":24065},[664,132485,132486],{"align":24065},"元素向右浮动",[35,132488,132489],{},"浮动重点：",[1480,132491,132492,132495,132498,132501,132504],{},[31,132493,132494],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[31,132496,132497],{},"浮动的元素会一行内显示并且元素顶部对齐",[31,132499,132500],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[31,132502,132503],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[31,132505,132506],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[35,132508,132509],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[35,132511,132512],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[75,132514,132515],{"className":126798,"code":131264,"language":126800,"meta":66,"style":66},[81,132516,132517,132523,132533,132537,132543,132553],{"__ignoreMap":66},[84,132518,132519,132521],{"class":86,"line":87},[84,132520,131271],{"class":90},[84,132522,15901],{"class":477},[84,132524,132525,132527,132529,132531],{"class":86,"line":98},[84,132526,131278],{"class":94},[84,132528,51764],{"class":477},[84,132530,24065],{"class":94},[84,132532,1634],{"class":477},[84,132534,132535],{"class":86,"line":70},[84,132536,1905],{"class":477},[84,132538,132539,132541],{"class":86,"line":120},[84,132540,131293],{"class":90},[84,132542,15901],{"class":477},[84,132544,132545,132547,132549,132551],{"class":86,"line":131},[84,132546,131278],{"class":94},[84,132548,51764],{"class":477},[84,132550,72848],{"class":94},[84,132552,1634],{"class":477},[84,132554,132555],{"class":86,"line":145},[84,132556,1905],{"class":477},[23,132558,132560],{"id":132559},"_1113-定位","11.1.3 定位",[22327,132562,132564],{"id":132563},"_11131-使用场景","11.1.3.1 使用场景",[35,132566,132567],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[35,132569,132570],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22327,132572,132574],{"id":132573},"_11132-定位组成","11.1.3.2 定位组成",[35,132576,132577],{},"定位 = 定位模式 + 边偏移",[28,132579,132580],{},[31,132581,132582,132585,132586],{},[624,132583,132584],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[624,132587,132588],{},"定位模式",[75,132590,132592],{"className":126798,"code":132591,"language":126800,"meta":66,"style":66},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[81,132593,132594,132600,132614,132631,132648],{"__ignoreMap":66},[84,132595,132596,132598],{"class":86,"line":87},[84,132597,130646],{"class":90},[84,132599,15901],{"class":477},[84,132601,132602,132605,132607,132609,132611],{"class":86,"line":98},[84,132603,132604],{"class":94},"  position",[84,132606,51764],{"class":477},[84,132608,55090],{"class":94},[84,132610,130661],{"class":477},[84,132612,132613],{"class":328},"\u002F* 定位模式 *\u002F\n",[84,132615,132616,132619,132621,132623,132625,132628],{"class":86,"line":70},[84,132617,132618],{"class":94},"  top",[84,132620,51764],{"class":477},[84,132622,919],{"class":94},[84,132624,51819],{"class":473},[84,132626,132627],{"class":477},";           ",[84,132629,132630],{"class":328},"\u002F* 边偏移：上 *\u002F\n",[84,132632,132633,132636,132638,132640,132642,132645],{"class":86,"line":120},[84,132634,132635],{"class":94},"  left",[84,132637,51764],{"class":477},[84,132639,1173],{"class":94},[84,132641,51819],{"class":473},[84,132643,132644],{"class":477},";          ",[84,132646,132647],{"class":328},"\u002F* 边偏移：左 *\u002F\n",[84,132649,132650],{"class":86,"line":131},[84,132651,1905],{"class":477},[612,132653,132654,132663],{},[615,132655,132656],{},[618,132657,132658,132660],{},[621,132659,627],{"align":24065},[621,132661,132662],{"align":24065},"语义",[659,132664,132665,132672,132679,132686],{},[618,132666,132667,132669],{},[664,132668,132251],{"align":24065},[664,132670,132671],{"align":24065},"静态定位",[618,132673,132674,132676],{},[664,132675,55090],{"align":24065},[664,132677,132678],{"align":24065},"相对定位",[618,132680,132681,132683],{},[664,132682,55157],{"align":24065},[664,132684,132685],{"align":24065},"绝对定位",[618,132687,132688,132690],{},[664,132689,86559],{"align":24065},[664,132691,132692],{"align":24065},"固定定位",[35,132694,132695],{},"（1）静态定位：",[1480,132697,132698,132709],{},[31,132699,132700,132701,132704,132705,132708],{},"静态定位是元素的 ",[624,132702,132703],{},"默认定位方式"," ， ",[624,132706,132707],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[31,132710,5510],{},[75,132712,132713],{"className":126798,"code":132591,"language":126800,"meta":66,"style":66},[81,132714,132715,132721,132733,132747,132761],{"__ignoreMap":66},[84,132716,132717,132719],{"class":86,"line":87},[84,132718,130646],{"class":90},[84,132720,15901],{"class":477},[84,132722,132723,132725,132727,132729,132731],{"class":86,"line":98},[84,132724,132604],{"class":94},[84,132726,51764],{"class":477},[84,132728,55090],{"class":94},[84,132730,130661],{"class":477},[84,132732,132613],{"class":328},[84,132734,132735,132737,132739,132741,132743,132745],{"class":86,"line":70},[84,132736,132618],{"class":94},[84,132738,51764],{"class":477},[84,132740,919],{"class":94},[84,132742,51819],{"class":473},[84,132744,132627],{"class":477},[84,132746,132630],{"class":328},[84,132748,132749,132751,132753,132755,132757,132759],{"class":86,"line":120},[84,132750,132635],{"class":94},[84,132752,51764],{"class":477},[84,132754,1173],{"class":94},[84,132756,51819],{"class":473},[84,132758,132644],{"class":477},[84,132760,132647],{"class":328},[84,132762,132763],{"class":86,"line":131},[84,132764,1905],{"class":477},[1480,132766,132767,132770],{},[31,132768,132769],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[31,132771,132772],{},"静态定位在布局时我们几乎不用的",[35,132774,132775],{},"（2）相对定位",[1480,132777,132778,132785],{},[31,132779,132780,132781,132784],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[624,132782,132783],{},"原来的位置"," 来说的（自恋型）",[31,132786,5510],{},[75,132788,132789],{"className":126798,"code":132591,"language":126800,"meta":66,"style":66},[81,132790,132791,132797,132809,132823,132837],{"__ignoreMap":66},[84,132792,132793,132795],{"class":86,"line":87},[84,132794,130646],{"class":90},[84,132796,15901],{"class":477},[84,132798,132799,132801,132803,132805,132807],{"class":86,"line":98},[84,132800,132604],{"class":94},[84,132802,51764],{"class":477},[84,132804,55090],{"class":94},[84,132806,130661],{"class":477},[84,132808,132613],{"class":328},[84,132810,132811,132813,132815,132817,132819,132821],{"class":86,"line":70},[84,132812,132618],{"class":94},[84,132814,51764],{"class":477},[84,132816,919],{"class":94},[84,132818,51819],{"class":473},[84,132820,132627],{"class":477},[84,132822,132630],{"class":328},[84,132824,132825,132827,132829,132831,132833,132835],{"class":86,"line":120},[84,132826,132635],{"class":94},[84,132828,51764],{"class":477},[84,132830,1173],{"class":94},[84,132832,51819],{"class":473},[84,132834,132644],{"class":477},[84,132836,132647],{"class":328},[84,132838,132839],{"class":86,"line":131},[84,132840,1905],{"class":477},[1480,132842,132843],{},[31,132844,132845,132846,132848,132849,132851,132852,132855,132856,132859,132860,132862,132863,132866],{},"相对定位的特点：",[54,132847],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54,132850],{},"  ② ",[624,132853,132854],{},"原来"," 在标准流的 ",[624,132857,132858],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54,132861],{},"  ③因此， ",[624,132864,132865],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[35,132868,132869],{},"（3）绝对定位",[1480,132871,132872,132881],{},[31,132873,132874,132876,132877,132880],{},[624,132875,132685],{}," 是元素在移动位置的时候，是相对于它 ",[624,132878,132879],{},"祖先元素"," 来说的（拼爹型）",[31,132882,5510],{},[75,132884,132885],{"className":126798,"code":132591,"language":126800,"meta":66,"style":66},[81,132886,132887,132893,132905,132919,132933],{"__ignoreMap":66},[84,132888,132889,132891],{"class":86,"line":87},[84,132890,130646],{"class":90},[84,132892,15901],{"class":477},[84,132894,132895,132897,132899,132901,132903],{"class":86,"line":98},[84,132896,132604],{"class":94},[84,132898,51764],{"class":477},[84,132900,55090],{"class":94},[84,132902,130661],{"class":477},[84,132904,132613],{"class":328},[84,132906,132907,132909,132911,132913,132915,132917],{"class":86,"line":70},[84,132908,132618],{"class":94},[84,132910,51764],{"class":477},[84,132912,919],{"class":94},[84,132914,51819],{"class":473},[84,132916,132627],{"class":477},[84,132918,132630],{"class":328},[84,132920,132921,132923,132925,132927,132929,132931],{"class":86,"line":120},[84,132922,132635],{"class":94},[84,132924,51764],{"class":477},[84,132926,1173],{"class":94},[84,132928,51819],{"class":473},[84,132930,132644],{"class":477},[84,132932,132647],{"class":328},[84,132934,132935],{"class":86,"line":131},[84,132936,1905],{"class":477},[1480,132938,132939,132954,132963,132966],{},[31,132940,132941,132942,132944,132945,132947,132948,132950,132951,132953],{},"绝对定位的特点：",[54,132943],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54,132946],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54,132949],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54,132952],{},"  (4)固定定位",[31,132955,132956,132958,132959,132962],{},[624,132957,132692],{}," 是元素 ",[624,132960,132961],{},"固定于浏览器可视区的位置"," 。（认死理型）",[31,132964,132965],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[31,132967,132968],{},"语法:",[75,132970,132971],{"className":126798,"code":132591,"language":126800,"meta":66,"style":66},[81,132972,132973,132979,132991,133005,133019],{"__ignoreMap":66},[84,132974,132975,132977],{"class":86,"line":87},[84,132976,130646],{"class":90},[84,132978,15901],{"class":477},[84,132980,132981,132983,132985,132987,132989],{"class":86,"line":98},[84,132982,132604],{"class":94},[84,132984,51764],{"class":477},[84,132986,55090],{"class":94},[84,132988,130661],{"class":477},[84,132990,132613],{"class":328},[84,132992,132993,132995,132997,132999,133001,133003],{"class":86,"line":70},[84,132994,132618],{"class":94},[84,132996,51764],{"class":477},[84,132998,919],{"class":94},[84,133000,51819],{"class":473},[84,133002,132627],{"class":477},[84,133004,132630],{"class":328},[84,133006,133007,133009,133011,133013,133015,133017],{"class":86,"line":120},[84,133008,132635],{"class":94},[84,133010,51764],{"class":477},[84,133012,1173],{"class":94},[84,133014,51819],{"class":473},[84,133016,132644],{"class":477},[84,133018,132647],{"class":328},[84,133020,133021],{"class":86,"line":131},[84,133022,1905],{"class":477},[1480,133024,133025,133034],{},[31,133026,133027,133028,133030,133031,133033],{},"特点:",[54,133029],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54,133032],{},"  ②固定定位不再占有原先的位置,完全脱标",[31,133035,133036,133037,133039,133040,133042,133043,133045],{},"固定在版心位置的方法:",[54,133038],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54,133041],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54,133044],{},"  实例：",[75,133047,133048],{"className":126798,"code":132591,"language":126800,"meta":66,"style":66},[81,133049,133050,133056,133068,133082,133096],{"__ignoreMap":66},[84,133051,133052,133054],{"class":86,"line":87},[84,133053,130646],{"class":90},[84,133055,15901],{"class":477},[84,133057,133058,133060,133062,133064,133066],{"class":86,"line":98},[84,133059,132604],{"class":94},[84,133061,51764],{"class":477},[84,133063,55090],{"class":94},[84,133065,130661],{"class":477},[84,133067,132613],{"class":328},[84,133069,133070,133072,133074,133076,133078,133080],{"class":86,"line":70},[84,133071,132618],{"class":94},[84,133073,51764],{"class":477},[84,133075,919],{"class":94},[84,133077,51819],{"class":473},[84,133079,132627],{"class":477},[84,133081,132630],{"class":328},[84,133083,133084,133086,133088,133090,133092,133094],{"class":86,"line":120},[84,133085,132635],{"class":94},[84,133087,51764],{"class":477},[84,133089,1173],{"class":94},[84,133091,51819],{"class":473},[84,133093,132644],{"class":477},[84,133095,132647],{"class":328},[84,133097,133098],{"class":86,"line":131},[84,133099,1905],{"class":477},[64,133101],{"style":126654,"src":133102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[35,133104,133105],{},"(5)粘性定位",[1480,133107,133108,133111],{},[31,133109,133110],{},"粘性定位可以被认为是相对定位和固定定位的混合",[31,133112,5510],{},[75,133114,133115],{"className":126798,"code":132591,"language":126800,"meta":66,"style":66},[81,133116,133117,133123,133135,133149,133163],{"__ignoreMap":66},[84,133118,133119,133121],{"class":86,"line":87},[84,133120,130646],{"class":90},[84,133122,15901],{"class":477},[84,133124,133125,133127,133129,133131,133133],{"class":86,"line":98},[84,133126,132604],{"class":94},[84,133128,51764],{"class":477},[84,133130,55090],{"class":94},[84,133132,130661],{"class":477},[84,133134,132613],{"class":328},[84,133136,133137,133139,133141,133143,133145,133147],{"class":86,"line":70},[84,133138,132618],{"class":94},[84,133140,51764],{"class":477},[84,133142,919],{"class":94},[84,133144,51819],{"class":473},[84,133146,132627],{"class":477},[84,133148,132630],{"class":328},[84,133150,133151,133153,133155,133157,133159,133161],{"class":86,"line":120},[84,133152,132635],{"class":94},[84,133154,51764],{"class":477},[84,133156,1173],{"class":94},[84,133158,51819],{"class":473},[84,133160,132644],{"class":477},[84,133162,132647],{"class":328},[84,133164,133165],{"class":86,"line":131},[84,133166,1905],{"class":477},[1480,133168,133169],{},[31,133170,133171,133172,133174,133175,133177,133178,133180,133181,133184,133185,133187],{},"粘性定位的特点：",[54,133173],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54,133176],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54,133179],{},"  ③必须添加 top 、left、right、bottom ",[624,133182,133183],{},"其中一个"," 才有效",[54,133186],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[75,133189,133190],{"className":126798,"code":132591,"language":126800,"meta":66,"style":66},[81,133191,133192,133198,133210,133224,133238],{"__ignoreMap":66},[84,133193,133194,133196],{"class":86,"line":87},[84,133195,130646],{"class":90},[84,133197,15901],{"class":477},[84,133199,133200,133202,133204,133206,133208],{"class":86,"line":98},[84,133201,132604],{"class":94},[84,133203,51764],{"class":477},[84,133205,55090],{"class":94},[84,133207,130661],{"class":477},[84,133209,132613],{"class":328},[84,133211,133212,133214,133216,133218,133220,133222],{"class":86,"line":70},[84,133213,132618],{"class":94},[84,133215,51764],{"class":477},[84,133217,919],{"class":94},[84,133219,51819],{"class":473},[84,133221,132627],{"class":477},[84,133223,132630],{"class":328},[84,133225,133226,133228,133230,133232,133234,133236],{"class":86,"line":120},[84,133227,132635],{"class":94},[84,133229,51764],{"class":477},[84,133231,1173],{"class":94},[84,133233,51819],{"class":473},[84,133235,132644],{"class":477},[84,133237,132647],{"class":328},[84,133239,133240],{"class":86,"line":131},[84,133241,1905],{"class":477},[64,133243],{"style":126654,"src":133244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[35,133246,133247],{},"(6)总结",[612,133249,133250,133265],{},[615,133251,133252],{},[618,133253,133254,133256,133259,133262],{},[621,133255,132588],{"align":24065},[621,133257,133258],{"align":24065},"是否脱标",[621,133260,133261],{"align":24065},"移动位置",[621,133263,133264],{"align":24065},"是否常用",[659,133266,133267,133280,133294,133308,133321],{},[618,133268,133269,133272,133274,133277],{},[664,133270,133271],{"align":24065},"Static 静态定位",[664,133273,105004],{"align":24065},[664,133275,133276],{"align":24065},"不能使用边偏移",[664,133278,133279],{"align":24065},"很少",[618,133281,133282,133285,133288,133291],{},[664,133283,133284],{"align":24065},"Relative 相对定位",[664,133286,133287],{"align":24065},"否(占有位置)",[664,133289,133290],{"align":24065},"相对于自身位置移动",[664,133292,133293],{"align":24065},"基本单独使用",[618,133295,133296,133299,133302,133305],{},[664,133297,133298],{"align":24065},"Absolute 绝对定位",[664,133300,133301],{"align":24065},"是(不占有位置)",[664,133303,133304],{"align":24065},"带有定位的父级",[664,133306,133307],{"align":24065},"要和定位父级元素搭配使用",[618,133309,133310,133313,133315,133318],{},[664,133311,133312],{"align":24065},"Fixed 固定定位",[664,133314,133301],{"align":24065},[664,133316,133317],{"align":24065},"浏览器可视区",[664,133319,133320],{"align":24065},"单独使用,不需要父级",[618,133322,133323,133326,133328,133330],{},[664,133324,133325],{"align":24065},"Sticky 粘性定位",[664,133327,133287],{"align":24065},[664,133329,133317],{"align":24065},[664,133331,133332],{"align":24065},"当前阶段少",[28,133334,133335],{"start":98},[31,133336,133337,133340],{},[624,133338,133339],{},"边偏移"," 则决定了该元素的最终位置",[612,133342,133343,133354],{},[615,133344,133345],{},[618,133346,133347,133350,133352],{},[621,133348,133349],{"align":24065},"边偏移属性",[621,133351,27819],{"align":24065},[621,133353,27816],{"align":24065},[659,133355,133356,133367,133378,133388],{},[618,133357,133358,133361,133364],{},[664,133359,133360],{"align":24065},"top",[664,133362,133363],{"align":24065},"top: 80px;",[664,133365,133366],{"align":24065},"顶端偏移量，定义元素相对于父元素上边线的距离",[618,133368,133369,133372,133375],{},[664,133370,133371],{"align":24065},"bottom",[664,133373,133374],{"align":24065},"bottom: 80px ;",[664,133376,133377],{"align":24065},"底部偏移量，定义元素相对于其父元素下边线的距离",[618,133379,133380,133382,133385],{},[664,133381,24065],{"align":24065},[664,133383,133384],{"align":24065},"left: 80px ;",[664,133386,133387],{"align":24065},"左侧偏移量，定义元素相对于其父元素左边线的距离",[618,133389,133390,133392,133395],{},[664,133391,72848],{"align":24065},[664,133393,133394],{"align":24065},"right: 80px ;",[664,133396,133397],{"align":24065},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1480,133399,133400],{},[31,133401,9354,133402,133404,133405,133407,133408,133410,133411,133414,133415,133417,133418,133420],{},[54,133403],{},"  ① ",[624,133406,133339],{}," 需要和 ",[624,133409,132588],{}," 联合使用， ",[624,133412,133413],{},"单独使用无效"," ；",[54,133416],{},"  ②top和bottom不要同时使用",[54,133419],{},"  ③left和right不要同时使用",[22327,133422,133424],{"id":133423},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[35,133426,133427],{},"子级是绝对定位的话，父级要用相对定位",[1480,133429,133430,133433,133436,133439],{},[31,133431,133432],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[31,133434,133435],{},"父盒子需要加定位限制子盒子在父盒子内显示",[31,133437,133438],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[31,133440,133441,133442,133445],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[624,133443,133444],{},"子绝父绝"," 也会遇到",[22327,133447,133449],{"id":133448},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1480,133451,133452,133467],{},[31,133453,133454,133455,133458,133459,133462,133463,133466],{},"在使用 ",[624,133456,133457],{},"定位"," 布局时，可能会 ",[624,133460,133461],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[624,133464,133465],{},"z-index"," 来控制盒子的前后次序 (z轴)",[31,133468,5510],{},[75,133470,133471],{"className":126798,"code":132591,"language":126800,"meta":66,"style":66},[81,133472,133473,133479,133491,133505,133519],{"__ignoreMap":66},[84,133474,133475,133477],{"class":86,"line":87},[84,133476,130646],{"class":90},[84,133478,15901],{"class":477},[84,133480,133481,133483,133485,133487,133489],{"class":86,"line":98},[84,133482,132604],{"class":94},[84,133484,51764],{"class":477},[84,133486,55090],{"class":94},[84,133488,130661],{"class":477},[84,133490,132613],{"class":328},[84,133492,133493,133495,133497,133499,133501,133503],{"class":86,"line":70},[84,133494,132618],{"class":94},[84,133496,51764],{"class":477},[84,133498,919],{"class":94},[84,133500,51819],{"class":473},[84,133502,132627],{"class":477},[84,133504,132630],{"class":328},[84,133506,133507,133509,133511,133513,133515,133517],{"class":86,"line":120},[84,133508,132635],{"class":94},[84,133510,51764],{"class":477},[84,133512,1173],{"class":94},[84,133514,51819],{"class":473},[84,133516,132644],{"class":477},[84,133518,132647],{"class":328},[84,133520,133521],{"class":86,"line":131},[84,133522,1905],{"class":477},[1480,133524,133525],{},[31,133526,133527,133528,133404,133530,133532,133533,127961,133536,82865,133539,133541,133542,133544,133545,133548,133549,133414,133552,133554,133555,133558,133560],{},"z-index的特性",[54,133529],{},[624,133531,127262],{}," ： ",[624,133534,133535],{},"正整数",[624,133537,133538],{},"负整数",[624,133540,666],{}," ，默认值是 0，数值越大，盒子越靠上；",[54,133543],{},"  ②如果 ",[624,133546,133547],{},"属性值相同"," ，则按照书写顺序， ",[624,133550,133551],{},"后来居上",[54,133553],{},"  ③数字后面 ",[624,133556,133557],{},"不能加单位",[54,133559],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22327,133562,133564],{"id":133563},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[35,133566,133567],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[35,133569,133570],{},"方法:",[1480,133572,133573,133583],{},[31,133574,133575,133576,133579,133580],{},"left: 50%; 让 ",[624,133577,133578],{},"盒子的左侧"," 移动到 ",[624,133581,133582],{},"父级元素的水平中心位置",[31,133584,133585,133586,133589,133590],{},"margin-left: -100px; 让盒子 ",[624,133587,133588],{},"向左"," 移动 ",[624,133591,133592],{},"自身宽度的一半",[22327,133594,133596],{"id":133595},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[28,133598,133599,133602],{},[31,133600,133601],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[31,133603,133604],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[35,133606,133607],{},"也就是说绝对定位和固定定位和浮动类似",[28,133609,133610],{"start":70},[31,133611,133612],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1480,133614,133615,133618,133621],{},[31,133616,133617],{},"可以用inline-block 转换为行内块",[31,133619,133620],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[31,133622,133623],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[35,133625,133626],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22327,133628,133630],{"id":133629},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[28,133632,133633,133636,133639,133642],{},[31,133634,133635],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[31,133637,133638],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[31,133640,133641],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[31,133643,133644],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[75,133646,133647],{"className":126798,"code":131264,"language":126800,"meta":66,"style":66},[81,133648,133649,133655,133665,133669,133675,133685],{"__ignoreMap":66},[84,133650,133651,133653],{"class":86,"line":87},[84,133652,131271],{"class":90},[84,133654,15901],{"class":477},[84,133656,133657,133659,133661,133663],{"class":86,"line":98},[84,133658,131278],{"class":94},[84,133660,51764],{"class":477},[84,133662,24065],{"class":94},[84,133664,1634],{"class":477},[84,133666,133667],{"class":86,"line":70},[84,133668,1905],{"class":477},[84,133670,133671,133673],{"class":86,"line":120},[84,133672,131293],{"class":90},[84,133674,15901],{"class":477},[84,133676,133677,133679,133681,133683],{"class":86,"line":131},[84,133678,131278],{"class":94},[84,133680,51764],{"class":477},[84,133682,72848],{"class":94},[84,133684,1634],{"class":477},[84,133686,133687],{"class":86,"line":145},[84,133688,1905],{"class":477},[64,133690],{"style":126654,"src":133691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22327,133693,133695],{"id":133694},"_11138-轮播图","11.1.3.8 轮播图",[64,133697],{"style":126654,"src":133698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[28,133700,133701],{},[31,133702,133703],{},"制作顺序:",[1480,133705,133706,133709,133712,133721],{},[31,133707,133708],{},"大盒子我们类名为： tb-promo 淘宝广告",[31,133710,133711],{},"里面先放一张图片",[31,133713,133714,133715,133717,133718,133720],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54,133716],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54,133719],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[31,133722,133723,133724,133726,133727,133729],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54,133725],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54,133728],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[28,133731,133732],{"start":98},[31,133733,133734],{},"代码模块",[75,133736,133738],{"className":126798,"code":133737,"language":126800,"meta":66,"style":66},"\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",[81,133739,133740,133745,133752,133762,133772,133782,133786,133791,133798,133808],{"__ignoreMap":66},[84,133741,133742],{"class":86,"line":87},[84,133743,133744],{"class":328},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[84,133746,133747,133750],{"class":86,"line":98},[84,133748,133749],{"class":90},".son",[84,133751,15901],{"class":477},[84,133753,133754,133756,133758,133760],{"class":86,"line":70},[84,133755,132604],{"class":94},[84,133757,51764],{"class":477},[84,133759,55157],{"class":94},[84,133761,1634],{"class":477},[84,133763,133764,133766,133768,133770],{"class":86,"line":120},[84,133765,132618],{"class":94},[84,133767,51764],{"class":477},[84,133769,666],{"class":94},[84,133771,1634],{"class":477},[84,133773,133774,133776,133778,133780],{"class":86,"line":131},[84,133775,132635],{"class":94},[84,133777,51764],{"class":477},[84,133779,666],{"class":94},[84,133781,1634],{"class":477},[84,133783,133784],{"class":86,"line":145},[84,133785,1905],{"class":477},[84,133787,133788],{"class":86,"line":156},[84,133789,133790],{"class":328},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[84,133792,133793,133796],{"class":86,"line":164},[84,133794,133795],{"class":90},".father",[84,133797,15901],{"class":477},[84,133799,133800,133802,133804,133806],{"class":86,"line":175},[84,133801,132604],{"class":94},[84,133803,51764],{"class":477},[84,133805,55090],{"class":94},[84,133807,1634],{"class":477},[84,133809,133810],{"class":86,"line":185},[84,133811,1905],{"class":477},[35,133813,133814],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[23,133816,133818],{"id":133817},"_1114-定位数值的移动","11.1.4 定位数值的移动",[64,133820],{"style":126654,"src":133821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[35,133823,133824],{},"✨ 黄金口诀：",[35,133826,133827],{},"\"TOP正下负上，LEFT正右负左\"",[35,133829,133830],{},"\"RIGHT正左负右，BOTTOM正上负下",[35,133832,133833],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[35,133835,133836],{},"✨ 简单记：",[35,133838,133839],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[389,133841,133842],{},"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":66,"searchDepth":98,"depth":98,"links":133844},[133845],{"id":132372,"depth":98,"text":132373,"children":133846},[133847,133848,133849,133850],{"id":132376,"depth":70,"text":132377},{"id":132391,"depth":70,"text":132392},{"id":132559,"depth":70,"text":132560},{"id":133817,"depth":70,"text":133818},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132364,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133857,"title":133858,"body":133859,"description":400,"extension":401,"meta":135282,"navigation":403,"path":135283,"seo":135284,"stem":135285,"__hash__":135286},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133860,"toc":135261},[133861,133864,133868,133876,133880,133885,133893,133905,133909,133914,133922,133933,133937,133942,133983,133991,133995,133998,134001,134004,134098,134101,134195,134198,134292,134295,134298,134333,134336,134339,134369,134372,134375,134378,134381,134384,134387,134390,134460,134463,134467,134471,134512,134516,134522,134525,134528,134532,134535,134538,134541,134622,134625,134628,134632,134636,134639,134642,134645,134648,134651,134657,134666,134670,134689,134693,134703,134706,134709,134712,134715,134718,134721,134724,134727,134736,134740,134749,134752,134757,134810,134815,134981,134984,134987,134992,134995,134998,135001,135004,135009,135157,135160,135163,135168,135171,135176,135210,135213,135216,135220,135223,135230,135233,135236,135239,135242,135245,135248,135251,135255,135258],[10,133862,133858],{"id":133863},"_12-显示隐藏与图形资源",[14,133865,133867],{"id":133866},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1480,133869,133870,133873],{},[31,133871,133872],{},"目的:让一个元素在页面中消失或者显示出来",[31,133874,133875],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[23,133877,133879],{"id":133878},"_1211-display-显示","12.1.1 display 显示",[28,133881,133882],{},[31,133883,133884],{},"display 设置或检索对象是否及如何显示",[1480,133886,133887,133890],{},[31,133888,133889],{},"display: none;隐藏对象",[31,133891,133892],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[28,133894,133895,133902],{"start":98},[31,133896,133897,133898,133901],{},"特点： display 隐藏元素后， ",[624,133899,133900],{},"不再占"," 有原来的位置",[31,133903,133904],{},"在js中使用非常的广泛",[23,133906,133908],{"id":133907},"_1212-visibility可见性","12.1.2 visibility可见性",[28,133910,133911],{},[31,133912,133913],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1480,133915,133916,133919],{},[31,133917,133918],{},"visibility： visible；元素可见",[31,133920,133921],{},"visibility：hidden；元素隐藏",[28,133923,133924,133927,133930],{"start":98},[31,133925,133926],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[31,133928,133929],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[31,133931,133932],{},"隐藏后继续占有原有位置",[23,133934,133936],{"id":133935},"_1213-overflow溢出","12.1.3 overflow溢出",[1480,133938,133939],{},[31,133940,133941],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[612,133943,133944,133952],{},[615,133945,133946],{},[618,133947,133948,133950],{},[621,133949,127262],{"align":24065},[621,133951,27816],{"align":24065},[659,133953,133954,133962,133969,133976],{},[618,133955,133956,133959],{},[664,133957,133958],{"align":24065},"visible",[664,133960,133961],{"align":24065},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[618,133963,133964,133966],{},[664,133965,62040],{"align":24065},[664,133967,133968],{"align":24065},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[618,133970,133971,133973],{},[664,133972,129218],{"align":24065},[664,133974,133975],{"align":24065},"不管超出内容否，总是显示滚动条",[618,133977,133978,133980],{},[664,133979,72989],{"align":24065},[664,133981,133982],{"align":24065},"超出自动显示滚动条，不超出不显示滚动条",[1480,133984,133985,133988],{},[31,133986,133987],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[31,133989,133990],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[23,133992,133994],{"id":133993},"_1214-案例收获","12.1.4 案例收获",[64,133996],{"style":126654,"src":133997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[35,133999,134000],{},"问题：没做出来动态效果，使用hover没实现",[35,134002,134003],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[75,134005,134006],{"className":126798,"code":132230,"language":126800,"meta":66,"style":66},[81,134007,134008,134012,134026,134030,134044,134048,134062,134066,134080,134084],{"__ignoreMap":66},[84,134009,134010],{"class":86,"line":87},[84,134011,132237],{"class":328},[84,134013,134014,134016,134018,134020,134022,134024],{"class":86,"line":98},[84,134015,132242],{"class":90},[84,134017,80133],{"class":477},[84,134019,129158],{"class":94},[84,134021,51764],{"class":477},[84,134023,132251],{"class":94},[84,134025,129728],{"class":477},[84,134027,134028],{"class":86,"line":70},[84,134029,132258],{"class":328},[84,134031,134032,134034,134036,134038,134040,134042],{"class":86,"line":120},[84,134033,132263],{"class":90},[84,134035,80133],{"class":477},[84,134037,129158],{"class":94},[84,134039,51764],{"class":477},[84,134041,55090],{"class":94},[84,134043,129728],{"class":477},[84,134045,134046],{"class":86,"line":131},[84,134047,132278],{"class":328},[84,134049,134050,134052,134054,134056,134058,134060],{"class":86,"line":145},[84,134051,132283],{"class":90},[84,134053,80133],{"class":477},[84,134055,129158],{"class":94},[84,134057,51764],{"class":477},[84,134059,55157],{"class":94},[84,134061,129728],{"class":477},[84,134063,134064],{"class":86,"line":156},[84,134065,132298],{"class":328},[84,134067,134068,134070,134072,134074,134076,134078],{"class":86,"line":164},[84,134069,132303],{"class":90},[84,134071,80133],{"class":477},[84,134073,129158],{"class":94},[84,134075,51764],{"class":477},[84,134077,86559],{"class":94},[84,134079,129728],{"class":477},[84,134081,134082],{"class":86,"line":175},[84,134083,132318],{"class":328},[84,134085,134086,134088,134090,134092,134094,134096],{"class":86,"line":185},[84,134087,132323],{"class":90},[84,134089,80133],{"class":477},[84,134091,129158],{"class":94},[84,134093,51764],{"class":477},[84,134095,132332],{"class":94},[84,134097,129728],{"class":477},[35,134099,134100],{},"完整代码：",[75,134102,134103],{"className":126798,"code":132230,"language":126800,"meta":66,"style":66},[81,134104,134105,134109,134123,134127,134141,134145,134159,134163,134177,134181],{"__ignoreMap":66},[84,134106,134107],{"class":86,"line":87},[84,134108,132237],{"class":328},[84,134110,134111,134113,134115,134117,134119,134121],{"class":86,"line":98},[84,134112,132242],{"class":90},[84,134114,80133],{"class":477},[84,134116,129158],{"class":94},[84,134118,51764],{"class":477},[84,134120,132251],{"class":94},[84,134122,129728],{"class":477},[84,134124,134125],{"class":86,"line":70},[84,134126,132258],{"class":328},[84,134128,134129,134131,134133,134135,134137,134139],{"class":86,"line":120},[84,134130,132263],{"class":90},[84,134132,80133],{"class":477},[84,134134,129158],{"class":94},[84,134136,51764],{"class":477},[84,134138,55090],{"class":94},[84,134140,129728],{"class":477},[84,134142,134143],{"class":86,"line":131},[84,134144,132278],{"class":328},[84,134146,134147,134149,134151,134153,134155,134157],{"class":86,"line":145},[84,134148,132283],{"class":90},[84,134150,80133],{"class":477},[84,134152,129158],{"class":94},[84,134154,51764],{"class":477},[84,134156,55157],{"class":94},[84,134158,129728],{"class":477},[84,134160,134161],{"class":86,"line":156},[84,134162,132298],{"class":328},[84,134164,134165,134167,134169,134171,134173,134175],{"class":86,"line":164},[84,134166,132303],{"class":90},[84,134168,80133],{"class":477},[84,134170,129158],{"class":94},[84,134172,51764],{"class":477},[84,134174,86559],{"class":94},[84,134176,129728],{"class":477},[84,134178,134179],{"class":86,"line":175},[84,134180,132318],{"class":328},[84,134182,134183,134185,134187,134189,134191,134193],{"class":86,"line":185},[84,134184,132323],{"class":90},[84,134186,80133],{"class":477},[84,134188,129158],{"class":94},[84,134190,51764],{"class":477},[84,134192,132332],{"class":94},[84,134194,129728],{"class":477},[35,134196,134197],{},"分布思路重点详解：",[75,134199,134200],{"className":126798,"code":132230,"language":126800,"meta":66,"style":66},[81,134201,134202,134206,134220,134224,134238,134242,134256,134260,134274,134278],{"__ignoreMap":66},[84,134203,134204],{"class":86,"line":87},[84,134205,132237],{"class":328},[84,134207,134208,134210,134212,134214,134216,134218],{"class":86,"line":98},[84,134209,132242],{"class":90},[84,134211,80133],{"class":477},[84,134213,129158],{"class":94},[84,134215,51764],{"class":477},[84,134217,132251],{"class":94},[84,134219,129728],{"class":477},[84,134221,134222],{"class":86,"line":70},[84,134223,132258],{"class":328},[84,134225,134226,134228,134230,134232,134234,134236],{"class":86,"line":120},[84,134227,132263],{"class":90},[84,134229,80133],{"class":477},[84,134231,129158],{"class":94},[84,134233,51764],{"class":477},[84,134235,55090],{"class":94},[84,134237,129728],{"class":477},[84,134239,134240],{"class":86,"line":131},[84,134241,132278],{"class":328},[84,134243,134244,134246,134248,134250,134252,134254],{"class":86,"line":145},[84,134245,132283],{"class":90},[84,134247,80133],{"class":477},[84,134249,129158],{"class":94},[84,134251,51764],{"class":477},[84,134253,55157],{"class":94},[84,134255,129728],{"class":477},[84,134257,134258],{"class":86,"line":156},[84,134259,132298],{"class":328},[84,134261,134262,134264,134266,134268,134270,134272],{"class":86,"line":164},[84,134263,132303],{"class":90},[84,134265,80133],{"class":477},[84,134267,129158],{"class":94},[84,134269,51764],{"class":477},[84,134271,86559],{"class":94},[84,134273,129728],{"class":477},[84,134275,134276],{"class":86,"line":175},[84,134277,132318],{"class":328},[84,134279,134280,134282,134284,134286,134288,134290],{"class":86,"line":185},[84,134281,132323],{"class":90},[84,134283,80133],{"class":477},[84,134285,129158],{"class":94},[84,134287,51764],{"class":477},[84,134289,132332],{"class":94},[84,134291,129728],{"class":477},[64,134293],{"style":126654,"src":134294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[35,134296,134297],{},"图片太大，盒子太小，此时需要修改图片的大小",[75,134299,134301],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[81,134302,134303],{"__ignoreMap":66},[84,134304,134305,134307,134309,134311,134313,134316,134318,134320,134323,134326,134328,134331],{"class":86,"line":87},[84,134306,1383],{"class":477},[84,134308,64],{"class":51627},[84,134310,55565],{"class":90},[84,134312,523],{"class":477},[84,134314,134315],{"class":104},"\"images\u002Fpic.jpg\"",[84,134317,55573],{"class":90},[84,134319,523],{"class":477},[84,134321,134322],{"class":104},"\"描述文字\"",[84,134324,134325],{"class":90}," title",[84,134327,523],{"class":477},[84,134329,134330],{"class":104},"\"悬停提示\"",[84,134332,51634],{"class":477},[64,134334],{"style":126654,"src":134335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[35,134337,134338],{},"制造遮罩层",[75,134340,134341],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,134342,134343],{"__ignoreMap":66},[84,134344,134345,134347,134349,134351,134353,134355,134357,134359,134361,134363,134365,134367],{"class":86,"line":87},[84,134346,1383],{"class":477},[84,134348,64],{"class":51627},[84,134350,55565],{"class":90},[84,134352,523],{"class":477},[84,134354,134315],{"class":104},[84,134356,55573],{"class":90},[84,134358,523],{"class":477},[84,134360,134322],{"class":104},[84,134362,134325],{"class":90},[84,134364,523],{"class":477},[84,134366,134330],{"class":104},[84,134368,51634],{"class":477},[35,134370,134371],{},"此时是这样的为标准流",[64,134373],{"style":126654,"src":134374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[35,134376,134377],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[35,134379,134380],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[35,134382,134383],{},"让他在中间，用center(background-position)",[35,134385,134386],{},"将需要变的尽可能放到一个盒子中",[35,134388,134389],{},"放大盒子上内部盒子发生变化",[75,134391,134393],{"className":126798,"code":134392,"language":126800,"meta":66,"style":66},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[81,134394,134395,134401,134411,134415,134422,134432,134444,134456],{"__ignoreMap":66},[84,134396,134397,134399],{"class":86,"line":87},[84,134398,127865],{"class":90},[84,134400,15901],{"class":477},[84,134402,134403,134405,134407,134409],{"class":86,"line":98},[84,134404,132604],{"class":94},[84,134406,51764],{"class":477},[84,134408,55090],{"class":94},[84,134410,1634],{"class":477},[84,134412,134413],{"class":86,"line":70},[84,134414,1905],{"class":477},[84,134416,134417,134420],{"class":86,"line":120},[84,134418,134419],{"class":90},".child",[84,134421,15901],{"class":477},[84,134423,134424,134426,134428,134430],{"class":86,"line":131},[84,134425,132604],{"class":94},[84,134427,51764],{"class":477},[84,134429,55157],{"class":94},[84,134431,1634],{"class":477},[84,134433,134434,134436,134438,134440,134442],{"class":86,"line":145},[84,134435,132618],{"class":94},[84,134437,51764],{"class":477},[84,134439,1129],{"class":94},[84,134441,801],{"class":473},[84,134443,1634],{"class":477},[84,134445,134446,134448,134450,134452,134454],{"class":86,"line":156},[84,134447,132635],{"class":94},[84,134449,51764],{"class":477},[84,134451,1129],{"class":94},[84,134453,801],{"class":473},[84,134455,1634],{"class":477},[84,134457,134458],{"class":86,"line":164},[84,134459,1905],{"class":477},[35,134461,134462],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134464,134466],{"id":134465},"_122-精灵图","12.2 精灵图",[23,134468,134470],{"id":134469},"_1221-理解","12.2.1 理解",[28,134472,134473,134491],{},[31,134474,134475,134476,132704,134479,134482,134483,134486,134487,134490],{},"目的： ",[624,134477,134478],{},"为了有效地减少服务器接收和发送请求的次数",[624,134480,134481],{},"提高"," 页面的 ",[624,134484,134485],{},"加载速度"," ，出现了 ",[624,134488,134489],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[31,134492,134493,134494,134496,134497,134499,134500,134502,134503,134505,134506,134508,134509,134511],{},"使用精灵图核心：",[54,134495],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54,134498],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54,134501],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54,134504],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54,134507],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54,134510],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[23,134513,134515],{"id":134514},"_1222-扒图","12.2.2 扒图",[75,134517,134520],{"className":134518,"code":134519,"language":5516},[5514],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[81,134521,134519],{"__ignoreMap":66},[64,134523],{"style":126654,"src":134524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[64,134526],{"style":126654,"src":134527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[23,134529,134531],{"id":134530},"_1223-精灵图的实现","12.2.3 精灵图的实现",[64,134533],{"style":126654,"src":134534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[35,134536,134537],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[64,134539],{"style":126654,"src":134540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[75,134542,134544],{"className":126798,"code":134543,"language":126800,"meta":66,"style":66},"\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",[81,134545,134546,134551,134558,134570,134582,134601,134618],{"__ignoreMap":66},[84,134547,134548],{"class":86,"line":87},[84,134549,134550],{"class":328},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[84,134552,134553,134556],{"class":86,"line":98},[84,134554,134555],{"class":90},".icon",[84,134557,15901],{"class":477},[84,134559,134560,134562,134564,134566,134568],{"class":86,"line":70},[84,134561,70894],{"class":94},[84,134563,51764],{"class":477},[84,134565,1173],{"class":94},[84,134567,51819],{"class":473},[84,134569,1634],{"class":477},[84,134571,134572,134574,134576,134578,134580],{"class":86,"line":120},[84,134573,71114],{"class":94},[84,134575,51764],{"class":477},[84,134577,1173],{"class":94},[84,134579,51819],{"class":473},[84,134581,1634],{"class":477},[84,134583,134584,134586,134588,134590,134592,134595,134597,134599],{"class":86,"line":131},[84,134585,70937],{"class":94},[84,134587,51764],{"class":477},[84,134589,62052],{"class":94},[84,134591,478],{"class":477},[84,134593,134594],{"class":5545},"sprites.png",[84,134596,14043],{"class":477},[84,134598,62062],{"class":94},[84,134600,1634],{"class":477},[84,134602,134603,134605,134607,134609,134611,134614,134616],{"class":86,"line":145},[84,134604,129058],{"class":94},[84,134606,51764],{"class":477},[84,134608,52090],{"class":94},[84,134610,51819],{"class":473},[84,134612,134613],{"class":94}," -20",[84,134615,51819],{"class":473},[84,134617,1634],{"class":477},[84,134619,134620],{"class":86,"line":156},[84,134621,1905],{"class":477},[64,134623],{"style":126654,"src":134624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[35,134626,134627],{},"在前端中坐标轴的正方向是右和下",[14,134629,134631],{"id":134630},"_123-字体图标","12.3 字体图标",[23,134633,134635],{"id":134634},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[35,134637,134638],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[35,134640,134641],{},"精灵图是有诸多优点的，但是缺点很明显。",[35,134643,134644],{},"1.图片文件还是比较大的。",[35,134646,134647],{},"2.图片本身放大和缩小会失真。",[35,134649,134650],{},"3.一旦图片制作完毕想要更换非常复杂。",[35,134652,134653,134654,26068],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[624,134655,134656],{},"字体图标 iconfont",[35,134658,134659,134662,134663,28712],{},[624,134660,134661],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[624,134664,134665],{},"展示的是图标，本质属于字体",[23,134667,134669],{"id":134668},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1480,134671,134672,134677,134680,134683,134686],{},[31,134673,134674,134676],{},[624,134675,26204],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[31,134678,134679],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[31,134681,134682],{},"兼容性：几乎支持所有的浏览器，请放心使用",[31,134684,134685],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[31,134687,134688],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[23,134690,134692],{"id":134691},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1480,134694,134695],{},[31,134696,134697,134698],{},"icomoon字体库：",[39,134699,134702],{"href":134700,"rel":134701},"http:\u002F\u002Ficomoon.io\u002F",[43],"http:\u002F\u002Ficomoon.io",[35,134704,134705],{},"进去之后点icomoon app",[64,134707],{"style":126654,"src":134708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[35,134710,134711],{},"可以对其编辑：",[64,134713],{"style":126654,"src":134714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[35,134716,134717],{},"生成字体：",[64,134719],{"style":126654,"src":134720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[35,134722,134723],{},"下载：",[64,134725],{"style":126654,"src":134726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1480,134728,134729],{},[31,134730,134731,134732],{},"阿里iconfont字体库： ",[39,134733,134734],{"href":134734,"rel":134735},"http:\u002F\u002Fwww.iconfont.cn\u002F",[43],[23,134737,134739],{"id":134738},"_1234-字体图标的引入","12.3.4 字体图标的引入",[28,134741,134742],{},[31,134743,134744,134745,134748],{},"把下载包里面的 ",[624,134746,134747],{},"fonts"," 文件夹放入页面根目录下",[64,134750],{"style":126654,"src":134751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[28,134753,134754],{"start":98},[31,134755,134756],{},"字体文件格式",[612,134758,134759,134768],{},[615,134760,134761],{},[618,134762,134763,134766],{},[621,134764,134765],{"align":24065},"格式",[621,134767,24069],{"align":24065},[659,134769,134770,134780,134790,134800],{},[618,134771,134772,134777],{},[664,134773,134774],{"align":24065},[624,134775,134776],{},".ttf",[664,134778,134779],{"align":24065},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[618,134781,134782,134787],{},[664,134783,134784],{"align":24065},[624,134785,134786],{},".woff",[664,134788,134789],{"align":24065},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[618,134791,134792,134797],{},[664,134793,134794],{"align":24065},[624,134795,134796],{},".eot",[664,134798,134799],{"align":24065},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[618,134801,134802,134807],{},[664,134803,134804],{"align":24065},[624,134805,134806],{},"svg",[664,134808,134809],{"align":24065},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[28,134811,134812],{"start":70},[31,134813,134814],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[75,134816,134818],{"className":126798,"code":134817,"language":126800,"meta":66,"style":66},"\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",[81,134819,134820,134825,134832,134844,134860,134885,134906,134926,134946,134950,134956,134966,134977],{"__ignoreMap":66},[84,134821,134822],{"class":86,"line":87},[84,134823,134824],{"class":328},"\u002F* 引入字体图标 *\u002F\n",[84,134826,134827,134830],{"class":86,"line":98},[84,134828,134829],{"class":473},"@font-face",[84,134831,15901],{"class":477},[84,134833,134834,134837,134839,134842],{"class":86,"line":70},[84,134835,134836],{"class":94},"  font-family",[84,134838,51764],{"class":477},[84,134840,134841],{"class":104},"'icomoon'",[84,134843,1634],{"class":477},[84,134845,134846,134849,134851,134853,134855,134858],{"class":86,"line":120},[84,134847,134848],{"class":94},"  src",[84,134850,51764],{"class":477},[84,134852,62052],{"class":94},[84,134854,478],{"class":477},[84,134856,134857],{"class":104},"'fonts\u002Ficomoon.eot'",[84,134859,3048],{"class":477},[84,134861,134862,134864,134866,134868,134870,134873,134875,134878,134880,134883],{"class":86,"line":131},[84,134863,134848],{"class":94},[84,134865,51764],{"class":477},[84,134867,62052],{"class":94},[84,134869,478],{"class":477},[84,134871,134872],{"class":104},"'fonts\u002Ficomoon.eot?#iefix'",[84,134874,14043],{"class":477},[84,134876,134877],{"class":94},"format",[84,134879,478],{"class":477},[84,134881,134882],{"class":104},"'embedded-opentype'",[84,134884,38374],{"class":477},[84,134886,134887,134890,134892,134895,134897,134899,134901,134904],{"class":86,"line":145},[84,134888,134889],{"class":94},"       url",[84,134891,478],{"class":477},[84,134893,134894],{"class":104},"'fonts\u002Ficomoon.woff'",[84,134896,14043],{"class":477},[84,134898,134877],{"class":94},[84,134900,478],{"class":477},[84,134902,134903],{"class":104},"'woff'",[84,134905,38374],{"class":477},[84,134907,134908,134910,134912,134915,134917,134919,134921,134924],{"class":86,"line":156},[84,134909,134889],{"class":94},[84,134911,478],{"class":477},[84,134913,134914],{"class":104},"'fonts\u002Ficomoon.ttf'",[84,134916,14043],{"class":477},[84,134918,134877],{"class":94},[84,134920,478],{"class":477},[84,134922,134923],{"class":104},"'truetype'",[84,134925,38374],{"class":477},[84,134927,134928,134930,134932,134935,134937,134939,134941,134944],{"class":86,"line":164},[84,134929,134889],{"class":94},[84,134931,478],{"class":477},[84,134933,134934],{"class":104},"'fonts\u002Ficomoon.svg#icomoon'",[84,134936,14043],{"class":477},[84,134938,134877],{"class":94},[84,134940,478],{"class":477},[84,134942,134943],{"class":104},"'svg'",[84,134945,3048],{"class":477},[84,134947,134948],{"class":86,"line":175},[84,134949,1905],{"class":477},[84,134951,134952,134954],{"class":86,"line":185},[84,134953,134555],{"class":90},[84,134955,15901],{"class":477},[84,134957,134958,134960,134962,134964],{"class":86,"line":195},[84,134959,134836],{"class":94},[84,134961,51764],{"class":477},[84,134963,134841],{"class":104},[84,134965,1634],{"class":477},[84,134967,134968,134971,134973,134975],{"class":86,"line":206},[84,134969,134970],{"class":94},"  font-style",[84,134972,51764],{"class":477},[84,134974,64167],{"class":94},[84,134976,1634],{"class":477},[84,134978,134979],{"class":86,"line":217},[84,134980,1905],{"class":477},[35,134982,134983],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[64,134985],{"style":126654,"src":134986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[28,134988,134989],{"start":120},[31,134990,134991],{},"添加字体",[64,134993],{"style":126654,"src":134994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[35,134996,134997],{},"复制：",[64,134999],{"style":126654,"src":135000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[35,135002,135003],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[28,135005,135006],{"start":131},[31,135007,135008],{},"代码展示：",[75,135010,135011],{"className":126798,"code":134817,"language":126800,"meta":66,"style":66},[81,135012,135013,135017,135023,135033,135047,135069,135087,135105,135123,135127,135133,135143,135153],{"__ignoreMap":66},[84,135014,135015],{"class":86,"line":87},[84,135016,134824],{"class":328},[84,135018,135019,135021],{"class":86,"line":98},[84,135020,134829],{"class":473},[84,135022,15901],{"class":477},[84,135024,135025,135027,135029,135031],{"class":86,"line":70},[84,135026,134836],{"class":94},[84,135028,51764],{"class":477},[84,135030,134841],{"class":104},[84,135032,1634],{"class":477},[84,135034,135035,135037,135039,135041,135043,135045],{"class":86,"line":120},[84,135036,134848],{"class":94},[84,135038,51764],{"class":477},[84,135040,62052],{"class":94},[84,135042,478],{"class":477},[84,135044,134857],{"class":104},[84,135046,3048],{"class":477},[84,135048,135049,135051,135053,135055,135057,135059,135061,135063,135065,135067],{"class":86,"line":131},[84,135050,134848],{"class":94},[84,135052,51764],{"class":477},[84,135054,62052],{"class":94},[84,135056,478],{"class":477},[84,135058,134872],{"class":104},[84,135060,14043],{"class":477},[84,135062,134877],{"class":94},[84,135064,478],{"class":477},[84,135066,134882],{"class":104},[84,135068,38374],{"class":477},[84,135070,135071,135073,135075,135077,135079,135081,135083,135085],{"class":86,"line":145},[84,135072,134889],{"class":94},[84,135074,478],{"class":477},[84,135076,134894],{"class":104},[84,135078,14043],{"class":477},[84,135080,134877],{"class":94},[84,135082,478],{"class":477},[84,135084,134903],{"class":104},[84,135086,38374],{"class":477},[84,135088,135089,135091,135093,135095,135097,135099,135101,135103],{"class":86,"line":156},[84,135090,134889],{"class":94},[84,135092,478],{"class":477},[84,135094,134914],{"class":104},[84,135096,14043],{"class":477},[84,135098,134877],{"class":94},[84,135100,478],{"class":477},[84,135102,134923],{"class":104},[84,135104,38374],{"class":477},[84,135106,135107,135109,135111,135113,135115,135117,135119,135121],{"class":86,"line":164},[84,135108,134889],{"class":94},[84,135110,478],{"class":477},[84,135112,134934],{"class":104},[84,135114,14043],{"class":477},[84,135116,134877],{"class":94},[84,135118,478],{"class":477},[84,135120,134943],{"class":104},[84,135122,3048],{"class":477},[84,135124,135125],{"class":86,"line":175},[84,135126,1905],{"class":477},[84,135128,135129,135131],{"class":86,"line":185},[84,135130,134555],{"class":90},[84,135132,15901],{"class":477},[84,135134,135135,135137,135139,135141],{"class":86,"line":195},[84,135136,134836],{"class":94},[84,135138,51764],{"class":477},[84,135140,134841],{"class":104},[84,135142,1634],{"class":477},[84,135144,135145,135147,135149,135151],{"class":86,"line":206},[84,135146,134970],{"class":94},[84,135148,51764],{"class":477},[84,135150,64167],{"class":94},[84,135152,1634],{"class":477},[84,135154,135155],{"class":86,"line":217},[84,135156,1905],{"class":477},[64,135158],{"style":126654,"src":135159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[35,135161,135162],{},"更加细节展示：",[28,135164,135165],{},[31,135166,135167],{},"html 标签内添加小图标",[64,135169],{"style":126654,"src":135170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[28,135172,135173],{"start":98},[31,135174,135175],{},"给标签定义字体",[75,135177,135178],{"className":127545,"code":130902,"language":127547,"meta":66,"style":66},[81,135179,135180,135184,135198,135202],{"__ignoreMap":66},[84,135181,135182],{"class":86,"line":87},[84,135183,130909],{"class":328},[84,135185,135186,135188,135190,135192,135194,135196],{"class":86,"line":98},[84,135187,1383],{"class":477},[84,135189,51938],{"class":51627},[84,135191,53813],{"class":90},[84,135193,523],{"class":477},[84,135195,130922],{"class":104},[84,135197,51634],{"class":477},[84,135199,135200],{"class":86,"line":70},[84,135201,130929],{"class":477},[84,135203,135204,135206,135208],{"class":86,"line":120},[84,135205,52112],{"class":477},[84,135207,51938],{"class":51627},[84,135209,51634],{"class":477},[35,135211,135212],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[64,135214],{"style":126654,"src":135215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[23,135217,135219],{"id":135218},"_1235-字体图标的追加","12.3.5 字体图标的追加",[35,135221,135222],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[35,135224,135225,135226,135229],{},"把压缩包里面的 ",[624,135227,135228],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[35,135231,135232],{},"打开网站，点下方：",[64,135234],{"style":126654,"src":135235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[64,135237],{"style":126654,"src":135238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[64,135240],{"style":126654,"src":135241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[35,135243,135244],{},"点yes重新加载",[35,135246,135247],{},"然后重复之前的操作就可以实现了",[35,135249,135250],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[23,135252,135254],{"id":135253},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[64,135256],{"style":126654,"src":135257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[389,135259,135260],{},"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":66,"searchDepth":98,"depth":98,"links":135262},[135263,135269,135274],{"id":133866,"depth":98,"text":133867,"children":135264},[135265,135266,135267,135268],{"id":133878,"depth":70,"text":133879},{"id":133907,"depth":70,"text":133908},{"id":133935,"depth":70,"text":133936},{"id":133993,"depth":70,"text":133994},{"id":134465,"depth":98,"text":134466,"children":135270},[135271,135272,135273],{"id":134469,"depth":70,"text":134470},{"id":134514,"depth":70,"text":134515},{"id":134530,"depth":70,"text":134531},{"id":134630,"depth":98,"text":134631,"children":135275},[135276,135277,135278,135279,135280,135281],{"id":134634,"depth":70,"text":134635},{"id":134668,"depth":70,"text":134669},{"id":134691,"depth":70,"text":134692},{"id":134738,"depth":70,"text":134739},{"id":135218,"depth":70,"text":135219},{"id":135253,"depth":70,"text":135254},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133858,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135288,"title":135289,"body":135290,"description":400,"extension":401,"meta":136517,"navigation":403,"path":136518,"seo":136519,"stem":136520,"__hash__":136521},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135291,"toc":136498},[135292,135295,135299,135302,135316,135384,135414,135417,135421,135425,135527,135574,135578,135581,135584,135618,135621,135624,135627,135630,135633,135636,135639,135641,135644,135647,135650,135653,135656,135659,135662,135690,135693,135697,135700,135707,135710,135713,135739,135742,135746,135749,135752,135759,135763,135766,135768,135800,135803,135806,135818,135824,135827,135830,135833,135835,135839,135842,135845,135848,135893,135897,135899,135902,135909,135951,135954,135958,135963,135977,135981,135984,135987,135990,135993,135996,136030,136033,136036,136090,136093,136096,136099,136102,136154,136157,136160,136209,136213,136215,136218,136221,136224,136227,136230,136288,136291,136297,136300,136303,136335,136338,136342,136346,136349,136381,136385,136388,136432,136436,136439,136442,136445,136448,136451,136454,136457,136459,136462,136464,136467,136470,136473,136476,136481,136484,136486,136489,136492,136495],[10,135293,135289],{"id":135294},"_13-界面样式与布局技巧",[14,135296,135298],{"id":135297},"_131-css三角","13.1 css三角",[35,135300,135301],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1480,135303,135304,135307,135310,135313],{},[31,135305,135306],{},"用css 边框可以模拟三角效果",[31,135308,135309],{},"宽度高度为0",[31,135311,135312],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[31,135314,135315],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[75,135317,135319],{"className":126798,"code":135318,"language":126800,"meta":66,"style":66},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[81,135320,135321,135326,135333,135343,135353,135369,135380],{"__ignoreMap":66},[84,135322,135323],{"class":86,"line":87},[84,135324,135325],{"class":328},"\u002F* CSS 实现三角形 *\u002F\n",[84,135327,135328,135331],{"class":86,"line":98},[84,135329,135330],{"class":90},".triangle",[84,135332,15901],{"class":477},[84,135334,135335,135337,135339,135341],{"class":86,"line":70},[84,135336,70894],{"class":94},[84,135338,51764],{"class":477},[84,135340,666],{"class":94},[84,135342,1634],{"class":477},[84,135344,135345,135347,135349,135351],{"class":86,"line":120},[84,135346,71114],{"class":94},[84,135348,51764],{"class":477},[84,135350,666],{"class":94},[84,135352,1634],{"class":477},[84,135354,135355,135357,135359,135361,135363,135365,135367],{"class":86,"line":131},[84,135356,71222],{"class":94},[84,135358,51764],{"class":477},[84,135360,919],{"class":94},[84,135362,51819],{"class":473},[84,135364,51848],{"class":94},[84,135366,64317],{"class":94},[84,135368,1634],{"class":477},[84,135370,135371,135374,135376,135378],{"class":86,"line":145},[84,135372,135373],{"class":94},"  border-bottom-color",[84,135375,51764],{"class":477},[84,135377,62695],{"class":94},[84,135379,1634],{"class":477},[84,135381,135382],{"class":86,"line":156},[84,135383,1905],{"class":477},[75,135385,135386],{"className":126798,"code":130955,"language":126800,"meta":66,"style":66},[81,135387,135388,135394,135410],{"__ignoreMap":66},[84,135389,135390,135392],{"class":86,"line":87},[84,135391,51938],{"class":51627},[84,135393,15901],{"class":477},[84,135395,135396,135398,135400,135402,135404,135406,135408],{"class":86,"line":98},[84,135397,71222],{"class":94},[84,135399,51764],{"class":477},[84,135401,692],{"class":94},[84,135403,51819],{"class":473},[84,135405,51848],{"class":94},[84,135407,130190],{"class":94},[84,135409,1634],{"class":477},[84,135411,135412],{"class":86,"line":70},[84,135413,1905],{"class":477},[64,135415],{"style":126654,"src":135416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135418,135420],{"id":135419},"_132-css用户界面样式","13.2 css用户界面样式",[23,135422,135424],{"id":135423},"_1321-鼠标样式","13.2.1 鼠标样式",[75,135426,135428],{"className":126798,"code":135427,"language":126800,"meta":66,"style":66},"\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",[81,135429,135430,135435,135454,135472,135491,135508],{"__ignoreMap":66},[84,135431,135432],{"class":86,"line":87},[84,135433,135434],{"class":328},"\u002F* 鼠标样式 *\u002F\n",[84,135436,135437,135439,135441,135444,135446,135448,135451],{"class":86,"line":98},[84,135438,51938],{"class":51627},[84,135440,80133],{"class":477},[84,135442,135443],{"class":94},"cursor",[84,135445,51764],{"class":477},[84,135447,62356],{"class":94},[84,135449,135450],{"class":477},"; }   ",[84,135452,135453],{"class":328},"\u002F* 手型 *\u002F\n",[84,135455,135456,135458,135460,135462,135464,135467,135469],{"class":86,"line":70},[84,135457,51938],{"class":51627},[84,135459,80133],{"class":477},[84,135461,135443],{"class":94},[84,135463,51764],{"class":477},[84,135465,135466],{"class":94},"default",[84,135468,135450],{"class":477},[84,135470,135471],{"class":328},"\u002F* 默认 *\u002F\n",[84,135473,135474,135476,135478,135480,135482,135485,135488],{"class":86,"line":120},[84,135475,51938],{"class":51627},[84,135477,80133],{"class":477},[84,135479,135443],{"class":94},[84,135481,51764],{"class":477},[84,135483,135484],{"class":94},"move",[84,135486,135487],{"class":477},"; }      ",[84,135489,135490],{"class":328},"\u002F* 移动 *\u002F\n",[84,135492,135493,135495,135497,135499,135501,135503,135505],{"class":86,"line":131},[84,135494,51938],{"class":51627},[84,135496,80133],{"class":477},[84,135498,135443],{"class":94},[84,135500,51764],{"class":477},[84,135502,5516],{"class":94},[84,135504,135487],{"class":477},[84,135506,135507],{"class":328},"\u002F* 文本 *\u002F\n",[84,135509,135510,135512,135514,135516,135518,135521,135524],{"class":86,"line":145},[84,135511,51938],{"class":51627},[84,135513,80133],{"class":477},[84,135515,135443],{"class":94},[84,135517,51764],{"class":477},[84,135519,135520],{"class":94},"not-allowed",[84,135522,135523],{"class":477},"; } ",[84,135525,135526],{"class":328},"\u002F* 禁止 *\u002F\n",[612,135528,135529,135537],{},[615,135530,135531],{},[618,135532,135533,135535],{},[621,135534,127262],{"align":24065},[621,135536,27816],{"align":24065},[659,135538,135539,135546,135553,135560,135567],{},[618,135540,135541,135543],{},[664,135542,135466],{"align":24065},[664,135544,135545],{"align":24065},"小白 默认",[618,135547,135548,135550],{},[664,135549,62356],{"align":24065},[664,135551,135552],{"align":24065},"小手",[618,135554,135555,135557],{},[664,135556,135484],{"align":24065},[664,135558,135559],{"align":24065},"移动",[618,135561,135562,135564],{},[664,135563,5516],{"align":24065},[664,135565,135566],{"align":24065},"文本",[618,135568,135569,135571],{},[664,135570,135520],{"align":24065},[664,135572,135573],{"align":24065},"禁止",[23,135575,135577],{"id":135576},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[35,135579,135580],{},"去除表单轮廓线",[35,135582,135583],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[75,135585,135586],{"className":126798,"code":130162,"language":126800,"meta":66,"style":66},[81,135587,135588,135592,135598,135614],{"__ignoreMap":66},[84,135589,135590],{"class":86,"line":87},[84,135591,130169],{"class":328},[84,135593,135594,135596],{"class":86,"line":98},[84,135595,51938],{"class":51627},[84,135597,15901],{"class":477},[84,135599,135600,135602,135604,135606,135608,135610,135612],{"class":86,"line":70},[84,135601,71222],{"class":94},[84,135603,51764],{"class":477},[84,135605,692],{"class":94},[84,135607,51819],{"class":473},[84,135609,51848],{"class":94},[84,135611,130190],{"class":94},[84,135613,1634],{"class":477},[84,135615,135616],{"class":86,"line":120},[84,135617,1905],{"class":477},[35,135619,135620],{},"文本域：",[64,135622],{"style":126654,"src":135623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[35,135625,135626],{},"此时会有一个空白区域",[64,135628],{"style":126654,"src":135629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[35,135631,135632],{},"写在同一行就不会出现这个问题",[64,135634],{"style":126654,"src":135635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[35,135637,135638],{},"文本域是行内块元素，一定记住！！！",[35,135640,98559],{},[64,135642],{"style":126654,"src":135643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[35,135645,135646],{},"文本域尽量放在一行",[35,135648,135649],{},"知识回顾：cols是列，rols是行",[64,135651],{"style":126654,"src":135652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[35,135654,135655],{},"它可以进行拖动，显然这是我们不愿意看到的",[64,135657],{"style":126654,"src":135658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[35,135660,135661],{},"使用resize进行解决",[75,135663,135665],{"className":126798,"code":135664,"language":126800,"meta":66,"style":66},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[81,135666,135667,135673,135686],{"__ignoreMap":66},[84,135668,135669,135671],{"class":86,"line":87},[84,135670,54147],{"class":51627},[84,135672,15901],{"class":477},[84,135674,135675,135677,135679,135681,135683],{"class":86,"line":98},[84,135676,71124],{"class":94},[84,135678,51764],{"class":477},[84,135680,55063],{"class":94},[84,135682,130661],{"class":477},[84,135684,135685],{"class":328},"\u002F* 取消表单轮廓线 *\u002F\n",[84,135687,135688],{"class":86,"line":70},[84,135689,1905],{"class":477},[35,135691,135692],{},"此时就无法通过右下方实现拖动了",[23,135694,135696],{"id":135695},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[35,135698,135699],{},"实现一个盒子中的文字和图片对齐",[35,135701,135702,135703,135706],{},"用于设置一个元素的 ",[624,135704,135705],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[35,135708,135709],{},"图片和文字默认是基线对齐",[64,135711],{"style":126654,"src":135712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[75,135714,135715],{"className":126798,"code":135664,"language":126800,"meta":66,"style":66},[81,135716,135717,135723,135735],{"__ignoreMap":66},[84,135718,135719,135721],{"class":86,"line":87},[84,135720,54147],{"class":51627},[84,135722,15901],{"class":477},[84,135724,135725,135727,135729,135731,135733],{"class":86,"line":98},[84,135726,71124],{"class":94},[84,135728,51764],{"class":477},[84,135730,55063],{"class":94},[84,135732,130661],{"class":477},[84,135734,135685],{"class":328},[84,135736,135737],{"class":86,"line":70},[84,135738,1905],{"class":477},[64,135740],{"style":126654,"src":135741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22327,135743,135745],{"id":135744},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[35,135747,135748],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[64,135750],{"style":126654,"src":135751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[35,135753,135754,135755,135758],{},"此时可以给图片、表单这些行内块元素的 ",[624,135756,135757],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22327,135760,135762],{"id":135761},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[35,135764,135765],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[35,135767,14962],{},[75,135769,135771],{"className":126798,"code":135770,"language":126800,"meta":66,"style":66},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[81,135772,135773,135778,135784,135796],{"__ignoreMap":66},[84,135774,135775],{"class":86,"line":87},[84,135776,135777],{"class":328},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[84,135779,135780,135782],{"class":86,"line":98},[84,135781,64],{"class":51627},[84,135783,15901],{"class":477},[84,135785,135786,135789,135791,135794],{"class":86,"line":70},[84,135787,135788],{"class":94},"  vertical-align",[84,135790,51764],{"class":477},[84,135792,135793],{"class":94},"middle",[84,135795,1634],{"class":477},[84,135797,135798],{"class":86,"line":120},[84,135799,1905],{"class":477},[64,135801],{"style":126654,"src":135802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[35,135804,135805],{},"主要解决方法有两种：",[28,135807,135808],{},[31,135809,135810,135813,135814,135817],{},[624,135811,135812],{},"给图片"," 添加 ",[624,135815,135816],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[35,135819,135820,135821],{},"2.把图片转换为块级元素 ",[624,135822,135823],{},"display: block",[35,135825,135826],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[35,135828,135829],{},"img {",[35,135831,135832],{},"vertical-align:middle;",[35,135834,1419],{},[23,135836,135838],{"id":135837},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[35,135840,135841],{},"效果：",[64,135843],{"style":126654,"src":135844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[35,135846,135847],{},"单行文本溢出显示省略号--必须满足三个条件：",[75,135849,135851],{"className":126798,"code":135850,"language":126800,"meta":66,"style":66},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[81,135852,135853,135858,135864,135874,135879,135889],{"__ignoreMap":66},[84,135854,135855],{"class":86,"line":87},[84,135856,135857],{"class":328},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[84,135859,135860,135862],{"class":86,"line":98},[84,135861,64],{"class":51627},[84,135863,15901],{"class":477},[84,135865,135866,135868,135870,135872],{"class":86,"line":70},[84,135867,135788],{"class":94},[84,135869,51764],{"class":477},[84,135871,135793],{"class":94},[84,135873,1634],{"class":477},[84,135875,135876],{"class":86,"line":120},[84,135877,135878],{"class":328},"  \u002F* 或 *\u002F\n",[84,135880,135881,135883,135885,135887],{"class":86,"line":131},[84,135882,128414],{"class":94},[84,135884,51764],{"class":477},[84,135886,61195],{"class":94},[84,135888,1634],{"class":477},[84,135890,135891],{"class":86,"line":145},[84,135892,1905],{"class":477},[23,135894,135896],{"id":135895},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[35,135898,135841],{},[64,135900],{"style":126654,"src":135901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[35,135903,135904,135905,135908],{},"多行文本溢出显示省略号， ",[624,135906,135907],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[75,135910,135911],{"className":126798,"code":135850,"language":126800,"meta":66,"style":66},[81,135912,135913,135917,135923,135933,135937,135947],{"__ignoreMap":66},[84,135914,135915],{"class":86,"line":87},[84,135916,135857],{"class":328},[84,135918,135919,135921],{"class":86,"line":98},[84,135920,64],{"class":51627},[84,135922,15901],{"class":477},[84,135924,135925,135927,135929,135931],{"class":86,"line":70},[84,135926,135788],{"class":94},[84,135928,51764],{"class":477},[84,135930,135793],{"class":94},[84,135932,1634],{"class":477},[84,135934,135935],{"class":86,"line":120},[84,135936,135878],{"class":328},[84,135938,135939,135941,135943,135945],{"class":86,"line":131},[84,135940,128414],{"class":94},[84,135942,51764],{"class":477},[84,135944,61195],{"class":94},[84,135946,1634],{"class":477},[84,135948,135949],{"class":86,"line":145},[84,135950,1905],{"class":477},[35,135952,135953],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135955,135957],{"id":135956},"_133-常见布局技巧","13.3 常见布局技巧",[35,135959,135960],{},[624,135961,135962],{},"巧妙利用一个技术更快更好的布局：",[28,135964,135965,135968,135971,135974],{},[31,135966,135967],{},"margin负值的运用",[31,135969,135970],{},"文字围绕浮动元素",[31,135972,135973],{},"行内块的巧妙运用",[31,135975,135976],{},"CSS三角强化",[23,135978,135980],{"id":135979},"_1331-margin负值的运用","13.3.1 margin负值的运用",[35,135982,135983],{},"应用场景：",[64,135985],{"style":126654,"src":135986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[64,135988],{"style":126654,"src":135989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[35,135991,135992],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[35,135994,135995],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[75,135997,135998],{"className":126798,"code":130162,"language":126800,"meta":66,"style":66},[81,135999,136000,136004,136010,136026],{"__ignoreMap":66},[84,136001,136002],{"class":86,"line":87},[84,136003,130169],{"class":328},[84,136005,136006,136008],{"class":86,"line":98},[84,136007,51938],{"class":51627},[84,136009,15901],{"class":477},[84,136011,136012,136014,136016,136018,136020,136022,136024],{"class":86,"line":70},[84,136013,71222],{"class":94},[84,136015,51764],{"class":477},[84,136017,692],{"class":94},[84,136019,51819],{"class":473},[84,136021,51848],{"class":94},[84,136023,130190],{"class":94},[84,136025,1634],{"class":477},[84,136027,136028],{"class":86,"line":120},[84,136029,1905],{"class":477},[64,136031],{"style":126654,"src":136032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[35,136034,136035],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[75,136037,136039],{"className":126798,"code":136038,"language":126800,"meta":66,"style":66},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[81,136040,136041,136046,136052,136062,136074,136086],{"__ignoreMap":66},[84,136042,136043],{"class":86,"line":87},[84,136044,136045],{"class":328},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[84,136047,136048,136050],{"class":86,"line":98},[84,136049,130646],{"class":90},[84,136051,15901],{"class":477},[84,136053,136054,136056,136058,136060],{"class":86,"line":70},[84,136055,132604],{"class":94},[84,136057,51764],{"class":477},[84,136059,55090],{"class":94},[84,136061,1634],{"class":477},[84,136063,136064,136066,136068,136070,136072],{"class":86,"line":120},[84,136065,132618],{"class":94},[84,136067,51764],{"class":477},[84,136069,919],{"class":94},[84,136071,51819],{"class":473},[84,136073,1634],{"class":477},[84,136075,136076,136078,136080,136082,136084],{"class":86,"line":131},[84,136077,132635],{"class":94},[84,136079,51764],{"class":477},[84,136081,1173],{"class":94},[84,136083,51819],{"class":473},[84,136085,1634],{"class":477},[84,136087,136088],{"class":86,"line":145},[84,136089,1905],{"class":477},[35,136091,136092],{},"加上上述代码会发现：",[64,136094],{"style":126654,"src":136095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[35,136097,136098],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[35,136100,136101],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[75,136103,136104],{"className":126798,"code":136038,"language":126800,"meta":66,"style":66},[81,136105,136106,136110,136116,136126,136138,136150],{"__ignoreMap":66},[84,136107,136108],{"class":86,"line":87},[84,136109,136045],{"class":328},[84,136111,136112,136114],{"class":86,"line":98},[84,136113,130646],{"class":90},[84,136115,15901],{"class":477},[84,136117,136118,136120,136122,136124],{"class":86,"line":70},[84,136119,132604],{"class":94},[84,136121,51764],{"class":477},[84,136123,55090],{"class":94},[84,136125,1634],{"class":477},[84,136127,136128,136130,136132,136134,136136],{"class":86,"line":120},[84,136129,132618],{"class":94},[84,136131,51764],{"class":477},[84,136133,919],{"class":94},[84,136135,51819],{"class":473},[84,136137,1634],{"class":477},[84,136139,136140,136142,136144,136146,136148],{"class":86,"line":131},[84,136141,132635],{"class":94},[84,136143,51764],{"class":477},[84,136145,1173],{"class":94},[84,136147,51819],{"class":473},[84,136149,1634],{"class":477},[84,136151,136152],{"class":86,"line":145},[84,136153,1905],{"class":477},[35,136155,136156],{},"解决方式2：",[35,136158,136159],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[75,136161,136163],{"className":126798,"code":136162,"language":126800,"meta":66,"style":66},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[81,136164,136165,136171,136181,136193,136205],{"__ignoreMap":66},[84,136166,136167,136169],{"class":86,"line":87},[84,136168,51938],{"class":51627},[84,136170,15901],{"class":477},[84,136172,136173,136175,136177,136179],{"class":86,"line":98},[84,136174,132604],{"class":94},[84,136176,51764],{"class":477},[84,136178,55090],{"class":94},[84,136180,1634],{"class":477},[84,136182,136183,136185,136187,136189,136191],{"class":86,"line":70},[84,136184,132618],{"class":94},[84,136186,51764],{"class":477},[84,136188,919],{"class":94},[84,136190,51819],{"class":473},[84,136192,1634],{"class":477},[84,136194,136195,136197,136199,136201,136203],{"class":86,"line":120},[84,136196,132635],{"class":94},[84,136198,51764],{"class":477},[84,136200,1173],{"class":94},[84,136202,51819],{"class":473},[84,136204,1634],{"class":477},[84,136206,136207],{"class":86,"line":131},[84,136208,1905],{"class":477},[23,136210,136212],{"id":136211},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[35,136214,135983],{},[64,136216],{"style":126654,"src":136217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[35,136219,136220],{},"实现结构图：",[64,136222],{"style":126654,"src":136223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[35,136225,136226],{},"巧妙运用浮动元素不会压住文字的特性",[35,136228,136229],{},"代码显示：",[75,136231,136233],{"className":126798,"code":136232,"language":126800,"meta":66,"style":66},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[81,136234,136235,136241,136251,136255,136260,136264,136270,136284],{"__ignoreMap":66},[84,136236,136237,136239],{"class":86,"line":87},[84,136238,130646],{"class":90},[84,136240,15901],{"class":477},[84,136242,136243,136245,136247,136249],{"class":86,"line":98},[84,136244,131278],{"class":94},[84,136246,51764],{"class":477},[84,136248,24065],{"class":94},[84,136250,1634],{"class":477},[84,136252,136253],{"class":86,"line":70},[84,136254,1905],{"class":477},[84,136256,136257],{"class":86,"line":120},[84,136258,136259],{"class":477},"```Css\n",[84,136261,136262],{"class":86,"line":131},[84,136263,130641],{"class":328},[84,136265,136266,136268],{"class":86,"line":145},[84,136267,130646],{"class":90},[84,136269,15901],{"class":477},[84,136271,136272,136274,136276,136278,136280,136282],{"class":86,"line":156},[84,136273,70796],{"class":94},[84,136275,51764],{"class":477},[84,136277,666],{"class":94},[84,136279,51883],{"class":94},[84,136281,130661],{"class":477},[84,136283,130664],{"class":328},[84,136285,136286],{"class":86,"line":164},[84,136287,1905],{"class":477},[35,136289,136290],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[75,136292,136295],{"className":136293,"code":136294,"language":5516},[5514],"\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",[81,136296,136294],{"__ignoreMap":66},[64,136298],{"style":126654,"src":136299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[35,136301,136302],{},"最终展示结果：",[75,136304,136305],{"className":126798,"code":130634,"language":126800,"meta":66,"style":66},[81,136306,136307,136311,136317,136331],{"__ignoreMap":66},[84,136308,136309],{"class":86,"line":87},[84,136310,130641],{"class":328},[84,136312,136313,136315],{"class":86,"line":98},[84,136314,130646],{"class":90},[84,136316,15901],{"class":477},[84,136318,136319,136321,136323,136325,136327,136329],{"class":86,"line":70},[84,136320,70796],{"class":94},[84,136322,51764],{"class":477},[84,136324,666],{"class":94},[84,136326,51883],{"class":94},[84,136328,130661],{"class":477},[84,136330,130664],{"class":328},[84,136332,136333],{"class":86,"line":120},[84,136334,1905],{"class":477},[64,136336],{"style":126654,"src":136337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136339,136341],{"id":136340},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[23,136343,136345],{"id":136344},"_1341-原理","13.4.1 原理",[64,136347],{"style":126654,"src":136348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[75,136350,136351],{"className":126798,"code":130634,"language":126800,"meta":66,"style":66},[81,136352,136353,136357,136363,136377],{"__ignoreMap":66},[84,136354,136355],{"class":86,"line":87},[84,136356,130641],{"class":328},[84,136358,136359,136361],{"class":86,"line":98},[84,136360,130646],{"class":90},[84,136362,15901],{"class":477},[84,136364,136365,136367,136369,136371,136373,136375],{"class":86,"line":70},[84,136366,70796],{"class":94},[84,136368,51764],{"class":477},[84,136370,666],{"class":94},[84,136372,51883],{"class":94},[84,136374,130661],{"class":477},[84,136376,130664],{"class":328},[84,136378,136379],{"class":86,"line":120},[84,136380,1905],{"class":477},[23,136382,136384],{"id":136383},"_1342-实例","13.4.2 实例",[64,136386],{"style":126654,"src":136387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[75,136389,136390],{"className":126798,"code":131264,"language":126800,"meta":66,"style":66},[81,136391,136392,136398,136408,136412,136418,136428],{"__ignoreMap":66},[84,136393,136394,136396],{"class":86,"line":87},[84,136395,131271],{"class":90},[84,136397,15901],{"class":477},[84,136399,136400,136402,136404,136406],{"class":86,"line":98},[84,136401,131278],{"class":94},[84,136403,51764],{"class":477},[84,136405,24065],{"class":94},[84,136407,1634],{"class":477},[84,136409,136410],{"class":86,"line":70},[84,136411,1905],{"class":477},[84,136413,136414,136416],{"class":86,"line":120},[84,136415,131293],{"class":90},[84,136417,15901],{"class":477},[84,136419,136420,136422,136424,136426],{"class":86,"line":131},[84,136421,131278],{"class":94},[84,136423,51764],{"class":477},[84,136425,72848],{"class":94},[84,136427,1634],{"class":477},[84,136429,136430],{"class":86,"line":145},[84,136431,1905],{"class":477},[14,136433,136435],{"id":136434},"_135-css的初始化","13.5 css的初始化",[35,136437,136438],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[35,136440,136441],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[35,136443,136444],{},"每个网页都必须首先进行 CSS初始化。",[35,136446,136447],{},"这里我们以 京东CSS初始化代码为例。",[35,136449,136450],{},"在网页右键查看网页源代码",[35,136452,136453],{},"找到css的link引入语句",[35,136455,136456],{},"然后ctrl+f 输入body",[35,136458,77552],{},[64,136460],{"style":126654,"src":136461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[35,136463,77575],{},[64,136465],{"style":126654,"src":136466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[35,136468,136469],{},"③打开了网页上传压缩的代码",[64,136471],{"style":126654,"src":136472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[35,136474,136475],{},"④从body前可以查看这个网页的初始化代码",[35,136477,136478],{},[624,136479,136480],{},"Unicode编码字体：",[35,136482,136483],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[35,136485,83533],{},[35,136487,136488],{},"黑体 \\9ED1\\4F53",[35,136490,136491],{},"宋体 \\5B8B\\4F53",[35,136493,136494],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[389,136496,136497],{},"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":66,"searchDepth":98,"depth":98,"links":136499},[136500,136501,136508,136512,136516],{"id":135297,"depth":98,"text":135298},{"id":135419,"depth":98,"text":135420,"children":136502},[136503,136504,136505,136506,136507],{"id":135423,"depth":70,"text":135424},{"id":135576,"depth":70,"text":135577},{"id":135695,"depth":70,"text":135696},{"id":135837,"depth":70,"text":135838},{"id":135895,"depth":70,"text":135896},{"id":135956,"depth":98,"text":135957,"children":136509},[136510,136511],{"id":135979,"depth":70,"text":135980},{"id":136211,"depth":70,"text":136212},{"id":136340,"depth":98,"text":136341,"children":136513},[136514,136515],{"id":136344,"depth":70,"text":136345},{"id":136383,"depth":70,"text":136384},{"id":136434,"depth":98,"text":136435},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135289,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136523,"title":136524,"body":136525,"description":400,"extension":401,"meta":138211,"navigation":403,"path":138212,"seo":138213,"stem":138214,"__hash__":138215},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136526,"toc":138200},[136527,136530,136534,136538,136541,136548,136551,136554,136592,136595,136597,136611,136615,136624,136628,136633,136636,136639,136642,136677,136682,136685,136715,136718,136723,136726,136729,136759,136762,136816,136819,136823,136828,136840,136843,136847,136877,136880,136885,136888,136918,136921,136925,136942,136946,136950,136953,136986,136989,136993,136996,136999,137002,137005,137008,137119,137122,137125,137128,137230,137233,137237,137241,137245,137248,137288,137291,137293,137309,137313,137316,137321,137402,137405,137408,137534,137539,137542,137550,137553,137558,137643,137646,137650,137653,137656,137660,137680,137685,137769,137772,137777,137780,137783,137861,137864,137867,137870,137873,137876,137881,137884,137887,137959,137962,137967,137970,138067,138070,138076,138079,138082,138085,138088,138091,138094,138097,138100,138104,138109,138112,138145,138150,138153,138194,138197],[10,136528,136524],{"id":136529},"_14-html5与css3新特性",[14,136531,136533],{"id":136532},"_141-html5的新特性","14.1 HTML5的新特性",[23,136535,136537],{"id":136536},"_1411-基本标签","14.1.1 基本标签",[35,136539,136540],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[35,136542,136543,136544,136547],{},"这些新特性都有兼容性问题，基本是 ",[624,136545,136546],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[35,136549,136550],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[35,136552,136553],{},"现在使用的是新特性：",[1480,136555,136556,136562,136568,136574,136580,136586],{},[31,136557,136558,136561],{},[81,136559,136560],{},"\u003Cheader>"," 头部标签",[31,136563,136564,136567],{},[81,136565,136566],{},"\u003Cnav>"," 导航标签",[31,136569,136570,136573],{},[81,136571,136572],{},"\u003Carticle>"," 内容标签",[31,136575,136576,136579],{},[81,136577,136578],{},"\u003Csection>"," 定义文档某个区域",[31,136581,136582,136585],{},[81,136583,136584],{},"\u003Caside>"," 侧边栏标签",[31,136587,136588,136591],{},[81,136589,136590],{},"\u003Cfooter>"," 尾部标签",[64,136593],{"style":126654,"src":136594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[35,136596,507],{},[1480,136598,136599,136602,136605,136608],{},[31,136600,136601],{},"这种语义化标准主要是针对搜索引擎的",[31,136603,136604],{},"这些标签页面中可以经常使用",[31,136606,136607],{},"在IE9中，需要把这些元素转换为块级元素",[31,136609,136610],{},"移动端更喜欢使用这些标签",[23,136612,136614],{"id":136613},"_1412-多媒体标签","14.1.2 多媒体标签",[35,136616,136617,136618,136620,136621,136623],{},"音频 ",[624,136619,28501],{}," 和视频 ",[624,136622,28510],{}," 两个标签",[22327,136625,136627],{"id":136626},"_14121-视频标签-video","14.1.2.1 视频标签- video",[28,136629,136630],{},[31,136631,136632],{},"支持格式：",[64,136634],{"style":126654,"src":136635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[35,136637,136638],{},"尽量使用MP4，兼容性好",[35,136640,136641],{},"用MP4就可以",[75,136643,136645],{"className":127545,"code":136644,"language":127547,"meta":66,"style":66},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[81,136646,136647],{"__ignoreMap":66},[84,136648,136649,136651,136653,136655,136657,136660,136662,136665,136668,136671,136673,136675],{"class":86,"line":87},[84,136650,1383],{"class":477},[84,136652,28510],{"class":51627},[84,136654,55565],{"class":90},[84,136656,523],{"class":477},[84,136658,136659],{"class":104},"\"movie.mp4\"",[84,136661,92749],{"class":90},[84,136663,136664],{"class":90}," autoplay",[84,136666,136667],{"class":90}," muted",[84,136669,136670],{"class":90}," loop",[84,136672,55640],{"class":477},[84,136674,28510],{"class":51627},[84,136676,51634],{"class":477},[28,136678,136679],{"start":98},[31,136680,136681],{},"兼容写法",[35,136683,136684],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[75,136686,136687],{"className":127545,"code":136644,"language":127547,"meta":66,"style":66},[81,136688,136689],{"__ignoreMap":66},[84,136690,136691,136693,136695,136697,136699,136701,136703,136705,136707,136709,136711,136713],{"class":86,"line":87},[84,136692,1383],{"class":477},[84,136694,28510],{"class":51627},[84,136696,55565],{"class":90},[84,136698,523],{"class":477},[84,136700,136659],{"class":104},[84,136702,92749],{"class":90},[84,136704,136664],{"class":90},[84,136706,136667],{"class":90},[84,136708,136670],{"class":90},[84,136710,55640],{"class":477},[84,136712,28510],{"class":51627},[84,136714,51634],{"class":477},[35,136716,136717],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[28,136719,136720],{"start":70},[31,136721,136722],{},"video常用属性",[64,136724],{"style":126654,"src":136725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[35,136727,136728],{},"poster属性后面是跟的等待加载图片的地址",[75,136730,136731],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,136732,136733],{"__ignoreMap":66},[84,136734,136735,136737,136739,136741,136743,136745,136747,136749,136751,136753,136755,136757],{"class":86,"line":87},[84,136736,1383],{"class":477},[84,136738,64],{"class":51627},[84,136740,55565],{"class":90},[84,136742,523],{"class":477},[84,136744,134315],{"class":104},[84,136746,55573],{"class":90},[84,136748,523],{"class":477},[84,136750,134322],{"class":104},[84,136752,134325],{"class":90},[84,136754,523],{"class":477},[84,136756,134330],{"class":104},[84,136758,51634],{"class":477},[35,136760,136761],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[75,136763,136765],{"className":126798,"code":136764,"language":126800,"meta":66,"style":66},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[81,136766,136767,136772,136778,136802,136807,136812],{"__ignoreMap":66},[84,136768,136769],{"class":86,"line":87},[84,136770,136771],{"class":328},"\u002F* 2D 位移 *\u002F\n",[84,136773,136774,136776],{"class":86,"line":98},[84,136775,51938],{"class":51627},[84,136777,15901],{"class":477},[84,136779,136780,136783,136785,136788,136790,136792,136794,136796,136798,136800],{"class":86,"line":70},[84,136781,136782],{"class":94},"  transform",[84,136784,51764],{"class":477},[84,136786,136787],{"class":94},"translate",[84,136789,478],{"class":477},[84,136791,784],{"class":94},[84,136793,51819],{"class":473},[84,136795,12764],{"class":477},[84,136797,1129],{"class":94},[84,136799,51819],{"class":473},[84,136801,3048],{"class":477},[84,136803,136804],{"class":86,"line":120},[84,136805,136806],{"class":328},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[84,136808,136809],{"class":86,"line":131},[84,136810,136811],{"class":328},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[84,136813,136814],{"class":86,"line":145},[84,136815,1905],{"class":477},[35,136817,136818],{},"muted:自动静音属性",[22327,136820,136822],{"id":136821},"_14122-音频标签audio","14.1.2.2 音频标签audio",[28,136824,136825],{},[31,136826,136827],{},"基本使用",[35,136829,136830,136831,136836,136837],{},"当前 ",[624,136832,136833],{},[81,136834,136835],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[624,136838,136839],{},"mp3格式",[64,136841],{"style":126654,"src":136842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[28,136844,136845],{"start":98},[31,136846,136681],{},[75,136848,136849],{"className":127545,"code":136644,"language":127547,"meta":66,"style":66},[81,136850,136851],{"__ignoreMap":66},[84,136852,136853,136855,136857,136859,136861,136863,136865,136867,136869,136871,136873,136875],{"class":86,"line":87},[84,136854,1383],{"class":477},[84,136856,28510],{"class":51627},[84,136858,55565],{"class":90},[84,136860,523],{"class":477},[84,136862,136659],{"class":104},[84,136864,92749],{"class":90},[84,136866,136664],{"class":90},[84,136868,136667],{"class":90},[84,136870,136670],{"class":90},[84,136872,55640],{"class":477},[84,136874,28510],{"class":51627},[84,136876,51634],{"class":477},[35,136878,136879],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[28,136881,136882],{"start":70},[31,136883,136884],{},"常用属性",[64,136886],{"style":126654,"src":136887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[75,136889,136890],{"className":127545,"code":136644,"language":127547,"meta":66,"style":66},[81,136891,136892],{"__ignoreMap":66},[84,136893,136894,136896,136898,136900,136902,136904,136906,136908,136910,136912,136914,136916],{"class":86,"line":87},[84,136895,1383],{"class":477},[84,136897,28510],{"class":51627},[84,136899,55565],{"class":90},[84,136901,523],{"class":477},[84,136903,136659],{"class":104},[84,136905,92749],{"class":90},[84,136907,136664],{"class":90},[84,136909,136667],{"class":90},[84,136911,136670],{"class":90},[84,136913,55640],{"class":477},[84,136915,28510],{"class":51627},[84,136917,51634],{"class":477},[35,136919,136920],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22327,136922,136924],{"id":136923},"_14123-总结","14.1.2.3 总结",[1480,136926,136927,136930,136933,136936,136939],{},[31,136928,136929],{},"音频标签和视频标签使用方式基本一致",[31,136931,136932],{},"浏览器支持情况不同",[31,136934,136935],{},"谷歌浏览器把音频和视频自动播放禁止了",[31,136937,136938],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[31,136940,136941],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[23,136943,136945],{"id":136944},"_1413-表单元素","14.1.3 表单元素",[22327,136947,136949],{"id":136948},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[64,136951],{"style":126654,"src":136952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[75,136954,136956],{"className":127545,"code":136955,"language":127547,"meta":66,"style":66},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[81,136957,136958],{"__ignoreMap":66},[84,136959,136960,136962,136964,136966,136968,136970,136972,136974,136977,136979,136981,136984],{"class":86,"line":87},[84,136961,1383],{"class":477},[84,136963,54147],{"class":51627},[84,136965,54150],{"class":90},[84,136967,523],{"class":477},[84,136969,63025],{"class":104},[84,136971,15249],{"class":90},[84,136973,523],{"class":477},[84,136975,136976],{"class":104},"\"username\"",[84,136978,61346],{"class":90},[84,136980,523],{"class":477},[84,136982,136983],{"class":104},"\"请输入用户名\"",[84,136985,51634],{"class":477},[64,136987],{"style":126654,"src":136988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22327,136990,136992],{"id":136991},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[64,136994],{"style":126654,"src":136995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[35,136997,136998],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[35,137000,137001],{},"快捷操作：",[64,137003],{"style":126654,"src":137004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[35,137006,137007],{},"例子1：",[75,137009,137011],{"className":127545,"code":137010,"language":127547,"meta":66,"style":66},"\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",[81,137012,137013,137036,137063,137092,137111],{"__ignoreMap":66},[84,137014,137015,137017,137019,137021,137023,137026,137029,137031,137034],{"class":86,"line":87},[84,137016,1383],{"class":477},[84,137018,66951],{"class":51627},[84,137020,66954],{"class":90},[84,137022,523],{"class":477},[84,137024,137025],{"class":104},"\"\u002Fsubmit\"",[84,137027,137028],{"class":90}," method",[84,137030,523],{"class":477},[84,137032,137033],{"class":104},"\"post\"",[84,137035,51634],{"class":477},[84,137037,137038,137040,137042,137044,137046,137048,137050,137052,137054,137056,137058,137061],{"class":86,"line":98},[84,137039,52471],{"class":477},[84,137041,54147],{"class":51627},[84,137043,54150],{"class":90},[84,137045,523],{"class":477},[84,137047,63025],{"class":104},[84,137049,15249],{"class":90},[84,137051,523],{"class":477},[84,137053,136976],{"class":104},[84,137055,61346],{"class":90},[84,137057,523],{"class":477},[84,137059,137060],{"class":104},"\"用户名\"",[84,137062,51634],{"class":477},[84,137064,137065,137067,137069,137071,137073,137076,137078,137080,137083,137085,137087,137090],{"class":86,"line":70},[84,137066,52471],{"class":477},[84,137068,54147],{"class":51627},[84,137070,54150],{"class":90},[84,137072,523],{"class":477},[84,137074,137075],{"class":104},"\"password\"",[84,137077,15249],{"class":90},[84,137079,523],{"class":477},[84,137081,137082],{"class":104},"\"pwd\"",[84,137084,61346],{"class":90},[84,137086,523],{"class":477},[84,137088,137089],{"class":104},"\"密码\"",[84,137091,51634],{"class":477},[84,137093,137094,137096,137098,137100,137102,137104,137107,137109],{"class":86,"line":120},[84,137095,52471],{"class":477},[84,137097,54213],{"class":51627},[84,137099,54150],{"class":90},[84,137101,523],{"class":477},[84,137103,66974],{"class":104},[84,137105,137106],{"class":477},">提交\u003C\u002F",[84,137108,54213],{"class":51627},[84,137110,51634],{"class":477},[84,137112,137113,137115,137117],{"class":86,"line":131},[84,137114,52112],{"class":477},[84,137116,66951],{"class":51627},[84,137118,51634],{"class":477},[64,137120],{"style":126654,"src":137121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[35,137123,137124],{},"value是表单域的内容",[35,137126,137127],{},"例子2：",[75,137129,137130],{"className":127545,"code":137010,"language":127547,"meta":66,"style":66},[81,137131,137132,137152,137178,137204,137222],{"__ignoreMap":66},[84,137133,137134,137136,137138,137140,137142,137144,137146,137148,137150],{"class":86,"line":87},[84,137135,1383],{"class":477},[84,137137,66951],{"class":51627},[84,137139,66954],{"class":90},[84,137141,523],{"class":477},[84,137143,137025],{"class":104},[84,137145,137028],{"class":90},[84,137147,523],{"class":477},[84,137149,137033],{"class":104},[84,137151,51634],{"class":477},[84,137153,137154,137156,137158,137160,137162,137164,137166,137168,137170,137172,137174,137176],{"class":86,"line":98},[84,137155,52471],{"class":477},[84,137157,54147],{"class":51627},[84,137159,54150],{"class":90},[84,137161,523],{"class":477},[84,137163,63025],{"class":104},[84,137165,15249],{"class":90},[84,137167,523],{"class":477},[84,137169,136976],{"class":104},[84,137171,61346],{"class":90},[84,137173,523],{"class":477},[84,137175,137060],{"class":104},[84,137177,51634],{"class":477},[84,137179,137180,137182,137184,137186,137188,137190,137192,137194,137196,137198,137200,137202],{"class":86,"line":70},[84,137181,52471],{"class":477},[84,137183,54147],{"class":51627},[84,137185,54150],{"class":90},[84,137187,523],{"class":477},[84,137189,137075],{"class":104},[84,137191,15249],{"class":90},[84,137193,523],{"class":477},[84,137195,137082],{"class":104},[84,137197,61346],{"class":90},[84,137199,523],{"class":477},[84,137201,137089],{"class":104},[84,137203,51634],{"class":477},[84,137205,137206,137208,137210,137212,137214,137216,137218,137220],{"class":86,"line":120},[84,137207,52471],{"class":477},[84,137209,54213],{"class":51627},[84,137211,54150],{"class":90},[84,137213,523],{"class":477},[84,137215,66974],{"class":104},[84,137217,137106],{"class":477},[84,137219,54213],{"class":51627},[84,137221,51634],{"class":477},[84,137223,137224,137226,137228],{"class":86,"line":131},[84,137225,52112],{"class":477},[84,137227,66951],{"class":51627},[84,137229,51634],{"class":477},[64,137231],{"style":126654,"src":137232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137234,137236],{"id":137235},"_142-css新特性","14.2 CSS新特性",[23,137238,137240],{"id":137239},"_1421-新增选择器","14.2.1 新增选择器",[22327,137242,137244],{"id":137243},"_14211-属性选择器","14.2.1.1 属性选择器",[64,137246],{"style":126654,"src":137247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[75,137249,137251],{"className":126798,"code":137250,"language":126800,"meta":66,"style":66},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[81,137252,137253,137268,137284],{"__ignoreMap":66},[84,137254,137255,137257,137259,137261,137263,137265],{"class":86,"line":87},[84,137256,54147],{"class":51627},[84,137258,1363],{"class":477},[84,137260,103433],{"class":90},[84,137262,523],{"class":473},[84,137264,63025],{"class":104},[84,137266,137267],{"class":477},"] {\n",[84,137269,137270,137272,137274,137276,137278,137280,137282],{"class":86,"line":98},[84,137271,71222],{"class":94},[84,137273,51764],{"class":477},[84,137275,692],{"class":94},[84,137277,51819],{"class":473},[84,137279,51848],{"class":94},[84,137281,130378],{"class":94},[84,137283,1634],{"class":477},[84,137285,137286],{"class":86,"line":70},[84,137287,1905],{"class":477},[64,137289],{"style":126654,"src":137290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[35,137292,507],{},[1480,137294,137295,137298,137301,137304],{},[31,137296,137297],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[31,137299,137300],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[31,137302,137303],{},"属性选择器也可以选择出来自定义的属性",[31,137305,137306,137308],{},[624,137307,9354],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22327,137310,137312],{"id":137311},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[64,137314],{"style":126654,"src":137315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[28,137317,137318],{},[31,137319,137320],{},"fist-child",[75,137322,137324],{"className":126798,"code":137323,"language":126800,"meta":66,"style":66},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[81,137325,137326,137331,137346,137366,137384],{"__ignoreMap":66},[84,137327,137328],{"class":86,"line":87},[84,137329,137330],{"class":328},"\u002F* 属性选择器 *\u002F\n",[84,137332,137333,137335,137337,137339,137341,137343],{"class":86,"line":98},[84,137334,54147],{"class":51627},[84,137336,1363],{"class":477},[84,137338,103433],{"class":90},[84,137340,523],{"class":473},[84,137342,63025],{"class":104},[84,137344,137345],{"class":477},"] { }\n",[84,137347,137348,137350,137352,137354,137357,137360,137363],{"class":86,"line":70},[84,137349,54147],{"class":51627},[84,137351,1363],{"class":477},[84,137353,15023],{"class":90},[84,137355,137356],{"class":473},"^=",[84,137358,137359],{"class":104},"\"icon\"",[84,137361,137362],{"class":477},"] { }  ",[84,137364,137365],{"class":328},"\u002F* 以 icon 开头 *\u002F\n",[84,137367,137368,137370,137372,137374,137377,137379,137381],{"class":86,"line":120},[84,137369,54147],{"class":51627},[84,137371,1363],{"class":477},[84,137373,15023],{"class":90},[84,137375,137376],{"class":473},"$=",[84,137378,137359],{"class":104},[84,137380,137362],{"class":477},[84,137382,137383],{"class":328},"\u002F* 以 icon 结尾 *\u002F\n",[84,137385,137386,137388,137390,137392,137395,137397,137399],{"class":86,"line":131},[84,137387,54147],{"class":51627},[84,137389,1363],{"class":477},[84,137391,15023],{"class":90},[84,137393,137394],{"class":473},"*=",[84,137396,137359],{"class":104},[84,137398,137362],{"class":477},[84,137400,137401],{"class":328},"\u002F* 包含 icon *\u002F\n",[35,137403,137404],{},"ul的第一个儿子文本为红色",[35,137406,137407],{},"一定要在冒号前加空格，不然就是选中所有的了",[75,137409,137411],{"className":126798,"code":137410,"language":126800,"meta":66,"style":66},".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",[81,137412,137413,137419,137429,137433,137437,137442,137455,137468,137484,137501,137518],{"__ignoreMap":66},[84,137414,137415,137417],{"class":86,"line":87},[84,137416,127089],{"class":90},[84,137418,15901],{"class":477},[84,137420,137421,137423,137425,137427],{"class":86,"line":98},[84,137422,71231],{"class":94},[84,137424,51764],{"class":477},[84,137426,57747],{"class":94},[84,137428,1634],{"class":477},[84,137430,137431],{"class":86,"line":70},[84,137432,1905],{"class":477},[84,137434,137435],{"class":86,"line":120},[84,137436,136259],{"class":477},[84,137438,137439],{"class":86,"line":131},[84,137440,137441],{"class":328},"\u002F* 结构伪类选择器 *\u002F\n",[84,137443,137444,137446,137449,137452],{"class":86,"line":145},[84,137445,31],{"class":51627},[84,137447,137448],{"class":90},":first-child",[84,137450,137451],{"class":477}," { }           ",[84,137453,137454],{"class":328},"\u002F* 第一个 *\u002F\n",[84,137456,137457,137459,137462,137465],{"class":86,"line":156},[84,137458,31],{"class":51627},[84,137460,137461],{"class":90},":last-child",[84,137463,137464],{"class":477}," { }            ",[84,137466,137467],{"class":328},"\u002F* 最后一个 *\u002F\n",[84,137469,137470,137472,137474,137476,137478,137481],{"class":86,"line":164},[84,137471,31],{"class":51627},[84,137473,129712],{"class":90},[84,137475,478],{"class":477},[84,137477,553],{"class":94},[84,137479,137480],{"class":477},") { }          ",[84,137482,137483],{"class":328},"\u002F* 第2个 *\u002F\n",[84,137485,137486,137488,137490,137492,137495,137498],{"class":86,"line":175},[84,137487,31],{"class":51627},[84,137489,129712],{"class":90},[84,137491,478],{"class":477},[84,137493,137494],{"class":94},"2n",[84,137496,137497],{"class":477},") { }         ",[84,137499,137500],{"class":328},"\u002F* 偶数 *\u002F\n",[84,137502,137503,137505,137507,137509,137512,137515],{"class":86,"line":185},[84,137504,31],{"class":51627},[84,137506,129712],{"class":90},[84,137508,478],{"class":477},[84,137510,137511],{"class":94},"2n+1",[84,137513,137514],{"class":477},") { }       ",[84,137516,137517],{"class":328},"\u002F* 奇数 *\u002F\n",[84,137519,137520,137522,137524,137526,137529,137531],{"class":86,"line":195},[84,137521,31],{"class":51627},[84,137523,129712],{"class":90},[84,137525,478],{"class":477},[84,137527,137528],{"class":94},"-n+3",[84,137530,137514],{"class":477},[84,137532,137533],{"class":328},"\u002F* 前3个 *\u002F\n",[51938,137535,137538],{"className":137536},[137537],"example","\n  示例内容\n",[35,137540,137541],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1480,137543,137544],{},[31,137545,137546,137549],{},[81,137547,137548],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[35,137551,137552],{},"也就是说它选择的是熊大",[28,137554,137555],{"start":145},[31,137556,137557],{},"权重",[75,137559,137561],{"className":126798,"code":137560,"language":126800,"meta":66,"style":66},"\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",[81,137562,137563,137567,137577,137587,137601,137615,137629],{"__ignoreMap":66},[84,137564,137565],{"class":86,"line":87},[84,137566,137441],{"class":328},[84,137568,137569,137571,137573,137575],{"class":86,"line":98},[84,137570,31],{"class":51627},[84,137572,137448],{"class":90},[84,137574,137451],{"class":477},[84,137576,137454],{"class":328},[84,137578,137579,137581,137583,137585],{"class":86,"line":70},[84,137580,31],{"class":51627},[84,137582,137461],{"class":90},[84,137584,137464],{"class":477},[84,137586,137467],{"class":328},[84,137588,137589,137591,137593,137595,137597,137599],{"class":86,"line":120},[84,137590,31],{"class":51627},[84,137592,129712],{"class":90},[84,137594,478],{"class":477},[84,137596,553],{"class":94},[84,137598,137480],{"class":477},[84,137600,137483],{"class":328},[84,137602,137603,137605,137607,137609,137611,137613],{"class":86,"line":131},[84,137604,31],{"class":51627},[84,137606,129712],{"class":90},[84,137608,478],{"class":477},[84,137610,137494],{"class":94},[84,137612,137497],{"class":477},[84,137614,137500],{"class":328},[84,137616,137617,137619,137621,137623,137625,137627],{"class":86,"line":145},[84,137618,31],{"class":51627},[84,137620,129712],{"class":90},[84,137622,478],{"class":477},[84,137624,137511],{"class":94},[84,137626,137514],{"class":477},[84,137628,137517],{"class":328},[84,137630,137631,137633,137635,137637,137639,137641],{"class":86,"line":156},[84,137632,31],{"class":51627},[84,137634,129712],{"class":90},[84,137636,478],{"class":477},[84,137638,137528],{"class":94},[84,137640,137514],{"class":477},[84,137642,137533],{"class":328},[35,137644,137645],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22327,137647,137649],{"id":137648},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[35,137651,137652],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[64,137654],{"style":126654,"src":137655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[28,137657,137658],{},[31,137659,507],{},[1480,137661,137662,137665,137668,137671,137674,137677],{},[31,137663,137664],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[31,137666,137667],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[31,137669,137670],{},"语法： element::before {}",[31,137672,137673],{},"before 和 after 必须有 content 属性",[31,137675,137676],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[31,137678,137679],{},"伪元素选择器和标签选择器一样，权重为 1",[28,137681,137682],{"start":98},[31,137683,137684],{},"实例",[75,137686,137687],{"className":126798,"code":137560,"language":126800,"meta":66,"style":66},[81,137688,137689,137693,137703,137713,137727,137741,137755],{"__ignoreMap":66},[84,137690,137691],{"class":86,"line":87},[84,137692,137441],{"class":328},[84,137694,137695,137697,137699,137701],{"class":86,"line":98},[84,137696,31],{"class":51627},[84,137698,137448],{"class":90},[84,137700,137451],{"class":477},[84,137702,137454],{"class":328},[84,137704,137705,137707,137709,137711],{"class":86,"line":70},[84,137706,31],{"class":51627},[84,137708,137461],{"class":90},[84,137710,137464],{"class":477},[84,137712,137467],{"class":328},[84,137714,137715,137717,137719,137721,137723,137725],{"class":86,"line":120},[84,137716,31],{"class":51627},[84,137718,129712],{"class":90},[84,137720,478],{"class":477},[84,137722,553],{"class":94},[84,137724,137480],{"class":477},[84,137726,137483],{"class":328},[84,137728,137729,137731,137733,137735,137737,137739],{"class":86,"line":131},[84,137730,31],{"class":51627},[84,137732,129712],{"class":90},[84,137734,478],{"class":477},[84,137736,137494],{"class":94},[84,137738,137497],{"class":477},[84,137740,137500],{"class":328},[84,137742,137743,137745,137747,137749,137751,137753],{"class":86,"line":145},[84,137744,31],{"class":51627},[84,137746,129712],{"class":90},[84,137748,478],{"class":477},[84,137750,137511],{"class":94},[84,137752,137514],{"class":477},[84,137754,137517],{"class":328},[84,137756,137757,137759,137761,137763,137765,137767],{"class":86,"line":156},[84,137758,31],{"class":51627},[84,137760,129712],{"class":90},[84,137762,478],{"class":477},[84,137764,137528],{"class":94},[84,137766,137514],{"class":477},[84,137768,137533],{"class":328},[64,137770],{"style":126654,"src":137771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[28,137773,137774],{"start":70},[31,137775,137776],{},"使用场景1",[64,137778],{"style":126654,"src":137779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[35,137781,137782],{},"不需要再加盒子来整红色那部分了",[75,137784,137786],{"className":126798,"code":137785,"language":126800,"meta":66,"style":66},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[81,137787,137788,137793,137802,137813,137823,137827,137836,137847,137857],{"__ignoreMap":66},[84,137789,137790],{"class":86,"line":87},[84,137791,137792],{"class":328},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[84,137794,137795,137797,137800],{"class":86,"line":98},[84,137796,51938],{"class":51627},[84,137798,137799],{"class":90},"::before",[84,137801,15901],{"class":477},[84,137803,137804,137807,137809,137811],{"class":86,"line":70},[84,137805,137806],{"class":94},"  content",[84,137808,51764],{"class":477},[84,137810,7981],{"class":104},[84,137812,1634],{"class":477},[84,137814,137815,137817,137819,137821],{"class":86,"line":120},[84,137816,128414],{"class":94},[84,137818,51764],{"class":477},[84,137820,61195],{"class":94},[84,137822,1634],{"class":477},[84,137824,137825],{"class":86,"line":131},[84,137826,1905],{"class":477},[84,137828,137829,137831,137834],{"class":86,"line":145},[84,137830,51938],{"class":51627},[84,137832,137833],{"class":90},"::after",[84,137835,15901],{"class":477},[84,137837,137838,137840,137842,137845],{"class":86,"line":156},[84,137839,137806],{"class":94},[84,137841,51764],{"class":477},[84,137843,137844],{"class":104},"\"→\"",[84,137846,1634],{"class":477},[84,137848,137849,137851,137853,137855],{"class":86,"line":164},[84,137850,71231],{"class":94},[84,137852,51764],{"class":477},[84,137854,62396],{"class":94},[84,137856,1634],{"class":477},[84,137858,137859],{"class":86,"line":175},[84,137860,1905],{"class":477},[64,137862],{"style":126654,"src":137863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[35,137865,137866],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[64,137868],{"style":126654,"src":137869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[35,137871,137872],{},"但是在引用时需要先转义一下",[35,137874,137875],{},"content='\\e930'",[28,137877,137878],{"start":120},[31,137879,137880],{},"使用场景2",[35,137882,137883],{},"仿土豆效果",[35,137885,137886],{},"通过使用伪元素选择器可以减少body中盒子的数量",[75,137888,137889],{"className":126798,"code":137785,"language":126800,"meta":66,"style":66},[81,137890,137891,137895,137903,137913,137923,137927,137935,137945,137955],{"__ignoreMap":66},[84,137892,137893],{"class":86,"line":87},[84,137894,137792],{"class":328},[84,137896,137897,137899,137901],{"class":86,"line":98},[84,137898,51938],{"class":51627},[84,137900,137799],{"class":90},[84,137902,15901],{"class":477},[84,137904,137905,137907,137909,137911],{"class":86,"line":70},[84,137906,137806],{"class":94},[84,137908,51764],{"class":477},[84,137910,7981],{"class":104},[84,137912,1634],{"class":477},[84,137914,137915,137917,137919,137921],{"class":86,"line":120},[84,137916,128414],{"class":94},[84,137918,51764],{"class":477},[84,137920,61195],{"class":94},[84,137922,1634],{"class":477},[84,137924,137925],{"class":86,"line":131},[84,137926,1905],{"class":477},[84,137928,137929,137931,137933],{"class":86,"line":145},[84,137930,51938],{"class":51627},[84,137932,137833],{"class":90},[84,137934,15901],{"class":477},[84,137936,137937,137939,137941,137943],{"class":86,"line":156},[84,137938,137806],{"class":94},[84,137940,51764],{"class":477},[84,137942,137844],{"class":104},[84,137944,1634],{"class":477},[84,137946,137947,137949,137951,137953],{"class":86,"line":164},[84,137948,71231],{"class":94},[84,137950,51764],{"class":477},[84,137952,62396],{"class":94},[84,137954,1634],{"class":477},[84,137956,137957],{"class":86,"line":175},[84,137958,1905],{"class":477},[64,137960],{"style":126654,"src":137961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[28,137963,137964],{"start":131},[31,137965,137966],{},"使用场景3",[35,137968,137969],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[75,137971,137973],{"className":126798,"code":137972,"language":126800,"meta":66,"style":66},".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",[81,137974,137975,137981,137991,137995,137999,138003,138011,138021,138031,138035,138043,138053,138063],{"__ignoreMap":66},[84,137976,137977,137979],{"class":86,"line":87},[84,137978,130646],{"class":90},[84,137980,15901],{"class":477},[84,137982,137983,137985,137987,137989],{"class":86,"line":98},[84,137984,131278],{"class":94},[84,137986,51764],{"class":477},[84,137988,24065],{"class":94},[84,137990,1634],{"class":477},[84,137992,137993],{"class":86,"line":70},[84,137994,1905],{"class":477},[84,137996,137997],{"class":86,"line":120},[84,137998,136259],{"class":477},[84,138000,138001],{"class":86,"line":131},[84,138002,137792],{"class":328},[84,138004,138005,138007,138009],{"class":86,"line":145},[84,138006,51938],{"class":51627},[84,138008,137799],{"class":90},[84,138010,15901],{"class":477},[84,138012,138013,138015,138017,138019],{"class":86,"line":156},[84,138014,137806],{"class":94},[84,138016,51764],{"class":477},[84,138018,7981],{"class":104},[84,138020,1634],{"class":477},[84,138022,138023,138025,138027,138029],{"class":86,"line":164},[84,138024,128414],{"class":94},[84,138026,51764],{"class":477},[84,138028,61195],{"class":94},[84,138030,1634],{"class":477},[84,138032,138033],{"class":86,"line":175},[84,138034,1905],{"class":477},[84,138036,138037,138039,138041],{"class":86,"line":185},[84,138038,51938],{"class":51627},[84,138040,137833],{"class":90},[84,138042,15901],{"class":477},[84,138044,138045,138047,138049,138051],{"class":86,"line":195},[84,138046,137806],{"class":94},[84,138048,51764],{"class":477},[84,138050,137844],{"class":104},[84,138052,1634],{"class":477},[84,138054,138055,138057,138059,138061],{"class":86,"line":206},[84,138056,71231],{"class":94},[84,138058,51764],{"class":477},[84,138060,62396],{"class":94},[84,138062,1634],{"class":477},[84,138064,138065],{"class":86,"line":217},[84,138066,1905],{"class":477},[35,138068,138069],{},"div {\nmargin: 0 auto;\n}",[75,138071,138074],{"className":138072,"code":138073,"language":5516},[5514],"\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",[81,138075,138073],{"__ignoreMap":66},[35,138077,138078],{},"如果想让多个元素都发生变化",[35,138080,138081],{},"不能如下操作：",[35,138083,138084],{},"transition: width 2s ease 0.5s;",[35,138086,138087],{},"transition: height 2s ease 0.5s;不对！！！",[35,138089,138090],{},"上方会样式冲突，导致不显示任何过渡效果",[35,138092,138093],{},"使用如下：加逗号隔开",[35,138095,138096],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[35,138098,138099],{},"transition all 2s ease;",[23,138101,138103],{"id":138102},"_1426-过渡练习","14.2.6 过渡练习",[28,138105,138106],{},[31,138107,138108],{},"进度条",[64,138110],{"style":126654,"src":138111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[75,138113,138115],{"className":126798,"code":138114,"language":126800,"meta":66,"style":66},"div {\n  transition: all 0.3s ease;\n}\n",[81,138116,138117,138123,138141],{"__ignoreMap":66},[84,138118,138119,138121],{"class":86,"line":87},[84,138120,51938],{"class":51627},[84,138122,15901],{"class":477},[84,138124,138125,138128,138130,138132,138135,138137,138139],{"class":86,"line":98},[84,138126,138127],{"class":94},"  transition",[84,138129,51764],{"class":477},[84,138131,28448],{"class":94},[84,138133,138134],{"class":94}," 0.3",[84,138136,1168],{"class":473},[84,138138,79006],{"class":94},[84,138140,1634],{"class":477},[84,138142,138143],{"class":86,"line":70},[84,138144,1905],{"class":477},[28,138146,138147],{"start":98},[31,138148,138149],{},"小米logo",[35,138151,138152],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[75,138154,138156],{"className":126798,"code":138155,"language":126800,"meta":66,"style":66},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[81,138157,138158,138163,138169,138185,138190],{"__ignoreMap":66},[84,138159,138160],{"class":86,"line":87},[84,138161,138162],{"class":328},"\u002F* CSS3 过渡 *\u002F\n",[84,138164,138165,138167],{"class":86,"line":98},[84,138166,51938],{"class":51627},[84,138168,15901],{"class":477},[84,138170,138171,138173,138175,138177,138179,138181,138183],{"class":86,"line":70},[84,138172,138127],{"class":94},[84,138174,51764],{"class":477},[84,138176,28448],{"class":94},[84,138178,138134],{"class":94},[84,138180,1168],{"class":473},[84,138182,79006],{"class":94},[84,138184,1634],{"class":477},[84,138186,138187],{"class":86,"line":120},[84,138188,138189],{"class":328},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[84,138191,138192],{"class":86,"line":131},[84,138193,1905],{"class":477},[35,138195,138196],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[389,138198,138199],{},"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":66,"searchDepth":98,"depth":98,"links":138201},[138202,138207],{"id":136532,"depth":98,"text":136533,"children":138203},[138204,138205,138206],{"id":136536,"depth":70,"text":136537},{"id":136613,"depth":70,"text":136614},{"id":136944,"depth":70,"text":136945},{"id":137235,"depth":98,"text":137236,"children":138208},[138209,138210],{"id":137239,"depth":70,"text":137240},{"id":138102,"depth":70,"text":138103},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136524,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138217,"title":138218,"body":138219,"description":400,"extension":401,"meta":139963,"navigation":403,"path":139964,"seo":139965,"stem":139966,"__hash__":139967},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138220,"toc":139944},[138221,138224,138228,138231,138237,138243,138247,138249,138252,138255,138258,138261,138264,138267,138270,138274,138278,138281,138284,138287,138291,138294,138297,138302,138305,138308,138311,138315,138318,138327,138330,138333,138337,138340,138343,138348,138355,138369,138377,138384,138389,138392,138395,138398,138405,138409,138415,138421,138424,138427,138432,138438,138440,138448,138453,138456,138462,138464,138469,138474,138477,138479,138484,138487,138492,138497,138531,138535,138539,138542,138546,138549,138635,138638,138675,138678,138714,138718,138723,138736,138790,138792,138820,138822,138850,138856,138870,138872,138916,138918,138962,138965,138972,138983,138985,139012,139014,139040,139047,139063,139065,139159,139161,139255,139262,139265,139270,139276,139350,139353,139355,139391,139393,139429,139432,139439,139458,139461,139464,139466,139491,139493,139517,139520,139523,139553,139557,139560,139623,139625,139691,139693,139757,139760,139792,139794,139820,139822,139848,139851,139882,139884,139910,139912,139938,139941],[10,138222,138218],{"id":138223},"_15-品优购项目上篇-搭建与公共模块",[14,138225,138227],{"id":138226},"_151-项目规划","15.1 项目规划",[64,138229],{"style":126654,"src":138230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[35,138232,138233,138236],{},[624,138234,138235],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[35,138238,138239,138242],{},[624,138240,138241],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138244,138246],{"id":138245},"_152-项目介绍","15.2 项目介绍",[35,138248,138235],{},[64,138250],{"style":126654,"src":138251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[35,138253,138254],{},"主页：",[64,138256],{"style":126654,"src":138257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[35,138259,138260],{},"列表页：",[64,138262],{"style":126654,"src":138263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[35,138265,138266],{},"注册页：",[64,138268],{"style":126654,"src":138269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138271,138273],{"id":138272},"_153-项目搭建工作","15.3 项目搭建工作",[23,138275,138277],{"id":138276},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[64,138279],{"style":126654,"src":138280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[35,138282,138283],{},"经常更换的图片要放到upload文件夹中",[35,138285,138286],{},"不经常换的放到images文件夹中",[23,138288,138290],{"id":138289},"_1532-创建文件如下","15.3.2 创建文件如下",[64,138292],{"style":126654,"src":138293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[64,138295],{"style":126654,"src":138296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[35,138298,138299],{},[624,138300,138301],{},"初始化样式：",[35,138303,138304],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[35,138306,138307],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[35,138309,138310],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[23,138312,138314],{"id":138313},"_1533-项目模块化开发","15.3.3 项目模块化开发",[35,138316,138317],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[35,138319,138320,138321,138326],{},"这里最典型的应用就是 ",[624,138322,138323],{},[81,138324,138325],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[64,138328],{"style":126654,"src":138329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[35,138331,138332],{},"通过link方法来引入",[23,138334,138336],{"id":138335},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[64,138338],{"style":126654,"src":138339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[35,138341,138342],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[28,138344,138345],{},[31,138346,138347],{},"制作favicon图标",[35,138349,138350,138351,138354],{},"①把品优购图标切成 ",[81,138352,138353],{},"png"," 图片",[35,138356,138357,138358,138360,138361,138364,138365],{},"②把 ",[81,138359,138353],{}," 图片转换为 ",[81,138362,138363],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[39,138366,138367],{"href":138367,"rel":138368},"http:\u002F\u002Fwww.bitbug.net\u002F",[43],[28,138370,138371,138374],{"start":98},[31,138372,138373],{},"favicon图标放到网站根目录下",[31,138375,138376],{},"HTML页面引入favicon",[35,138378,138379,138380,138383],{},"在html 页面里面的 ",[81,138381,138382],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[35,138385,138386],{},[81,138387,138388],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[35,138390,138391],{},"复制这行代码或者在生成这个的网站进行复制",[64,138393],{"style":126654,"src":138394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[35,138396,138397],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[35,138399,138400,138401],{},"例如:",[39,138402,138403],{"href":138403,"rel":138404},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[43],[23,138406,138408],{"id":138407},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[35,138410,138411,138414],{},[624,138412,138413],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[35,138416,138417,138420],{},[624,138418,138419],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[35,138422,138423],{},"页面必须有三个标签用来符合 SEO 优化",[64,138425],{"style":126654,"src":138426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[28,138428,138429],{},[31,138430,138431],{},"title网站标题",[35,138433,138434,138437],{},[624,138435,138436],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[35,138439,69116],{},[1480,138441,138442,138445],{},[31,138443,138444],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[31,138446,138447],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[28,138449,138450],{"start":98},[31,138451,138452],{},"description网站描述",[35,138454,138455],{},"简要说明我们网站主要是做什么的",[35,138457,138458,138461],{},[624,138459,138460],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[35,138463,69116],{},[35,138465,138466],{},[81,138467,138468],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[28,138470,138471],{"start":70},[31,138472,138473],{},"keywords关键词",[35,138475,138476],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[35,138478,69116],{},[35,138480,138481],{},[81,138482,138483],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[35,138485,138486],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[35,138488,138489],{},[624,138490,138491],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[28,138493,138494],{"start":120},[31,138495,138496],{},"代码总结",[75,138498,138499],{"className":127545,"code":130902,"language":127547,"meta":66,"style":66},[81,138500,138501,138505,138519,138523],{"__ignoreMap":66},[84,138502,138503],{"class":86,"line":87},[84,138504,130909],{"class":328},[84,138506,138507,138509,138511,138513,138515,138517],{"class":86,"line":98},[84,138508,1383],{"class":477},[84,138510,51938],{"class":51627},[84,138512,53813],{"class":90},[84,138514,523],{"class":477},[84,138516,130922],{"class":104},[84,138518,51634],{"class":477},[84,138520,138521],{"class":86,"line":70},[84,138522,130929],{"class":477},[84,138524,138525,138527,138529],{"class":86,"line":120},[84,138526,52112],{"class":477},[84,138528,51938],{"class":51627},[84,138530,51634],{"class":477},[14,138532,138534],{"id":138533},"_154-项目公共部分制作","15.4 项目公共部分制作",[23,138536,138538],{"id":138537},"_1541-常用模块类命名","15.4.1 常用模块类命名",[64,138540],{"style":126654,"src":138541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[23,138543,138545],{"id":138544},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[35,138547,138548],{},"布局思路：",[1480,138550,138551,138554,138557,138579,138612],{},[31,138552,138553],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[31,138555,138556],{},"里面包含版心的盒子",[31,138558,138559,138560],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1480,138561,138562,138570,138576],{},[31,138563,138564,138565,21829,138567,138569],{},"1 号盒子 里面包含一个",[81,138566,1480],{},[81,138568,1480],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[31,138571,138572,138573,138575],{},"里面的内容是水平排列，所以需要给",[81,138574,31],{},"设置浮动",[31,138577,138578],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[31,138580,138581,138582],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1480,138583,138584,138598,138603],{},[31,138585,138586,138587,21829,138589,138591,138592,138594,138595,138597],{},"2 号盒子 里面包含一个",[81,138588,1480],{},[81,138590,1480],{},"包裹",[81,138593,31],{},"，中间的",[81,138596,1394],{},"可以用样式去设置，也可以用字符 |",[31,138599,138600,138601,138575],{},"里面内容水平排列，给",[81,138602,31],{},[31,138604,138605,138606,138608,138609,138611],{},"找到里面所有偶数的 ",[81,138607,31],{}," 设置样式（偶数的 ",[81,138610,31],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[31,138613,138614,138615],{},"需要用到字体图标",[1480,138616,138617,138623,138626,138629,138632],{},[31,138618,138619,138620],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[81,138621,138622],{},"arrow-icon",[31,138624,138625],{},"先要引入字体图片的资源",[31,138627,138628],{},"在样式里面利用 font-face 来进行声明",[31,138630,138631],{},"在伪元素的 content属性设置 图标的编码",[31,138633,138634],{},"给伪元素设置font-family属性",[35,138636,138637],{},"结构实例代码：",[75,138639,138641],{"className":126798,"code":138640,"language":126800,"meta":66,"style":66},"div::before {\n  content: \"\";\n  display: block;\n}\n",[81,138642,138643,138651,138661,138671],{"__ignoreMap":66},[84,138644,138645,138647,138649],{"class":86,"line":87},[84,138646,51938],{"class":51627},[84,138648,137799],{"class":90},[84,138650,15901],{"class":477},[84,138652,138653,138655,138657,138659],{"class":86,"line":98},[84,138654,137806],{"class":94},[84,138656,51764],{"class":477},[84,138658,7981],{"class":104},[84,138660,1634],{"class":477},[84,138662,138663,138665,138667,138669],{"class":86,"line":70},[84,138664,128414],{"class":94},[84,138666,51764],{"class":477},[84,138668,61195],{"class":94},[84,138670,1634],{"class":477},[84,138672,138673],{"class":86,"line":120},[84,138674,1905],{"class":477},[35,138676,138677],{},"样式实例代码：",[75,138679,138680],{"className":126798,"code":138640,"language":126800,"meta":66,"style":66},[81,138681,138682,138690,138700,138710],{"__ignoreMap":66},[84,138683,138684,138686,138688],{"class":86,"line":87},[84,138685,51938],{"class":51627},[84,138687,137799],{"class":90},[84,138689,15901],{"class":477},[84,138691,138692,138694,138696,138698],{"class":86,"line":98},[84,138693,137806],{"class":94},[84,138695,51764],{"class":477},[84,138697,7981],{"class":104},[84,138699,1634],{"class":477},[84,138701,138702,138704,138706,138708],{"class":86,"line":70},[84,138703,128414],{"class":94},[84,138705,51764],{"class":477},[84,138707,61195],{"class":94},[84,138709,1634],{"class":477},[84,138711,138712],{"class":86,"line":120},[84,138713,1905],{"class":477},[23,138715,138717],{"id":138716},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1480,138719,138720],{},[31,138721,138722],{},"header 盒子必须要有高度",[35,138724,138725,138726,138728,138729],{},"1 号盒子是 ",[81,138727,131810],{}," 标志定位，在正常开发过程中， ",[624,138730,138731,138732,138735],{},"logo的布局其实是有讲究的，需要进行 ",[81,138733,138734],{},"logoSEO","的优化 （★★★）",[1480,138737,138738,138746,138754,138781],{},[31,138739,138740,138742,138743,138745],{},[81,138741,131810],{}," 里面首先放一个 ",[81,138744,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[31,138747,138748,138750,138751,138753],{},[81,138749,10],{}," 里面再放一个链接，可以返回首页的，把 ",[81,138752,131810],{}," 的背景图片给链接即可",[31,138755,138756,138757],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1480,138758,138759,138774],{},[31,138760,138761,138762,138765,138766,138769,138770,138773],{},"方法1：",[81,138763,138764],{},"text-indent"," 移到盒子外面（",[81,138767,138768],{},"text-indent: -9999px",") ，然后 ",[81,138771,138772],{},"overflow:hidden"," ，淘宝的做法",[31,138775,138776,138777,138780],{},"方法2：直接给 ",[81,138778,138779],{},"font-size: 0;"," 就看不到文字了，京东的做法",[31,138782,138783,138784,138786,138787,138789],{},"最后给链接一个 ",[81,138785,51734],{}," 属性，这样鼠标放到 ",[81,138788,131810],{}," 上就可以看到提示文字了",[35,138791,138637],{},[75,138793,138794],{"className":127545,"code":132031,"language":127547,"meta":66,"style":66},[81,138795,138796],{"__ignoreMap":66},[84,138797,138798,138800,138802,138804,138806,138808,138810,138812,138814,138816,138818],{"class":86,"line":87},[84,138799,1383],{"class":477},[84,138801,39],{"class":51627},[84,138803,61383],{"class":90},[84,138805,523],{"class":477},[84,138807,132046],{"class":104},[84,138809,132049],{"class":90},[84,138811,523],{"class":477},[84,138813,132054],{"class":104},[84,138815,132057],{"class":477},[84,138817,39],{"class":51627},[84,138819,51634],{"class":477},[35,138821,138677],{},[75,138823,138824],{"className":127545,"code":132031,"language":127547,"meta":66,"style":66},[81,138825,138826],{"__ignoreMap":66},[84,138827,138828,138830,138832,138834,138836,138838,138840,138842,138844,138846,138848],{"class":86,"line":87},[84,138829,1383],{"class":477},[84,138831,39],{"class":51627},[84,138833,61383],{"class":90},[84,138835,523],{"class":477},[84,138837,132046],{"class":104},[84,138839,132049],{"class":90},[84,138841,523],{"class":477},[84,138843,132054],{"class":104},[84,138845,132057],{"class":477},[84,138847,39],{"class":51627},[84,138849,51634],{"class":477},[35,138851,138852,138853,138855],{},"2 号盒子是 ",[81,138854,131823],{}," 搜索模块定位",[1480,138857,138858,138861,138864,138867],{},[31,138859,138860],{},"search盒子利用定位的方式放在对应的位置",[31,138862,138863],{},"search盒子设置绝对定位，header盒子设置相对定位",[31,138865,138866],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[31,138868,138869],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[35,138871,138637],{},[75,138873,138874],{"className":126798,"code":132118,"language":126800,"meta":66,"style":66},[81,138875,138876,138898,138902,138912],{"__ignoreMap":66},[84,138877,138878,138880,138882,138884,138886,138888,138890,138892,138894,138896],{"class":86,"line":87},[84,138879,51938],{"class":51627},[84,138881,12764],{"class":477},[84,138883,35],{"class":51627},[84,138885,12764],{"class":477},[84,138887,10],{"class":51627},[84,138889,12764],{"class":477},[84,138891,1480],{"class":51627},[84,138893,12764],{"class":477},[84,138895,31],{"class":51627},[84,138897,15901],{"class":477},[84,138899,138900],{"class":86,"line":98},[84,138901,132147],{"class":328},[84,138903,138904,138906,138908,138910],{"class":86,"line":70},[84,138905,128414],{"class":94},[84,138907,51764],{"class":477},[84,138909,61195],{"class":94},[84,138911,1634],{"class":477},[84,138913,138914],{"class":86,"line":120},[84,138915,1905],{"class":477},[35,138917,138677],{},[75,138919,138920],{"className":126798,"code":132118,"language":126800,"meta":66,"style":66},[81,138921,138922,138944,138948,138958],{"__ignoreMap":66},[84,138923,138924,138926,138928,138930,138932,138934,138936,138938,138940,138942],{"class":86,"line":87},[84,138925,51938],{"class":51627},[84,138927,12764],{"class":477},[84,138929,35],{"class":51627},[84,138931,12764],{"class":477},[84,138933,10],{"class":51627},[84,138935,12764],{"class":477},[84,138937,1480],{"class":51627},[84,138939,12764],{"class":477},[84,138941,31],{"class":51627},[84,138943,15901],{"class":477},[84,138945,138946],{"class":86,"line":98},[84,138947,132147],{"class":328},[84,138949,138950,138952,138954,138956],{"class":86,"line":70},[84,138951,128414],{"class":94},[84,138953,51764],{"class":477},[84,138955,61195],{"class":94},[84,138957,1634],{"class":477},[84,138959,138960],{"class":86,"line":120},[84,138961,1905],{"class":477},[35,138963,138964],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[35,138966,138967,138968,138971],{},"3 号盒子是 ",[81,138969,138970],{},"hotwords"," 热词模块定位",[1480,138973,138974,138977,138980],{},[31,138975,138976],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[31,138978,138979],{},"给里面所有的a标签设置 左右10px的外边距",[31,138981,138982],{},"给第一个a标签设置文字变红色（#c81623）",[35,138984,138637],{},[75,138986,138988],{"className":126798,"code":138987,"language":126800,"meta":66,"style":66},"div {\n  margin: 0 auto;\n}\n",[81,138989,138990,138996,139008],{"__ignoreMap":66},[84,138991,138992,138994],{"class":86,"line":87},[84,138993,51938],{"class":51627},[84,138995,15901],{"class":477},[84,138997,138998,139000,139002,139004,139006],{"class":86,"line":98},[84,138999,70796],{"class":94},[84,139001,51764],{"class":477},[84,139003,666],{"class":94},[84,139005,51883],{"class":94},[84,139007,1634],{"class":477},[84,139009,139010],{"class":86,"line":70},[84,139011,1905],{"class":477},[35,139013,138677],{},[75,139015,139016],{"className":126798,"code":138987,"language":126800,"meta":66,"style":66},[81,139017,139018,139024,139036],{"__ignoreMap":66},[84,139019,139020,139022],{"class":86,"line":87},[84,139021,51938],{"class":51627},[84,139023,15901],{"class":477},[84,139025,139026,139028,139030,139032,139034],{"class":86,"line":98},[84,139027,70796],{"class":94},[84,139029,51764],{"class":477},[84,139031,666],{"class":94},[84,139033,51883],{"class":94},[84,139035,1634],{"class":477},[84,139037,139038],{"class":86,"line":70},[84,139039,1905],{"class":477},[35,139041,139042,139043,139046],{},"4 号盒子是 ",[81,139044,139045],{},"shopcar"," 购物车模块",[1480,139048,139049,139054,139057,139060],{},[31,139050,123581,139051,139053],{},[81,139052,139045],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[31,139055,139056],{},"count 统计部分用绝对定位做",[31,139058,139059],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[31,139061,139062],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[35,139064,138637],{},[75,139066,139067],{"className":126798,"code":132230,"language":126800,"meta":66,"style":66},[81,139068,139069,139073,139087,139091,139105,139109,139123,139127,139141,139145],{"__ignoreMap":66},[84,139070,139071],{"class":86,"line":87},[84,139072,132237],{"class":328},[84,139074,139075,139077,139079,139081,139083,139085],{"class":86,"line":98},[84,139076,132242],{"class":90},[84,139078,80133],{"class":477},[84,139080,129158],{"class":94},[84,139082,51764],{"class":477},[84,139084,132251],{"class":94},[84,139086,129728],{"class":477},[84,139088,139089],{"class":86,"line":70},[84,139090,132258],{"class":328},[84,139092,139093,139095,139097,139099,139101,139103],{"class":86,"line":120},[84,139094,132263],{"class":90},[84,139096,80133],{"class":477},[84,139098,129158],{"class":94},[84,139100,51764],{"class":477},[84,139102,55090],{"class":94},[84,139104,129728],{"class":477},[84,139106,139107],{"class":86,"line":131},[84,139108,132278],{"class":328},[84,139110,139111,139113,139115,139117,139119,139121],{"class":86,"line":145},[84,139112,132283],{"class":90},[84,139114,80133],{"class":477},[84,139116,129158],{"class":94},[84,139118,51764],{"class":477},[84,139120,55157],{"class":94},[84,139122,129728],{"class":477},[84,139124,139125],{"class":86,"line":156},[84,139126,132298],{"class":328},[84,139128,139129,139131,139133,139135,139137,139139],{"class":86,"line":164},[84,139130,132303],{"class":90},[84,139132,80133],{"class":477},[84,139134,129158],{"class":94},[84,139136,51764],{"class":477},[84,139138,86559],{"class":94},[84,139140,129728],{"class":477},[84,139142,139143],{"class":86,"line":175},[84,139144,132318],{"class":328},[84,139146,139147,139149,139151,139153,139155,139157],{"class":86,"line":185},[84,139148,132323],{"class":90},[84,139150,80133],{"class":477},[84,139152,129158],{"class":94},[84,139154,51764],{"class":477},[84,139156,132332],{"class":94},[84,139158,129728],{"class":477},[35,139160,138677],{},[75,139162,139163],{"className":126798,"code":132230,"language":126800,"meta":66,"style":66},[81,139164,139165,139169,139183,139187,139201,139205,139219,139223,139237,139241],{"__ignoreMap":66},[84,139166,139167],{"class":86,"line":87},[84,139168,132237],{"class":328},[84,139170,139171,139173,139175,139177,139179,139181],{"class":86,"line":98},[84,139172,132242],{"class":90},[84,139174,80133],{"class":477},[84,139176,129158],{"class":94},[84,139178,51764],{"class":477},[84,139180,132251],{"class":94},[84,139182,129728],{"class":477},[84,139184,139185],{"class":86,"line":70},[84,139186,132258],{"class":328},[84,139188,139189,139191,139193,139195,139197,139199],{"class":86,"line":120},[84,139190,132263],{"class":90},[84,139192,80133],{"class":477},[84,139194,129158],{"class":94},[84,139196,51764],{"class":477},[84,139198,55090],{"class":94},[84,139200,129728],{"class":477},[84,139202,139203],{"class":86,"line":131},[84,139204,132278],{"class":328},[84,139206,139207,139209,139211,139213,139215,139217],{"class":86,"line":145},[84,139208,132283],{"class":90},[84,139210,80133],{"class":477},[84,139212,129158],{"class":94},[84,139214,51764],{"class":477},[84,139216,55157],{"class":94},[84,139218,129728],{"class":477},[84,139220,139221],{"class":86,"line":156},[84,139222,132298],{"class":328},[84,139224,139225,139227,139229,139231,139233,139235],{"class":86,"line":164},[84,139226,132303],{"class":90},[84,139228,80133],{"class":477},[84,139230,129158],{"class":94},[84,139232,51764],{"class":477},[84,139234,86559],{"class":94},[84,139236,129728],{"class":477},[84,139238,139239],{"class":86,"line":175},[84,139240,132318],{"class":328},[84,139242,139243,139245,139247,139249,139251,139253],{"class":86,"line":185},[84,139244,132323],{"class":90},[84,139246,80133],{"class":477},[84,139248,129158],{"class":94},[84,139250,51764],{"class":477},[84,139252,132332],{"class":94},[84,139254,129728],{"class":477},[23,139256,139258,139259,139261],{"id":139257},"_1544-nav导航模块制作","15.4.4 ",[81,139260,54040],{},"导航模块制作",[64,139263],{"style":126654,"src":139264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[35,139266,139267,139269],{},[81,139268,54040],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[35,139271,139272,139273],{},"1 号盒子左侧浮动，",[81,139274,139275],{},"dropdown",[1480,139277,139278,139288,139296,139302,139310,139320,139328,139339],{},[31,139279,139280,139281,101344,139284,139287],{},"1号盒子有讲究，根据相关性 里面包含 ",[81,139282,139283],{},".dt",[81,139285,139286],{},".dd"," 两个盒子",[31,139289,139290,139292,139293,139295],{},[81,139291,139283],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[81,139294,139286],{}," 挤到下面去了",[31,139297,139298,139299,139301],{},"给 ",[81,139300,139286],{}," 盒子设置宽度 和 高度，以及背景颜色",[31,139303,139298,139304,139306,139307,120561],{},[81,139305,139286],{}," 盒子里面定义 无序列表 （",[81,139308,139309],{},"ul > li > a",[31,139311,139312,139313,139315,139316,139319],{},"每个 ",[81,139314,31],{}," 都有一个高度（",[81,139317,139318],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[31,139321,139298,139322,139324,139325,120561],{},[81,139323,31],{}," 里面的a设置文字大小（",[81,139326,139327],{},"14px",[31,139329,139298,139330,139332,139333,139335,139336,139338],{},[81,139331,31],{}," 设置 ",[81,139334,127959],{},"，当鼠标移入的时候，让",[81,139337,31],{},"的背景变成白色，让里面的文字变成红色",[31,139340,139341,139343,139344,139346,139347,139349],{},[81,139342,31],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[81,139345,31],{},"的右侧，那么给",[81,139348,31],{},"设置相对定位",[35,139351,139352],{},"一定要注意相关性",[35,139354,138637],{},[75,139356,139357],{"className":126798,"code":138640,"language":126800,"meta":66,"style":66},[81,139358,139359,139367,139377,139387],{"__ignoreMap":66},[84,139360,139361,139363,139365],{"class":86,"line":87},[84,139362,51938],{"class":51627},[84,139364,137799],{"class":90},[84,139366,15901],{"class":477},[84,139368,139369,139371,139373,139375],{"class":86,"line":98},[84,139370,137806],{"class":94},[84,139372,51764],{"class":477},[84,139374,7981],{"class":104},[84,139376,1634],{"class":477},[84,139378,139379,139381,139383,139385],{"class":86,"line":70},[84,139380,128414],{"class":94},[84,139382,51764],{"class":477},[84,139384,61195],{"class":94},[84,139386,1634],{"class":477},[84,139388,139389],{"class":86,"line":120},[84,139390,1905],{"class":477},[35,139392,138677],{},[75,139394,139395],{"className":126798,"code":138640,"language":126800,"meta":66,"style":66},[81,139396,139397,139405,139415,139425],{"__ignoreMap":66},[84,139398,139399,139401,139403],{"class":86,"line":87},[84,139400,51938],{"class":51627},[84,139402,137799],{"class":90},[84,139404,15901],{"class":477},[84,139406,139407,139409,139411,139413],{"class":86,"line":98},[84,139408,137806],{"class":94},[84,139410,51764],{"class":477},[84,139412,7981],{"class":104},[84,139414,1634],{"class":477},[84,139416,139417,139419,139421,139423],{"class":86,"line":70},[84,139418,128414],{"class":94},[84,139420,51764],{"class":477},[84,139422,61195],{"class":94},[84,139424,1634],{"class":477},[84,139426,139427],{"class":86,"line":120},[84,139428,1905],{"class":477},[35,139430,139431],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[35,139433,139434,139435,139438],{},"2 号盒子左侧浮动，",[81,139436,139437],{},"navitems"," 导航栏组",[1480,139440,139441,139446,139455],{},[31,139442,139443,139444],{},"里面结构是 ",[81,139445,139309],{},[31,139447,139448,139449,139451,139452,139454],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[81,139450,39],{},"左右的",[81,139453,31210],{},"把两侧撑开",[31,139456,139457],{},"让文字垂直居中（行高等于高度）",[64,139459],{"style":126654,"src":139460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[35,139462,139463],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[35,139465,138637],{},[75,139467,139469],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},".box {\n  float: left;\n}\n",[81,139470,139471,139477,139487],{"__ignoreMap":66},[84,139472,139473,139475],{"class":86,"line":87},[84,139474,130646],{"class":90},[84,139476,15901],{"class":477},[84,139478,139479,139481,139483,139485],{"class":86,"line":98},[84,139480,131278],{"class":94},[84,139482,51764],{"class":477},[84,139484,24065],{"class":94},[84,139486,1634],{"class":477},[84,139488,139489],{"class":86,"line":70},[84,139490,1905],{"class":477},[35,139492,138677],{},[75,139494,139495],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,139496,139497,139503,139513],{"__ignoreMap":66},[84,139498,139499,139501],{"class":86,"line":87},[84,139500,130646],{"class":90},[84,139502,15901],{"class":477},[84,139504,139505,139507,139509,139511],{"class":86,"line":98},[84,139506,131278],{"class":94},[84,139508,51764],{"class":477},[84,139510,24065],{"class":94},[84,139512,1634],{"class":477},[84,139514,139515],{"class":86,"line":70},[84,139516,1905],{"class":477},[35,139518,139519],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[64,139521],{"style":126654,"src":139522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[75,139524,139525],{"className":126798,"code":130955,"language":126800,"meta":66,"style":66},[81,139526,139527,139533,139549],{"__ignoreMap":66},[84,139528,139529,139531],{"class":86,"line":87},[84,139530,51938],{"class":51627},[84,139532,15901],{"class":477},[84,139534,139535,139537,139539,139541,139543,139545,139547],{"class":86,"line":98},[84,139536,71222],{"class":94},[84,139538,51764],{"class":477},[84,139540,692],{"class":94},[84,139542,51819],{"class":473},[84,139544,51848],{"class":94},[84,139546,130190],{"class":94},[84,139548,1634],{"class":477},[84,139550,139551],{"class":86,"line":70},[84,139552,1905],{"class":477},[23,139554,139556],{"id":139555},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[64,139558],{"style":126654,"src":139559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1480,139561,139562,139567,139572],{},[31,139563,139564,139566],{},[81,139565,132001],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[31,139568,139569,139571],{},[81,139570,132001],{}," 里面有一个大的版心",[31,139573,139574,139575,139578,139579],{},"版心里面包含 1 号盒子，",[81,139576,139577],{},"mod_service"," 是服务模块，mod 是模块的意思",[1480,139580,139581,139586,139599,139615,139620],{},[31,139582,139298,139583,139585],{},[81,139584,139577],{}," 设置高度（80px）和下边框",[31,139587,139588,139589,139592,139593,139595,139596,139598],{},"在里面定义 ",[81,139590,139591],{},"ul > li"," ,每个",[81,139594,31],{}," 宽度是300px 高度是 50px，给每个",[81,139597,31],{},"设置35px的左内边距",[31,139600,139601,139602,139604,139605,139607,139608,139610,139611,18739,139613,120561],{},"在每个",[81,139603,31],{},"里面，放一个 ",[81,139606,23239],{},"（里面放图标），一个",[81,139609,51938],{},"（里面放",[81,139612,51938],{},[81,139614,35],{},[31,139616,139298,139617,139619],{},[81,139618,23239],{},"设置浮动，让h5与这个div左右排列",[31,139621,139622],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[35,139624,138637],{},[75,139626,139628],{"className":126798,"code":139627,"language":126800,"meta":66,"style":66},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[81,139629,139630,139636,139648,139660,139687],{"__ignoreMap":66},[84,139631,139632,139634],{"class":86,"line":87},[84,139633,134555],{"class":90},[84,139635,15901],{"class":477},[84,139637,139638,139640,139642,139644,139646],{"class":86,"line":98},[84,139639,70894],{"class":94},[84,139641,51764],{"class":477},[84,139643,1173],{"class":94},[84,139645,51819],{"class":473},[84,139647,1634],{"class":477},[84,139649,139650,139652,139654,139656,139658],{"class":86,"line":70},[84,139651,71114],{"class":94},[84,139653,51764],{"class":477},[84,139655,1173],{"class":94},[84,139657,51819],{"class":473},[84,139659,1634],{"class":477},[84,139661,139662,139664,139666,139668,139670,139672,139674,139676,139679,139681,139683,139685],{"class":86,"line":120},[84,139663,70937],{"class":94},[84,139665,51764],{"class":477},[84,139667,62052],{"class":94},[84,139669,478],{"class":477},[84,139671,134594],{"class":5545},[84,139673,14043],{"class":477},[84,139675,62062],{"class":94},[84,139677,139678],{"class":94}," -10",[84,139680,51819],{"class":473},[84,139682,134613],{"class":94},[84,139684,51819],{"class":473},[84,139686,1634],{"class":477},[84,139688,139689],{"class":86,"line":131},[84,139690,1905],{"class":477},[35,139692,138677],{},[75,139694,139695],{"className":126798,"code":139627,"language":126800,"meta":66,"style":66},[81,139696,139697,139703,139715,139727,139753],{"__ignoreMap":66},[84,139698,139699,139701],{"class":86,"line":87},[84,139700,134555],{"class":90},[84,139702,15901],{"class":477},[84,139704,139705,139707,139709,139711,139713],{"class":86,"line":98},[84,139706,70894],{"class":94},[84,139708,51764],{"class":477},[84,139710,1173],{"class":94},[84,139712,51819],{"class":473},[84,139714,1634],{"class":477},[84,139716,139717,139719,139721,139723,139725],{"class":86,"line":70},[84,139718,71114],{"class":94},[84,139720,51764],{"class":477},[84,139722,1173],{"class":94},[84,139724,51819],{"class":473},[84,139726,1634],{"class":477},[84,139728,139729,139731,139733,139735,139737,139739,139741,139743,139745,139747,139749,139751],{"class":86,"line":120},[84,139730,70937],{"class":94},[84,139732,51764],{"class":477},[84,139734,62052],{"class":94},[84,139736,478],{"class":477},[84,139738,134594],{"class":5545},[84,139740,14043],{"class":477},[84,139742,62062],{"class":94},[84,139744,139678],{"class":94},[84,139746,51819],{"class":473},[84,139748,134613],{"class":94},[84,139750,51819],{"class":473},[84,139752,1634],{"class":477},[84,139754,139755],{"class":86,"line":131},[84,139756,1905],{"class":477},[35,139758,139759],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1480,139761,139762,139765,139771,139777,139789],{},[31,139763,139764],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[31,139766,139767,139768,120561],{},"里面的布局利用 自定义列表来实现（",[81,139769,139770],{},"dl > dt + dd",[31,139772,139298,139773,139776],{},[81,139774,139775],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[31,139778,139298,139779,139782,139783,18739,139785,139788],{},[81,139780,139781],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[81,139784,139781],{},[81,139786,139787],{},"dd","之间有些距离",[31,139790,139791],{},"最后一个 dl 结构和样式不一样，需要单独设置",[35,139793,138637],{},[75,139795,139796],{"className":126798,"code":138987,"language":126800,"meta":66,"style":66},[81,139797,139798,139804,139816],{"__ignoreMap":66},[84,139799,139800,139802],{"class":86,"line":87},[84,139801,51938],{"class":51627},[84,139803,15901],{"class":477},[84,139805,139806,139808,139810,139812,139814],{"class":86,"line":98},[84,139807,70796],{"class":94},[84,139809,51764],{"class":477},[84,139811,666],{"class":94},[84,139813,51883],{"class":94},[84,139815,1634],{"class":477},[84,139817,139818],{"class":86,"line":70},[84,139819,1905],{"class":477},[35,139821,138677],{},[75,139823,139824],{"className":126798,"code":138987,"language":126800,"meta":66,"style":66},[81,139825,139826,139832,139844],{"__ignoreMap":66},[84,139827,139828,139830],{"class":86,"line":87},[84,139829,51938],{"class":51627},[84,139831,15901],{"class":477},[84,139833,139834,139836,139838,139840,139842],{"class":86,"line":98},[84,139835,70796],{"class":94},[84,139837,51764],{"class":477},[84,139839,666],{"class":94},[84,139841,51883],{"class":94},[84,139843,1634],{"class":477},[84,139845,139846],{"class":86,"line":70},[84,139847,1905],{"class":477},[35,139849,139850],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1480,139852,139853,139862,139865,139876],{},[31,139854,139855,139856,139858,139859,139861],{},"分为上下两块，上面是 ",[81,139857,132018],{}," 友情链接，下面是 ",[81,139860,132011],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[31,139863,139864],{},"把内容分别复制到相应模块中",[31,139866,139298,139867,139869,139870,139872,139873,139875],{},[81,139868,132018],{}," 设置 15px 的下外边距，给",[81,139871,132018],{}," 里面 的 ",[81,139874,39],{}," 标签设置 左右 3px 的外边距",[31,139877,139878,139879,139881],{},"给",[81,139880,132011],{}," 设置 20px 的行高",[35,139883,138637],{},[75,139885,139886],{"className":126798,"code":138987,"language":126800,"meta":66,"style":66},[81,139887,139888,139894,139906],{"__ignoreMap":66},[84,139889,139890,139892],{"class":86,"line":87},[84,139891,51938],{"class":51627},[84,139893,15901],{"class":477},[84,139895,139896,139898,139900,139902,139904],{"class":86,"line":98},[84,139897,70796],{"class":94},[84,139899,51764],{"class":477},[84,139901,666],{"class":94},[84,139903,51883],{"class":94},[84,139905,1634],{"class":477},[84,139907,139908],{"class":86,"line":70},[84,139909,1905],{"class":477},[35,139911,138677],{},[75,139913,139914],{"className":126798,"code":138987,"language":126800,"meta":66,"style":66},[81,139915,139916,139922,139934],{"__ignoreMap":66},[84,139917,139918,139920],{"class":86,"line":87},[84,139919,51938],{"class":51627},[84,139921,15901],{"class":477},[84,139923,139924,139926,139928,139930,139932],{"class":86,"line":98},[84,139925,70796],{"class":94},[84,139927,51764],{"class":477},[84,139929,666],{"class":94},[84,139931,51883],{"class":94},[84,139933,1634],{"class":477},[84,139935,139936],{"class":86,"line":70},[84,139937,1905],{"class":477},[35,139939,139940],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[389,139942,139943],{},"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":66,"searchDepth":98,"depth":98,"links":139945},[139946,139947,139948,139955],{"id":138226,"depth":98,"text":138227},{"id":138245,"depth":98,"text":138246},{"id":138272,"depth":98,"text":138273,"children":139949},[139950,139951,139952,139953,139954],{"id":138276,"depth":70,"text":138277},{"id":138289,"depth":70,"text":138290},{"id":138313,"depth":70,"text":138314},{"id":138335,"depth":70,"text":138336},{"id":138407,"depth":70,"text":138408},{"id":138533,"depth":98,"text":138534,"children":139956},[139957,139958,139959,139960,139962],{"id":138537,"depth":70,"text":138538},{"id":138544,"depth":70,"text":138545},{"id":138716,"depth":70,"text":138717},{"id":139257,"depth":70,"text":139961},"15.4.4 nav导航模块制作",{"id":139555,"depth":70,"text":139556},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138218,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139969,"title":139970,"body":139971,"description":400,"extension":401,"meta":142373,"navigation":403,"path":142374,"seo":142375,"stem":142376,"__hash__":142377},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139972,"toc":142350},[139973,139976,139980,139984,139996,139999,140002,140005,140016,140018,140042,140044,140068,140073,140076,140078,140114,140116,140152,140155,140160,140163,140166,140169,140199,140206,140209,140219,140221,140255,140258,140292,140298,140315,140317,140353,140355,140391,140396,140421,140423,140449,140451,140475,140482,140485,140549,140551,140593,140595,140635,140642,140647,140649,140679,140681,140711,140715,140718,140725,140737,140739,140765,140767,140791,140794,140796,140820,140826,140836,140838,140868,140870,140900,140907,140948,140950,140986,140988,141024,141028,141031,141034,141037,141043,141048,141051,141074,141077,141101,141104,141128,141133,141136,141139,141142,141145,141148,141222,141224,141254,141256,141286,141289,141292,141324,141328,141332,141346,141355,141358,141363,141365,141459,141461,141555,141578,141580,141604,141606,141630,141637,141640,141650,141652,141676,141681,141689,141691,141721,141726,141766,141768,141794,141796,141822,141826,141829,141834,141837,141841,141849,141856,141864,141866,141896,141898,141928,141936,141939,141942,141944,141974,141976,142006,142009,142014,142016,142040,142042,142066,142069,142154,142156,142180,142182,142206,142210,142212,142236,142238,142272,142276,142290,142293,142298,142301,142306,142309,142339,142347],[10,139974,139970],{"id":139975},"_16-品优购项目下篇-主体与页面开发",[14,139977,139979],{"id":139978},"_161-项目主体模块制作","16.1 项目主体模块制作",[23,139981,139983],{"id":139982},"_1611-首页制作","16.1.1 首页制作",[35,139985,139986,139988,139989,139991,139992,139995],{},[624,139987,102384],{}," 主体模块是 ",[624,139990,74384],{}," 里面专有的，注意需要新的样式文件 ",[624,139993,139994],{},"index.css，"," 就不要写在common.css中了",[64,139997],{"style":126654,"src":139998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[64,140000],{"style":126654,"src":140001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[35,140003,140004],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1480,140006,140007,140010,140013],{},[31,140008,140009],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[31,140011,140012],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[31,140014,140015],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[35,140017,138637],{},[75,140019,140020],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,140021,140022,140028,140038],{"__ignoreMap":66},[84,140023,140024,140026],{"class":86,"line":87},[84,140025,130646],{"class":90},[84,140027,15901],{"class":477},[84,140029,140030,140032,140034,140036],{"class":86,"line":98},[84,140031,131278],{"class":94},[84,140033,51764],{"class":477},[84,140035,24065],{"class":94},[84,140037,1634],{"class":477},[84,140039,140040],{"class":86,"line":70},[84,140041,1905],{"class":477},[35,140043,138677],{},[75,140045,140046],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,140047,140048,140054,140064],{"__ignoreMap":66},[84,140049,140050,140052],{"class":86,"line":87},[84,140051,130646],{"class":90},[84,140053,15901],{"class":477},[84,140055,140056,140058,140060,140062],{"class":86,"line":98},[84,140057,131278],{"class":94},[84,140059,51764],{"class":477},[84,140061,24065],{"class":94},[84,140063,1634],{"class":477},[84,140065,140066],{"class":86,"line":70},[84,140067,1905],{"class":477},[28,140069,140070],{},[31,140071,140072],{},"左侧focus模块制作",[64,140074],{"style":126654,"src":140075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[35,140077,138637],{},[75,140079,140080],{"className":126798,"code":128121,"language":126800,"meta":66,"style":66},[81,140081,140082,140090,140100,140110],{"__ignoreMap":66},[84,140083,140084,140086,140088],{"class":86,"line":87},[84,140085,54147],{"class":51627},[84,140087,62226],{"class":90},[84,140089,15901],{"class":477},[84,140091,140092,140094,140096,140098],{"class":86,"line":98},[84,140093,128136],{"class":94},[84,140095,51764],{"class":477},[84,140097,55215],{"class":94},[84,140099,1634],{"class":477},[84,140101,140102,140104,140106,140108],{"class":86,"line":70},[84,140103,71124],{"class":94},[84,140105,51764],{"class":477},[84,140107,55063],{"class":94},[84,140109,1634],{"class":477},[84,140111,140112],{"class":86,"line":120},[84,140113,1905],{"class":477},[35,140115,138677],{},[75,140117,140118],{"className":126798,"code":128121,"language":126800,"meta":66,"style":66},[81,140119,140120,140128,140138,140148],{"__ignoreMap":66},[84,140121,140122,140124,140126],{"class":86,"line":87},[84,140123,54147],{"class":51627},[84,140125,62226],{"class":90},[84,140127,15901],{"class":477},[84,140129,140130,140132,140134,140136],{"class":86,"line":98},[84,140131,128136],{"class":94},[84,140133,51764],{"class":477},[84,140135,55215],{"class":94},[84,140137,1634],{"class":477},[84,140139,140140,140142,140144,140146],{"class":86,"line":70},[84,140141,71124],{"class":94},[84,140143,51764],{"class":477},[84,140145,55063],{"class":94},[84,140147,1634],{"class":477},[84,140149,140150],{"class":86,"line":120},[84,140151,1905],{"class":477},[35,140153,140154],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[28,140156,140157],{"start":98},[31,140158,140159],{},"右侧newsflash模块制作",[64,140161],{"style":126654,"src":140162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[35,140164,140165],{},"右侧的模块 分为上中下三个盒子",[35,140167,140168],{},"结构代码：",[75,140170,140171],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,140172,140173],{"__ignoreMap":66},[84,140174,140175,140177,140179,140181,140183,140185,140187,140189,140191,140193,140195,140197],{"class":86,"line":87},[84,140176,1383],{"class":477},[84,140178,64],{"class":51627},[84,140180,55565],{"class":90},[84,140182,523],{"class":477},[84,140184,134315],{"class":104},[84,140186,55573],{"class":90},[84,140188,523],{"class":477},[84,140190,134322],{"class":104},[84,140192,134325],{"class":90},[84,140194,523],{"class":477},[84,140196,134330],{"class":104},[84,140198,51634],{"class":477},[35,140200,140201,140202,140205],{},"1 号盒子为 ",[81,140203,140204],{},"news"," 新闻模块 高度为 165px",[64,140207],{"style":126654,"src":140208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[35,140210,140211,140212,140215,140216],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[81,140213,140214],{},"news-hd","，下面是 ",[81,140217,140218],{},"news-bd",[35,140220,140168],{},[75,140222,140223],{"className":127545,"code":130902,"language":127547,"meta":66,"style":66},[81,140224,140225,140229,140243,140247],{"__ignoreMap":66},[84,140226,140227],{"class":86,"line":87},[84,140228,130909],{"class":328},[84,140230,140231,140233,140235,140237,140239,140241],{"class":86,"line":98},[84,140232,1383],{"class":477},[84,140234,51938],{"class":51627},[84,140236,53813],{"class":90},[84,140238,523],{"class":477},[84,140240,130922],{"class":104},[84,140242,51634],{"class":477},[84,140244,140245],{"class":86,"line":70},[84,140246,130929],{"class":477},[84,140248,140249,140251,140253],{"class":86,"line":120},[84,140250,52112],{"class":477},[84,140252,51938],{"class":51627},[84,140254,51634],{"class":477},[35,140256,140257],{},"样式代码：",[75,140259,140260],{"className":127545,"code":130902,"language":127547,"meta":66,"style":66},[81,140261,140262,140266,140280,140284],{"__ignoreMap":66},[84,140263,140264],{"class":86,"line":87},[84,140265,130909],{"class":328},[84,140267,140268,140270,140272,140274,140276,140278],{"class":86,"line":98},[84,140269,1383],{"class":477},[84,140271,51938],{"class":51627},[84,140273,53813],{"class":90},[84,140275,523],{"class":477},[84,140277,130922],{"class":104},[84,140279,51634],{"class":477},[84,140281,140282],{"class":86,"line":70},[84,140283,130929],{"class":477},[84,140285,140286,140288,140290],{"class":86,"line":120},[84,140287,52112],{"class":477},[84,140289,51938],{"class":51627},[84,140291,51634],{"class":477},[35,140293,140294,140295,140297],{},"上面是",[81,140296,140214],{},"，设置高度是 33px，设置下边框",[1480,140299,140300,140306],{},[31,140301,140302,140303,140305],{},"里面放一个",[81,140304,23239],{}," 标题",[31,140307,140308,140309,140311,140312,140314],{},"放一个a",[81,140310,103019],{},"，内容是 更多，然后让 ",[81,140313,39],{}," 进行右浮动，三角用伪元素设置字体图标就好",[35,140316,140168],{},[75,140318,140319],{"className":126798,"code":138640,"language":126800,"meta":66,"style":66},[81,140320,140321,140329,140339,140349],{"__ignoreMap":66},[84,140322,140323,140325,140327],{"class":86,"line":87},[84,140324,51938],{"class":51627},[84,140326,137799],{"class":90},[84,140328,15901],{"class":477},[84,140330,140331,140333,140335,140337],{"class":86,"line":98},[84,140332,137806],{"class":94},[84,140334,51764],{"class":477},[84,140336,7981],{"class":104},[84,140338,1634],{"class":477},[84,140340,140341,140343,140345,140347],{"class":86,"line":70},[84,140342,128414],{"class":94},[84,140344,51764],{"class":477},[84,140346,61195],{"class":94},[84,140348,1634],{"class":477},[84,140350,140351],{"class":86,"line":120},[84,140352,1905],{"class":477},[35,140354,140257],{},[75,140356,140357],{"className":126798,"code":138640,"language":126800,"meta":66,"style":66},[81,140358,140359,140367,140377,140387],{"__ignoreMap":66},[84,140360,140361,140363,140365],{"class":86,"line":87},[84,140362,51938],{"class":51627},[84,140364,137799],{"class":90},[84,140366,15901],{"class":477},[84,140368,140369,140371,140373,140375],{"class":86,"line":98},[84,140370,137806],{"class":94},[84,140372,51764],{"class":477},[84,140374,7981],{"class":104},[84,140376,1634],{"class":477},[84,140378,140379,140381,140383,140385],{"class":86,"line":70},[84,140380,128414],{"class":94},[84,140382,51764],{"class":477},[84,140384,61195],{"class":94},[84,140386,1634],{"class":477},[84,140388,140389],{"class":86,"line":120},[84,140390,1905],{"class":477},[35,140392,140393,140394],{},"下面是",[81,140395,140218],{},[1480,140397,140398,140406],{},[31,140399,140400,140401,101344,140403,140405],{},"里面包含 ",[81,140402,1480],{},[81,140404,31],{}," 还有链接",[31,140407,139878,140408,140410,140411,140413,140414,140417,140418],{},[81,140409,31],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[81,140412,131464],{}," 2.设置 ",[81,140415,140416],{},"white-space: nowrap;"," 3. 设置 ",[81,140419,140420],{},"text-overflow: ellipsis;",[35,140422,140168],{},[75,140424,140426],{"className":126798,"code":140425,"language":126800,"meta":66,"style":66},"div {\n  overflow: hidden;\n}\n",[81,140427,140428,140434,140445],{"__ignoreMap":66},[84,140429,140430,140432],{"class":86,"line":87},[84,140431,51938],{"class":51627},[84,140433,15901],{"class":477},[84,140435,140436,140439,140441,140443],{"class":86,"line":98},[84,140437,140438],{"class":94},"  overflow",[84,140440,51764],{"class":477},[84,140442,62040],{"class":94},[84,140444,1634],{"class":477},[84,140446,140447],{"class":86,"line":70},[84,140448,1905],{"class":477},[35,140450,140257],{},[75,140452,140453],{"className":126798,"code":140425,"language":126800,"meta":66,"style":66},[81,140454,140455,140461,140471],{"__ignoreMap":66},[84,140456,140457,140459],{"class":86,"line":87},[84,140458,51938],{"class":51627},[84,140460,15901],{"class":477},[84,140462,140463,140465,140467,140469],{"class":86,"line":98},[84,140464,140438],{"class":94},[84,140466,51764],{"class":477},[84,140468,62040],{"class":94},[84,140470,1634],{"class":477},[84,140472,140473],{"class":86,"line":70},[84,140474,1905],{"class":477},[35,140476,140477,140478,140481],{},"2 号盒子为 ",[81,140479,140480],{},"lifeservice"," 生活服务模块 高度为 209px",[64,140483],{"style":126654,"src":140484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1480,140486,140487,140490,140500,140524,140535],{},[31,140488,140489],{},"设置边框（左右下边框）",[31,140491,140492,140493,140496,140497,140499],{},"里面的内容 是 ",[81,140494,140495],{},"ul > 12*li","，给",[81,140498,31],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[31,140501,140502,140503],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1480,140504,140505,140510,140519],{},[31,140506,140507,140509],{},[81,140508,140480],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[31,140511,140512,140513,140515,140516,140518],{},"可以让 ",[81,140514,140480],{}," 里面的 ",[81,140517,1480],{}," 宽度为 252，就可以装的下 4 个 小 li",[31,140520,140521,140523],{},[81,140522,140480],{}," 盒子 overflow 隐藏多余的部分就可以了",[31,140525,116793,140526,140528,140529,140531,140532,140534],{},[81,140527,31],{}," 里面放一个 ",[81,140530,914],{},"（里面放图标），下面的文本用 ",[81,140533,35],{}," 标签包裹",[31,140536,139298,140537,140539,140540,140542,140543,139332,140545,140548],{},[81,140538,914],{}," 设置 24px宽和28px的高（注意 ",[81,140541,914],{}," 是行内元素， 转成行内块），给 ",[81,140544,31],{},[81,140546,140547],{},"text-align:center"," 让里面内容居中显示",[35,140550,140168],{},[75,140552,140554],{"className":126798,"code":140553,"language":126800,"meta":66,"style":66},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[81,140555,140556,140574,140579,140589],{"__ignoreMap":66},[84,140557,140558,140560,140562,140564,140566,140568,140570,140572],{"class":86,"line":87},[84,140559,84],{"class":51627},[84,140561,12764],{"class":477},[84,140563,39],{"class":51627},[84,140565,12764],{"class":477},[84,140567,23882],{"class":51627},[84,140569,12764],{"class":477},[84,140571,624],{"class":51627},[84,140573,15901],{"class":477},[84,140575,140576],{"class":86,"line":98},[84,140577,140578],{"class":328},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[84,140580,140581,140583,140585,140587],{"class":86,"line":70},[84,140582,128414],{"class":94},[84,140584,51764],{"class":477},[84,140586,128476],{"class":94},[84,140588,1634],{"class":477},[84,140590,140591],{"class":86,"line":120},[84,140592,1905],{"class":477},[35,140594,140257],{},[75,140596,140597],{"className":126798,"code":140553,"language":126800,"meta":66,"style":66},[81,140598,140599,140617,140621,140631],{"__ignoreMap":66},[84,140600,140601,140603,140605,140607,140609,140611,140613,140615],{"class":86,"line":87},[84,140602,84],{"class":51627},[84,140604,12764],{"class":477},[84,140606,39],{"class":51627},[84,140608,12764],{"class":477},[84,140610,23882],{"class":51627},[84,140612,12764],{"class":477},[84,140614,624],{"class":51627},[84,140616,15901],{"class":477},[84,140618,140619],{"class":86,"line":98},[84,140620,140578],{"class":328},[84,140622,140623,140625,140627,140629],{"class":86,"line":70},[84,140624,128414],{"class":94},[84,140626,51764],{"class":477},[84,140628,128476],{"class":94},[84,140630,1634],{"class":477},[84,140632,140633],{"class":86,"line":120},[84,140634,1905],{"class":477},[35,140636,140637,140638,140641],{},"3 号盒子为 ",[81,140639,140640],{},"bargain"," 特价商品",[1480,140643,140644],{},[31,140645,140646],{},"这个比较简单，直接插入一张图片即可",[35,140648,140168],{},[75,140650,140651],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,140652,140653],{"__ignoreMap":66},[84,140654,140655,140657,140659,140661,140663,140665,140667,140669,140671,140673,140675,140677],{"class":86,"line":87},[84,140656,1383],{"class":477},[84,140658,64],{"class":51627},[84,140660,55565],{"class":90},[84,140662,523],{"class":477},[84,140664,134315],{"class":104},[84,140666,55573],{"class":90},[84,140668,523],{"class":477},[84,140670,134322],{"class":104},[84,140672,134325],{"class":90},[84,140674,523],{"class":477},[84,140676,134330],{"class":104},[84,140678,51634],{"class":477},[35,140680,140257],{},[75,140682,140683],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,140684,140685],{"__ignoreMap":66},[84,140686,140687,140689,140691,140693,140695,140697,140699,140701,140703,140705,140707,140709],{"class":86,"line":87},[84,140688,1383],{"class":477},[84,140690,64],{"class":51627},[84,140692,55565],{"class":90},[84,140694,523],{"class":477},[84,140696,134315],{"class":104},[84,140698,55573],{"class":90},[84,140700,523],{"class":477},[84,140702,134322],{"class":104},[84,140704,134325],{"class":90},[84,140706,523],{"class":477},[84,140708,134330],{"class":104},[84,140710,51634],{"class":477},[23,140712,140714],{"id":140713},"_1612-推荐模块制作","16.1.2 推荐模块制作",[64,140716],{"style":126654,"src":140717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[35,140719,140720,140721,140724],{},"大盒子 ",[81,140722,140723],{},"recom"," 推荐模块 recommend",[1480,140726,140727],{},[31,140728,140729,140730,140732,140733,140736],{},"给这个 ",[81,140731,140723],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[81,140734,140735],{},"#ebebeb","），设置距离上边 12px",[35,140738,140168],{},[75,140740,140742],{"className":126798,"code":140741,"language":126800,"meta":66,"style":66},"div {\n  background-color: #f0f0f0;\n}\n",[81,140743,140744,140750,140761],{"__ignoreMap":66},[84,140745,140746,140748],{"class":86,"line":87},[84,140747,51938],{"class":51627},[84,140749,15901],{"class":477},[84,140751,140752,140754,140756,140759],{"class":86,"line":98},[84,140753,71204],{"class":94},[84,140755,51764],{"class":477},[84,140757,140758],{"class":94},"#f0f0f0",[84,140760,1634],{"class":477},[84,140762,140763],{"class":86,"line":70},[84,140764,1905],{"class":477},[35,140766,140257],{},[75,140768,140769],{"className":126798,"code":140741,"language":126800,"meta":66,"style":66},[81,140770,140771,140777,140787],{"__ignoreMap":66},[84,140772,140773,140775],{"class":86,"line":87},[84,140774,51938],{"class":51627},[84,140776,15901],{"class":477},[84,140778,140779,140781,140783,140785],{"class":86,"line":98},[84,140780,71204],{"class":94},[84,140782,51764],{"class":477},[84,140784,140758],{"class":94},[84,140786,1634],{"class":477},[84,140788,140789],{"class":86,"line":70},[84,140790,1905],{"class":477},[35,140792,140793],{},"里面包含 2 个盒子， 浮动即可",[35,140795,140168],{},[75,140797,140798],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,140799,140800,140806,140816],{"__ignoreMap":66},[84,140801,140802,140804],{"class":86,"line":87},[84,140803,130646],{"class":90},[84,140805,15901],{"class":477},[84,140807,140808,140810,140812,140814],{"class":86,"line":98},[84,140809,131278],{"class":94},[84,140811,51764],{"class":477},[84,140813,24065],{"class":94},[84,140815,1634],{"class":477},[84,140817,140818],{"class":86,"line":70},[84,140819,1905],{"class":477},[35,140821,140822,140823],{},"1 号盒子 ",[81,140824,140825],{},"recom_hd",[1480,140827,140828,140831],{},[31,140829,140830],{},"设置宽度205px，高度163px",[31,140832,140302,140833,140835],{},[81,140834,64],{},"标签，插入图片即可",[35,140837,140168],{},[75,140839,140840],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,140841,140842],{"__ignoreMap":66},[84,140843,140844,140846,140848,140850,140852,140854,140856,140858,140860,140862,140864,140866],{"class":86,"line":87},[84,140845,1383],{"class":477},[84,140847,64],{"class":51627},[84,140849,55565],{"class":90},[84,140851,523],{"class":477},[84,140853,134315],{"class":104},[84,140855,55573],{"class":90},[84,140857,523],{"class":477},[84,140859,134322],{"class":104},[84,140861,134325],{"class":90},[84,140863,523],{"class":477},[84,140865,134330],{"class":104},[84,140867,51634],{"class":477},[35,140869,140257],{},[75,140871,140872],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,140873,140874],{"__ignoreMap":66},[84,140875,140876,140878,140880,140882,140884,140886,140888,140890,140892,140894,140896,140898],{"class":86,"line":87},[84,140877,1383],{"class":477},[84,140879,64],{"class":51627},[84,140881,55565],{"class":90},[84,140883,523],{"class":477},[84,140885,134315],{"class":104},[84,140887,55573],{"class":90},[84,140889,523],{"class":477},[84,140891,134322],{"class":104},[84,140893,134325],{"class":90},[84,140895,523],{"class":477},[84,140897,134330],{"class":104},[84,140899,51634],{"class":477},[35,140901,140902,140903,140906],{},"2 号盒子 ",[81,140904,140905],{},"recom_bd"," ，注意里面的小竖线",[1480,140908,140909,140920,140923,140928,140933],{},[31,140910,140911,140912,140914,140915,140917,140918],{},"右侧结构里面放 ",[81,140913,1480],{}," 包含 4个 ",[81,140916,31],{},"，每个li里面包含一个",[81,140919,64],{},[31,140921,140922],{},"直接利用切片工具把里面的内容当成一张图片",[31,140924,139298,140925,140927],{},[81,140926,31],{}," 设置浮动",[31,140929,139298,140930,140932],{},[81,140931,64],{}," 设置宽高，宽度 248px，高度 163px",[31,140934,140935,140936,140496,140939,140941,140942,140944,140945],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[81,140937,140938],{},"top 10px",[81,140940,31],{},"设置相对定位（注意，最后一个",[81,140943,31],{},"不用设置伪元素），可以利用 ",[81,140946,140947],{},"nth-child(-n+3){...}",[35,140949,140168],{},[75,140951,140952],{"className":126798,"code":138640,"language":126800,"meta":66,"style":66},[81,140953,140954,140962,140972,140982],{"__ignoreMap":66},[84,140955,140956,140958,140960],{"class":86,"line":87},[84,140957,51938],{"class":51627},[84,140959,137799],{"class":90},[84,140961,15901],{"class":477},[84,140963,140964,140966,140968,140970],{"class":86,"line":98},[84,140965,137806],{"class":94},[84,140967,51764],{"class":477},[84,140969,7981],{"class":104},[84,140971,1634],{"class":477},[84,140973,140974,140976,140978,140980],{"class":86,"line":70},[84,140975,128414],{"class":94},[84,140977,51764],{"class":477},[84,140979,61195],{"class":94},[84,140981,1634],{"class":477},[84,140983,140984],{"class":86,"line":120},[84,140985,1905],{"class":477},[35,140987,140257],{},[75,140989,140990],{"className":126798,"code":138640,"language":126800,"meta":66,"style":66},[81,140991,140992,141000,141010,141020],{"__ignoreMap":66},[84,140993,140994,140996,140998],{"class":86,"line":87},[84,140995,51938],{"class":51627},[84,140997,137799],{"class":90},[84,140999,15901],{"class":477},[84,141001,141002,141004,141006,141008],{"class":86,"line":98},[84,141003,137806],{"class":94},[84,141005,51764],{"class":477},[84,141007,7981],{"class":104},[84,141009,1634],{"class":477},[84,141011,141012,141014,141016,141018],{"class":86,"line":70},[84,141013,128414],{"class":94},[84,141015,51764],{"class":477},[84,141017,61195],{"class":94},[84,141019,1634],{"class":477},[84,141021,141022],{"class":86,"line":120},[84,141023,1905],{"class":477},[23,141025,141027],{"id":141026},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[64,141029],{"style":126654,"src":141030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[35,141032,141033],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[35,141035,141036],{},"第一楼是家用电器模块： 里面包含两个盒子",[35,141038,141039,141042],{},[81,141040,141041],{},"box_hd"," 制作",[35,141044,140822,141045,141047],{},[81,141046,141041],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[64,141049],{"style":126654,"src":141050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1480,141052,141053,141058,141063,141066],{},[31,141054,141055,141057],{},[81,141056,141041],{}," 给 30px 的高度，2个像素的下边框",[31,141059,141060,141061],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[81,141062,139309],{},[31,141064,141065],{},"左侧盒左浮动，右侧盒子右浮动",[31,141067,141068,141070,141071,141073],{},[81,141069,39],{},"标签之间的距离用左右的",[81,141072,31210],{},"撑开即可",[35,141075,141076],{},"结构代码",[75,141078,141079],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,141080,141081,141087,141097],{"__ignoreMap":66},[84,141082,141083,141085],{"class":86,"line":87},[84,141084,130646],{"class":90},[84,141086,15901],{"class":477},[84,141088,141089,141091,141093,141095],{"class":86,"line":98},[84,141090,131278],{"class":94},[84,141092,51764],{"class":477},[84,141094,24065],{"class":94},[84,141096,1634],{"class":477},[84,141098,141099],{"class":86,"line":70},[84,141100,1905],{"class":477},[35,141102,141103],{},"样式代码",[75,141105,141106],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,141107,141108,141114,141124],{"__ignoreMap":66},[84,141109,141110,141112],{"class":86,"line":87},[84,141111,130646],{"class":90},[84,141113,15901],{"class":477},[84,141115,141116,141118,141120,141122],{"class":86,"line":98},[84,141117,131278],{"class":94},[84,141119,51764],{"class":477},[84,141121,24065],{"class":94},[84,141123,1634],{"class":477},[84,141125,141126],{"class":86,"line":70},[84,141127,1905],{"class":477},[35,141129,141130,141042],{},[81,141131,141132],{},"box_bd",[35,141134,141135],{},"2 号盒子 box_bd，不要给高度",[64,141137],{"style":126654,"src":141138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[35,141140,141141],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[35,141143,141144],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[35,141146,141147],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1480,141149,141150,141162,141178],{},[31,141151,141152,141154,141155,141158,141159,141161],{},[81,141153,141132],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[81,141156,141157],{},"tab_content","，在",[81,141160,141157],{}," 里面包裹tab选项卡对应的内容",[31,141163,141164,141165,141168,141169,141171,141172,141174,141175,141177],{},"内容被一个大盒子包裹（",[81,141166,141167],{},"tab_list_item","），里面是 ",[81,141170,1480],{}," 包裹 5个 ",[81,141173,31],{},"，每个",[81,141176,31],{},"设置对应的宽度，然后设置浮动",[31,141179,141180,141181,141183,141184,141186,141187],{},"而这5个",[81,141182,31],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[81,141185,31],{},"设置",[1480,141188,141189,141207,141210],{},[31,141190,141191,141192,141194,141195,141197,141198,141200,141201,141203,141204,141206],{},"第一个小 ",[81,141193,31],{}," 分为上下结构，上面是 ",[81,141196,1480],{}," 包裹 ",[81,141199,31],{}," ，",[81,141202,31],{},"里面包裹 ",[81,141205,39],{},"，下面插入一张图片",[31,141208,141209],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[31,141211,141212,141213,141215,141216,141218,141219,141221],{},"后面的小 ",[81,141214,31],{}," 里面先放一个",[81,141217,39],{},"标签，然后在",[81,141220,39],{},"标签里面插入图片即可",[35,141223,141076],{},[75,141225,141226],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,141227,141228],{"__ignoreMap":66},[84,141229,141230,141232,141234,141236,141238,141240,141242,141244,141246,141248,141250,141252],{"class":86,"line":87},[84,141231,1383],{"class":477},[84,141233,64],{"class":51627},[84,141235,55565],{"class":90},[84,141237,523],{"class":477},[84,141239,134315],{"class":104},[84,141241,55573],{"class":90},[84,141243,523],{"class":477},[84,141245,134322],{"class":104},[84,141247,134325],{"class":90},[84,141249,523],{"class":477},[84,141251,134330],{"class":104},[84,141253,51634],{"class":477},[35,141255,141103],{},[75,141257,141258],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,141259,141260],{"__ignoreMap":66},[84,141261,141262,141264,141266,141268,141270,141272,141274,141276,141278,141280,141282,141284],{"class":86,"line":87},[84,141263,1383],{"class":477},[84,141265,64],{"class":51627},[84,141267,55565],{"class":90},[84,141269,523],{"class":477},[84,141271,134315],{"class":104},[84,141273,55573],{"class":90},[84,141275,523],{"class":477},[84,141277,134322],{"class":104},[84,141279,134325],{"class":90},[84,141281,523],{"class":477},[84,141283,134330],{"class":104},[84,141285,51634],{"class":477},[35,141287,141288],{},"tab栏切换需求！！！！！！介绍：",[64,141290],{"style":126654,"src":141291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1480,141293,141294,141302,141308,141311],{},[31,141295,141296,141299,141300],{},[81,141297,141298],{},"tab","栏的布局是 ",[81,141301,139309],{},[31,141303,141304,141305,141307],{},"有多少个",[81,141306,141298],{},"选项卡，那么对应就有多少个内容",[31,141309,141310],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[31,141312,141313,141314,141317,141318,141320,141321,141323],{},"等后面我们学习了",[81,141315,141316],{},"js","之后，我们就会配合",[81,141319,141316],{},"来实现，",[81,141322,141298],{},"栏的切换",[14,141325,141327],{"id":141326},"_162-列表制作","16.2 列表制作",[23,141329,141331],{"id":141330},"_1621-准备工作","16.2.1 准备工作",[1480,141333,141334,141337,141340,141343],{},[31,141335,141336],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[31,141338,141339],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[31,141341,141342],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[31,141344,141345],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[23,141347,141349,141350,101344,141352,141354],{"id":141348},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[81,141351,131803],{},[81,141353,54040],{}," 修改",[64,141356],{"style":126654,"src":141357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1480,141359,141360],{},[31,141361,141362],{},"秒杀盒子 sk（ second kill ） 定位即可",[35,141364,140168],{},[75,141366,141367],{"className":126798,"code":132230,"language":126800,"meta":66,"style":66},[81,141368,141369,141373,141387,141391,141405,141409,141423,141427,141441,141445],{"__ignoreMap":66},[84,141370,141371],{"class":86,"line":87},[84,141372,132237],{"class":328},[84,141374,141375,141377,141379,141381,141383,141385],{"class":86,"line":98},[84,141376,132242],{"class":90},[84,141378,80133],{"class":477},[84,141380,129158],{"class":94},[84,141382,51764],{"class":477},[84,141384,132251],{"class":94},[84,141386,129728],{"class":477},[84,141388,141389],{"class":86,"line":70},[84,141390,132258],{"class":328},[84,141392,141393,141395,141397,141399,141401,141403],{"class":86,"line":120},[84,141394,132263],{"class":90},[84,141396,80133],{"class":477},[84,141398,129158],{"class":94},[84,141400,51764],{"class":477},[84,141402,55090],{"class":94},[84,141404,129728],{"class":477},[84,141406,141407],{"class":86,"line":131},[84,141408,132278],{"class":328},[84,141410,141411,141413,141415,141417,141419,141421],{"class":86,"line":145},[84,141412,132283],{"class":90},[84,141414,80133],{"class":477},[84,141416,129158],{"class":94},[84,141418,51764],{"class":477},[84,141420,55157],{"class":94},[84,141422,129728],{"class":477},[84,141424,141425],{"class":86,"line":156},[84,141426,132298],{"class":328},[84,141428,141429,141431,141433,141435,141437,141439],{"class":86,"line":164},[84,141430,132303],{"class":90},[84,141432,80133],{"class":477},[84,141434,129158],{"class":94},[84,141436,51764],{"class":477},[84,141438,86559],{"class":94},[84,141440,129728],{"class":477},[84,141442,141443],{"class":86,"line":175},[84,141444,132318],{"class":328},[84,141446,141447,141449,141451,141453,141455,141457],{"class":86,"line":185},[84,141448,132323],{"class":90},[84,141450,80133],{"class":477},[84,141452,129158],{"class":94},[84,141454,51764],{"class":477},[84,141456,132332],{"class":94},[84,141458,129728],{"class":477},[35,141460,140257],{},[75,141462,141463],{"className":126798,"code":132230,"language":126800,"meta":66,"style":66},[81,141464,141465,141469,141483,141487,141501,141505,141519,141523,141537,141541],{"__ignoreMap":66},[84,141466,141467],{"class":86,"line":87},[84,141468,132237],{"class":328},[84,141470,141471,141473,141475,141477,141479,141481],{"class":86,"line":98},[84,141472,132242],{"class":90},[84,141474,80133],{"class":477},[84,141476,129158],{"class":94},[84,141478,51764],{"class":477},[84,141480,132251],{"class":94},[84,141482,129728],{"class":477},[84,141484,141485],{"class":86,"line":70},[84,141486,132258],{"class":328},[84,141488,141489,141491,141493,141495,141497,141499],{"class":86,"line":120},[84,141490,132263],{"class":90},[84,141492,80133],{"class":477},[84,141494,129158],{"class":94},[84,141496,51764],{"class":477},[84,141498,55090],{"class":94},[84,141500,129728],{"class":477},[84,141502,141503],{"class":86,"line":131},[84,141504,132278],{"class":328},[84,141506,141507,141509,141511,141513,141515,141517],{"class":86,"line":145},[84,141508,132283],{"class":90},[84,141510,80133],{"class":477},[84,141512,129158],{"class":94},[84,141514,51764],{"class":477},[84,141516,55157],{"class":94},[84,141518,129728],{"class":477},[84,141520,141521],{"class":86,"line":156},[84,141522,132298],{"class":328},[84,141524,141525,141527,141529,141531,141533,141535],{"class":86,"line":164},[84,141526,132303],{"class":90},[84,141528,80133],{"class":477},[84,141530,129158],{"class":94},[84,141532,51764],{"class":477},[84,141534,86559],{"class":94},[84,141536,129728],{"class":477},[84,141538,141539],{"class":86,"line":175},[84,141540,132318],{"class":328},[84,141542,141543,141545,141547,141549,141551,141553],{"class":86,"line":185},[84,141544,132323],{"class":90},[84,141546,80133],{"class":477},[84,141548,129158],{"class":94},[84,141550,51764],{"class":477},[84,141552,132332],{"class":94},[84,141554,129728],{"class":477},[1480,141556,141557,141568],{},[31,141558,141559,141560,141563,141564,101344,141566],{},"1 号盒子左侧浮动 ",[81,141561,141562],{},"sk_list"," 里面包含 ",[81,141565,1480],{},[81,141567,31],{},[31,141569,141570,141571,141563,141574,101344,141576],{},"2 号盒子左侧浮动 ",[81,141572,141573],{},"sk_con",[81,141575,1480],{},[81,141577,31],{},[35,141579,140168],{},[75,141581,141582],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,141583,141584,141590,141600],{"__ignoreMap":66},[84,141585,141586,141588],{"class":86,"line":87},[84,141587,130646],{"class":90},[84,141589,15901],{"class":477},[84,141591,141592,141594,141596,141598],{"class":86,"line":98},[84,141593,131278],{"class":94},[84,141595,51764],{"class":477},[84,141597,24065],{"class":94},[84,141599,1634],{"class":477},[84,141601,141602],{"class":86,"line":70},[84,141603,1905],{"class":477},[35,141605,140257],{},[75,141607,141608],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,141609,141610,141616,141626],{"__ignoreMap":66},[84,141611,141612,141614],{"class":86,"line":87},[84,141613,130646],{"class":90},[84,141615,15901],{"class":477},[84,141617,141618,141620,141622,141624],{"class":86,"line":98},[84,141619,131278],{"class":94},[84,141621,51764],{"class":477},[84,141623,24065],{"class":94},[84,141625,1634],{"class":477},[84,141627,141628],{"class":86,"line":70},[84,141629,1905],{"class":477},[23,141631,141633,141634],{"id":141632},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[81,141635,141636],{},"sk_container",[64,141638],{"style":126654,"src":141639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1480,141641,141642,141647],{},[31,141643,140822,141644,141646],{},[81,141645,141636],{}," 给宽度 1200，不要给高度",[31,141648,141649],{},"一定不要忘记清除浮动",[35,141651,140168],{},[75,141653,141654],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,141655,141656,141662,141672],{"__ignoreMap":66},[84,141657,141658,141660],{"class":86,"line":87},[84,141659,130646],{"class":90},[84,141661,15901],{"class":477},[84,141663,141664,141666,141668,141670],{"class":86,"line":98},[84,141665,131278],{"class":94},[84,141667,51764],{"class":477},[84,141669,24065],{"class":94},[84,141671,1634],{"class":477},[84,141673,141674],{"class":86,"line":70},[84,141675,1905],{"class":477},[28,141677,141678],{},[31,141679,141680],{},"sk_hd制作",[1480,141682,141683],{},[31,141684,140902,141685,141688],{},[81,141686,141687],{},"sk_hd"," ，插入图片即可",[35,141690,140168],{},[75,141692,141693],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,141694,141695],{"__ignoreMap":66},[84,141696,141697,141699,141701,141703,141705,141707,141709,141711,141713,141715,141717,141719],{"class":86,"line":87},[84,141698,1383],{"class":477},[84,141700,64],{"class":51627},[84,141702,55565],{"class":90},[84,141704,523],{"class":477},[84,141706,134315],{"class":104},[84,141708,55573],{"class":90},[84,141710,523],{"class":477},[84,141712,134322],{"class":104},[84,141714,134325],{"class":90},[84,141716,523],{"class":477},[84,141718,134330],{"class":104},[84,141720,51634],{"class":477},[28,141722,141723],{"start":98},[31,141724,141725],{},"sk_bd制作",[1480,141727,141728],{},[31,141729,141730,141731,141734,141735,101344,141737,141739],{},"3 号盒子 ",[81,141732,141733],{},"sk_bd"," ，里面包含很多的 ",[81,141736,1480],{},[81,141738,31],{},[1480,141740,141741,141750],{},[31,141742,141743,141744,141746,141747,141749],{},"当鼠标移入到 ",[81,141745,31],{}," 上面的时候显示红色的边框，在这里先给 ",[81,141748,31],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[31,141751,141752,141753,141755,141756,141758,141759,141762,141763,141765],{},"由于给每个 ",[81,141754,31],{}," 都设置了外边距，导致一行的最后一个 ",[81,141757,31],{}," 掉了下来，在这里我们利用 ",[81,141760,141761],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[81,141764,31],{},"，去掉外边距就好了",[35,141767,140168],{},[75,141769,141770],{"className":126798,"code":138987,"language":126800,"meta":66,"style":66},[81,141771,141772,141778,141790],{"__ignoreMap":66},[84,141773,141774,141776],{"class":86,"line":87},[84,141775,51938],{"class":51627},[84,141777,15901],{"class":477},[84,141779,141780,141782,141784,141786,141788],{"class":86,"line":98},[84,141781,70796],{"class":94},[84,141783,51764],{"class":477},[84,141785,666],{"class":94},[84,141787,51883],{"class":94},[84,141789,1634],{"class":477},[84,141791,141792],{"class":86,"line":70},[84,141793,1905],{"class":477},[35,141795,140257],{},[75,141797,141798],{"className":126798,"code":138987,"language":126800,"meta":66,"style":66},[81,141799,141800,141806,141818],{"__ignoreMap":66},[84,141801,141802,141804],{"class":86,"line":87},[84,141803,51938],{"class":51627},[84,141805,15901],{"class":477},[84,141807,141808,141810,141812,141814,141816],{"class":86,"line":98},[84,141809,70796],{"class":94},[84,141811,51764],{"class":477},[84,141813,666],{"class":94},[84,141815,51883],{"class":94},[84,141817,1634],{"class":477},[84,141819,141820],{"class":86,"line":70},[84,141821,1905],{"class":477},[14,141823,141825],{"id":141824},"_163-注册页面制作","16.3 注册页面制作",[64,141827],{"style":126654,"src":141828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[35,141830,141831,141833],{},[624,141832,9354],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[64,141835],{"style":126654,"src":141836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[23,141838,141840],{"id":141839},"_1631-准备工作","16.3.1 准备工作",[1480,141842,141843,141846],{},[31,141844,141845],{},"创建register.html，引入 base.css，引入favicon图标",[31,141847,141848],{},"创建register.css ，在html页面进行引入",[23,141850,141852,141853,141855],{"id":141851},"_1632-header-头部实现","16.3.2 ",[81,141854,131803],{}," 头部实现",[1480,141857,141858,141861],{},[31,141859,141860],{},"整个内容用 版心 进行包裹",[31,141862,141863],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[35,141865,140168],{},[75,141867,141868],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,141869,141870],{"__ignoreMap":66},[84,141871,141872,141874,141876,141878,141880,141882,141884,141886,141888,141890,141892,141894],{"class":86,"line":87},[84,141873,1383],{"class":477},[84,141875,64],{"class":51627},[84,141877,55565],{"class":90},[84,141879,523],{"class":477},[84,141881,134315],{"class":104},[84,141883,55573],{"class":90},[84,141885,523],{"class":477},[84,141887,134322],{"class":104},[84,141889,134325],{"class":90},[84,141891,523],{"class":477},[84,141893,134330],{"class":104},[84,141895,51634],{"class":477},[35,141897,140257],{},[75,141899,141900],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,141901,141902],{"__ignoreMap":66},[84,141903,141904,141906,141908,141910,141912,141914,141916,141918,141920,141922,141924,141926],{"class":86,"line":87},[84,141905,1383],{"class":477},[84,141907,64],{"class":51627},[84,141909,55565],{"class":90},[84,141911,523],{"class":477},[84,141913,134315],{"class":104},[84,141915,55573],{"class":90},[84,141917,523],{"class":477},[84,141919,134322],{"class":104},[84,141921,134325],{"class":90},[84,141923,523],{"class":477},[84,141925,134330],{"class":104},[84,141927,51634],{"class":477},[23,141929,141931,141932,141935],{"id":141930},"_1633-registerarea-主体模块实现","16.3.3 ",[81,141933,141934],{},"registerarea"," 主体模块实现",[64,141937],{"style":126654,"src":141938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[35,141940,141941],{},"整个大盒子 高度为 522px，设置4个边框",[35,141943,140168],{},[75,141945,141946],{"className":126798,"code":130955,"language":126800,"meta":66,"style":66},[81,141947,141948,141954,141970],{"__ignoreMap":66},[84,141949,141950,141952],{"class":86,"line":87},[84,141951,51938],{"class":51627},[84,141953,15901],{"class":477},[84,141955,141956,141958,141960,141962,141964,141966,141968],{"class":86,"line":98},[84,141957,71222],{"class":94},[84,141959,51764],{"class":477},[84,141961,692],{"class":94},[84,141963,51819],{"class":473},[84,141965,51848],{"class":94},[84,141967,130190],{"class":94},[84,141969,1634],{"class":477},[84,141971,141972],{"class":86,"line":70},[84,141973,1905],{"class":477},[35,141975,140257],{},[75,141977,141978],{"className":126798,"code":130955,"language":126800,"meta":66,"style":66},[81,141979,141980,141986,142002],{"__ignoreMap":66},[84,141981,141982,141984],{"class":86,"line":87},[84,141983,51938],{"class":51627},[84,141985,15901],{"class":477},[84,141987,141988,141990,141992,141994,141996,141998,142000],{"class":86,"line":98},[84,141989,71222],{"class":94},[84,141991,51764],{"class":477},[84,141993,692],{"class":94},[84,141995,51819],{"class":473},[84,141997,51848],{"class":94},[84,141999,130190],{"class":94},[84,142001,1634],{"class":477},[84,142003,142004],{"class":86,"line":70},[84,142005,1905],{"class":477},[35,142007,142008],{},"1号盒子 是一个 h3 标签，放标题",[1480,142010,142011],{},[31,142012,142013],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[35,142015,140168],{},[75,142017,142018],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,142019,142020,142026,142036],{"__ignoreMap":66},[84,142021,142022,142024],{"class":86,"line":87},[84,142023,130646],{"class":90},[84,142025,15901],{"class":477},[84,142027,142028,142030,142032,142034],{"class":86,"line":98},[84,142029,131278],{"class":94},[84,142031,51764],{"class":477},[84,142033,24065],{"class":94},[84,142035,1634],{"class":477},[84,142037,142038],{"class":86,"line":70},[84,142039,1905],{"class":477},[35,142041,140257],{},[75,142043,142044],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,142045,142046,142052,142062],{"__ignoreMap":66},[84,142047,142048,142050],{"class":86,"line":87},[84,142049,130646],{"class":90},[84,142051,15901],{"class":477},[84,142053,142054,142056,142058,142060],{"class":86,"line":98},[84,142055,131278],{"class":94},[84,142057,51764],{"class":477},[84,142059,24065],{"class":94},[84,142061,1634],{"class":477},[84,142063,142064],{"class":86,"line":70},[84,142065,1905],{"class":477},[35,142067,142068],{},"2号盒子 里面放注册的内容",[1480,142070,142071,142074,142083,142097,142110,142113,142116,142134,142148],{},[31,142072,142073],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[31,142075,142076,142077,142079,142080,142082],{},"里面的内容利用 ",[81,142078,1480],{}," 包含 ",[81,142081,31],{}," 来实现的（不需要用表格）",[31,142084,139312,142085,142087,142088,142090,142091,142093,142094,142096],{},[81,142086,31],{}," 里面，左侧放 ",[81,142089,33935],{}," 标签， 中间放",[81,142092,54147],{}," 标签， 右侧放 ",[81,142095,84],{}," 提示信息",[31,142098,142099,142100,142102,142103,142105,142106,142109],{},"左侧 ",[81,142101,33935],{},"里面的文字都是右对齐，我们可以给",[81,142104,33935],{},"设置一个宽度（88px），然后利用",[81,142107,142108],{},"text-align"," 来设置右对齐",[31,142111,142112],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[31,142114,142115],{},"右侧 span修饰一下文字颜色",[31,142117,142118,142119],{},"提示信息的样式优化",[1480,142120,142121,142124,142127],{},[31,142122,142123],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[31,142125,142126],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[31,142128,142129,142130,142133],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[81,142131,142132],{},"vertical-algin"," 来设置 图片与文字对齐方式",[31,142135,142136,142137],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1480,142138,142139,142145],{},[31,142140,142141,142142,142144],{},"设置 ",[81,142143,23882],{}," 的 左右 12px 的内边距，设置一下文字颜色",[31,142146,142147],{},"分别设置 背景颜色",[31,142149,142150,142151,142153],{},"同意协议 和 完成注册 都是用 ",[81,142152,31],{}," 进行包裹",[35,142155,140168],{},[75,142157,142158],{"className":126798,"code":140741,"language":126800,"meta":66,"style":66},[81,142159,142160,142166,142176],{"__ignoreMap":66},[84,142161,142162,142164],{"class":86,"line":87},[84,142163,51938],{"class":51627},[84,142165,15901],{"class":477},[84,142167,142168,142170,142172,142174],{"class":86,"line":98},[84,142169,71204],{"class":94},[84,142171,51764],{"class":477},[84,142173,140758],{"class":94},[84,142175,1634],{"class":477},[84,142177,142178],{"class":86,"line":70},[84,142179,1905],{"class":477},[35,142181,140257],{},[75,142183,142184],{"className":126798,"code":140741,"language":126800,"meta":66,"style":66},[81,142185,142186,142192,142202],{"__ignoreMap":66},[84,142187,142188,142190],{"class":86,"line":87},[84,142189,51938],{"class":51627},[84,142191,15901],{"class":477},[84,142193,142194,142196,142198,142200],{"class":86,"line":98},[84,142195,71204],{"class":94},[84,142197,51764],{"class":477},[84,142199,140758],{"class":94},[84,142201,1634],{"class":477},[84,142203,142204],{"class":86,"line":70},[84,142205,1905],{"class":477},[23,142207,142209],{"id":142208},"_1634-底部实现","16.3.4 底部实现",[35,142211,140168],{},[75,142213,142214],{"className":126798,"code":140741,"language":126800,"meta":66,"style":66},[81,142215,142216,142222,142232],{"__ignoreMap":66},[84,142217,142218,142220],{"class":86,"line":87},[84,142219,51938],{"class":51627},[84,142221,15901],{"class":477},[84,142223,142224,142226,142228,142230],{"class":86,"line":98},[84,142225,71204],{"class":94},[84,142227,51764],{"class":477},[84,142229,140758],{"class":94},[84,142231,1634],{"class":477},[84,142233,142234],{"class":86,"line":70},[84,142235,1905],{"class":477},[35,142237,140257],{},[75,142239,142240],{"className":127545,"code":130902,"language":127547,"meta":66,"style":66},[81,142241,142242,142246,142260,142264],{"__ignoreMap":66},[84,142243,142244],{"class":86,"line":87},[84,142245,130909],{"class":328},[84,142247,142248,142250,142252,142254,142256,142258],{"class":86,"line":98},[84,142249,1383],{"class":477},[84,142251,51938],{"class":51627},[84,142253,53813],{"class":90},[84,142255,523],{"class":477},[84,142257,130922],{"class":104},[84,142259,51634],{"class":477},[84,142261,142262],{"class":86,"line":70},[84,142263,130929],{"class":477},[84,142265,142266,142268,142270],{"class":86,"line":120},[84,142267,52112],{"class":477},[84,142269,51938],{"class":51627},[84,142271,51634],{"class":477},[14,142273,142275],{"id":142274},"_164-项目总结","16.4 项目总结",[28,142277,142278,142281,142284,142287],{},[31,142279,142280],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[31,142282,142283],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[31,142285,142286],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[31,142288,142289],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[64,142291],{"style":126654,"src":142292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[28,142294,142295],{"start":131},[31,142296,142297],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[64,142299],{"style":126654,"src":142300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[28,142302,142303],{"start":145},[31,142304,142305],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[64,142307],{"style":126654,"src":142308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[75,142310,142311],{"className":127545,"code":136955,"language":127547,"meta":66,"style":66},[81,142312,142313],{"__ignoreMap":66},[84,142314,142315,142317,142319,142321,142323,142325,142327,142329,142331,142333,142335,142337],{"class":86,"line":87},[84,142316,1383],{"class":477},[84,142318,54147],{"class":51627},[84,142320,54150],{"class":90},[84,142322,523],{"class":477},[84,142324,63025],{"class":104},[84,142326,15249],{"class":90},[84,142328,523],{"class":477},[84,142330,136976],{"class":104},[84,142332,61346],{"class":90},[84,142334,523],{"class":477},[84,142336,136983],{"class":104},[84,142338,51634],{"class":477},[28,142340,142341,142344],{"start":156},[31,142342,142343],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[31,142345,142346],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[389,142348,142349],{},"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":66,"searchDepth":98,"depth":98,"links":142351},[142352,142357,142364,142372],{"id":139978,"depth":98,"text":139979,"children":142353},[142354,142355,142356],{"id":139982,"depth":70,"text":139983},{"id":140713,"depth":70,"text":140714},{"id":141026,"depth":70,"text":141027},{"id":141326,"depth":98,"text":141327,"children":142358},[142359,142360,142362],{"id":141330,"depth":70,"text":141331},{"id":141348,"depth":70,"text":142361},"16.2.2 列表页 header 和 nav 修改",{"id":141632,"depth":70,"text":142363},"16.2.3 列表页主体 sk_container",{"id":141824,"depth":98,"text":141825,"children":142365},[142366,142367,142369,142371],{"id":141839,"depth":70,"text":141840},{"id":141851,"depth":70,"text":142368},"16.3.2 header 头部实现",{"id":141930,"depth":70,"text":142370},"16.3.3 registerarea 主体模块实现",{"id":142208,"depth":70,"text":142209},{"id":142274,"depth":98,"text":142275},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139970,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142379,"title":142380,"body":142381,"description":400,"extension":401,"meta":142489,"navigation":403,"path":142490,"seo":142491,"stem":142492,"__hash__":142493},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142382,"toc":142484},[142383,142386,142390,142393,142396,142405,142414,142418,142423,142430,142448,142451,142454,142457,142460,142463,142466,142469,142472,142475,142478,142481],[10,142384,142380],{"id":142385},"_17-web服务器与网站发布",[14,142387,142389],{"id":142388},"_171-web服务器","17.1 Web服务器",[35,142391,142392],{},"把自己网站上传到服务器上，可以让其他人访问",[64,142394],{"style":126654,"src":142395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[35,142397,142398,142401,142402],{},[624,142399,142400],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[624,142403,142404],{},"Web 服务器等",[35,142406,142407,142408,101344,142411,26068],{},"根据服务器在网络中所在的位置不同，又可分为 ",[624,142409,142410],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[624,142412,142413],{},"远程服务器",[23,142415,142417],{"id":142416},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[35,142419,142420],{},[624,142421,142422],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[35,142424,142425,142426],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[39,142427,142428],{"href":142428,"rel":142429},"http:\u002F\u002Ffree.3v.do\u002F",[43],[1480,142431,142432,142435,142438,142445],{},[31,142433,142434],{},"去免费空间网站注册账号。",[31,142436,142437],{},"记录下主机名、用户名、密码、域名。",[31,142439,142440,142441,142444],{},"利用 ",[81,142442,142443],{},"utftp"," 软件 上传网站到远程服务器",[31,142446,142447],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[35,142449,142450],{},"使用软件上传，对上传软件文件进行解压",[64,142452],{"style":126654,"src":142453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[64,142455],{"style":126654,"src":142456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[35,142458,142459],{},"输入刚刚申请的服务器账号信息：",[64,142461],{"style":126654,"src":142462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[64,142464],{"style":126654,"src":142465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[64,142467],{"style":126654,"src":142468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[64,142470],{"style":126654,"src":142471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[35,142473,142474],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[64,142476],{"style":126654,"src":142477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[35,142479,142480],{},"浏览器输入域名即可访问",[35,142482,142483],{},"首页一定必须是index",{"title":66,"searchDepth":98,"depth":98,"links":142485},[142486],{"id":142388,"depth":98,"text":142389,"children":142487},[142488],{"id":142416,"depth":70,"text":142417},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142380,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142495,"title":142496,"body":142497,"description":400,"extension":401,"meta":143424,"navigation":403,"path":143425,"seo":143426,"stem":143427,"__hash__":143428},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142498,"toc":143407},[142499,142502,142506,142509,142512,142523,142526,142530,142534,142539,142542,142545,142548,142551,142555,142581,142585,142589,142592,142595,142599,142632,142636,142639,142642,142706,142710,142714,142717,142720,142723,142727,142772,142776,142779,142809,142813,142817,142820,142823,142827,142830,142899,142902,143010,143012,143018,143022,143025,143028,143124,143127,143131,143155,143159,143162,143166,143169,143173,143176,143179,143182,143185,143189,143192,143195,143199,143203,143206,143209,143212,143215,143219,143222,143226,143229,143232,143277,143281,143285,143288,143291,143294,143326,143330,143333,143367,143371,143374,143404],[10,142500,142496],{"id":142501},"_18-2d动画与3d转换",[14,142503,142505],{"id":142504},"_181-css3-2d转换","18.1 CSS3 2D转换",[35,142507,142508],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[35,142510,142511],{},"转换（transform）你可以简单理解为变形",[1480,142513,142514,142517,142520],{},[31,142515,142516],{},"移动：translate",[31,142518,142519],{},"旋转：rotate",[31,142521,142522],{},"缩放：scale",[64,142524],{"style":126654,"src":142525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[23,142527,142529],{"id":142528},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22327,142531,142533],{"id":142532},"_18111-translate介绍","18.1.1.1 translate介绍",[35,142535,142536,142537],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[624,142538,133457],{},[64,142540],{"style":126654,"src":142541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[35,142543,142544],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[35,142546,142547],{},"对于行内元素无效",[35,142549,142550],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22327,142552,142554],{"id":142553},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[75,142556,142557],{"className":126798,"code":138987,"language":126800,"meta":66,"style":66},[81,142558,142559,142565,142577],{"__ignoreMap":66},[84,142560,142561,142563],{"class":86,"line":87},[84,142562,51938],{"class":51627},[84,142564,15901],{"class":477},[84,142566,142567,142569,142571,142573,142575],{"class":86,"line":98},[84,142568,70796],{"class":94},[84,142570,51764],{"class":477},[84,142572,666],{"class":94},[84,142574,51883],{"class":94},[84,142576,1634],{"class":477},[84,142578,142579],{"class":86,"line":70},[84,142580,1905],{"class":477},[23,142582,142584],{"id":142583},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22327,142586,142588],{"id":142587},"_18121-rotate介绍","18.1.2.1 rotate介绍",[35,142590,142591],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[64,142593],{"style":126654,"src":142594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22327,142596,142598],{"id":142597},"_18122-旋转效果","18.1.2.2 旋转效果",[75,142600,142602],{"className":126798,"code":142601,"language":126800,"meta":66,"style":66},"div {\n  transform: rotate(45deg);\n}\n",[81,142603,142604,142610,142628],{"__ignoreMap":66},[84,142605,142606,142608],{"class":86,"line":87},[84,142607,51938],{"class":51627},[84,142609,15901],{"class":477},[84,142611,142612,142614,142616,142619,142621,142623,142626],{"class":86,"line":98},[84,142613,136782],{"class":94},[84,142615,51764],{"class":477},[84,142617,142618],{"class":94},"rotate",[84,142620,478],{"class":477},[84,142622,1002],{"class":94},[84,142624,142625],{"class":473},"deg",[84,142627,3048],{"class":477},[84,142629,142630],{"class":86,"line":70},[84,142631,1905],{"class":477},[22327,142633,142635],{"id":142634},"_18123-三角做法","18.1.2.3 三角做法",[35,142637,142638],{},"该下标当经过最外层大盒子时会实现向上反转",[64,142640],{"style":126654,"src":142641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[75,142643,142644],{"className":126798,"code":135318,"language":126800,"meta":66,"style":66},[81,142645,142646,142650,142656,142666,142676,142692,142702],{"__ignoreMap":66},[84,142647,142648],{"class":86,"line":87},[84,142649,135325],{"class":328},[84,142651,142652,142654],{"class":86,"line":98},[84,142653,135330],{"class":90},[84,142655,15901],{"class":477},[84,142657,142658,142660,142662,142664],{"class":86,"line":70},[84,142659,70894],{"class":94},[84,142661,51764],{"class":477},[84,142663,666],{"class":94},[84,142665,1634],{"class":477},[84,142667,142668,142670,142672,142674],{"class":86,"line":120},[84,142669,71114],{"class":94},[84,142671,51764],{"class":477},[84,142673,666],{"class":94},[84,142675,1634],{"class":477},[84,142677,142678,142680,142682,142684,142686,142688,142690],{"class":86,"line":131},[84,142679,71222],{"class":94},[84,142681,51764],{"class":477},[84,142683,919],{"class":94},[84,142685,51819],{"class":473},[84,142687,51848],{"class":94},[84,142689,64317],{"class":94},[84,142691,1634],{"class":477},[84,142693,142694,142696,142698,142700],{"class":86,"line":145},[84,142695,135373],{"class":94},[84,142697,51764],{"class":477},[84,142699,62695],{"class":94},[84,142701,1634],{"class":477},[84,142703,142704],{"class":86,"line":156},[84,142705,1905],{"class":477},[23,142707,142709],{"id":142708},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22327,142711,142713],{"id":142712},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[35,142715,142716],{},"设置中心点",[64,142718],{"style":126654,"src":142719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[35,142721,142722],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22327,142724,142726],{"id":142725},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[75,142728,142730],{"className":126798,"code":142729,"language":126800,"meta":66,"style":66},"\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",[81,142731,142732,142737,142743,142758,142763,142768],{"__ignoreMap":66},[84,142733,142734],{"class":86,"line":87},[84,142735,142736],{"class":328},"\u002F* 转换中心点 *\u002F\n",[84,142738,142739,142741],{"class":86,"line":98},[84,142740,51938],{"class":51627},[84,142742,15901],{"class":477},[84,142744,142745,142748,142750,142752,142754,142756],{"class":86,"line":70},[84,142746,142747],{"class":94},"  transform-origin",[84,142749,51764],{"class":477},[84,142751,51919],{"class":94},[84,142753,17473],{"class":94},[84,142755,130661],{"class":477},[84,142757,135471],{"class":328},[84,142759,142760],{"class":86,"line":120},[84,142761,142762],{"class":328},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[84,142764,142765],{"class":86,"line":131},[84,142766,142767],{"class":328},"  \u002F* transform-origin: left top; *\u002F\n",[84,142769,142770],{"class":86,"line":145},[84,142771,1905],{"class":477},[22327,142773,142775],{"id":142774},"_18133-旋转案例","18.1.3.3 旋转案例",[64,142777],{"style":126654,"src":142778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[75,142780,142781],{"className":126798,"code":142601,"language":126800,"meta":66,"style":66},[81,142782,142783,142789,142805],{"__ignoreMap":66},[84,142784,142785,142787],{"class":86,"line":87},[84,142786,51938],{"class":51627},[84,142788,15901],{"class":477},[84,142790,142791,142793,142795,142797,142799,142801,142803],{"class":86,"line":98},[84,142792,136782],{"class":94},[84,142794,51764],{"class":477},[84,142796,142618],{"class":94},[84,142798,478],{"class":477},[84,142800,1002],{"class":94},[84,142802,142625],{"class":473},[84,142804,3048],{"class":477},[84,142806,142807],{"class":86,"line":70},[84,142808,1905],{"class":477},[23,142810,142812],{"id":142811},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22327,142814,142816],{"id":142815},"_18141-scale介绍","18.1.4.1 scale介绍",[35,142818,142819],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[64,142821],{"style":126654,"src":142822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22327,142824,142826],{"id":142825},"_18142-分页按钮","18.1.4.2 分页按钮",[64,142828],{"style":126654,"src":142829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[75,142831,142833],{"className":126798,"code":142832,"language":126800,"meta":66,"style":66},"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",[81,142834,142835,142841,142857,142861,142865,142870,142876,142890,142895],{"__ignoreMap":66},[84,142836,142837,142839],{"class":86,"line":87},[84,142838,51938],{"class":51627},[84,142840,15901],{"class":477},[84,142842,142843,142845,142847,142850,142852,142855],{"class":86,"line":98},[84,142844,136782],{"class":94},[84,142846,51764],{"class":477},[84,142848,142849],{"class":94},"scale",[84,142851,478],{"class":477},[84,142853,142854],{"class":94},"1.2",[84,142856,3048],{"class":477},[84,142858,142859],{"class":86,"line":70},[84,142860,1905],{"class":477},[84,142862,142863],{"class":86,"line":120},[84,142864,136259],{"class":477},[84,142866,142867],{"class":86,"line":131},[84,142868,142869],{"class":328},"\u002F* 2D 缩放 *\u002F\n",[84,142871,142872,142874],{"class":86,"line":145},[84,142873,51938],{"class":51627},[84,142875,15901],{"class":477},[84,142877,142878,142880,142882,142884,142886,142888],{"class":86,"line":156},[84,142879,136782],{"class":94},[84,142881,51764],{"class":477},[84,142883,142849],{"class":94},[84,142885,478],{"class":477},[84,142887,142854],{"class":94},[84,142889,3048],{"class":477},[84,142891,142892],{"class":86,"line":164},[84,142893,142894],{"class":328},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[84,142896,142897],{"class":86,"line":175},[84,142898,1905],{"class":477},[35,142900,142901],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[75,142903,142905],{"className":126798,"code":142904,"language":126800,"meta":66,"style":66},"\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",[81,142906,142907,142912,142922,142943,142964,142968,142973,142979,143006],{"__ignoreMap":66},[84,142908,142909],{"class":86,"line":87},[84,142910,142911],{"class":328},"\u002F* 定义动画 *\u002F\n",[84,142913,142914,142917,142920],{"class":86,"line":98},[84,142915,142916],{"class":473},"@keyframes",[84,142918,142919],{"class":5545}," move",[84,142921,15901],{"class":477},[84,142923,142924,142927,142929,142931,142933,142936,142938,142940],{"class":86,"line":70},[84,142925,142926],{"class":90},"  0%",[84,142928,80133],{"class":477},[84,142930,48461],{"class":94},[84,142932,51764],{"class":477},[84,142934,142935],{"class":94},"translateX",[84,142937,478],{"class":477},[84,142939,666],{"class":94},[84,142941,142942],{"class":477},"); }\n",[84,142944,142945,142948,142950,142952,142954,142956,142958,142960,142962],{"class":86,"line":120},[84,142946,142947],{"class":90},"  100%",[84,142949,80133],{"class":477},[84,142951,48461],{"class":94},[84,142953,51764],{"class":477},[84,142955,142935],{"class":94},[84,142957,478],{"class":477},[84,142959,784],{"class":94},[84,142961,51819],{"class":473},[84,142963,142942],{"class":477},[84,142965,142966],{"class":86,"line":131},[84,142967,1905],{"class":477},[84,142969,142970],{"class":86,"line":145},[84,142971,142972],{"class":328},"\u002F* 调用动画 *\u002F\n",[84,142974,142975,142977],{"class":86,"line":156},[84,142976,51938],{"class":51627},[84,142978,15901],{"class":477},[84,142980,142981,142984,142986,142988,142990,142992,142994,142996,142998,143001,143004],{"class":86,"line":164},[84,142982,142983],{"class":94},"  animation",[84,142985,51764],{"class":477},[84,142987,135484],{"class":94},[84,142989,25446],{"class":94},[84,142991,1168],{"class":473},[84,142993,79006],{"class":94},[84,142995,4422],{"class":94},[84,142997,1168],{"class":473},[84,142999,143000],{"class":94}," infinite",[84,143002,143003],{"class":94}," alternate",[84,143005,1634],{"class":477},[84,143007,143008],{"class":86,"line":175},[84,143009,1905],{"class":477},[35,143011,142901],{},[75,143013,143016],{"className":143014,"code":143015,"language":5516},[5514],"\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",[81,143017,143015],{"__ignoreMap":66},[22327,143019,143021],{"id":143020},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[35,143023,143024],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[64,143026],{"style":126654,"src":143027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[75,143029,143030],{"className":126798,"code":142904,"language":126800,"meta":66,"style":66},[81,143031,143032,143036,143044,143062,143082,143086,143090,143096,143120],{"__ignoreMap":66},[84,143033,143034],{"class":86,"line":87},[84,143035,142911],{"class":328},[84,143037,143038,143040,143042],{"class":86,"line":98},[84,143039,142916],{"class":473},[84,143041,142919],{"class":5545},[84,143043,15901],{"class":477},[84,143045,143046,143048,143050,143052,143054,143056,143058,143060],{"class":86,"line":70},[84,143047,142926],{"class":90},[84,143049,80133],{"class":477},[84,143051,48461],{"class":94},[84,143053,51764],{"class":477},[84,143055,142935],{"class":94},[84,143057,478],{"class":477},[84,143059,666],{"class":94},[84,143061,142942],{"class":477},[84,143063,143064,143066,143068,143070,143072,143074,143076,143078,143080],{"class":86,"line":120},[84,143065,142947],{"class":90},[84,143067,80133],{"class":477},[84,143069,48461],{"class":94},[84,143071,51764],{"class":477},[84,143073,142935],{"class":94},[84,143075,478],{"class":477},[84,143077,784],{"class":94},[84,143079,51819],{"class":473},[84,143081,142942],{"class":477},[84,143083,143084],{"class":86,"line":131},[84,143085,1905],{"class":477},[84,143087,143088],{"class":86,"line":145},[84,143089,142972],{"class":328},[84,143091,143092,143094],{"class":86,"line":156},[84,143093,51938],{"class":51627},[84,143095,15901],{"class":477},[84,143097,143098,143100,143102,143104,143106,143108,143110,143112,143114,143116,143118],{"class":86,"line":164},[84,143099,142983],{"class":94},[84,143101,51764],{"class":477},[84,143103,135484],{"class":94},[84,143105,25446],{"class":94},[84,143107,1168],{"class":473},[84,143109,79006],{"class":94},[84,143111,4422],{"class":94},[84,143113,1168],{"class":473},[84,143115,143000],{"class":94},[84,143117,143003],{"class":94},[84,143119,1634],{"class":477},[84,143121,143122],{"class":86,"line":175},[84,143123,1905],{"class":477},[35,143125,143126],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[23,143128,143130],{"id":143129},"_1823-知识点回顾","18.2.3 知识点回顾",[75,143132,143133],{"className":126798,"code":128967,"language":126800,"meta":66,"style":66},[81,143134,143135,143141,143151],{"__ignoreMap":66},[84,143136,143137,143139],{"class":86,"line":87},[84,143138,51938],{"class":51627},[84,143140,15901],{"class":477},[84,143142,143143,143145,143147,143149],{"class":86,"line":98},[84,143144,128980],{"class":94},[84,143146,51764],{"class":477},[84,143148,62062],{"class":94},[84,143150,1634],{"class":477},[84,143152,143153],{"class":86,"line":70},[84,143154,1905],{"class":477},[14,143156,143158],{"id":143157},"_183-3d-转换","18.3 3D 转换",[35,143160,143161],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[23,143163,143165],{"id":143164},"_1831-坐标轴认识","18.3.1 坐标轴认识",[64,143167],{"style":126654,"src":143168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[23,143170,143172],{"id":143171},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[64,143174],{"style":126654,"src":143175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[35,143177,143178],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[35,143180,143181],{},"translate3d的效果需要搭配透视perspective来使用",[64,143183],{"style":126654,"src":143184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[23,143186,143188],{"id":143187},"_1833-透视-perspective","18.3.3 透视 perspective",[64,143190],{"style":126654,"src":143191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[35,143193,143194],{},"透视写在父盒子上，单位为像素",[23,143196,143198],{"id":143197},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22327,143200,143202],{"id":143201},"_18341-分开解释","18.3.4.1 分开解释",[64,143204],{"style":126654,"src":143205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[64,143207],{"style":126654,"src":143208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[64,143210],{"style":126654,"src":143211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[35,143213,143214],{},"总结来说就是左手原则",[22327,143216,143218],{"id":143217},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[64,143220],{"style":126654,"src":143221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[23,143223,143225],{"id":143224},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[64,143227],{"style":126654,"src":143228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[64,143230],{"style":126654,"src":143231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[75,143233,143235],{"className":126798,"code":143234,"language":126800,"meta":66,"style":66},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[81,143236,143237,143243,143256,143273],{"__ignoreMap":66},[84,143238,143239,143241],{"class":86,"line":87},[84,143240,51938],{"class":51627},[84,143242,15901],{"class":477},[84,143244,143245,143248,143250,143252,143254],{"class":86,"line":98},[84,143246,143247],{"class":94},"  perspective",[84,143249,51764],{"class":477},[84,143251,65400],{"class":94},[84,143253,51819],{"class":473},[84,143255,1634],{"class":477},[84,143257,143258,143260,143262,143265,143267,143269,143271],{"class":86,"line":70},[84,143259,136782],{"class":94},[84,143261,51764],{"class":477},[84,143263,143264],{"class":94},"rotateX",[84,143266,478],{"class":477},[84,143268,1002],{"class":94},[84,143270,142625],{"class":473},[84,143272,3048],{"class":477},[84,143274,143275],{"class":86,"line":120},[84,143276,1905],{"class":477},[23,143278,143280],{"id":143279},"_1836-案例","18.3.6 案例",[22327,143282,143284],{"id":143283},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[64,143286],{"style":126654,"src":143287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[64,143289],{"style":126654,"src":143290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[64,143292],{"style":126654,"src":143293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[75,143295,143297],{"className":126798,"code":143296,"language":126800,"meta":66,"style":66},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[81,143298,143299,143304,143310,143322],{"__ignoreMap":66},[84,143300,143301],{"class":86,"line":87},[84,143302,143303],{"class":328},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[84,143305,143306,143308],{"class":86,"line":98},[84,143307,133795],{"class":90},[84,143309,15901],{"class":477},[84,143311,143312,143314,143316,143318,143320],{"class":86,"line":70},[84,143313,143247],{"class":94},[84,143315,51764],{"class":477},[84,143317,65400],{"class":94},[84,143319,51819],{"class":473},[84,143321,1634],{"class":477},[84,143323,143324],{"class":86,"line":120},[84,143325,1905],{"class":477},[22327,143327,143329],{"id":143328},"_18362-3d导航栏","18.3.6.2 3D导航栏",[64,143331],{"style":126654,"src":143332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[75,143334,143335],{"className":127545,"code":130902,"language":127547,"meta":66,"style":66},[81,143336,143337,143341,143355,143359],{"__ignoreMap":66},[84,143338,143339],{"class":86,"line":87},[84,143340,130909],{"class":328},[84,143342,143343,143345,143347,143349,143351,143353],{"class":86,"line":98},[84,143344,1383],{"class":477},[84,143346,51938],{"class":51627},[84,143348,53813],{"class":90},[84,143350,523],{"class":477},[84,143352,130922],{"class":104},[84,143354,51634],{"class":477},[84,143356,143357],{"class":86,"line":70},[84,143358,130929],{"class":477},[84,143360,143361,143363,143365],{"class":86,"line":120},[84,143362,52112],{"class":477},[84,143364,51938],{"class":51627},[84,143366,51634],{"class":477},[22327,143368,143370],{"id":143369},"_18363-旋转木马","18.3.6.3 旋转木马",[64,143372],{"style":126654,"src":143373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[75,143375,143376],{"className":126798,"code":142601,"language":126800,"meta":66,"style":66},[81,143377,143378,143384,143400],{"__ignoreMap":66},[84,143379,143380,143382],{"class":86,"line":87},[84,143381,51938],{"class":51627},[84,143383,15901],{"class":477},[84,143385,143386,143388,143390,143392,143394,143396,143398],{"class":86,"line":98},[84,143387,136782],{"class":94},[84,143389,51764],{"class":477},[84,143391,142618],{"class":94},[84,143393,478],{"class":477},[84,143395,1002],{"class":94},[84,143397,142625],{"class":473},[84,143399,3048],{"class":477},[84,143401,143402],{"class":86,"line":70},[84,143403,1905],{"class":477},[389,143405,143406],{},"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":66,"searchDepth":98,"depth":98,"links":143408},[143409,143416],{"id":142504,"depth":98,"text":142505,"children":143410},[143411,143412,143413,143414,143415],{"id":142528,"depth":70,"text":142529},{"id":142583,"depth":70,"text":142584},{"id":142708,"depth":70,"text":142709},{"id":142811,"depth":70,"text":142812},{"id":143129,"depth":70,"text":143130},{"id":143157,"depth":98,"text":143158,"children":143417},[143418,143419,143420,143421,143422,143423],{"id":143164,"depth":70,"text":143165},{"id":143171,"depth":70,"text":143172},{"id":143187,"depth":70,"text":143188},{"id":143197,"depth":70,"text":143198},{"id":143224,"depth":70,"text":143225},{"id":143279,"depth":70,"text":143280},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142496,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143430,"title":143431,"body":143432,"description":400,"extension":401,"meta":143635,"navigation":403,"path":143636,"seo":143637,"stem":143638,"__hash__":143639},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143433,"toc":143624},[143434,143437,143441,143444,143447,143451,143454,143457,143460,143464,143467,143471,143474,143478,143481,143485,143499,143503,143528,143531,143534,143551,143555,143559,143562,143565,143569,143572,143575,143593,143597,143600,143614,143618,143621],[10,143435,143431],{"id":143436},"_19-移动端基础-前缀现状与视口",[14,143438,143440],{"id":143439},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[64,143442],{"style":126654,"src":143443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[35,143445,143446],{},"意思就是加个前缀，增加兼容性",[14,143448,143450],{"id":143449},"_192-移动端现状认识","19.2 移动端现状认识",[64,143452],{"style":126654,"src":143453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[35,143455,143456],{},"调试方法：",[64,143458],{"style":126654,"src":143459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143461,143463],{"id":143462},"_193-视口","19.3 视口",[35,143465,143466],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[23,143468,143470],{"id":143469},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[64,143472],{"style":126654,"src":143473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[23,143475,143477],{"id":143476},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[64,143479],{"style":126654,"src":143480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[23,143482,143484],{"id":143483},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1480,143486,143487,143490,143493,143496],{},[31,143488,143489],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[31,143491,143492],{},"理想视口，对设备来讲，是最理想的视口尺寸",[31,143494,143495],{},"需要手动添写meta视口标签通知浏览器操作",[31,143497,143498],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[23,143500,143502],{"id":143501},"_1934-meta视口标签","19.3.4 meta视口标签",[75,143504,143506],{"className":127545,"code":143505,"language":127547,"meta":66,"style":66},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[81,143507,143508],{"__ignoreMap":66},[84,143509,143510,143512,143514,143516,143518,143520,143522,143524,143526],{"class":86,"line":87},[84,143511,1383],{"class":477},[84,143513,51671],{"class":51627},[84,143515,15249],{"class":90},[84,143517,523],{"class":477},[84,143519,51718],{"class":104},[84,143521,51698],{"class":90},[84,143523,523],{"class":477},[84,143525,51725],{"class":104},[84,143527,51634],{"class":477},[64,143529],{"style":126654,"src":143530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[35,143532,143533],{},"标准视口设置：",[28,143535,143536,143539,143542,143545,143548],{},[31,143537,143538],{},"视口宽度和设备保持一致",[31,143540,143541],{},"视口的默认缩放比例1.0",[31,143543,143544],{},"不允许用户自行缩放",[31,143546,143547],{},"最大允许的缩放比例1.0",[31,143549,143550],{},"最小允许的缩放比例1.0",[23,143552,143554],{"id":143553},"_1935-二倍图","19.3.5 二倍图",[22327,143556,143558],{"id":143557},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[64,143560],{"style":126654,"src":143561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[64,143563],{"style":126654,"src":143564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22327,143566,143568],{"id":143567},"_19352-多倍图","19.3.5.2 多倍图",[64,143570],{"style":126654,"src":143571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[35,143573,143574],{},"二倍图法，代码如下：",[75,143576,143578],{"className":126798,"code":143577,"language":126800,"meta":66,"style":66},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[81,143579,143580,143585],{"__ignoreMap":66},[84,143581,143582],{"class":86,"line":87},[84,143583,143584],{"class":328},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[84,143586,143587,143590],{"class":86,"line":98},[84,143588,143589],{"class":51627},"background-size",[84,143591,143592],{"class":477},": 50% 50%;\n",[22327,143594,143596],{"id":143595},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[64,143598],{"style":126654,"src":143599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[28,143601,143602,143605,143608,143611],{},[31,143603,143604],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[31,143606,143607],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[31,143609,143610],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[31,143612,143613],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22327,143615,143617],{"id":143616},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[64,143619],{"style":126654,"src":143620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[389,143622,143623],{},"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":66,"searchDepth":98,"depth":98,"links":143625},[143626,143627,143628],{"id":143439,"depth":98,"text":143440},{"id":143449,"depth":98,"text":143450},{"id":143462,"depth":98,"text":143463,"children":143629},[143630,143631,143632,143633,143634],{"id":143469,"depth":70,"text":143470},{"id":143476,"depth":70,"text":143477},{"id":143483,"depth":70,"text":143484},{"id":143501,"depth":70,"text":143502},{"id":143553,"depth":70,"text":143554},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143431,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143641,"title":143642,"body":143643,"description":400,"extension":401,"meta":144520,"navigation":403,"path":144521,"seo":144522,"stem":144523,"__hash__":144524},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143644,"toc":144504},[143645,143648,143652,143659,143662,143669,143672,143677,143680,143684,143688,143695,143698,143701,143705,143708,143711,143714,143717,143720,143724,143727,143731,143733,143736,143739,143742,143745,143747,143750,143752,143782,143784,143814,143818,143821,143825,143828,143845,143848,143851,143927,143929,143932,143935,143938,143941,143943,143946,143949,143953,143975,143978,143981,143985,143988,143994,143997,144001,144004,144007,144011,144014,144017,144020,144024,144027,144030,144033,144036,144040,144043,144047,144054,144057,144060,144063,144066,144076,144079,144082,144089,144092,144096,144099,144102,144106,144109,144112,144115,144160,144163,144166,144169,144171,144300,144302,144340,144343,144346,144348,144466,144468,144502],[10,143646,143642],{"id":143647},"_20-移动端布局实战上篇",[14,143649,143651],{"id":143650},"_201-移动端主流方案","20.1 移动端主流方案",[28,143653,143654],{},[31,143655,143656],{},[624,143657,143658],{},"单独移动端页面（主流）",[64,143660],{"style":126654,"src":143661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[28,143663,143664],{"start":98},[31,143665,143666],{},[624,143667,143668],{},"响应式兼容PC移动端",[64,143670],{"style":126654,"src":143671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[28,143673,143674],{"start":70},[31,143675,143676],{},"两种页面选型布局方式",[64,143678],{"style":126654,"src":143679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143681,143683],{"id":143682},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[23,143685,143687],{"id":143686},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[35,143689,143690,143691],{},"官网地址： ",[39,143692,143693],{"href":143693,"rel":143694},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[43],[64,143696],{"style":126654,"src":143697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[64,143699],{"style":126654,"src":143700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[23,143702,143704],{"id":143703},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[64,143706],{"style":126654,"src":143707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[64,143709],{"style":126654,"src":143710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[35,143712,143713],{},"去除高亮：",[35,143715,143716],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[35,143718,143719],{},"-webkit- tap-highlight-color: transparent;",[14,143721,143723],{"id":143722},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[64,143725],{"style":126654,"src":143726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143728,143730],{"id":143729},"_204-流式布局案例","20.4 流式布局案例",[35,143732,507],{},[35,143734,143735],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[35,143737,143738],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[35,143740,143741],{},"图片格式：",[64,143743],{"style":126654,"src":143744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[35,143746,135841],{},[64,143748],{"style":126654,"src":143749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[35,143751,140168],{},[75,143753,143754],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,143755,143756],{"__ignoreMap":66},[84,143757,143758,143760,143762,143764,143766,143768,143770,143772,143774,143776,143778,143780],{"class":86,"line":87},[84,143759,1383],{"class":477},[84,143761,64],{"class":51627},[84,143763,55565],{"class":90},[84,143765,523],{"class":477},[84,143767,134315],{"class":104},[84,143769,55573],{"class":90},[84,143771,523],{"class":477},[84,143773,134322],{"class":104},[84,143775,134325],{"class":90},[84,143777,523],{"class":477},[84,143779,134330],{"class":104},[84,143781,51634],{"class":477},[35,143783,140257],{},[75,143785,143786],{"className":127545,"code":134300,"language":127547,"meta":66,"style":66},[81,143787,143788],{"__ignoreMap":66},[84,143789,143790,143792,143794,143796,143798,143800,143802,143804,143806,143808,143810,143812],{"class":86,"line":87},[84,143791,1383],{"class":477},[84,143793,64],{"class":51627},[84,143795,55565],{"class":90},[84,143797,523],{"class":477},[84,143799,134315],{"class":104},[84,143801,55573],{"class":90},[84,143803,523],{"class":477},[84,143805,134322],{"class":104},[84,143807,134325],{"class":90},[84,143809,523],{"class":477},[84,143811,134330],{"class":104},[84,143813,51634],{"class":477},[14,143815,143817],{"id":143816},"_205-flex布局","20.5 flex布局",[64,143819],{"style":126654,"src":143820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[23,143822,143824],{"id":143823},"_2051-布局原理","20.5.1 布局原理",[35,143826,143827],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1480,143829,143830,143833,143836,143839,143842],{},[31,143831,143832],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[31,143834,143835],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[31,143837,143838],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[31,143840,143841],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[31,143843,143844],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[35,143846,143847],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[35,143849,143850],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[75,143852,143854],{"className":126798,"code":143853,"language":126800,"meta":66,"style":66},"\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",[81,143855,143856,143861,143868,143878,143890,143901,143912,143923],{"__ignoreMap":66},[84,143857,143858],{"class":86,"line":87},[84,143859,143860],{"class":328},"\u002F* Flex 弹性布局 *\u002F\n",[84,143862,143863,143866],{"class":86,"line":98},[84,143864,143865],{"class":90},".container",[84,143867,15901],{"class":477},[84,143869,143870,143872,143874,143876],{"class":86,"line":70},[84,143871,128414],{"class":94},[84,143873,51764],{"class":477},[84,143875,51804],{"class":94},[84,143877,1634],{"class":477},[84,143879,143880,143883,143885,143888],{"class":86,"line":120},[84,143881,143882],{"class":94},"  flex-direction",[84,143884,51764],{"class":477},[84,143886,143887],{"class":94},"row",[84,143889,1634],{"class":477},[84,143891,143892,143895,143897,143899],{"class":86,"line":131},[84,143893,143894],{"class":94},"  justify-content",[84,143896,51764],{"class":477},[84,143898,51995],{"class":94},[84,143900,1634],{"class":477},[84,143902,143903,143906,143908,143910],{"class":86,"line":145},[84,143904,143905],{"class":94},"  align-items",[84,143907,51764],{"class":477},[84,143909,51919],{"class":94},[84,143911,1634],{"class":477},[84,143913,143914,143917,143919,143921],{"class":86,"line":156},[84,143915,143916],{"class":94},"  flex-wrap",[84,143918,51764],{"class":477},[84,143920,78936],{"class":94},[84,143922,1634],{"class":477},[84,143924,143925],{"class":86,"line":164},[84,143926,1905],{"class":477},[35,143928,70779],{},[35,143930,143931],{},".form-item .male-label {",[35,143933,143934],{},"   margin-right: 20px;",[35,143936,143937],{},"   display: inline-flex;",[35,143939,143940],{},"   align-items: center;",[35,143942,1419],{},[64,143944],{"style":126654,"src":143945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[64,143947],{"style":126654,"src":143948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[23,143950,143952],{"id":143951},"_2052-常见父项属性","20.5.2 常见父项属性",[28,143954,143955,143958,143961,143964,143967,143970,143973],{},[31,143956,143957],{},"flex-direction：设置主轴的方向",[31,143959,143960],{},"justify-content：设置主轴上的子元素排列方式",[31,143962,143963],{},"flex-wrap：设置子元素是否换行",[31,143965,143966],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[31,143968,143969],{},"align-items：设置侧轴上的子元素排列方式（单行）",[31,143971,143972],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[31,143974,143957],{},[64,143976],{"style":126654,"src":143977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[64,143979],{"style":126654,"src":143980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[28,143982,143983],{"start":98},[31,143984,143960],{},[64,143986],{"style":126654,"src":143987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[35,143989,143990,143993],{},[81,143991,143992],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[35,143995,143996],{},"跟着主轴走",[28,143998,143999],{"start":70},[31,144000,143963],{},[64,144002],{"style":126654,"src":144003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[35,144005,144006],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[28,144008,144009],{"start":120},[31,144010,143966],{},[64,144012],{"style":126654,"src":144013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[35,144015,144016],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[35,144018,144019],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[28,144021,144022],{"start":131},[31,144023,143969],{},[64,144025],{"style":126654,"src":144026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[35,144028,144029],{},"align-items与align-content之间的区别：",[35,144031,144032],{},"单找items，多找content",[64,144034],{"style":126654,"src":144035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[28,144037,144038],{"start":145},[31,144039,143972],{},[64,144041],{"style":126654,"src":144042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[23,144044,144046],{"id":144045},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[28,144048,144049],{},[31,144050,144051],{},[624,144052,144053],{},"flex 属性",[35,144055,144056],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[64,144058],{"style":126654,"src":144059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[35,144061,144062],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[35,144064,144065],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[28,144067,144068],{"start":98},[31,144069,144070,14124,144073],{},[624,144071,144072],{},"align-self",[624,144074,144075],{},"控制子项自己在侧轴上的排列方式",[64,144077],{"style":126654,"src":144078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[35,144080,144081],{},"单个子盒子在父盒子侧轴上的排列方式",[28,144083,144084],{"start":70},[31,144085,144086,144088],{},[624,144087,95623],{}," 属性定义项目的排列顺序",[64,144090],{"style":126654,"src":144091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[23,144093,144095],{"id":144094},"_2054-背景线性渐变","20.5.4 背景线性渐变",[64,144097],{"style":126654,"src":144098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[35,144100,144101],{},"必须要添加浏览器的私有前缀",[23,144103,144105],{"id":144104},"_2055-携程网首页案例","20.5.5 携程网首页案例",[35,144107,144108],{},"学到最重要的知识：",[35,144110,144111],{},"flex处理这样的布局思路",[64,144113],{"style":126654,"src":144114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[75,144116,144118],{"className":126798,"code":144117,"language":126800,"meta":66,"style":66},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[81,144119,144120,144126,144136,144146,144156],{"__ignoreMap":66},[84,144121,144122,144124],{"class":86,"line":87},[84,144123,143865],{"class":90},[84,144125,15901],{"class":477},[84,144127,144128,144130,144132,144134],{"class":86,"line":98},[84,144129,128414],{"class":94},[84,144131,51764],{"class":477},[84,144133,51804],{"class":94},[84,144135,1634],{"class":477},[84,144137,144138,144140,144142,144144],{"class":86,"line":70},[84,144139,143894],{"class":94},[84,144141,51764],{"class":477},[84,144143,51919],{"class":94},[84,144145,1634],{"class":477},[84,144147,144148,144150,144152,144154],{"class":86,"line":120},[84,144149,143905],{"class":94},[84,144151,51764],{"class":477},[84,144153,51919],{"class":94},[84,144155,1634],{"class":477},[84,144157,144158],{"class":86,"line":131},[84,144159,1905],{"class":477},[35,144161,144162],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[35,144164,144165],{},"使用属性选择器",[64,144167],{"style":126654,"src":144168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[35,144170,69215],{},[75,144172,144174],{"className":127545,"code":144173,"language":127547,"meta":66,"style":66},"\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",[81,144175,144176,144181,144195,144200,144220,144225,144244,144249,144268,144273,144292],{"__ignoreMap":66},[84,144177,144178],{"class":86,"line":87},[84,144179,144180],{"class":328},"\u003C!-- 携程网移动端案例结构 -->\n",[84,144182,144183,144185,144187,144189,144191,144193],{"class":86,"line":98},[84,144184,1383],{"class":477},[84,144186,51938],{"class":51627},[84,144188,53813],{"class":90},[84,144190,523],{"class":477},[84,144192,92649],{"class":104},[84,144194,51634],{"class":477},[84,144196,144197],{"class":86,"line":70},[84,144198,144199],{"class":328},"  \u003C!-- 搜索栏 -->\n",[84,144201,144202,144204,144206,144208,144210,144213,144216,144218],{"class":86,"line":120},[84,144203,52471],{"class":477},[84,144205,51938],{"class":51627},[84,144207,53813],{"class":90},[84,144209,523],{"class":477},[84,144211,144212],{"class":104},"\"search-index\"",[84,144214,144215],{"class":477},">...\u003C\u002F",[84,144217,51938],{"class":51627},[84,144219,51634],{"class":477},[84,144221,144222],{"class":86,"line":131},[84,144223,144224],{"class":328},"  \u003C!-- 焦点图 -->\n",[84,144226,144227,144229,144231,144233,144235,144238,144240,144242],{"class":86,"line":145},[84,144228,52471],{"class":477},[84,144230,51938],{"class":51627},[84,144232,53813],{"class":90},[84,144234,523],{"class":477},[84,144236,144237],{"class":104},"\"focus\"",[84,144239,144215],{"class":477},[84,144241,51938],{"class":51627},[84,144243,51634],{"class":477},[84,144245,144246],{"class":86,"line":156},[84,144247,144248],{"class":328},"  \u003C!-- 主导航 -->\n",[84,144250,144251,144253,144255,144257,144259,144262,144264,144266],{"class":86,"line":164},[84,144252,52471],{"class":477},[84,144254,51938],{"class":51627},[84,144256,53813],{"class":90},[84,144258,523],{"class":477},[84,144260,144261],{"class":104},"\"local-nav\"",[84,144263,144215],{"class":477},[84,144265,51938],{"class":51627},[84,144267,51634],{"class":477},[84,144269,144270],{"class":86,"line":175},[84,144271,144272],{"class":328},"  \u003C!-- 子导航 -->\n",[84,144274,144275,144277,144279,144281,144283,144286,144288,144290],{"class":86,"line":185},[84,144276,52471],{"class":477},[84,144278,51938],{"class":51627},[84,144280,53813],{"class":90},[84,144282,523],{"class":477},[84,144284,144285],{"class":104},"\"nav-common\"",[84,144287,144215],{"class":477},[84,144289,51938],{"class":51627},[84,144291,51634],{"class":477},[84,144293,144294,144296,144298],{"class":86,"line":195},[84,144295,52112],{"class":477},[84,144297,51938],{"class":51627},[84,144299,51634],{"class":477},[35,144301,70779],{},[75,144303,144304],{"className":126798,"code":137250,"language":126800,"meta":66,"style":66},[81,144305,144306,144320,144336],{"__ignoreMap":66},[84,144307,144308,144310,144312,144314,144316,144318],{"class":86,"line":87},[84,144309,54147],{"class":51627},[84,144311,1363],{"class":477},[84,144313,103433],{"class":90},[84,144315,523],{"class":473},[84,144317,63025],{"class":104},[84,144319,137267],{"class":477},[84,144321,144322,144324,144326,144328,144330,144332,144334],{"class":86,"line":98},[84,144323,71222],{"class":94},[84,144325,51764],{"class":477},[84,144327,692],{"class":94},[84,144329,51819],{"class":473},[84,144331,51848],{"class":94},[84,144333,130378],{"class":94},[84,144335,1634],{"class":477},[84,144337,144338],{"class":86,"line":70},[84,144339,1905],{"class":477},[35,144341,144342],{},"总代码和效果展示：",[64,144344],{"style":126654,"src":144345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[35,144347,69215],{},[75,144349,144350],{"className":127545,"code":144173,"language":127547,"meta":66,"style":66},[81,144351,144352,144356,144370,144374,144392,144396,144414,144418,144436,144440,144458],{"__ignoreMap":66},[84,144353,144354],{"class":86,"line":87},[84,144355,144180],{"class":328},[84,144357,144358,144360,144362,144364,144366,144368],{"class":86,"line":98},[84,144359,1383],{"class":477},[84,144361,51938],{"class":51627},[84,144363,53813],{"class":90},[84,144365,523],{"class":477},[84,144367,92649],{"class":104},[84,144369,51634],{"class":477},[84,144371,144372],{"class":86,"line":70},[84,144373,144199],{"class":328},[84,144375,144376,144378,144380,144382,144384,144386,144388,144390],{"class":86,"line":120},[84,144377,52471],{"class":477},[84,144379,51938],{"class":51627},[84,144381,53813],{"class":90},[84,144383,523],{"class":477},[84,144385,144212],{"class":104},[84,144387,144215],{"class":477},[84,144389,51938],{"class":51627},[84,144391,51634],{"class":477},[84,144393,144394],{"class":86,"line":131},[84,144395,144224],{"class":328},[84,144397,144398,144400,144402,144404,144406,144408,144410,144412],{"class":86,"line":145},[84,144399,52471],{"class":477},[84,144401,51938],{"class":51627},[84,144403,53813],{"class":90},[84,144405,523],{"class":477},[84,144407,144237],{"class":104},[84,144409,144215],{"class":477},[84,144411,51938],{"class":51627},[84,144413,51634],{"class":477},[84,144415,144416],{"class":86,"line":156},[84,144417,144248],{"class":328},[84,144419,144420,144422,144424,144426,144428,144430,144432,144434],{"class":86,"line":164},[84,144421,52471],{"class":477},[84,144423,51938],{"class":51627},[84,144425,53813],{"class":90},[84,144427,523],{"class":477},[84,144429,144261],{"class":104},[84,144431,144215],{"class":477},[84,144433,51938],{"class":51627},[84,144435,51634],{"class":477},[84,144437,144438],{"class":86,"line":175},[84,144439,144272],{"class":328},[84,144441,144442,144444,144446,144448,144450,144452,144454,144456],{"class":86,"line":185},[84,144443,52471],{"class":477},[84,144445,51938],{"class":51627},[84,144447,53813],{"class":90},[84,144449,523],{"class":477},[84,144451,144285],{"class":104},[84,144453,144215],{"class":477},[84,144455,51938],{"class":51627},[84,144457,51634],{"class":477},[84,144459,144460,144462,144464],{"class":86,"line":195},[84,144461,52112],{"class":477},[84,144463,51938],{"class":51627},[84,144465,51634],{"class":477},[35,144467,70779],{},[75,144469,144470],{"className":127545,"code":130902,"language":127547,"meta":66,"style":66},[81,144471,144472,144476,144490,144494],{"__ignoreMap":66},[84,144473,144474],{"class":86,"line":87},[84,144475,130909],{"class":328},[84,144477,144478,144480,144482,144484,144486,144488],{"class":86,"line":98},[84,144479,1383],{"class":477},[84,144481,51938],{"class":51627},[84,144483,53813],{"class":90},[84,144485,523],{"class":477},[84,144487,130922],{"class":104},[84,144489,51634],{"class":477},[84,144491,144492],{"class":86,"line":70},[84,144493,130929],{"class":477},[84,144495,144496,144498,144500],{"class":86,"line":120},[84,144497,52112],{"class":477},[84,144499,51938],{"class":51627},[84,144501,51634],{"class":477},[389,144503,138199],{},{"title":66,"searchDepth":98,"depth":98,"links":144505},[144506,144507,144511,144512,144513],{"id":143650,"depth":98,"text":143651},{"id":143682,"depth":98,"text":143683,"children":144508},[144509,144510],{"id":143686,"depth":70,"text":143687},{"id":143703,"depth":70,"text":143704},{"id":143722,"depth":98,"text":143723},{"id":143729,"depth":98,"text":143730},{"id":143816,"depth":98,"text":143817,"children":144514},[144515,144516,144517,144518,144519],{"id":143823,"depth":70,"text":143824},{"id":143951,"depth":70,"text":143952},{"id":144045,"depth":70,"text":144046},{"id":144094,"depth":70,"text":144095},{"id":144104,"depth":70,"text":144105},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143642,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144526,"title":144527,"body":144528,"description":400,"extension":401,"meta":145755,"navigation":403,"path":145756,"seo":145757,"stem":145758,"__hash__":145759},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144529,"toc":145733},[144530,144533,144537,144541,144544,144547,144551,144556,144559,144562,144565,144568,144571,144628,144631,144636,144639,144642,144646,144657,144661,144664,144667,144674,144679,144683,144686,144692,144695,144699,144702,144709,144712,144715,144722,144725,144732,144735,144738,144745,144748,144751,144753,144770,144774,144777,144780,144783,144787,144790,144793,144796,144799,144802,144805,144807,144810,144813,144875,144878,144988,144995,145001,145004,145007,145011,145014,145018,145023,145026,145033,145036,145042,145047,145050,145053,145056,145059,145062,145065,145068,145071,145127,145129,145155,145159,145162,145165,145168,145176,145179,145182,145186,145242,145245,145249,145255,145266,145269,145274,145277,145280,145286,145289,145292,145295,145298,145301,145304,145307,145310,145335,145341,145344,145347,145350,145353,145356,145359,145364,145367,145370,145373,145381,145384,145391,145394,145397,145399,145423,145425,145428,145431,145434,145437,145440,145443,145446,145480,145483,145486,145520,145527,145530,145533,145536,145539,145542,145545,145552,145555,145558,145561,145564,145571,145574,145577,145584,145587,145590,145594,145597,145600,145603,145606,145609,145612,145615,145618,145620,145644,145646,145670,145674,145685,145688,145691,145694,145697,145700,145703,145706,145709,145712,145715,145718,145721,145724,145727,145730],[10,144531,144527],{"id":144532},"_21-移动端布局实战下篇",[14,144534,144536],{"id":144535},"_211-rem适配布局","21.1 rem适配布局",[23,144538,144540],{"id":144539},"_2111-rem单位","21.1.1 rem单位",[64,144542],{"style":126654,"src":144543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[35,144545,144546],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[23,144548,144550],{"id":144549},"_2112-媒体查询","21.1.2 媒体查询",[28,144552,144553],{},[31,144554,144555],{},"参数介绍",[64,144557],{"style":126654,"src":144558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[64,144560],{"style":126654,"src":144561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[64,144563],{"style":126654,"src":144564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[64,144566],{"style":126654,"src":144567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[64,144569],{"style":126654,"src":144570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[75,144572,144574],{"className":126798,"code":144573,"language":126800,"meta":66,"style":66},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[81,144575,144576,144581,144600,144607,144620,144624],{"__ignoreMap":66},[84,144577,144578],{"class":86,"line":87},[84,144579,144580],{"class":328},"\u002F* 媒体查询 *\u002F\n",[84,144582,144583,144586,144588,144591,144593,144596,144598],{"class":86,"line":98},[84,144584,144585],{"class":473},"@media",[84,144587,1991],{"class":477},[84,144589,144590],{"class":94},"max-width",[84,144592,51764],{"class":477},[84,144594,144595],{"class":94},"768",[84,144597,51819],{"class":473},[84,144599,12771],{"class":477},[84,144601,144602,144605],{"class":86,"line":70},[84,144603,144604],{"class":90},"  .container",[84,144606,15901],{"class":477},[84,144608,144609,144612,144614,144616,144618],{"class":86,"line":120},[84,144610,144611],{"class":94},"    width",[84,144613,51764],{"class":477},[84,144615,784],{"class":94},[84,144617,801],{"class":473},[84,144619,1634],{"class":477},[84,144621,144622],{"class":86,"line":131},[84,144623,127594],{"class":477},[84,144625,144626],{"class":86,"line":145},[84,144627,1905],{"class":477},[35,144629,144630],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[28,144632,144633],{"start":98},[31,144634,144635],{},"引入资源",[64,144637],{"style":126654,"src":144638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[35,144640,144641],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[23,144643,144645],{"id":144644},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1480,144647,144648,144651,144654],{},[31,144649,144650],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[31,144652,144653],{},"媒体查询可以根据不同设备宽度来修改样式",[31,144655,144656],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144658,144660],{"id":144659},"_212-less基础","21.2 Less基础",[35,144662,144663],{},"css冗余度较高，不利于复用，没有很好的计算能力",[35,144665,144666],{},"Less可以解决该问题，它是css的扩展语言",[35,144668,144669,144670],{},"Less中文网址： ",[39,144671,144672],{"href":144672,"rel":144673},"http:\u002F\u002Flesscss.cn\u002F",[43],[35,144675,144676],{},[624,144677,144678],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[23,144680,144682],{"id":144681},"_2121-less安装","21.2.1 less安装",[35,144684,144685],{},"如果使用vscode，则无需进行下方安装步骤",[35,144687,144688],{},[39,144689,144690],{"href":144690,"rel":144691},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[43],[64,144693],{"style":126654,"src":144694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[23,144696,144698],{"id":144697},"_2122-less使用","21.2.2 less使用",[35,144700,144701],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[28,144703,144704],{},[31,144705,144706],{},[624,144707,144708],{},"Less 变量",[64,144710],{"style":126654,"src":144711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[64,144713],{"style":126654,"src":144714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[28,144716,144717],{"start":98},[31,144718,144719],{},[624,144720,144721],{},"Less 编译",[64,144723],{"style":126654,"src":144724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[28,144726,144727],{"start":70},[31,144728,144729],{},[624,144730,144731],{},"Less 嵌套",[64,144733],{"style":126654,"src":144734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[64,144736],{"style":126654,"src":144737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[28,144739,144740],{"start":120},[31,144741,144742],{},[624,144743,144744],{},"Less 运算",[64,144746],{"style":126654,"src":144747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[35,144749,144750],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[35,144752,507],{},[1480,144754,144755,144758,144761,144764,144767],{},[31,144756,144757],{},"乘号（*）和除号（\u002F）的写法",[31,144759,144760],{},"运算符中间左右有个空格隔开 1px + 5",[31,144762,144763],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[31,144765,144766],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[31,144768,144769],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144771,144773],{"id":144772},"_213-rem-适配方案","21.3 rem 适配方案",[35,144775,144776],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[35,144778,144779],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[64,144781],{"style":126654,"src":144782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[23,144784,144786],{"id":144785},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[35,144788,144789],{},"rem + 媒体查询 + less 技术",[64,144791],{"style":126654,"src":144792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[35,144794,144795],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[35,144797,144798],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[64,144800],{"style":126654,"src":144801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[35,144803,144804],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[35,144806,14962],{},[64,144808],{"style":126654,"src":144809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[35,144811,144812],{},"index.html:",[75,144814,144816],{"className":126798,"code":144815,"language":126800,"meta":66,"style":66},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[81,144817,144818,144823,144829,144845,144849,144855,144871],{"__ignoreMap":66},[84,144819,144820],{"class":86,"line":87},[84,144821,144822],{"class":328},"\u002F* rem 适配方案 *\u002F\n",[84,144824,144825,144827],{"class":86,"line":98},[84,144826,50962],{"class":51627},[84,144828,15901],{"class":477},[84,144830,144831,144833,144835,144838,144840,144842],{"class":86,"line":70},[84,144832,70952],{"class":94},[84,144834,51764],{"class":477},[84,144836,144837],{"class":94},"62.5",[84,144839,801],{"class":473},[84,144841,130661],{"class":477},[84,144843,144844],{"class":328},"\u002F* 1rem = 10px *\u002F\n",[84,144846,144847],{"class":86,"line":120},[84,144848,1905],{"class":477},[84,144850,144851,144853],{"class":86,"line":131},[84,144852,130646],{"class":90},[84,144854,15901],{"class":477},[84,144856,144857,144859,144861,144863,144866,144868],{"class":86,"line":145},[84,144858,70894],{"class":94},[84,144860,51764],{"class":477},[84,144862,919],{"class":94},[84,144864,144865],{"class":473},"rem",[84,144867,130661],{"class":477},[84,144869,144870],{"class":328},"\u002F* 100px *\u002F\n",[84,144872,144873],{"class":86,"line":156},[84,144874,1905],{"class":477},[35,144876,144877],{},"common.less",[75,144879,144881],{"className":126798,"code":144880,"language":126800,"meta":66,"style":66},"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",[81,144882,144883,144889,144904,144908,144914,144928,144932,144936,144940,144946,144960,144964,144970,144984],{"__ignoreMap":66},[84,144884,144885,144887],{"class":86,"line":87},[84,144886,50962],{"class":51627},[84,144888,15901],{"class":477},[84,144890,144891,144893,144895,144897,144899,144901],{"class":86,"line":98},[84,144892,70952],{"class":94},[84,144894,51764],{"class":477},[84,144896,144837],{"class":94},[84,144898,801],{"class":473},[84,144900,26395],{"class":477},[84,144902,144903],{"class":328},"\u002F* 10px *\u002F\n",[84,144905,144906],{"class":86,"line":70},[84,144907,1905],{"class":477},[84,144909,144910,144912],{"class":86,"line":120},[84,144911,51938],{"class":51627},[84,144913,15901],{"class":477},[84,144915,144916,144918,144920,144922,144924,144926],{"class":86,"line":131},[84,144917,70894],{"class":94},[84,144919,51764],{"class":477},[84,144921,919],{"class":94},[84,144923,144865],{"class":473},[84,144925,26395],{"class":477},[84,144927,144870],{"class":328},[84,144929,144930],{"class":86,"line":145},[84,144931,1905],{"class":477},[84,144933,144934],{"class":86,"line":156},[84,144935,136259],{"class":477},[84,144937,144938],{"class":86,"line":164},[84,144939,144822],{"class":328},[84,144941,144942,144944],{"class":86,"line":175},[84,144943,50962],{"class":51627},[84,144945,15901],{"class":477},[84,144947,144948,144950,144952,144954,144956,144958],{"class":86,"line":185},[84,144949,70952],{"class":94},[84,144951,51764],{"class":477},[84,144953,144837],{"class":94},[84,144955,801],{"class":473},[84,144957,130661],{"class":477},[84,144959,144844],{"class":328},[84,144961,144962],{"class":86,"line":195},[84,144963,1905],{"class":477},[84,144965,144966,144968],{"class":86,"line":206},[84,144967,130646],{"class":90},[84,144969,15901],{"class":477},[84,144971,144972,144974,144976,144978,144980,144982],{"class":86,"line":217},[84,144973,70894],{"class":94},[84,144975,51764],{"class":477},[84,144977,919],{"class":94},[84,144979,144865],{"class":473},[84,144981,130661],{"class":477},[84,144983,144870],{"class":328},[84,144985,144986],{"class":86,"line":227},[84,144987,1905],{"class":477},[35,144989,144990,144991,144994],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23882,144992,144993],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[75,144996,144999],{"className":144997,"code":144998,"language":5516},[5514],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[81,145000,144998],{"__ignoreMap":66},[35,145002,145003],{},"less保存时会自动变成.css文件",[35,145005,145006],{},"好好搞懂上述代码写法",[23,145008,145010],{"id":145009},"_2132-样式导入样式","21.3.2 样式导入样式",[64,145012],{"style":126654,"src":145013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[23,145015,145017],{"id":145016},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[28,145019,145020],{},[31,145021,145022],{},"准备工作",[64,145024],{"style":126654,"src":145025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[35,145027,145028,145029],{},"github地址：",[39,145030,145031],{"href":145031,"rel":145032},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[43],[35,145034,145035],{},"下载之后，将index.js文件拖到项目中就可以了",[35,145037,145038,145039],{},"js文件引入到index.html中使用的是",[81,145040,145041],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[28,145043,145044],{"start":98},[31,145045,145046],{},"vscode插件",[64,145048],{"style":126654,"src":145049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[35,145051,145052],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[35,145054,145055],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[64,145057],{"style":126654,"src":145058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[35,145060,145061],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[64,145063],{"style":126654,"src":145064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[35,145066,145067],{},"修改成75就可以，alt+z为快捷键",[35,145069,145070],{},"index.css：",[75,145072,145073],{"className":126798,"code":144815,"language":126800,"meta":66,"style":66},[81,145074,145075,145079,145085,145099,145103,145109,145123],{"__ignoreMap":66},[84,145076,145077],{"class":86,"line":87},[84,145078,144822],{"class":328},[84,145080,145081,145083],{"class":86,"line":98},[84,145082,50962],{"class":51627},[84,145084,15901],{"class":477},[84,145086,145087,145089,145091,145093,145095,145097],{"class":86,"line":70},[84,145088,70952],{"class":94},[84,145090,51764],{"class":477},[84,145092,144837],{"class":94},[84,145094,801],{"class":473},[84,145096,130661],{"class":477},[84,145098,144844],{"class":328},[84,145100,145101],{"class":86,"line":120},[84,145102,1905],{"class":477},[84,145104,145105,145107],{"class":86,"line":131},[84,145106,130646],{"class":90},[84,145108,15901],{"class":477},[84,145110,145111,145113,145115,145117,145119,145121],{"class":86,"line":145},[84,145112,70894],{"class":94},[84,145114,51764],{"class":477},[84,145116,919],{"class":94},[84,145118,144865],{"class":473},[84,145120,130661],{"class":477},[84,145122,144870],{"class":328},[84,145124,145125],{"class":86,"line":156},[84,145126,1905],{"class":477},[35,145128,144812],{},[75,145130,145131],{"className":126798,"code":127202,"language":126800,"meta":66,"style":66},[81,145132,145133,145139,145151],{"__ignoreMap":66},[84,145134,145135,145137],{"class":86,"line":87},[84,145136,52127],{"class":51627},[84,145138,15901],{"class":477},[84,145140,145141,145143,145145,145147,145149],{"class":86,"line":98},[84,145142,70952],{"class":94},[84,145144,51764],{"class":477},[84,145146,1074],{"class":94},[84,145148,51819],{"class":473},[84,145150,1634],{"class":477},[84,145152,145153],{"class":86,"line":70},[84,145154,1905],{"class":477},[14,145156,145158],{"id":145157},"_214-响应式开发","21.4 响应式开发",[35,145160,145161],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[64,145163],{"style":126654,"src":145164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[35,145166,145167],{},"做法：",[1480,145169,145170,145173],{},[31,145171,145172],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[31,145174,145175],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[64,145177],{"style":126654,"src":145178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[35,145180,145181],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[23,145183,145185],{"id":145184},"_2141-简单代码示范","21.4.1 简单代码示范",[75,145187,145188],{"className":126798,"code":144815,"language":126800,"meta":66,"style":66},[81,145189,145190,145194,145200,145214,145218,145224,145238],{"__ignoreMap":66},[84,145191,145192],{"class":86,"line":87},[84,145193,144822],{"class":328},[84,145195,145196,145198],{"class":86,"line":98},[84,145197,50962],{"class":51627},[84,145199,15901],{"class":477},[84,145201,145202,145204,145206,145208,145210,145212],{"class":86,"line":70},[84,145203,70952],{"class":94},[84,145205,51764],{"class":477},[84,145207,144837],{"class":94},[84,145209,801],{"class":473},[84,145211,130661],{"class":477},[84,145213,144844],{"class":328},[84,145215,145216],{"class":86,"line":120},[84,145217,1905],{"class":477},[84,145219,145220,145222],{"class":86,"line":131},[84,145221,130646],{"class":90},[84,145223,15901],{"class":477},[84,145225,145226,145228,145230,145232,145234,145236],{"class":86,"line":145},[84,145227,70894],{"class":94},[84,145229,51764],{"class":477},[84,145231,919],{"class":94},[84,145233,144865],{"class":473},[84,145235,130661],{"class":477},[84,145237,144870],{"class":328},[84,145239,145240],{"class":86,"line":156},[84,145241,1905],{"class":477},[35,145243,145244],{},"父盒子一般命名为container",[23,145246,145248],{"id":145247},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[35,145250,145251,145252],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[624,145253,145254],{},"使得 Web 开发更加快捷",[1480,145256,145257],{},[31,145258,145259,145260],{},"官网：",[624,145261,145262],{},[39,145263,145264],{"href":145264,"rel":145265},"http:\u002F\u002Fgetbootstrap.com\u002F",[43],[35,145267,145268],{},"可以直接去官网拿现成的东西",[28,145270,145271],{},[31,145272,145273],{},"Bootstrap的使用",[35,145275,145276],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[35,145278,145279],{},"Bootstrap 使用四步曲：",[35,145281,145282,145285],{},[624,145283,145284],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[64,145287],{"style":126654,"src":145288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[35,145290,145291],{},"打开Bootstrap官网，然后下载",[64,145293],{"style":126654,"src":145294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[64,145296],{"style":126654,"src":145297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[35,145299,145300],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[35,145302,145303],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[35,145305,145306],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[64,145308],{"style":126654,"src":145309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[75,145311,145313],{"className":126798,"code":145312,"language":126800,"meta":66,"style":66},".center {\n  color: red;\n}\n",[81,145314,145315,145321,145331],{"__ignoreMap":66},[84,145316,145317,145319],{"class":86,"line":87},[84,145318,127089],{"class":90},[84,145320,15901],{"class":477},[84,145322,145323,145325,145327,145329],{"class":86,"line":98},[84,145324,71231],{"class":94},[84,145326,51764],{"class":477},[84,145328,57747],{"class":94},[84,145330,1634],{"class":477},[84,145332,145333],{"class":86,"line":70},[84,145334,1905],{"class":477},[35,145336,145337,145340],{},[81,145338,145339],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[64,145342],{"style":126654,"src":145343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[64,145345],{"style":126654,"src":145346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[64,145348],{"style":126654,"src":145349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[35,145351,145352],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[64,145354],{"style":126654,"src":145355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[35,145357,145358],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[28,145360,145361],{"start":98},[31,145362,145363],{},"布局容器",[64,145365],{"style":126654,"src":145366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[35,145368,145369],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[35,145371,145372],{},"container-fluid用于移动式布局比较方便",[28,145374,145375],{"start":70},[31,145376,145377,145378],{},"bootstrap ",[624,145379,145380],{},"栅格系统原理",[64,145382],{"style":126654,"src":145383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[28,145385,145386],{"start":120},[31,145387,145388],{},[624,145389,145390],{},"栅格选项参数",[64,145392],{"style":126654,"src":145393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[35,145395,145396],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[35,145398,14962],{},[75,145400,145401],{"className":126798,"code":145312,"language":126800,"meta":66,"style":66},[81,145402,145403,145409,145419],{"__ignoreMap":66},[84,145404,145405,145407],{"class":86,"line":87},[84,145406,127089],{"class":90},[84,145408,15901],{"class":477},[84,145410,145411,145413,145415,145417],{"class":86,"line":98},[84,145412,71231],{"class":94},[84,145414,51764],{"class":477},[84,145416,57747],{"class":94},[84,145418,1634],{"class":477},[84,145420,145421],{"class":86,"line":70},[84,145422,1905],{"class":477},[35,145424,135841],{},[64,145426],{"style":126654,"src":145427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[35,145429,145430],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[35,145432,145433],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[35,145435,145436],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[35,145438,145439],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[35,145441,145442],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[35,145444,145445],{},"汇总展示说明：",[75,145447,145448],{"className":127545,"code":130902,"language":127547,"meta":66,"style":66},[81,145449,145450,145454,145468,145472],{"__ignoreMap":66},[84,145451,145452],{"class":86,"line":87},[84,145453,130909],{"class":328},[84,145455,145456,145458,145460,145462,145464,145466],{"class":86,"line":98},[84,145457,1383],{"class":477},[84,145459,51938],{"class":51627},[84,145461,53813],{"class":90},[84,145463,523],{"class":477},[84,145465,130922],{"class":104},[84,145467,51634],{"class":477},[84,145469,145470],{"class":86,"line":70},[84,145471,130929],{"class":477},[84,145473,145474,145476,145478],{"class":86,"line":120},[84,145475,52112],{"class":477},[84,145477,51938],{"class":51627},[84,145479,51634],{"class":477},[64,145481],{"style":126654,"src":145482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[35,145484,145485],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[75,145487,145488],{"className":127545,"code":130902,"language":127547,"meta":66,"style":66},[81,145489,145490,145494,145508,145512],{"__ignoreMap":66},[84,145491,145492],{"class":86,"line":87},[84,145493,130909],{"class":328},[84,145495,145496,145498,145500,145502,145504,145506],{"class":86,"line":98},[84,145497,1383],{"class":477},[84,145499,51938],{"class":51627},[84,145501,53813],{"class":90},[84,145503,523],{"class":477},[84,145505,130922],{"class":104},[84,145507,51634],{"class":477},[84,145509,145510],{"class":86,"line":70},[84,145511,130929],{"class":477},[84,145513,145514,145516,145518],{"class":86,"line":120},[84,145515,52112],{"class":477},[84,145517,51938],{"class":51627},[84,145519,51634],{"class":477},[28,145521,145522],{"start":131},[31,145523,145524],{},[624,145525,145526],{},"列嵌套",[64,145528],{"style":126654,"src":145529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[35,145531,145532],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[35,145534,145535],{},"没加row内部这样：",[64,145537],{"style":126654,"src":145538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[35,145540,145541],{},"加上row之后内部为：",[64,145543],{"style":126654,"src":145544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[28,145546,145547],{"start":145},[31,145548,145549],{},[624,145550,145551],{},"列偏移",[64,145553],{"style":126654,"src":145554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[35,145556,145557],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[35,145559,145560],{},"要加偏移量，即偏移份数",[35,145562,145563],{},"偏移的份数=12-两个盒子的份数",[28,145565,145566],{"start":156},[31,145567,145568],{},[624,145569,145570],{},"列排序",[64,145572],{"style":126654,"src":145573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[35,145575,145576],{},"pull拉左；push推右",[28,145578,145579],{"start":164},[31,145580,145581],{},[624,145582,145583],{},"响应式工具",[64,145585],{"style":126654,"src":145586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[35,145588,145589],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[23,145591,145593],{"id":145592},"_2143-响应式小项目","21.4.3 响应式小项目",[35,145595,145596],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[35,145598,145599],{},"ul {",[35,145601,145602],{},"list-style: none;",[35,145604,145605],{},"margin:0;",[35,145607,145608],{},"padding:0; }",[64,145610],{"style":126654,"src":145611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[64,145613],{"style":126654,"src":145614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[35,145616,145617],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[35,145619,69215],{},[75,145621,145622],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,145623,145624,145630,145640],{"__ignoreMap":66},[84,145625,145626,145628],{"class":86,"line":87},[84,145627,130646],{"class":90},[84,145629,15901],{"class":477},[84,145631,145632,145634,145636,145638],{"class":86,"line":98},[84,145633,131278],{"class":94},[84,145635,51764],{"class":477},[84,145637,24065],{"class":94},[84,145639,1634],{"class":477},[84,145641,145642],{"class":86,"line":70},[84,145643,1905],{"class":477},[35,145645,70779],{},[75,145647,145648],{"className":126798,"code":139468,"language":126800,"meta":66,"style":66},[81,145649,145650,145656,145666],{"__ignoreMap":66},[84,145651,145652,145654],{"class":86,"line":87},[84,145653,130646],{"class":90},[84,145655,15901],{"class":477},[84,145657,145658,145660,145662,145664],{"class":86,"line":98},[84,145659,131278],{"class":94},[84,145661,51764],{"class":477},[84,145663,24065],{"class":94},[84,145665,1634],{"class":477},[84,145667,145668],{"class":86,"line":70},[84,145669,1905],{"class":477},[14,145671,145673],{"id":145672},"_215-swiper-插件使用","21.5 swiper 插件使用",[1480,145675,145676,145679,145682],{},[31,145677,145678],{},"下载需要的css和js文件html页面中 引入相关文件",[31,145680,145681],{},"官网找到类似案例，复制html结构，css样式 js 语法",[31,145683,145684],{},"根据需求定制修改模块",[64,145686],{"style":126654,"src":145687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[35,145689,145690],{},"解压后将这两部分放到项目中",[64,145692],{"style":126654,"src":145693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[35,145695,145696],{},"这个插件可以帮助我们实现轮播图效果",[35,145698,145699],{},"用法：",[64,145701],{"style":126654,"src":145702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[35,145704,145705],{},"找到自己喜欢的",[64,145707],{"style":126654,"src":145708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[35,145710,145711],{},"右键，查看网页源代码",[64,145713],{"style":126654,"src":145714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[35,145716,145717],{},"复制人家的结构内容",[35,145719,145720],{},"然后去看API文档：",[64,145722],{"style":126654,"src":145723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[35,145725,145726],{},"可以看看如何修改样式",[35,145728,145729],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[389,145731,145732],{},"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":66,"searchDepth":98,"depth":98,"links":145734},[145735,145740,145744,145749,145754],{"id":144535,"depth":98,"text":144536,"children":145736},[145737,145738,145739],{"id":144539,"depth":70,"text":144540},{"id":144549,"depth":70,"text":144550},{"id":144644,"depth":70,"text":144645},{"id":144659,"depth":98,"text":144660,"children":145741},[145742,145743],{"id":144681,"depth":70,"text":144682},{"id":144697,"depth":70,"text":144698},{"id":144772,"depth":98,"text":144773,"children":145745},[145746,145747,145748],{"id":144785,"depth":70,"text":144786},{"id":145009,"depth":70,"text":145010},{"id":145016,"depth":70,"text":145017},{"id":145157,"depth":98,"text":145158,"children":145750},[145751,145752,145753],{"id":145184,"depth":70,"text":145185},{"id":145247,"depth":70,"text":145248},{"id":145592,"depth":70,"text":145593},{"id":145672,"depth":98,"text":145673},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144527,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145761,"title":145762,"body":145763,"description":400,"extension":401,"meta":145983,"navigation":403,"path":145984,"seo":145985,"stem":145986,"__hash__":145987},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145764,"toc":145979},[145765,145768,145772,145775,145790,145795,145798,145803,145838,145843,145855,145860,145873,145878,145895,145900,145920,145925,145943,145946,145949,145952,145955,145959,145962,145965,145968,145971,145974,145977],[10,145766,145762],{"id":145767},"_22-代码提交与新型相对单位",[14,145769,145771],{"id":145770},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[35,145773,145774],{},"法1：",[28,145776,145777,145784,145787],{},[31,145778,145779,145780],{},"登录网站注册：",[39,145781,145782],{"href":145782,"rel":145783},"https:\u002F\u002Fgitee.com\u002F",[43],[31,145785,145786],{},"码云创建新的仓库",[31,145788,145789],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1480,145791,145792],{},[31,145793,145794],{},"在网站根目录右键-- Git Bash Here",[64,145796],{"style":126654,"src":145797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1480,145799,145800],{},[31,145801,145802],{},"如果是第一次利用git提交，请配置好全局选项",[75,145804,145806],{"className":77,"code":145805,"language":79,"meta":66,"style":66},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[81,145807,145808,145824],{"__ignoreMap":66},[84,145809,145810,145813,145815,145818,145821],{"class":86,"line":87},[84,145811,145812],{"class":90},"git",[84,145814,120043],{"class":104},[84,145816,145817],{"class":94}," --global",[84,145819,145820],{"class":104}," user.name",[84,145822,145823],{"class":104}," \"你的名字\"\n",[84,145825,145826,145828,145830,145832,145835],{"class":86,"line":98},[84,145827,145812],{"class":90},[84,145829,120043],{"class":104},[84,145831,145817],{"class":94},[84,145833,145834],{"class":104}," user.email",[84,145836,145837],{"class":104}," \"你的邮箱\"\n",[1480,145839,145840],{},[31,145841,145842],{},"初始化仓库",[75,145844,145846],{"className":77,"code":145845,"language":79,"meta":66,"style":66},"git init\n",[81,145847,145848],{"__ignoreMap":66},[84,145849,145850,145852],{"class":86,"line":87},[84,145851,145812],{"class":90},[84,145853,145854],{"class":104}," init\n",[1480,145856,145857],{},[31,145858,145859],{},"把本地文件放到暂存区",[75,145861,145863],{"className":77,"code":145862,"language":79,"meta":66,"style":66},"git add .\n",[81,145864,145865],{"__ignoreMap":66},[84,145866,145867,145869,145871],{"class":86,"line":87},[84,145868,145812],{"class":90},[84,145870,5538],{"class":104},[84,145872,29068],{"class":104},[1480,145874,145875],{},[31,145876,145877],{},"把本地文件放到本地仓库里面",[75,145879,145881],{"className":77,"code":145880,"language":79,"meta":66,"style":66},"git commit -m \"first commit\"\n",[81,145882,145883],{"__ignoreMap":66},[84,145884,145885,145887,145890,145892],{"class":86,"line":87},[84,145886,145812],{"class":90},[84,145888,145889],{"class":104}," commit",[84,145891,101208],{"class":94},[84,145893,145894],{"class":104}," \"first commit\"\n",[1480,145896,145897],{},[31,145898,145899],{},"链接远程仓库",[75,145901,145903],{"className":77,"code":145902,"language":79,"meta":66,"style":66},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[81,145904,145905],{"__ignoreMap":66},[84,145906,145907,145909,145912,145914,145917],{"class":86,"line":87},[84,145908,145812],{"class":90},[84,145910,145911],{"class":104}," remote",[84,145913,5538],{"class":104},[84,145915,145916],{"class":104}," origin",[84,145918,145919],{"class":104}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1480,145921,145922],{},[31,145923,145924],{},"把本地仓库的文件推送到远程仓库 push",[75,145926,145928],{"className":77,"code":145927,"language":79,"meta":66,"style":66},"git push -u origin master\n",[81,145929,145930],{"__ignoreMap":66},[84,145931,145932,145934,145936,145938,145940],{"class":86,"line":87},[84,145933,145812],{"class":90},[84,145935,29343],{"class":104},[84,145937,28617],{"class":94},[84,145939,145916],{"class":104},[84,145941,145942],{"class":104}," master\n",[64,145944],{"style":126654,"src":145945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[35,145947,145948],{},"上方方法暂未实现，后边学完git后在整",[35,145950,145951],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[64,145953],{"style":126654,"src":145954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,145956,145958],{"id":145957},"_222-新型相对单位","22.2 新型相对单位",[64,145960],{"style":126654,"src":145961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[64,145963],{"style":126654,"src":145964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[35,145966,145967],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[35,145969,145970],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[64,145972],{"style":126654,"src":145973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[35,145975,145976],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[389,145978,24286],{},{"title":66,"searchDepth":98,"depth":98,"links":145980},[145981,145982],{"id":145770,"depth":98,"text":145771},{"id":145957,"depth":98,"text":145958},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145762,"description":400},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145989,"title":145990,"body":145991,"description":145995,"extension":401,"meta":145996,"navigation":403,"path":145997,"seo":145998,"stem":145999,"__hash__":146000},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145992,"toc":145993},[],{"title":66,"searchDepth":98,"depth":98,"links":145994},[],"自己正经开始学编程的第一门语言！",{"category":93165},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145990,"description":145995},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146002,"title":146003,"body":146004,"description":400,"extension":401,"meta":147151,"navigation":403,"path":147152,"seo":147153,"stem":147154,"__hash__":147155},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146005,"toc":147127},[146006,146009,146013,146016,146019,146044,146047,146053,146057,146060,146087,146090,146130,146133,146145,146148,146154,146158,146162,146189,146206,146213,146217,146220,146246,146249,146253,146256,146296,146299,146316,146322,146326,146331,146375,146378,146396,146399,146467,146471,146478,146481,146496,146499,146508,146511,146522,146525,146534,146537,146554,146557,146572,146576,146580,146583,146585,146605,146609,146612,146615,146626,146629,146635,146639,146645,146672,146675,146687,146690,146701,146704,146710,146714,146720,146770,146773,146815,146818,146851,146854,146888,146892,146895,146915,146918,146954,146957,146970,146974,146978,146984,146987,147000,147004,147007,147013,147016,147020,147023,147026,147075,147079,147095,147101,147108,147114,147124],[10,146007,146003],{"id":146008},"_1-python环境与第一个程序",[14,146010,146012],{"id":146011},"_11-什么是python","1.1 什么是Python",[35,146014,146015],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[35,146017,146018],{},"理解 Python 时抓住三个关键词：",[28,146020,146021,146024,146027],{},[31,146022,146023],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[31,146025,146026],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[31,146028,146029,146030,687,146033,687,146036,687,146039,687,146041,28712],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[81,146031,146032],{},"os",[81,146034,146035],{},"sys",[81,146037,146038],{},"json",[81,146040,58186],{},[81,146042,146043],{},"datetime",[35,146045,146046],{},"Python 程序的运行链路：",[75,146048,146051],{"className":146049,"code":146050,"language":5516,"meta":66},[5514],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[81,146052,146050],{"__ignoreMap":66},[14,146054,146056],{"id":146055},"_12-python解释器","1.2 Python解释器",[35,146058,146059],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[75,146061,146063],{"className":24151,"code":146062,"language":24153,"meta":66,"style":66},"python --version\npython3 --version\npython\npython3\n",[81,146064,146065,146071,146077,146082],{"__ignoreMap":66},[84,146066,146067,146069],{"class":86,"line":87},[84,146068,30707],{"class":90},[84,146070,26621],{"class":94},[84,146072,146073,146075],{"class":86,"line":98},[84,146074,101205],{"class":90},[84,146076,26621],{"class":94},[84,146078,146079],{"class":86,"line":70},[84,146080,146081],{"class":90},"python\n",[84,146083,146084],{"class":86,"line":120},[84,146085,146086],{"class":90},"python3\n",[35,146088,146089],{},"进入交互模式后，可以直接输入表达式：",[75,146091,146093],{"className":30705,"code":146092,"language":30707,"meta":66,"style":66},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[81,146094,146095,146106,146111,146125],{"__ignoreMap":66},[84,146096,146097,146100,146102,146104],{"class":86,"line":87},[84,146098,146099],{"class":473},">>>",[84,146101,25446],{"class":94},[84,146103,45893],{"class":473},[84,146105,48050],{"class":94},[84,146107,146108],{"class":86,"line":98},[84,146109,146110],{"class":94},"3\n",[84,146112,146113,146115,146118,146120,146123],{"class":86,"line":70},[84,146114,146099],{"class":473},[84,146116,146117],{"class":94}," print",[84,146119,478],{"class":477},[84,146121,146122],{"class":104},"\"hello python\"",[84,146124,484],{"class":477},[84,146126,146127],{"class":86,"line":120},[84,146128,146129],{"class":477},"hello python\n",[35,146131,146132],{},"退出交互模式：",[75,146134,146136],{"className":30705,"code":146135,"language":30707,"meta":66,"style":66},"exit()\n",[81,146137,146138],{"__ignoreMap":66},[84,146139,146140,146143],{"class":86,"line":87},[84,146141,146142],{"class":94},"exit",[84,146144,2305],{"class":477},[35,146146,146147],{},"或使用快捷键：",[75,146149,146152],{"className":146150,"code":146151,"language":5516,"meta":66},[5514],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[81,146153,146151],{"__ignoreMap":66},[14,146155,146157],{"id":146156},"_13-安装python","1.3 安装Python",[23,146159,146161],{"id":146160},"_131-windows安装","1.3.1 Windows安装",[28,146163,146164,146171,146174,146180,146186],{},[31,146165,146166,146167],{},"打开 Python 官网：",[39,146168,146169],{"href":146169,"rel":146170},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[43],[31,146172,146173],{},"下载 Windows Installer。",[31,146175,146176,146177,28712],{},"安装时勾选 ",[81,146178,146179],{},"Add Python to PATH",[31,146181,146182,146183,28712],{},"点击 ",[81,146184,146185],{},"Install Now",[31,146187,146188],{},"安装完成后打开命令提示符验证：",[75,146190,146192],{"className":24151,"code":146191,"language":24153,"meta":66,"style":66},"python --version\npip --version\n",[81,146193,146194,146200],{"__ignoreMap":66},[84,146195,146196,146198],{"class":86,"line":87},[84,146197,30707],{"class":90},[84,146199,26621],{"class":94},[84,146201,146202,146204],{"class":86,"line":98},[84,146203,24160],{"class":90},[84,146205,26621],{"class":94},[35,146207,146208,146209,146212],{},"如果提示 ",[81,146210,146211],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[23,146214,146216],{"id":146215},"_132-macos安装","1.3.2 macOS安装",[35,146218,146219],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[75,146221,146223],{"className":24151,"code":146222,"language":24153,"meta":66,"style":66},"brew install python\npython3 --version\npip3 --version\n",[81,146224,146225,146234,146240],{"__ignoreMap":66},[84,146226,146227,146230,146232],{"class":86,"line":87},[84,146228,146229],{"class":90},"brew",[84,146231,24163],{"class":104},[84,146233,124564],{"class":104},[84,146235,146236,146238],{"class":86,"line":98},[84,146237,101205],{"class":90},[84,146239,26621],{"class":94},[84,146241,146242,146244],{"class":86,"line":70},[84,146243,120024],{"class":90},[84,146245,26621],{"class":94},[35,146247,146248],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[23,146250,146252],{"id":146251},"_133-linux安装","1.3.3 Linux安装",[35,146254,146255],{},"Ubuntu\u002FDebian：",[75,146257,146259],{"className":24151,"code":146258,"language":24153,"meta":66,"style":66},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[81,146260,146261,146269,146284,146290],{"__ignoreMap":66},[84,146262,146263,146265,146267],{"class":86,"line":87},[84,146264,24905],{"class":90},[84,146266,117641],{"class":104},[84,146268,26570],{"class":104},[84,146270,146271,146273,146275,146277,146279,146281],{"class":86,"line":98},[84,146272,24905],{"class":90},[84,146274,117641],{"class":104},[84,146276,24163],{"class":104},[84,146278,104729],{"class":104},[84,146280,101124],{"class":104},[84,146282,146283],{"class":104}," python3-venv\n",[84,146285,146286,146288],{"class":86,"line":70},[84,146287,101205],{"class":90},[84,146289,26621],{"class":94},[84,146291,146292,146294],{"class":86,"line":120},[84,146293,120024],{"class":90},[84,146295,26621],{"class":94},[35,146297,146298],{},"Fedora：",[75,146300,146302],{"className":24151,"code":146301,"language":24153,"meta":66,"style":66},"sudo dnf install python3 python3-pip\n",[81,146303,146304],{"__ignoreMap":66},[84,146305,146306,146308,146310,146312,146314],{"class":86,"line":87},[84,146307,24905],{"class":90},[84,146309,26643],{"class":104},[84,146311,24163],{"class":104},[84,146313,104729],{"class":104},[84,146315,120089],{"class":104},[35,146317,146318,146319,146321],{},"Linux 上通常使用 ",[81,146320,101205],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146323,146325],{"id":146324},"_14-pip包管理器","1.4 pip包管理器",[35,146327,146328,146330],{},[81,146329,24160],{}," 用来安装第三方库。",[75,146332,146334],{"className":24151,"code":146333,"language":24153,"meta":66,"style":66},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[81,146335,146336,146345,146354,146362,146368],{"__ignoreMap":66},[84,146337,146338,146340,146342],{"class":86,"line":87},[84,146339,24160],{"class":90},[84,146341,24163],{"class":104},[84,146343,146344],{"class":104}," requests\n",[84,146346,146347,146349,146352],{"class":86,"line":98},[84,146348,24160],{"class":90},[84,146350,146351],{"class":104}," uninstall",[84,146353,146344],{"class":104},[84,146355,146356,146358,146360],{"class":86,"line":70},[84,146357,24160],{"class":90},[84,146359,117898],{"class":104},[84,146361,146344],{"class":104},[84,146363,146364,146366],{"class":86,"line":120},[84,146365,24160],{"class":90},[84,146367,119279],{"class":104},[84,146369,146370,146372],{"class":86,"line":131},[84,146371,24160],{"class":90},[84,146373,146374],{"class":104}," freeze\n",[35,146376,146377],{},"国内网络较慢时可以临时使用镜像：",[75,146379,146381],{"className":24151,"code":146380,"language":24153,"meta":66,"style":66},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[81,146382,146383],{"__ignoreMap":66},[84,146384,146385,146387,146389,146392,146394],{"class":86,"line":87},[84,146386,24160],{"class":90},[84,146388,24163],{"class":104},[84,146390,146391],{"class":104}," requests",[84,146393,26758],{"class":94},[84,146395,120052],{"class":104},[35,146397,146398],{},"常见第三方库：",[612,146400,146401,146410],{},[615,146402,146403],{},[618,146404,146405,146408],{},[621,146406,146407],{},"库",[621,146409,103022],{},[659,146411,146412,146420,146427,146435,146443,146451,146459],{},[618,146413,146414,146417],{},[664,146415,146416],{},"requests",[664,146418,146419],{},"网络请求",[618,146421,146422,146424],{},[664,146423,100952],{},[664,146425,146426],{},"数值计算",[618,146428,146429,146432],{},[664,146430,146431],{},"pandas",[664,146433,146434],{},"表格数据处理",[618,146436,146437,146440],{},[664,146438,146439],{},"matplotlib",[664,146441,146442],{},"绘图",[618,146444,146445,146448],{},[664,146446,146447],{},"pyecharts",[664,146449,146450],{},"ECharts 图表",[618,146452,146453,146456],{},[664,146454,146455],{},"flask",[664,146457,146458],{},"Web 后端",[618,146460,146461,146464],{},[664,146462,146463],{},"pytest",[664,146465,146466],{},"自动化测试",[14,146468,146470],{"id":146469},"_15-虚拟环境","1.5 虚拟环境",[35,146472,146473,146474,146477],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[81,146475,146476],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[35,146479,146480],{},"创建虚拟环境：",[75,146482,146484],{"className":24151,"code":146483,"language":24153,"meta":66,"style":66},"python -m venv .venv\n",[81,146485,146486],{"__ignoreMap":66},[84,146487,146488,146490,146492,146494],{"class":86,"line":87},[84,146489,30707],{"class":90},[84,146491,101208],{"class":94},[84,146493,101211],{"class":104},[84,146495,101214],{"class":104},[35,146497,146498],{},"Windows 激活：",[75,146500,146502],{"className":24151,"code":146501,"language":24153,"meta":66,"style":66},".venv\\Scripts\\activate\n",[81,146503,146504],{"__ignoreMap":66},[84,146505,146506],{"class":86,"line":87},[84,146507,146501],{"class":90},[35,146509,146510],{},"macOS\u002FLinux 激活：",[75,146512,146514],{"className":24151,"code":146513,"language":24153,"meta":66,"style":66},"source .venv\u002Fbin\u002Factivate\n",[81,146515,146516],{"__ignoreMap":66},[84,146517,146518,146520],{"class":86,"line":87},[84,146519,101219],{"class":94},[84,146521,101222],{"class":104},[35,146523,146524],{},"退出虚拟环境：",[75,146526,146528],{"className":24151,"code":146527,"language":24153,"meta":66,"style":66},"deactivate\n",[81,146529,146530],{"__ignoreMap":66},[84,146531,146532],{"class":86,"line":87},[84,146533,146527],{"class":90},[35,146535,146536],{},"保存依赖：",[75,146538,146540],{"className":24151,"code":146539,"language":24153,"meta":66,"style":66},"pip freeze > requirements.txt\n",[81,146541,146542],{"__ignoreMap":66},[84,146543,146544,146546,146549,146551],{"class":86,"line":87},[84,146545,24160],{"class":90},[84,146547,146548],{"class":104}," freeze",[84,146550,26550],{"class":473},[84,146552,146553],{"class":104}," requirements.txt\n",[35,146555,146556],{},"安装依赖：",[75,146558,146560],{"className":24151,"code":146559,"language":24153,"meta":66,"style":66},"pip install -r requirements.txt\n",[81,146561,146562],{"__ignoreMap":66},[84,146563,146564,146566,146568,146570],{"class":86,"line":87},[84,146565,24160],{"class":90},[84,146567,24163],{"class":104},[84,146569,119963],{"class":94},[84,146571,146553],{"class":104},[14,146573,146575],{"id":146574},"_16-开发工具","1.6 开发工具",[23,146577,146579],{"id":146578},"_161-pycharm","1.6.1 PyCharm",[35,146581,146582],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[35,146584,305],{},[28,146586,146587,146590,146593,146599,146602],{},[31,146588,146589],{},"New Project：创建项目。",[31,146591,146592],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[31,146594,146595,146596,126229],{},"New Python File：创建 ",[81,146597,146598],{},".py",[31,146600,146601],{},"Run：运行当前文件。",[31,146603,146604],{},"Debug：断点调试。",[23,146606,146608],{"id":146607},"_162-vs-code","1.6.2 VS Code",[35,146610,146611],{},"VS Code 轻量，适合后续多语言开发。",[35,146613,146614],{},"建议安装插件：",[28,146616,146617,146620,146623],{},[31,146618,146619],{},"Python。",[31,146621,146622],{},"Pylance。",[31,146624,146625],{},"Jupyter。",[35,146627,146628],{},"选择解释器：",[75,146630,146633],{"className":146631,"code":146632,"language":5516,"meta":66},[5514],"Ctrl + Shift + P -> Python: Select Interpreter\n",[81,146634,146632],{"__ignoreMap":66},[14,146636,146638],{"id":146637},"_17-第一个python程序","1.7 第一个Python程序",[35,146640,146641,146642,24947],{},"创建文件 ",[81,146643,146644],{},"hello.py",[75,146646,146648],{"className":30705,"code":146647,"language":30707,"meta":66,"style":66},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[81,146649,146650,146661],{"__ignoreMap":66},[84,146651,146652,146654,146656,146659],{"class":86,"line":87},[84,146653,30742],{"class":94},[84,146655,478],{"class":477},[84,146657,146658],{"class":104},"\"Hello World\"",[84,146660,484],{"class":477},[84,146662,146663,146665,146667,146670],{"class":86,"line":98},[84,146664,30742],{"class":94},[84,146666,478],{"class":477},[84,146668,146669],{"class":104},"\"你好，Python\"",[84,146671,484],{"class":477},[35,146673,146674],{},"在终端运行：",[75,146676,146678],{"className":24151,"code":146677,"language":24153,"meta":66,"style":66},"python hello.py\n",[81,146679,146680],{"__ignoreMap":66},[84,146681,146682,146684],{"class":86,"line":87},[84,146683,30707],{"class":90},[84,146685,146686],{"class":104}," hello.py\n",[35,146688,146689],{},"或：",[75,146691,146693],{"className":24151,"code":146692,"language":24153,"meta":66,"style":66},"python3 hello.py\n",[81,146694,146695],{"__ignoreMap":66},[84,146696,146697,146699],{"class":86,"line":87},[84,146698,101205],{"class":90},[84,146700,146686],{"class":104},[35,146702,146703],{},"输出：",[75,146705,146708],{"className":146706,"code":146707,"language":5516,"meta":66},[5514],"Hello World\n你好，Python\n",[81,146709,146707],{"__ignoreMap":66},[14,146711,146713],{"id":146712},"_18-print函数","1.8 print函数",[35,146715,146716,146719],{},[81,146717,146718],{},"print()"," 用来输出内容。",[75,146721,146723],{"className":30705,"code":146722,"language":30707,"meta":66,"style":66},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[81,146724,146725,146735,146745,146755],{"__ignoreMap":66},[84,146726,146727,146729,146731,146733],{"class":86,"line":87},[84,146728,30742],{"class":94},[84,146730,478],{"class":477},[84,146732,6173],{"class":104},[84,146734,484],{"class":477},[84,146736,146737,146739,146741,146743],{"class":86,"line":98},[84,146738,30742],{"class":94},[84,146740,478],{"class":477},[84,146742,784],{"class":94},[84,146744,484],{"class":477},[84,146746,146747,146749,146751,146753],{"class":86,"line":70},[84,146748,30742],{"class":94},[84,146750,478],{"class":477},[84,146752,526],{"class":94},[84,146754,484],{"class":477},[84,146756,146757,146759,146761,146764,146766,146768],{"class":86,"line":120},[84,146758,30742],{"class":94},[84,146760,478],{"class":477},[84,146762,146763],{"class":104},"\"年龄:\"",[84,146765,12764],{"class":477},[84,146767,1123],{"class":94},[84,146769,484],{"class":477},[35,146771,146772],{},"多个内容用逗号隔开，默认中间加空格：",[75,146774,146776],{"className":30705,"code":146775,"language":30707,"meta":66,"style":66},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[81,146777,146778,146788,146798],{"__ignoreMap":66},[84,146779,146780,146783,146785],{"class":86,"line":87},[84,146781,146782],{"class":477},"name ",[84,146784,523],{"class":473},[84,146786,146787],{"class":104}," \"张三\"\n",[84,146789,146790,146793,146795],{"class":86,"line":98},[84,146791,146792],{"class":477},"age ",[84,146794,523],{"class":473},[84,146796,146797],{"class":94}," 18\n",[84,146799,146800,146802,146804,146807,146810,146812],{"class":86,"line":70},[84,146801,30742],{"class":94},[84,146803,478],{"class":477},[84,146805,146806],{"class":104},"\"姓名:\"",[84,146808,146809],{"class":477},", name, ",[84,146811,146763],{"class":104},[84,146813,146814],{"class":477},", age)\n",[35,146816,146817],{},"修改分隔符：",[75,146819,146821],{"className":30705,"code":146820,"language":30707,"meta":66,"style":66},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[81,146822,146823],{"__ignoreMap":66},[84,146824,146825,146827,146829,146832,146834,146836,146838,146840,146842,146845,146847,146849],{"class":86,"line":87},[84,146826,30742],{"class":94},[84,146828,478],{"class":477},[84,146830,146831],{"class":104},"\"2024\"",[84,146833,12764],{"class":477},[84,146835,54642],{"class":104},[84,146837,12764],{"class":477},[84,146839,54642],{"class":104},[84,146841,12764],{"class":477},[84,146843,146844],{"class":5545},"sep",[84,146846,523],{"class":473},[84,146848,32810],{"class":104},[84,146850,484],{"class":477},[35,146852,146853],{},"修改结尾符：",[75,146855,146857],{"className":30705,"code":146856,"language":30707,"meta":66,"style":66},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[81,146858,146859,146877],{"__ignoreMap":66},[84,146860,146861,146863,146865,146867,146869,146871,146873,146875],{"class":86,"line":87},[84,146862,30742],{"class":94},[84,146864,478],{"class":477},[84,146866,6173],{"class":104},[84,146868,12764],{"class":477},[84,146870,46128],{"class":5545},[84,146872,523],{"class":473},[84,146874,4688],{"class":104},[84,146876,484],{"class":477},[84,146878,146879,146881,146883,146886],{"class":86,"line":98},[84,146880,30742],{"class":94},[84,146882,478],{"class":477},[84,146884,146885],{"class":104},"\"python\"",[84,146887,484],{"class":477},[14,146889,146891],{"id":146890},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[35,146893,146894],{},"交互运行适合临时验证：",[75,146896,146898],{"className":30705,"code":146897,"language":30707,"meta":66,"style":66},">>> 10 * 3\n30\n",[81,146899,146900,146910],{"__ignoreMap":66},[84,146901,146902,146904,146906,146908],{"class":86,"line":87},[84,146903,146099],{"class":473},[84,146905,2367],{"class":94},[84,146907,6847],{"class":473},[84,146909,120360],{"class":94},[84,146911,146912],{"class":86,"line":98},[84,146913,146914],{"class":94},"30\n",[35,146916,146917],{},"脚本运行适合保存程序：",[75,146919,146921],{"className":30705,"code":146920,"language":30707,"meta":66,"style":66},"price = 8\ncount = 5\nprint(price * count)\n",[81,146922,146923,146933,146942],{"__ignoreMap":66},[84,146924,146925,146928,146930],{"class":86,"line":87},[84,146926,146927],{"class":477},"price ",[84,146929,523],{"class":473},[84,146931,146932],{"class":94}," 8\n",[84,146934,146935,146938,146940],{"class":86,"line":98},[84,146936,146937],{"class":477},"count ",[84,146939,523],{"class":473},[84,146941,54753],{"class":94},[84,146943,146944,146946,146949,146951],{"class":86,"line":70},[84,146945,30742],{"class":94},[84,146947,146948],{"class":477},"(price ",[84,146950,928],{"class":473},[84,146952,146953],{"class":477}," count)\n",[35,146955,146956],{},"实际学习中推荐：",[28,146958,146959,146962,146967],{},[31,146960,146961],{},"临时试一个语法，用交互模式。",[31,146963,146964,146965,126229],{},"写完整练习，用 ",[81,146966,146598],{},[31,146968,146969],{},"写项目，用独立目录和虚拟环境。",[14,146971,146973],{"id":146972},"_110-常见错误","1.10 常见错误",[23,146975,146977],{"id":146976},"_1101-命令找不到","1.10.1 命令找不到",[75,146979,146982],{"className":146980,"code":146981,"language":5516,"meta":66},[5514],"python: command not found\n",[81,146983,146981],{"__ignoreMap":66},[35,146985,146986],{},"原因：",[28,146988,146989,146992,146995],{},[31,146990,146991],{},"没安装 Python。",[31,146993,146994],{},"PATH 没配置。",[31,146996,146997,146998,28712],{},"Linux\u002FmacOS 应该使用 ",[81,146999,101205],{},[23,147001,147003],{"id":147002},"_1102-文件名冲突","1.10.2 文件名冲突",[35,147005,147006],{},"不要把文件命名为：",[75,147008,147011],{"className":147009,"code":147010,"language":5516,"meta":66},[5514],"random.py\njson.py\ntime.py\nrequests.py\n",[81,147012,147010],{"__ignoreMap":66},[35,147014,147015],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[23,147017,147019],{"id":147018},"_1103-中文乱码","1.10.3 中文乱码",[35,147021,147022],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[35,147024,147025],{},"如果读写文件出现乱码，要明确指定编码：",[75,147027,147029],{"className":30705,"code":147028,"language":30707,"meta":66,"style":66},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[81,147030,147031,147065],{"__ignoreMap":66},[84,147032,147033,147035,147038,147040,147043,147045,147048,147050,147053,147055,147058,147060,147062],{"class":86,"line":87},[84,147034,108159],{"class":473},[84,147036,147037],{"class":94}," open",[84,147039,478],{"class":477},[84,147041,147042],{"class":104},"\"data.txt\"",[84,147044,12764],{"class":477},[84,147046,147047],{"class":104},"\"r\"",[84,147049,12764],{"class":477},[84,147051,147052],{"class":5545},"encoding",[84,147054,523],{"class":473},[84,147056,147057],{"class":104},"\"utf-8\"",[84,147059,14043],{"class":477},[84,147061,31710],{"class":473},[84,147063,147064],{"class":477}," f:\n",[84,147066,147067,147070,147072],{"class":86,"line":98},[84,147068,147069],{"class":477},"    content ",[84,147071,523],{"class":473},[84,147073,147074],{"class":477}," f.read()\n",[14,147076,147078],{"id":147077},"_111-本章练习","1.11 本章练习",[28,147080,147081,147084,147090],{},[31,147082,147083],{},"安装 Python，并在终端输出版本号。",[31,147085,147086,147087,147089],{},"新建 ",[81,147088,146644],{},"，输出自己的姓名、年龄、学习目标。",[31,147091,104692,147092,147094],{},[81,147093,146718],{}," 输出下面格式：",[75,147096,147099],{"className":147097,"code":147098,"language":5516,"meta":66},[5514],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[81,147100,147098],{"__ignoreMap":66},[28,147102,147103],{"start":120},[31,147104,104692,147105,147107],{},[81,147106,146844],{}," 输出日期：",[75,147109,147112],{"className":147110,"code":147111,"language":5516,"meta":66},[5514],"2024-10-10\n",[81,147113,147111],{"__ignoreMap":66},[28,147115,147116],{"start":131},[31,147117,104692,147118,147120,147121,147123],{},[81,147119,46128],{}," 让两次 ",[81,147122,146718],{}," 输出在同一行。",[389,147125,147126],{},"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":66,"searchDepth":98,"depth":98,"links":147128},[147129,147130,147131,147136,147137,147138,147142,147143,147144,147145,147150],{"id":146011,"depth":98,"text":146012},{"id":146055,"depth":98,"text":146056},{"id":146156,"depth":98,"text":146157,"children":147132},[147133,147134,147135],{"id":146160,"depth":70,"text":146161},{"id":146215,"depth":70,"text":146216},{"id":146251,"depth":70,"text":146252},{"id":146324,"depth":98,"text":146325},{"id":146469,"depth":98,"text":146470},{"id":146574,"depth":98,"text":146575,"children":147139},[147140,147141],{"id":146578,"depth":70,"text":146579},{"id":146607,"depth":70,"text":146608},{"id":146637,"depth":98,"text":146638},{"id":146712,"depth":98,"text":146713},{"id":146890,"depth":98,"text":146891},{"id":146972,"depth":98,"text":146973,"children":147146},[147147,147148,147149],{"id":146976,"depth":70,"text":146977},{"id":147002,"depth":70,"text":147003},{"id":147018,"depth":70,"text":147019},{"id":147077,"depth":98,"text":147078},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146003,"description":400},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147157,"title":147158,"body":147159,"description":400,"extension":401,"meta":149563,"navigation":403,"path":149564,"seo":149565,"stem":149566,"__hash__":149567},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147160,"toc":149548},[147161,147164,147168,147171,147174,147191,147194,147236,147239,147243,147246,147249,147286,147289,147323,147326,147418,147422,147436,147439,147466,147469,147473,147576,147583,147586,147603,147607,147614,147803,147806,147879,147883,147886,147970,147973,148005,148009,148213,148216,148220,148226,148328,148331,148587,148591,148594,148597,148611,148613,148799,148803,149165,149171,149175,149178,149302,149305,149484,149487,149491,149524,149528,149545],[10,147162,147158],{"id":147163},"_10-json与pyecharts折线图",[14,147165,147167],{"id":147166},"_101-数据可视化","10.1 数据可视化",[35,147169,147170],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[35,147172,147173],{},"常见图表：",[28,147175,147176,147179,147182,147185,147188],{},[31,147177,147178],{},"折线图：看趋势。",[31,147180,147181],{},"柱状图：看分类对比。",[31,147183,147184],{},"饼图：看占比。",[31,147186,147187],{},"地图：看地域分布。",[31,147189,147190],{},"散点图：看两个变量之间的关系。",[35,147192,147193],{},"Python 可视化常用库：",[612,147195,147196,147204],{},[615,147197,147198],{},[618,147199,147200,147202],{},[621,147201,146407],{},[621,147203,24069],{},[659,147205,147206,147213,147221,147228],{},[618,147207,147208,147210],{},[664,147209,146439],{},[664,147211,147212],{},"基础、经典、可定制",[618,147214,147215,147218],{},[664,147216,147217],{},"seaborn",[664,147219,147220],{},"统计图表更美观",[618,147222,147223,147225],{},[664,147224,146447],{},[664,147226,147227],{},"生成交互式网页图表",[618,147229,147230,147233],{},[664,147231,147232],{},"plotly",[664,147234,147235],{},"交互图表能力强",[35,147237,147238],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147240,147242],{"id":147241},"_102-json回顾","10.2 JSON回顾",[35,147244,147245],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[35,147247,147248],{},"Python 字典：",[75,147250,147252],{"className":30705,"code":147251,"language":30707,"meta":66,"style":66},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[81,147253,147254,147262,147273,147282],{"__ignoreMap":66},[84,147255,147256,147258,147260],{"class":86,"line":87},[84,147257,101984],{"class":477},[84,147259,523],{"class":473},[84,147261,15901],{"class":477},[84,147263,147264,147267,147269,147271],{"class":86,"line":98},[84,147265,147266],{"class":104},"    \"name\"",[84,147268,51764],{"class":477},[84,147270,69595],{"class":104},[84,147272,31793],{"class":477},[84,147274,147275,147278,147280],{"class":86,"line":70},[84,147276,147277],{"class":104},"    \"value\"",[84,147279,51764],{"class":477},[84,147281,97784],{"class":94},[84,147283,147284],{"class":86,"line":120},[84,147285,1905],{"class":477},[35,147287,147288],{},"JSON 字符串：",[75,147290,147293],{"className":147291,"code":147292,"language":146038,"meta":66,"style":66},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[81,147294,147295,147299,147310,147319],{"__ignoreMap":66},[84,147296,147297],{"class":86,"line":87},[84,147298,1886],{"class":477},[84,147300,147301,147304,147306,147308],{"class":86,"line":98},[84,147302,147303],{"class":94},"  \"name\"",[84,147305,51764],{"class":477},[84,147307,69595],{"class":104},[84,147309,31793],{"class":477},[84,147311,147312,147315,147317],{"class":86,"line":70},[84,147313,147314],{"class":94},"  \"value\"",[84,147316,51764],{"class":477},[84,147318,97784],{"class":94},[84,147320,147321],{"class":86,"line":120},[84,147322,1905],{"class":477},[35,147324,147325],{},"Python 与 JSON 的转换：",[75,147327,147329],{"className":30705,"code":147328,"language":30707,"meta":66,"style":66},"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",[81,147330,147331,147338,147342,147367,147371,147390,147397,147401,147411],{"__ignoreMap":66},[84,147332,147333,147335],{"class":86,"line":87},[84,147334,30719],{"class":473},[84,147336,147337],{"class":477}," json\n",[84,147339,147340],{"class":86,"line":98},[84,147341,2729],{"emptyLinePlaceholder":403},[84,147343,147344,147346,147348,147350,147352,147354,147356,147358,147361,147363,147365],{"class":86,"line":70},[84,147345,101984],{"class":477},[84,147347,523],{"class":473},[84,147349,4777],{"class":477},[84,147351,63005],{"class":104},[84,147353,51764],{"class":477},[84,147355,69595],{"class":104},[84,147357,12764],{"class":477},[84,147359,147360],{"class":104},"\"value\"",[84,147362,51764],{"class":477},[84,147364,784],{"class":94},[84,147366,1905],{"class":477},[84,147368,147369],{"class":86,"line":120},[84,147370,2729],{"emptyLinePlaceholder":403},[84,147372,147373,147376,147378,147381,147384,147386,147388],{"class":86,"line":131},[84,147374,147375],{"class":477},"json_text ",[84,147377,523],{"class":473},[84,147379,147380],{"class":477}," json.dumps(data, ",[84,147382,147383],{"class":5545},"ensure_ascii",[84,147385,523],{"class":473},[84,147387,34314],{"class":94},[84,147389,484],{"class":477},[84,147391,147392,147394],{"class":86,"line":145},[84,147393,30742],{"class":94},[84,147395,147396],{"class":477},"(json_text)\n",[84,147398,147399],{"class":86,"line":156},[84,147400,2729],{"emptyLinePlaceholder":403},[84,147402,147403,147406,147408],{"class":86,"line":164},[84,147404,147405],{"class":477},"new_data ",[84,147407,523],{"class":473},[84,147409,147410],{"class":477}," json.loads(json_text)\n",[84,147412,147413,147415],{"class":86,"line":175},[84,147414,30742],{"class":94},[84,147416,147417],{"class":477},"(new_data)\n",[14,147419,147421],{"id":147420},"_103-安装pyecharts","10.3 安装pyecharts",[75,147423,147425],{"className":24151,"code":147424,"language":24153,"meta":66,"style":66},"pip install pyecharts\n",[81,147426,147427],{"__ignoreMap":66},[84,147428,147429,147431,147433],{"class":86,"line":87},[84,147430,24160],{"class":90},[84,147432,24163],{"class":104},[84,147434,147435],{"class":104}," pyecharts\n",[35,147437,147438],{},"验证：",[75,147440,147442],{"className":30705,"code":147441,"language":30707,"meta":66,"style":66},"import pyecharts\n\nprint(pyecharts.__version__)\n",[81,147443,147444,147450,147454],{"__ignoreMap":66},[84,147445,147446,147448],{"class":86,"line":87},[84,147447,30719],{"class":473},[84,147449,147435],{"class":477},[84,147451,147452],{"class":86,"line":98},[84,147453,2729],{"emptyLinePlaceholder":403},[84,147455,147456,147458,147461,147464],{"class":86,"line":70},[84,147457,30742],{"class":94},[84,147459,147460],{"class":477},"(pyecharts.",[84,147462,147463],{"class":94},"__version__",[84,147465,484],{"class":477},[35,147467,147468],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147470,147472],{"id":147471},"_104-第一个折线图","10.4 第一个折线图",[75,147474,147476],{"className":30705,"code":147475,"language":30707,"meta":66,"style":66},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[81,147477,147478,147490,147494,147504,147534,147566],{"__ignoreMap":66},[84,147479,147480,147482,147485,147487],{"class":86,"line":87},[84,147481,31064],{"class":473},[84,147483,147484],{"class":477}," pyecharts.charts ",[84,147486,30719],{"class":473},[84,147488,147489],{"class":477}," Line\n",[84,147491,147492],{"class":86,"line":98},[84,147493,2729],{"emptyLinePlaceholder":403},[84,147495,147496,147499,147501],{"class":86,"line":70},[84,147497,147498],{"class":477},"line ",[84,147500,523],{"class":473},[84,147502,147503],{"class":477}," Line()\n",[84,147505,147506,147509,147512,147514,147517,147519,147522,147524,147527,147529,147532],{"class":86,"line":120},[84,147507,147508],{"class":477},"line.add_xaxis([",[84,147510,147511],{"class":104},"\"周一\"",[84,147513,12764],{"class":477},[84,147515,147516],{"class":104},"\"周二\"",[84,147518,12764],{"class":477},[84,147520,147521],{"class":104},"\"周三\"",[84,147523,12764],{"class":477},[84,147525,147526],{"class":104},"\"周四\"",[84,147528,12764],{"class":477},[84,147530,147531],{"class":104},"\"周五\"",[84,147533,4986],{"class":477},[84,147535,147536,147539,147542,147544,147546,147548,147550,147552,147554,147556,147559,147561,147564],{"class":86,"line":131},[84,147537,147538],{"class":477},"line.add_yaxis(",[84,147540,147541],{"class":104},"\"销售额\"",[84,147543,77844],{"class":477},[84,147545,784],{"class":94},[84,147547,12764],{"class":477},[84,147549,1290],{"class":94},[84,147551,12764],{"class":477},[84,147553,1335],{"class":94},[84,147555,12764],{"class":477},[84,147557,147558],{"class":94},"150",[84,147560,12764],{"class":477},[84,147562,147563],{"class":94},"180",[84,147565,4986],{"class":477},[84,147567,147568,147571,147574],{"class":86,"line":145},[84,147569,147570],{"class":477},"line.render(",[84,147572,147573],{"class":104},"\"line.html\"",[84,147575,484],{"class":477},[35,147577,147578,147579,147582],{},"运行后会生成 ",[81,147580,147581],{},"line.html","，用浏览器打开即可看到图表。",[35,147584,147585],{},"核心步骤：",[28,147587,147588,147591,147594,147597,147600],{},[31,147589,147590],{},"导入图表类。",[31,147592,147593],{},"创建图表对象。",[31,147595,147596],{},"添加 x 轴数据。",[31,147598,147599],{},"添加 y 轴数据。",[31,147601,147602],{},"渲染为 HTML。",[14,147604,147606],{"id":147605},"_105-全局配置","10.5 全局配置",[35,147608,147609,147610,147613],{},"常用配置在 ",[81,147611,147612],{},"pyecharts.options"," 中。",[75,147615,147617],{"className":30705,"code":147616,"language":30707,"meta":66,"style":66},"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",[81,147618,147619,147636,147646,147650,147658,147682,147710,147715,147734,147753,147771,147791,147795],{"__ignoreMap":66},[84,147620,147621,147623,147626,147628,147631,147633],{"class":86,"line":87},[84,147622,31064],{"class":473},[84,147624,147625],{"class":477}," pyecharts ",[84,147627,30719],{"class":473},[84,147629,147630],{"class":477}," options ",[84,147632,31710],{"class":473},[84,147634,147635],{"class":477}," opts\n",[84,147637,147638,147640,147642,147644],{"class":86,"line":98},[84,147639,31064],{"class":473},[84,147641,147484],{"class":477},[84,147643,30719],{"class":473},[84,147645,147489],{"class":477},[84,147647,147648],{"class":86,"line":70},[84,147649,2729],{"emptyLinePlaceholder":403},[84,147651,147652,147654,147656],{"class":86,"line":120},[84,147653,147498],{"class":477},[84,147655,523],{"class":473},[84,147657,147503],{"class":477},[84,147659,147660,147662,147664,147666,147668,147670,147672,147674,147676,147678,147680],{"class":86,"line":131},[84,147661,147508],{"class":477},[84,147663,147511],{"class":104},[84,147665,12764],{"class":477},[84,147667,147516],{"class":104},[84,147669,12764],{"class":477},[84,147671,147521],{"class":104},[84,147673,12764],{"class":477},[84,147675,147526],{"class":104},[84,147677,12764],{"class":477},[84,147679,147531],{"class":104},[84,147681,4986],{"class":477},[84,147683,147684,147686,147688,147690,147692,147694,147696,147698,147700,147702,147704,147706,147708],{"class":86,"line":145},[84,147685,147538],{"class":477},[84,147687,147541],{"class":104},[84,147689,77844],{"class":477},[84,147691,784],{"class":94},[84,147693,12764],{"class":477},[84,147695,1290],{"class":94},[84,147697,12764],{"class":477},[84,147699,1335],{"class":94},[84,147701,12764],{"class":477},[84,147703,147558],{"class":94},[84,147705,12764],{"class":477},[84,147707,147563],{"class":94},[84,147709,4986],{"class":477},[84,147711,147712],{"class":86,"line":156},[84,147713,147714],{"class":477},"line.set_global_opts(\n",[84,147716,147717,147720,147722,147725,147727,147729,147732],{"class":86,"line":164},[84,147718,147719],{"class":5545},"    title_opts",[84,147721,523],{"class":473},[84,147723,147724],{"class":477},"opts.TitleOpts(",[84,147726,51734],{"class":5545},[84,147728,523],{"class":473},[84,147730,147731],{"class":104},"\"一周销售额\"",[84,147733,38374],{"class":477},[84,147735,147736,147739,147741,147744,147746,147748,147751],{"class":86,"line":175},[84,147737,147738],{"class":5545},"    xaxis_opts",[84,147740,523],{"class":473},[84,147742,147743],{"class":477},"opts.AxisOpts(",[84,147745,80136],{"class":5545},[84,147747,523],{"class":473},[84,147749,147750],{"class":104},"\"日期\"",[84,147752,38374],{"class":477},[84,147754,147755,147758,147760,147762,147764,147766,147769],{"class":86,"line":185},[84,147756,147757],{"class":5545},"    yaxis_opts",[84,147759,523],{"class":473},[84,147761,147743],{"class":477},[84,147763,80136],{"class":5545},[84,147765,523],{"class":473},[84,147767,147768],{"class":104},"\"金额\"",[84,147770,38374],{"class":477},[84,147772,147773,147776,147778,147781,147784,147786,147789],{"class":86,"line":195},[84,147774,147775],{"class":5545},"    tooltip_opts",[84,147777,523],{"class":473},[84,147779,147780],{"class":477},"opts.TooltipOpts(",[84,147782,147783],{"class":5545},"trigger",[84,147785,523],{"class":473},[84,147787,147788],{"class":104},"\"axis\"",[84,147790,38374],{"class":477},[84,147792,147793],{"class":86,"line":206},[84,147794,484],{"class":477},[84,147796,147797,147799,147801],{"class":86,"line":217},[84,147798,147570],{"class":477},[84,147800,147573],{"class":104},[84,147802,484],{"class":477},[35,147804,147805],{},"常见全局配置：",[612,147807,147808,147817],{},[615,147809,147810],{},[618,147811,147812,147815],{},[621,147813,147814],{},"配置",[621,147816,103022],{},[659,147818,147819,147829,147839,147849,147859,147869],{},[618,147820,147821,147826],{},[664,147822,147823],{},[81,147824,147825],{},"TitleOpts",[664,147827,147828],{},"标题",[618,147830,147831,147836],{},[664,147832,147833],{},[81,147834,147835],{},"LegendOpts",[664,147837,147838],{},"图例",[618,147840,147841,147846],{},[664,147842,147843],{},[81,147844,147845],{},"TooltipOpts",[664,147847,147848],{},"提示框",[618,147850,147851,147856],{},[664,147852,147853],{},[81,147854,147855],{},"AxisOpts",[664,147857,147858],{},"坐标轴",[618,147860,147861,147866],{},[664,147862,147863],{},[81,147864,147865],{},"VisualMapOpts",[664,147867,147868],{},"视觉映射",[618,147870,147871,147876],{},[664,147872,147873],{},[81,147874,147875],{},"DataZoomOpts",[664,147877,147878],{},"区域缩放",[14,147880,147882],{"id":147881},"_106-系列配置","10.6 系列配置",[35,147884,147885],{},"系列配置作用于某一组数据。",[75,147887,147889],{"className":30705,"code":147888,"language":30707,"meta":66,"style":66},"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",[81,147890,147891,147896,147907,147936,147947,147966],{"__ignoreMap":66},[84,147892,147893],{"class":86,"line":87},[84,147894,147895],{"class":477},"line.add_yaxis(\n",[84,147897,147898,147901,147903,147905],{"class":86,"line":98},[84,147899,147900],{"class":5545},"    series_name",[84,147902,523],{"class":473},[84,147904,147541],{"class":104},[84,147906,31793],{"class":477},[84,147908,147909,147912,147914,147916,147918,147920,147922,147924,147926,147928,147930,147932,147934],{"class":86,"line":70},[84,147910,147911],{"class":5545},"    y_axis",[84,147913,523],{"class":473},[84,147915,1363],{"class":477},[84,147917,784],{"class":94},[84,147919,12764],{"class":477},[84,147921,1290],{"class":94},[84,147923,12764],{"class":477},[84,147925,1335],{"class":94},[84,147927,12764],{"class":477},[84,147929,147558],{"class":94},[84,147931,12764],{"class":477},[84,147933,147563],{"class":94},[84,147935,88162],{"class":477},[84,147937,147938,147941,147943,147945],{"class":86,"line":120},[84,147939,147940],{"class":5545},"    is_smooth",[84,147942,523],{"class":473},[84,147944,31803],{"class":94},[84,147946,31793],{"class":477},[84,147948,147949,147952,147954,147957,147960,147962,147964],{"class":86,"line":131},[84,147950,147951],{"class":5545},"    label_opts",[84,147953,523],{"class":473},[84,147955,147956],{"class":477},"opts.LabelOpts(",[84,147958,147959],{"class":5545},"is_show",[84,147961,523],{"class":473},[84,147963,31803],{"class":94},[84,147965,38374],{"class":477},[84,147967,147968],{"class":86,"line":145},[84,147969,484],{"class":477},[35,147971,147972],{},"常用参数：",[28,147974,147975,147981,147987,147993,147999],{},[31,147976,147977,147980],{},[81,147978,147979],{},"series_name","：系列名称。",[31,147982,147983,147986],{},[81,147984,147985],{},"y_axis","：y 轴数据。",[31,147988,147989,147992],{},[81,147990,147991],{},"is_smooth","：是否平滑曲线。",[31,147994,147995,147998],{},[81,147996,147997],{},"label_opts","：标签配置。",[31,148000,148001,148004],{},[81,148002,148003],{},"symbol_size","：标记点大小。",[14,148006,148008],{"id":148007},"_107-多条折线","10.7 多条折线",[75,148010,148012],{"className":30705,"code":148011,"language":30707,"meta":66,"style":66},"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",[81,148013,148014,148028,148038,148042,148071,148075,148083,148088,148126,148163,148167,148184,148200,148204],{"__ignoreMap":66},[84,148015,148016,148018,148020,148022,148024,148026],{"class":86,"line":87},[84,148017,31064],{"class":473},[84,148019,147625],{"class":477},[84,148021,30719],{"class":473},[84,148023,147630],{"class":477},[84,148025,31710],{"class":473},[84,148027,147635],{"class":477},[84,148029,148030,148032,148034,148036],{"class":86,"line":98},[84,148031,31064],{"class":473},[84,148033,147484],{"class":477},[84,148035,30719],{"class":473},[84,148037,147489],{"class":477},[84,148039,148040],{"class":86,"line":70},[84,148041,2729],{"emptyLinePlaceholder":403},[84,148043,148044,148047,148049,148051,148053,148055,148057,148059,148061,148063,148065,148067,148069],{"class":86,"line":120},[84,148045,148046],{"class":477},"dates ",[84,148048,523],{"class":473},[84,148050,52553],{"class":477},[84,148052,147511],{"class":104},[84,148054,12764],{"class":477},[84,148056,147516],{"class":104},[84,148058,12764],{"class":477},[84,148060,147521],{"class":104},[84,148062,12764],{"class":477},[84,148064,147526],{"class":104},[84,148066,12764],{"class":477},[84,148068,147531],{"class":104},[84,148070,33573],{"class":477},[84,148072,148073],{"class":86,"line":131},[84,148074,2729],{"emptyLinePlaceholder":403},[84,148076,148077,148079,148081],{"class":86,"line":145},[84,148078,147498],{"class":477},[84,148080,523],{"class":473},[84,148082,147503],{"class":477},[84,148084,148085],{"class":86,"line":156},[84,148086,148087],{"class":477},"line.add_xaxis(dates)\n",[84,148089,148090,148092,148095,148097,148099,148101,148104,148106,148108,148110,148112,148114,148116,148118,148120,148122,148124],{"class":86,"line":164},[84,148091,147538],{"class":477},[84,148093,148094],{"class":104},"\"线上销售\"",[84,148096,77844],{"class":477},[84,148098,784],{"class":94},[84,148100,12764],{"class":477},[84,148102,148103],{"class":94},"130",[84,148105,12764],{"class":477},[84,148107,1290],{"class":94},[84,148109,12764],{"class":477},[84,148111,21377],{"class":94},[84,148113,12764],{"class":477},[84,148115,2052],{"class":94},[84,148117,112528],{"class":477},[84,148119,147991],{"class":5545},[84,148121,523],{"class":473},[84,148123,31803],{"class":94},[84,148125,484],{"class":477},[84,148127,148128,148130,148133,148135,148137,148139,148141,148143,148145,148147,148149,148151,148153,148155,148157,148159,148161],{"class":86,"line":175},[84,148129,147538],{"class":477},[84,148131,148132],{"class":104},"\"线下销售\"",[84,148134,77844],{"class":477},[84,148136,1085],{"class":94},[84,148138,12764],{"class":477},[84,148140,1335],{"class":94},[84,148142,12764],{"class":477},[84,148144,784],{"class":94},[84,148146,12764],{"class":477},[84,148148,1290],{"class":94},[84,148150,12764],{"class":477},[84,148152,147558],{"class":94},[84,148154,112528],{"class":477},[84,148156,147991],{"class":5545},[84,148158,523],{"class":473},[84,148160,31803],{"class":94},[84,148162,484],{"class":477},[84,148164,148165],{"class":86,"line":185},[84,148166,147714],{"class":477},[84,148168,148169,148171,148173,148175,148177,148179,148182],{"class":86,"line":195},[84,148170,147719],{"class":5545},[84,148172,523],{"class":473},[84,148174,147724],{"class":477},[84,148176,51734],{"class":5545},[84,148178,523],{"class":473},[84,148180,148181],{"class":104},"\"线上线下销售趋势\"",[84,148183,38374],{"class":477},[84,148185,148186,148188,148190,148192,148194,148196,148198],{"class":86,"line":206},[84,148187,147775],{"class":5545},[84,148189,523],{"class":473},[84,148191,147780],{"class":477},[84,148193,147783],{"class":5545},[84,148195,523],{"class":473},[84,148197,147788],{"class":104},[84,148199,38374],{"class":477},[84,148201,148202],{"class":86,"line":217},[84,148203,484],{"class":477},[84,148205,148206,148208,148211],{"class":86,"line":227},[84,148207,147570],{"class":477},[84,148209,148210],{"class":104},"\"sales.html\"",[84,148212,484],{"class":477},[35,148214,148215],{},"多条折线适合比较不同指标或不同地区。",[14,148217,148219],{"id":148218},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[35,148221,148222,148223,24947],{},"假设 ",[81,148224,148225],{},"sales.json",[75,148227,148229],{"className":147291,"code":148228,"language":146038,"meta":66,"style":66},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[81,148230,148231,148236,148268,148296,148324],{"__ignoreMap":66},[84,148232,148233],{"class":86,"line":87},[84,148234,148235],{"class":477},"[\n",[84,148237,148238,148241,148244,148246,148248,148250,148253,148255,148257,148259,148262,148264,148266],{"class":86,"line":98},[84,148239,148240],{"class":477},"  {",[84,148242,148243],{"class":94},"\"date\"",[84,148245,51764],{"class":477},[84,148247,147511],{"class":104},[84,148249,12764],{"class":477},[84,148251,148252],{"class":94},"\"online\"",[84,148254,51764],{"class":477},[84,148256,784],{"class":94},[84,148258,12764],{"class":477},[84,148260,148261],{"class":94},"\"offline\"",[84,148263,51764],{"class":477},[84,148265,1085],{"class":94},[84,148267,5259],{"class":477},[84,148269,148270,148272,148274,148276,148278,148280,148282,148284,148286,148288,148290,148292,148294],{"class":86,"line":70},[84,148271,148240],{"class":477},[84,148273,148243],{"class":94},[84,148275,51764],{"class":477},[84,148277,147516],{"class":104},[84,148279,12764],{"class":477},[84,148281,148252],{"class":94},[84,148283,51764],{"class":477},[84,148285,148103],{"class":94},[84,148287,12764],{"class":477},[84,148289,148261],{"class":94},[84,148291,51764],{"class":477},[84,148293,1335],{"class":94},[84,148295,5259],{"class":477},[84,148297,148298,148300,148302,148304,148306,148308,148310,148312,148314,148316,148318,148320,148322],{"class":86,"line":120},[84,148299,148240],{"class":477},[84,148301,148243],{"class":94},[84,148303,51764],{"class":477},[84,148305,147521],{"class":104},[84,148307,12764],{"class":477},[84,148309,148252],{"class":94},[84,148311,51764],{"class":477},[84,148313,1290],{"class":94},[84,148315,12764],{"class":477},[84,148317,148261],{"class":94},[84,148319,51764],{"class":477},[84,148321,784],{"class":94},[84,148323,1905],{"class":477},[84,148325,148326],{"class":86,"line":131},[84,148327,33573],{"class":477},[35,148329,148330],{},"读取并绘图：",[75,148332,148334],{"className":30705,"code":148333,"language":30707,"meta":66,"style":66},"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",[81,148335,148336,148342,148356,148366,148370,148402,148415,148419,148427,148436,148445,148449,148461,148470,148479,148488,148492,148500,148504,148521,148538,148542,148559,148575,148579],{"__ignoreMap":66},[84,148337,148338,148340],{"class":86,"line":87},[84,148339,30719],{"class":473},[84,148341,147337],{"class":477},[84,148343,148344,148346,148348,148350,148352,148354],{"class":86,"line":98},[84,148345,31064],{"class":473},[84,148347,147625],{"class":477},[84,148349,30719],{"class":473},[84,148351,147630],{"class":477},[84,148353,31710],{"class":473},[84,148355,147635],{"class":477},[84,148357,148358,148360,148362,148364],{"class":86,"line":70},[84,148359,31064],{"class":473},[84,148361,147484],{"class":477},[84,148363,30719],{"class":473},[84,148365,147489],{"class":477},[84,148367,148368],{"class":86,"line":120},[84,148369,2729],{"emptyLinePlaceholder":403},[84,148371,148372,148374,148376,148378,148381,148383,148385,148387,148389,148391,148393,148395,148397,148400],{"class":86,"line":131},[84,148373,108159],{"class":473},[84,148375,147037],{"class":94},[84,148377,478],{"class":477},[84,148379,148380],{"class":104},"\"sales.json\"",[84,148382,12764],{"class":477},[84,148384,147047],{"class":104},[84,148386,12764],{"class":477},[84,148388,147052],{"class":5545},[84,148390,523],{"class":473},[84,148392,147057],{"class":104},[84,148394,14043],{"class":477},[84,148396,31710],{"class":473},[84,148398,148399],{"class":5545}," file",[84,148401,4068],{"class":477},[84,148403,148404,148406,148408,148411,148413],{"class":86,"line":145},[84,148405,101747],{"class":477},[84,148407,523],{"class":473},[84,148409,148410],{"class":477}," json.load(",[84,148412,45681],{"class":5545},[84,148414,484],{"class":477},[84,148416,148417],{"class":86,"line":156},[84,148418,2729],{"emptyLinePlaceholder":403},[84,148420,148421,148423,148425],{"class":86,"line":164},[84,148422,148046],{"class":477},[84,148424,523],{"class":473},[84,148426,52165],{"class":477},[84,148428,148429,148432,148434],{"class":86,"line":175},[84,148430,148431],{"class":477},"online_sales ",[84,148433,523],{"class":473},[84,148435,52165],{"class":477},[84,148437,148438,148441,148443],{"class":86,"line":185},[84,148439,148440],{"class":477},"offline_sales ",[84,148442,523],{"class":473},[84,148444,52165],{"class":477},[84,148446,148447],{"class":86,"line":195},[84,148448,2729],{"emptyLinePlaceholder":403},[84,148450,148451,148453,148456,148458],{"class":86,"line":206},[84,148452,3354],{"class":473},[84,148454,148455],{"class":477}," item ",[84,148457,26371],{"class":473},[84,148459,148460],{"class":477}," data:\n",[84,148462,148463,148466,148468],{"class":86,"line":217},[84,148464,148465],{"class":477},"    dates.append(item[",[84,148467,148243],{"class":104},[84,148469,4986],{"class":477},[84,148471,148472,148475,148477],{"class":86,"line":227},[84,148473,148474],{"class":477},"    online_sales.append(item[",[84,148476,148252],{"class":104},[84,148478,4986],{"class":477},[84,148480,148481,148484,148486],{"class":86,"line":238},[84,148482,148483],{"class":477},"    offline_sales.append(item[",[84,148485,148261],{"class":104},[84,148487,4986],{"class":477},[84,148489,148490],{"class":86,"line":249},[84,148491,2729],{"emptyLinePlaceholder":403},[84,148493,148494,148496,148498],{"class":86,"line":262},[84,148495,147498],{"class":477},[84,148497,523],{"class":473},[84,148499,147503],{"class":477},[84,148501,148502],{"class":86,"line":273},[84,148503,148087],{"class":477},[84,148505,148506,148508,148510,148513,148515,148517,148519],{"class":86,"line":283},[84,148507,147538],{"class":477},[84,148509,148094],{"class":104},[84,148511,148512],{"class":477},", online_sales, ",[84,148514,147991],{"class":5545},[84,148516,523],{"class":473},[84,148518,31803],{"class":94},[84,148520,484],{"class":477},[84,148522,148523,148525,148527,148530,148532,148534,148536],{"class":86,"line":294},[84,148524,147538],{"class":477},[84,148526,148132],{"class":104},[84,148528,148529],{"class":477},", offline_sales, ",[84,148531,147991],{"class":5545},[84,148533,523],{"class":473},[84,148535,31803],{"class":94},[84,148537,484],{"class":477},[84,148539,148540],{"class":86,"line":2028},[84,148541,147714],{"class":477},[84,148543,148544,148546,148548,148550,148552,148554,148557],{"class":86,"line":2057},[84,148545,147719],{"class":5545},[84,148547,523],{"class":473},[84,148549,147724],{"class":477},[84,148551,51734],{"class":5545},[84,148553,523],{"class":473},[84,148555,148556],{"class":104},"\"销售趋势\"",[84,148558,38374],{"class":477},[84,148560,148561,148563,148565,148567,148569,148571,148573],{"class":86,"line":2062},[84,148562,147775],{"class":5545},[84,148564,523],{"class":473},[84,148566,147780],{"class":477},[84,148568,147783],{"class":5545},[84,148570,523],{"class":473},[84,148572,147788],{"class":104},[84,148574,38374],{"class":477},[84,148576,148577],{"class":86,"line":2079},[84,148578,484],{"class":477},[84,148580,148581,148583,148585],{"class":86,"line":2084},[84,148582,147570],{"class":477},[84,148584,148210],{"class":104},[84,148586,484],{"class":477},[14,148588,148590],{"id":148589},"_109-数据清洗","10.9 数据清洗",[35,148592,148593],{},"真实数据经常不整齐，需要清洗。",[35,148595,148596],{},"常见问题：",[28,148598,148599,148602,148605,148608],{},[31,148600,148601],{},"数字是字符串。",[31,148603,148604],{},"字段缺失。",[31,148606,148607],{},"空值。",[31,148609,148610],{},"日期格式不统一。",[35,148612,15464],{},[75,148614,148616],{"className":30705,"code":148615,"language":30707,"meta":66,"style":66},"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",[81,148617,148618,148627,148650,148670,148691,148695,148699,148707,148716,148720,148731,148745,148754,148759,148763,148771,148781,148785,148792],{"__ignoreMap":66},[84,148619,148620,148623,148625],{"class":86,"line":87},[84,148621,148622],{"class":477},"raw_data ",[84,148624,523],{"class":473},[84,148626,55773],{"class":477},[84,148628,148629,148632,148634,148636,148638,148640,148643,148645,148648],{"class":86,"line":98},[84,148630,148631],{"class":477},"    {",[84,148633,148243],{"class":104},[84,148635,51764],{"class":477},[84,148637,147511],{"class":104},[84,148639,12764],{"class":477},[84,148641,148642],{"class":104},"\"sales\"",[84,148644,51764],{"class":477},[84,148646,148647],{"class":104},"\"100\"",[84,148649,5259],{"class":477},[84,148651,148652,148654,148656,148658,148660,148662,148664,148666,148668],{"class":86,"line":70},[84,148653,148631],{"class":477},[84,148655,148243],{"class":104},[84,148657,51764],{"class":477},[84,148659,147516],{"class":104},[84,148661,12764],{"class":477},[84,148663,148642],{"class":104},[84,148665,51764],{"class":477},[84,148667,7981],{"class":104},[84,148669,5259],{"class":477},[84,148671,148672,148674,148676,148678,148680,148682,148684,148686,148689],{"class":86,"line":120},[84,148673,148631],{"class":477},[84,148675,148243],{"class":104},[84,148677,51764],{"class":477},[84,148679,147521],{"class":104},[84,148681,12764],{"class":477},[84,148683,148642],{"class":104},[84,148685,51764],{"class":477},[84,148687,148688],{"class":104},"\"120\"",[84,148690,5259],{"class":477},[84,148692,148693],{"class":86,"line":131},[84,148694,33573],{"class":477},[84,148696,148697],{"class":86,"line":145},[84,148698,2729],{"emptyLinePlaceholder":403},[84,148700,148701,148703,148705],{"class":86,"line":156},[84,148702,148046],{"class":477},[84,148704,523],{"class":473},[84,148706,52165],{"class":477},[84,148708,148709,148712,148714],{"class":86,"line":164},[84,148710,148711],{"class":477},"sales ",[84,148713,523],{"class":473},[84,148715,52165],{"class":477},[84,148717,148718],{"class":86,"line":175},[84,148719,2729],{"emptyLinePlaceholder":403},[84,148721,148722,148724,148726,148728],{"class":86,"line":185},[84,148723,3354],{"class":473},[84,148725,148455],{"class":477},[84,148727,26371],{"class":473},[84,148729,148730],{"class":477}," raw_data:\n",[84,148732,148733,148736,148738,148741,148743],{"class":86,"line":195},[84,148734,148735],{"class":477},"    value ",[84,148737,523],{"class":473},[84,148739,148740],{"class":477}," item.get(",[84,148742,148642],{"class":104},[84,148744,484],{"class":477},[84,148746,148747,148749,148751],{"class":86,"line":206},[84,148748,3430],{"class":473},[84,148750,39257],{"class":473},[84,148752,148753],{"class":477}," value:\n",[84,148755,148756],{"class":86,"line":217},[84,148757,148758],{"class":473},"        continue\n",[84,148760,148761],{"class":86,"line":227},[84,148762,2729],{"emptyLinePlaceholder":403},[84,148764,148765,148767,148769],{"class":86,"line":238},[84,148766,148465],{"class":477},[84,148768,148243],{"class":104},[84,148770,4986],{"class":477},[84,148772,148773,148776,148778],{"class":86,"line":249},[84,148774,148775],{"class":477},"    sales.append(",[84,148777,481],{"class":94},[84,148779,148780],{"class":477},"(value))\n",[84,148782,148783],{"class":86,"line":262},[84,148784,2729],{"emptyLinePlaceholder":403},[84,148786,148787,148789],{"class":86,"line":273},[84,148788,30742],{"class":94},[84,148790,148791],{"class":477},"(dates)\n",[84,148793,148794,148796],{"class":86,"line":283},[84,148795,30742],{"class":94},[84,148797,148798],{"class":477},"(sales)\n",[14,148800,148802],{"id":148801},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[75,148804,148806],{"className":30705,"code":148805,"language":30707,"meta":66,"style":66},"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",[81,148807,148808,148822,148832,148836,148844,148865,148887,148909,148931,148953,148957,148961,148983,149004,149008,149016,149020,149024,149034,149043,149053,149069,149073,149077,149094,149110,149126,149142,149152,149156],{"__ignoreMap":66},[84,148809,148810,148812,148814,148816,148818,148820],{"class":86,"line":87},[84,148811,31064],{"class":473},[84,148813,147625],{"class":477},[84,148815,30719],{"class":473},[84,148817,147630],{"class":477},[84,148819,31710],{"class":473},[84,148821,147635],{"class":477},[84,148823,148824,148826,148828,148830],{"class":86,"line":98},[84,148825,31064],{"class":473},[84,148827,147484],{"class":477},[84,148829,30719],{"class":473},[84,148831,147489],{"class":477},[84,148833,148834],{"class":86,"line":70},[84,148835,2729],{"emptyLinePlaceholder":403},[84,148837,148838,148840,148842],{"class":86,"line":120},[84,148839,148711],{"class":477},[84,148841,523],{"class":473},[84,148843,55773],{"class":477},[84,148845,148846,148848,148850,148852,148855,148857,148859,148861,148863],{"class":86,"line":131},[84,148847,148631],{"class":477},[84,148849,148243],{"class":104},[84,148851,51764],{"class":477},[84,148853,148854],{"class":104},"\"2024-10-01\"",[84,148856,12764],{"class":477},[84,148858,84410],{"class":104},[84,148860,51764],{"class":477},[84,148862,92349],{"class":94},[84,148864,5259],{"class":477},[84,148866,148867,148869,148871,148873,148876,148878,148880,148882,148885],{"class":86,"line":145},[84,148868,148631],{"class":477},[84,148870,148243],{"class":104},[84,148872,51764],{"class":477},[84,148874,148875],{"class":104},"\"2024-10-02\"",[84,148877,12764],{"class":477},[84,148879,84410],{"class":104},[84,148881,51764],{"class":477},[84,148883,148884],{"class":94},"1800",[84,148886,5259],{"class":477},[84,148888,148889,148891,148893,148895,148898,148900,148902,148904,148907],{"class":86,"line":156},[84,148890,148631],{"class":477},[84,148892,148243],{"class":104},[84,148894,51764],{"class":477},[84,148896,148897],{"class":104},"\"2024-10-03\"",[84,148899,12764],{"class":477},[84,148901,84410],{"class":104},[84,148903,51764],{"class":477},[84,148905,148906],{"class":94},"1500",[84,148908,5259],{"class":477},[84,148910,148911,148913,148915,148917,148920,148922,148924,148926,148929],{"class":86,"line":164},[84,148912,148631],{"class":477},[84,148914,148243],{"class":104},[84,148916,51764],{"class":477},[84,148918,148919],{"class":104},"\"2024-10-04\"",[84,148921,12764],{"class":477},[84,148923,84410],{"class":104},[84,148925,51764],{"class":477},[84,148927,148928],{"class":94},"2100",[84,148930,5259],{"class":477},[84,148932,148933,148935,148937,148939,148942,148944,148946,148948,148951],{"class":86,"line":175},[84,148934,148631],{"class":477},[84,148936,148243],{"class":104},[84,148938,51764],{"class":477},[84,148940,148941],{"class":104},"\"2024-10-05\"",[84,148943,12764],{"class":477},[84,148945,84410],{"class":104},[84,148947,51764],{"class":477},[84,148949,148950],{"class":94},"2600",[84,148952,5259],{"class":477},[84,148954,148955],{"class":86,"line":185},[84,148956,33573],{"class":477},[84,148958,148959],{"class":86,"line":195},[84,148960,2729],{"emptyLinePlaceholder":403},[84,148962,148963,148965,148967,148970,148972,148974,148976,148978,148980],{"class":86,"line":206},[84,148964,148046],{"class":477},[84,148966,523],{"class":473},[84,148968,148969],{"class":477}," [item[",[84,148971,148243],{"class":104},[84,148973,4772],{"class":477},[84,148975,3354],{"class":473},[84,148977,148455],{"class":477},[84,148979,26371],{"class":473},[84,148981,148982],{"class":477}," sales]\n",[84,148984,148985,148988,148990,148992,148994,148996,148998,149000,149002],{"class":86,"line":217},[84,148986,148987],{"class":477},"amounts ",[84,148989,523],{"class":473},[84,148991,148969],{"class":477},[84,148993,84410],{"class":104},[84,148995,4772],{"class":477},[84,148997,3354],{"class":473},[84,148999,148455],{"class":477},[84,149001,26371],{"class":473},[84,149003,148982],{"class":477},[84,149005,149006],{"class":86,"line":227},[84,149007,2729],{"emptyLinePlaceholder":403},[84,149009,149010,149012,149014],{"class":86,"line":238},[84,149011,147498],{"class":477},[84,149013,523],{"class":473},[84,149015,147503],{"class":477},[84,149017,149018],{"class":86,"line":249},[84,149019,148087],{"class":477},[84,149021,149022],{"class":86,"line":262},[84,149023,147895],{"class":477},[84,149025,149026,149028,149030,149032],{"class":86,"line":273},[84,149027,147900],{"class":5545},[84,149029,523],{"class":473},[84,149031,147541],{"class":104},[84,149033,31793],{"class":477},[84,149035,149036,149038,149040],{"class":86,"line":283},[84,149037,147911],{"class":5545},[84,149039,523],{"class":473},[84,149041,149042],{"class":477},"amounts,\n",[84,149044,149045,149047,149049,149051],{"class":86,"line":294},[84,149046,147940],{"class":5545},[84,149048,523],{"class":473},[84,149050,31803],{"class":94},[84,149052,31793],{"class":477},[84,149054,149055,149057,149059,149061,149063,149065,149067],{"class":86,"line":2028},[84,149056,147951],{"class":5545},[84,149058,523],{"class":473},[84,149060,147956],{"class":477},[84,149062,147959],{"class":5545},[84,149064,523],{"class":473},[84,149066,31803],{"class":94},[84,149068,38374],{"class":477},[84,149070,149071],{"class":86,"line":2057},[84,149072,484],{"class":477},[84,149074,149075],{"class":86,"line":2062},[84,149076,147714],{"class":477},[84,149078,149079,149081,149083,149085,149087,149089,149092],{"class":86,"line":2079},[84,149080,147719],{"class":5545},[84,149082,523],{"class":473},[84,149084,147724],{"class":477},[84,149086,51734],{"class":5545},[84,149088,523],{"class":473},[84,149090,149091],{"class":104},"\"每日销售额\"",[84,149093,38374],{"class":477},[84,149095,149096,149098,149100,149102,149104,149106,149108],{"class":86,"line":2084},[84,149097,147738],{"class":5545},[84,149099,523],{"class":473},[84,149101,147743],{"class":477},[84,149103,80136],{"class":5545},[84,149105,523],{"class":473},[84,149107,147750],{"class":104},[84,149109,38374],{"class":477},[84,149111,149112,149114,149116,149118,149120,149122,149124],{"class":86,"line":2089},[84,149113,147757],{"class":5545},[84,149115,523],{"class":473},[84,149117,147743],{"class":477},[84,149119,80136],{"class":5545},[84,149121,523],{"class":473},[84,149123,147768],{"class":104},[84,149125,38374],{"class":477},[84,149127,149128,149130,149132,149134,149136,149138,149140],{"class":86,"line":2094},[84,149129,147775],{"class":5545},[84,149131,523],{"class":473},[84,149133,147780],{"class":477},[84,149135,147783],{"class":5545},[84,149137,523],{"class":473},[84,149139,147788],{"class":104},[84,149141,38374],{"class":477},[84,149143,149144,149147,149149],{"class":86,"line":2108},[84,149145,149146],{"class":5545},"    datazoom_opts",[84,149148,523],{"class":473},[84,149150,149151],{"class":477},"[opts.DataZoomOpts()],\n",[84,149153,149154],{"class":86,"line":2113},[84,149155,484],{"class":477},[84,149157,149158,149160,149163],{"class":86,"line":2906},[84,149159,147570],{"class":477},[84,149161,149162],{"class":104},"\"daily_sales.html\"",[84,149164,484],{"class":477},[35,149166,149167,149170],{},[81,149168,149169],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149172,149174],{"id":149173},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[35,149176,149177],{},"如果数据结构如下：",[75,149179,149181],{"className":30705,"code":149180,"language":30707,"meta":66,"style":66},"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",[81,149182,149183,149191,149199,149221,149242,149247,149254,149274,149294,149298],{"__ignoreMap":66},[84,149184,149185,149187,149189],{"class":86,"line":87},[84,149186,101984],{"class":477},[84,149188,523],{"class":473},[84,149190,15901],{"class":477},[84,149192,149193,149196],{"class":86,"line":98},[84,149194,149195],{"class":104},"    \"北京\"",[84,149197,149198],{"class":477},": [\n",[84,149200,149201,149203,149205,149207,149210,149212,149215,149217,149219],{"class":86,"line":70},[84,149202,5246],{"class":477},[84,149204,148243],{"class":104},[84,149206,51764],{"class":477},[84,149208,149209],{"class":104},"\"2024-01-01\"",[84,149211,12764],{"class":477},[84,149213,149214],{"class":104},"\"confirm\"",[84,149216,51764],{"class":477},[84,149218,919],{"class":94},[84,149220,5259],{"class":477},[84,149222,149223,149225,149227,149229,149232,149234,149236,149238,149240],{"class":86,"line":120},[84,149224,5246],{"class":477},[84,149226,148243],{"class":104},[84,149228,51764],{"class":477},[84,149230,149231],{"class":104},"\"2024-01-02\"",[84,149233,12764],{"class":477},[84,149235,149214],{"class":104},[84,149237,51764],{"class":477},[84,149239,971],{"class":94},[84,149241,5259],{"class":477},[84,149243,149244],{"class":86,"line":131},[84,149245,149246],{"class":477},"    ],\n",[84,149248,149249,149252],{"class":86,"line":145},[84,149250,149251],{"class":104},"    \"上海\"",[84,149253,149198],{"class":477},[84,149255,149256,149258,149260,149262,149264,149266,149268,149270,149272],{"class":86,"line":156},[84,149257,5246],{"class":477},[84,149259,148243],{"class":104},[84,149261,51764],{"class":477},[84,149263,149209],{"class":104},[84,149265,12764],{"class":477},[84,149267,149214],{"class":104},[84,149269,51764],{"class":477},[84,149271,868],{"class":94},[84,149273,5259],{"class":477},[84,149275,149276,149278,149280,149282,149284,149286,149288,149290,149292],{"class":86,"line":164},[84,149277,5246],{"class":477},[84,149279,148243],{"class":104},[84,149281,51764],{"class":477},[84,149283,149231],{"class":104},[84,149285,12764],{"class":477},[84,149287,149214],{"class":104},[84,149289,51764],{"class":477},[84,149291,996],{"class":94},[84,149293,5259],{"class":477},[84,149295,149296],{"class":86,"line":175},[84,149297,149246],{"class":477},[84,149299,149300],{"class":86,"line":185},[84,149301,1905],{"class":477},[35,149303,149304],{},"绘制多地区趋势：",[75,149306,149308],{"className":30705,"code":149307,"language":30707,"meta":66,"style":66},"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",[81,149309,149310,149324,149334,149338,149363,149367,149375,149379,149383,149395,149417,149430,149434,149438,149455,149471,149475],{"__ignoreMap":66},[84,149311,149312,149314,149316,149318,149320,149322],{"class":86,"line":87},[84,149313,31064],{"class":473},[84,149315,147625],{"class":477},[84,149317,30719],{"class":473},[84,149319,147630],{"class":477},[84,149321,31710],{"class":473},[84,149323,147635],{"class":477},[84,149325,149326,149328,149330,149332],{"class":86,"line":98},[84,149327,31064],{"class":473},[84,149329,147484],{"class":477},[84,149331,30719],{"class":473},[84,149333,147489],{"class":477},[84,149335,149336],{"class":86,"line":70},[84,149337,2729],{"emptyLinePlaceholder":403},[84,149339,149340,149342,149344,149346,149348,149350,149352,149354,149356,149359,149361],{"class":86,"line":120},[84,149341,148046],{"class":477},[84,149343,523],{"class":473},[84,149345,148969],{"class":477},[84,149347,148243],{"class":104},[84,149349,4772],{"class":477},[84,149351,3354],{"class":473},[84,149353,148455],{"class":477},[84,149355,26371],{"class":473},[84,149357,149358],{"class":477}," data[",[84,149360,69595],{"class":104},[84,149362,77853],{"class":477},[84,149364,149365],{"class":86,"line":131},[84,149366,2729],{"emptyLinePlaceholder":403},[84,149368,149369,149371,149373],{"class":86,"line":145},[84,149370,147498],{"class":477},[84,149372,523],{"class":473},[84,149374,147503],{"class":477},[84,149376,149377],{"class":86,"line":156},[84,149378,148087],{"class":477},[84,149380,149381],{"class":86,"line":164},[84,149382,2729],{"emptyLinePlaceholder":403},[84,149384,149385,149387,149390,149392],{"class":86,"line":175},[84,149386,3354],{"class":473},[84,149388,149389],{"class":477}," city, records ",[84,149391,26371],{"class":473},[84,149393,149394],{"class":477}," data.items():\n",[84,149396,149397,149400,149402,149404,149406,149408,149410,149412,149414],{"class":86,"line":185},[84,149398,149399],{"class":477},"    values ",[84,149401,523],{"class":473},[84,149403,148969],{"class":477},[84,149405,149214],{"class":104},[84,149407,4772],{"class":477},[84,149409,3354],{"class":473},[84,149411,148455],{"class":477},[84,149413,26371],{"class":473},[84,149415,149416],{"class":477}," records]\n",[84,149418,149419,149422,149424,149426,149428],{"class":86,"line":195},[84,149420,149421],{"class":477},"    line.add_yaxis(city, values, ",[84,149423,147991],{"class":5545},[84,149425,523],{"class":473},[84,149427,31803],{"class":94},[84,149429,484],{"class":477},[84,149431,149432],{"class":86,"line":206},[84,149433,2729],{"emptyLinePlaceholder":403},[84,149435,149436],{"class":86,"line":217},[84,149437,147714],{"class":477},[84,149439,149440,149442,149444,149446,149448,149450,149453],{"class":86,"line":227},[84,149441,147719],{"class":5545},[84,149443,523],{"class":473},[84,149445,147724],{"class":477},[84,149447,51734],{"class":5545},[84,149449,523],{"class":473},[84,149451,149452],{"class":104},"\"多地区趋势图\"",[84,149454,38374],{"class":477},[84,149456,149457,149459,149461,149463,149465,149467,149469],{"class":86,"line":238},[84,149458,147775],{"class":5545},[84,149460,523],{"class":473},[84,149462,147780],{"class":477},[84,149464,147783],{"class":5545},[84,149466,523],{"class":473},[84,149468,147788],{"class":104},[84,149470,38374],{"class":477},[84,149472,149473],{"class":86,"line":249},[84,149474,484],{"class":477},[84,149476,149477,149479,149482],{"class":86,"line":262},[84,149478,147570],{"class":477},[84,149480,149481],{"class":104},"\"trend.html\"",[84,149483,484],{"class":477},[35,149485,149486],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149488,149490],{"id":149489},"_1012-易错点","10.12 易错点",[28,149492,149493,149499,149505,149515,149521],{},[31,149494,149495,149498],{},[81,149496,149497],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[31,149500,149501,149504],{},[81,149502,149503],{},"render()"," 生成的是 HTML，不是图片。",[31,149506,149507,149508,149511,149512,28712],{},"JSON 字符串用 ",[81,149509,149510],{},"json.loads()","，JSON 文件用 ",[81,149513,149514],{},"json.load()",[31,149516,149517,149518,28712],{},"中文 JSON 保存时加 ",[81,149519,149520],{},"ensure_ascii=False",[31,149522,149523],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149525,149527],{"id":149526},"_1013-本章练习","10.13 本章练习",[28,149529,149530,149533,149536,149539,149542],{},[31,149531,149532],{},"安装 pyecharts 并生成第一个折线图。",[31,149534,149535],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[31,149537,149538],{},"绘制两条折线，对比线上和线下销售额。",[31,149540,149541],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[31,149543,149544],{},"对含有空值的销售数据进行清洗后再绘图。",[389,149546,149547],{},"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":66,"searchDepth":98,"depth":98,"links":149549},[149550,149551,149552,149553,149554,149555,149556,149557,149558,149559,149560,149561,149562],{"id":147166,"depth":98,"text":147167},{"id":147241,"depth":98,"text":147242},{"id":147420,"depth":98,"text":147421},{"id":147471,"depth":98,"text":147472},{"id":147605,"depth":98,"text":147606},{"id":147881,"depth":98,"text":147882},{"id":148007,"depth":98,"text":148008},{"id":148218,"depth":98,"text":148219},{"id":148589,"depth":98,"text":148590},{"id":148801,"depth":98,"text":148802},{"id":149173,"depth":98,"text":149174},{"id":149489,"depth":98,"text":149490},{"id":149526,"depth":98,"text":149527},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147158,"description":400},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149569,"title":149570,"body":149571,"description":400,"extension":401,"meta":151931,"navigation":403,"path":151932,"seo":151933,"stem":151934,"__hash__":151935},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149572,"toc":151908},[149573,149576,149580,149583,149586,149662,149665,149756,149759,149763,149766,149810,149823,149827,149830,149897,149900,149904,149907,149991,149999,150003,150008,150149,150152,150163,150169,150175,150289,150293,150296,150299,150552,150555,150559,150562,150666,150669,150673,150824,150828,150835,150948,150952,150955,151061,151064,151068,151071,151102,151105,151210,151213,151217,151221,151231,151299,151303,151310,151374,151377,151381,151387,151483,151492,151496,151820,151829,151833,151861,151865,151905],[10,149574,149570],{"id":149575},"_11-面向对象基础",[14,149577,149579],{"id":149578},"_111-什么是面向对象","11.1 什么是面向对象",[35,149581,149582],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[35,149584,149585],{},"面向过程：",[75,149587,149589],{"className":30705,"code":149588,"language":30707,"meta":66,"style":66},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[81,149590,149591,149600,149608,149612,149622,149653,149657],{"__ignoreMap":66},[84,149592,149593,149595,149597],{"class":86,"line":87},[84,149594,146782],{"class":477},[84,149596,523],{"class":473},[84,149598,149599],{"class":104}," \"小明\"\n",[84,149601,149602,149604,149606],{"class":86,"line":98},[84,149603,146792],{"class":477},[84,149605,523],{"class":473},[84,149607,146797],{"class":94},[84,149609,149610],{"class":86,"line":70},[84,149611,2729],{"emptyLinePlaceholder":403},[84,149613,149614,149616,149619],{"class":86,"line":120},[84,149615,32274],{"class":473},[84,149617,149618],{"class":90}," introduce",[84,149620,149621],{"class":477},"(name, age):\n",[84,149623,149624,149626,149628,149630,149633,149635,149637,149639,149642,149644,149646,149648,149651],{"class":86,"line":131},[84,149625,31626],{"class":94},[84,149627,478],{"class":477},[84,149629,529],{"class":473},[84,149631,149632],{"class":104},"\"我叫",[84,149634,1369],{"class":94},[84,149636,80136],{"class":477},[84,149638,1419],{"class":94},[84,149640,149641],{"class":104},"，今年",[84,149643,1369],{"class":94},[84,149645,70547],{"class":477},[84,149647,1419],{"class":94},[84,149649,149650],{"class":104},"岁\"",[84,149652,484],{"class":477},[84,149654,149655],{"class":86,"line":145},[84,149656,2729],{"emptyLinePlaceholder":403},[84,149658,149659],{"class":86,"line":156},[84,149660,149661],{"class":477},"introduce(name, age)\n",[35,149663,149664],{},"面向对象：",[75,149666,149668],{"className":30705,"code":149667,"language":30707,"meta":66,"style":66},"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",[81,149669,149670,149678,149686,149715,149719,149723,149733,149742,149751],{"__ignoreMap":66},[84,149671,149672,149674,149676],{"class":86,"line":87},[84,149673,15023],{"class":473},[84,149675,8227],{"class":90},[84,149677,4068],{"class":477},[84,149679,149680,149682,149684],{"class":86,"line":98},[84,149681,31128],{"class":473},[84,149683,149618],{"class":90},[84,149685,31134],{"class":477},[84,149687,149688,149690,149692,149694,149696,149699,149701,149703,149705,149707,149709,149711,149713],{"class":86,"line":70},[84,149689,32778],{"class":94},[84,149691,478],{"class":477},[84,149693,529],{"class":473},[84,149695,149632],{"class":104},[84,149697,149698],{"class":94},"{self",[84,149700,80627],{"class":477},[84,149702,1419],{"class":94},[84,149704,149641],{"class":104},[84,149706,149698],{"class":94},[84,149708,80639],{"class":477},[84,149710,1419],{"class":94},[84,149712,149650],{"class":104},[84,149714,484],{"class":477},[84,149716,149717],{"class":86,"line":120},[84,149718,2729],{"emptyLinePlaceholder":403},[84,149720,149721],{"class":86,"line":131},[84,149722,2729],{"emptyLinePlaceholder":403},[84,149724,149725,149728,149730],{"class":86,"line":145},[84,149726,149727],{"class":477},"student ",[84,149729,523],{"class":473},[84,149731,149732],{"class":477}," Student()\n",[84,149734,149735,149738,149740],{"class":86,"line":156},[84,149736,149737],{"class":477},"student.name ",[84,149739,523],{"class":473},[84,149741,149599],{"class":104},[84,149743,149744,149747,149749],{"class":86,"line":164},[84,149745,149746],{"class":477},"student.age ",[84,149748,523],{"class":473},[84,149750,146797],{"class":94},[84,149752,149753],{"class":86,"line":175},[84,149754,149755],{"class":477},"student.introduce()\n",[35,149757,149758],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149760,149762],{"id":149761},"_112-类和对象","11.2 类和对象",[35,149764,149765],{},"类是模板，对象是根据模板创建出来的具体实例。",[75,149767,149769],{"className":30705,"code":149768,"language":30707,"meta":66,"style":66},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[81,149770,149771,149779,149784,149788,149792,149801],{"__ignoreMap":66},[84,149772,149773,149775,149777],{"class":86,"line":87},[84,149774,15023],{"class":473},[84,149776,8227],{"class":90},[84,149778,4068],{"class":477},[84,149780,149781],{"class":86,"line":98},[84,149782,149783],{"class":473},"    pass\n",[84,149785,149786],{"class":86,"line":70},[84,149787,2729],{"emptyLinePlaceholder":403},[84,149789,149790],{"class":86,"line":120},[84,149791,2729],{"emptyLinePlaceholder":403},[84,149793,149794,149797,149799],{"class":86,"line":131},[84,149795,149796],{"class":477},"student1 ",[84,149798,523],{"class":473},[84,149800,149732],{"class":477},[84,149802,149803,149806,149808],{"class":86,"line":145},[84,149804,149805],{"class":477},"student2 ",[84,149807,523],{"class":473},[84,149809,149732],{"class":477},[35,149811,149812,149815,149816,101344,149819,149822],{},[81,149813,149814],{},"Student"," 是类，",[81,149817,149818],{},"student1",[81,149820,149821],{},"student2"," 是对象。",[14,149824,149826],{"id":149825},"_113-属性","11.3 属性",[35,149828,149829],{},"属性是对象保存的数据。",[75,149831,149833],{"className":30705,"code":149832,"language":30707,"meta":66,"style":66},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[81,149834,149835,149843,149847,149851,149855,149863,149871,149879,149883,149890],{"__ignoreMap":66},[84,149836,149837,149839,149841],{"class":86,"line":87},[84,149838,15023],{"class":473},[84,149840,8227],{"class":90},[84,149842,4068],{"class":477},[84,149844,149845],{"class":86,"line":98},[84,149846,149783],{"class":473},[84,149848,149849],{"class":86,"line":70},[84,149850,2729],{"emptyLinePlaceholder":403},[84,149852,149853],{"class":86,"line":120},[84,149854,2729],{"emptyLinePlaceholder":403},[84,149856,149857,149859,149861],{"class":86,"line":131},[84,149858,149727],{"class":477},[84,149860,523],{"class":473},[84,149862,149732],{"class":477},[84,149864,149865,149867,149869],{"class":86,"line":145},[84,149866,149737],{"class":477},[84,149868,523],{"class":473},[84,149870,149599],{"class":104},[84,149872,149873,149875,149877],{"class":86,"line":156},[84,149874,149746],{"class":477},[84,149876,523],{"class":473},[84,149878,146797],{"class":94},[84,149880,149881],{"class":86,"line":164},[84,149882,2729],{"emptyLinePlaceholder":403},[84,149884,149885,149887],{"class":86,"line":175},[84,149886,30742],{"class":94},[84,149888,149889],{"class":477},"(student.name)\n",[84,149891,149892,149894],{"class":86,"line":185},[84,149893,30742],{"class":94},[84,149895,149896],{"class":477},"(student.age)\n",[35,149898,149899],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149901,149903],{"id":149902},"_114-方法","11.4 方法",[35,149905,149906],{},"类中的函数叫方法。",[75,149908,149909],{"className":30705,"code":149667,"language":30707,"meta":66,"style":66},[81,149910,149911,149919,149927,149955,149959,149963,149971,149979,149987],{"__ignoreMap":66},[84,149912,149913,149915,149917],{"class":86,"line":87},[84,149914,15023],{"class":473},[84,149916,8227],{"class":90},[84,149918,4068],{"class":477},[84,149920,149921,149923,149925],{"class":86,"line":98},[84,149922,31128],{"class":473},[84,149924,149618],{"class":90},[84,149926,31134],{"class":477},[84,149928,149929,149931,149933,149935,149937,149939,149941,149943,149945,149947,149949,149951,149953],{"class":86,"line":70},[84,149930,32778],{"class":94},[84,149932,478],{"class":477},[84,149934,529],{"class":473},[84,149936,149632],{"class":104},[84,149938,149698],{"class":94},[84,149940,80627],{"class":477},[84,149942,1419],{"class":94},[84,149944,149641],{"class":104},[84,149946,149698],{"class":94},[84,149948,80639],{"class":477},[84,149950,1419],{"class":94},[84,149952,149650],{"class":104},[84,149954,484],{"class":477},[84,149956,149957],{"class":86,"line":120},[84,149958,2729],{"emptyLinePlaceholder":403},[84,149960,149961],{"class":86,"line":131},[84,149962,2729],{"emptyLinePlaceholder":403},[84,149964,149965,149967,149969],{"class":86,"line":145},[84,149966,149727],{"class":477},[84,149968,523],{"class":473},[84,149970,149732],{"class":477},[84,149972,149973,149975,149977],{"class":86,"line":156},[84,149974,149737],{"class":477},[84,149976,523],{"class":473},[84,149978,149599],{"class":104},[84,149980,149981,149983,149985],{"class":86,"line":164},[84,149982,149746],{"class":477},[84,149984,523],{"class":473},[84,149986,146797],{"class":94},[84,149988,149989],{"class":86,"line":175},[84,149990,149755],{"class":477},[35,149992,149993,149995,149996,149998],{},[81,149994,31150],{}," 表示当前对象。调用方法时不需要手动传入 ",[81,149997,31150],{},"，Python 会自动传。",[14,150000,150002],{"id":150001},"_115-构造方法__init__","11.5 构造方法__init__",[35,150004,150005,150007],{},[81,150006,31156],{}," 在对象创建时自动执行，用于初始化属性。",[75,150009,150011],{"className":30705,"code":150010,"language":30707,"meta":66,"style":66},"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",[81,150012,150013,150021,150030,150042,150054,150065,150069,150077,150115,150119,150123,150145],{"__ignoreMap":66},[84,150014,150015,150017,150019],{"class":86,"line":87},[84,150016,15023],{"class":473},[84,150018,8227],{"class":90},[84,150020,4068],{"class":477},[84,150022,150023,150025,150027],{"class":86,"line":98},[84,150024,31128],{"class":473},[84,150026,31131],{"class":94},[84,150028,150029],{"class":477},"(self, name, age, score):\n",[84,150031,150032,150034,150037,150039],{"class":86,"line":70},[84,150033,31172],{"class":94},[84,150035,150036],{"class":477},".name ",[84,150038,523],{"class":473},[84,150040,150041],{"class":477}," name\n",[84,150043,150044,150046,150049,150051],{"class":86,"line":120},[84,150045,31172],{"class":94},[84,150047,150048],{"class":477},".age ",[84,150050,523],{"class":473},[84,150052,150053],{"class":477}," age\n",[84,150055,150056,150058,150061,150063],{"class":86,"line":131},[84,150057,31172],{"class":94},[84,150059,150060],{"class":477},".score ",[84,150062,523],{"class":473},[84,150064,1919],{"class":477},[84,150066,150067],{"class":86,"line":145},[84,150068,2729],{"emptyLinePlaceholder":403},[84,150070,150071,150073,150075],{"class":86,"line":156},[84,150072,31128],{"class":473},[84,150074,149618],{"class":90},[84,150076,31134],{"class":477},[84,150078,150079,150081,150083,150085,150087,150089,150091,150093,150095,150097,150099,150101,150104,150106,150109,150111,150113],{"class":86,"line":164},[84,150080,32778],{"class":94},[84,150082,478],{"class":477},[84,150084,529],{"class":473},[84,150086,149632],{"class":104},[84,150088,149698],{"class":94},[84,150090,80627],{"class":477},[84,150092,1419],{"class":94},[84,150094,149641],{"class":104},[84,150096,149698],{"class":94},[84,150098,80639],{"class":477},[84,150100,1419],{"class":94},[84,150102,150103],{"class":104},"岁，成绩",[84,150105,149698],{"class":94},[84,150107,150108],{"class":477},".score",[84,150110,1419],{"class":94},[84,150112,725],{"class":104},[84,150114,484],{"class":477},[84,150116,150117],{"class":86,"line":175},[84,150118,2729],{"emptyLinePlaceholder":403},[84,150120,150121],{"class":86,"line":185},[84,150122,2729],{"emptyLinePlaceholder":403},[84,150124,150125,150127,150129,150132,150135,150137,150139,150141,150143],{"class":86,"line":195},[84,150126,149727],{"class":477},[84,150128,523],{"class":473},[84,150130,150131],{"class":477}," Student(",[84,150133,150134],{"class":104},"\"小明\"",[84,150136,12764],{"class":477},[84,150138,1123],{"class":94},[84,150140,12764],{"class":477},[84,150142,1462],{"class":94},[84,150144,484],{"class":477},[84,150146,150147],{"class":86,"line":206},[84,150148,149755],{"class":477},[35,150150,150151],{},"构造方法的好处：",[28,150153,150154,150157,150160],{},[31,150155,150156],{},"创建对象时必须提供必要数据。",[31,150158,150159],{},"属性初始化集中，不容易漏。",[31,150161,150162],{},"对象状态更完整。",[14,150164,150166,150167],{"id":150165},"_116-str","11.6 ",[624,150168,1643],{},[35,150170,150171,150172,28712],{},"直接打印对象时，默认输出不直观。可以定义 ",[81,150173,150174],{},"__str__",[75,150176,150178],{"className":30705,"code":150177,"language":30707,"meta":66,"style":66},"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",[81,150179,150180,150188,150197,150207,150217,150221,150230,150258,150262,150266,150282],{"__ignoreMap":66},[84,150181,150182,150184,150186],{"class":86,"line":87},[84,150183,15023],{"class":473},[84,150185,8227],{"class":90},[84,150187,4068],{"class":477},[84,150189,150190,150192,150194],{"class":86,"line":98},[84,150191,31128],{"class":473},[84,150193,31131],{"class":94},[84,150195,150196],{"class":477},"(self, name, age):\n",[84,150198,150199,150201,150203,150205],{"class":86,"line":70},[84,150200,31172],{"class":94},[84,150202,150036],{"class":477},[84,150204,523],{"class":473},[84,150206,150041],{"class":477},[84,150208,150209,150211,150213,150215],{"class":86,"line":120},[84,150210,31172],{"class":94},[84,150212,150048],{"class":477},[84,150214,523],{"class":473},[84,150216,150053],{"class":477},[84,150218,150219],{"class":86,"line":131},[84,150220,2729],{"emptyLinePlaceholder":403},[84,150222,150223,150225,150228],{"class":86,"line":145},[84,150224,31128],{"class":473},[84,150226,150227],{"class":94}," __str__",[84,150229,31134],{"class":477},[84,150231,150232,150234,150237,150240,150242,150244,150246,150249,150251,150253,150255],{"class":86,"line":156},[84,150233,15081],{"class":473},[84,150235,150236],{"class":473}," f",[84,150238,150239],{"class":104},"\"Student(name=",[84,150241,149698],{"class":94},[84,150243,80627],{"class":477},[84,150245,1419],{"class":94},[84,150247,150248],{"class":104},", age=",[84,150250,149698],{"class":94},[84,150252,80639],{"class":477},[84,150254,1419],{"class":94},[84,150256,150257],{"class":104},")\"\n",[84,150259,150260],{"class":86,"line":164},[84,150261,2729],{"emptyLinePlaceholder":403},[84,150263,150264],{"class":86,"line":175},[84,150265,2729],{"emptyLinePlaceholder":403},[84,150267,150268,150270,150272,150274,150276,150278,150280],{"class":86,"line":185},[84,150269,149727],{"class":477},[84,150271,523],{"class":473},[84,150273,150131],{"class":477},[84,150275,150134],{"class":104},[84,150277,12764],{"class":477},[84,150279,1123],{"class":94},[84,150281,484],{"class":477},[84,150283,150284,150286],{"class":86,"line":195},[84,150285,30742],{"class":94},[84,150287,150288],{"class":477},"(student)\n",[14,150290,150292],{"id":150291},"_117-封装","11.7 封装",[35,150294,150295],{},"封装就是把数据和方法放到类中，并控制访问方式。",[35,150297,150298],{},"Python 中以双下划线开头的属性通常视为私有属性。",[75,150300,150302],{"className":30705,"code":150301,"language":30707,"meta":66,"style":66},"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",[81,150303,150304,150313,150322,150334,150346,150350,150359,150368,150372,150382,150395,150406,150411,150422,150426,150435,150447,150458,150462,150475,150486,150490,150501,150505,150509,150527,150536,150545],{"__ignoreMap":66},[84,150305,150306,150308,150311],{"class":86,"line":87},[84,150307,15023],{"class":473},[84,150309,150310],{"class":90}," Account",[84,150312,4068],{"class":477},[84,150314,150315,150317,150319],{"class":86,"line":98},[84,150316,31128],{"class":473},[84,150318,31131],{"class":94},[84,150320,150321],{"class":477},"(self, owner, balance):\n",[84,150323,150324,150326,150329,150331],{"class":86,"line":70},[84,150325,31172],{"class":94},[84,150327,150328],{"class":477},".owner ",[84,150330,523],{"class":473},[84,150332,150333],{"class":477}," owner\n",[84,150335,150336,150338,150341,150343],{"class":86,"line":120},[84,150337,31172],{"class":94},[84,150339,150340],{"class":477},".__balance ",[84,150342,523],{"class":473},[84,150344,150345],{"class":477}," balance\n",[84,150347,150348],{"class":86,"line":131},[84,150349,2729],{"emptyLinePlaceholder":403},[84,150351,150352,150354,150357],{"class":86,"line":145},[84,150353,31128],{"class":473},[84,150355,150356],{"class":90}," get_balance",[84,150358,31134],{"class":477},[84,150360,150361,150363,150365],{"class":86,"line":156},[84,150362,15081],{"class":473},[84,150364,39200],{"class":94},[84,150366,150367],{"class":477},".__balance\n",[84,150369,150370],{"class":86,"line":164},[84,150371,2729],{"emptyLinePlaceholder":403},[84,150373,150374,150376,150379],{"class":86,"line":175},[84,150375,31128],{"class":473},[84,150377,150378],{"class":90}," deposit",[84,150380,150381],{"class":477},"(self, money):\n",[84,150383,150384,150386,150389,150391,150393],{"class":86,"line":185},[84,150385,2826],{"class":473},[84,150387,150388],{"class":477}," money ",[84,150390,1928],{"class":473},[84,150392,4422],{"class":94},[84,150394,4068],{"class":477},[84,150396,150397,150399,150401,150404],{"class":86,"line":195},[84,150398,34977],{"class":94},[84,150400,478],{"class":477},[84,150402,150403],{"class":104},"\"存款金额必须大于0\"",[84,150405,484],{"class":477},[84,150407,150408],{"class":86,"line":206},[84,150409,150410],{"class":473},"            return\n",[84,150412,150413,150415,150417,150419],{"class":86,"line":217},[84,150414,31172],{"class":94},[84,150416,150340],{"class":477},[84,150418,9806],{"class":473},[84,150420,150421],{"class":477}," money\n",[84,150423,150424],{"class":86,"line":227},[84,150425,2729],{"emptyLinePlaceholder":403},[84,150427,150428,150430,150433],{"class":86,"line":238},[84,150429,31128],{"class":473},[84,150431,150432],{"class":90}," withdraw",[84,150434,150381],{"class":477},[84,150436,150437,150439,150441,150443,150445],{"class":86,"line":249},[84,150438,2826],{"class":473},[84,150440,150388],{"class":477},[84,150442,1928],{"class":473},[84,150444,4422],{"class":94},[84,150446,4068],{"class":477},[84,150448,150449,150451,150453,150456],{"class":86,"line":262},[84,150450,34977],{"class":94},[84,150452,478],{"class":477},[84,150454,150455],{"class":104},"\"取款金额必须大于0\"",[84,150457,484],{"class":477},[84,150459,150460],{"class":86,"line":273},[84,150461,150410],{"class":473},[84,150463,150464,150466,150468,150470,150472],{"class":86,"line":283},[84,150465,2826],{"class":473},[84,150467,150388],{"class":477},[84,150469,1433],{"class":473},[84,150471,39200],{"class":94},[84,150473,150474],{"class":477},".__balance:\n",[84,150476,150477,150479,150481,150484],{"class":86,"line":294},[84,150478,34977],{"class":94},[84,150480,478],{"class":477},[84,150482,150483],{"class":104},"\"余额不足\"",[84,150485,484],{"class":477},[84,150487,150488],{"class":86,"line":2028},[84,150489,150410],{"class":473},[84,150491,150492,150494,150496,150499],{"class":86,"line":2057},[84,150493,31172],{"class":94},[84,150495,150340],{"class":477},[84,150497,150498],{"class":473},"-=",[84,150500,150421],{"class":477},[84,150502,150503],{"class":86,"line":2062},[84,150504,2729],{"emptyLinePlaceholder":403},[84,150506,150507],{"class":86,"line":2079},[84,150508,2729],{"emptyLinePlaceholder":403},[84,150510,150511,150514,150516,150519,150521,150523,150525],{"class":86,"line":2084},[84,150512,150513],{"class":477},"account ",[84,150515,523],{"class":473},[84,150517,150518],{"class":477}," Account(",[84,150520,150134],{"class":104},[84,150522,12764],{"class":477},[84,150524,6739],{"class":94},[84,150526,484],{"class":477},[84,150528,150529,150532,150534],{"class":86,"line":2089},[84,150530,150531],{"class":477},"account.deposit(",[84,150533,2052],{"class":94},[84,150535,484],{"class":477},[84,150537,150538,150541,150543],{"class":86,"line":2094},[84,150539,150540],{"class":477},"account.withdraw(",[84,150542,784],{"class":94},[84,150544,484],{"class":477},[84,150546,150547,150549],{"class":86,"line":2108},[84,150548,30742],{"class":94},[84,150550,150551],{"class":477},"(account.get_balance())\n",[35,150553,150554],{},"封装的意义是避免外部随意修改内部状态。",[14,150556,150558],{"id":150557},"_118-继承","11.8 继承",[35,150560,150561],{},"继承可以让子类复用父类的属性和方法。",[75,150563,150565],{"className":30705,"code":150564,"language":30707,"meta":66,"style":66},"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",[81,150566,150567,150576,150585,150596,150600,150604,150618,150627,150638,150642,150646,150656,150661],{"__ignoreMap":66},[84,150568,150569,150571,150574],{"class":86,"line":87},[84,150570,15023],{"class":473},[84,150572,150573],{"class":90}," Animal",[84,150575,4068],{"class":477},[84,150577,150578,150580,150583],{"class":86,"line":98},[84,150579,31128],{"class":473},[84,150581,150582],{"class":90}," eat",[84,150584,31134],{"class":477},[84,150586,150587,150589,150591,150594],{"class":86,"line":70},[84,150588,32778],{"class":94},[84,150590,478],{"class":477},[84,150592,150593],{"class":104},"\"吃东西\"",[84,150595,484],{"class":477},[84,150597,150598],{"class":86,"line":120},[84,150599,2729],{"emptyLinePlaceholder":403},[84,150601,150602],{"class":86,"line":131},[84,150603,2729],{"emptyLinePlaceholder":403},[84,150605,150606,150608,150611,150613,150616],{"class":86,"line":145},[84,150607,15023],{"class":473},[84,150609,150610],{"class":90}," Dog",[84,150612,478],{"class":477},[84,150614,150615],{"class":90},"Animal",[84,150617,31113],{"class":477},[84,150619,150620,150622,150625],{"class":86,"line":156},[84,150621,31128],{"class":473},[84,150623,150624],{"class":90}," bark",[84,150626,31134],{"class":477},[84,150628,150629,150631,150633,150636],{"class":86,"line":164},[84,150630,32778],{"class":94},[84,150632,478],{"class":477},[84,150634,150635],{"class":104},"\"汪汪\"",[84,150637,484],{"class":477},[84,150639,150640],{"class":86,"line":175},[84,150641,2729],{"emptyLinePlaceholder":403},[84,150643,150644],{"class":86,"line":185},[84,150645,2729],{"emptyLinePlaceholder":403},[84,150647,150648,150651,150653],{"class":86,"line":195},[84,150649,150650],{"class":477},"dog ",[84,150652,523],{"class":473},[84,150654,150655],{"class":477}," Dog()\n",[84,150657,150658],{"class":86,"line":206},[84,150659,150660],{"class":477},"dog.eat()\n",[84,150662,150663],{"class":86,"line":217},[84,150664,150665],{"class":477},"dog.bark()\n",[35,150667,150668],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150670,150672],{"id":150671},"_119-方法重写","11.9 方法重写",[75,150674,150676],{"className":30705,"code":150675,"language":30707,"meta":66,"style":66},"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",[81,150677,150678,150686,150695,150706,150710,150714,150726,150734,150744,150748,150752,150765,150773,150784,150788,150792,150800,150810,150814,150819],{"__ignoreMap":66},[84,150679,150680,150682,150684],{"class":86,"line":87},[84,150681,15023],{"class":473},[84,150683,150573],{"class":90},[84,150685,4068],{"class":477},[84,150687,150688,150690,150693],{"class":86,"line":98},[84,150689,31128],{"class":473},[84,150691,150692],{"class":90}," speak",[84,150694,31134],{"class":477},[84,150696,150697,150699,150701,150704],{"class":86,"line":70},[84,150698,32778],{"class":94},[84,150700,478],{"class":477},[84,150702,150703],{"class":104},"\"动物叫\"",[84,150705,484],{"class":477},[84,150707,150708],{"class":86,"line":120},[84,150709,2729],{"emptyLinePlaceholder":403},[84,150711,150712],{"class":86,"line":131},[84,150713,2729],{"emptyLinePlaceholder":403},[84,150715,150716,150718,150720,150722,150724],{"class":86,"line":145},[84,150717,15023],{"class":473},[84,150719,150610],{"class":90},[84,150721,478],{"class":477},[84,150723,150615],{"class":90},[84,150725,31113],{"class":477},[84,150727,150728,150730,150732],{"class":86,"line":156},[84,150729,31128],{"class":473},[84,150731,150692],{"class":90},[84,150733,31134],{"class":477},[84,150735,150736,150738,150740,150742],{"class":86,"line":164},[84,150737,32778],{"class":94},[84,150739,478],{"class":477},[84,150741,150635],{"class":104},[84,150743,484],{"class":477},[84,150745,150746],{"class":86,"line":175},[84,150747,2729],{"emptyLinePlaceholder":403},[84,150749,150750],{"class":86,"line":185},[84,150751,2729],{"emptyLinePlaceholder":403},[84,150753,150754,150756,150759,150761,150763],{"class":86,"line":195},[84,150755,15023],{"class":473},[84,150757,150758],{"class":90}," Cat",[84,150760,478],{"class":477},[84,150762,150615],{"class":90},[84,150764,31113],{"class":477},[84,150766,150767,150769,150771],{"class":86,"line":206},[84,150768,31128],{"class":473},[84,150770,150692],{"class":90},[84,150772,31134],{"class":477},[84,150774,150775,150777,150779,150782],{"class":86,"line":217},[84,150776,32778],{"class":94},[84,150778,478],{"class":477},[84,150780,150781],{"class":104},"\"喵喵\"",[84,150783,484],{"class":477},[84,150785,150786],{"class":86,"line":227},[84,150787,2729],{"emptyLinePlaceholder":403},[84,150789,150790],{"class":86,"line":238},[84,150791,2729],{"emptyLinePlaceholder":403},[84,150793,150794,150796,150798],{"class":86,"line":249},[84,150795,150650],{"class":477},[84,150797,523],{"class":473},[84,150799,150655],{"class":477},[84,150801,150802,150805,150807],{"class":86,"line":262},[84,150803,150804],{"class":477},"cat ",[84,150806,523],{"class":473},[84,150808,150809],{"class":477}," Cat()\n",[84,150811,150812],{"class":86,"line":273},[84,150813,2729],{"emptyLinePlaceholder":403},[84,150815,150816],{"class":86,"line":283},[84,150817,150818],{"class":477},"dog.speak()\n",[84,150820,150821],{"class":86,"line":294},[84,150822,150823],{"class":477},"cat.speak()\n",[14,150825,150827],{"id":150826},"_1110-super","11.10 super",[35,150829,150830,150831,150834],{},"子类可以通过 ",[81,150832,150833],{},"super()"," 调用父类方法。",[75,150836,150838],{"className":30705,"code":150837,"language":30707,"meta":66,"style":66},"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",[81,150839,150840,150848,150857,150867,150871,150875,150887,150896,150907,150917,150921,150925,150941],{"__ignoreMap":66},[84,150841,150842,150844,150846],{"class":86,"line":87},[84,150843,15023],{"class":473},[84,150845,15898],{"class":90},[84,150847,4068],{"class":477},[84,150849,150850,150852,150854],{"class":86,"line":98},[84,150851,31128],{"class":473},[84,150853,31131],{"class":94},[84,150855,150856],{"class":477},"(self, name):\n",[84,150858,150859,150861,150863,150865],{"class":86,"line":70},[84,150860,31172],{"class":94},[84,150862,150036],{"class":477},[84,150864,523],{"class":473},[84,150866,150041],{"class":477},[84,150868,150869],{"class":86,"line":120},[84,150870,2729],{"emptyLinePlaceholder":403},[84,150872,150873],{"class":86,"line":131},[84,150874,2729],{"emptyLinePlaceholder":403},[84,150876,150877,150879,150881,150883,150885],{"class":86,"line":145},[84,150878,15023],{"class":473},[84,150880,8227],{"class":90},[84,150882,478],{"class":477},[84,150884,19375],{"class":90},[84,150886,31113],{"class":477},[84,150888,150889,150891,150893],{"class":86,"line":156},[84,150890,31128],{"class":473},[84,150892,31131],{"class":94},[84,150894,150895],{"class":477},"(self, name, score):\n",[84,150897,150898,150900,150902,150904],{"class":86,"line":164},[84,150899,31144],{"class":94},[84,150901,17590],{"class":477},[84,150903,31156],{"class":94},[84,150905,150906],{"class":477},"(name)\n",[84,150908,150909,150911,150913,150915],{"class":86,"line":175},[84,150910,31172],{"class":94},[84,150912,150060],{"class":477},[84,150914,523],{"class":473},[84,150916,1919],{"class":477},[84,150918,150919],{"class":86,"line":185},[84,150920,2729],{"emptyLinePlaceholder":403},[84,150922,150923],{"class":86,"line":195},[84,150924,2729],{"emptyLinePlaceholder":403},[84,150926,150927,150929,150931,150933,150935,150937,150939],{"class":86,"line":206},[84,150928,149727],{"class":477},[84,150930,523],{"class":473},[84,150932,150131],{"class":477},[84,150934,150134],{"class":104},[84,150936,12764],{"class":477},[84,150938,1462],{"class":94},[84,150940,484],{"class":477},[84,150942,150943,150945],{"class":86,"line":217},[84,150944,30742],{"class":94},[84,150946,150947],{"class":477},"(student.name, student.score)\n",[14,150949,150951],{"id":150950},"_1111-多态","11.11 多态",[35,150953,150954],{},"多态指不同对象响应同一个方法，表现出不同结果。",[75,150956,150958],{"className":30705,"code":150957,"language":30707,"meta":66,"style":66},"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",[81,150959,150960,150968,150976,150986,150990,150994,151002,151010,151020,151024,151028,151038,151043,151047,151051,151056],{"__ignoreMap":66},[84,150961,150962,150964,150966],{"class":86,"line":87},[84,150963,15023],{"class":473},[84,150965,150610],{"class":90},[84,150967,4068],{"class":477},[84,150969,150970,150972,150974],{"class":86,"line":98},[84,150971,31128],{"class":473},[84,150973,150692],{"class":90},[84,150975,31134],{"class":477},[84,150977,150978,150980,150982,150984],{"class":86,"line":70},[84,150979,32778],{"class":94},[84,150981,478],{"class":477},[84,150983,150635],{"class":104},[84,150985,484],{"class":477},[84,150987,150988],{"class":86,"line":120},[84,150989,2729],{"emptyLinePlaceholder":403},[84,150991,150992],{"class":86,"line":131},[84,150993,2729],{"emptyLinePlaceholder":403},[84,150995,150996,150998,151000],{"class":86,"line":145},[84,150997,15023],{"class":473},[84,150999,150758],{"class":90},[84,151001,4068],{"class":477},[84,151003,151004,151006,151008],{"class":86,"line":156},[84,151005,31128],{"class":473},[84,151007,150692],{"class":90},[84,151009,31134],{"class":477},[84,151011,151012,151014,151016,151018],{"class":86,"line":164},[84,151013,32778],{"class":94},[84,151015,478],{"class":477},[84,151017,150781],{"class":104},[84,151019,484],{"class":477},[84,151021,151022],{"class":86,"line":175},[84,151023,2729],{"emptyLinePlaceholder":403},[84,151025,151026],{"class":86,"line":185},[84,151027,2729],{"emptyLinePlaceholder":403},[84,151029,151030,151032,151035],{"class":86,"line":195},[84,151031,32274],{"class":473},[84,151033,151034],{"class":90}," make_sound",[84,151036,151037],{"class":477},"(animal):\n",[84,151039,151040],{"class":86,"line":206},[84,151041,151042],{"class":477},"    animal.speak()\n",[84,151044,151045],{"class":86,"line":217},[84,151046,2729],{"emptyLinePlaceholder":403},[84,151048,151049],{"class":86,"line":227},[84,151050,2729],{"emptyLinePlaceholder":403},[84,151052,151053],{"class":86,"line":238},[84,151054,151055],{"class":477},"make_sound(Dog())\n",[84,151057,151058],{"class":86,"line":249},[84,151059,151060],{"class":477},"make_sound(Cat())\n",[35,151062,151063],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151065,151067],{"id":151066},"_1112-类属性和实例属性","11.12 类属性和实例属性",[35,151069,151070],{},"实例属性属于对象：",[75,151072,151074],{"className":30705,"code":151073,"language":30707,"meta":66,"style":66},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[81,151075,151076,151084,151092],{"__ignoreMap":66},[84,151077,151078,151080,151082],{"class":86,"line":87},[84,151079,15023],{"class":473},[84,151081,8227],{"class":90},[84,151083,4068],{"class":477},[84,151085,151086,151088,151090],{"class":86,"line":98},[84,151087,31128],{"class":473},[84,151089,31131],{"class":94},[84,151091,150856],{"class":477},[84,151093,151094,151096,151098,151100],{"class":86,"line":70},[84,151095,31172],{"class":94},[84,151097,150036],{"class":477},[84,151099,523],{"class":473},[84,151101,150041],{"class":477},[35,151103,151104],{},"类属性属于类，所有对象共享：",[75,151106,151108],{"className":30705,"code":151107,"language":30707,"meta":66,"style":66},"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",[81,151109,151110,151118,151128,151132,151140,151150,151154,151158,151171,151185,151189,151196,151203],{"__ignoreMap":66},[84,151111,151112,151114,151116],{"class":86,"line":87},[84,151113,15023],{"class":473},[84,151115,8227],{"class":90},[84,151117,4068],{"class":477},[84,151119,151120,151123,151125],{"class":86,"line":98},[84,151121,151122],{"class":477},"    school ",[84,151124,523],{"class":473},[84,151126,151127],{"class":104}," \"黑马学校\"\n",[84,151129,151130],{"class":86,"line":70},[84,151131,2729],{"emptyLinePlaceholder":403},[84,151133,151134,151136,151138],{"class":86,"line":120},[84,151135,31128],{"class":473},[84,151137,31131],{"class":94},[84,151139,150856],{"class":477},[84,151141,151142,151144,151146,151148],{"class":86,"line":131},[84,151143,31172],{"class":94},[84,151145,150036],{"class":477},[84,151147,523],{"class":473},[84,151149,150041],{"class":477},[84,151151,151152],{"class":86,"line":145},[84,151153,2729],{"emptyLinePlaceholder":403},[84,151155,151156],{"class":86,"line":156},[84,151157,2729],{"emptyLinePlaceholder":403},[84,151159,151160,151163,151165,151167,151169],{"class":86,"line":164},[84,151161,151162],{"class":477},"s1 ",[84,151164,523],{"class":473},[84,151166,150131],{"class":477},[84,151168,150134],{"class":104},[84,151170,484],{"class":477},[84,151172,151173,151176,151178,151180,151183],{"class":86,"line":175},[84,151174,151175],{"class":477},"s2 ",[84,151177,523],{"class":473},[84,151179,150131],{"class":477},[84,151181,151182],{"class":104},"\"小红\"",[84,151184,484],{"class":477},[84,151186,151187],{"class":86,"line":185},[84,151188,2729],{"emptyLinePlaceholder":403},[84,151190,151191,151193],{"class":86,"line":195},[84,151192,30742],{"class":94},[84,151194,151195],{"class":477},"(s1.school)\n",[84,151197,151198,151200],{"class":86,"line":206},[84,151199,30742],{"class":94},[84,151201,151202],{"class":477},"(s2.school)\n",[84,151204,151205,151207],{"class":86,"line":217},[84,151206,30742],{"class":94},[84,151208,151209],{"class":477},"(Student.school)\n",[35,151211,151212],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151214,151216],{"id":151215},"_1113-类方法和静态方法","11.13 类方法和静态方法",[23,151218,151220],{"id":151219},"_11131-类方法","11.13.1 类方法",[35,151222,151223,151224,151227,151228,28712],{},"类方法使用 ",[81,151225,151226],{},"@classmethod","，第一个参数通常是 ",[81,151229,151230],{},"cls",[75,151232,151234],{"className":30705,"code":151233,"language":30707,"meta":66,"style":66},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[81,151235,151236,151244,151252,151256,151264,151274,151284,151288,151292],{"__ignoreMap":66},[84,151237,151238,151240,151242],{"class":86,"line":87},[84,151239,15023],{"class":473},[84,151241,8227],{"class":90},[84,151243,4068],{"class":477},[84,151245,151246,151248,151250],{"class":86,"line":98},[84,151247,151122],{"class":477},[84,151249,523],{"class":473},[84,151251,151127],{"class":104},[84,151253,151254],{"class":86,"line":70},[84,151255,2729],{"emptyLinePlaceholder":403},[84,151257,151258,151261],{"class":86,"line":120},[84,151259,151260],{"class":90},"    @",[84,151262,151263],{"class":94},"classmethod\n",[84,151265,151266,151268,151271],{"class":86,"line":131},[84,151267,31128],{"class":473},[84,151269,151270],{"class":90}," get_school",[84,151272,151273],{"class":477},"(cls):\n",[84,151275,151276,151278,151281],{"class":86,"line":145},[84,151277,15081],{"class":473},[84,151279,151280],{"class":94}," cls",[84,151282,151283],{"class":477},".school\n",[84,151285,151286],{"class":86,"line":156},[84,151287,2729],{"emptyLinePlaceholder":403},[84,151289,151290],{"class":86,"line":164},[84,151291,2729],{"emptyLinePlaceholder":403},[84,151293,151294,151296],{"class":86,"line":175},[84,151295,30742],{"class":94},[84,151297,151298],{"class":477},"(Student.get_school())\n",[23,151300,151302],{"id":151301},"_11132-静态方法","11.13.2 静态方法",[35,151304,151305,151306,151309],{},"静态方法使用 ",[81,151307,151308],{},"@staticmethod","，不需要访问实例和类。",[75,151311,151313],{"className":30705,"code":151312,"language":30707,"meta":66,"style":66},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[81,151314,151315,151324,151331,151340,151351,151355,151359],{"__ignoreMap":66},[84,151316,151317,151319,151322],{"class":86,"line":87},[84,151318,15023],{"class":473},[84,151320,151321],{"class":90}," MathUtils",[84,151323,4068],{"class":477},[84,151325,151326,151328],{"class":86,"line":98},[84,151327,151260],{"class":90},[84,151329,151330],{"class":94},"staticmethod\n",[84,151332,151333,151335,151337],{"class":86,"line":70},[84,151334,31128],{"class":473},[84,151336,5538],{"class":90},[84,151338,151339],{"class":477},"(a, b):\n",[84,151341,151342,151344,151346,151348],{"class":86,"line":120},[84,151343,15081],{"class":473},[84,151345,11198],{"class":477},[84,151347,954],{"class":473},[84,151349,151350],{"class":477}," b\n",[84,151352,151353],{"class":86,"line":131},[84,151354,2729],{"emptyLinePlaceholder":403},[84,151356,151357],{"class":86,"line":145},[84,151358,2729],{"emptyLinePlaceholder":403},[84,151360,151361,151363,151366,151368,151370,151372],{"class":86,"line":156},[84,151362,30742],{"class":94},[84,151364,151365],{"class":477},"(MathUtils.add(",[84,151367,692],{"class":94},[84,151369,12764],{"class":477},[84,151371,553],{"class":94},[84,151373,30824],{"class":477},[35,151375,151376],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151378,151380],{"id":151379},"_1114-dataclass","11.14 dataclass",[35,151382,151383,151386],{},[81,151384,151385],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[75,151388,151390],{"className":30705,"code":151389,"language":30707,"meta":66,"style":66},"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",[81,151391,151392,151404,151408,151412,151417,151425,151433,151441,151449,151453,151457,151477],{"__ignoreMap":66},[84,151393,151394,151396,151399,151401],{"class":86,"line":87},[84,151395,31064],{"class":473},[84,151397,151398],{"class":477}," dataclasses ",[84,151400,30719],{"class":473},[84,151402,151403],{"class":477}," dataclass\n",[84,151405,151406],{"class":86,"line":98},[84,151407,2729],{"emptyLinePlaceholder":403},[84,151409,151410],{"class":86,"line":70},[84,151411,2729],{"emptyLinePlaceholder":403},[84,151413,151414],{"class":86,"line":120},[84,151415,151416],{"class":90},"@dataclass\n",[84,151418,151419,151421,151423],{"class":86,"line":131},[84,151420,15023],{"class":473},[84,151422,8227],{"class":90},[84,151424,4068],{"class":477},[84,151426,151427,151430],{"class":86,"line":145},[84,151428,151429],{"class":477},"    name: ",[84,151431,151432],{"class":94},"str\n",[84,151434,151435,151438],{"class":86,"line":156},[84,151436,151437],{"class":477},"    age: ",[84,151439,151440],{"class":94},"int\n",[84,151442,151443,151446],{"class":86,"line":164},[84,151444,151445],{"class":477},"    score: ",[84,151447,151448],{"class":94},"float\n",[84,151450,151451],{"class":86,"line":175},[84,151452,2729],{"emptyLinePlaceholder":403},[84,151454,151455],{"class":86,"line":185},[84,151456,2729],{"emptyLinePlaceholder":403},[84,151458,151459,151461,151463,151465,151467,151469,151471,151473,151475],{"class":86,"line":195},[84,151460,149727],{"class":477},[84,151462,523],{"class":473},[84,151464,150131],{"class":477},[84,151466,150134],{"class":104},[84,151468,12764],{"class":477},[84,151470,1123],{"class":94},[84,151472,12764],{"class":477},[84,151474,1462],{"class":94},[84,151476,484],{"class":477},[84,151478,151479,151481],{"class":86,"line":206},[84,151480,30742],{"class":94},[84,151482,150288],{"class":477},[35,151484,151485,151486,687,151488,151491],{},"它会自动生成 ",[81,151487,31156],{},[81,151489,151490],{},"__repr__"," 等方法。适合数据模型类。",[14,151493,151495],{"id":151494},"_1115-小案例学生类","11.15 小案例：学生类",[75,151497,151499],{"className":30705,"code":151498,"language":30707,"meta":66,"style":66},"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",[81,151500,151501,151509,151518,151530,151540,151550,151560,151564,151573,151586,151590,151599,151605,151617,151629,151641,151653,151657,151661,151667,151677,151686,151696,151704,151712,151721,151725,151729,151737,151773,151777,151781,151806,151813],{"__ignoreMap":66},[84,151502,151503,151505,151507],{"class":86,"line":87},[84,151504,15023],{"class":473},[84,151506,8227],{"class":90},[84,151508,4068],{"class":477},[84,151510,151511,151513,151515],{"class":86,"line":98},[84,151512,31128],{"class":473},[84,151514,31131],{"class":94},[84,151516,151517],{"class":477},"(self, student_id, name, age, score):\n",[84,151519,151520,151522,151525,151527],{"class":86,"line":70},[84,151521,31172],{"class":94},[84,151523,151524],{"class":477},".student_id ",[84,151526,523],{"class":473},[84,151528,151529],{"class":477}," student_id\n",[84,151531,151532,151534,151536,151538],{"class":86,"line":120},[84,151533,31172],{"class":94},[84,151535,150036],{"class":477},[84,151537,523],{"class":473},[84,151539,150041],{"class":477},[84,151541,151542,151544,151546,151548],{"class":86,"line":131},[84,151543,31172],{"class":94},[84,151545,150048],{"class":477},[84,151547,523],{"class":473},[84,151549,150053],{"class":477},[84,151551,151552,151554,151556,151558],{"class":86,"line":145},[84,151553,31172],{"class":94},[84,151555,150060],{"class":477},[84,151557,523],{"class":473},[84,151559,1919],{"class":477},[84,151561,151562],{"class":86,"line":156},[84,151563,2729],{"emptyLinePlaceholder":403},[84,151565,151566,151568,151571],{"class":86,"line":164},[84,151567,31128],{"class":473},[84,151569,151570],{"class":90}," is_passed",[84,151572,31134],{"class":477},[84,151574,151575,151577,151579,151581,151583],{"class":86,"line":175},[84,151576,15081],{"class":473},[84,151578,39200],{"class":94},[84,151580,150060],{"class":477},[84,151582,2040],{"class":473},[84,151584,151585],{"class":94}," 60\n",[84,151587,151588],{"class":86,"line":185},[84,151589,2729],{"emptyLinePlaceholder":403},[84,151591,151592,151594,151597],{"class":86,"line":195},[84,151593,31128],{"class":473},[84,151595,151596],{"class":90}," to_dict",[84,151598,31134],{"class":477},[84,151600,151601,151603],{"class":86,"line":206},[84,151602,15081],{"class":473},[84,151604,15901],{"class":477},[84,151606,151607,151610,151612,151614],{"class":86,"line":217},[84,151608,151609],{"class":104},"            \"student_id\"",[84,151611,51764],{"class":477},[84,151613,31150],{"class":94},[84,151615,151616],{"class":477},".student_id,\n",[84,151618,151619,151622,151624,151626],{"class":86,"line":227},[84,151620,151621],{"class":104},"            \"name\"",[84,151623,51764],{"class":477},[84,151625,31150],{"class":94},[84,151627,151628],{"class":477},".name,\n",[84,151630,151631,151634,151636,151638],{"class":86,"line":238},[84,151632,151633],{"class":104},"            \"age\"",[84,151635,51764],{"class":477},[84,151637,31150],{"class":94},[84,151639,151640],{"class":477},".age,\n",[84,151642,151643,151646,151648,151650],{"class":86,"line":249},[84,151644,151645],{"class":104},"            \"score\"",[84,151647,51764],{"class":477},[84,151649,31150],{"class":94},[84,151651,151652],{"class":477},".score,\n",[84,151654,151655],{"class":86,"line":262},[84,151656,2858],{"class":477},[84,151658,151659],{"class":86,"line":273},[84,151660,2729],{"emptyLinePlaceholder":403},[84,151662,151663,151665],{"class":86,"line":283},[84,151664,151260],{"class":90},[84,151666,151263],{"class":94},[84,151668,151669,151671,151674],{"class":86,"line":294},[84,151670,31128],{"class":473},[84,151672,151673],{"class":90}," from_dict",[84,151675,151676],{"class":477},"(cls, data):\n",[84,151678,151679,151681,151683],{"class":86,"line":2028},[84,151680,15081],{"class":473},[84,151682,151280],{"class":94},[84,151684,151685],{"class":477},"(\n",[84,151687,151688,151691,151694],{"class":86,"line":2057},[84,151689,151690],{"class":477},"            data[",[84,151692,151693],{"class":104},"\"student_id\"",[84,151695,88162],{"class":477},[84,151697,151698,151700,151702],{"class":86,"line":2062},[84,151699,151690],{"class":477},[84,151701,63005],{"class":104},[84,151703,88162],{"class":477},[84,151705,151706,151708,151710],{"class":86,"line":2079},[84,151707,151690],{"class":477},[84,151709,69450],{"class":104},[84,151711,88162],{"class":477},[84,151713,151714,151716,151719],{"class":86,"line":2084},[84,151715,151690],{"class":477},[84,151717,151718],{"class":104},"\"score\"",[84,151720,88162],{"class":477},[84,151722,151723],{"class":86,"line":2089},[84,151724,38453],{"class":477},[84,151726,151727],{"class":86,"line":2094},[84,151728,2729],{"emptyLinePlaceholder":403},[84,151730,151731,151733,151735],{"class":86,"line":2108},[84,151732,31128],{"class":473},[84,151734,150227],{"class":94},[84,151736,31134],{"class":477},[84,151738,151739,151741,151743,151745,151747,151750,151752,151755,151757,151759,151761,151763,151765,151767,151769,151771],{"class":86,"line":2113},[84,151740,15081],{"class":473},[84,151742,150236],{"class":473},[84,151744,725],{"class":104},[84,151746,149698],{"class":94},[84,151748,151749],{"class":477},".student_id",[84,151751,1419],{"class":94},[84,151753,151754],{"class":94}," {self",[84,151756,80627],{"class":477},[84,151758,1419],{"class":94},[84,151760,151754],{"class":94},[84,151762,80639],{"class":477},[84,151764,1419],{"class":94},[84,151766,151754],{"class":94},[84,151768,150108],{"class":477},[84,151770,1419],{"class":94},[84,151772,25461],{"class":104},[84,151774,151775],{"class":86,"line":2906},[84,151776,2729],{"emptyLinePlaceholder":403},[84,151778,151779],{"class":86,"line":2920},[84,151780,2729],{"emptyLinePlaceholder":403},[84,151782,151783,151785,151787,151789,151792,151794,151796,151798,151800,151802,151804],{"class":86,"line":2928},[84,151784,149727],{"class":477},[84,151786,523],{"class":473},[84,151788,150131],{"class":477},[84,151790,151791],{"class":104},"\"001\"",[84,151793,12764],{"class":477},[84,151795,150134],{"class":104},[84,151797,12764],{"class":477},[84,151799,1123],{"class":94},[84,151801,12764],{"class":477},[84,151803,1462],{"class":94},[84,151805,484],{"class":477},[84,151807,151808,151810],{"class":86,"line":2933},[84,151809,30742],{"class":94},[84,151811,151812],{"class":477},"(student.is_passed())\n",[84,151814,151815,151817],{"class":86,"line":2939},[84,151816,30742],{"class":94},[84,151818,151819],{"class":477},"(student.to_dict())\n",[35,151821,151822,101344,151825,151828],{},[81,151823,151824],{},"to_dict()",[81,151826,151827],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151830,151832],{"id":151831},"_1116-易错点","11.16 易错点",[28,151834,151835,151841,151847,151852,151855,151858],{},[31,151836,151837,151838,28712],{},"类名推荐使用大驼峰，如 ",[81,151839,151840],{},"StudentManager",[31,151842,151843,151844,151846],{},"方法第一个参数必须写 ",[81,151845,31150],{},"，调用时不用传。",[31,151848,151849,151851],{},[81,151850,31156],{}," 不是普通方法，它在创建对象时自动执行。",[31,151853,151854],{},"私有属性不是绝对安全，只是约定和名称改写。",[31,151856,151857],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[31,151859,151860],{},"类中方法太多时，说明职责可能过重。",[14,151862,151864],{"id":151863},"_1117-本章练习","11.17 本章练习",[28,151866,151867,151873,151879,151884,151897],{},[31,151868,151869,151870,151872],{},"定义 ",[81,151871,149814],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[31,151874,151869,151875,151878],{},[81,151876,151877],{},"Account"," 类，实现存款、取款、查询余额。",[31,151880,151869,151881,151883],{},[81,151882,17555],{}," 类，计算圆的周长和面积。",[31,151885,151869,151886,687,151889,151892,151893,151896],{},[81,151887,151888],{},"Dog",[81,151890,151891],{},"Cat"," 类，并用同一个函数调用它们的 ",[81,151894,151895],{},"speak()"," 方法。",[31,151898,104692,151899,151901,151902,28712],{},[81,151900,151385],{}," 定义一个商品类 ",[81,151903,151904],{},"Product",[389,151906,151907],{},"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":66,"searchDepth":98,"depth":98,"links":151909},[151910,151911,151912,151913,151914,151915,151917,151918,151919,151920,151921,151922,151923,151927,151928,151929,151930],{"id":149578,"depth":98,"text":149579},{"id":149761,"depth":98,"text":149762},{"id":149825,"depth":98,"text":149826},{"id":149902,"depth":98,"text":149903},{"id":150001,"depth":98,"text":150002},{"id":150165,"depth":98,"text":151916},"11.6 str",{"id":150291,"depth":98,"text":150292},{"id":150557,"depth":98,"text":150558},{"id":150671,"depth":98,"text":150672},{"id":150826,"depth":98,"text":150827},{"id":150950,"depth":98,"text":150951},{"id":151066,"depth":98,"text":151067},{"id":151215,"depth":98,"text":151216,"children":151924},[151925,151926],{"id":151219,"depth":70,"text":151220},{"id":151301,"depth":70,"text":151302},{"id":151379,"depth":98,"text":151380},{"id":151494,"depth":98,"text":151495},{"id":151831,"depth":98,"text":151832},{"id":151863,"depth":98,"text":151864},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149570,"description":400},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151937,"title":151938,"body":151939,"description":400,"extension":401,"meta":155252,"navigation":403,"path":155253,"seo":155254,"stem":155255,"__hash__":155256},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151940,"toc":155228},[151941,151944,151948,151951,151954,151983,151986,151994,151998,152002,152005,152028,152031,152037,152041,153487,153490,153511,153515,153518,153530,153533,153717,153720,153846,153849,153853,153857,153993,153997,154083,154087,154169,154173,154210,154214,154403,154407,154410,154640,154644,154647,154828,154831,154835,154838,154844,154847,154873,154877,154880,154894,154897,154922,154925,154939,154942,154959,154962,154979,154982,154999,155003,155029,155033,155056,155060,155063,155065,155071,155073,155094,155097,155103,155109,155113,155116,155192,155195,155199,155225],[10,151942,151938],{"id":151943},"_12-综合案例与复习路线",[14,151945,151947],{"id":151946},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[35,151949,151950],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[35,151952,151953],{},"一个合格的入门综合项目最好覆盖：",[28,151955,151956,151959,151962,151965,151968,151971,151974,151977,151980],{},[31,151957,151958],{},"输入输出。",[31,151960,151961],{},"判断和循环。",[31,151963,151964],{},"函数拆分。",[31,151966,151967],{},"列表、字典等容器。",[31,151969,151970],{},"文件持久化。",[31,151972,151973],{},"异常处理。",[31,151975,151976],{},"模块拆分。",[31,151978,151979],{},"可选：面向对象。",[31,151981,151982],{},"可选：数据可视化。",[35,151984,151985],{},"本章整理两个方向：",[28,151987,151988,151991],{},[31,151989,151990],{},"学生管理系统。",[31,151992,151993],{},"销售数据统计和可视化。",[14,151995,151997],{"id":151996},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[23,151999,152001],{"id":152000},"_1221-需求","12.2.1 需求",[35,152003,152004],{},"实现一个命令行学生管理系统：",[28,152006,152007,152010,152013,152016,152019,152022,152025],{},[31,152008,152009],{},"添加学生。",[31,152011,152012],{},"删除学生。",[31,152014,152015],{},"修改学生。",[31,152017,152018],{},"查询学生。",[31,152020,152021],{},"显示所有学生。",[31,152023,152024],{},"保存到 JSON 文件。",[31,152026,152027],{},"程序启动时自动读取 JSON 文件。",[35,152029,152030],{},"学生字段：",[75,152032,152035],{"className":152033,"code":152034,"language":5516,"meta":66},[5514],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[81,152036,152034],{"__ignoreMap":66},[14,152038,152040],{"id":152039},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[75,152042,152044],{"className":30705,"code":152043,"language":30707,"meta":66,"style":66},"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",[81,152045,152046,152052,152062,152066,152080,152084,152088,152097,152109,152115,152119,152125,152156,152166,152173,152184,152190,152194,152198,152208,152239,152265,152269,152273,152282,152293,152304,152315,152326,152337,152348,152359,152363,152367,152377,152389,152405,152412,152419,152423,152427,152437,152445,152452,152465,152475,152486,152490,152494,152503,152511,152517,152529,152537,152548,152552,152556,152565,152581,152585,152592,152603,152608,152612,152628,152643,152658,152662,152667,152675,152683,152691,152699,152703,152708,152719,152723,152727,152736,152751,152761,152765,152777,152788,152792,152796,152801,152805,152816,152820,152824,152833,152848,152856,152860,152872,152882,152886,152890,152905,152918,152931,152935,152948,152960,152972,152976,152980,152991,152995,152999,153008,153023,153031,153035,153047,153057,153061,153065,153070,153074,153078,153088,153094,153116,153135,153154,153173,153178,153182,153186,153195,153203,153214,153218,153222,153248,153258,153263,153267,153271,153279,153289,153293,153301,153306,153322,153326,153340,153345,153359,153364,153377,153382,153395,153400,153413,153418,153431,153442,153446,153452,153463,153467,153471,153483],{"__ignoreMap":66},[84,152047,152048,152050],{"class":86,"line":87},[84,152049,30719],{"class":473},[84,152051,147337],{"class":477},[84,152053,152054,152056,152058,152060],{"class":86,"line":98},[84,152055,31064],{"class":473},[84,152057,108637],{"class":477},[84,152059,30719],{"class":473},[84,152061,108642],{"class":477},[84,152063,152064],{"class":86,"line":70},[84,152065,2729],{"emptyLinePlaceholder":403},[84,152067,152068,152071,152073,152075,152078],{"class":86,"line":120},[84,152069,152070],{"class":94},"DATA_FILE",[84,152072,13893],{"class":473},[84,152074,108871],{"class":477},[84,152076,152077],{"class":104},"\"students.json\"",[84,152079,484],{"class":477},[84,152081,152082],{"class":86,"line":131},[84,152083,2729],{"emptyLinePlaceholder":403},[84,152085,152086],{"class":86,"line":145},[84,152087,2729],{"emptyLinePlaceholder":403},[84,152089,152090,152092,152095],{"class":86,"line":156},[84,152091,32274],{"class":473},[84,152093,152094],{"class":90}," load_students",[84,152096,32280],{"class":477},[84,152098,152099,152101,152103,152106],{"class":86,"line":164},[84,152100,3430],{"class":473},[84,152102,39257],{"class":473},[84,152104,152105],{"class":94}," DATA_FILE",[84,152107,152108],{"class":477},".exists():\n",[84,152110,152111,152113],{"class":86,"line":175},[84,152112,15081],{"class":473},[84,152114,52165],{"class":477},[84,152116,152117],{"class":86,"line":185},[84,152118,2729],{"emptyLinePlaceholder":403},[84,152120,152121,152123],{"class":86,"line":195},[84,152122,126030],{"class":473},[84,152124,4068],{"class":477},[84,152126,152127,152130,152132,152134,152136,152138,152140,152142,152144,152146,152148,152150,152152,152154],{"class":86,"line":206},[84,152128,152129],{"class":473},"        with",[84,152131,147037],{"class":94},[84,152133,478],{"class":477},[84,152135,152070],{"class":94},[84,152137,12764],{"class":477},[84,152139,147047],{"class":104},[84,152141,12764],{"class":477},[84,152143,147052],{"class":5545},[84,152145,523],{"class":473},[84,152147,147057],{"class":104},[84,152149,14043],{"class":477},[84,152151,31710],{"class":473},[84,152153,148399],{"class":5545},[84,152155,4068],{"class":477},[84,152157,152158,152160,152162,152164],{"class":86,"line":217},[84,152159,16061],{"class":473},[84,152161,148410],{"class":477},[84,152163,45681],{"class":5545},[84,152165,484],{"class":477},[84,152167,152168,152170],{"class":86,"line":227},[84,152169,126058],{"class":473},[84,152171,152172],{"class":477}," json.JSONDecodeError:\n",[84,152174,152175,152177,152179,152182],{"class":86,"line":238},[84,152176,32778],{"class":94},[84,152178,478],{"class":477},[84,152180,152181],{"class":104},"\"数据文件格式错误，已使用空数据启动\"",[84,152183,484],{"class":477},[84,152185,152186,152188],{"class":86,"line":249},[84,152187,15081],{"class":473},[84,152189,52165],{"class":477},[84,152191,152192],{"class":86,"line":262},[84,152193,2729],{"emptyLinePlaceholder":403},[84,152195,152196],{"class":86,"line":273},[84,152197,2729],{"emptyLinePlaceholder":403},[84,152199,152200,152202,152205],{"class":86,"line":283},[84,152201,32274],{"class":473},[84,152203,152204],{"class":90}," save_students",[84,152206,152207],{"class":477},"(students):\n",[84,152209,152210,152212,152214,152216,152218,152220,152223,152225,152227,152229,152231,152233,152235,152237],{"class":86,"line":294},[84,152211,34505],{"class":473},[84,152213,147037],{"class":94},[84,152215,478],{"class":477},[84,152217,152070],{"class":94},[84,152219,12764],{"class":477},[84,152221,152222],{"class":104},"\"w\"",[84,152224,12764],{"class":477},[84,152226,147052],{"class":5545},[84,152228,523],{"class":473},[84,152230,147057],{"class":104},[84,152232,14043],{"class":477},[84,152234,31710],{"class":473},[84,152236,148399],{"class":5545},[84,152238,4068],{"class":477},[84,152240,152241,152244,152246,152248,152250,152252,152254,152256,152259,152261,152263],{"class":86,"line":2028},[84,152242,152243],{"class":477},"        json.dump(students, ",[84,152245,45681],{"class":5545},[84,152247,12764],{"class":477},[84,152249,147383],{"class":5545},[84,152251,523],{"class":473},[84,152253,34314],{"class":94},[84,152255,12764],{"class":477},[84,152257,152258],{"class":5545},"indent",[84,152260,523],{"class":473},[84,152262,553],{"class":94},[84,152264,484],{"class":477},[84,152266,152267],{"class":86,"line":2057},[84,152268,2729],{"emptyLinePlaceholder":403},[84,152270,152271],{"class":86,"line":2062},[84,152272,2729],{"emptyLinePlaceholder":403},[84,152274,152275,152277,152280],{"class":86,"line":2079},[84,152276,32274],{"class":473},[84,152278,152279],{"class":90}," show_menu",[84,152281,32280],{"class":477},[84,152283,152284,152286,152288,152291],{"class":86,"line":2084},[84,152285,31626],{"class":94},[84,152287,478],{"class":477},[84,152289,152290],{"class":104},"\"====== 学生管理系统 ======\"",[84,152292,484],{"class":477},[84,152294,152295,152297,152299,152302],{"class":86,"line":2089},[84,152296,31626],{"class":94},[84,152298,478],{"class":477},[84,152300,152301],{"class":104},"\"1. 添加学生\"",[84,152303,484],{"class":477},[84,152305,152306,152308,152310,152313],{"class":86,"line":2094},[84,152307,31626],{"class":94},[84,152309,478],{"class":477},[84,152311,152312],{"class":104},"\"2. 删除学生\"",[84,152314,484],{"class":477},[84,152316,152317,152319,152321,152324],{"class":86,"line":2108},[84,152318,31626],{"class":94},[84,152320,478],{"class":477},[84,152322,152323],{"class":104},"\"3. 修改学生\"",[84,152325,484],{"class":477},[84,152327,152328,152330,152332,152335],{"class":86,"line":2113},[84,152329,31626],{"class":94},[84,152331,478],{"class":477},[84,152333,152334],{"class":104},"\"4. 查询学生\"",[84,152336,484],{"class":477},[84,152338,152339,152341,152343,152346],{"class":86,"line":2906},[84,152340,31626],{"class":94},[84,152342,478],{"class":477},[84,152344,152345],{"class":104},"\"5. 显示所有学生\"",[84,152347,484],{"class":477},[84,152349,152350,152352,152354,152357],{"class":86,"line":2920},[84,152351,31626],{"class":94},[84,152353,478],{"class":477},[84,152355,152356],{"class":104},"\"0. 退出系统\"",[84,152358,484],{"class":477},[84,152360,152361],{"class":86,"line":2928},[84,152362,2729],{"emptyLinePlaceholder":403},[84,152364,152365],{"class":86,"line":2933},[84,152366,2729],{"emptyLinePlaceholder":403},[84,152368,152369,152371,152374],{"class":86,"line":2939},[84,152370,32274],{"class":473},[84,152372,152373],{"class":90}," find_student",[84,152375,152376],{"class":477},"(students, student_id):\n",[84,152378,152379,152381,152384,152386],{"class":86,"line":2945},[84,152380,3530],{"class":473},[84,152382,152383],{"class":477}," student ",[84,152385,26371],{"class":473},[84,152387,152388],{"class":477}," students:\n",[84,152390,152391,152393,152396,152398,152400,152402],{"class":86,"line":2950},[84,152392,2826],{"class":473},[84,152394,152395],{"class":477}," student[",[84,152397,151693],{"class":104},[84,152399,4772],{"class":477},[84,152401,3278],{"class":473},[84,152403,152404],{"class":477}," student_id:\n",[84,152406,152407,152409],{"class":86,"line":8277},[84,152408,16061],{"class":473},[84,152410,152411],{"class":477}," student\n",[84,152413,152414,152416],{"class":86,"line":8301},[84,152415,4419],{"class":473},[84,152417,152418],{"class":94}," None\n",[84,152420,152421],{"class":86,"line":8306},[84,152422,2729],{"emptyLinePlaceholder":403},[84,152424,152425],{"class":86,"line":8312},[84,152426,2729],{"emptyLinePlaceholder":403},[84,152428,152429,152431,152434],{"class":86,"line":8339},[84,152430,32274],{"class":473},[84,152432,152433],{"class":90}," input_int",[84,152435,152436],{"class":477},"(prompt):\n",[84,152438,152439,152441,152443],{"class":86,"line":8344},[84,152440,2580],{"class":473},[84,152442,95618],{"class":94},[84,152444,4068],{"class":477},[84,152446,152447,152450],{"class":86,"line":8350},[84,152448,152449],{"class":473},"        try",[84,152451,4068],{"class":477},[84,152453,152454,152456,152458,152460,152462],{"class":86,"line":8362},[84,152455,16061],{"class":473},[84,152457,2711],{"class":94},[84,152459,478],{"class":477},[84,152461,54147],{"class":94},[84,152463,152464],{"class":477},"(prompt))\n",[84,152466,152467,152470,152473],{"class":86,"line":8374},[84,152468,152469],{"class":473},"        except",[84,152471,152472],{"class":94}," ValueError",[84,152474,4068],{"class":477},[84,152476,152477,152479,152481,152484],{"class":86,"line":8386},[84,152478,34977],{"class":94},[84,152480,478],{"class":477},[84,152482,152483],{"class":104},"\"请输入整数\"",[84,152485,484],{"class":477},[84,152487,152488],{"class":86,"line":10045},[84,152489,2729],{"emptyLinePlaceholder":403},[84,152491,152492],{"class":86,"line":10070},[84,152493,2729],{"emptyLinePlaceholder":403},[84,152495,152496,152498,152501],{"class":86,"line":10093},[84,152497,32274],{"class":473},[84,152499,152500],{"class":90}," input_float",[84,152502,152436],{"class":477},[84,152504,152505,152507,152509],{"class":86,"line":10117},[84,152506,2580],{"class":473},[84,152508,95618],{"class":94},[84,152510,4068],{"class":477},[84,152512,152513,152515],{"class":86,"line":10122},[84,152514,152449],{"class":473},[84,152516,4068],{"class":477},[84,152518,152519,152521,152523,152525,152527],{"class":86,"line":10127},[84,152520,16061],{"class":473},[84,152522,110123],{"class":94},[84,152524,478],{"class":477},[84,152526,54147],{"class":94},[84,152528,152464],{"class":477},[84,152530,152531,152533,152535],{"class":86,"line":10132},[84,152532,152469],{"class":473},[84,152534,152472],{"class":94},[84,152536,4068],{"class":477},[84,152538,152539,152541,152543,152546],{"class":86,"line":10141},[84,152540,34977],{"class":94},[84,152542,478],{"class":477},[84,152544,152545],{"class":104},"\"请输入数字\"",[84,152547,484],{"class":477},[84,152549,152550],{"class":86,"line":10146},[84,152551,2729],{"emptyLinePlaceholder":403},[84,152553,152554],{"class":86,"line":10152},[84,152555,2729],{"emptyLinePlaceholder":403},[84,152557,152558,152560,152563],{"class":86,"line":10173},[84,152559,32274],{"class":473},[84,152561,152562],{"class":90}," add_student",[84,152564,152207],{"class":477},[84,152566,152567,152570,152572,152574,152576,152579],{"class":86,"line":10179},[84,152568,152569],{"class":477},"    student_id ",[84,152571,523],{"class":473},[84,152573,60931],{"class":94},[84,152575,478],{"class":477},[84,152577,152578],{"class":104},"\"请输入学号:\"",[84,152580,484],{"class":477},[84,152582,152583],{"class":86,"line":10193},[84,152584,2729],{"emptyLinePlaceholder":403},[84,152586,152587,152589],{"class":86,"line":10199},[84,152588,3430],{"class":473},[84,152590,152591],{"class":477}," find_student(students, student_id):\n",[84,152593,152594,152596,152598,152601],{"class":86,"line":10226},[84,152595,32778],{"class":94},[84,152597,478],{"class":477},[84,152599,152600],{"class":104},"\"学号已存在\"",[84,152602,484],{"class":477},[84,152604,152605],{"class":86,"line":10235},[84,152606,152607],{"class":473},"        return\n",[84,152609,152610],{"class":86,"line":10241},[84,152611,2729],{"emptyLinePlaceholder":403},[84,152613,152614,152617,152619,152621,152623,152626],{"class":86,"line":10249},[84,152615,152616],{"class":477},"    name ",[84,152618,523],{"class":473},[84,152620,60931],{"class":94},[84,152622,478],{"class":477},[84,152624,152625],{"class":104},"\"请输入姓名:\"",[84,152627,484],{"class":477},[84,152629,152630,152633,152635,152638,152641],{"class":86,"line":10254},[84,152631,152632],{"class":477},"    age ",[84,152634,523],{"class":473},[84,152636,152637],{"class":477}," input_int(",[84,152639,152640],{"class":104},"\"请输入年龄:\"",[84,152642,484],{"class":477},[84,152644,152645,152648,152650,152653,152656],{"class":86,"line":16933},[84,152646,152647],{"class":477},"    score ",[84,152649,523],{"class":473},[84,152651,152652],{"class":477}," input_float(",[84,152654,152655],{"class":104},"\"请输入成绩:\"",[84,152657,484],{"class":477},[84,152659,152660],{"class":86,"line":16939},[84,152661,2729],{"emptyLinePlaceholder":403},[84,152663,152664],{"class":86,"line":16962},[84,152665,152666],{"class":477},"    students.append({\n",[84,152668,152669,152672],{"class":86,"line":16968},[84,152670,152671],{"class":104},"        \"student_id\"",[84,152673,152674],{"class":477},": student_id,\n",[84,152676,152677,152680],{"class":86,"line":16991},[84,152678,152679],{"class":104},"        \"name\"",[84,152681,152682],{"class":477},": name,\n",[84,152684,152685,152688],{"class":86,"line":17005},[84,152686,152687],{"class":104},"        \"age\"",[84,152689,152690],{"class":477},": age,\n",[84,152692,152693,152696],{"class":86,"line":17025},[84,152694,152695],{"class":104},"        \"score\"",[84,152697,152698],{"class":477},": score,\n",[84,152700,152701],{"class":86,"line":17031},[84,152702,33788],{"class":477},[84,152704,152705],{"class":86,"line":17042},[84,152706,152707],{"class":477},"    save_students(students)\n",[84,152709,152710,152712,152714,152717],{"class":86,"line":17065},[84,152711,31626],{"class":94},[84,152713,478],{"class":477},[84,152715,152716],{"class":104},"\"添加成功\"",[84,152718,484],{"class":477},[84,152720,152721],{"class":86,"line":17087},[84,152722,2729],{"emptyLinePlaceholder":403},[84,152724,152725],{"class":86,"line":17092},[84,152726,2729],{"emptyLinePlaceholder":403},[84,152728,152729,152731,152734],{"class":86,"line":17098},[84,152730,32274],{"class":473},[84,152732,152733],{"class":90}," delete_student",[84,152735,152207],{"class":477},[84,152737,152738,152740,152742,152744,152746,152749],{"class":86,"line":17112},[84,152739,152569],{"class":477},[84,152741,523],{"class":473},[84,152743,60931],{"class":94},[84,152745,478],{"class":477},[84,152747,152748],{"class":104},"\"请输入要删除的学号:\"",[84,152750,484],{"class":477},[84,152752,152753,152756,152758],{"class":86,"line":17125},[84,152754,152755],{"class":477},"    student ",[84,152757,523],{"class":473},[84,152759,152760],{"class":477}," find_student(students, student_id)\n",[84,152762,152763],{"class":86,"line":17130},[84,152764,2729],{"emptyLinePlaceholder":403},[84,152766,152767,152769,152771,152773,152775],{"class":86,"line":17144},[84,152768,3430],{"class":473},[84,152770,152383],{"class":477},[84,152772,39254],{"class":473},[84,152774,39260],{"class":94},[84,152776,4068],{"class":477},[84,152778,152779,152781,152783,152786],{"class":86,"line":17149},[84,152780,32778],{"class":94},[84,152782,478],{"class":477},[84,152784,152785],{"class":104},"\"学生不存在\"",[84,152787,484],{"class":477},[84,152789,152790],{"class":86,"line":17155},[84,152791,152607],{"class":473},[84,152793,152794],{"class":86,"line":17160},[84,152795,2729],{"emptyLinePlaceholder":403},[84,152797,152798],{"class":86,"line":17174},[84,152799,152800],{"class":477},"    students.remove(student)\n",[84,152802,152803],{"class":86,"line":17179},[84,152804,152707],{"class":477},[84,152806,152807,152809,152811,152814],{"class":86,"line":17184},[84,152808,31626],{"class":94},[84,152810,478],{"class":477},[84,152812,152813],{"class":104},"\"删除成功\"",[84,152815,484],{"class":477},[84,152817,152818],{"class":86,"line":17198},[84,152819,2729],{"emptyLinePlaceholder":403},[84,152821,152822],{"class":86,"line":17210},[84,152823,2729],{"emptyLinePlaceholder":403},[84,152825,152826,152828,152831],{"class":86,"line":17215},[84,152827,32274],{"class":473},[84,152829,152830],{"class":90}," update_student",[84,152832,152207],{"class":477},[84,152834,152835,152837,152839,152841,152843,152846],{"class":86,"line":17228},[84,152836,152569],{"class":477},[84,152838,523],{"class":473},[84,152840,60931],{"class":94},[84,152842,478],{"class":477},[84,152844,152845],{"class":104},"\"请输入要修改的学号:\"",[84,152847,484],{"class":477},[84,152849,152850,152852,152854],{"class":86,"line":17233},[84,152851,152755],{"class":477},[84,152853,523],{"class":473},[84,152855,152760],{"class":477},[84,152857,152858],{"class":86,"line":17238},[84,152859,2729],{"emptyLinePlaceholder":403},[84,152861,152862,152864,152866,152868,152870],{"class":86,"line":17243},[84,152863,3430],{"class":473},[84,152865,152383],{"class":477},[84,152867,39254],{"class":473},[84,152869,39260],{"class":94},[84,152871,4068],{"class":477},[84,152873,152874,152876,152878,152880],{"class":86,"line":17256},[84,152875,32778],{"class":94},[84,152877,478],{"class":477},[84,152879,152785],{"class":104},[84,152881,484],{"class":477},[84,152883,152884],{"class":86,"line":17261},[84,152885,152607],{"class":473},[84,152887,152888],{"class":86,"line":32960},[84,152889,2729],{"emptyLinePlaceholder":403},[84,152891,152892,152894,152896,152898,152900,152903],{"class":86,"line":32966},[84,152893,152616],{"class":477},[84,152895,523],{"class":473},[84,152897,60931],{"class":94},[84,152899,478],{"class":477},[84,152901,152902],{"class":104},"\"请输入新姓名:\"",[84,152904,484],{"class":477},[84,152906,152907,152909,152911,152913,152916],{"class":86,"line":32972},[84,152908,152632],{"class":477},[84,152910,523],{"class":473},[84,152912,152637],{"class":477},[84,152914,152915],{"class":104},"\"请输入新年龄:\"",[84,152917,484],{"class":477},[84,152919,152920,152922,152924,152926,152929],{"class":86,"line":32978},[84,152921,152647],{"class":477},[84,152923,523],{"class":473},[84,152925,152652],{"class":477},[84,152927,152928],{"class":104},"\"请输入新成绩:\"",[84,152930,484],{"class":477},[84,152932,152933],{"class":86,"line":32984},[84,152934,2729],{"emptyLinePlaceholder":403},[84,152936,152937,152940,152942,152944,152946],{"class":86,"line":32995},[84,152938,152939],{"class":477},"    student[",[84,152941,63005],{"class":104},[84,152943,4772],{"class":477},[84,152945,523],{"class":473},[84,152947,150041],{"class":477},[84,152949,152950,152952,152954,152956,152958],{"class":86,"line":33001},[84,152951,152939],{"class":477},[84,152953,69450],{"class":104},[84,152955,4772],{"class":477},[84,152957,523],{"class":473},[84,152959,150053],{"class":477},[84,152961,152962,152964,152966,152968,152970],{"class":86,"line":33021},[84,152963,152939],{"class":477},[84,152965,151718],{"class":104},[84,152967,4772],{"class":477},[84,152969,523],{"class":473},[84,152971,1919],{"class":477},[84,152973,152974],{"class":86,"line":33027},[84,152975,2729],{"emptyLinePlaceholder":403},[84,152977,152978],{"class":86,"line":33038},[84,152979,152707],{"class":477},[84,152981,152982,152984,152986,152989],{"class":86,"line":33044},[84,152983,31626],{"class":94},[84,152985,478],{"class":477},[84,152987,152988],{"class":104},"\"修改成功\"",[84,152990,484],{"class":477},[84,152992,152993],{"class":86,"line":33050},[84,152994,2729],{"emptyLinePlaceholder":403},[84,152996,152997],{"class":86,"line":33056},[84,152998,2729],{"emptyLinePlaceholder":403},[84,153000,153001,153003,153006],{"class":86,"line":33062},[84,153002,32274],{"class":473},[84,153004,153005],{"class":90}," query_student",[84,153007,152207],{"class":477},[84,153009,153010,153012,153014,153016,153018,153021],{"class":86,"line":33068},[84,153011,152569],{"class":477},[84,153013,523],{"class":473},[84,153015,60931],{"class":94},[84,153017,478],{"class":477},[84,153019,153020],{"class":104},"\"请输入要查询的学号:\"",[84,153022,484],{"class":477},[84,153024,153025,153027,153029],{"class":86,"line":33074},[84,153026,152755],{"class":477},[84,153028,523],{"class":473},[84,153030,152760],{"class":477},[84,153032,153033],{"class":86,"line":33080},[84,153034,2729],{"emptyLinePlaceholder":403},[84,153036,153037,153039,153041,153043,153045],{"class":86,"line":33100},[84,153038,3430],{"class":473},[84,153040,152383],{"class":477},[84,153042,39254],{"class":473},[84,153044,39260],{"class":94},[84,153046,4068],{"class":477},[84,153048,153049,153051,153053,153055],{"class":86,"line":33106},[84,153050,32778],{"class":94},[84,153052,478],{"class":477},[84,153054,152785],{"class":104},[84,153056,484],{"class":477},[84,153058,153059],{"class":86,"line":33122},[84,153060,152607],{"class":473},[84,153062,153063],{"class":86,"line":33128},[84,153064,2729],{"emptyLinePlaceholder":403},[84,153066,153067],{"class":86,"line":33142},[84,153068,153069],{"class":477},"    print_student(student)\n",[84,153071,153072],{"class":86,"line":33148},[84,153073,2729],{"emptyLinePlaceholder":403},[84,153075,153076],{"class":86,"line":33163},[84,153077,2729],{"emptyLinePlaceholder":403},[84,153079,153080,153082,153085],{"class":86,"line":33169},[84,153081,32274],{"class":473},[84,153083,153084],{"class":90}," print_student",[84,153086,153087],{"class":477},"(student):\n",[84,153089,153090,153092],{"class":86,"line":33178},[84,153091,31626],{"class":94},[84,153093,151685],{"class":477},[84,153095,153096,153099,153101,153103,153106,153109,153111,153114],{"class":86,"line":33184},[84,153097,153098],{"class":473},"        f",[84,153100,725],{"class":104},[84,153102,1369],{"class":94},[84,153104,153105],{"class":477},"student[",[84,153107,153108],{"class":104},"'student_id'",[84,153110,1413],{"class":477},[84,153112,153113],{"class":94},"}\\t",[84,153115,25461],{"class":104},[84,153117,153118,153120,153122,153124,153126,153129,153131,153133],{"class":86,"line":33193},[84,153119,153098],{"class":473},[84,153121,725],{"class":104},[84,153123,1369],{"class":94},[84,153125,153105],{"class":477},[84,153127,153128],{"class":104},"'name'",[84,153130,1413],{"class":477},[84,153132,153113],{"class":94},[84,153134,25461],{"class":104},[84,153136,153137,153139,153141,153143,153145,153148,153150,153152],{"class":86,"line":33199},[84,153138,153098],{"class":473},[84,153140,725],{"class":104},[84,153142,1369],{"class":94},[84,153144,153105],{"class":477},[84,153146,153147],{"class":104},"'age'",[84,153149,1413],{"class":477},[84,153151,153113],{"class":94},[84,153153,25461],{"class":104},[84,153155,153156,153158,153160,153162,153164,153167,153169,153171],{"class":86,"line":33205},[84,153157,153098],{"class":473},[84,153159,725],{"class":104},[84,153161,1369],{"class":94},[84,153163,153105],{"class":477},[84,153165,153166],{"class":104},"'score'",[84,153168,1413],{"class":477},[84,153170,1419],{"class":94},[84,153172,25461],{"class":104},[84,153174,153175],{"class":86,"line":33214},[84,153176,153177],{"class":477},"    )\n",[84,153179,153180],{"class":86,"line":33220},[84,153181,2729],{"emptyLinePlaceholder":403},[84,153183,153184],{"class":86,"line":33231},[84,153185,2729],{"emptyLinePlaceholder":403},[84,153187,153188,153190,153193],{"class":86,"line":33237},[84,153189,32274],{"class":473},[84,153191,153192],{"class":90}," show_all_students",[84,153194,152207],{"class":477},[84,153196,153197,153199,153201],{"class":86,"line":33256},[84,153198,3430],{"class":473},[84,153200,39257],{"class":473},[84,153202,152388],{"class":477},[84,153204,153205,153207,153209,153212],{"class":86,"line":33262},[84,153206,32778],{"class":94},[84,153208,478],{"class":477},[84,153210,153211],{"class":104},"\"暂无学生\"",[84,153213,484],{"class":477},[84,153215,153216],{"class":86,"line":33273},[84,153217,152607],{"class":473},[84,153219,153220],{"class":86,"line":33279},[84,153221,2729],{"emptyLinePlaceholder":403},[84,153223,153224,153226,153228,153231,153233,153236,153238,153241,153243,153246],{"class":86,"line":33299},[84,153225,31626],{"class":94},[84,153227,478],{"class":477},[84,153229,153230],{"class":104},"\"学号",[84,153232,1574],{"class":94},[84,153234,153235],{"class":104},"姓名",[84,153237,1574],{"class":94},[84,153239,153240],{"class":104},"年龄",[84,153242,1574],{"class":94},[84,153244,153245],{"class":104},"成绩\"",[84,153247,484],{"class":477},[84,153249,153250,153252,153254,153256],{"class":86,"line":33315},[84,153251,3530],{"class":473},[84,153253,152383],{"class":477},[84,153255,26371],{"class":473},[84,153257,152388],{"class":477},[84,153259,153260],{"class":86,"line":33321},[84,153261,153262],{"class":477},"        print_student(student)\n",[84,153264,153265],{"class":86,"line":33335},[84,153266,2729],{"emptyLinePlaceholder":403},[84,153268,153269],{"class":86,"line":33341},[84,153270,2729],{"emptyLinePlaceholder":403},[84,153272,153273,153275,153277],{"class":86,"line":33347},[84,153274,32274],{"class":473},[84,153276,2302],{"class":90},[84,153278,32280],{"class":477},[84,153280,153281,153284,153286],{"class":86,"line":33358},[84,153282,153283],{"class":477},"    students ",[84,153285,523],{"class":473},[84,153287,153288],{"class":477}," load_students()\n",[84,153290,153291],{"class":86,"line":33364},[84,153292,2729],{"emptyLinePlaceholder":403},[84,153294,153295,153297,153299],{"class":86,"line":33370},[84,153296,2580],{"class":473},[84,153298,95618],{"class":94},[84,153300,4068],{"class":477},[84,153302,153303],{"class":86,"line":33380},[84,153304,153305],{"class":477},"        show_menu()\n",[84,153307,153308,153311,153313,153315,153317,153320],{"class":86,"line":33386},[84,153309,153310],{"class":477},"        choice ",[84,153312,523],{"class":473},[84,153314,60931],{"class":94},[84,153316,478],{"class":477},[84,153318,153319],{"class":104},"\"请输入操作:\"",[84,153321,484],{"class":477},[84,153323,153324],{"class":86,"line":33397},[84,153325,2729],{"emptyLinePlaceholder":403},[84,153327,153328,153330,153333,153335,153338],{"class":86,"line":33403},[84,153329,2826],{"class":473},[84,153331,153332],{"class":477}," choice ",[84,153334,3278],{"class":473},[84,153336,153337],{"class":104}," \"1\"",[84,153339,4068],{"class":477},[84,153341,153342],{"class":86,"line":33413},[84,153343,153344],{"class":477},"            add_student(students)\n",[84,153346,153347,153350,153352,153354,153357],{"class":86,"line":33418},[84,153348,153349],{"class":473},"        elif",[84,153351,153332],{"class":477},[84,153353,3278],{"class":473},[84,153355,153356],{"class":104}," \"2\"",[84,153358,4068],{"class":477},[84,153360,153361],{"class":86,"line":33424},[84,153362,153363],{"class":477},"            delete_student(students)\n",[84,153365,153366,153368,153370,153372,153375],{"class":86,"line":33473},[84,153367,153349],{"class":473},[84,153369,153332],{"class":477},[84,153371,3278],{"class":473},[84,153373,153374],{"class":104}," \"3\"",[84,153376,4068],{"class":477},[84,153378,153379],{"class":86,"line":33520},[84,153380,153381],{"class":477},"            update_student(students)\n",[84,153383,153384,153386,153388,153390,153393],{"class":86,"line":33525},[84,153385,153349],{"class":473},[84,153387,153332],{"class":477},[84,153389,3278],{"class":473},[84,153391,153392],{"class":104}," \"4\"",[84,153394,4068],{"class":477},[84,153396,153397],{"class":86,"line":33531},[84,153398,153399],{"class":477},"            query_student(students)\n",[84,153401,153402,153404,153406,153408,153411],{"class":86,"line":33550},[84,153403,153349],{"class":473},[84,153405,153332],{"class":477},[84,153407,3278],{"class":473},[84,153409,153410],{"class":104}," \"5\"",[84,153412,4068],{"class":477},[84,153414,153415],{"class":86,"line":33556},[84,153416,153417],{"class":477},"            show_all_students(students)\n",[84,153419,153420,153422,153424,153426,153429],{"class":86,"line":33576},[84,153421,153349],{"class":473},[84,153423,153332],{"class":477},[84,153425,3278],{"class":473},[84,153427,153428],{"class":104}," \"0\"",[84,153430,4068],{"class":477},[84,153432,153433,153435,153437,153440],{"class":86,"line":33582},[84,153434,34977],{"class":94},[84,153436,478],{"class":477},[84,153438,153439],{"class":104},"\"退出系统\"",[84,153441,484],{"class":477},[84,153443,153444],{"class":86,"line":33588},[84,153445,115424],{"class":473},[84,153447,153448,153450],{"class":86,"line":33598},[84,153449,2863],{"class":473},[84,153451,4068],{"class":477},[84,153453,153454,153456,153458,153461],{"class":86,"line":33603},[84,153455,34977],{"class":94},[84,153457,478],{"class":477},[84,153459,153460],{"class":104},"\"输入错误\"",[84,153462,484],{"class":477},[84,153464,153465],{"class":86,"line":33609},[84,153466,2729],{"emptyLinePlaceholder":403},[84,153468,153469],{"class":86,"line":33625},[84,153470,2729],{"emptyLinePlaceholder":403},[84,153472,153473,153475,153477,153479,153481],{"class":86,"line":33670},[84,153474,1871],{"class":473},[84,153476,31547],{"class":94},[84,153478,101885],{"class":473},[84,153480,101888],{"class":104},[84,153482,4068],{"class":477},[84,153484,153485],{"class":86,"line":33676},[84,153486,101895],{"class":477},[35,153488,153489],{},"这个项目串联了：",[28,153491,153492,153495,153498,153501,153504,153506],{},[31,153493,153494],{},"菜单循环。",[31,153496,153497],{},"函数封装。",[31,153499,153500],{},"列表字典。",[31,153502,153503],{},"JSON 读写。",[31,153505,151973],{},[31,153507,153508,28712],{},[81,153509,153510],{},"if __name__ == \"__main__\"",[14,153512,153514],{"id":153513},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[35,153516,153517],{},"可以进一步拆成两个类：",[28,153519,153520,153525],{},[31,153521,153522,153524],{},[81,153523,149814],{},"：表示单个学生。",[31,153526,153527,153529],{},[81,153528,151840],{},"：负责学生增删改查和文件保存。",[35,153531,153532],{},"示意代码：",[75,153534,153536],{"className":30705,"code":153535,"language":30707,"meta":66,"style":66},"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",[81,153537,153538,153548,153552,153556,153560,153568,153575,153581,153587,153593,153597,153605,153611,153621,153631,153641,153651,153655,153659,153665,153673,153681,153689,153697,153705,153713],{"__ignoreMap":66},[84,153539,153540,153542,153544,153546],{"class":86,"line":87},[84,153541,31064],{"class":473},[84,153543,151398],{"class":477},[84,153545,30719],{"class":473},[84,153547,151403],{"class":477},[84,153549,153550],{"class":86,"line":98},[84,153551,2729],{"emptyLinePlaceholder":403},[84,153553,153554],{"class":86,"line":70},[84,153555,2729],{"emptyLinePlaceholder":403},[84,153557,153558],{"class":86,"line":120},[84,153559,151416],{"class":90},[84,153561,153562,153564,153566],{"class":86,"line":131},[84,153563,15023],{"class":473},[84,153565,8227],{"class":90},[84,153567,4068],{"class":477},[84,153569,153570,153573],{"class":86,"line":145},[84,153571,153572],{"class":477},"    student_id: ",[84,153574,151432],{"class":94},[84,153576,153577,153579],{"class":86,"line":156},[84,153578,151429],{"class":477},[84,153580,151432],{"class":94},[84,153582,153583,153585],{"class":86,"line":164},[84,153584,151437],{"class":477},[84,153586,151440],{"class":94},[84,153588,153589,153591],{"class":86,"line":175},[84,153590,151445],{"class":477},[84,153592,151448],{"class":94},[84,153594,153595],{"class":86,"line":185},[84,153596,2729],{"emptyLinePlaceholder":403},[84,153598,153599,153601,153603],{"class":86,"line":195},[84,153600,31128],{"class":473},[84,153602,151596],{"class":90},[84,153604,31134],{"class":477},[84,153606,153607,153609],{"class":86,"line":206},[84,153608,15081],{"class":473},[84,153610,15901],{"class":477},[84,153612,153613,153615,153617,153619],{"class":86,"line":217},[84,153614,151609],{"class":104},[84,153616,51764],{"class":477},[84,153618,31150],{"class":94},[84,153620,151616],{"class":477},[84,153622,153623,153625,153627,153629],{"class":86,"line":227},[84,153624,151621],{"class":104},[84,153626,51764],{"class":477},[84,153628,31150],{"class":94},[84,153630,151628],{"class":477},[84,153632,153633,153635,153637,153639],{"class":86,"line":238},[84,153634,151633],{"class":104},[84,153636,51764],{"class":477},[84,153638,31150],{"class":94},[84,153640,151640],{"class":477},[84,153642,153643,153645,153647,153649],{"class":86,"line":249},[84,153644,151645],{"class":104},[84,153646,51764],{"class":477},[84,153648,31150],{"class":94},[84,153650,151652],{"class":477},[84,153652,153653],{"class":86,"line":262},[84,153654,2858],{"class":477},[84,153656,153657],{"class":86,"line":273},[84,153658,2729],{"emptyLinePlaceholder":403},[84,153660,153661,153663],{"class":86,"line":283},[84,153662,151260],{"class":90},[84,153664,151263],{"class":94},[84,153666,153667,153669,153671],{"class":86,"line":294},[84,153668,31128],{"class":473},[84,153670,151673],{"class":90},[84,153672,151676],{"class":477},[84,153674,153675,153677,153679],{"class":86,"line":2028},[84,153676,15081],{"class":473},[84,153678,151280],{"class":94},[84,153680,151685],{"class":477},[84,153682,153683,153685,153687],{"class":86,"line":2057},[84,153684,151690],{"class":477},[84,153686,151693],{"class":104},[84,153688,88162],{"class":477},[84,153690,153691,153693,153695],{"class":86,"line":2062},[84,153692,151690],{"class":477},[84,153694,63005],{"class":104},[84,153696,88162],{"class":477},[84,153698,153699,153701,153703],{"class":86,"line":2079},[84,153700,151690],{"class":477},[84,153702,69450],{"class":104},[84,153704,88162],{"class":477},[84,153706,153707,153709,153711],{"class":86,"line":2084},[84,153708,151690],{"class":477},[84,153710,151718],{"class":104},[84,153712,88162],{"class":477},[84,153714,153715],{"class":86,"line":2089},[84,153716,38453],{"class":477},[35,153718,153719],{},"管理器示意：",[75,153721,153723],{"className":30705,"code":153722,"language":30707,"meta":66,"style":66},"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",[81,153724,153725,153734,153742,153753,153757,153767,153780,153791,153798,153804,153808,153817,153826,153832,153839],{"__ignoreMap":66},[84,153726,153727,153729,153732],{"class":86,"line":87},[84,153728,15023],{"class":473},[84,153730,153731],{"class":90}," StudentManager",[84,153733,4068],{"class":477},[84,153735,153736,153738,153740],{"class":86,"line":98},[84,153737,31128],{"class":473},[84,153739,31131],{"class":94},[84,153741,31134],{"class":477},[84,153743,153744,153746,153749,153751],{"class":86,"line":70},[84,153745,31172],{"class":94},[84,153747,153748],{"class":477},".students ",[84,153750,523],{"class":473},[84,153752,52165],{"class":477},[84,153754,153755],{"class":86,"line":120},[84,153756,2729],{"emptyLinePlaceholder":403},[84,153758,153759,153761,153764],{"class":86,"line":131},[84,153760,31128],{"class":473},[84,153762,153763],{"class":90}," find_by_id",[84,153765,153766],{"class":477},"(self, student_id):\n",[84,153768,153769,153771,153773,153775,153777],{"class":86,"line":145},[84,153770,3732],{"class":473},[84,153772,152383],{"class":477},[84,153774,26371],{"class":473},[84,153776,39200],{"class":94},[84,153778,153779],{"class":477},".students:\n",[84,153781,153782,153784,153787,153789],{"class":86,"line":156},[84,153783,4971],{"class":473},[84,153785,153786],{"class":477}," student.student_id ",[84,153788,3278],{"class":473},[84,153790,152404],{"class":477},[84,153792,153793,153796],{"class":86,"line":164},[84,153794,153795],{"class":473},"                return",[84,153797,152411],{"class":477},[84,153799,153800,153802],{"class":86,"line":175},[84,153801,15081],{"class":473},[84,153803,152418],{"class":94},[84,153805,153806],{"class":86,"line":185},[84,153807,2729],{"emptyLinePlaceholder":403},[84,153809,153810,153812,153814],{"class":86,"line":195},[84,153811,31128],{"class":473},[84,153813,5538],{"class":90},[84,153815,153816],{"class":477},"(self, student):\n",[84,153818,153819,153821,153823],{"class":86,"line":206},[84,153820,2826],{"class":473},[84,153822,39200],{"class":94},[84,153824,153825],{"class":477},".find_by_id(student.student_id):\n",[84,153827,153828,153830],{"class":86,"line":217},[84,153829,16061],{"class":473},[84,153831,126053],{"class":94},[84,153833,153834,153836],{"class":86,"line":227},[84,153835,31172],{"class":94},[84,153837,153838],{"class":477},".students.append(student)\n",[84,153840,153841,153843],{"class":86,"line":238},[84,153842,15081],{"class":473},[84,153844,153845],{"class":94}," True\n",[35,153847,153848],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153850,153852],{"id":153851},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[23,153854,153856],{"id":153855},"_1251-数据结构","12.5.1 数据结构",[75,153858,153860],{"className":30705,"code":153859,"language":30707,"meta":66,"style":66},"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",[81,153861,153862,153870,153901,153931,153960,153989],{"__ignoreMap":66},[84,153863,153864,153866,153868],{"class":86,"line":87},[84,153865,148711],{"class":477},[84,153867,523],{"class":473},[84,153869,55773],{"class":477},[84,153871,153872,153874,153876,153878,153880,153882,153885,153887,153890,153892,153894,153896,153899],{"class":86,"line":98},[84,153873,148631],{"class":477},[84,153875,148243],{"class":104},[84,153877,51764],{"class":477},[84,153879,148854],{"class":104},[84,153881,12764],{"class":477},[84,153883,153884],{"class":104},"\"category\"",[84,153886,51764],{"class":477},[84,153888,153889],{"class":104},"\"手机\"",[84,153891,12764],{"class":477},[84,153893,84410],{"class":104},[84,153895,51764],{"class":477},[84,153897,153898],{"class":94},"12000",[84,153900,5259],{"class":477},[84,153902,153903,153905,153907,153909,153911,153913,153915,153917,153920,153922,153924,153926,153929],{"class":86,"line":70},[84,153904,148631],{"class":477},[84,153906,148243],{"class":104},[84,153908,51764],{"class":477},[84,153910,148854],{"class":104},[84,153912,12764],{"class":477},[84,153914,153884],{"class":104},[84,153916,51764],{"class":477},[84,153918,153919],{"class":104},"\"电脑\"",[84,153921,12764],{"class":477},[84,153923,84410],{"class":104},[84,153925,51764],{"class":477},[84,153927,153928],{"class":94},"18000",[84,153930,5259],{"class":477},[84,153932,153933,153935,153937,153939,153941,153943,153945,153947,153949,153951,153953,153955,153958],{"class":86,"line":120},[84,153934,148631],{"class":477},[84,153936,148243],{"class":104},[84,153938,51764],{"class":477},[84,153940,148875],{"class":104},[84,153942,12764],{"class":477},[84,153944,153884],{"class":104},[84,153946,51764],{"class":477},[84,153948,153889],{"class":104},[84,153950,12764],{"class":477},[84,153952,84410],{"class":104},[84,153954,51764],{"class":477},[84,153956,153957],{"class":94},"15000",[84,153959,5259],{"class":477},[84,153961,153962,153964,153966,153968,153970,153972,153974,153976,153978,153980,153982,153984,153987],{"class":86,"line":131},[84,153963,148631],{"class":477},[84,153965,148243],{"class":104},[84,153967,51764],{"class":477},[84,153969,148875],{"class":104},[84,153971,12764],{"class":477},[84,153973,153884],{"class":104},[84,153975,51764],{"class":477},[84,153977,153919],{"class":104},[84,153979,12764],{"class":477},[84,153981,84410],{"class":104},[84,153983,51764],{"class":477},[84,153985,153986],{"class":94},"16000",[84,153988,5259],{"class":477},[84,153990,153991],{"class":86,"line":145},[84,153992,33573],{"class":477},[23,153994,153996],{"id":153995},"_1252-按日期统计","12.5.2 按日期统计",[75,153998,154000],{"className":30705,"code":153999,"language":30707,"meta":66,"style":66},"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",[81,154001,154002,154011,154015,154026,154040,154053,154072,154076],{"__ignoreMap":66},[84,154003,154004,154007,154009],{"class":86,"line":87},[84,154005,154006],{"class":477},"daily_total ",[84,154008,523],{"class":473},[84,154010,88194],{"class":477},[84,154012,154013],{"class":86,"line":98},[84,154014,2729],{"emptyLinePlaceholder":403},[84,154016,154017,154019,154021,154023],{"class":86,"line":70},[84,154018,3354],{"class":473},[84,154020,148455],{"class":477},[84,154022,26371],{"class":473},[84,154024,154025],{"class":477}," sales:\n",[84,154027,154028,154031,154033,154036,154038],{"class":86,"line":120},[84,154029,154030],{"class":477},"    date ",[84,154032,523],{"class":473},[84,154034,154035],{"class":477}," item[",[84,154037,148243],{"class":104},[84,154039,33573],{"class":477},[84,154041,154042,154045,154047,154049,154051],{"class":86,"line":131},[84,154043,154044],{"class":477},"    amount ",[84,154046,523],{"class":473},[84,154048,154035],{"class":477},[84,154050,84410],{"class":104},[84,154052,33573],{"class":477},[84,154054,154055,154058,154060,154063,154065,154067,154069],{"class":86,"line":145},[84,154056,154057],{"class":477},"    daily_total[date] ",[84,154059,523],{"class":473},[84,154061,154062],{"class":477}," daily_total.get(date, ",[84,154064,666],{"class":94},[84,154066,14043],{"class":477},[84,154068,954],{"class":473},[84,154070,154071],{"class":477}," amount\n",[84,154073,154074],{"class":86,"line":156},[84,154075,2729],{"emptyLinePlaceholder":403},[84,154077,154078,154080],{"class":86,"line":164},[84,154079,30742],{"class":94},[84,154081,154082],{"class":477},"(daily_total)\n",[23,154084,154086],{"id":154085},"_1253-按类别统计","12.5.3 按类别统计",[75,154088,154090],{"className":30705,"code":154089,"language":30707,"meta":66,"style":66},"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",[81,154091,154092,154101,154105,154115,154128,154140,154158,154162],{"__ignoreMap":66},[84,154093,154094,154097,154099],{"class":86,"line":87},[84,154095,154096],{"class":477},"category_total ",[84,154098,523],{"class":473},[84,154100,88194],{"class":477},[84,154102,154103],{"class":86,"line":98},[84,154104,2729],{"emptyLinePlaceholder":403},[84,154106,154107,154109,154111,154113],{"class":86,"line":70},[84,154108,3354],{"class":473},[84,154110,148455],{"class":477},[84,154112,26371],{"class":473},[84,154114,154025],{"class":477},[84,154116,154117,154120,154122,154124,154126],{"class":86,"line":120},[84,154118,154119],{"class":477},"    category ",[84,154121,523],{"class":473},[84,154123,154035],{"class":477},[84,154125,153884],{"class":104},[84,154127,33573],{"class":477},[84,154129,154130,154132,154134,154136,154138],{"class":86,"line":131},[84,154131,154044],{"class":477},[84,154133,523],{"class":473},[84,154135,154035],{"class":477},[84,154137,84410],{"class":104},[84,154139,33573],{"class":477},[84,154141,154142,154145,154147,154150,154152,154154,154156],{"class":86,"line":145},[84,154143,154144],{"class":477},"    category_total[category] ",[84,154146,523],{"class":473},[84,154148,154149],{"class":477}," category_total.get(category, ",[84,154151,666],{"class":94},[84,154153,14043],{"class":477},[84,154155,954],{"class":473},[84,154157,154071],{"class":477},[84,154159,154160],{"class":86,"line":156},[84,154161,2729],{"emptyLinePlaceholder":403},[84,154163,154164,154166],{"class":86,"line":164},[84,154165,30742],{"class":94},[84,154167,154168],{"class":477},"(category_total)\n",[23,154170,154172],{"id":154171},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[75,154174,154176],{"className":30705,"code":154175,"language":30707,"meta":66,"style":66},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[81,154177,154178,154203],{"__ignoreMap":66},[84,154179,154180,154183,154185,154187,154190,154193,154196,154199,154201],{"class":86,"line":87},[84,154181,154182],{"class":477},"top_date, top_amount ",[84,154184,523],{"class":473},[84,154186,6280],{"class":94},[84,154188,154189],{"class":477},"(daily_total.items(), ",[84,154191,154192],{"class":5545},"key",[84,154194,154195],{"class":473},"=lambda",[84,154197,154198],{"class":477}," item: item[",[84,154200,692],{"class":94},[84,154202,4986],{"class":477},[84,154204,154205,154207],{"class":86,"line":98},[84,154206,30742],{"class":94},[84,154208,154209],{"class":477},"(top_date, top_amount)\n",[14,154211,154213],{"id":154212},"_126-绘制柱状图","12.6 绘制柱状图",[75,154215,154217],{"className":30705,"code":154216,"language":30707,"meta":66,"style":66},"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",[81,154218,154219,154233,154244,154248,154256,154268,154280,154291,154295,154299,154309,154320,154334,154339,154356,154373,154389,154393],{"__ignoreMap":66},[84,154220,154221,154223,154225,154227,154229,154231],{"class":86,"line":87},[84,154222,31064],{"class":473},[84,154224,147625],{"class":477},[84,154226,30719],{"class":473},[84,154228,147630],{"class":477},[84,154230,31710],{"class":473},[84,154232,147635],{"class":477},[84,154234,154235,154237,154239,154241],{"class":86,"line":98},[84,154236,31064],{"class":473},[84,154238,147484],{"class":477},[84,154240,30719],{"class":473},[84,154242,154243],{"class":477}," Bar\n",[84,154245,154246],{"class":86,"line":70},[84,154247,2729],{"emptyLinePlaceholder":403},[84,154249,154250,154252,154254],{"class":86,"line":120},[84,154251,154096],{"class":477},[84,154253,523],{"class":473},[84,154255,15901],{"class":477},[84,154257,154258,154261,154263,154266],{"class":86,"line":131},[84,154259,154260],{"class":104},"    \"手机\"",[84,154262,51764],{"class":477},[84,154264,154265],{"class":94},"27000",[84,154267,31793],{"class":477},[84,154269,154270,154273,154275,154278],{"class":86,"line":145},[84,154271,154272],{"class":104},"    \"电脑\"",[84,154274,51764],{"class":477},[84,154276,154277],{"class":94},"34000",[84,154279,31793],{"class":477},[84,154281,154282,154285,154287,154289],{"class":86,"line":156},[84,154283,154284],{"class":104},"    \"耳机\"",[84,154286,51764],{"class":477},[84,154288,124645],{"class":94},[84,154290,31793],{"class":477},[84,154292,154293],{"class":86,"line":164},[84,154294,1905],{"class":477},[84,154296,154297],{"class":86,"line":175},[84,154298,2729],{"emptyLinePlaceholder":403},[84,154300,154301,154304,154306],{"class":86,"line":185},[84,154302,154303],{"class":477},"bar ",[84,154305,523],{"class":473},[84,154307,154308],{"class":477}," Bar()\n",[84,154310,154311,154314,154317],{"class":86,"line":195},[84,154312,154313],{"class":477},"bar.add_xaxis(",[84,154315,154316],{"class":94},"list",[84,154318,154319],{"class":477},"(category_total.keys()))\n",[84,154321,154322,154325,154327,154329,154331],{"class":86,"line":206},[84,154323,154324],{"class":477},"bar.add_yaxis(",[84,154326,147541],{"class":104},[84,154328,12764],{"class":477},[84,154330,154316],{"class":94},[84,154332,154333],{"class":477},"(category_total.values()))\n",[84,154335,154336],{"class":86,"line":217},[84,154337,154338],{"class":477},"bar.set_global_opts(\n",[84,154340,154341,154343,154345,154347,154349,154351,154354],{"class":86,"line":227},[84,154342,147719],{"class":5545},[84,154344,523],{"class":473},[84,154346,147724],{"class":477},[84,154348,51734],{"class":5545},[84,154350,523],{"class":473},[84,154352,154353],{"class":104},"\"品类销售额\"",[84,154355,38374],{"class":477},[84,154357,154358,154360,154362,154364,154366,154368,154371],{"class":86,"line":238},[84,154359,147738],{"class":5545},[84,154361,523],{"class":473},[84,154363,147743],{"class":477},[84,154365,80136],{"class":5545},[84,154367,523],{"class":473},[84,154369,154370],{"class":104},"\"品类\"",[84,154372,38374],{"class":477},[84,154374,154375,154377,154379,154381,154383,154385,154387],{"class":86,"line":249},[84,154376,147757],{"class":5545},[84,154378,523],{"class":473},[84,154380,147743],{"class":477},[84,154382,80136],{"class":5545},[84,154384,523],{"class":473},[84,154386,147541],{"class":104},[84,154388,38374],{"class":477},[84,154390,154391],{"class":86,"line":262},[84,154392,484],{"class":477},[84,154394,154395,154398,154401],{"class":86,"line":273},[84,154396,154397],{"class":477},"bar.render(",[84,154399,154400],{"class":104},"\"category_sales.html\"",[84,154402,484],{"class":477},[14,154404,154406],{"id":154405},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[35,154408,154409],{},"时间线适合展示不同日期、月份、年份的数据变化。",[75,154411,154413],{"className":30705,"code":154412,"language":30707,"meta":66,"style":66},"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",[81,154414,154415,154429,154440,154444,154452,154476,154499,154524,154528,154532,154542,154546,154557,154566,154576,154590,154621,154626,154630],{"__ignoreMap":66},[84,154416,154417,154419,154421,154423,154425,154427],{"class":86,"line":87},[84,154418,31064],{"class":473},[84,154420,147625],{"class":477},[84,154422,30719],{"class":473},[84,154424,147630],{"class":477},[84,154426,31710],{"class":473},[84,154428,147635],{"class":477},[84,154430,154431,154433,154435,154437],{"class":86,"line":98},[84,154432,31064],{"class":473},[84,154434,147484],{"class":477},[84,154436,30719],{"class":473},[84,154438,154439],{"class":477}," Bar, Timeline\n",[84,154441,154442],{"class":86,"line":70},[84,154443,2729],{"emptyLinePlaceholder":403},[84,154445,154446,154448,154450],{"class":86,"line":120},[84,154447,101984],{"class":477},[84,154449,523],{"class":473},[84,154451,15901],{"class":477},[84,154453,154454,154457,154460,154462,154464,154466,154468,154470,154472,154474],{"class":86,"line":131},[84,154455,154456],{"class":104},"    \"2024-10-01\"",[84,154458,154459],{"class":477},": {",[84,154461,153889],{"class":104},[84,154463,51764],{"class":477},[84,154465,153898],{"class":94},[84,154467,12764],{"class":477},[84,154469,153919],{"class":104},[84,154471,51764],{"class":477},[84,154473,153928],{"class":94},[84,154475,5259],{"class":477},[84,154477,154478,154481,154483,154485,154487,154489,154491,154493,154495,154497],{"class":86,"line":145},[84,154479,154480],{"class":104},"    \"2024-10-02\"",[84,154482,154459],{"class":477},[84,154484,153889],{"class":104},[84,154486,51764],{"class":477},[84,154488,153957],{"class":94},[84,154490,12764],{"class":477},[84,154492,153919],{"class":104},[84,154494,51764],{"class":477},[84,154496,153986],{"class":94},[84,154498,5259],{"class":477},[84,154500,154501,154504,154506,154508,154510,154513,154515,154517,154519,154522],{"class":86,"line":156},[84,154502,154503],{"class":104},"    \"2024-10-03\"",[84,154505,154459],{"class":477},[84,154507,153889],{"class":104},[84,154509,51764],{"class":477},[84,154511,154512],{"class":94},"17000",[84,154514,12764],{"class":477},[84,154516,153919],{"class":104},[84,154518,51764],{"class":477},[84,154520,154521],{"class":94},"19000",[84,154523,5259],{"class":477},[84,154525,154526],{"class":86,"line":164},[84,154527,1905],{"class":477},[84,154529,154530],{"class":86,"line":175},[84,154531,2729],{"emptyLinePlaceholder":403},[84,154533,154534,154537,154539],{"class":86,"line":185},[84,154535,154536],{"class":477},"timeline ",[84,154538,523],{"class":473},[84,154540,154541],{"class":477}," Timeline()\n",[84,154543,154544],{"class":86,"line":195},[84,154545,2729],{"emptyLinePlaceholder":403},[84,154547,154548,154550,154553,154555],{"class":86,"line":206},[84,154549,3354],{"class":473},[84,154551,154552],{"class":477}," date, category_data ",[84,154554,26371],{"class":473},[84,154556,149394],{"class":477},[84,154558,154559,154562,154564],{"class":86,"line":217},[84,154560,154561],{"class":477},"    bar ",[84,154563,523],{"class":473},[84,154565,154308],{"class":477},[84,154567,154568,154571,154573],{"class":86,"line":227},[84,154569,154570],{"class":477},"    bar.add_xaxis(",[84,154572,154316],{"class":94},[84,154574,154575],{"class":477},"(category_data.keys()))\n",[84,154577,154578,154581,154583,154585,154587],{"class":86,"line":238},[84,154579,154580],{"class":477},"    bar.add_yaxis(",[84,154582,147541],{"class":104},[84,154584,12764],{"class":477},[84,154586,154316],{"class":94},[84,154588,154589],{"class":477},"(category_data.values()))\n",[84,154591,154592,154595,154598,154600,154602,154604,154606,154608,154610,154612,154614,154616,154619],{"class":86,"line":249},[84,154593,154594],{"class":477},"    bar.set_global_opts(",[84,154596,154597],{"class":5545},"title_opts",[84,154599,523],{"class":473},[84,154601,147724],{"class":477},[84,154603,51734],{"class":5545},[84,154605,523],{"class":473},[84,154607,529],{"class":473},[84,154609,725],{"class":104},[84,154611,1369],{"class":94},[84,154613,74252],{"class":477},[84,154615,1419],{"class":94},[84,154617,154618],{"class":104},"销售额\"",[84,154620,30824],{"class":477},[84,154622,154623],{"class":86,"line":262},[84,154624,154625],{"class":477},"    timeline.add(bar, date)\n",[84,154627,154628],{"class":86,"line":273},[84,154629,2729],{"emptyLinePlaceholder":403},[84,154631,154632,154635,154638],{"class":86,"line":283},[84,154633,154634],{"class":477},"timeline.render(",[84,154636,154637],{"class":104},"\"timeline_sales.html\"",[84,154639,484],{"class":477},[14,154641,154643],{"id":154642},"_128-绘制地图","12.8 绘制地图",[35,154645,154646],{},"地图适合展示地区数据。",[75,154648,154650],{"className":30705,"code":154649,"language":30707,"meta":66,"style":66},"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",[81,154651,154652,154666,154677,154681,154689,154702,154714,154727,154740,154744,154748,154758,154773,154778,154795,154814,154818],{"__ignoreMap":66},[84,154653,154654,154656,154658,154660,154662,154664],{"class":86,"line":87},[84,154655,31064],{"class":473},[84,154657,147625],{"class":477},[84,154659,30719],{"class":473},[84,154661,147630],{"class":477},[84,154663,31710],{"class":473},[84,154665,147635],{"class":477},[84,154667,154668,154670,154672,154674],{"class":86,"line":98},[84,154669,31064],{"class":473},[84,154671,147484],{"class":477},[84,154673,30719],{"class":473},[84,154675,154676],{"class":477}," Map\n",[84,154678,154679],{"class":86,"line":70},[84,154680,2729],{"emptyLinePlaceholder":403},[84,154682,154683,154685,154687],{"class":86,"line":120},[84,154684,101984],{"class":477},[84,154686,523],{"class":473},[84,154688,55773],{"class":477},[84,154690,154691,154694,154696,154698,154700],{"class":86,"line":131},[84,154692,154693],{"class":477},"    (",[84,154695,69595],{"class":104},[84,154697,12764],{"class":477},[84,154699,1290],{"class":94},[84,154701,38374],{"class":477},[84,154703,154704,154706,154708,154710,154712],{"class":86,"line":145},[84,154705,154693],{"class":477},[84,154707,69615],{"class":104},[84,154709,12764],{"class":477},[84,154711,147558],{"class":94},[84,154713,38374],{"class":477},[84,154715,154716,154718,154721,154723,154725],{"class":86,"line":156},[84,154717,154693],{"class":477},[84,154719,154720],{"class":104},"\"广东\"",[84,154722,12764],{"class":477},[84,154724,2052],{"class":94},[84,154726,38374],{"class":477},[84,154728,154729,154731,154734,154736,154738],{"class":86,"line":164},[84,154730,154693],{"class":477},[84,154732,154733],{"class":104},"\"浙江\"",[84,154735,12764],{"class":477},[84,154737,147563],{"class":94},[84,154739,38374],{"class":477},[84,154741,154742],{"class":86,"line":175},[84,154743,33573],{"class":477},[84,154745,154746],{"class":86,"line":185},[84,154747,2729],{"emptyLinePlaceholder":403},[84,154749,154750,154753,154755],{"class":86,"line":195},[84,154751,154752],{"class":477},"map_chart ",[84,154754,523],{"class":473},[84,154756,154757],{"class":477}," Map()\n",[84,154759,154760,154763,154765,154768,154771],{"class":86,"line":206},[84,154761,154762],{"class":477},"map_chart.add(",[84,154764,147541],{"class":104},[84,154766,154767],{"class":477},", data, ",[84,154769,154770],{"class":104},"\"china\"",[84,154772,484],{"class":477},[84,154774,154775],{"class":86,"line":217},[84,154776,154777],{"class":477},"map_chart.set_global_opts(\n",[84,154779,154780,154782,154784,154786,154788,154790,154793],{"class":86,"line":227},[84,154781,147719],{"class":5545},[84,154783,523],{"class":473},[84,154785,147724],{"class":477},[84,154787,51734],{"class":5545},[84,154789,523],{"class":473},[84,154791,154792],{"class":104},"\"地区销售额\"",[84,154794,38374],{"class":477},[84,154796,154797,154800,154802,154805,154808,154810,154812],{"class":86,"line":238},[84,154798,154799],{"class":5545},"    visualmap_opts",[84,154801,523],{"class":473},[84,154803,154804],{"class":477},"opts.VisualMapOpts(",[84,154806,154807],{"class":5545},"max_",[84,154809,523],{"class":473},[84,154811,2052],{"class":94},[84,154813,38374],{"class":477},[84,154815,154816],{"class":86,"line":249},[84,154817,484],{"class":477},[84,154819,154820,154823,154826],{"class":86,"line":262},[84,154821,154822],{"class":477},"map_chart.render(",[84,154824,154825],{"class":104},"\"map_sales.html\"",[84,154827,484],{"class":477},[35,154829,154830],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154832,154834],{"id":154833},"_129-项目拆分建议","12.9 项目拆分建议",[35,154836,154837],{},"当代码超过一个文件时，可以这样组织：",[75,154839,154842],{"className":154840,"code":154841,"language":5516,"meta":66},[5514],"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",[81,154843,154841],{"__ignoreMap":66},[35,154845,154846],{},"职责：",[28,154848,154849,154855,154861,154867],{},[31,154850,154851,154854],{},[81,154852,154853],{},"main.py","：程序入口。",[31,154856,154857,154860],{},[81,154858,154859],{},"file_utils.py","：读写 JSON。",[31,154862,154863,154866],{},[81,154864,154865],{},"sales_service.py","：统计销售数据。",[31,154868,154869,154872],{},[81,154870,154871],{},"chart_builder.py","：生成图表。",[14,154874,154876],{"id":154875},"_1210-python基础复习清单","12.10 Python基础复习清单",[35,154878,154879],{},"语法基础：",[28,154881,154882,154885,154888,154891],{},[31,154883,154884],{},"会写变量、注释、输入输出。",[31,154886,154887],{},"会使用 int、float、str、bool。",[31,154889,154890],{},"会做类型转换。",[31,154892,154893],{},"会使用 f-string 格式化输出。",[35,154895,154896],{},"流程控制：",[28,154898,154899,154905,154911,154919],{},[31,154900,154901,154902,28712],{},"会写 ",[81,154903,154904],{},"if elif else",[31,154906,154901,154907,101344,154909,28712],{},[81,154908,108989],{},[81,154910,3354],{},[31,154912,154913,154914,101344,154916,28712],{},"理解 ",[81,154915,2382],{},[81,154917,154918],{},"continue",[31,154920,154921],{},"能写嵌套循环。",[35,154923,154924],{},"函数：",[28,154926,154927,154930,154933,154936],{},[31,154928,154929],{},"会定义和调用函数。",[31,154931,154932],{},"理解参数和返回值。",[31,154934,154935],{},"知道局部变量和全局变量。",[31,154937,154938],{},"会使用默认参数、关键字参数、不定长参数。",[35,154940,154941],{},"容器：",[28,154943,154944,154947,154950,154953,154956],{},[31,154945,154946],{},"会使用列表增删改查。",[31,154948,154949],{},"会遍历列表、字典。",[31,154951,154952],{},"会使用切片。",[31,154954,154955],{},"会用集合去重。",[31,154957,154958],{},"会处理列表嵌套字典。",[35,154960,154961],{},"文件和模块：",[28,154963,154964,154967,154970,154973,154976],{},[31,154965,154966],{},"会读写文本文件。",[31,154968,154969],{},"会读写 JSON。",[31,154971,154972],{},"会捕获常见异常。",[31,154974,154975],{},"会导入模块和第三方包。",[31,154977,154978],{},"会创建简单包结构。",[35,154980,154981],{},"项目能力：",[28,154983,154984,154987,154990,154993,154996],{},[31,154985,154986],{},"能把代码拆成函数。",[31,154988,154989],{},"能把数据保存到文件。",[31,154991,154992],{},"能处理用户输入错误。",[31,154994,154995],{},"能写一个完整菜单程序。",[31,154997,154998],{},"能用 pyecharts 生成图表。",[14,155000,155002],{"id":155001},"_1211-推荐练习顺序","12.11 推荐练习顺序",[28,155004,155005,155008,155011,155014,155017,155020,155023,155026],{},[31,155006,155007],{},"猜数字游戏。",[31,155009,155010],{},"ATM 菜单程序。",[31,155012,155013],{},"学生成绩统计。",[31,155015,155016],{},"学生管理系统函数版。",[31,155018,155019],{},"学生管理系统文件持久化版。",[31,155021,155022],{},"学生管理系统面向对象版。",[31,155024,155025],{},"销售数据统计。",[31,155027,155028],{},"销售数据可视化。",[14,155030,155032],{"id":155031},"_1212-常见学习误区","12.12 常见学习误区",[28,155034,155035,155038,155041,155044,155047,155050,155053],{},[31,155036,155037],{},"只看视频不敲代码。",[31,155039,155040],{},"一报错就复制错误去搜，不先读报错位置。",[31,155042,155043],{},"变量名随便写，后续自己看不懂。",[31,155045,155046],{},"所有代码都写在一个文件一个函数里。",[31,155048,155049],{},"不保存练习代码，复习时没有材料。",[31,155051,155052],{},"还没掌握列表字典就急着学框架。",[31,155054,155055],{},"不会读官方文档，只依赖教程。",[14,155057,155059],{"id":155058},"_1213-如何读报错","12.13 如何读报错",[35,155061,155062],{},"报错通常从下往上看最后几行。",[35,155064,15464],{},[75,155066,155069],{"className":155067,"code":155068,"language":5516,"meta":66},[5514],"ValueError: invalid literal for int() with base 10: 'abc'\n",[81,155070,155068],{"__ignoreMap":66},[35,155072,24928],{},[28,155074,155075,155081,155091],{},[31,155076,155077,155078,28712],{},"异常类型是 ",[81,155079,155080],{},"ValueError",[31,155082,107671,155083,155086,155087,155090],{},[81,155084,155085],{},"int()"," 无法把 ",[81,155088,155089],{},"'abc'"," 转成整数。",[31,155092,155093],{},"应该检查输入内容或增加异常处理。",[35,155095,155096],{},"再看文件名和行号：",[75,155098,155101],{"className":155099,"code":155100,"language":5516,"meta":66},[5514],"File \"main.py\", line 10, in \u003Cmodule>\n",[81,155102,155100],{"__ignoreMap":66},[35,155104,155105,155106,155108],{},"表示错误发生在 ",[81,155107,154853],{}," 第 10 行。",[14,155110,155112],{"id":155111},"_1214-后续学习方向","12.14 后续学习方向",[35,155114,155115],{},"Python 基础完成后，可以按兴趣选择方向：",[28,155117,155118,155130,155139,155151,155162,155171,155181],{},[31,155119,155120,155121,687,155124,687,155127,28712],{},"自动化办公：",[81,155122,155123],{},"openpyxl",[81,155125,155126],{},"python-docx",[81,155128,155129],{},"pdfplumber",[31,155131,155132,155133,687,155135,687,155137,28712],{},"数据分析：",[81,155134,100952],{},[81,155136,146431],{},[81,155138,146439],{},[31,155140,155141,155142,687,155145,687,155148,28712],{},"Web 后端：",[81,155143,155144],{},"Flask",[81,155146,155147],{},"FastAPI",[81,155149,155150],{},"Django",[31,155152,155153,155154,687,155156,687,155159,28712],{},"爬虫：",[81,155155,146416],{},[81,155157,155158],{},"BeautifulSoup",[81,155160,155161],{},"Scrapy",[31,155163,155164,155165,687,155167,155170],{},"测试开发：",[81,155166,146463],{},[81,155168,155169],{},"selenium","、接口测试。",[31,155172,155173,155174,687,155176,687,155178,28712],{},"人工智能：",[81,155175,100952],{},[81,155177,146431],{},[81,155179,155180],{},"pytorch",[31,155182,155183,155184,687,155186,687,155189,28712],{},"运维脚本：",[81,155185,146032],{},[81,155187,155188],{},"subprocess",[81,155190,155191],{},"paramiko",[35,155193,155194],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155196,155198],{"id":155197},"_1215-结课练习","12.15 结课练习",[28,155200,155201,155204,155207,155210,155213,155216,155219,155222],{},[31,155202,155203],{},"完成函数版学生管理系统。",[31,155205,155206],{},"给学生管理系统增加 JSON 持久化。",[31,155208,155209],{},"给学生管理系统增加异常处理。",[31,155211,155212],{},"把学生管理系统改成面向对象版。",[31,155214,155215],{},"使用 pyecharts 绘制学生成绩柱状图。",[31,155217,155218],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[31,155220,155221],{},"按品类统计销售额并绘制柱状图。",[31,155223,155224],{},"写一份自己的 Python 学习路线图。",[389,155226,155227],{},"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":66,"searchDepth":98,"depth":98,"links":155229},[155230,155231,155234,155235,155236,155242,155243,155244,155245,155246,155247,155248,155249,155250,155251],{"id":151946,"depth":98,"text":151947},{"id":151996,"depth":98,"text":151997,"children":155232},[155233],{"id":152000,"depth":70,"text":152001},{"id":152039,"depth":98,"text":152040},{"id":153513,"depth":98,"text":153514},{"id":153851,"depth":98,"text":153852,"children":155237},[155238,155239,155240,155241],{"id":153855,"depth":70,"text":153856},{"id":153995,"depth":70,"text":153996},{"id":154085,"depth":70,"text":154086},{"id":154171,"depth":70,"text":154172},{"id":154212,"depth":98,"text":154213},{"id":154405,"depth":98,"text":154406},{"id":154642,"depth":98,"text":154643},{"id":154833,"depth":98,"text":154834},{"id":154875,"depth":98,"text":154876},{"id":155001,"depth":98,"text":155002},{"id":155031,"depth":98,"text":155032},{"id":155058,"depth":98,"text":155059},{"id":155111,"depth":98,"text":155112},{"id":155197,"depth":98,"text":155198},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151938,"description":400},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155258,"title":155259,"body":155260,"description":400,"extension":401,"meta":157729,"navigation":403,"path":157730,"seo":157731,"stem":157732,"__hash__":157733},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155261,"toc":157704},[155262,155265,155269,155272,155275,155295,155298,155321,155324,155327,155349,155352,155374,155378,155381,155421,155424,155545,155549,155552,155592,155595,155619,155622,155626,155629,155643,155676,155679,155714,155717,155740,155743,155776,155779,155781,155787,155862,155865,155871,155888,155928,155932,155935,155981,155983,156021,156024,156059,156062,156097,156100,156132,156135,156154,156158,156162,156275,156277,156352,156356,156402,156405,156431,156440,156444,156447,156510,156518,156546,156550,156590,156655,156659,156662,156701,156704,156749,156752,156813,156817,156844,156847,156875,156878,156882,156886,156951,156954,156992,156995,157027,157031,157130,157134,157137,157210,157213,157261,157265,157271,157311,157314,157361,157364,157413,157417,157419,157433,157435,157616,157620,157647,157667,157674,157678,157695,157701],[10,155263,155259],{"id":155264},"_2-基础语法变量与字符串",[14,155266,155268],{"id":155267},"_21-注释","2.1 注释",[35,155270,155271],{},"注释是给人看的说明文字，不会被 Python 执行。",[35,155273,155274],{},"单行注释：",[75,155276,155278],{"className":30705,"code":155277,"language":30707,"meta":66,"style":66},"# 这是单行注释\nprint(\"hello\")\n",[81,155279,155280,155285],{"__ignoreMap":66},[84,155281,155282],{"class":86,"line":87},[84,155283,155284],{"class":328},"# 这是单行注释\n",[84,155286,155287,155289,155291,155293],{"class":86,"line":98},[84,155288,30742],{"class":94},[84,155290,478],{"class":477},[84,155292,6173],{"class":104},[84,155294,484],{"class":477},[35,155296,155297],{},"多行说明常用三引号：",[75,155299,155301],{"className":30705,"code":155300,"language":30707,"meta":66,"style":66},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[81,155302,155303,155307,155312,155317],{"__ignoreMap":66},[84,155304,155305],{"class":86,"line":87},[84,155306,96024],{"class":104},[84,155308,155309],{"class":86,"line":98},[84,155310,155311],{"class":104},"这是多行说明。\n",[84,155313,155314],{"class":86,"line":70},[84,155315,155316],{"class":104},"常用于文件顶部说明、函数说明等。\n",[84,155318,155319],{"class":86,"line":120},[84,155320,96024],{"class":104},[35,155322,155323],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[35,155325,155326],{},"不好：",[75,155328,155330],{"className":30705,"code":155329,"language":30707,"meta":66,"style":66},"# age 加 1\nage = age + 1\n",[81,155331,155332,155337],{"__ignoreMap":66},[84,155333,155334],{"class":86,"line":87},[84,155335,155336],{"class":328},"# age 加 1\n",[84,155338,155339,155341,155343,155345,155347],{"class":86,"line":98},[84,155340,146792],{"class":477},[84,155342,523],{"class":473},[84,155344,16036],{"class":477},[84,155346,954],{"class":473},[84,155348,56025],{"class":94},[35,155350,155351],{},"较好：",[75,155353,155355],{"className":30705,"code":155354,"language":30707,"meta":66,"style":66},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[81,155356,155357,155362],{"__ignoreMap":66},[84,155358,155359],{"class":86,"line":87},[84,155360,155361],{"class":328},"# 用户过完生日后，年龄增加一岁\n",[84,155363,155364,155366,155368,155370,155372],{"class":86,"line":98},[84,155365,146792],{"class":477},[84,155367,523],{"class":473},[84,155369,16036],{"class":477},[84,155371,954],{"class":473},[84,155373,56025],{"class":94},[14,155375,155377],{"id":155376},"_22-字面量","2.2 字面量",[35,155379,155380],{},"字面量就是代码中直接写出来的数据。",[75,155382,155384],{"className":30705,"code":155383,"language":30707,"meta":66,"style":66},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[81,155385,155386,155393,155400,155407,155414],{"__ignoreMap":66},[84,155387,155388,155390],{"class":86,"line":87},[84,155389,784],{"class":94},[84,155391,155392],{"class":328},"          # 整数\n",[84,155394,155395,155397],{"class":86,"line":98},[84,155396,526],{"class":94},[84,155398,155399],{"class":328},"         # 小数\n",[84,155401,155402,155404],{"class":86,"line":70},[84,155403,6173],{"class":104},[84,155405,155406],{"class":328},"      # 字符串\n",[84,155408,155409,155411],{"class":86,"line":120},[84,155410,31803],{"class":94},[84,155412,155413],{"class":328},"         # 布尔值\n",[84,155415,155416,155418],{"class":86,"line":131},[84,155417,96012],{"class":94},[84,155419,155420],{"class":328},"         # 空值\n",[35,155422,155423],{},"常见字面量类型：",[612,155425,155426,155436],{},[615,155427,155428],{},[618,155429,155430,155432,155434],{},[621,155431,24066],{},[621,155433,27819],{},[621,155435,26197],{},[659,155437,155438,155449,155460,155471,155483,155495,155507,155520,155532],{},[618,155439,155440,155442,155446],{},[664,155441,481],{},[664,155443,155444],{},[81,155445,784],{},[664,155447,155448],{},"整数",[618,155450,155451,155453,155457],{},[664,155452,517],{},[664,155454,155455],{},[81,155456,526],{},[664,155458,155459],{},"浮点数",[618,155461,155462,155464,155468],{},[664,155463,1643],{},[664,155465,155466],{},[81,155467,6173],{},[664,155469,155470],{},"字符串",[618,155472,155473,155475,155481],{},[664,155474,1695],{},[664,155476,155477,687,155479],{},[81,155478,31803],{},[81,155480,34314],{},[664,155482,66341],{},[618,155484,155485,155488,155492],{},[664,155486,155487],{},"NoneType",[664,155489,155490],{},[81,155491,96012],{},[664,155493,155494],{},"空值",[618,155496,155497,155499,155504],{},[664,155498,154316],{},[664,155500,155501],{},[81,155502,155503],{},"[1, 2, 3]",[664,155505,155506],{},"列表",[618,155508,155509,155512,155517],{},[664,155510,155511],{},"tuple",[664,155513,155514],{},[81,155515,155516],{},"(1, 2, 3)",[664,155518,155519],{},"元组",[618,155521,155522,155524,155529],{},[664,155523,114872],{},[664,155525,155526],{},[81,155527,155528],{},"{\"name\": \"张三\"}",[664,155530,155531],{},"字典",[618,155533,155534,155537,155542],{},[664,155535,155536],{},"set",[664,155538,155539],{},[81,155540,155541],{},"{1, 2, 3}",[664,155543,155544],{},"集合",[14,155546,155548],{"id":155547},"_23-变量","2.3 变量",[35,155550,155551],{},"变量是保存数据的名字。",[75,155553,155555],{"className":30705,"code":155554,"language":30707,"meta":66,"style":66},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[81,155556,155557,155565,155573,155583],{"__ignoreMap":66},[84,155558,155559,155561,155563],{"class":86,"line":87},[84,155560,146782],{"class":477},[84,155562,523],{"class":473},[84,155564,149599],{"class":104},[84,155566,155567,155569,155571],{"class":86,"line":98},[84,155568,146792],{"class":477},[84,155570,523],{"class":473},[84,155572,146797],{"class":94},[84,155574,155575,155578,155580],{"class":86,"line":70},[84,155576,155577],{"class":477},"height ",[84,155579,523],{"class":473},[84,155581,155582],{"class":94}," 1.75\n",[84,155584,155585,155588,155590],{"class":86,"line":120},[84,155586,155587],{"class":477},"is_student ",[84,155589,523],{"class":473},[84,155591,153845],{"class":94},[35,155593,155594],{},"Python 的变量不需要提前声明类型：",[75,155596,155598],{"className":30705,"code":155597,"language":30707,"meta":66,"style":66},"score = 100\nscore = \"满分\"\n",[81,155599,155600,155610],{"__ignoreMap":66},[84,155601,155602,155605,155607],{"class":86,"line":87},[84,155603,155604],{"class":477},"score ",[84,155606,523],{"class":473},[84,155608,155609],{"class":94}," 100\n",[84,155611,155612,155614,155616],{"class":86,"line":98},[84,155613,155604],{"class":477},[84,155615,523],{"class":473},[84,155617,155618],{"class":104}," \"满分\"\n",[35,155620,155621],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155623,155625],{"id":155624},"_24-变量命名规则","2.4 变量命名规则",[35,155627,155628],{},"硬性规则：",[28,155630,155631,155634,155637,155640],{},[31,155632,155633],{},"只能由字母、数字、下划线组成。",[31,155635,155636],{},"不能以数字开头。",[31,155638,155639],{},"不能使用 Python 关键字。",[31,155641,155642],{},"区分大小写。",[75,155644,155646],{"className":30705,"code":155645,"language":30707,"meta":66,"style":66},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[81,155647,155648,155657,155666],{"__ignoreMap":66},[84,155649,155650,155653,155655],{"class":86,"line":87},[84,155651,155652],{"class":477},"user_name ",[84,155654,523],{"class":473},[84,155656,146787],{"class":104},[84,155658,155659,155662,155664],{"class":86,"line":98},[84,155660,155661],{"class":477},"age2 ",[84,155663,523],{"class":473},[84,155665,146797],{"class":94},[84,155667,155668,155671,155673],{"class":86,"line":70},[84,155669,155670],{"class":477},"_token ",[84,155672,523],{"class":473},[84,155674,155675],{"class":104}," \"abc\"\n",[35,155677,155678],{},"错误写法：",[75,155680,155682],{"className":30705,"code":155681,"language":30707,"meta":66,"style":66},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[81,155683,155684,155693,155705],{"__ignoreMap":66},[84,155685,155686,155689,155691],{"class":86,"line":87},[84,155687,155688],{"class":77729},"2age",[84,155690,13893],{"class":473},[84,155692,146797],{"class":94},[84,155694,155695,155697,155699,155701,155703],{"class":86,"line":98},[84,155696,131830],{"class":477},[84,155698,1005],{"class":473},[84,155700,146782],{"class":477},[84,155702,523],{"class":473},[84,155704,146787],{"class":104},[84,155706,155707,155709,155711],{"class":86,"line":70},[84,155708,15023],{"class":473},[84,155710,13893],{"class":473},[84,155712,155713],{"class":104}," \"一班\"\n",[35,155715,155716],{},"查看关键字：",[75,155718,155720],{"className":30705,"code":155719,"language":30707,"meta":66,"style":66},"import keyword\n\nprint(keyword.kwlist)\n",[81,155721,155722,155729,155733],{"__ignoreMap":66},[84,155723,155724,155726],{"class":86,"line":87},[84,155725,30719],{"class":473},[84,155727,155728],{"class":477}," keyword\n",[84,155730,155731],{"class":86,"line":98},[84,155732,2729],{"emptyLinePlaceholder":403},[84,155734,155735,155737],{"class":86,"line":70},[84,155736,30742],{"class":94},[84,155738,155739],{"class":477},"(keyword.kwlist)\n",[35,155741,155742],{},"推荐命名风格：",[75,155744,155746],{"className":30705,"code":155745,"language":30707,"meta":66,"style":66},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[81,155747,155748,155757,155767],{"__ignoreMap":66},[84,155749,155750,155753,155755],{"class":86,"line":87},[84,155751,155752],{"class":477},"student_name ",[84,155754,523],{"class":473},[84,155756,149599],{"class":104},[84,155758,155759,155762,155764],{"class":86,"line":98},[84,155760,155761],{"class":477},"total_price ",[84,155763,523],{"class":473},[84,155765,155766],{"class":94}," 99.8\n",[84,155768,155769,155772,155774],{"class":86,"line":70},[84,155770,155771],{"class":477},"is_finished ",[84,155773,523],{"class":473},[84,155775,126053],{"class":94},[35,155777,155778],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155780,51059],{"id":51058},[35,155782,104692,155783,155786],{},[81,155784,155785],{},"type()"," 查看数据类型：",[75,155788,155790],{"className":30705,"code":155789,"language":30707,"meta":66,"style":66},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[81,155791,155792,155806,155820,155834,155848],{"__ignoreMap":66},[84,155793,155794,155796,155798,155800,155802,155804],{"class":86,"line":87},[84,155795,30742],{"class":94},[84,155797,478],{"class":477},[84,155799,103433],{"class":94},[84,155801,478],{"class":477},[84,155803,784],{"class":94},[84,155805,30824],{"class":477},[84,155807,155808,155810,155812,155814,155816,155818],{"class":86,"line":98},[84,155809,30742],{"class":94},[84,155811,478],{"class":477},[84,155813,103433],{"class":94},[84,155815,478],{"class":477},[84,155817,526],{"class":94},[84,155819,30824],{"class":477},[84,155821,155822,155824,155826,155828,155830,155832],{"class":86,"line":70},[84,155823,30742],{"class":94},[84,155825,478],{"class":477},[84,155827,103433],{"class":94},[84,155829,478],{"class":477},[84,155831,6173],{"class":104},[84,155833,30824],{"class":477},[84,155835,155836,155838,155840,155842,155844,155846],{"class":86,"line":120},[84,155837,30742],{"class":94},[84,155839,478],{"class":477},[84,155841,103433],{"class":94},[84,155843,478],{"class":477},[84,155845,31803],{"class":94},[84,155847,30824],{"class":477},[84,155849,155850,155852,155854,155856,155858,155860],{"class":86,"line":131},[84,155851,30742],{"class":94},[84,155853,478],{"class":477},[84,155855,103433],{"class":94},[84,155857,478],{"class":477},[84,155859,96012],{"class":94},[84,155861,30824],{"class":477},[35,155863,155864],{},"输出类似：",[75,155866,155869],{"className":155867,"code":155868,"language":5516,"meta":66},[5514],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[81,155870,155868],{"__ignoreMap":66},[35,155872,9354,155873,107609,155875,155877,155878,155880,155881,21829,155883,155880,155885,155887],{},[81,155874,1695],{},[81,155876,481],{}," 的子类，",[81,155879,31803],{}," 可以当作 ",[81,155882,692],{},[81,155884,34314],{},[81,155886,666],{},"，但业务代码中不要滥用。",[75,155889,155891],{"className":30705,"code":155890,"language":30707,"meta":66,"style":66},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[81,155892,155893,155911],{"__ignoreMap":66},[84,155894,155895,155897,155899,155901,155903,155905,155908],{"class":86,"line":87},[84,155896,30742],{"class":94},[84,155898,478],{"class":477},[84,155900,31803],{"class":94},[84,155902,45893],{"class":473},[84,155904,25446],{"class":94},[84,155906,155907],{"class":477},")   ",[84,155909,155910],{"class":328},"# 2\n",[84,155912,155913,155915,155917,155919,155921,155923,155925],{"class":86,"line":98},[84,155914,30742],{"class":94},[84,155916,478],{"class":477},[84,155918,34314],{"class":94},[84,155920,45893],{"class":473},[84,155922,25446],{"class":94},[84,155924,46135],{"class":477},[84,155926,155927],{"class":328},"# 1\n",[14,155929,155931],{"id":155930},"_26-类型转换","2.6 类型转换",[35,155933,155934],{},"常用转换函数：",[75,155936,155938],{"className":30705,"code":155937,"language":30707,"meta":66,"style":66},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[81,155939,155940,155950,155961,155971],{"__ignoreMap":66},[84,155941,155942,155944,155946,155948],{"class":86,"line":87},[84,155943,481],{"class":94},[84,155945,478],{"class":477},[84,155947,54642],{"class":104},[84,155949,484],{"class":477},[84,155951,155952,155954,155956,155959],{"class":86,"line":98},[84,155953,517],{"class":94},[84,155955,478],{"class":477},[84,155957,155958],{"class":104},"\"3.14\"",[84,155960,484],{"class":477},[84,155962,155963,155965,155967,155969],{"class":86,"line":70},[84,155964,1643],{"class":94},[84,155966,478],{"class":477},[84,155968,784],{"class":94},[84,155970,484],{"class":477},[84,155972,155973,155975,155977,155979],{"class":86,"line":120},[84,155974,1695],{"class":94},[84,155976,478],{"class":477},[84,155978,692],{"class":94},[84,155980,484],{"class":477},[35,155982,15464],{},[75,155984,155986],{"className":30705,"code":155985,"language":30707,"meta":66,"style":66},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[81,155987,155988,155997,156008],{"__ignoreMap":66},[84,155989,155990,155992,155994],{"class":86,"line":87},[84,155991,146792],{"class":477},[84,155993,523],{"class":473},[84,155995,155996],{"class":104}," \"18\"\n",[84,155998,155999,156001,156003,156005],{"class":86,"line":98},[84,156000,146792],{"class":477},[84,156002,523],{"class":473},[84,156004,2711],{"class":94},[84,156006,156007],{"class":477},"(age)\n",[84,156009,156010,156012,156015,156017,156019],{"class":86,"line":70},[84,156011,30742],{"class":94},[84,156013,156014],{"class":477},"(age ",[84,156016,954],{"class":473},[84,156018,25446],{"class":94},[84,156020,484],{"class":477},[35,156022,156023],{},"输入得到的内容永远是字符串：",[75,156025,156027],{"className":30705,"code":156026,"language":30707,"meta":66,"style":66},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[81,156028,156029,156045],{"__ignoreMap":66},[84,156030,156031,156034,156036,156038,156040,156043],{"class":86,"line":87},[84,156032,156033],{"class":477},"num ",[84,156035,523],{"class":473},[84,156037,60931],{"class":94},[84,156039,478],{"class":477},[84,156041,156042],{"class":104},"\"请输入数字:\"",[84,156044,484],{"class":477},[84,156046,156047,156049,156051,156053,156056],{"class":86,"line":98},[84,156048,30742],{"class":94},[84,156050,478],{"class":477},[84,156052,103433],{"class":94},[84,156054,156055],{"class":477},"(num))  ",[84,156057,156058],{"class":328},"# str\n",[35,156060,156061],{},"如果要做数学运算，必须转换：",[75,156063,156065],{"className":30705,"code":156064,"language":30707,"meta":66,"style":66},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[81,156066,156067,156085],{"__ignoreMap":66},[84,156068,156069,156071,156073,156075,156077,156079,156081,156083],{"class":86,"line":87},[84,156070,156033],{"class":477},[84,156072,523],{"class":473},[84,156074,2711],{"class":94},[84,156076,478],{"class":477},[84,156078,54147],{"class":94},[84,156080,478],{"class":477},[84,156082,156042],{"class":104},[84,156084,30824],{"class":477},[84,156086,156087,156089,156091,156093,156095],{"class":86,"line":98},[84,156088,30742],{"class":94},[84,156090,45946],{"class":477},[84,156092,954],{"class":473},[84,156094,2367],{"class":94},[84,156096,484],{"class":477},[35,156098,156099],{},"常见错误：",[75,156101,156103],{"className":30705,"code":156102,"language":30707,"meta":66,"style":66},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[81,156104,156105,156118],{"__ignoreMap":66},[84,156106,156107,156109,156111,156113,156115],{"class":86,"line":87},[84,156108,481],{"class":94},[84,156110,478],{"class":477},[84,156112,155958],{"class":104},[84,156114,155907],{"class":477},[84,156116,156117],{"class":328},"# 错误\n",[84,156119,156120,156122,156124,156127,156130],{"class":86,"line":98},[84,156121,481],{"class":94},[84,156123,478],{"class":477},[84,156125,156126],{"class":104},"\"abc\"",[84,156128,156129],{"class":477},")    ",[84,156131,156117],{"class":328},[35,156133,156134],{},"正确写法：",[75,156136,156138],{"className":30705,"code":156137,"language":30707,"meta":66,"style":66},"num = float(\"3.14\")\n",[81,156139,156140],{"__ignoreMap":66},[84,156141,156142,156144,156146,156148,156150,156152],{"class":86,"line":87},[84,156143,156033],{"class":477},[84,156145,523],{"class":473},[84,156147,110123],{"class":94},[84,156149,478],{"class":477},[84,156151,155958],{"class":104},[84,156153,484],{"class":477},[14,156155,156157],{"id":156156},"_27-运算符","2.7 运算符",[23,156159,156161],{"id":156160},"_271-算术运算符","2.7.1 算术运算符",[612,156163,156164,156175],{},[615,156165,156166],{},[618,156167,156168,156171,156173],{},[621,156169,156170],{},"运算符",[621,156172,26197],{},[621,156174,27819],{},[659,156176,156177,156191,156205,156219,156233,156247,156261],{},[618,156178,156179,156183,156186],{},[664,156180,156181],{},[81,156182,954],{},[664,156184,156185],{},"加法",[664,156187,156188],{},[81,156189,156190],{},"1 + 2",[618,156192,156193,156197,156200],{},[664,156194,156195],{},[81,156196,1005],{},[664,156198,156199],{},"减法",[664,156201,156202],{},[81,156203,156204],{},"5 - 3",[618,156206,156207,156211,156214],{},[664,156208,156209],{},[81,156210,928],{},[664,156212,156213],{},"乘法",[664,156215,156216],{},[81,156217,156218],{},"2 * 3",[618,156220,156221,156225,156228],{},[664,156222,156223],{},[81,156224,1057],{},[664,156226,156227],{},"除法，结果是浮点数",[664,156229,156230],{},[81,156231,156232],{},"5 \u002F 2",[618,156234,156235,156239,156242],{},[664,156236,156237],{},[81,156238,33656],{},[664,156240,156241],{},"整除",[664,156243,156244],{},[81,156245,156246],{},"5 \u002F\u002F 2",[618,156248,156249,156253,156256],{},[664,156250,156251],{},[81,156252,801],{},[664,156254,156255],{},"取余",[664,156257,156258],{},[81,156259,156260],{},"5 % 2",[618,156262,156263,156267,156270],{},[664,156264,156265],{},[81,156266,10990],{},[664,156268,156269],{},"幂运算",[664,156271,156272],{},[81,156273,156274],{},"2 ** 3",[35,156276,15464],{},[75,156278,156280],{"className":30705,"code":156279,"language":30707,"meta":66,"style":66},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[81,156281,156282,156300,156317,156334],{"__ignoreMap":66},[84,156283,156284,156286,156288,156290,156293,156295,156297],{"class":86,"line":87},[84,156285,30742],{"class":94},[84,156287,478],{"class":477},[84,156289,792],{"class":94},[84,156291,156292],{"class":473}," \u002F",[84,156294,15084],{"class":94},[84,156296,155907],{"class":477},[84,156298,156299],{"class":328},"# 2.5\n",[84,156301,156302,156304,156306,156308,156311,156313,156315],{"class":86,"line":98},[84,156303,30742],{"class":94},[84,156305,478],{"class":477},[84,156307,792],{"class":94},[84,156309,156310],{"class":473}," \u002F\u002F",[84,156312,15084],{"class":94},[84,156314,46135],{"class":477},[84,156316,155910],{"class":328},[84,156318,156319,156321,156323,156325,156328,156330,156332],{"class":86,"line":70},[84,156320,30742],{"class":94},[84,156322,478],{"class":477},[84,156324,792],{"class":94},[84,156326,156327],{"class":473}," %",[84,156329,15084],{"class":94},[84,156331,155907],{"class":477},[84,156333,155927],{"class":328},[84,156335,156336,156338,156340,156342,156345,156347,156349],{"class":86,"line":120},[84,156337,30742],{"class":94},[84,156339,478],{"class":477},[84,156341,553],{"class":94},[84,156343,156344],{"class":473}," **",[84,156346,78396],{"class":94},[84,156348,46135],{"class":477},[84,156350,156351],{"class":328},"# 8\n",[23,156353,156355],{"id":156354},"_272-赋值运算符","2.7.2 赋值运算符",[75,156357,156359],{"className":30705,"code":156358,"language":30707,"meta":66,"style":66},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[81,156360,156361,156369,156377,156385,156393],{"__ignoreMap":66},[84,156362,156363,156365,156367],{"class":86,"line":87},[84,156364,156033],{"class":477},[84,156366,523],{"class":473},[84,156368,58754],{"class":94},[84,156370,156371,156373,156375],{"class":86,"line":98},[84,156372,156033],{"class":477},[84,156374,9806],{"class":473},[84,156376,54753],{"class":94},[84,156378,156379,156381,156383],{"class":86,"line":70},[84,156380,156033],{"class":477},[84,156382,150498],{"class":473},[84,156384,48050],{"class":94},[84,156386,156387,156389,156391],{"class":86,"line":120},[84,156388,156033],{"class":477},[84,156390,137394],{"class":473},[84,156392,120360],{"class":94},[84,156394,156395,156397,156400],{"class":86,"line":131},[84,156396,156033],{"class":477},[84,156398,156399],{"class":473},"\u002F=",[84,156401,48050],{"class":94},[35,156403,156404],{},"等价关系：",[75,156406,156408],{"className":30705,"code":156407,"language":30707,"meta":66,"style":66},"num += 1\nnum = num + 1\n",[81,156409,156410,156418],{"__ignoreMap":66},[84,156411,156412,156414,156416],{"class":86,"line":87},[84,156413,156033],{"class":477},[84,156415,9806],{"class":473},[84,156417,56025],{"class":94},[84,156419,156420,156422,156424,156427,156429],{"class":86,"line":98},[84,156421,156033],{"class":477},[84,156423,523],{"class":473},[84,156425,156426],{"class":477}," num ",[84,156428,954],{"class":473},[84,156430,56025],{"class":94},[35,156432,156433,156434,101344,156437,28712],{},"Python 没有 ",[81,156435,156436],{},"num++",[81,156438,156439],{},"num--",[23,156441,156443],{"id":156442},"_273-比较运算符","2.7.3 比较运算符",[35,156445,156446],{},"比较运算结果是布尔值。",[75,156448,156450],{"className":30705,"code":156449,"language":30707,"meta":66,"style":66},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[81,156451,156452,156466,156481,156495],{"__ignoreMap":66},[84,156453,156454,156456,156458,156460,156462,156464],{"class":86,"line":87},[84,156455,30742],{"class":94},[84,156457,478],{"class":477},[84,156459,919],{"class":94},[84,156461,26550],{"class":473},[84,156463,2477],{"class":94},[84,156465,484],{"class":477},[84,156467,156468,156470,156472,156474,156477,156479],{"class":86,"line":98},[84,156469,30742],{"class":94},[84,156471,478],{"class":477},[84,156473,919],{"class":94},[84,156475,156476],{"class":473}," >=",[84,156478,2367],{"class":94},[84,156480,484],{"class":477},[84,156482,156483,156485,156487,156489,156491,156493],{"class":86,"line":70},[84,156484,30742],{"class":94},[84,156486,478],{"class":477},[84,156488,919],{"class":94},[84,156490,101885],{"class":473},[84,156492,2412],{"class":94},[84,156494,484],{"class":477},[84,156496,156497,156499,156501,156503,156506,156508],{"class":86,"line":120},[84,156498,30742],{"class":94},[84,156500,478],{"class":477},[84,156502,919],{"class":94},[84,156504,156505],{"class":473}," !=",[84,156507,2412],{"class":94},[84,156509,484],{"class":477},[35,156511,156512,156513,156515,156516,28712],{},"注意：判断相等用 ",[81,156514,3278],{},"，赋值用 ",[81,156517,523],{},[75,156519,156521],{"className":30705,"code":156520,"language":30707,"meta":66,"style":66},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[81,156522,156523,156535],{"__ignoreMap":66},[84,156524,156525,156527,156529,156532],{"class":86,"line":87},[84,156526,146792],{"class":477},[84,156528,523],{"class":473},[84,156530,156531],{"class":94}," 18",[84,156533,156534],{"class":328},"       # 赋值\n",[84,156536,156537,156539,156541,156543],{"class":86,"line":98},[84,156538,146792],{"class":477},[84,156540,3278],{"class":473},[84,156542,156531],{"class":94},[84,156544,156545],{"class":328},"      # 判断是否相等\n",[23,156547,156549],{"id":156548},"_274-逻辑运算符","2.7.4 逻辑运算符",[612,156551,156552,156560],{},[615,156553,156554],{},[618,156555,156556,156558],{},[621,156557,156170],{},[621,156559,26197],{},[659,156561,156562,156571,156580],{},[618,156563,156564,156568],{},[664,156565,156566],{},[81,156567,30789],{},[664,156569,156570],{},"并且",[618,156572,156573,156577],{},[664,156574,156575],{},[81,156576,115416],{},[664,156578,156579],{},"或者",[618,156581,156582,156587],{},[664,156583,156584],{},[81,156585,156586],{},"not",[664,156588,156589],{},"取反",[75,156591,156593],{"className":30705,"code":156592,"language":30707,"meta":66,"style":66},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[81,156594,156595,156603,156612,156616,156631,156645],{"__ignoreMap":66},[84,156596,156597,156599,156601],{"class":86,"line":87},[84,156598,146792],{"class":477},[84,156600,523],{"class":473},[84,156602,88391],{"class":94},[84,156604,156605,156608,156610],{"class":86,"line":98},[84,156606,156607],{"class":477},"has_ticket ",[84,156609,523],{"class":473},[84,156611,153845],{"class":94},[84,156613,156614],{"class":86,"line":70},[84,156615,2729],{"emptyLinePlaceholder":403},[84,156617,156618,156620,156622,156624,156626,156628],{"class":86,"line":120},[84,156619,30742],{"class":94},[84,156621,156014],{"class":477},[84,156623,2040],{"class":473},[84,156625,156531],{"class":94},[84,156627,120753],{"class":473},[84,156629,156630],{"class":477}," has_ticket)\n",[84,156632,156633,156635,156637,156639,156641,156643],{"class":86,"line":131},[84,156634,30742],{"class":94},[84,156636,156014],{"class":477},[84,156638,1383],{"class":473},[84,156640,156531],{"class":94},[84,156642,114527],{"class":473},[84,156644,156630],{"class":477},[84,156646,156647,156649,156651,156653],{"class":86,"line":145},[84,156648,30742],{"class":94},[84,156650,478],{"class":477},[84,156652,156586],{"class":473},[84,156654,156630],{"class":477},[14,156656,156658],{"id":156657},"_28-字符串定义","2.8 字符串定义",[35,156660,156661],{},"三种常见写法：",[75,156663,156665],{"className":30705,"code":156664,"language":30707,"meta":66,"style":66},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[81,156666,156667,156677,156686,156696],{"__ignoreMap":66},[84,156668,156669,156672,156674],{"class":86,"line":87},[84,156670,156671],{"class":477},"name1 ",[84,156673,523],{"class":473},[84,156675,156676],{"class":104}," '小明'\n",[84,156678,156679,156682,156684],{"class":86,"line":98},[84,156680,156681],{"class":477},"name2 ",[84,156683,523],{"class":473},[84,156685,149599],{"class":104},[84,156687,156688,156691,156693],{"class":86,"line":70},[84,156689,156690],{"class":477},"text ",[84,156692,523],{"class":473},[84,156694,156695],{"class":104}," \"\"\"这是多行字符串\n",[84,156697,156698],{"class":86,"line":120},[84,156699,156700],{"class":104},"可以换行\"\"\"\n",[35,156702,156703],{},"字符串中包含引号：",[75,156705,156707],{"className":30705,"code":156706,"language":30707,"meta":66,"style":66},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[81,156708,156709,156719,156729],{"__ignoreMap":66},[84,156710,156711,156714,156716],{"class":86,"line":87},[84,156712,156713],{"class":477},"msg ",[84,156715,523],{"class":473},[84,156717,156718],{"class":104}," \"他说:'你好'\"\n",[84,156720,156721,156724,156726],{"class":86,"line":98},[84,156722,156723],{"class":477},"msg2 ",[84,156725,523],{"class":473},[84,156727,156728],{"class":104}," '他说:\"你好\"'\n",[84,156730,156731,156734,156736,156739,156742,156745,156747],{"class":86,"line":70},[84,156732,156733],{"class":477},"msg3 ",[84,156735,523],{"class":473},[84,156737,156738],{"class":104}," \"他说:",[84,156740,156741],{"class":94},"\\\"",[84,156743,156744],{"class":104},"你好",[84,156746,156741],{"class":94},[84,156748,25461],{"class":104},[35,156750,156751],{},"常见转义字符：",[612,156753,156754,156763],{},[615,156755,156756],{},[618,156757,156758,156761],{},[621,156759,156760],{},"写法",[621,156762,101026],{},[659,156764,156765,156775,156784,156794,156803],{},[618,156766,156767,156772],{},[664,156768,156769],{},[81,156770,156771],{},"\\n",[664,156773,156774],{},"换行",[618,156776,156777,156781],{},[664,156778,156779],{},[81,156780,1574],{},[664,156782,156783],{},"制表符",[618,156785,156786,156791],{},[664,156787,156788],{},[81,156789,156790],{},"\\\\",[664,156792,156793],{},"反斜杠",[618,156795,156796,156800],{},[664,156797,156798],{},[81,156799,156741],{},[664,156801,156802],{},"双引号",[618,156804,156805,156810],{},[664,156806,156807],{},[81,156808,156809],{},"\\'",[664,156811,156812],{},"单引号",[14,156814,156816],{"id":156815},"_29-字符串拼接","2.9 字符串拼接",[75,156818,156820],{"className":30705,"code":156819,"language":30707,"meta":66,"style":66},"name = \"小明\"\nprint(\"你好，\" + name)\n",[81,156821,156822,156830],{"__ignoreMap":66},[84,156823,156824,156826,156828],{"class":86,"line":87},[84,156825,146782],{"class":477},[84,156827,523],{"class":473},[84,156829,149599],{"class":104},[84,156831,156832,156834,156836,156839,156841],{"class":86,"line":98},[84,156833,30742],{"class":94},[84,156835,478],{"class":477},[84,156837,156838],{"class":104},"\"你好，\"",[84,156840,45893],{"class":473},[84,156842,156843],{"class":477}," name)\n",[35,156845,156846],{},"字符串只能和字符串拼接：",[75,156848,156850],{"className":30705,"code":156849,"language":30707,"meta":66,"style":66},"age = 18\nprint(\"年龄:\" + str(age))\n",[81,156851,156852,156860],{"__ignoreMap":66},[84,156853,156854,156856,156858],{"class":86,"line":87},[84,156855,146792],{"class":477},[84,156857,523],{"class":473},[84,156859,146797],{"class":94},[84,156861,156862,156864,156866,156868,156870,156872],{"class":86,"line":98},[84,156863,30742],{"class":94},[84,156865,478],{"class":477},[84,156867,146763],{"class":104},[84,156869,45893],{"class":473},[84,156871,74245],{"class":94},[84,156873,156874],{"class":477},"(age))\n",[35,156876,156877],{},"更推荐使用格式化字符串。",[14,156879,156881],{"id":156880},"_210-字符串格式化","2.10 字符串格式化",[23,156883,156885],{"id":156884},"_2101-百分号格式化","2.10.1 百分号格式化",[75,156887,156889],{"className":30705,"code":156888,"language":30707,"meta":66,"style":66},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[81,156890,156891,156899,156907,156916,156920],{"__ignoreMap":66},[84,156892,156893,156895,156897],{"class":86,"line":87},[84,156894,146782],{"class":477},[84,156896,523],{"class":473},[84,156898,149599],{"class":104},[84,156900,156901,156903,156905],{"class":86,"line":98},[84,156902,146792],{"class":477},[84,156904,523],{"class":473},[84,156906,146797],{"class":94},[84,156908,156909,156911,156913],{"class":86,"line":70},[84,156910,155604],{"class":477},[84,156912,523],{"class":473},[84,156914,156915],{"class":94}," 95.5\n",[84,156917,156918],{"class":86,"line":120},[84,156919,2729],{"emptyLinePlaceholder":403},[84,156921,156922,156924,156926,156929,156932,156935,156938,156941,156944,156946,156948],{"class":86,"line":131},[84,156923,30742],{"class":94},[84,156925,478],{"class":477},[84,156927,156928],{"class":104},"\"姓名:",[84,156930,156931],{"class":94},"%s",[84,156933,156934],{"class":104}," 年龄:",[84,156936,156937],{"class":94},"%d",[84,156939,156940],{"class":104}," 分数:",[84,156942,156943],{"class":94},"%.1f",[84,156945,725],{"class":104},[84,156947,156327],{"class":473},[84,156949,156950],{"class":477}," (name, age, score))\n",[35,156952,156953],{},"常用占位符：",[612,156955,156956,156965],{},[615,156957,156958],{},[618,156959,156960,156963],{},[621,156961,156962],{},"占位符",[621,156964,26197],{},[659,156966,156967,156975,156983],{},[618,156968,156969,156973],{},[664,156970,156971],{},[81,156972,156931],{},[664,156974,155470],{},[618,156976,156977,156981],{},[664,156978,156979],{},[81,156980,156937],{},[664,156982,155448],{},[618,156984,156985,156990],{},[664,156986,156987],{},[81,156988,156989],{},"%f",[664,156991,155459],{},[35,156993,156994],{},"精度控制：",[75,156996,156998],{"className":30705,"code":156997,"language":30707,"meta":66,"style":66},"price = 12.3456\nprint(\"%.2f\" % price)\n",[81,156999,157000,157009],{"__ignoreMap":66},[84,157001,157002,157004,157006],{"class":86,"line":87},[84,157003,146927],{"class":477},[84,157005,523],{"class":473},[84,157007,157008],{"class":94}," 12.3456\n",[84,157010,157011,157013,157015,157017,157020,157022,157024],{"class":86,"line":98},[84,157012,30742],{"class":94},[84,157014,478],{"class":477},[84,157016,725],{"class":104},[84,157018,157019],{"class":94},"%.2f",[84,157021,725],{"class":104},[84,157023,156327],{"class":473},[84,157025,157026],{"class":477}," price)\n",[23,157028,157030],{"id":157029},"_2102-format方法","2.10.2 format方法",[75,157032,157034],{"className":30705,"code":157033,"language":30707,"meta":66,"style":66},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[81,157035,157036,157044,157052,157056,157075,157095],{"__ignoreMap":66},[84,157037,157038,157040,157042],{"class":86,"line":87},[84,157039,146782],{"class":477},[84,157041,523],{"class":473},[84,157043,149599],{"class":104},[84,157045,157046,157048,157050],{"class":86,"line":98},[84,157047,146792],{"class":477},[84,157049,523],{"class":473},[84,157051,146797],{"class":94},[84,157053,157054],{"class":86,"line":70},[84,157055,2729],{"emptyLinePlaceholder":403},[84,157057,157058,157060,157062,157064,157066,157068,157070,157072],{"class":86,"line":120},[84,157059,30742],{"class":94},[84,157061,478],{"class":477},[84,157063,156928],{"class":104},[84,157065,32786],{"class":94},[84,157067,156934],{"class":104},[84,157069,32786],{"class":94},[84,157071,725],{"class":104},[84,157073,157074],{"class":477},".format(name, age))\n",[84,157076,157077,157079,157081,157083,157086,157088,157091,157093],{"class":86,"line":131},[84,157078,30742],{"class":94},[84,157080,478],{"class":477},[84,157082,156928],{"class":104},[84,157084,157085],{"class":94},"{0}",[84,157087,156934],{"class":104},[84,157089,157090],{"class":94},"{1}",[84,157092,725],{"class":104},[84,157094,157074],{"class":477},[84,157096,157097,157099,157101,157103,157106,157108,157111,157113,157116,157118,157120,157123,157125,157127],{"class":86,"line":145},[84,157098,30742],{"class":94},[84,157100,478],{"class":477},[84,157102,156928],{"class":104},[84,157104,157105],{"class":94},"{name}",[84,157107,156934],{"class":104},[84,157109,157110],{"class":94},"{age}",[84,157112,725],{"class":104},[84,157114,157115],{"class":477},".format(",[84,157117,80136],{"class":5545},[84,157119,523],{"class":473},[84,157121,157122],{"class":477},"name, ",[84,157124,70547],{"class":5545},[84,157126,523],{"class":473},[84,157128,157129],{"class":477},"age))\n",[23,157131,157133],{"id":157132},"_2103-f-string","2.10.3 f-string",[35,157135,157136],{},"推荐写法：",[75,157138,157140],{"className":30705,"code":157139,"language":30707,"meta":66,"style":66},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[81,157141,157142,157150,157158,157166,157170],{"__ignoreMap":66},[84,157143,157144,157146,157148],{"class":86,"line":87},[84,157145,146782],{"class":477},[84,157147,523],{"class":473},[84,157149,149599],{"class":104},[84,157151,157152,157154,157156],{"class":86,"line":98},[84,157153,146792],{"class":477},[84,157155,523],{"class":473},[84,157157,146797],{"class":94},[84,157159,157160,157162,157164],{"class":86,"line":70},[84,157161,155604],{"class":477},[84,157163,523],{"class":473},[84,157165,156915],{"class":94},[84,157167,157168],{"class":86,"line":120},[84,157169,2729],{"emptyLinePlaceholder":403},[84,157171,157172,157174,157176,157178,157180,157182,157184,157186,157188,157190,157192,157194,157196,157198,157201,157204,157206,157208],{"class":86,"line":131},[84,157173,30742],{"class":94},[84,157175,478],{"class":477},[84,157177,529],{"class":473},[84,157179,156928],{"class":104},[84,157181,1369],{"class":94},[84,157183,80136],{"class":477},[84,157185,1419],{"class":94},[84,157187,156934],{"class":104},[84,157189,1369],{"class":94},[84,157191,70547],{"class":477},[84,157193,1419],{"class":94},[84,157195,156940],{"class":104},[84,157197,1369],{"class":94},[84,157199,157200],{"class":477},"score",[84,157202,157203],{"class":473},":.1f",[84,157205,1419],{"class":94},[84,157207,725],{"class":104},[84,157209,484],{"class":477},[35,157211,157212],{},"表达式也可以放进去：",[75,157214,157216],{"className":30705,"code":157215,"language":30707,"meta":66,"style":66},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[81,157217,157218,157226,157234],{"__ignoreMap":66},[84,157219,157220,157222,157224],{"class":86,"line":87},[84,157221,146927],{"class":477},[84,157223,523],{"class":473},[84,157225,146932],{"class":94},[84,157227,157228,157230,157232],{"class":86,"line":98},[84,157229,146937],{"class":477},[84,157231,523],{"class":473},[84,157233,54753],{"class":94},[84,157235,157236,157238,157240,157242,157245,157247,157249,157251,157254,157256,157259],{"class":86,"line":70},[84,157237,30742],{"class":94},[84,157239,478],{"class":477},[84,157241,529],{"class":473},[84,157243,157244],{"class":104},"\"总价:",[84,157246,1369],{"class":94},[84,157248,146927],{"class":477},[84,157250,928],{"class":473},[84,157252,157253],{"class":477}," count",[84,157255,1419],{"class":94},[84,157257,157258],{"class":104},"元\"",[84,157260,484],{"class":477},[14,157262,157264],{"id":157263},"_211-input输入","2.11 input输入",[35,157266,157267,157270],{},[81,157268,157269],{},"input()"," 会暂停程序，等待用户输入。",[75,157272,157274],{"className":30705,"code":157273,"language":30707,"meta":66,"style":66},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[81,157275,157276,157290],{"__ignoreMap":66},[84,157277,157278,157280,157282,157284,157286,157288],{"class":86,"line":87},[84,157279,146782],{"class":477},[84,157281,523],{"class":473},[84,157283,60931],{"class":94},[84,157285,478],{"class":477},[84,157287,152625],{"class":104},[84,157289,484],{"class":477},[84,157291,157292,157294,157296,157298,157301,157303,157305,157307,157309],{"class":86,"line":98},[84,157293,30742],{"class":94},[84,157295,478],{"class":477},[84,157297,529],{"class":473},[84,157299,157300],{"class":104},"\"你好，",[84,157302,1369],{"class":94},[84,157304,80136],{"class":477},[84,157306,1419],{"class":94},[84,157308,725],{"class":104},[84,157310,484],{"class":477},[35,157312,157313],{},"输入整数：",[75,157315,157317],{"className":30705,"code":157316,"language":30707,"meta":66,"style":66},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[81,157318,157319,157337],{"__ignoreMap":66},[84,157320,157321,157323,157325,157327,157329,157331,157333,157335],{"class":86,"line":87},[84,157322,146792],{"class":477},[84,157324,523],{"class":473},[84,157326,2711],{"class":94},[84,157328,478],{"class":477},[84,157330,54147],{"class":94},[84,157332,478],{"class":477},[84,157334,152640],{"class":104},[84,157336,30824],{"class":477},[84,157338,157339,157341,157343,157345,157348,157350,157352,157354,157357,157359],{"class":86,"line":98},[84,157340,30742],{"class":94},[84,157342,478],{"class":477},[84,157344,529],{"class":473},[84,157346,157347],{"class":104},"\"明年你",[84,157349,1369],{"class":94},[84,157351,146792],{"class":477},[84,157353,954],{"class":473},[84,157355,157356],{"class":94}," 1}",[84,157358,149650],{"class":104},[84,157360,484],{"class":477},[35,157362,157363],{},"输入小数：",[75,157365,157367],{"className":30705,"code":157366,"language":30707,"meta":66,"style":66},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[81,157368,157369,157388],{"__ignoreMap":66},[84,157370,157371,157373,157375,157377,157379,157381,157383,157386],{"class":86,"line":87},[84,157372,155577],{"class":477},[84,157374,523],{"class":473},[84,157376,110123],{"class":94},[84,157378,478],{"class":477},[84,157380,54147],{"class":94},[84,157382,478],{"class":477},[84,157384,157385],{"class":104},"\"请输入身高:\"",[84,157387,30824],{"class":477},[84,157389,157390,157392,157394,157396,157399,157401,157403,157406,157408,157411],{"class":86,"line":98},[84,157391,30742],{"class":94},[84,157393,478],{"class":477},[84,157395,529],{"class":473},[84,157397,157398],{"class":104},"\"身高:",[84,157400,1369],{"class":94},[84,157402,25309],{"class":477},[84,157404,157405],{"class":473},":.2f",[84,157407,1419],{"class":94},[84,157409,157410],{"class":104},"米\"",[84,157412,484],{"class":477},[14,157414,157416],{"id":157415},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[35,157418,123538],{},[28,157420,157421,157424,157427,157430],{},[31,157422,157423],{},"输入商品单价。",[31,157425,157426],{},"输入购买数量。",[31,157428,157429],{},"输入折扣，例如 0.8 表示八折。",[31,157431,157432],{},"输出最终金额，保留两位小数。",[35,157434,10364],{},[75,157436,157438],{"className":30705,"code":157437,"language":30707,"meta":66,"style":66},"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",[81,157439,157440,157459,157478,157498,157502,157522,157526,157549,157570,157592],{"__ignoreMap":66},[84,157441,157442,157444,157446,157448,157450,157452,157454,157457],{"class":86,"line":87},[84,157443,146927],{"class":477},[84,157445,523],{"class":473},[84,157447,110123],{"class":94},[84,157449,478],{"class":477},[84,157451,54147],{"class":94},[84,157453,478],{"class":477},[84,157455,157456],{"class":104},"\"请输入商品单价:\"",[84,157458,30824],{"class":477},[84,157460,157461,157463,157465,157467,157469,157471,157473,157476],{"class":86,"line":98},[84,157462,146937],{"class":477},[84,157464,523],{"class":473},[84,157466,2711],{"class":94},[84,157468,478],{"class":477},[84,157470,54147],{"class":94},[84,157472,478],{"class":477},[84,157474,157475],{"class":104},"\"请输入购买数量:\"",[84,157477,30824],{"class":477},[84,157479,157480,157483,157485,157487,157489,157491,157493,157496],{"class":86,"line":70},[84,157481,157482],{"class":477},"discount ",[84,157484,523],{"class":473},[84,157486,110123],{"class":94},[84,157488,478],{"class":477},[84,157490,54147],{"class":94},[84,157492,478],{"class":477},[84,157494,157495],{"class":104},"\"请输入折扣:\"",[84,157497,30824],{"class":477},[84,157499,157500],{"class":86,"line":120},[84,157501,2729],{"emptyLinePlaceholder":403},[84,157503,157504,157507,157509,157512,157514,157517,157519],{"class":86,"line":131},[84,157505,157506],{"class":477},"total ",[84,157508,523],{"class":473},[84,157510,157511],{"class":477}," price ",[84,157513,928],{"class":473},[84,157515,157516],{"class":477}," count ",[84,157518,928],{"class":473},[84,157520,157521],{"class":477}," discount\n",[84,157523,157524],{"class":86,"line":145},[84,157525,2729],{"emptyLinePlaceholder":403},[84,157527,157528,157530,157532,157534,157537,157539,157541,157543,157545,157547],{"class":86,"line":156},[84,157529,30742],{"class":94},[84,157531,478],{"class":477},[84,157533,529],{"class":473},[84,157535,157536],{"class":104},"\"商品单价:",[84,157538,1369],{"class":94},[84,157540,80141],{"class":477},[84,157542,157405],{"class":473},[84,157544,1419],{"class":94},[84,157546,725],{"class":104},[84,157548,484],{"class":477},[84,157550,157551,157553,157555,157557,157560,157562,157564,157566,157568],{"class":86,"line":164},[84,157552,30742],{"class":94},[84,157554,478],{"class":477},[84,157556,529],{"class":473},[84,157558,157559],{"class":104},"\"购买数量:",[84,157561,1369],{"class":94},[84,157563,84760],{"class":477},[84,157565,1419],{"class":94},[84,157567,725],{"class":104},[84,157569,484],{"class":477},[84,157571,157572,157574,157576,157578,157581,157583,157586,157588,157590],{"class":86,"line":175},[84,157573,30742],{"class":94},[84,157575,478],{"class":477},[84,157577,529],{"class":473},[84,157579,157580],{"class":104},"\"折扣:",[84,157582,1369],{"class":94},[84,157584,157585],{"class":477},"discount",[84,157587,1419],{"class":94},[84,157589,725],{"class":104},[84,157591,484],{"class":477},[84,157593,157594,157596,157598,157600,157603,157605,157608,157610,157612,157614],{"class":86,"line":185},[84,157595,30742],{"class":94},[84,157597,478],{"class":477},[84,157599,529],{"class":473},[84,157601,157602],{"class":104},"\"应付金额:",[84,157604,1369],{"class":94},[84,157606,157607],{"class":477},"total",[84,157609,157405],{"class":473},[84,157611,1419],{"class":94},[84,157613,157258],{"class":104},[84,157615,484],{"class":477},[14,157617,157619],{"id":157618},"_213-易错点","2.13 易错点",[28,157621,157622,157627,157633,157641,157644],{},[31,157623,157624,157626],{},[81,157625,157269],{}," 的结果是字符串，做运算前要转换。",[31,157628,157629,157630,28712],{},"字符串拼接时，数字要先 ",[81,157631,157632],{},"str()",[31,157634,157635,157637,157638,157640],{},[81,157636,523],{}," 是赋值，",[81,157639,3278],{}," 是比较。",[31,157642,157643],{},"Python 没有自增自减运算符。",[31,157645,157646],{},"浮点数计算可能有精度误差：",[75,157648,157650],{"className":30705,"code":157649,"language":30707,"meta":66,"style":66},"print(0.1 + 0.2)\n",[81,157651,157652],{"__ignoreMap":66},[84,157653,157654,157656,157658,157660,157662,157665],{"class":86,"line":87},[84,157655,30742],{"class":94},[84,157657,478],{"class":477},[84,157659,86536],{"class":94},[84,157661,45893],{"class":473},[84,157663,157664],{"class":94}," 0.2",[84,157666,484],{"class":477},[35,157668,157669,157670,157673],{},"金额计算如果要求严格，可以后续学习 ",[81,157671,157672],{},"decimal"," 模块。",[14,157675,157677],{"id":157676},"_214-本章练习","2.14 本章练习",[28,157679,157680,157683,157686,157689,157692],{},[31,157681,157682],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[31,157684,157685],{},"输入圆的半径，计算面积，保留两位小数。",[31,157687,157688],{},"输入工资和奖金，计算总收入。",[31,157690,157691],{},"输入摄氏温度，转换为华氏温度。",[31,157693,157694],{},"写一个 BMI 计算程序：",[75,157696,157699],{"className":157697,"code":157698,"language":5516,"meta":66},[5514],"BMI = 体重kg \u002F 身高m ** 2\n",[81,157700,157698],{"__ignoreMap":66},[389,157702,157703],{},"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":66,"searchDepth":98,"depth":98,"links":157705},[157706,157707,157708,157709,157710,157711,157712,157718,157719,157720,157725,157726,157727,157728],{"id":155267,"depth":98,"text":155268},{"id":155376,"depth":98,"text":155377},{"id":155547,"depth":98,"text":155548},{"id":155624,"depth":98,"text":155625},{"id":51058,"depth":98,"text":51059},{"id":155930,"depth":98,"text":155931},{"id":156156,"depth":98,"text":156157,"children":157713},[157714,157715,157716,157717],{"id":156160,"depth":70,"text":156161},{"id":156354,"depth":70,"text":156355},{"id":156442,"depth":70,"text":156443},{"id":156548,"depth":70,"text":156549},{"id":156657,"depth":98,"text":156658},{"id":156815,"depth":98,"text":156816},{"id":156880,"depth":98,"text":156881,"children":157721},[157722,157723,157724],{"id":156884,"depth":70,"text":156885},{"id":157029,"depth":70,"text":157030},{"id":157132,"depth":70,"text":157133},{"id":157263,"depth":98,"text":157264},{"id":157415,"depth":98,"text":157416},{"id":157618,"depth":98,"text":157619},{"id":157676,"depth":98,"text":157677},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155259,"description":400},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157735,"title":157736,"body":157737,"description":400,"extension":401,"meta":159373,"navigation":403,"path":159374,"seo":159375,"stem":159376,"__hash__":159377},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157738,"toc":159354},[157739,157742,157746,157749,157764,157767,157795,157799,157849,157851,157867,157870,157896,157899,157903,157970,157973,157989,157993,157996,158114,158117,158124,158173,158179,158183,158186,158299,158302,158306,158310,158313,158363,158367,158370,158420,158424,158427,158465,158469,158472,158518,158521,158556,158560,158565,158568,158614,158616,158683,158687,158693,158804,158813,158817,158819,158830,158832,158998,159002,159004,159018,159020,159234,159238,159257,159274,159277,159323,159327,159351],[10,157740,157736],{"id":157741},"_3-判断语句",[14,157743,157745],{"id":157744},"_31-布尔值","3.1 布尔值",[35,157747,157748],{},"判断语句依赖布尔值：",[75,157750,157752],{"className":30705,"code":157751,"language":30707,"meta":66,"style":66},"True\nFalse\n",[81,157753,157754,157759],{"__ignoreMap":66},[84,157755,157756],{"class":86,"line":87},[84,157757,157758],{"class":94},"True\n",[84,157760,157761],{"class":86,"line":98},[84,157762,157763],{"class":94},"False\n",[35,157765,157766],{},"比较表达式会产生布尔值：",[75,157768,157770],{"className":30705,"code":157769,"language":30707,"meta":66,"style":66},"age = 18\nprint(age >= 18)  # True\n",[81,157771,157772,157780],{"__ignoreMap":66},[84,157773,157774,157776,157778],{"class":86,"line":87},[84,157775,146792],{"class":477},[84,157777,523],{"class":473},[84,157779,146797],{"class":94},[84,157781,157782,157784,157786,157788,157790,157792],{"class":86,"line":98},[84,157783,30742],{"class":94},[84,157785,156014],{"class":477},[84,157787,2040],{"class":473},[84,157789,156531],{"class":94},[84,157791,46135],{"class":477},[84,157793,157794],{"class":328},"# True\n",[14,157796,157798],{"id":157797},"_32-if基础语法","3.2 if基础语法",[75,157800,157802],{"className":30705,"code":157801,"language":30707,"meta":66,"style":66},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[81,157803,157804,157822,157826,157838],{"__ignoreMap":66},[84,157805,157806,157808,157810,157812,157814,157816,157818,157820],{"class":86,"line":87},[84,157807,146792],{"class":477},[84,157809,523],{"class":473},[84,157811,2711],{"class":94},[84,157813,478],{"class":477},[84,157815,54147],{"class":94},[84,157817,478],{"class":477},[84,157819,152640],{"class":104},[84,157821,30824],{"class":477},[84,157823,157824],{"class":86,"line":98},[84,157825,2729],{"emptyLinePlaceholder":403},[84,157827,157828,157830,157832,157834,157836],{"class":86,"line":70},[84,157829,1871],{"class":473},[84,157831,16036],{"class":477},[84,157833,2040],{"class":473},[84,157835,156531],{"class":94},[84,157837,4068],{"class":477},[84,157839,157840,157842,157844,157847],{"class":86,"line":120},[84,157841,31626],{"class":94},[84,157843,478],{"class":477},[84,157845,157846],{"class":104},"\"可以进入网吧\"",[84,157848,484],{"class":477},[35,157850,9354],{},[28,157852,157853,157858,157861,157864],{},[31,157854,157855,157857],{},[81,157856,1871],{}," 后面是条件表达式。",[31,157859,157860],{},"条件后面必须写冒号。",[31,157862,157863],{},"条件成立时执行缩进代码块。",[31,157865,157866],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[35,157868,157869],{},"错误示例：",[75,157871,157873],{"className":30705,"code":157872,"language":30707,"meta":66,"style":66},"if age >= 18\n    print(\"可以进入\")\n",[81,157874,157875,157885],{"__ignoreMap":66},[84,157876,157877,157879,157881,157883],{"class":86,"line":87},[84,157878,1871],{"class":473},[84,157880,16036],{"class":477},[84,157882,2040],{"class":473},[84,157884,146797],{"class":94},[84,157886,157887,157889,157891,157894],{"class":86,"line":98},[84,157888,31626],{"class":94},[84,157890,478],{"class":477},[84,157892,157893],{"class":104},"\"可以进入\"",[84,157895,484],{"class":477},[35,157897,157898],{},"缺少冒号。",[14,157900,157902],{"id":157901},"_33-if-else","3.3 if else",[75,157904,157906],{"className":30705,"code":157905,"language":30707,"meta":66,"style":66},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[81,157907,157908,157926,157930,157942,157953,157959],{"__ignoreMap":66},[84,157909,157910,157912,157914,157916,157918,157920,157922,157924],{"class":86,"line":87},[84,157911,146792],{"class":477},[84,157913,523],{"class":473},[84,157915,2711],{"class":94},[84,157917,478],{"class":477},[84,157919,54147],{"class":94},[84,157921,478],{"class":477},[84,157923,152640],{"class":104},[84,157925,30824],{"class":477},[84,157927,157928],{"class":86,"line":98},[84,157929,2729],{"emptyLinePlaceholder":403},[84,157931,157932,157934,157936,157938,157940],{"class":86,"line":70},[84,157933,1871],{"class":473},[84,157935,16036],{"class":477},[84,157937,2040],{"class":473},[84,157939,156531],{"class":94},[84,157941,4068],{"class":477},[84,157943,157944,157946,157948,157951],{"class":86,"line":120},[84,157945,31626],{"class":94},[84,157947,478],{"class":477},[84,157949,157950],{"class":104},"\"成年人\"",[84,157952,484],{"class":477},[84,157954,157955,157957],{"class":86,"line":131},[84,157956,2031],{"class":473},[84,157958,4068],{"class":477},[84,157960,157961,157963,157965,157968],{"class":86,"line":145},[84,157962,31626],{"class":94},[84,157964,478],{"class":477},[84,157966,157967],{"class":104},"\"未成年人\"",[84,157969,484],{"class":477},[35,157971,157972],{},"执行逻辑：",[28,157974,157975,157981,157986],{},[31,157976,157977,157978,157980],{},"条件成立，执行 ",[81,157979,1871],{}," 代码块。",[31,157982,157983,157984,157980],{},"条件不成立，执行 ",[81,157985,2031],{},[31,157987,157988],{},"两个代码块只会执行其中一个。",[14,157990,157992],{"id":157991},"_34-if-elif-else","3.4 if elif else",[35,157994,157995],{},"多条件判断：",[75,157997,157999],{"className":30705,"code":157998,"language":30707,"meta":66,"style":66},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[81,158000,158001,158019,158023,158037,158048,158062,158073,158086,158097,158103],{"__ignoreMap":66},[84,158002,158003,158005,158007,158009,158011,158013,158015,158017],{"class":86,"line":87},[84,158004,155604],{"class":477},[84,158006,523],{"class":473},[84,158008,2711],{"class":94},[84,158010,478],{"class":477},[84,158012,54147],{"class":94},[84,158014,478],{"class":477},[84,158016,152655],{"class":104},[84,158018,30824],{"class":477},[84,158020,158021],{"class":86,"line":98},[84,158022,2729],{"emptyLinePlaceholder":403},[84,158024,158025,158027,158030,158032,158035],{"class":86,"line":70},[84,158026,1871],{"class":473},[84,158028,158029],{"class":477}," score ",[84,158031,2040],{"class":473},[84,158033,158034],{"class":94}," 90",[84,158036,4068],{"class":477},[84,158038,158039,158041,158043,158046],{"class":86,"line":120},[84,158040,31626],{"class":94},[84,158042,478],{"class":477},[84,158044,158045],{"class":104},"\"优秀\"",[84,158047,484],{"class":477},[84,158049,158050,158053,158055,158057,158060],{"class":86,"line":131},[84,158051,158052],{"class":473},"elif",[84,158054,158029],{"class":477},[84,158056,2040],{"class":473},[84,158058,158059],{"class":94}," 80",[84,158061,4068],{"class":477},[84,158063,158064,158066,158068,158071],{"class":86,"line":145},[84,158065,31626],{"class":94},[84,158067,478],{"class":477},[84,158069,158070],{"class":104},"\"良好\"",[84,158072,484],{"class":477},[84,158074,158075,158077,158079,158081,158084],{"class":86,"line":156},[84,158076,158052],{"class":473},[84,158078,158029],{"class":477},[84,158080,2040],{"class":473},[84,158082,158083],{"class":94}," 60",[84,158085,4068],{"class":477},[84,158087,158088,158090,158092,158095],{"class":86,"line":164},[84,158089,31626],{"class":94},[84,158091,478],{"class":477},[84,158093,158094],{"class":104},"\"及格\"",[84,158096,484],{"class":477},[84,158098,158099,158101],{"class":86,"line":175},[84,158100,2031],{"class":473},[84,158102,4068],{"class":477},[84,158104,158105,158107,158109,158112],{"class":86,"line":185},[84,158106,31626],{"class":94},[84,158108,478],{"class":477},[84,158110,158111],{"class":104},"\"不及格\"",[84,158113,484],{"class":477},[35,158115,158116],{},"注意判断顺序很重要。",[35,158118,158119,158120,158123],{},"如果把 ",[81,158121,158122],{},"score >= 60"," 放在最前面：",[75,158125,158127],{"className":30705,"code":158126,"language":30707,"meta":66,"style":66},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[81,158128,158129,158141,158151,158163],{"__ignoreMap":66},[84,158130,158131,158133,158135,158137,158139],{"class":86,"line":87},[84,158132,1871],{"class":473},[84,158134,158029],{"class":477},[84,158136,2040],{"class":473},[84,158138,158083],{"class":94},[84,158140,4068],{"class":477},[84,158142,158143,158145,158147,158149],{"class":86,"line":98},[84,158144,31626],{"class":94},[84,158146,478],{"class":477},[84,158148,158094],{"class":104},[84,158150,484],{"class":477},[84,158152,158153,158155,158157,158159,158161],{"class":86,"line":70},[84,158154,158052],{"class":473},[84,158156,158029],{"class":477},[84,158158,2040],{"class":473},[84,158160,158034],{"class":94},[84,158162,4068],{"class":477},[84,158164,158165,158167,158169,158171],{"class":86,"line":120},[84,158166,31626],{"class":94},[84,158168,478],{"class":477},[84,158170,158045],{"class":104},[84,158172,484],{"class":477},[35,158174,158175,158176,158178],{},"成绩 95 会先满足 ",[81,158177,158122],{},"，后面的优秀分支就不会执行。",[14,158180,158182],{"id":158181},"_35-判断语句嵌套","3.5 判断语句嵌套",[35,158184,158185],{},"嵌套判断就是在一个判断内部再写判断。",[75,158187,158189],{"className":30705,"code":158188,"language":30707,"meta":66,"style":66},"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",[81,158190,158191,158209,158224,158228,158240,158254,158264,158271,158282,158288],{"__ignoreMap":66},[84,158192,158193,158195,158197,158199,158201,158203,158205,158207],{"class":86,"line":87},[84,158194,146792],{"class":477},[84,158196,523],{"class":473},[84,158198,2711],{"class":94},[84,158200,478],{"class":477},[84,158202,54147],{"class":94},[84,158204,478],{"class":477},[84,158206,152640],{"class":104},[84,158208,30824],{"class":477},[84,158210,158211,158213,158215,158217,158219,158222],{"class":86,"line":98},[84,158212,156607],{"class":477},[84,158214,523],{"class":473},[84,158216,60931],{"class":94},[84,158218,478],{"class":477},[84,158220,158221],{"class":104},"\"是否有票(y\u002Fn):\"",[84,158223,484],{"class":477},[84,158225,158226],{"class":86,"line":70},[84,158227,2729],{"emptyLinePlaceholder":403},[84,158229,158230,158232,158234,158236,158238],{"class":86,"line":120},[84,158231,1871],{"class":473},[84,158233,16036],{"class":477},[84,158235,2040],{"class":473},[84,158237,156531],{"class":94},[84,158239,4068],{"class":477},[84,158241,158242,158244,158247,158249,158252],{"class":86,"line":131},[84,158243,3430],{"class":473},[84,158245,158246],{"class":477}," has_ticket ",[84,158248,3278],{"class":473},[84,158250,158251],{"class":104}," \"y\"",[84,158253,4068],{"class":477},[84,158255,158256,158258,158260,158262],{"class":86,"line":145},[84,158257,32778],{"class":94},[84,158259,478],{"class":477},[84,158261,157893],{"class":104},[84,158263,484],{"class":477},[84,158265,158266,158269],{"class":86,"line":156},[84,158267,158268],{"class":473},"    else",[84,158270,4068],{"class":477},[84,158272,158273,158275,158277,158280],{"class":86,"line":164},[84,158274,32778],{"class":94},[84,158276,478],{"class":477},[84,158278,158279],{"class":104},"\"请先买票\"",[84,158281,484],{"class":477},[84,158283,158284,158286],{"class":86,"line":175},[84,158285,2031],{"class":473},[84,158287,4068],{"class":477},[84,158289,158290,158292,158294,158297],{"class":86,"line":185},[84,158291,31626],{"class":94},[84,158293,478],{"class":477},[84,158295,158296],{"class":104},"\"未成年人禁止进入\"",[84,158298,484],{"class":477},[35,158300,158301],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158303,158305],{"id":158304},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[23,158307,158309],{"id":158308},"_361-and","3.6.1 and",[35,158311,158312],{},"两个条件都成立才成立。",[75,158314,158316],{"className":30705,"code":158315,"language":30707,"meta":66,"style":66},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[81,158317,158318,158326,158334,158338,158353],{"__ignoreMap":66},[84,158319,158320,158322,158324],{"class":86,"line":87},[84,158321,146792],{"class":477},[84,158323,523],{"class":473},[84,158325,88391],{"class":94},[84,158327,158328,158330,158332],{"class":86,"line":98},[84,158329,156607],{"class":477},[84,158331,523],{"class":473},[84,158333,153845],{"class":94},[84,158335,158336],{"class":86,"line":70},[84,158337,2729],{"emptyLinePlaceholder":403},[84,158339,158340,158342,158344,158346,158348,158350],{"class":86,"line":120},[84,158341,1871],{"class":473},[84,158343,16036],{"class":477},[84,158345,2040],{"class":473},[84,158347,156531],{"class":94},[84,158349,120753],{"class":473},[84,158351,158352],{"class":477}," has_ticket:\n",[84,158354,158355,158357,158359,158361],{"class":86,"line":131},[84,158356,31626],{"class":94},[84,158358,478],{"class":477},[84,158360,157893],{"class":104},[84,158362,484],{"class":477},[23,158364,158366],{"id":158365},"_362-or","3.6.2 or",[35,158368,158369],{},"只要一个条件成立就成立。",[75,158371,158373],{"className":30705,"code":158372,"language":30707,"meta":66,"style":66},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[81,158374,158375,158384,158393,158397,158409],{"__ignoreMap":66},[84,158376,158377,158380,158382],{"class":86,"line":87},[84,158378,158379],{"class":477},"is_vip ",[84,158381,523],{"class":473},[84,158383,126053],{"class":94},[84,158385,158386,158389,158391],{"class":86,"line":98},[84,158387,158388],{"class":477},"coupon ",[84,158390,523],{"class":473},[84,158392,153845],{"class":94},[84,158394,158395],{"class":86,"line":70},[84,158396,2729],{"emptyLinePlaceholder":403},[84,158398,158399,158401,158404,158406],{"class":86,"line":120},[84,158400,1871],{"class":473},[84,158402,158403],{"class":477}," is_vip ",[84,158405,115416],{"class":473},[84,158407,158408],{"class":477}," coupon:\n",[84,158410,158411,158413,158415,158418],{"class":86,"line":131},[84,158412,31626],{"class":94},[84,158414,478],{"class":477},[84,158416,158417],{"class":104},"\"可以享受优惠\"",[84,158419,484],{"class":477},[23,158421,158423],{"id":158422},"_363-not","3.6.3 not",[35,158425,158426],{},"取反。",[75,158428,158430],{"className":30705,"code":158429,"language":30707,"meta":66,"style":66},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[81,158431,158432,158441,158445,158454],{"__ignoreMap":66},[84,158433,158434,158437,158439],{"class":86,"line":87},[84,158435,158436],{"class":477},"is_closed ",[84,158438,523],{"class":473},[84,158440,126053],{"class":94},[84,158442,158443],{"class":86,"line":98},[84,158444,2729],{"emptyLinePlaceholder":403},[84,158446,158447,158449,158451],{"class":86,"line":70},[84,158448,1871],{"class":473},[84,158450,39257],{"class":473},[84,158452,158453],{"class":477}," is_closed:\n",[84,158455,158456,158458,158460,158463],{"class":86,"line":120},[84,158457,31626],{"class":94},[84,158459,478],{"class":477},[84,158461,158462],{"class":104},"\"店铺营业中\"",[84,158464,484],{"class":477},[14,158466,158468],{"id":158467},"_37-链式比较","3.7 链式比较",[35,158470,158471],{},"Python 支持链式比较：",[75,158473,158475],{"className":30705,"code":158474,"language":30707,"meta":66,"style":66},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[81,158476,158477,158486,158490,158507],{"__ignoreMap":66},[84,158478,158479,158481,158483],{"class":86,"line":87},[84,158480,155604],{"class":477},[84,158482,523],{"class":473},[84,158484,158485],{"class":94}," 85\n",[84,158487,158488],{"class":86,"line":98},[84,158489,2729],{"emptyLinePlaceholder":403},[84,158491,158492,158494,158496,158499,158501,158503,158505],{"class":86,"line":70},[84,158493,1871],{"class":473},[84,158495,4422],{"class":94},[84,158497,158498],{"class":473}," \u003C=",[84,158500,158029],{"class":477},[84,158502,1928],{"class":473},[84,158504,6083],{"class":94},[84,158506,4068],{"class":477},[84,158508,158509,158511,158513,158516],{"class":86,"line":120},[84,158510,31626],{"class":94},[84,158512,478],{"class":477},[84,158514,158515],{"class":104},"\"成绩合法\"",[84,158517,484],{"class":477},[35,158519,158520],{},"等价于：",[75,158522,158524],{"className":30705,"code":158523,"language":30707,"meta":66,"style":66},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[81,158525,158526,158546],{"__ignoreMap":66},[84,158527,158528,158530,158532,158534,158536,158538,158540,158542,158544],{"class":86,"line":87},[84,158529,1871],{"class":473},[84,158531,158029],{"class":477},[84,158533,2040],{"class":473},[84,158535,4422],{"class":94},[84,158537,120753],{"class":473},[84,158539,158029],{"class":477},[84,158541,1928],{"class":473},[84,158543,6083],{"class":94},[84,158545,4068],{"class":477},[84,158547,158548,158550,158552,158554],{"class":86,"line":98},[84,158549,31626],{"class":94},[84,158551,478],{"class":477},[84,158553,158515],{"class":104},[84,158555,484],{"class":477},[14,158557,158559],{"id":158558},"_38-真值和假值","3.8 真值和假值",[35,158561,116793,158562,158564],{},[81,158563,1871],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[35,158566,158567],{},"假值：",[75,158569,158571],{"className":30705,"code":158570,"language":30707,"meta":66,"style":66},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[81,158572,158573,158577,158582,158586,158590,158595,158599,158603,158608],{"__ignoreMap":66},[84,158574,158575],{"class":86,"line":87},[84,158576,157763],{"class":94},[84,158578,158579],{"class":86,"line":98},[84,158580,158581],{"class":94},"None\n",[84,158583,158584],{"class":86,"line":70},[84,158585,3414],{"class":94},[84,158587,158588],{"class":86,"line":120},[84,158589,32669],{"class":94},[84,158591,158592],{"class":86,"line":131},[84,158593,158594],{"class":104},"\"\"\n",[84,158596,158597],{"class":86,"line":145},[84,158598,32684],{"class":477},[84,158600,158601],{"class":86,"line":156},[84,158602,2305],{"class":477},[84,158604,158605],{"class":86,"line":164},[84,158606,158607],{"class":477},"{}\n",[84,158609,158610,158612],{"class":86,"line":175},[84,158611,155536],{"class":94},[84,158613,2305],{"class":477},[35,158615,15464],{},[75,158617,158619],{"className":30705,"code":158618,"language":30707,"meta":66,"style":66},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[81,158620,158621,158635,158639,158646,158666,158672],{"__ignoreMap":66},[84,158622,158623,158625,158627,158629,158631,158633],{"class":86,"line":87},[84,158624,146782],{"class":477},[84,158626,523],{"class":473},[84,158628,60931],{"class":94},[84,158630,478],{"class":477},[84,158632,152625],{"class":104},[84,158634,484],{"class":477},[84,158636,158637],{"class":86,"line":98},[84,158638,2729],{"emptyLinePlaceholder":403},[84,158640,158641,158643],{"class":86,"line":70},[84,158642,1871],{"class":473},[84,158644,158645],{"class":477}," name:\n",[84,158647,158648,158650,158652,158654,158656,158658,158660,158662,158664],{"class":86,"line":120},[84,158649,31626],{"class":94},[84,158651,478],{"class":477},[84,158653,529],{"class":473},[84,158655,157300],{"class":104},[84,158657,1369],{"class":94},[84,158659,80136],{"class":477},[84,158661,1419],{"class":94},[84,158663,725],{"class":104},[84,158665,484],{"class":477},[84,158667,158668,158670],{"class":86,"line":131},[84,158669,2031],{"class":473},[84,158671,4068],{"class":477},[84,158673,158674,158676,158678,158681],{"class":86,"line":145},[84,158675,31626],{"class":94},[84,158677,478],{"class":477},[84,158679,158680],{"class":104},"\"姓名不能为空\"",[84,158682,484],{"class":477},[14,158684,158686],{"id":158685},"_39-match语句","3.9 match语句",[35,158688,158689,158690,158692],{},"Python 3.10 开始支持 ",[81,158691,71591],{},"。它适合处理固定选项。",[75,158694,158696],{"className":30705,"code":158695,"language":30707,"meta":66,"style":66},"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",[81,158697,158698,158714,158718,158725,158735,158746,158755,158766,158775,158786,158793],{"__ignoreMap":66},[84,158699,158700,158703,158705,158707,158709,158712],{"class":86,"line":87},[84,158701,158702],{"class":477},"command ",[84,158704,523],{"class":473},[84,158706,60931],{"class":94},[84,158708,478],{"class":477},[84,158710,158711],{"class":104},"\"请输入命令:\"",[84,158713,484],{"class":477},[84,158715,158716],{"class":86,"line":98},[84,158717,2729],{"emptyLinePlaceholder":403},[84,158719,158720,158722],{"class":86,"line":70},[84,158721,71591],{"class":473},[84,158723,158724],{"class":477}," command:\n",[84,158726,158727,158730,158733],{"class":86,"line":120},[84,158728,158729],{"class":473},"    case",[84,158731,158732],{"class":104}," \"start\"",[84,158734,4068],{"class":477},[84,158736,158737,158739,158741,158744],{"class":86,"line":131},[84,158738,32778],{"class":94},[84,158740,478],{"class":477},[84,158742,158743],{"class":104},"\"启动\"",[84,158745,484],{"class":477},[84,158747,158748,158750,158753],{"class":86,"line":145},[84,158749,158729],{"class":473},[84,158751,158752],{"class":104}," \"stop\"",[84,158754,4068],{"class":477},[84,158756,158757,158759,158761,158764],{"class":86,"line":156},[84,158758,32778],{"class":94},[84,158760,478],{"class":477},[84,158762,158763],{"class":104},"\"停止\"",[84,158765,484],{"class":477},[84,158767,158768,158770,158773],{"class":86,"line":164},[84,158769,158729],{"class":473},[84,158771,158772],{"class":104}," \"restart\"",[84,158774,4068],{"class":477},[84,158776,158777,158779,158781,158784],{"class":86,"line":175},[84,158778,32778],{"class":94},[84,158780,478],{"class":477},[84,158782,158783],{"class":104},"\"重启\"",[84,158785,484],{"class":477},[84,158787,158788,158790],{"class":86,"line":185},[84,158789,158729],{"class":473},[84,158791,158792],{"class":477}," _:\n",[84,158794,158795,158797,158799,158802],{"class":86,"line":195},[84,158796,32778],{"class":94},[84,158798,478],{"class":477},[84,158800,158801],{"class":104},"\"未知命令\"",[84,158803,484],{"class":477},[35,158805,158806,158807,158809,158810,158812],{},"入门阶段掌握 ",[81,158808,154904],{}," 更重要，",[81,158811,71591],{}," 可以作为补充。",[14,158814,158816],{"id":158815},"_310-小案例成绩等级","3.10 小案例：成绩等级",[35,158818,123538],{},[28,158820,158821,158824,158827],{},[31,158822,158823],{},"输入成绩。",[31,158825,158826],{},"判断成绩是否合法。",[31,158828,158829],{},"输出等级。",[35,158831,10364],{},[75,158833,158835],{"className":30705,"code":158834,"language":30707,"meta":66,"style":66},"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",[81,158836,158837,158855,158859,158877,158888,158900,158911,158923,158934,158947,158958,158970,158981,158987],{"__ignoreMap":66},[84,158838,158839,158841,158843,158845,158847,158849,158851,158853],{"class":86,"line":87},[84,158840,155604],{"class":477},[84,158842,523],{"class":473},[84,158844,110123],{"class":94},[84,158846,478],{"class":477},[84,158848,54147],{"class":94},[84,158850,478],{"class":477},[84,158852,152655],{"class":104},[84,158854,30824],{"class":477},[84,158856,158857],{"class":86,"line":98},[84,158858,2729],{"emptyLinePlaceholder":403},[84,158860,158861,158863,158865,158867,158869,158871,158873,158875],{"class":86,"line":70},[84,158862,1871],{"class":473},[84,158864,39257],{"class":473},[84,158866,4422],{"class":94},[84,158868,158498],{"class":473},[84,158870,158029],{"class":477},[84,158872,1928],{"class":473},[84,158874,6083],{"class":94},[84,158876,4068],{"class":477},[84,158878,158879,158881,158883,158886],{"class":86,"line":120},[84,158880,31626],{"class":94},[84,158882,478],{"class":477},[84,158884,158885],{"class":104},"\"成绩不合法\"",[84,158887,484],{"class":477},[84,158889,158890,158892,158894,158896,158898],{"class":86,"line":131},[84,158891,158052],{"class":473},[84,158893,158029],{"class":477},[84,158895,2040],{"class":473},[84,158897,158034],{"class":94},[84,158899,4068],{"class":477},[84,158901,158902,158904,158906,158909],{"class":86,"line":145},[84,158903,31626],{"class":94},[84,158905,478],{"class":477},[84,158907,158908],{"class":104},"\"等级:A\"",[84,158910,484],{"class":477},[84,158912,158913,158915,158917,158919,158921],{"class":86,"line":156},[84,158914,158052],{"class":473},[84,158916,158029],{"class":477},[84,158918,2040],{"class":473},[84,158920,158059],{"class":94},[84,158922,4068],{"class":477},[84,158924,158925,158927,158929,158932],{"class":86,"line":164},[84,158926,31626],{"class":94},[84,158928,478],{"class":477},[84,158930,158931],{"class":104},"\"等级:B\"",[84,158933,484],{"class":477},[84,158935,158936,158938,158940,158942,158945],{"class":86,"line":175},[84,158937,158052],{"class":473},[84,158939,158029],{"class":477},[84,158941,2040],{"class":473},[84,158943,158944],{"class":94}," 70",[84,158946,4068],{"class":477},[84,158948,158949,158951,158953,158956],{"class":86,"line":185},[84,158950,31626],{"class":94},[84,158952,478],{"class":477},[84,158954,158955],{"class":104},"\"等级:C\"",[84,158957,484],{"class":477},[84,158959,158960,158962,158964,158966,158968],{"class":86,"line":195},[84,158961,158052],{"class":473},[84,158963,158029],{"class":477},[84,158965,2040],{"class":473},[84,158967,158083],{"class":94},[84,158969,4068],{"class":477},[84,158971,158972,158974,158976,158979],{"class":86,"line":206},[84,158973,31626],{"class":94},[84,158975,478],{"class":477},[84,158977,158978],{"class":104},"\"等级:D\"",[84,158980,484],{"class":477},[84,158982,158983,158985],{"class":86,"line":217},[84,158984,2031],{"class":473},[84,158986,4068],{"class":477},[84,158988,158989,158991,158993,158996],{"class":86,"line":227},[84,158990,31626],{"class":94},[84,158992,478],{"class":477},[84,158994,158995],{"class":104},"\"等级:E\"",[84,158997,484],{"class":477},[14,158999,159001],{"id":159000},"_311-小案例会员折扣","3.11 小案例：会员折扣",[35,159003,123538],{},[28,159005,159006,159009,159012,159015],{},[31,159007,159008],{},"输入消费金额。",[31,159010,159011],{},"输入会员等级，普通、银卡、金卡。",[31,159013,159014],{},"普通不打折，银卡 9 折，金卡 8 折。",[31,159016,159017],{},"满 500 再减 50。",[35,159019,10364],{},[75,159021,159023],{"className":30705,"code":159022,"language":30707,"meta":66,"style":66},"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",[81,159024,159025,159045,159061,159065,159073,159077,159091,159101,159114,159123,159136,159144,159150,159161,159165,159179,159183,159197,159207,159211],{"__ignoreMap":66},[84,159026,159027,159030,159032,159034,159036,159038,159040,159043],{"class":86,"line":87},[84,159028,159029],{"class":477},"amount ",[84,159031,523],{"class":473},[84,159033,110123],{"class":94},[84,159035,478],{"class":477},[84,159037,54147],{"class":94},[84,159039,478],{"class":477},[84,159041,159042],{"class":104},"\"请输入消费金额:\"",[84,159044,30824],{"class":477},[84,159046,159047,159050,159052,159054,159056,159059],{"class":86,"line":98},[84,159048,159049],{"class":477},"level ",[84,159051,523],{"class":473},[84,159053,60931],{"class":94},[84,159055,478],{"class":477},[84,159057,159058],{"class":104},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[84,159060,484],{"class":477},[84,159062,159063],{"class":86,"line":70},[84,159064,2729],{"emptyLinePlaceholder":403},[84,159066,159067,159069,159071],{"class":86,"line":120},[84,159068,157482],{"class":477},[84,159070,523],{"class":473},[84,159072,56025],{"class":94},[84,159074,159075],{"class":86,"line":131},[84,159076,2729],{"emptyLinePlaceholder":403},[84,159078,159079,159081,159084,159086,159089],{"class":86,"line":145},[84,159080,1871],{"class":473},[84,159082,159083],{"class":477}," level ",[84,159085,3278],{"class":473},[84,159087,159088],{"class":104}," \"银卡\"",[84,159090,4068],{"class":477},[84,159092,159093,159096,159098],{"class":86,"line":156},[84,159094,159095],{"class":477},"    discount ",[84,159097,523],{"class":473},[84,159099,159100],{"class":94}," 0.9\n",[84,159102,159103,159105,159107,159109,159112],{"class":86,"line":164},[84,159104,158052],{"class":473},[84,159106,159083],{"class":477},[84,159108,3278],{"class":473},[84,159110,159111],{"class":104}," \"金卡\"",[84,159113,4068],{"class":477},[84,159115,159116,159118,159120],{"class":86,"line":175},[84,159117,159095],{"class":477},[84,159119,523],{"class":473},[84,159121,159122],{"class":94}," 0.8\n",[84,159124,159125,159127,159129,159131,159134],{"class":86,"line":185},[84,159126,158052],{"class":473},[84,159128,159083],{"class":477},[84,159130,3278],{"class":473},[84,159132,159133],{"class":104}," \"普通\"",[84,159135,4068],{"class":477},[84,159137,159138,159140,159142],{"class":86,"line":195},[84,159139,159095],{"class":477},[84,159141,523],{"class":473},[84,159143,56025],{"class":94},[84,159145,159146,159148],{"class":86,"line":206},[84,159147,2031],{"class":473},[84,159149,4068],{"class":477},[84,159151,159152,159154,159156,159159],{"class":86,"line":217},[84,159153,31626],{"class":94},[84,159155,478],{"class":477},[84,159157,159158],{"class":104},"\"会员等级输入错误，按普通会员计算\"",[84,159160,484],{"class":477},[84,159162,159163],{"class":86,"line":227},[84,159164,2729],{"emptyLinePlaceholder":403},[84,159166,159167,159170,159172,159175,159177],{"class":86,"line":238},[84,159168,159169],{"class":477},"pay ",[84,159171,523],{"class":473},[84,159173,159174],{"class":477}," amount ",[84,159176,928],{"class":473},[84,159178,157521],{"class":477},[84,159180,159181],{"class":86,"line":249},[84,159182,2729],{"emptyLinePlaceholder":403},[84,159184,159185,159187,159190,159192,159195],{"class":86,"line":262},[84,159186,1871],{"class":473},[84,159188,159189],{"class":477}," pay ",[84,159191,2040],{"class":473},[84,159193,159194],{"class":94}," 500",[84,159196,4068],{"class":477},[84,159198,159199,159202,159204],{"class":86,"line":273},[84,159200,159201],{"class":477},"    pay ",[84,159203,150498],{"class":473},[84,159205,159206],{"class":94}," 50\n",[84,159208,159209],{"class":86,"line":283},[84,159210,2729],{"emptyLinePlaceholder":403},[84,159212,159213,159215,159217,159219,159221,159223,159226,159228,159230,159232],{"class":86,"line":294},[84,159214,30742],{"class":94},[84,159216,478],{"class":477},[84,159218,529],{"class":473},[84,159220,157602],{"class":104},[84,159222,1369],{"class":94},[84,159224,159225],{"class":477},"pay",[84,159227,157405],{"class":473},[84,159229,1419],{"class":94},[84,159231,157258],{"class":104},[84,159233,484],{"class":477},[14,159235,159237],{"id":159236},"_312-易错点","3.12 易错点",[28,159239,159240,159243,159246,159249,159254],{},[31,159241,159242],{},"冒号不能漏。",[31,159244,159245],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[31,159247,159248],{},"多分支判断要注意顺序。",[31,159250,159251,159252,28712],{},"判断相等用 ",[81,159253,3278],{},[31,159255,159256],{},"字符串比较区分大小写：",[75,159258,159260],{"className":30705,"code":159259,"language":30707,"meta":66,"style":66},"\"Y\" == \"y\"  # False\n",[81,159261,159262],{"__ignoreMap":66},[84,159263,159264,159267,159269,159271],{"class":86,"line":87},[84,159265,159266],{"class":104},"\"Y\"",[84,159268,101885],{"class":473},[84,159270,158251],{"class":104},[84,159272,159273],{"class":328},"  # False\n",[35,159275,159276],{},"可转换后再判断：",[75,159278,159280],{"className":30705,"code":159279,"language":30707,"meta":66,"style":66},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[81,159281,159282,159299,159312],{"__ignoreMap":66},[84,159283,159284,159287,159289,159291,159293,159296],{"class":86,"line":87},[84,159285,159286],{"class":477},"answer ",[84,159288,523],{"class":473},[84,159290,60931],{"class":94},[84,159292,478],{"class":477},[84,159294,159295],{"class":104},"\"是否继续(y\u002Fn):\"",[84,159297,159298],{"class":477},").lower()\n",[84,159300,159301,159303,159306,159308,159310],{"class":86,"line":98},[84,159302,1871],{"class":473},[84,159304,159305],{"class":477}," answer ",[84,159307,3278],{"class":473},[84,159309,158251],{"class":104},[84,159311,4068],{"class":477},[84,159313,159314,159316,159318,159321],{"class":86,"line":70},[84,159315,31626],{"class":94},[84,159317,478],{"class":477},[84,159319,159320],{"class":104},"\"继续\"",[84,159322,484],{"class":477},[14,159324,159326],{"id":159325},"_313-本章练习","3.13 本章练习",[28,159328,159329,159332,159335,159338,159348],{},[31,159330,159331],{},"输入年龄，判断是否成年。",[31,159333,159334],{},"输入年份，判断是否为闰年。",[31,159336,159337],{},"输入三个数字，输出最大值。",[31,159339,159340,159341,159344,159345,159347],{},"写登录判断：用户名是 ",[81,159342,159343],{},"admin"," 且密码是 ",[81,159346,15413],{}," 才登录成功。",[31,159349,159350],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[389,159352,159353],{},"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":66,"searchDepth":98,"depth":98,"links":159355},[159356,159357,159358,159359,159360,159361,159366,159367,159368,159369,159370,159371,159372],{"id":157744,"depth":98,"text":157745},{"id":157797,"depth":98,"text":157798},{"id":157901,"depth":98,"text":157902},{"id":157991,"depth":98,"text":157992},{"id":158181,"depth":98,"text":158182},{"id":158304,"depth":98,"text":158305,"children":159362},[159363,159364,159365],{"id":158308,"depth":70,"text":158309},{"id":158365,"depth":70,"text":158366},{"id":158422,"depth":70,"text":158423},{"id":158467,"depth":98,"text":158468},{"id":158558,"depth":98,"text":158559},{"id":158685,"depth":98,"text":158686},{"id":158815,"depth":98,"text":158816},{"id":159000,"depth":98,"text":159001},{"id":159236,"depth":98,"text":159237},{"id":159325,"depth":98,"text":159326},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157736,"description":400},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159379,"title":159380,"body":159381,"description":400,"extension":401,"meta":161150,"navigation":403,"path":161151,"seo":161152,"stem":161153,"__hash__":161154},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159382,"toc":161130},[159383,159386,159390,159396,159399,159416,159420,159422,159439,159441,159486,159488,159505,159509,159512,159578,159581,159599,159603,159764,159773,159777,159781,159786,159833,159835,159841,159845,159850,159897,159899,159905,159909,159914,159950,159953,160000,160004,160010,160068,160073,160104,160109,160113,160168,160171,160243,160246,160305,160309,160312,160387,160390,160394,160500,160503,160529,160533,160545,160614,160617,160709,160713,160715,160726,160728,160858,160862,161064,161072,161076,161106,161110,161127],[10,159384,159380],{"id":159385},"_4-循环语句",[14,159387,159389],{"id":159388},"_41-为什么需要循环","4.1 为什么需要循环",[35,159391,159392,159393,159395],{},"如果要输出 1 到 100，不应该写 100 行 ",[81,159394,146718],{},"，而应该用循环。",[35,159397,159398],{},"循环适合处理重复任务：",[28,159400,159401,159404,159407,159410,159413],{},[31,159402,159403],{},"重复输出。",[31,159405,159406],{},"重复输入。",[31,159408,159409],{},"遍历数据。",[31,159411,159412],{},"持续执行菜单。",[31,159414,159415],{},"批量处理文件或数据。",[14,159417,159419],{"id":159418},"_42-while循环","4.2 while循环",[35,159421,5510],{},[75,159423,159425],{"className":30705,"code":159424,"language":30707,"meta":66,"style":66},"while 条件:\n    循环体\n",[81,159426,159427,159434],{"__ignoreMap":66},[84,159428,159429,159431],{"class":86,"line":87},[84,159430,108989],{"class":473},[84,159432,159433],{"class":477}," 条件:\n",[84,159435,159436],{"class":86,"line":98},[84,159437,159438],{"class":477},"    循环体\n",[35,159440,15464],{},[75,159442,159444],{"className":30705,"code":159443,"language":30707,"meta":66,"style":66},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[81,159445,159446,159454,159458,159470,159477],{"__ignoreMap":66},[84,159447,159448,159450,159452],{"class":86,"line":87},[84,159449,100474],{"class":477},[84,159451,523],{"class":473},[84,159453,56025],{"class":94},[84,159455,159456],{"class":86,"line":98},[84,159457,2729],{"emptyLinePlaceholder":403},[84,159459,159460,159462,159464,159466,159468],{"class":86,"line":70},[84,159461,108989],{"class":473},[84,159463,9767],{"class":477},[84,159465,1928],{"class":473},[84,159467,2477],{"class":94},[84,159469,4068],{"class":477},[84,159471,159472,159474],{"class":86,"line":120},[84,159473,31626],{"class":94},[84,159475,159476],{"class":477},"(i)\n",[84,159478,159479,159482,159484],{"class":86,"line":131},[84,159480,159481],{"class":477},"    i ",[84,159483,9806],{"class":473},[84,159485,56025],{"class":94},[35,159487,81255],{},[28,159489,159490,159496,159499,159502],{},[31,159491,159492,159493,28712],{},"判断条件 ",[81,159494,159495],{},"i \u003C= 5",[31,159497,159498],{},"条件成立，执行循环体。",[31,159500,159501],{},"执行完后回到条件判断。",[31,159503,159504],{},"条件不成立，退出循环。",[14,159506,159508],{"id":159507},"_43-while累加","4.3 while累加",[35,159510,159511],{},"计算 1 到 100 的和：",[75,159513,159515],{"className":30705,"code":159514,"language":30707,"meta":66,"style":66},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[81,159516,159517,159525,159533,159537,159549,159559,159567,159571],{"__ignoreMap":66},[84,159518,159519,159521,159523],{"class":86,"line":87},[84,159520,100474],{"class":477},[84,159522,523],{"class":473},[84,159524,56025],{"class":94},[84,159526,159527,159529,159531],{"class":86,"line":98},[84,159528,157506],{"class":477},[84,159530,523],{"class":473},[84,159532,47660],{"class":94},[84,159534,159535],{"class":86,"line":70},[84,159536,2729],{"emptyLinePlaceholder":403},[84,159538,159539,159541,159543,159545,159547],{"class":86,"line":120},[84,159540,108989],{"class":473},[84,159542,9767],{"class":477},[84,159544,1928],{"class":473},[84,159546,6083],{"class":94},[84,159548,4068],{"class":477},[84,159550,159551,159554,159556],{"class":86,"line":131},[84,159552,159553],{"class":477},"    total ",[84,159555,9806],{"class":473},[84,159557,159558],{"class":477}," i\n",[84,159560,159561,159563,159565],{"class":86,"line":145},[84,159562,159481],{"class":477},[84,159564,9806],{"class":473},[84,159566,56025],{"class":94},[84,159568,159569],{"class":86,"line":156},[84,159570,2729],{"emptyLinePlaceholder":403},[84,159572,159573,159575],{"class":86,"line":164},[84,159574,30742],{"class":94},[84,159576,159577],{"class":477},"(total)\n",[35,159579,159580],{},"核心思想：",[28,159582,159583,159588,159593],{},[31,159584,159585,159587],{},[81,159586,914],{}," 控制循环次数。",[31,159589,159590,159592],{},[81,159591,157607],{}," 保存累加结果。",[31,159594,159595,159596,159598],{},"每轮循环都要更新 ",[81,159597,914],{},"，否则可能死循环。",[14,159600,159602],{"id":159601},"_44-while猜数字","4.4 while猜数字",[75,159604,159606],{"className":30705,"code":159605,"language":30707,"meta":66,"style":66},"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",[81,159607,159608,159614,159618,159635,159643,159647,159655,159675,159684,159688,159700,159711,159721,159732,159738,159760],{"__ignoreMap":66},[84,159609,159610,159612],{"class":86,"line":87},[84,159611,30719],{"class":473},[84,159613,45655],{"class":477},[84,159615,159616],{"class":86,"line":98},[84,159617,2729],{"emptyLinePlaceholder":403},[84,159619,159620,159622,159624,159627,159629,159631,159633],{"class":86,"line":70},[84,159621,159286],{"class":477},[84,159623,523],{"class":473},[84,159625,159626],{"class":477}," random.randint(",[84,159628,692],{"class":94},[84,159630,12764],{"class":477},[84,159632,784],{"class":94},[84,159634,484],{"class":477},[84,159636,159637,159639,159641],{"class":86,"line":120},[84,159638,146937],{"class":477},[84,159640,523],{"class":473},[84,159642,47660],{"class":94},[84,159644,159645],{"class":86,"line":131},[84,159646,2729],{"emptyLinePlaceholder":403},[84,159648,159649,159651,159653],{"class":86,"line":145},[84,159650,108989],{"class":473},[84,159652,95618],{"class":94},[84,159654,4068],{"class":477},[84,159656,159657,159660,159662,159664,159666,159668,159670,159673],{"class":86,"line":156},[84,159658,159659],{"class":477},"    guess ",[84,159661,523],{"class":473},[84,159663,2711],{"class":94},[84,159665,478],{"class":477},[84,159667,54147],{"class":94},[84,159669,478],{"class":477},[84,159671,159672],{"class":104},"\"请输入1到100之间的数字:\"",[84,159674,30824],{"class":477},[84,159676,159677,159680,159682],{"class":86,"line":164},[84,159678,159679],{"class":477},"    count ",[84,159681,9806],{"class":473},[84,159683,56025],{"class":94},[84,159685,159686],{"class":86,"line":175},[84,159687,2729],{"emptyLinePlaceholder":403},[84,159689,159690,159692,159695,159697],{"class":86,"line":185},[84,159691,3430],{"class":473},[84,159693,159694],{"class":477}," guess ",[84,159696,1433],{"class":473},[84,159698,159699],{"class":477}," answer:\n",[84,159701,159702,159704,159706,159709],{"class":86,"line":195},[84,159703,32778],{"class":94},[84,159705,478],{"class":477},[84,159707,159708],{"class":104},"\"猜大了\"",[84,159710,484],{"class":477},[84,159712,159713,159715,159717,159719],{"class":86,"line":206},[84,159714,39620],{"class":473},[84,159716,159694],{"class":477},[84,159718,1383],{"class":473},[84,159720,159699],{"class":477},[84,159722,159723,159725,159727,159730],{"class":86,"line":217},[84,159724,32778],{"class":94},[84,159726,478],{"class":477},[84,159728,159729],{"class":104},"\"猜小了\"",[84,159731,484],{"class":477},[84,159733,159734,159736],{"class":86,"line":227},[84,159735,158268],{"class":473},[84,159737,4068],{"class":477},[84,159739,159740,159742,159744,159746,159749,159751,159753,159755,159758],{"class":86,"line":238},[84,159741,32778],{"class":94},[84,159743,478],{"class":477},[84,159745,529],{"class":473},[84,159747,159748],{"class":104},"\"猜对了，一共猜了",[84,159750,1369],{"class":94},[84,159752,84760],{"class":477},[84,159754,1419],{"class":94},[84,159756,159757],{"class":104},"次\"",[84,159759,484],{"class":477},[84,159761,159762],{"class":86,"line":249},[84,159763,31954],{"class":473},[35,159765,159766,159769,159770,159772],{},[81,159767,159768],{},"while True"," 表示无限循环，通常配合 ",[81,159771,2382],{}," 使用。",[14,159774,159776],{"id":159775},"_45-break和continue","4.5 break和continue",[23,159778,159780],{"id":159779},"_451-break","4.5.1 break",[35,159782,159783,159785],{},[81,159784,2382],{}," 直接结束整个循环。",[75,159787,159789],{"className":30705,"code":159788,"language":30707,"meta":66,"style":66},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[81,159790,159791,159811,159823,159827],{"__ignoreMap":66},[84,159792,159793,159795,159797,159799,159801,159803,159805,159807,159809],{"class":86,"line":87},[84,159794,3354],{"class":473},[84,159796,9767],{"class":477},[84,159798,26371],{"class":473},[84,159800,32770],{"class":94},[84,159802,478],{"class":477},[84,159804,692],{"class":94},[84,159806,12764],{"class":477},[84,159808,817],{"class":94},[84,159810,31113],{"class":477},[84,159812,159813,159815,159817,159819,159821],{"class":86,"line":98},[84,159814,3430],{"class":473},[84,159816,9767],{"class":477},[84,159818,3278],{"class":473},[84,159820,78396],{"class":94},[84,159822,4068],{"class":477},[84,159824,159825],{"class":86,"line":70},[84,159826,31954],{"class":473},[84,159828,159829,159831],{"class":86,"line":120},[84,159830,31626],{"class":94},[84,159832,159476],{"class":477},[35,159834,146703],{},[75,159836,159839],{"className":159837,"code":159838,"language":5516,"meta":66},[5514],"1\n2\n",[81,159840,159838],{"__ignoreMap":66},[23,159842,159844],{"id":159843},"_452-continue","4.5.2 continue",[35,159846,159847,159849],{},[81,159848,154918],{}," 跳过本轮剩余代码，进入下一轮循环。",[75,159851,159853],{"className":30705,"code":159852,"language":30707,"meta":66,"style":66},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[81,159854,159855,159875,159887,159891],{"__ignoreMap":66},[84,159856,159857,159859,159861,159863,159865,159867,159869,159871,159873],{"class":86,"line":87},[84,159858,3354],{"class":473},[84,159860,9767],{"class":477},[84,159862,26371],{"class":473},[84,159864,32770],{"class":94},[84,159866,478],{"class":477},[84,159868,692],{"class":94},[84,159870,12764],{"class":477},[84,159872,817],{"class":94},[84,159874,31113],{"class":477},[84,159876,159877,159879,159881,159883,159885],{"class":86,"line":98},[84,159878,3430],{"class":473},[84,159880,9767],{"class":477},[84,159882,3278],{"class":473},[84,159884,78396],{"class":94},[84,159886,4068],{"class":477},[84,159888,159889],{"class":86,"line":70},[84,159890,148758],{"class":473},[84,159892,159893,159895],{"class":86,"line":120},[84,159894,31626],{"class":94},[84,159896,159476],{"class":477},[35,159898,146703],{},[75,159900,159903],{"className":159901,"code":159902,"language":5516,"meta":66},[5514],"1\n2\n4\n5\n",[81,159904,159902],{"__ignoreMap":66},[14,159906,159908],{"id":159907},"_46-for循环","4.6 for循环",[35,159910,159911,159913],{},[81,159912,3354],{}," 常用于遍历序列。",[75,159915,159917],{"className":30705,"code":159916,"language":30707,"meta":66,"style":66},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[81,159918,159919,159928,159932,159943],{"__ignoreMap":66},[84,159920,159921,159923,159925],{"class":86,"line":87},[84,159922,146782],{"class":477},[84,159924,523],{"class":473},[84,159926,159927],{"class":104}," \"python\"\n",[84,159929,159930],{"class":86,"line":98},[84,159931,2729],{"emptyLinePlaceholder":403},[84,159933,159934,159936,159939,159941],{"class":86,"line":70},[84,159935,3354],{"class":473},[84,159937,159938],{"class":477}," ch ",[84,159940,26371],{"class":473},[84,159942,158645],{"class":477},[84,159944,159945,159947],{"class":86,"line":120},[84,159946,31626],{"class":94},[84,159948,159949],{"class":477},"(ch)\n",[35,159951,159952],{},"遍历列表：",[75,159954,159956],{"className":30705,"code":159955,"language":30707,"meta":66,"style":66},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[81,159957,159958,159980,159984,159994],{"__ignoreMap":66},[84,159959,159960,159963,159965,159967,159969,159971,159973,159975,159978],{"class":86,"line":87},[84,159961,159962],{"class":477},"students ",[84,159964,523],{"class":473},[84,159966,52553],{"class":477},[84,159968,150134],{"class":104},[84,159970,12764],{"class":477},[84,159972,151182],{"class":104},[84,159974,12764],{"class":477},[84,159976,159977],{"class":104},"\"小刚\"",[84,159979,33573],{"class":477},[84,159981,159982],{"class":86,"line":98},[84,159983,2729],{"emptyLinePlaceholder":403},[84,159985,159986,159988,159990,159992],{"class":86,"line":70},[84,159987,3354],{"class":473},[84,159989,152383],{"class":477},[84,159991,26371],{"class":473},[84,159993,152388],{"class":477},[84,159995,159996,159998],{"class":86,"line":120},[84,159997,31626],{"class":94},[84,159999,150288],{"class":477},[14,160001,160003],{"id":160002},"_47-range函数","4.7 range函数",[35,160005,160006,160009],{},[81,160007,160008],{},"range()"," 用于生成整数序列。",[75,160011,160013],{"className":30705,"code":160012,"language":30707,"meta":66,"style":66},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[81,160014,160015,160029,160047],{"__ignoreMap":66},[84,160016,160017,160019,160021,160023,160026],{"class":86,"line":87},[84,160018,33743],{"class":94},[84,160020,478],{"class":477},[84,160022,792],{"class":94},[84,160024,160025],{"class":477},")          ",[84,160027,160028],{"class":328},"# 0,1,2,3,4\n",[84,160030,160031,160033,160035,160037,160039,160041,160044],{"class":86,"line":98},[84,160032,33743],{"class":94},[84,160034,478],{"class":477},[84,160036,692],{"class":94},[84,160038,12764],{"class":477},[84,160040,792],{"class":94},[84,160042,160043],{"class":477},")       ",[84,160045,160046],{"class":328},"# 1,2,3,4\n",[84,160048,160049,160051,160053,160055,160057,160059,160061,160063,160065],{"class":86,"line":70},[84,160050,33743],{"class":94},[84,160052,478],{"class":477},[84,160054,692],{"class":94},[84,160056,12764],{"class":477},[84,160058,919],{"class":94},[84,160060,12764],{"class":477},[84,160062,553],{"class":94},[84,160064,155907],{"class":477},[84,160066,160067],{"class":328},"# 1,3,5,7,9\n",[35,160069,160070,160071,24947],{},"配合 ",[81,160072,3354],{},[75,160074,160076],{"className":30705,"code":160075,"language":30707,"meta":66,"style":66},"for i in range(1, 6):\n    print(i)\n",[81,160077,160078,160098],{"__ignoreMap":66},[84,160079,160080,160082,160084,160086,160088,160090,160092,160094,160096],{"class":86,"line":87},[84,160081,3354],{"class":473},[84,160083,9767],{"class":477},[84,160085,26371],{"class":473},[84,160087,32770],{"class":94},[84,160089,478],{"class":477},[84,160091,692],{"class":94},[84,160093,12764],{"class":477},[84,160095,817],{"class":94},[84,160097,31113],{"class":477},[84,160099,160100,160102],{"class":86,"line":98},[84,160101,31626],{"class":94},[84,160103,159476],{"class":477},[35,160105,9354,160106,160108],{},[81,160107,33743],{}," 的结束值不包含在内。",[14,160110,160112],{"id":160111},"_48-for循环求和","4.8 for循环求和",[75,160114,160116],{"className":30705,"code":160115,"language":30707,"meta":66,"style":66},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[81,160117,160118,160126,160130,160150,160158,160162],{"__ignoreMap":66},[84,160119,160120,160122,160124],{"class":86,"line":87},[84,160121,157506],{"class":477},[84,160123,523],{"class":473},[84,160125,47660],{"class":94},[84,160127,160128],{"class":86,"line":98},[84,160129,2729],{"emptyLinePlaceholder":403},[84,160131,160132,160134,160136,160138,160140,160142,160144,160146,160148],{"class":86,"line":70},[84,160133,3354],{"class":473},[84,160135,9767],{"class":477},[84,160137,26371],{"class":473},[84,160139,32770],{"class":94},[84,160141,478],{"class":477},[84,160143,692],{"class":94},[84,160145,12764],{"class":477},[84,160147,810],{"class":94},[84,160149,31113],{"class":477},[84,160151,160152,160154,160156],{"class":86,"line":120},[84,160153,159553],{"class":477},[84,160155,9806],{"class":473},[84,160157,159558],{"class":477},[84,160159,160160],{"class":86,"line":131},[84,160161,2729],{"emptyLinePlaceholder":403},[84,160163,160164,160166],{"class":86,"line":145},[84,160165,30742],{"class":94},[84,160167,159577],{"class":477},[35,160169,160170],{},"求偶数和：",[75,160172,160174],{"className":30705,"code":160173,"language":30707,"meta":66,"style":66},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[81,160175,160176,160184,160188,160208,160224,160233,160237],{"__ignoreMap":66},[84,160177,160178,160180,160182],{"class":86,"line":87},[84,160179,157506],{"class":477},[84,160181,523],{"class":473},[84,160183,47660],{"class":94},[84,160185,160186],{"class":86,"line":98},[84,160187,2729],{"emptyLinePlaceholder":403},[84,160189,160190,160192,160194,160196,160198,160200,160202,160204,160206],{"class":86,"line":70},[84,160191,3354],{"class":473},[84,160193,9767],{"class":477},[84,160195,26371],{"class":473},[84,160197,32770],{"class":94},[84,160199,478],{"class":477},[84,160201,692],{"class":94},[84,160203,12764],{"class":477},[84,160205,810],{"class":94},[84,160207,31113],{"class":477},[84,160209,160210,160212,160214,160216,160218,160220,160222],{"class":86,"line":120},[84,160211,3430],{"class":473},[84,160213,9767],{"class":477},[84,160215,801],{"class":473},[84,160217,15084],{"class":94},[84,160219,101885],{"class":473},[84,160221,4422],{"class":94},[84,160223,4068],{"class":477},[84,160225,160226,160229,160231],{"class":86,"line":131},[84,160227,160228],{"class":477},"        total ",[84,160230,9806],{"class":473},[84,160232,159558],{"class":477},[84,160234,160235],{"class":86,"line":145},[84,160236,2729],{"emptyLinePlaceholder":403},[84,160238,160239,160241],{"class":86,"line":156},[84,160240,30742],{"class":94},[84,160242,159577],{"class":477},[35,160244,160245],{},"也可以：",[75,160247,160249],{"className":30705,"code":160248,"language":30707,"meta":66,"style":66},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[81,160250,160251,160259,160263,160287,160295,160299],{"__ignoreMap":66},[84,160252,160253,160255,160257],{"class":86,"line":87},[84,160254,157506],{"class":477},[84,160256,523],{"class":473},[84,160258,47660],{"class":94},[84,160260,160261],{"class":86,"line":98},[84,160262,2729],{"emptyLinePlaceholder":403},[84,160264,160265,160267,160269,160271,160273,160275,160277,160279,160281,160283,160285],{"class":86,"line":70},[84,160266,3354],{"class":473},[84,160268,9767],{"class":477},[84,160270,26371],{"class":473},[84,160272,32770],{"class":94},[84,160274,478],{"class":477},[84,160276,553],{"class":94},[84,160278,12764],{"class":477},[84,160280,810],{"class":94},[84,160282,12764],{"class":477},[84,160284,553],{"class":94},[84,160286,31113],{"class":477},[84,160288,160289,160291,160293],{"class":86,"line":120},[84,160290,159553],{"class":477},[84,160292,9806],{"class":473},[84,160294,159558],{"class":477},[84,160296,160297],{"class":86,"line":131},[84,160298,2729],{"emptyLinePlaceholder":403},[84,160300,160301,160303],{"class":86,"line":145},[84,160302,30742],{"class":94},[84,160304,159577],{"class":477},[14,160306,160308],{"id":160307},"_49-循环嵌套","4.9 循环嵌套",[35,160310,160311],{},"嵌套循环就是循环里面再写循环。",[75,160313,160315],{"className":30705,"code":160314,"language":30707,"meta":66,"style":66},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[81,160316,160317,160337,160357],{"__ignoreMap":66},[84,160318,160319,160321,160323,160325,160327,160329,160331,160333,160335],{"class":86,"line":87},[84,160320,3354],{"class":473},[84,160322,9767],{"class":477},[84,160324,26371],{"class":473},[84,160326,32770],{"class":94},[84,160328,478],{"class":477},[84,160330,692],{"class":94},[84,160332,12764],{"class":477},[84,160334,140],{"class":94},[84,160336,31113],{"class":477},[84,160338,160339,160341,160343,160345,160347,160349,160351,160353,160355],{"class":86,"line":98},[84,160340,3530],{"class":473},[84,160342,9829],{"class":477},[84,160344,26371],{"class":473},[84,160346,32770],{"class":94},[84,160348,478],{"class":477},[84,160350,692],{"class":94},[84,160352,12764],{"class":477},[84,160354,140],{"class":94},[84,160356,31113],{"class":477},[84,160358,160359,160361,160363,160365,160368,160370,160372,160374,160377,160379,160381,160383,160385],{"class":86,"line":70},[84,160360,32778],{"class":94},[84,160362,478],{"class":477},[84,160364,529],{"class":473},[84,160366,160367],{"class":104},"\"i=",[84,160369,1369],{"class":94},[84,160371,914],{"class":477},[84,160373,1419],{"class":94},[84,160375,160376],{"class":104},", j=",[84,160378,1369],{"class":94},[84,160380,940],{"class":477},[84,160382,1419],{"class":94},[84,160384,725],{"class":104},[84,160386,484],{"class":477},[35,160388,160389],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160391,160393],{"id":160392},"_410-九九乘法表","4.10 九九乘法表",[75,160395,160397],{"className":30705,"code":160396,"language":30707,"meta":66,"style":66},"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",[81,160398,160399,160419,160442,160494],{"__ignoreMap":66},[84,160400,160401,160403,160405,160407,160409,160411,160413,160415,160417],{"class":86,"line":87},[84,160402,3354],{"class":473},[84,160404,9767],{"class":477},[84,160406,26371],{"class":473},[84,160408,32770],{"class":94},[84,160410,478],{"class":477},[84,160412,692],{"class":94},[84,160414,12764],{"class":477},[84,160416,919],{"class":94},[84,160418,31113],{"class":477},[84,160420,160421,160423,160425,160427,160429,160431,160433,160436,160438,160440],{"class":86,"line":98},[84,160422,3530],{"class":473},[84,160424,9829],{"class":477},[84,160426,26371],{"class":473},[84,160428,32770],{"class":94},[84,160430,478],{"class":477},[84,160432,692],{"class":94},[84,160434,160435],{"class":477},", i ",[84,160437,954],{"class":473},[84,160439,25446],{"class":94},[84,160441,31113],{"class":477},[84,160443,160444,160446,160448,160450,160452,160454,160456,160458,160460,160462,160464,160466,160468,160470,160472,160474,160476,160478,160480,160482,160484,160486,160488,160490,160492],{"class":86,"line":70},[84,160445,32778],{"class":94},[84,160447,478],{"class":477},[84,160449,529],{"class":473},[84,160451,725],{"class":104},[84,160453,1369],{"class":94},[84,160455,940],{"class":477},[84,160457,1419],{"class":94},[84,160459,928],{"class":104},[84,160461,1369],{"class":94},[84,160463,914],{"class":477},[84,160465,1419],{"class":94},[84,160467,523],{"class":104},[84,160469,1369],{"class":94},[84,160471,100474],{"class":477},[84,160473,928],{"class":473},[84,160475,3739],{"class":477},[84,160477,1419],{"class":94},[84,160479,725],{"class":104},[84,160481,12764],{"class":477},[84,160483,46128],{"class":5545},[84,160485,523],{"class":473},[84,160487,725],{"class":104},[84,160489,1574],{"class":94},[84,160491,725],{"class":104},[84,160493,484],{"class":477},[84,160495,160496,160498],{"class":86,"line":120},[84,160497,31626],{"class":94},[84,160499,2305],{"class":477},[35,160501,160502],{},"关键点：",[28,160504,160505,160511,160517,160523],{},[31,160506,160507,160508,160510],{},"外层 ",[81,160509,914],{}," 控制行。",[31,160512,160513,160514,160516],{},"内层 ",[81,160515,940],{}," 控制列。",[31,160518,160519,160520,160522],{},"每行结束后用 ",[81,160521,146718],{}," 换行。",[31,160524,160525,160528],{},[81,160526,160527],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160530,160532],{"id":160531},"_411-循环else","4.11 循环else",[35,160534,160535,160536,160538,160539,160541,160542,160544],{},"Python 的循环可以带 ",[81,160537,2031],{},"。当循环正常结束时执行 ",[81,160540,2031],{},"，如果被 ",[81,160543,2382],{}," 打断，则不执行。",[75,160546,160548],{"className":30705,"code":160547,"language":30707,"meta":66,"style":66},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[81,160549,160550,160570,160582,160593,160597,160603],{"__ignoreMap":66},[84,160551,160552,160554,160556,160558,160560,160562,160564,160566,160568],{"class":86,"line":87},[84,160553,3354],{"class":473},[84,160555,9767],{"class":477},[84,160557,26371],{"class":473},[84,160559,32770],{"class":94},[84,160561,478],{"class":477},[84,160563,692],{"class":94},[84,160565,12764],{"class":477},[84,160567,817],{"class":94},[84,160569,31113],{"class":477},[84,160571,160572,160574,160576,160578,160580],{"class":86,"line":98},[84,160573,3430],{"class":473},[84,160575,9767],{"class":477},[84,160577,3278],{"class":473},[84,160579,2367],{"class":94},[84,160581,4068],{"class":477},[84,160583,160584,160586,160588,160591],{"class":86,"line":70},[84,160585,32778],{"class":94},[84,160587,478],{"class":477},[84,160589,160590],{"class":104},"\"找到了\"",[84,160592,484],{"class":477},[84,160594,160595],{"class":86,"line":120},[84,160596,31954],{"class":473},[84,160598,160599,160601],{"class":86,"line":131},[84,160600,2031],{"class":473},[84,160602,4068],{"class":477},[84,160604,160605,160607,160609,160612],{"class":86,"line":145},[84,160606,31626],{"class":94},[84,160608,478],{"class":477},[84,160610,160611],{"class":104},"\"没找到\"",[84,160613,484],{"class":477},[35,160615,160616],{},"常用于搜索。",[75,160618,160620],{"className":30705,"code":160619,"language":30707,"meta":66,"style":66},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[81,160621,160622,160643,160652,160656,160668,160679,160689,160693,160699],{"__ignoreMap":66},[84,160623,160624,160627,160629,160631,160633,160635,160637,160639,160641],{"class":86,"line":87},[84,160625,160626],{"class":477},"names ",[84,160628,523],{"class":473},[84,160630,52553],{"class":477},[84,160632,150134],{"class":104},[84,160634,12764],{"class":477},[84,160636,151182],{"class":104},[84,160638,12764],{"class":477},[84,160640,159977],{"class":104},[84,160642,33573],{"class":477},[84,160644,160645,160647,160649],{"class":86,"line":98},[84,160646,111904],{"class":477},[84,160648,523],{"class":473},[84,160650,160651],{"class":104}," \"小李\"\n",[84,160653,160654],{"class":86,"line":70},[84,160655,2729],{"emptyLinePlaceholder":403},[84,160657,160658,160660,160663,160665],{"class":86,"line":120},[84,160659,3354],{"class":473},[84,160661,160662],{"class":477}," name ",[84,160664,26371],{"class":473},[84,160666,160667],{"class":477}," names:\n",[84,160669,160670,160672,160674,160676],{"class":86,"line":131},[84,160671,3430],{"class":473},[84,160673,160662],{"class":477},[84,160675,3278],{"class":473},[84,160677,160678],{"class":477}," target:\n",[84,160680,160681,160683,160685,160687],{"class":86,"line":145},[84,160682,32778],{"class":94},[84,160684,478],{"class":477},[84,160686,160590],{"class":104},[84,160688,484],{"class":477},[84,160690,160691],{"class":86,"line":156},[84,160692,31954],{"class":473},[84,160694,160695,160697],{"class":86,"line":164},[84,160696,2031],{"class":473},[84,160698,4068],{"class":477},[84,160700,160701,160703,160705,160707],{"class":86,"line":175},[84,160702,31626],{"class":94},[84,160704,478],{"class":477},[84,160706,160611],{"class":104},[84,160708,484],{"class":477},[14,160710,160712],{"id":160711},"_412-小案例登录重试","4.12 小案例：登录重试",[35,160714,123538],{},[28,160716,160717,160720,160723],{},[31,160718,160719],{},"用户最多输入 3 次密码。",[31,160721,160722],{},"密码正确则登录成功。",[31,160724,160725],{},"3 次都错误则锁定账号。",[35,160727,10364],{},[75,160729,160731],{"className":30705,"code":160730,"language":30707,"meta":66,"style":66},"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",[81,160732,160733,160743,160747,160763,160779,160783,160795,160806,160810,160816,160841,160847],{"__ignoreMap":66},[84,160734,160735,160738,160740],{"class":86,"line":87},[84,160736,160737],{"class":477},"password ",[84,160739,523],{"class":473},[84,160741,160742],{"class":104}," \"123456\"\n",[84,160744,160745],{"class":86,"line":98},[84,160746,2729],{"emptyLinePlaceholder":403},[84,160748,160749,160751,160753,160755,160757,160759,160761],{"class":86,"line":70},[84,160750,3354],{"class":473},[84,160752,9767],{"class":477},[84,160754,26371],{"class":473},[84,160756,32770],{"class":94},[84,160758,478],{"class":477},[84,160760,547],{"class":94},[84,160762,31113],{"class":477},[84,160764,160765,160768,160770,160772,160774,160777],{"class":86,"line":120},[84,160766,160767],{"class":477},"    user_password ",[84,160769,523],{"class":473},[84,160771,60931],{"class":94},[84,160773,478],{"class":477},[84,160775,160776],{"class":104},"\"请输入密码:\"",[84,160778,484],{"class":477},[84,160780,160781],{"class":86,"line":131},[84,160782,2729],{"emptyLinePlaceholder":403},[84,160784,160785,160787,160790,160792],{"class":86,"line":145},[84,160786,3430],{"class":473},[84,160788,160789],{"class":477}," user_password ",[84,160791,3278],{"class":473},[84,160793,160794],{"class":477}," password:\n",[84,160796,160797,160799,160801,160804],{"class":86,"line":156},[84,160798,32778],{"class":94},[84,160800,478],{"class":477},[84,160802,160803],{"class":104},"\"登录成功\"",[84,160805,484],{"class":477},[84,160807,160808],{"class":86,"line":164},[84,160809,31954],{"class":473},[84,160811,160812,160814],{"class":86,"line":175},[84,160813,158268],{"class":473},[84,160815,4068],{"class":477},[84,160817,160818,160820,160822,160824,160827,160830,160832,160834,160836,160839],{"class":86,"line":185},[84,160819,32778],{"class":94},[84,160821,478],{"class":477},[84,160823,529],{"class":473},[84,160825,160826],{"class":104},"\"密码错误，还剩",[84,160828,160829],{"class":94},"{2",[84,160831,52598],{"class":473},[84,160833,3361],{"class":477},[84,160835,1419],{"class":94},[84,160837,160838],{"class":104},"次机会\"",[84,160840,484],{"class":477},[84,160842,160843,160845],{"class":86,"line":195},[84,160844,2031],{"class":473},[84,160846,4068],{"class":477},[84,160848,160849,160851,160853,160856],{"class":86,"line":206},[84,160850,31626],{"class":94},[84,160852,478],{"class":477},[84,160854,160855],{"class":104},"\"账号已锁定\"",[84,160857,484],{"class":477},[14,160859,160861],{"id":160860},"_413-小案例菜单程序","4.13 小案例：菜单程序",[75,160863,160865],{"className":30705,"code":160864,"language":30707,"meta":66,"style":66},"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",[81,160866,160867,160875,160886,160897,160908,160919,160930,160934,160949,160953,160965,160976,160988,160999,161011,161022,161034,161044,161048,161054],{"__ignoreMap":66},[84,160868,160869,160871,160873],{"class":86,"line":87},[84,160870,108989],{"class":473},[84,160872,95618],{"class":94},[84,160874,4068],{"class":477},[84,160876,160877,160879,160881,160884],{"class":86,"line":98},[84,160878,31626],{"class":94},[84,160880,478],{"class":477},[84,160882,160883],{"class":104},"\"====== 菜单 ======\"",[84,160885,484],{"class":477},[84,160887,160888,160890,160892,160895],{"class":86,"line":70},[84,160889,31626],{"class":94},[84,160891,478],{"class":477},[84,160893,160894],{"class":104},"\"1. 查询余额\"",[84,160896,484],{"class":477},[84,160898,160899,160901,160903,160906],{"class":86,"line":120},[84,160900,31626],{"class":94},[84,160902,478],{"class":477},[84,160904,160905],{"class":104},"\"2. 存款\"",[84,160907,484],{"class":477},[84,160909,160910,160912,160914,160917],{"class":86,"line":131},[84,160911,31626],{"class":94},[84,160913,478],{"class":477},[84,160915,160916],{"class":104},"\"3. 取款\"",[84,160918,484],{"class":477},[84,160920,160921,160923,160925,160928],{"class":86,"line":145},[84,160922,31626],{"class":94},[84,160924,478],{"class":477},[84,160926,160927],{"class":104},"\"0. 退出\"",[84,160929,484],{"class":477},[84,160931,160932],{"class":86,"line":156},[84,160933,2729],{"emptyLinePlaceholder":403},[84,160935,160936,160939,160941,160943,160945,160947],{"class":86,"line":164},[84,160937,160938],{"class":477},"    choice ",[84,160940,523],{"class":473},[84,160942,60931],{"class":94},[84,160944,478],{"class":477},[84,160946,153319],{"class":104},[84,160948,484],{"class":477},[84,160950,160951],{"class":86,"line":175},[84,160952,2729],{"emptyLinePlaceholder":403},[84,160954,160955,160957,160959,160961,160963],{"class":86,"line":185},[84,160956,3430],{"class":473},[84,160958,153332],{"class":477},[84,160960,3278],{"class":473},[84,160962,153337],{"class":104},[84,160964,4068],{"class":477},[84,160966,160967,160969,160971,160974],{"class":86,"line":195},[84,160968,32778],{"class":94},[84,160970,478],{"class":477},[84,160972,160973],{"class":104},"\"余额为1000元\"",[84,160975,484],{"class":477},[84,160977,160978,160980,160982,160984,160986],{"class":86,"line":206},[84,160979,39620],{"class":473},[84,160981,153332],{"class":477},[84,160983,3278],{"class":473},[84,160985,153356],{"class":104},[84,160987,4068],{"class":477},[84,160989,160990,160992,160994,160997],{"class":86,"line":217},[84,160991,32778],{"class":94},[84,160993,478],{"class":477},[84,160995,160996],{"class":104},"\"存款功能\"",[84,160998,484],{"class":477},[84,161000,161001,161003,161005,161007,161009],{"class":86,"line":227},[84,161002,39620],{"class":473},[84,161004,153332],{"class":477},[84,161006,3278],{"class":473},[84,161008,153374],{"class":104},[84,161010,4068],{"class":477},[84,161012,161013,161015,161017,161020],{"class":86,"line":238},[84,161014,32778],{"class":94},[84,161016,478],{"class":477},[84,161018,161019],{"class":104},"\"取款功能\"",[84,161021,484],{"class":477},[84,161023,161024,161026,161028,161030,161032],{"class":86,"line":249},[84,161025,39620],{"class":473},[84,161027,153332],{"class":477},[84,161029,3278],{"class":473},[84,161031,153428],{"class":104},[84,161033,4068],{"class":477},[84,161035,161036,161038,161040,161042],{"class":86,"line":262},[84,161037,32778],{"class":94},[84,161039,478],{"class":477},[84,161041,153439],{"class":104},[84,161043,484],{"class":477},[84,161045,161046],{"class":86,"line":273},[84,161047,31954],{"class":473},[84,161049,161050,161052],{"class":86,"line":283},[84,161051,158268],{"class":473},[84,161053,4068],{"class":477},[84,161055,161056,161058,161060,161062],{"class":86,"line":294},[84,161057,32778],{"class":94},[84,161059,478],{"class":477},[84,161061,153460],{"class":104},[84,161063,484],{"class":477},[35,161065,161066,161067,161069,161070,28712],{},"菜单类程序通常使用 ",[81,161068,159768],{},"，用户选择退出时 ",[81,161071,2382],{},[14,161073,161075],{"id":161074},"_414-易错点","4.14 易错点",[28,161077,161078,161083,161089,161097,161103],{},[31,161079,161080,161082],{},[81,161081,108989],{}," 循环必须更新控制变量。",[31,161084,161085,161088],{},[81,161086,161087],{},"range(1, 10)"," 不包含 10。",[31,161090,161091,161093,161094,161096],{},[81,161092,2382],{}," 结束整个循环，",[81,161095,154918],{}," 只跳过本轮。",[31,161098,161099,161100,161102],{},"嵌套循环中，",[81,161101,2382],{}," 只跳出当前所在的一层循环。",[31,161104,161105],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161107,161109],{"id":161108},"_415-本章练习","4.15 本章练习",[28,161111,161112,161115,161118,161121,161124],{},[31,161113,161114],{},"输出 1 到 100。",[31,161116,161117],{},"计算 1 到 100 的偶数和。",[31,161119,161120],{},"输出 100 以内能被 3 和 5 同时整除的数。",[31,161122,161123],{},"编写猜数字游戏，限制最多猜 7 次。",[31,161125,161126],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[389,161128,161129],{},"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":66,"searchDepth":98,"depth":98,"links":161131},[161132,161133,161134,161135,161136,161140,161141,161142,161143,161144,161145,161146,161147,161148,161149],{"id":159388,"depth":98,"text":159389},{"id":159418,"depth":98,"text":159419},{"id":159507,"depth":98,"text":159508},{"id":159601,"depth":98,"text":159602},{"id":159775,"depth":98,"text":159776,"children":161137},[161138,161139],{"id":159779,"depth":70,"text":159780},{"id":159843,"depth":70,"text":159844},{"id":159907,"depth":98,"text":159908},{"id":160002,"depth":98,"text":160003},{"id":160111,"depth":98,"text":160112},{"id":160307,"depth":98,"text":160308},{"id":160392,"depth":98,"text":160393},{"id":160531,"depth":98,"text":160532},{"id":160711,"depth":98,"text":160712},{"id":160860,"depth":98,"text":160861},{"id":161074,"depth":98,"text":161075},{"id":161108,"depth":98,"text":161109},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159380,"description":400},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161156,"title":161157,"body":161158,"description":400,"extension":401,"meta":163163,"navigation":403,"path":163164,"seo":163165,"stem":163166,"__hash__":163167},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161159,"toc":163143},[161160,161163,161167,161170,161173,161187,161190,161204,161208,161210,161229,161231,161278,161280,161294,161298,161372,161375,161379,161382,161441,161449,161452,161505,161508,161512,161517,161572,161580,161630,161634,161639,161647,161746,161752,161756,161761,161764,161775,161816,161829,161833,161836,161872,161875,161888,161891,161951,161955,161959,161962,162013,162017,162020,162067,162073,162139,162142,162146,162149,162265,162268,162272,162275,162381,162385,162388,162426,162429,162471,162474,162534,162537,162541,163005,163008,163012,163039,163045,163106,163110,163140],[10,161161,161157],{"id":161162},"_5-函数基础",[14,161164,161166],{"id":161165},"_51-为什么需要函数","5.1 为什么需要函数",[35,161168,161169],{},"函数用于封装一段可以重复使用的代码。",[35,161171,161172],{},"不使用函数的问题：",[28,161174,161175,161178,161181,161184],{},[31,161176,161177],{},"重复代码多。",[31,161179,161180],{},"修改逻辑时容易漏改。",[31,161182,161183],{},"主流程不清晰。",[31,161185,161186],{},"程序越写越长，难以维护。",[35,161188,161189],{},"使用函数后的好处：",[28,161191,161192,161195,161198,161201],{},[31,161193,161194],{},"提高复用性。",[31,161196,161197],{},"提高可读性。",[31,161199,161200],{},"便于调试。",[31,161202,161203],{},"便于分工。",[14,161205,161207],{"id":161206},"_52-函数定义","5.2 函数定义",[35,161209,5510],{},[75,161211,161213],{"className":30705,"code":161212,"language":30707,"meta":66,"style":66},"def 函数名():\n    函数体\n",[81,161214,161215,161224],{"__ignoreMap":66},[84,161216,161217,161219,161222],{"class":86,"line":87},[84,161218,32274],{"class":473},[84,161220,161221],{"class":90}," 函数名",[84,161223,32280],{"class":477},[84,161225,161226],{"class":86,"line":98},[84,161227,161228],{"class":477},"    函数体\n",[35,161230,15464],{},[75,161232,161234],{"className":30705,"code":161233,"language":30707,"meta":66,"style":66},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[81,161235,161236,161245,161255,161265,161269,161273],{"__ignoreMap":66},[84,161237,161238,161240,161243],{"class":86,"line":87},[84,161239,32274],{"class":473},[84,161241,161242],{"class":90}," say_hello",[84,161244,32280],{"class":477},[84,161246,161247,161249,161251,161253],{"class":86,"line":98},[84,161248,31626],{"class":94},[84,161250,478],{"class":477},[84,161252,6173],{"class":104},[84,161254,484],{"class":477},[84,161256,161257,161259,161261,161263],{"class":86,"line":70},[84,161258,31626],{"class":94},[84,161260,478],{"class":477},[84,161262,146885],{"class":104},[84,161264,484],{"class":477},[84,161266,161267],{"class":86,"line":120},[84,161268,2729],{"emptyLinePlaceholder":403},[84,161270,161271],{"class":86,"line":131},[84,161272,2729],{"emptyLinePlaceholder":403},[84,161274,161275],{"class":86,"line":145},[84,161276,161277],{"class":477},"say_hello()\n",[35,161279,9354],{},[28,161281,161282,161285,161288,161291],{},[31,161283,161284],{},"函数必须先定义，再调用。",[31,161286,161287],{},"函数名遵循变量命名规则。",[31,161289,161290],{},"函数体需要缩进。",[31,161292,161293],{},"函数不调用就不会执行。",[14,161295,161297],{"id":161296},"_53-函数调用","5.3 函数调用",[75,161299,161301],{"className":30705,"code":161300,"language":30707,"meta":66,"style":66},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[81,161302,161303,161312,161323,161334,161345,161355,161359,161363,161368],{"__ignoreMap":66},[84,161304,161305,161307,161310],{"class":86,"line":87},[84,161306,32274],{"class":473},[84,161308,161309],{"class":90}," print_menu",[84,161311,32280],{"class":477},[84,161313,161314,161316,161318,161321],{"class":86,"line":98},[84,161315,31626],{"class":94},[84,161317,478],{"class":477},[84,161319,161320],{"class":104},"\"1. 查询\"",[84,161322,484],{"class":477},[84,161324,161325,161327,161329,161332],{"class":86,"line":70},[84,161326,31626],{"class":94},[84,161328,478],{"class":477},[84,161330,161331],{"class":104},"\"2. 添加\"",[84,161333,484],{"class":477},[84,161335,161336,161338,161340,161343],{"class":86,"line":120},[84,161337,31626],{"class":94},[84,161339,478],{"class":477},[84,161341,161342],{"class":104},"\"3. 删除\"",[84,161344,484],{"class":477},[84,161346,161347,161349,161351,161353],{"class":86,"line":131},[84,161348,31626],{"class":94},[84,161350,478],{"class":477},[84,161352,160927],{"class":104},[84,161354,484],{"class":477},[84,161356,161357],{"class":86,"line":145},[84,161358,2729],{"emptyLinePlaceholder":403},[84,161360,161361],{"class":86,"line":156},[84,161362,2729],{"emptyLinePlaceholder":403},[84,161364,161365],{"class":86,"line":164},[84,161366,161367],{"class":477},"print_menu()\n",[84,161369,161370],{"class":86,"line":175},[84,161371,161367],{"class":477},[35,161373,161374],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161376,161378],{"id":161377},"_54-参数","5.4 参数",[35,161380,161381],{},"参数用于向函数传递数据。",[75,161383,161385],{"className":30705,"code":161384,"language":30707,"meta":66,"style":66},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[81,161386,161387,161396,161416,161420,161424,161433],{"__ignoreMap":66},[84,161388,161389,161391,161393],{"class":86,"line":87},[84,161390,32274],{"class":473},[84,161392,161242],{"class":90},[84,161394,161395],{"class":477},"(name):\n",[84,161397,161398,161400,161402,161404,161406,161408,161410,161412,161414],{"class":86,"line":98},[84,161399,31626],{"class":94},[84,161401,478],{"class":477},[84,161403,529],{"class":473},[84,161405,157300],{"class":104},[84,161407,1369],{"class":94},[84,161409,80136],{"class":477},[84,161411,1419],{"class":94},[84,161413,725],{"class":104},[84,161415,484],{"class":477},[84,161417,161418],{"class":86,"line":70},[84,161419,2729],{"emptyLinePlaceholder":403},[84,161421,161422],{"class":86,"line":120},[84,161423,2729],{"emptyLinePlaceholder":403},[84,161425,161426,161429,161431],{"class":86,"line":131},[84,161427,161428],{"class":477},"say_hello(",[84,161430,150134],{"class":104},[84,161432,484],{"class":477},[84,161434,161435,161437,161439],{"class":86,"line":145},[84,161436,161428],{"class":477},[84,161438,151182],{"class":104},[84,161440,484],{"class":477},[35,161442,161443,161445,161446,161448],{},[81,161444,80136],{}," 是形参，",[81,161447,150134],{}," 是实参。",[35,161450,161451],{},"多个参数：",[75,161453,161455],{"className":30705,"code":161454,"language":30707,"meta":66,"style":66},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[81,161456,161457,161465,161478,161484,161488,161492],{"__ignoreMap":66},[84,161458,161459,161461,161463],{"class":86,"line":87},[84,161460,32274],{"class":473},[84,161462,5538],{"class":90},[84,161464,151339],{"class":477},[84,161466,161467,161470,161472,161474,161476],{"class":86,"line":98},[84,161468,161469],{"class":477},"    result ",[84,161471,523],{"class":473},[84,161473,11198],{"class":477},[84,161475,954],{"class":473},[84,161477,151350],{"class":477},[84,161479,161480,161482],{"class":86,"line":70},[84,161481,31626],{"class":94},[84,161483,76911],{"class":477},[84,161485,161486],{"class":86,"line":120},[84,161487,2729],{"emptyLinePlaceholder":403},[84,161489,161490],{"class":86,"line":131},[84,161491,2729],{"emptyLinePlaceholder":403},[84,161493,161494,161497,161499,161501,161503],{"class":86,"line":145},[84,161495,161496],{"class":477},"add(",[84,161498,919],{"class":94},[84,161500,12764],{"class":477},[84,161502,1173],{"class":94},[84,161504,484],{"class":477},[35,161506,161507],{},"调用时参数数量必须匹配。",[14,161509,161511],{"id":161510},"_55-返回值","5.5 返回值",[35,161513,161514,161516],{},[81,161515,17375],{}," 用于把函数内部的结果返回给调用者。",[75,161518,161520],{"className":30705,"code":161519,"language":30707,"meta":66,"style":66},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[81,161521,161522,161530,161540,161544,161548,161566],{"__ignoreMap":66},[84,161523,161524,161526,161528],{"class":86,"line":87},[84,161525,32274],{"class":473},[84,161527,5538],{"class":90},[84,161529,151339],{"class":477},[84,161531,161532,161534,161536,161538],{"class":86,"line":98},[84,161533,4419],{"class":473},[84,161535,11198],{"class":477},[84,161537,954],{"class":473},[84,161539,151350],{"class":477},[84,161541,161542],{"class":86,"line":70},[84,161543,2729],{"emptyLinePlaceholder":403},[84,161545,161546],{"class":86,"line":120},[84,161547,2729],{"emptyLinePlaceholder":403},[84,161549,161550,161553,161555,161558,161560,161562,161564],{"class":86,"line":131},[84,161551,161552],{"class":477},"result ",[84,161554,523],{"class":473},[84,161556,161557],{"class":477}," add(",[84,161559,919],{"class":94},[84,161561,12764],{"class":477},[84,161563,1173],{"class":94},[84,161565,484],{"class":477},[84,161567,161568,161570],{"class":86,"line":145},[84,161569,30742],{"class":94},[84,161571,76911],{"class":477},[35,161573,161574,161575,161577,161578,28712],{},"如果函数没有写 ",[81,161576,17375],{},"，默认返回 ",[81,161579,96012],{},[75,161581,161583],{"className":30705,"code":161582,"language":30707,"meta":66,"style":66},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[81,161584,161585,161593,161603,161607,161611,161620],{"__ignoreMap":66},[84,161586,161587,161589,161591],{"class":86,"line":87},[84,161588,32274],{"class":473},[84,161590,161242],{"class":90},[84,161592,32280],{"class":477},[84,161594,161595,161597,161599,161601],{"class":86,"line":98},[84,161596,31626],{"class":94},[84,161598,478],{"class":477},[84,161600,6173],{"class":104},[84,161602,484],{"class":477},[84,161604,161605],{"class":86,"line":70},[84,161606,2729],{"emptyLinePlaceholder":403},[84,161608,161609],{"class":86,"line":120},[84,161610,2729],{"emptyLinePlaceholder":403},[84,161612,161613,161615,161617],{"class":86,"line":131},[84,161614,161552],{"class":477},[84,161616,523],{"class":473},[84,161618,161619],{"class":477}," say_hello()\n",[84,161621,161622,161624,161627],{"class":86,"line":145},[84,161623,30742],{"class":94},[84,161625,161626],{"class":477},"(result)  ",[84,161628,161629],{"class":328},"# None\n",[14,161631,161633],{"id":161632},"_56-return的作用","5.6 return的作用",[35,161635,161636,161638],{},[81,161637,17375],{}," 有两个作用：",[28,161640,161641,161644],{},[31,161642,161643],{},"返回结果。",[31,161645,161646],{},"结束函数。",[75,161648,161650],{"className":30705,"code":161649,"language":30707,"meta":66,"style":66},"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",[81,161651,161652,161662,161674,161681,161685,161697,161704,161708,161715,161719,161723,161734],{"__ignoreMap":66},[84,161653,161654,161656,161659],{"class":86,"line":87},[84,161655,32274],{"class":473},[84,161657,161658],{"class":90}," check_age",[84,161660,161661],{"class":477},"(age):\n",[84,161663,161664,161666,161668,161670,161672],{"class":86,"line":98},[84,161665,3430],{"class":473},[84,161667,16036],{"class":477},[84,161669,1383],{"class":473},[84,161671,4422],{"class":94},[84,161673,4068],{"class":477},[84,161675,161676,161678],{"class":86,"line":70},[84,161677,15081],{"class":473},[84,161679,161680],{"class":104}," \"年龄不合法\"\n",[84,161682,161683],{"class":86,"line":120},[84,161684,2729],{"emptyLinePlaceholder":403},[84,161686,161687,161689,161691,161693,161695],{"class":86,"line":131},[84,161688,3430],{"class":473},[84,161690,16036],{"class":477},[84,161692,2040],{"class":473},[84,161694,156531],{"class":94},[84,161696,4068],{"class":477},[84,161698,161699,161701],{"class":86,"line":145},[84,161700,15081],{"class":473},[84,161702,161703],{"class":104}," \"成年人\"\n",[84,161705,161706],{"class":86,"line":156},[84,161707,2729],{"emptyLinePlaceholder":403},[84,161709,161710,161712],{"class":86,"line":164},[84,161711,4419],{"class":473},[84,161713,161714],{"class":104}," \"未成年人\"\n",[84,161716,161717],{"class":86,"line":175},[84,161718,2729],{"emptyLinePlaceholder":403},[84,161720,161721],{"class":86,"line":185},[84,161722,2729],{"emptyLinePlaceholder":403},[84,161724,161725,161727,161730,161732],{"class":86,"line":195},[84,161726,30742],{"class":94},[84,161728,161729],{"class":477},"(check_age(",[84,161731,1173],{"class":94},[84,161733,30824],{"class":477},[84,161735,161736,161738,161740,161742,161744],{"class":86,"line":206},[84,161737,30742],{"class":94},[84,161739,161729],{"class":477},[84,161741,1005],{"class":473},[84,161743,692],{"class":94},[84,161745,30824],{"class":477},[35,161747,161748,161749,161751],{},"函数执行到 ",[81,161750,17375],{}," 后，后面的代码不会继续执行。",[14,161753,161755],{"id":161754},"_57-none","5.7 None",[35,161757,161758,161760],{},[81,161759,96012],{}," 表示空值或没有结果。",[35,161762,161763],{},"常见使用场景：",[28,161765,161766,161769,161772],{},[31,161767,161768],{},"函数没有返回值。",[31,161770,161771],{},"变量暂时没有具体值。",[31,161773,161774],{},"表示查询不到结果。",[75,161776,161778],{"className":30705,"code":161777,"language":30707,"meta":66,"style":66},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[81,161779,161780,161788,161792,161805],{"__ignoreMap":66},[84,161781,161782,161784,161786],{"class":86,"line":87},[84,161783,161552],{"class":477},[84,161785,523],{"class":473},[84,161787,152418],{"class":94},[84,161789,161790],{"class":86,"line":98},[84,161791,2729],{"emptyLinePlaceholder":403},[84,161793,161794,161796,161799,161801,161803],{"class":86,"line":70},[84,161795,1871],{"class":473},[84,161797,161798],{"class":477}," result ",[84,161800,39254],{"class":473},[84,161802,39260],{"class":94},[84,161804,4068],{"class":477},[84,161806,161807,161809,161811,161814],{"class":86,"line":120},[84,161808,31626],{"class":94},[84,161810,478],{"class":477},[84,161812,161813],{"class":104},"\"没有数据\"",[84,161815,484],{"class":477},[35,161817,161818,161819,161821,161822,161825,161826,28712],{},"判断 ",[81,161820,96012],{}," 推荐使用 ",[81,161823,161824],{},"is None","，不要写成 ",[81,161827,161828],{},"== None",[14,161830,161832],{"id":161831},"_58-函数文档字符串","5.8 函数文档字符串",[35,161834,161835],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[75,161837,161839],{"className":30705,"code":161838,"language":30707,"meta":66,"style":66},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[81,161840,161841,161851,161856],{"__ignoreMap":66},[84,161842,161843,161845,161848],{"class":86,"line":87},[84,161844,32274],{"class":473},[84,161846,161847],{"class":90}," calculate_bmi",[84,161849,161850],{"class":477},"(weight, height):\n",[84,161852,161853],{"class":86,"line":98},[84,161854,161855],{"class":104},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[84,161857,161858,161860,161863,161865,161868,161870],{"class":86,"line":70},[84,161859,4419],{"class":473},[84,161861,161862],{"class":477}," weight ",[84,161864,1057],{"class":473},[84,161866,161867],{"class":477}," height ",[84,161869,10990],{"class":473},[84,161871,48050],{"class":94},[35,161873,161874],{},"查看说明：",[75,161876,161878],{"className":30705,"code":161877,"language":30707,"meta":66,"style":66},"help(calculate_bmi)\n",[81,161879,161880],{"__ignoreMap":66},[84,161881,161882,161885],{"class":86,"line":87},[84,161883,161884],{"class":94},"help",[84,161886,161887],{"class":477},"(calculate_bmi)\n",[35,161889,161890],{},"较完整的写法：",[75,161892,161894],{"className":30705,"code":161893,"language":30707,"meta":66,"style":66},"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",[81,161895,161896,161904,161909,161914,161918,161923,161928,161933,161937],{"__ignoreMap":66},[84,161897,161898,161900,161902],{"class":86,"line":87},[84,161899,32274],{"class":473},[84,161901,161847],{"class":90},[84,161903,161850],{"class":477},[84,161905,161906],{"class":86,"line":98},[84,161907,161908],{"class":104},"    \"\"\"\n",[84,161910,161911],{"class":86,"line":70},[84,161912,161913],{"class":104},"    计算BMI。\n",[84,161915,161916],{"class":86,"line":120},[84,161917,2729],{"emptyLinePlaceholder":403},[84,161919,161920],{"class":86,"line":131},[84,161921,161922],{"class":104},"    :param weight: 体重，单位kg\n",[84,161924,161925],{"class":86,"line":145},[84,161926,161927],{"class":104},"    :param height: 身高，单位m\n",[84,161929,161930],{"class":86,"line":156},[84,161931,161932],{"class":104},"    :return: BMI数值\n",[84,161934,161935],{"class":86,"line":164},[84,161936,161908],{"class":104},[84,161938,161939,161941,161943,161945,161947,161949],{"class":86,"line":175},[84,161940,4419],{"class":473},[84,161942,161862],{"class":477},[84,161944,1057],{"class":473},[84,161946,161867],{"class":477},[84,161948,10990],{"class":473},[84,161950,48050],{"class":94},[14,161952,161954],{"id":161953},"_59-变量作用域","5.9 变量作用域",[23,161956,161958],{"id":161957},"_591-局部变量","5.9.1 局部变量",[35,161960,161961],{},"在函数内部定义的变量，只能在函数内部使用。",[75,161963,161965],{"className":30705,"code":161964,"language":30707,"meta":66,"style":66},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[81,161966,161967,161976,161984,161990,161994,161998,162003],{"__ignoreMap":66},[84,161968,161969,161971,161974],{"class":86,"line":87},[84,161970,32274],{"class":473},[84,161972,161973],{"class":90}," test",[84,161975,32280],{"class":477},[84,161977,161978,161980,161982],{"class":86,"line":98},[84,161979,45920],{"class":477},[84,161981,523],{"class":473},[84,161983,58754],{"class":94},[84,161985,161986,161988],{"class":86,"line":70},[84,161987,31626],{"class":94},[84,161989,491],{"class":477},[84,161991,161992],{"class":86,"line":120},[84,161993,2729],{"emptyLinePlaceholder":403},[84,161995,161996],{"class":86,"line":131},[84,161997,2729],{"emptyLinePlaceholder":403},[84,161999,162000],{"class":86,"line":145},[84,162001,162002],{"class":477},"test()\n",[84,162004,162005,162007,162010],{"class":86,"line":156},[84,162006,30742],{"class":94},[84,162008,162009],{"class":477},"(num)  ",[84,162011,162012],{"class":328},"# 报错\n",[23,162014,162016],{"id":162015},"_592-全局变量","5.9.2 全局变量",[35,162018,162019],{},"在函数外部定义的变量，可以在函数内部读取。",[75,162021,162023],{"className":30705,"code":162022,"language":30707,"meta":66,"style":66},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[81,162024,162025,162033,162037,162041,162049,162055,162059,162063],{"__ignoreMap":66},[84,162026,162027,162029,162031],{"class":86,"line":87},[84,162028,146782],{"class":477},[84,162030,523],{"class":473},[84,162032,149599],{"class":104},[84,162034,162035],{"class":86,"line":98},[84,162036,2729],{"emptyLinePlaceholder":403},[84,162038,162039],{"class":86,"line":70},[84,162040,2729],{"emptyLinePlaceholder":403},[84,162042,162043,162045,162047],{"class":86,"line":120},[84,162044,32274],{"class":473},[84,162046,161242],{"class":90},[84,162048,32280],{"class":477},[84,162050,162051,162053],{"class":86,"line":131},[84,162052,31626],{"class":94},[84,162054,150906],{"class":477},[84,162056,162057],{"class":86,"line":145},[84,162058,2729],{"emptyLinePlaceholder":403},[84,162060,162061],{"class":86,"line":156},[84,162062,2729],{"emptyLinePlaceholder":403},[84,162064,162065],{"class":86,"line":164},[84,162066,161277],{"class":477},[35,162068,162069,162070,28712],{},"如果要在函数内部修改全局变量，需要 ",[81,162071,162072],{},"global",[75,162074,162076],{"className":30705,"code":162075,"language":30707,"meta":66,"style":66},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[81,162077,162078,162086,162090,162094,162103,162111,162119,162123,162127,162132],{"__ignoreMap":66},[84,162079,162080,162082,162084],{"class":86,"line":87},[84,162081,146937],{"class":477},[84,162083,523],{"class":473},[84,162085,47660],{"class":94},[84,162087,162088],{"class":86,"line":98},[84,162089,2729],{"emptyLinePlaceholder":403},[84,162091,162092],{"class":86,"line":70},[84,162093,2729],{"emptyLinePlaceholder":403},[84,162095,162096,162098,162101],{"class":86,"line":120},[84,162097,32274],{"class":473},[84,162099,162100],{"class":90}," add_count",[84,162102,32280],{"class":477},[84,162104,162105,162108],{"class":86,"line":131},[84,162106,162107],{"class":473},"    global",[84,162109,162110],{"class":477}," count\n",[84,162112,162113,162115,162117],{"class":86,"line":145},[84,162114,159679],{"class":477},[84,162116,9806],{"class":473},[84,162118,56025],{"class":94},[84,162120,162121],{"class":86,"line":156},[84,162122,2729],{"emptyLinePlaceholder":403},[84,162124,162125],{"class":86,"line":164},[84,162126,2729],{"emptyLinePlaceholder":403},[84,162128,162129],{"class":86,"line":175},[84,162130,162131],{"class":477},"add_count()\n",[84,162133,162134,162136],{"class":86,"line":185},[84,162135,30742],{"class":94},[84,162137,162138],{"class":477},"(count)\n",[35,162140,162141],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162143,162145],{"id":162144},"_510-函数嵌套调用","5.10 函数嵌套调用",[35,162147,162148],{},"一个函数中可以调用另一个函数。",[75,162150,162152],{"className":30705,"code":162151,"language":30707,"meta":66,"style":66},"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",[81,162153,162154,162163,162177,162181,162185,162194,162199,162219,162240,162244,162248,162252],{"__ignoreMap":66},[84,162155,162156,162158,162161],{"class":86,"line":87},[84,162157,32274],{"class":473},[84,162159,162160],{"class":90}," print_line",[84,162162,32280],{"class":477},[84,162164,162165,162167,162169,162171,162173,162175],{"class":86,"line":98},[84,162166,31626],{"class":94},[84,162168,478],{"class":477},[84,162170,32810],{"class":104},[84,162172,6847],{"class":473},[84,162174,78991],{"class":94},[84,162176,484],{"class":477},[84,162178,162179],{"class":86,"line":70},[84,162180,2729],{"emptyLinePlaceholder":403},[84,162182,162183],{"class":86,"line":120},[84,162184,2729],{"emptyLinePlaceholder":403},[84,162186,162187,162189,162192],{"class":86,"line":131},[84,162188,32274],{"class":473},[84,162190,162191],{"class":90}," print_info",[84,162193,149621],{"class":477},[84,162195,162196],{"class":86,"line":145},[84,162197,162198],{"class":477},"    print_line()\n",[84,162200,162201,162203,162205,162207,162209,162211,162213,162215,162217],{"class":86,"line":156},[84,162202,31626],{"class":94},[84,162204,478],{"class":477},[84,162206,529],{"class":473},[84,162208,156928],{"class":104},[84,162210,1369],{"class":94},[84,162212,80136],{"class":477},[84,162214,1419],{"class":94},[84,162216,725],{"class":104},[84,162218,484],{"class":477},[84,162220,162221,162223,162225,162227,162230,162232,162234,162236,162238],{"class":86,"line":164},[84,162222,31626],{"class":94},[84,162224,478],{"class":477},[84,162226,529],{"class":473},[84,162228,162229],{"class":104},"\"年龄:",[84,162231,1369],{"class":94},[84,162233,70547],{"class":477},[84,162235,1419],{"class":94},[84,162237,725],{"class":104},[84,162239,484],{"class":477},[84,162241,162242],{"class":86,"line":175},[84,162243,162198],{"class":477},[84,162245,162246],{"class":86,"line":185},[84,162247,2729],{"emptyLinePlaceholder":403},[84,162249,162250],{"class":86,"line":195},[84,162251,2729],{"emptyLinePlaceholder":403},[84,162253,162254,162257,162259,162261,162263],{"class":86,"line":206},[84,162255,162256],{"class":477},"print_info(",[84,162258,150134],{"class":104},[84,162260,12764],{"class":477},[84,162262,1123],{"class":94},[84,162264,484],{"class":477},[35,162266,162267],{},"这种方式可以把小功能组合成大功能。",[14,162269,162271],{"id":162270},"_511-参数检查","5.11 参数检查",[35,162273,162274],{},"函数内部可以检查参数是否合法。",[75,162276,162278],{"className":30705,"code":162277,"language":30707,"meta":66,"style":66},"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",[81,162279,162280,162289,162301,162307,162317,162321,162325,162342,162346,162358,162369,162375],{"__ignoreMap":66},[84,162281,162282,162284,162287],{"class":86,"line":87},[84,162283,32274],{"class":473},[84,162285,162286],{"class":90}," divide",[84,162288,151339],{"class":477},[84,162290,162291,162293,162295,162297,162299],{"class":86,"line":98},[84,162292,3430],{"class":473},[84,162294,11211],{"class":477},[84,162296,3278],{"class":473},[84,162298,4422],{"class":94},[84,162300,4068],{"class":477},[84,162302,162303,162305],{"class":86,"line":70},[84,162304,15081],{"class":473},[84,162306,152418],{"class":94},[84,162308,162309,162311,162313,162315],{"class":86,"line":120},[84,162310,4419],{"class":473},[84,162312,11198],{"class":477},[84,162314,1057],{"class":473},[84,162316,151350],{"class":477},[84,162318,162319],{"class":86,"line":131},[84,162320,2729],{"emptyLinePlaceholder":403},[84,162322,162323],{"class":86,"line":145},[84,162324,2729],{"emptyLinePlaceholder":403},[84,162326,162327,162329,162331,162334,162336,162338,162340],{"class":86,"line":156},[84,162328,161552],{"class":477},[84,162330,523],{"class":473},[84,162332,162333],{"class":477}," divide(",[84,162335,919],{"class":94},[84,162337,12764],{"class":477},[84,162339,666],{"class":94},[84,162341,484],{"class":477},[84,162343,162344],{"class":86,"line":164},[84,162345,2729],{"emptyLinePlaceholder":403},[84,162347,162348,162350,162352,162354,162356],{"class":86,"line":175},[84,162349,1871],{"class":473},[84,162351,161798],{"class":477},[84,162353,39254],{"class":473},[84,162355,39260],{"class":94},[84,162357,4068],{"class":477},[84,162359,162360,162362,162364,162367],{"class":86,"line":185},[84,162361,31626],{"class":94},[84,162363,478],{"class":477},[84,162365,162366],{"class":104},"\"除数不能为0\"",[84,162368,484],{"class":477},[84,162370,162371,162373],{"class":86,"line":195},[84,162372,2031],{"class":473},[84,162374,4068],{"class":477},[84,162376,162377,162379],{"class":86,"line":206},[84,162378,31626],{"class":94},[84,162380,76911],{"class":477},[14,162382,162384],{"id":162383},"_512-类型提示","5.12 类型提示",[35,162386,162387],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[75,162389,162391],{"className":30705,"code":162390,"language":30707,"meta":66,"style":66},"def add(a: int, b: int) -> int:\n    return a + b\n",[81,162392,162393,162416],{"__ignoreMap":66},[84,162394,162395,162397,162399,162402,162404,162407,162409,162412,162414],{"class":86,"line":87},[84,162396,32274],{"class":473},[84,162398,5538],{"class":90},[84,162400,162401],{"class":477},"(a: ",[84,162403,481],{"class":94},[84,162405,162406],{"class":477},", b: ",[84,162408,481],{"class":94},[84,162410,162411],{"class":477},") -> ",[84,162413,481],{"class":94},[84,162415,4068],{"class":477},[84,162417,162418,162420,162422,162424],{"class":86,"line":98},[84,162419,4419],{"class":473},[84,162421,11198],{"class":477},[84,162423,954],{"class":473},[84,162425,151350],{"class":477},[35,162427,162428],{},"字符串参数：",[75,162430,162432],{"className":30705,"code":162431,"language":30707,"meta":66,"style":66},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[81,162433,162434,162451],{"__ignoreMap":66},[84,162435,162436,162438,162440,162443,162445,162447,162449],{"class":86,"line":87},[84,162437,32274],{"class":473},[84,162439,161242],{"class":90},[84,162441,162442],{"class":477},"(name: ",[84,162444,1643],{"class":94},[84,162446,162411],{"class":477},[84,162448,96012],{"class":94},[84,162450,4068],{"class":477},[84,162452,162453,162455,162457,162459,162461,162463,162465,162467,162469],{"class":86,"line":98},[84,162454,31626],{"class":94},[84,162456,478],{"class":477},[84,162458,529],{"class":473},[84,162460,157300],{"class":104},[84,162462,1369],{"class":94},[84,162464,80136],{"class":477},[84,162466,1419],{"class":94},[84,162468,725],{"class":104},[84,162470,484],{"class":477},[35,162472,162473],{},"列表参数：",[75,162475,162477],{"className":30705,"code":162476,"language":30707,"meta":66,"style":66},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[81,162478,162479,162498,162506,162518,162527],{"__ignoreMap":66},[84,162480,162481,162483,162486,162489,162491,162494,162496],{"class":86,"line":87},[84,162482,32274],{"class":473},[84,162484,162485],{"class":90}," get_total",[84,162487,162488],{"class":477},"(numbers: list[",[84,162490,481],{"class":94},[84,162492,162493],{"class":477},"]) -> ",[84,162495,481],{"class":94},[84,162497,4068],{"class":477},[84,162499,162500,162502,162504],{"class":86,"line":98},[84,162501,159553],{"class":477},[84,162503,523],{"class":473},[84,162505,47660],{"class":94},[84,162507,162508,162510,162513,162515],{"class":86,"line":70},[84,162509,3530],{"class":473},[84,162511,162512],{"class":477}," number ",[84,162514,26371],{"class":473},[84,162516,162517],{"class":477}," numbers:\n",[84,162519,162520,162522,162524],{"class":86,"line":120},[84,162521,160228],{"class":477},[84,162523,9806],{"class":473},[84,162525,162526],{"class":477}," number\n",[84,162528,162529,162531],{"class":86,"line":131},[84,162530,4419],{"class":473},[84,162532,162533],{"class":477}," total\n",[35,162535,162536],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162538,162540],{"id":162539},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[75,162542,162544],{"className":30705,"code":162543,"language":30707,"meta":66,"style":66},"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",[81,162545,162546,162556,162560,162564,162572,162583,162593,162603,162613,162623,162627,162631,162640,162662,162666,162670,162679,162685,162705,162717,162728,162732,162741,162752,162757,162761,162765,162774,162780,162799,162811,162821,162825,162836,162846,162850,162858,162869,162873,162877,162881,162889,162894,162908,162912,162924,162929,162941,162946,162958,162963,162975,162985,162989,162995],{"__ignoreMap":66},[84,162547,162548,162551,162553],{"class":86,"line":87},[84,162549,162550],{"class":477},"balance ",[84,162552,523],{"class":473},[84,162554,162555],{"class":94}," 1000\n",[84,162557,162558],{"class":86,"line":98},[84,162559,2729],{"emptyLinePlaceholder":403},[84,162561,162562],{"class":86,"line":70},[84,162563,2729],{"emptyLinePlaceholder":403},[84,162565,162566,162568,162570],{"class":86,"line":120},[84,162567,32274],{"class":473},[84,162569,152279],{"class":90},[84,162571,32280],{"class":477},[84,162573,162574,162576,162578,162581],{"class":86,"line":131},[84,162575,31626],{"class":94},[84,162577,478],{"class":477},[84,162579,162580],{"class":104},"\"====== ATM ======\"",[84,162582,484],{"class":477},[84,162584,162585,162587,162589,162591],{"class":86,"line":145},[84,162586,31626],{"class":94},[84,162588,478],{"class":477},[84,162590,160894],{"class":104},[84,162592,484],{"class":477},[84,162594,162595,162597,162599,162601],{"class":86,"line":156},[84,162596,31626],{"class":94},[84,162598,478],{"class":477},[84,162600,160905],{"class":104},[84,162602,484],{"class":477},[84,162604,162605,162607,162609,162611],{"class":86,"line":164},[84,162606,31626],{"class":94},[84,162608,478],{"class":477},[84,162610,160916],{"class":104},[84,162612,484],{"class":477},[84,162614,162615,162617,162619,162621],{"class":86,"line":175},[84,162616,31626],{"class":94},[84,162618,478],{"class":477},[84,162620,160927],{"class":104},[84,162622,484],{"class":477},[84,162624,162625],{"class":86,"line":185},[84,162626,2729],{"emptyLinePlaceholder":403},[84,162628,162629],{"class":86,"line":195},[84,162630,2729],{"emptyLinePlaceholder":403},[84,162632,162633,162635,162638],{"class":86,"line":206},[84,162634,32274],{"class":473},[84,162636,162637],{"class":90}," show_balance",[84,162639,32280],{"class":477},[84,162641,162642,162644,162646,162648,162651,162653,162656,162658,162660],{"class":86,"line":217},[84,162643,31626],{"class":94},[84,162645,478],{"class":477},[84,162647,529],{"class":473},[84,162649,162650],{"class":104},"\"当前余额:",[84,162652,1369],{"class":94},[84,162654,162655],{"class":477},"balance",[84,162657,1419],{"class":94},[84,162659,157258],{"class":104},[84,162661,484],{"class":477},[84,162663,162664],{"class":86,"line":227},[84,162665,2729],{"emptyLinePlaceholder":403},[84,162667,162668],{"class":86,"line":238},[84,162669,2729],{"emptyLinePlaceholder":403},[84,162671,162672,162674,162677],{"class":86,"line":249},[84,162673,32274],{"class":473},[84,162675,162676],{"class":90}," save_money",[84,162678,32280],{"class":477},[84,162680,162681,162683],{"class":86,"line":262},[84,162682,162107],{"class":473},[84,162684,150345],{"class":477},[84,162686,162687,162690,162692,162694,162696,162698,162700,162703],{"class":86,"line":273},[84,162688,162689],{"class":477},"    money ",[84,162691,523],{"class":473},[84,162693,110123],{"class":94},[84,162695,478],{"class":477},[84,162697,54147],{"class":94},[84,162699,478],{"class":477},[84,162701,162702],{"class":104},"\"请输入存款金额:\"",[84,162704,30824],{"class":477},[84,162706,162707,162709,162711,162713,162715],{"class":86,"line":283},[84,162708,3430],{"class":473},[84,162710,150388],{"class":477},[84,162712,1928],{"class":473},[84,162714,4422],{"class":94},[84,162716,4068],{"class":477},[84,162718,162719,162721,162723,162726],{"class":86,"line":294},[84,162720,32778],{"class":94},[84,162722,478],{"class":477},[84,162724,162725],{"class":104},"\"金额必须大于0\"",[84,162727,484],{"class":477},[84,162729,162730],{"class":86,"line":2028},[84,162731,152607],{"class":473},[84,162733,162734,162737,162739],{"class":86,"line":2057},[84,162735,162736],{"class":477},"    balance ",[84,162738,9806],{"class":473},[84,162740,150421],{"class":477},[84,162742,162743,162745,162747,162750],{"class":86,"line":2062},[84,162744,31626],{"class":94},[84,162746,478],{"class":477},[84,162748,162749],{"class":104},"\"存款成功\"",[84,162751,484],{"class":477},[84,162753,162754],{"class":86,"line":2079},[84,162755,162756],{"class":477},"    show_balance()\n",[84,162758,162759],{"class":86,"line":2084},[84,162760,2729],{"emptyLinePlaceholder":403},[84,162762,162763],{"class":86,"line":2089},[84,162764,2729],{"emptyLinePlaceholder":403},[84,162766,162767,162769,162772],{"class":86,"line":2094},[84,162768,32274],{"class":473},[84,162770,162771],{"class":90}," withdraw_money",[84,162773,32280],{"class":477},[84,162775,162776,162778],{"class":86,"line":2108},[84,162777,162107],{"class":473},[84,162779,150345],{"class":477},[84,162781,162782,162784,162786,162788,162790,162792,162794,162797],{"class":86,"line":2113},[84,162783,162689],{"class":477},[84,162785,523],{"class":473},[84,162787,110123],{"class":94},[84,162789,478],{"class":477},[84,162791,54147],{"class":94},[84,162793,478],{"class":477},[84,162795,162796],{"class":104},"\"请输入取款金额:\"",[84,162798,30824],{"class":477},[84,162800,162801,162803,162805,162807,162809],{"class":86,"line":2906},[84,162802,3430],{"class":473},[84,162804,150388],{"class":477},[84,162806,1928],{"class":473},[84,162808,4422],{"class":94},[84,162810,4068],{"class":477},[84,162812,162813,162815,162817,162819],{"class":86,"line":2920},[84,162814,32778],{"class":94},[84,162816,478],{"class":477},[84,162818,162725],{"class":104},[84,162820,484],{"class":477},[84,162822,162823],{"class":86,"line":2928},[84,162824,152607],{"class":473},[84,162826,162827,162829,162831,162833],{"class":86,"line":2933},[84,162828,3430],{"class":473},[84,162830,150388],{"class":477},[84,162832,1433],{"class":473},[84,162834,162835],{"class":477}," balance:\n",[84,162837,162838,162840,162842,162844],{"class":86,"line":2939},[84,162839,32778],{"class":94},[84,162841,478],{"class":477},[84,162843,150483],{"class":104},[84,162845,484],{"class":477},[84,162847,162848],{"class":86,"line":2945},[84,162849,152607],{"class":473},[84,162851,162852,162854,162856],{"class":86,"line":2950},[84,162853,162736],{"class":477},[84,162855,150498],{"class":473},[84,162857,150421],{"class":477},[84,162859,162860,162862,162864,162867],{"class":86,"line":8277},[84,162861,31626],{"class":94},[84,162863,478],{"class":477},[84,162865,162866],{"class":104},"\"取款成功\"",[84,162868,484],{"class":477},[84,162870,162871],{"class":86,"line":8301},[84,162872,162756],{"class":477},[84,162874,162875],{"class":86,"line":8306},[84,162876,2729],{"emptyLinePlaceholder":403},[84,162878,162879],{"class":86,"line":8312},[84,162880,2729],{"emptyLinePlaceholder":403},[84,162882,162883,162885,162887],{"class":86,"line":8339},[84,162884,108989],{"class":473},[84,162886,95618],{"class":94},[84,162888,4068],{"class":477},[84,162890,162891],{"class":86,"line":8344},[84,162892,162893],{"class":477},"    show_menu()\n",[84,162895,162896,162898,162900,162902,162904,162906],{"class":86,"line":8350},[84,162897,160938],{"class":477},[84,162899,523],{"class":473},[84,162901,60931],{"class":94},[84,162903,478],{"class":477},[84,162905,153319],{"class":104},[84,162907,484],{"class":477},[84,162909,162910],{"class":86,"line":8362},[84,162911,2729],{"emptyLinePlaceholder":403},[84,162913,162914,162916,162918,162920,162922],{"class":86,"line":8374},[84,162915,3430],{"class":473},[84,162917,153332],{"class":477},[84,162919,3278],{"class":473},[84,162921,153337],{"class":104},[84,162923,4068],{"class":477},[84,162925,162926],{"class":86,"line":8386},[84,162927,162928],{"class":477},"        show_balance()\n",[84,162930,162931,162933,162935,162937,162939],{"class":86,"line":10045},[84,162932,39620],{"class":473},[84,162934,153332],{"class":477},[84,162936,3278],{"class":473},[84,162938,153356],{"class":104},[84,162940,4068],{"class":477},[84,162942,162943],{"class":86,"line":10070},[84,162944,162945],{"class":477},"        save_money()\n",[84,162947,162948,162950,162952,162954,162956],{"class":86,"line":10093},[84,162949,39620],{"class":473},[84,162951,153332],{"class":477},[84,162953,3278],{"class":473},[84,162955,153374],{"class":104},[84,162957,4068],{"class":477},[84,162959,162960],{"class":86,"line":10117},[84,162961,162962],{"class":477},"        withdraw_money()\n",[84,162964,162965,162967,162969,162971,162973],{"class":86,"line":10122},[84,162966,39620],{"class":473},[84,162968,153332],{"class":477},[84,162970,3278],{"class":473},[84,162972,153428],{"class":104},[84,162974,4068],{"class":477},[84,162976,162977,162979,162981,162983],{"class":86,"line":10127},[84,162978,32778],{"class":94},[84,162980,478],{"class":477},[84,162982,153439],{"class":104},[84,162984,484],{"class":477},[84,162986,162987],{"class":86,"line":10132},[84,162988,31954],{"class":473},[84,162990,162991,162993],{"class":86,"line":10141},[84,162992,158268],{"class":473},[84,162994,4068],{"class":477},[84,162996,162997,162999,163001,163003],{"class":86,"line":10146},[84,162998,32778],{"class":94},[84,163000,478],{"class":477},[84,163002,153460],{"class":104},[84,163004,484],{"class":477},[35,163006,163007],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163009,163011],{"id":163010},"_514-易错点","5.14 易错点",[28,163013,163014,163017,163020,163025,163030,163033],{},[31,163015,163016],{},"函数定义后必须调用才会执行。",[31,163018,163019],{},"函数名后面有括号才是调用。",[31,163021,163022,163024],{},[81,163023,17375],{}," 后面的代码不会执行。",[31,163026,163027,163028,28712],{},"没有返回值的函数默认返回 ",[81,163029,96012],{},[31,163031,163032],{},"局部变量不能在函数外部访问。",[31,163034,163035,163036,163038],{},"不要滥用 ",[81,163037,162072],{},"，更好的方式是让函数返回新值。",[35,163040,163041,163042,163044],{},"例如不用 ",[81,163043,162072],{}," 改写存款：",[75,163046,163048],{"className":30705,"code":163047,"language":30707,"meta":66,"style":66},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[81,163049,163050,163059,163070,163074,163078,163086,163099],{"__ignoreMap":66},[84,163051,163052,163054,163056],{"class":86,"line":87},[84,163053,32274],{"class":473},[84,163055,162676],{"class":90},[84,163057,163058],{"class":477},"(balance, money):\n",[84,163060,163061,163063,163066,163068],{"class":86,"line":98},[84,163062,4419],{"class":473},[84,163064,163065],{"class":477}," balance ",[84,163067,954],{"class":473},[84,163069,150421],{"class":477},[84,163071,163072],{"class":86,"line":70},[84,163073,2729],{"emptyLinePlaceholder":403},[84,163075,163076],{"class":86,"line":120},[84,163077,2729],{"emptyLinePlaceholder":403},[84,163079,163080,163082,163084],{"class":86,"line":131},[84,163081,162550],{"class":477},[84,163083,523],{"class":473},[84,163085,162555],{"class":94},[84,163087,163088,163090,163092,163095,163097],{"class":86,"line":145},[84,163089,162550],{"class":477},[84,163091,523],{"class":473},[84,163093,163094],{"class":477}," save_money(balance, ",[84,163096,2052],{"class":94},[84,163098,484],{"class":477},[84,163100,163101,163103],{"class":86,"line":156},[84,163102,30742],{"class":94},[84,163104,163105],{"class":477},"(balance)\n",[14,163107,163109],{"id":163108},"_515-本章练习","5.15 本章练习",[28,163111,163112,163119,163125,163131,163137],{},[31,163113,163114,163115,163118],{},"定义函数 ",[81,163116,163117],{},"print_student(name, age)","，输出学生信息。",[31,163120,163114,163121,163124],{},[81,163122,163123],{},"get_max(a, b, c)","，返回三个数中的最大值。",[31,163126,163114,163127,163130],{},[81,163128,163129],{},"is_even(num)","，判断一个数是否为偶数。",[31,163132,163114,163133,163136],{},[81,163134,163135],{},"calculate_bmi(weight, height)","，返回 BMI。",[31,163138,163139],{},"把第 4 章的菜单程序拆分成多个函数。",[389,163141,163142],{},"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":66,"searchDepth":98,"depth":98,"links":163144},[163145,163146,163147,163148,163149,163150,163151,163152,163153,163157,163158,163159,163160,163161,163162],{"id":161165,"depth":98,"text":161166},{"id":161206,"depth":98,"text":161207},{"id":161296,"depth":98,"text":161297},{"id":161377,"depth":98,"text":161378},{"id":161510,"depth":98,"text":161511},{"id":161632,"depth":98,"text":161633},{"id":161754,"depth":98,"text":161755},{"id":161831,"depth":98,"text":161832},{"id":161953,"depth":98,"text":161954,"children":163154},[163155,163156],{"id":161957,"depth":70,"text":161958},{"id":162015,"depth":70,"text":162016},{"id":162144,"depth":98,"text":162145},{"id":162270,"depth":98,"text":162271},{"id":162383,"depth":98,"text":162384},{"id":162539,"depth":98,"text":162540},{"id":163010,"depth":98,"text":163011},{"id":163108,"depth":98,"text":163109},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161157,"description":400},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163169,"title":163170,"body":163171,"description":400,"extension":401,"meta":166215,"navigation":403,"path":166216,"seo":166217,"stem":166218,"__hash__":166219},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163172,"toc":166196},[163173,163176,163180,163183,163186,163290,163293,163297,163300,163380,163383,163387,163390,163450,163453,163489,163492,163507,163511,163584,163587,163642,163645,163715,163718,163802,163812,163870,163874,163919,163922,163948,163951,164057,164061,164064,164106,164109,164173,164176,164180,164183,164244,164247,164277,164280,164318,164322,164325,164334,164337,164461,164464,164505,164509,164512,164523,164563,164566,164581,164586,164589,164656,164659,164749,164753,164756,164804,164807,164834,164836,164866,164869,164889,164892,164923,164926,164959,164963,164966,164990,164993,165017,165020,165044,165048,165051,165181,165184,165264,165267,165342,165346,165349,165399,165402,165444,165447,165471,165473,165497,165500,165555,165558,165624,165628,165631,165634,165672,165675,165728,165731,165777,165780,165813,165816,165820,166139,166143,166172,166176,166193],[10,163174,163170],{"id":163175},"_6-数据容器",[14,163177,163179],{"id":163178},"_61-什么是数据容器","6.1 什么是数据容器",[35,163181,163182],{},"数据容器用于一次保存多个数据。",[35,163184,163185],{},"常见容器：",[612,163187,163188,163205],{},[615,163189,163190],{},[618,163191,163192,163194,163197,163200,163203],{},[621,163193,26099],{},[621,163195,163196],{},"是否有序",[621,163198,163199],{},"是否可变",[621,163201,163202],{},"是否允许重复",[621,163204,27819],{},[659,163206,163207,163225,163241,163256,163273],{},[618,163208,163209,163212,163215,163218,163221],{},[664,163210,163211],{},"list列表",[664,163213,163214],{},"有序",[664,163216,163217],{},"可变",[664,163219,163220],{},"允许",[664,163222,163223],{},[81,163224,155503],{},[618,163226,163227,163230,163232,163235,163237],{},[664,163228,163229],{},"tuple元组",[664,163231,163214],{},[664,163233,163234],{},"不可变",[664,163236,163220],{},[664,163238,163239],{},[81,163240,155516],{},[618,163242,163243,163246,163248,163250,163252],{},[664,163244,163245],{},"str字符串",[664,163247,163214],{},[664,163249,163234],{},[664,163251,163220],{},[664,163253,163254],{},[81,163255,156126],{},[618,163257,163258,163261,163264,163266,163269],{},[664,163259,163260],{},"set集合",[664,163262,163263],{},"无序",[664,163265,163217],{},[664,163267,163268],{},"不允许",[664,163270,163271],{},[81,163272,155541],{},[618,163274,163275,163278,163280,163282,163285],{},[664,163276,163277],{},"dict字典",[664,163279,163214],{},[664,163281,163217],{},[664,163283,163284],{},"key不允许重复",[664,163286,163287],{},[81,163288,163289],{},"{\"name\": \"小明\"}",[35,163291,163292],{},"Python 3.7 之后，字典保持插入顺序。",[14,163294,163296],{"id":163295},"_62-列表list","6.2 列表list",[35,163298,163299],{},"列表用于保存一组有顺序的数据。",[75,163301,163303],{"className":30705,"code":163302,"language":30707,"meta":66,"style":66},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[81,163304,163305,163325,163350,163371],{"__ignoreMap":66},[84,163306,163307,163309,163311,163313,163315,163317,163319,163321,163323],{"class":86,"line":87},[84,163308,160626],{"class":477},[84,163310,523],{"class":473},[84,163312,52553],{"class":477},[84,163314,150134],{"class":104},[84,163316,12764],{"class":477},[84,163318,151182],{"class":104},[84,163320,12764],{"class":477},[84,163322,159977],{"class":104},[84,163324,33573],{"class":477},[84,163326,163327,163330,163332,163334,163336,163338,163340,163342,163344,163346,163348],{"class":86,"line":98},[84,163328,163329],{"class":477},"numbers ",[84,163331,523],{"class":473},[84,163333,52553],{"class":477},[84,163335,692],{"class":94},[84,163337,12764],{"class":477},[84,163339,553],{"class":94},[84,163341,12764],{"class":477},[84,163343,547],{"class":94},[84,163345,12764],{"class":477},[84,163347,140],{"class":94},[84,163349,33573],{"class":477},[84,163351,163352,163355,163357,163359,163361,163363,163365,163367,163369],{"class":86,"line":70},[84,163353,163354],{"class":477},"mixed ",[84,163356,523],{"class":473},[84,163358,52553],{"class":477},[84,163360,150134],{"class":104},[84,163362,12764],{"class":477},[84,163364,1123],{"class":94},[84,163366,12764],{"class":477},[84,163368,31803],{"class":94},[84,163370,33573],{"class":477},[84,163372,163373,163376,163378],{"class":86,"line":120},[84,163374,163375],{"class":477},"empty ",[84,163377,523],{"class":473},[84,163379,52165],{"class":477},[35,163381,163382],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163384,163386],{"id":163385},"_63-列表索引","6.3 列表索引",[35,163388,163389],{},"正向索引从 0 开始：",[75,163391,163393],{"className":30705,"code":163392,"language":30707,"meta":66,"style":66},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[81,163394,163395,163415,163419,163430,163440],{"__ignoreMap":66},[84,163396,163397,163399,163401,163403,163405,163407,163409,163411,163413],{"class":86,"line":87},[84,163398,160626],{"class":477},[84,163400,523],{"class":473},[84,163402,52553],{"class":477},[84,163404,150134],{"class":104},[84,163406,12764],{"class":477},[84,163408,151182],{"class":104},[84,163410,12764],{"class":477},[84,163412,159977],{"class":104},[84,163414,33573],{"class":477},[84,163416,163417],{"class":86,"line":98},[84,163418,2729],{"emptyLinePlaceholder":403},[84,163420,163421,163423,163426,163428],{"class":86,"line":70},[84,163422,30742],{"class":94},[84,163424,163425],{"class":477},"(names[",[84,163427,666],{"class":94},[84,163429,4986],{"class":477},[84,163431,163432,163434,163436,163438],{"class":86,"line":120},[84,163433,30742],{"class":94},[84,163435,163425],{"class":477},[84,163437,692],{"class":94},[84,163439,4986],{"class":477},[84,163441,163442,163444,163446,163448],{"class":86,"line":131},[84,163443,30742],{"class":94},[84,163445,163425],{"class":477},[84,163447,553],{"class":94},[84,163449,4986],{"class":477},[35,163451,163452],{},"反向索引从 -1 开始：",[75,163454,163456],{"className":30705,"code":163455,"language":30707,"meta":66,"style":66},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[81,163457,163458,163474],{"__ignoreMap":66},[84,163459,163460,163462,163464,163466,163468,163471],{"class":86,"line":87},[84,163461,30742],{"class":94},[84,163463,163425],{"class":477},[84,163465,1005],{"class":473},[84,163467,692],{"class":94},[84,163469,163470],{"class":477},"])  ",[84,163472,163473],{"class":328},"# 小刚\n",[84,163475,163476,163478,163480,163482,163484,163486],{"class":86,"line":98},[84,163477,30742],{"class":94},[84,163479,163425],{"class":477},[84,163481,1005],{"class":473},[84,163483,553],{"class":94},[84,163485,163470],{"class":477},[84,163487,163488],{"class":328},"# 小红\n",[35,163490,163491],{},"索引越界会报错：",[75,163493,163495],{"className":30705,"code":163494,"language":30707,"meta":66,"style":66},"print(names[3])\n",[81,163496,163497],{"__ignoreMap":66},[84,163498,163499,163501,163503,163505],{"class":86,"line":87},[84,163500,30742],{"class":94},[84,163502,163425],{"class":477},[84,163504,547],{"class":94},[84,163506,4986],{"class":477},[14,163508,163510],{"id":163509},"_64-列表常用方法","6.4 列表常用方法",[75,163512,163514],{"className":30705,"code":163513,"language":30707,"meta":66,"style":66},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[81,163515,163516,163532,163536,163545,163559,163573,163577],{"__ignoreMap":66},[84,163517,163518,163520,163522,163524,163526,163528,163530],{"class":86,"line":87},[84,163519,160626],{"class":477},[84,163521,523],{"class":473},[84,163523,52553],{"class":477},[84,163525,150134],{"class":104},[84,163527,12764],{"class":477},[84,163529,151182],{"class":104},[84,163531,33573],{"class":477},[84,163533,163534],{"class":86,"line":98},[84,163535,2729],{"emptyLinePlaceholder":403},[84,163537,163538,163541,163543],{"class":86,"line":70},[84,163539,163540],{"class":477},"names.append(",[84,163542,159977],{"class":104},[84,163544,484],{"class":477},[84,163546,163547,163550,163552,163554,163557],{"class":86,"line":120},[84,163548,163549],{"class":477},"names.insert(",[84,163551,692],{"class":94},[84,163553,12764],{"class":477},[84,163555,163556],{"class":104},"\"小李\"",[84,163558,484],{"class":477},[84,163560,163561,163564,163566,163568,163571],{"class":86,"line":131},[84,163562,163563],{"class":477},"names.extend([",[84,163565,9012],{"class":104},[84,163567,12764],{"class":477},[84,163569,163570],{"class":104},"\"小赵\"",[84,163572,4986],{"class":477},[84,163574,163575],{"class":86,"line":145},[84,163576,2729],{"emptyLinePlaceholder":403},[84,163578,163579,163581],{"class":86,"line":156},[84,163580,30742],{"class":94},[84,163582,163583],{"class":477},"(names)\n",[35,163585,163586],{},"删除元素：",[75,163588,163590],{"className":30705,"code":163589,"language":30707,"meta":66,"style":66},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[81,163591,163592,163601,163611,163625,163637],{"__ignoreMap":66},[84,163593,163594,163597,163599],{"class":86,"line":87},[84,163595,163596],{"class":477},"names.remove(",[84,163598,151182],{"class":104},[84,163600,484],{"class":477},[84,163602,163603,163606,163608],{"class":86,"line":98},[84,163604,163605],{"class":477},"last ",[84,163607,523],{"class":473},[84,163609,163610],{"class":477}," names.pop()\n",[84,163612,163613,163616,163618,163621,163623],{"class":86,"line":70},[84,163614,163615],{"class":477},"first ",[84,163617,523],{"class":473},[84,163619,163620],{"class":477}," names.pop(",[84,163622,666],{"class":94},[84,163624,484],{"class":477},[84,163626,163627,163630,163633,163635],{"class":86,"line":120},[84,163628,163629],{"class":473},"del",[84,163631,163632],{"class":477}," names[",[84,163634,666],{"class":94},[84,163636,33573],{"class":477},[84,163638,163639],{"class":86,"line":131},[84,163640,163641],{"class":477},"names.clear()\n",[35,163643,163644],{},"查询和统计：",[75,163646,163648],{"className":30705,"code":163647,"language":30707,"meta":66,"style":66},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[81,163649,163650,163678,163682,163693,163704],{"__ignoreMap":66},[84,163651,163652,163654,163656,163658,163660,163662,163664,163666,163668,163670,163672,163674,163676],{"class":86,"line":87},[84,163653,163329],{"class":477},[84,163655,523],{"class":473},[84,163657,52553],{"class":477},[84,163659,692],{"class":94},[84,163661,12764],{"class":477},[84,163663,553],{"class":94},[84,163665,12764],{"class":477},[84,163667,547],{"class":94},[84,163669,12764],{"class":477},[84,163671,553],{"class":94},[84,163673,12764],{"class":477},[84,163675,140],{"class":94},[84,163677,33573],{"class":477},[84,163679,163680],{"class":86,"line":98},[84,163681,2729],{"emptyLinePlaceholder":403},[84,163683,163684,163686,163689,163691],{"class":86,"line":70},[84,163685,30742],{"class":94},[84,163687,163688],{"class":477},"(numbers.index(",[84,163690,547],{"class":94},[84,163692,30824],{"class":477},[84,163694,163695,163697,163700,163702],{"class":86,"line":120},[84,163696,30742],{"class":94},[84,163698,163699],{"class":477},"(numbers.count(",[84,163701,553],{"class":94},[84,163703,30824],{"class":477},[84,163705,163706,163708,163710,163712],{"class":86,"line":131},[84,163707,30742],{"class":94},[84,163709,478],{"class":477},[84,163711,7687],{"class":94},[84,163713,163714],{"class":477},"(numbers))\n",[35,163716,163717],{},"排序：",[75,163719,163721],{"className":30705,"code":163720,"language":30707,"meta":66,"style":66},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[81,163722,163723,163747,163751,163756,163763,163767,163781,163787,163791,163796],{"__ignoreMap":66},[84,163724,163725,163727,163729,163731,163733,163735,163737,163739,163741,163743,163745],{"class":86,"line":87},[84,163726,163329],{"class":477},[84,163728,523],{"class":473},[84,163730,52553],{"class":477},[84,163732,547],{"class":94},[84,163734,12764],{"class":477},[84,163736,692],{"class":94},[84,163738,12764],{"class":477},[84,163740,792],{"class":94},[84,163742,12764],{"class":477},[84,163744,553],{"class":94},[84,163746,33573],{"class":477},[84,163748,163749],{"class":86,"line":98},[84,163750,2729],{"emptyLinePlaceholder":403},[84,163752,163753],{"class":86,"line":70},[84,163754,163755],{"class":477},"numbers.sort()\n",[84,163757,163758,163760],{"class":86,"line":120},[84,163759,30742],{"class":94},[84,163761,163762],{"class":477},"(numbers)\n",[84,163764,163765],{"class":86,"line":131},[84,163766,2729],{"emptyLinePlaceholder":403},[84,163768,163769,163772,163775,163777,163779],{"class":86,"line":145},[84,163770,163771],{"class":477},"numbers.sort(",[84,163773,163774],{"class":5545},"reverse",[84,163776,523],{"class":473},[84,163778,31803],{"class":94},[84,163780,484],{"class":477},[84,163782,163783,163785],{"class":86,"line":156},[84,163784,30742],{"class":94},[84,163786,163762],{"class":477},[84,163788,163789],{"class":86,"line":164},[84,163790,2729],{"emptyLinePlaceholder":403},[84,163792,163793],{"class":86,"line":175},[84,163794,163795],{"class":477},"numbers.reverse()\n",[84,163797,163798,163800],{"class":86,"line":185},[84,163799,30742],{"class":94},[84,163801,163762],{"class":477},[35,163803,163804,163807,163808,163811],{},[81,163805,163806],{},"sort()"," 会修改原列表，",[81,163809,163810],{},"sorted()"," 返回新列表。",[75,163813,163815],{"className":30705,"code":163814,"language":30707,"meta":66,"style":66},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[81,163816,163817,163841,163853,163857,163863],{"__ignoreMap":66},[84,163818,163819,163821,163823,163825,163827,163829,163831,163833,163835,163837,163839],{"class":86,"line":87},[84,163820,163329],{"class":477},[84,163822,523],{"class":473},[84,163824,52553],{"class":477},[84,163826,547],{"class":94},[84,163828,12764],{"class":477},[84,163830,692],{"class":94},[84,163832,12764],{"class":477},[84,163834,792],{"class":94},[84,163836,12764],{"class":477},[84,163838,553],{"class":94},[84,163840,33573],{"class":477},[84,163842,163843,163846,163848,163851],{"class":86,"line":98},[84,163844,163845],{"class":477},"new_numbers ",[84,163847,523],{"class":473},[84,163849,163850],{"class":94}," sorted",[84,163852,163762],{"class":477},[84,163854,163855],{"class":86,"line":70},[84,163856,2729],{"emptyLinePlaceholder":403},[84,163858,163859,163861],{"class":86,"line":120},[84,163860,30742],{"class":94},[84,163862,163762],{"class":477},[84,163864,163865,163867],{"class":86,"line":131},[84,163866,30742],{"class":94},[84,163868,163869],{"class":477},"(new_numbers)\n",[14,163871,163873],{"id":163872},"_65-列表遍历","6.5 列表遍历",[75,163875,163877],{"className":30705,"code":163876,"language":30707,"meta":66,"style":66},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[81,163878,163879,163899,163903,163913],{"__ignoreMap":66},[84,163880,163881,163883,163885,163887,163889,163891,163893,163895,163897],{"class":86,"line":87},[84,163882,160626],{"class":477},[84,163884,523],{"class":473},[84,163886,52553],{"class":477},[84,163888,150134],{"class":104},[84,163890,12764],{"class":477},[84,163892,151182],{"class":104},[84,163894,12764],{"class":477},[84,163896,159977],{"class":104},[84,163898,33573],{"class":477},[84,163900,163901],{"class":86,"line":98},[84,163902,2729],{"emptyLinePlaceholder":403},[84,163904,163905,163907,163909,163911],{"class":86,"line":70},[84,163906,3354],{"class":473},[84,163908,160662],{"class":477},[84,163910,26371],{"class":473},[84,163912,160667],{"class":477},[84,163914,163915,163917],{"class":86,"line":120},[84,163916,31626],{"class":94},[84,163918,150906],{"class":477},[35,163920,163921],{},"需要索引时：",[75,163923,163925],{"className":30705,"code":163924,"language":30707,"meta":66,"style":66},"for index, name in enumerate(names):\n    print(index, name)\n",[81,163926,163927,163941],{"__ignoreMap":66},[84,163928,163929,163931,163934,163936,163938],{"class":86,"line":87},[84,163930,3354],{"class":473},[84,163932,163933],{"class":477}," index, name ",[84,163935,26371],{"class":473},[84,163937,31933],{"class":94},[84,163939,163940],{"class":477},"(names):\n",[84,163942,163943,163945],{"class":86,"line":98},[84,163944,31626],{"class":94},[84,163946,163947],{"class":477},"(index, name)\n",[35,163949,163950],{},"统计总分：",[75,163952,163954],{"className":30705,"code":163953,"language":30707,"meta":66,"style":66},"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",[81,163955,163956,163981,163989,163993,164004,164012,164016,164033],{"__ignoreMap":66},[84,163957,163958,163961,163963,163965,163967,163969,163971,163973,163975,163977,163979],{"class":86,"line":87},[84,163959,163960],{"class":477},"scores ",[84,163962,523],{"class":473},[84,163964,52553],{"class":477},[84,163966,1335],{"class":94},[84,163968,12764],{"class":477},[84,163970,1209],{"class":94},[84,163972,12764],{"class":477},[84,163974,728],{"class":94},[84,163976,12764],{"class":477},[84,163978,1034],{"class":94},[84,163980,33573],{"class":477},[84,163982,163983,163985,163987],{"class":86,"line":98},[84,163984,157506],{"class":477},[84,163986,523],{"class":473},[84,163988,47660],{"class":94},[84,163990,163991],{"class":86,"line":70},[84,163992,2729],{"emptyLinePlaceholder":403},[84,163994,163995,163997,163999,164001],{"class":86,"line":120},[84,163996,3354],{"class":473},[84,163998,158029],{"class":477},[84,164000,26371],{"class":473},[84,164002,164003],{"class":477}," scores:\n",[84,164005,164006,164008,164010],{"class":86,"line":131},[84,164007,159553],{"class":477},[84,164009,9806],{"class":473},[84,164011,1919],{"class":477},[84,164013,164014],{"class":86,"line":145},[84,164015,2729],{"emptyLinePlaceholder":403},[84,164017,164018,164021,164023,164026,164028,164030],{"class":86,"line":156},[84,164019,164020],{"class":477},"avg ",[84,164022,523],{"class":473},[84,164024,164025],{"class":477}," total ",[84,164027,1057],{"class":473},[84,164029,7660],{"class":94},[84,164031,164032],{"class":477},"(scores)\n",[84,164034,164035,164037,164039,164041,164044,164046,164049,164051,164053,164055],{"class":86,"line":164},[84,164036,30742],{"class":94},[84,164038,478],{"class":477},[84,164040,529],{"class":473},[84,164042,164043],{"class":104},"\"平均分:",[84,164045,1369],{"class":94},[84,164047,164048],{"class":477},"avg",[84,164050,157405],{"class":473},[84,164052,1419],{"class":94},[84,164054,725],{"class":104},[84,164056,484],{"class":477},[14,164058,164060],{"id":164059},"_66-元组tuple","6.6 元组tuple",[35,164062,164063],{},"元组和列表类似，但不可修改。",[75,164065,164067],{"className":30705,"code":164066,"language":30707,"meta":66,"style":66},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[81,164068,164069,164086],{"__ignoreMap":66},[84,164070,164071,164074,164076,164078,164080,164082,164084],{"class":86,"line":87},[84,164072,164073],{"class":477},"point ",[84,164075,523],{"class":473},[84,164077,1991],{"class":477},[84,164079,919],{"class":94},[84,164081,12764],{"class":477},[84,164083,1173],{"class":94},[84,164085,484],{"class":477},[84,164087,164088,164090,164092,164094,164096,164098,164100,164102,164104],{"class":86,"line":98},[84,164089,116640],{"class":477},[84,164091,523],{"class":473},[84,164093,1991],{"class":477},[84,164095,150134],{"class":104},[84,164097,12764],{"class":477},[84,164099,1123],{"class":94},[84,164101,12764],{"class":477},[84,164103,69595],{"class":104},[84,164105,484],{"class":477},[35,164107,164108],{},"单元素元组必须加逗号：",[75,164110,164112],{"className":30705,"code":164111,"language":30707,"meta":66,"style":66},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[81,164113,164114,164128,164141,164145,164159],{"__ignoreMap":66},[84,164115,164116,164119,164121,164123,164125],{"class":86,"line":87},[84,164117,164118],{"class":477},"t1 ",[84,164120,523],{"class":473},[84,164122,1991],{"class":477},[84,164124,919],{"class":94},[84,164126,164127],{"class":477},",)\n",[84,164129,164130,164133,164135,164137,164139],{"class":86,"line":98},[84,164131,164132],{"class":477},"t2 ",[84,164134,523],{"class":473},[84,164136,1991],{"class":477},[84,164138,919],{"class":94},[84,164140,484],{"class":477},[84,164142,164143],{"class":86,"line":70},[84,164144,2729],{"emptyLinePlaceholder":403},[84,164146,164147,164149,164151,164153,164156],{"class":86,"line":120},[84,164148,30742],{"class":94},[84,164150,478],{"class":477},[84,164152,103433],{"class":94},[84,164154,164155],{"class":477},"(t1))  ",[84,164157,164158],{"class":328},"# tuple\n",[84,164160,164161,164163,164165,164167,164170],{"class":86,"line":131},[84,164162,30742],{"class":94},[84,164164,478],{"class":477},[84,164166,103433],{"class":94},[84,164168,164169],{"class":477},"(t2))  ",[84,164171,164172],{"class":328},"# int\n",[35,164174,164175],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164177,164179],{"id":164178},"_67-字符串str","6.7 字符串str",[35,164181,164182],{},"字符串也是序列，可以索引、切片和遍历。",[75,164184,164186],{"className":30705,"code":164185,"language":30707,"meta":66,"style":66},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[81,164187,164188,164196,164200,164211,164223,164227,164238],{"__ignoreMap":66},[84,164189,164190,164192,164194],{"class":86,"line":87},[84,164191,156690],{"class":477},[84,164193,523],{"class":473},[84,164195,159927],{"class":104},[84,164197,164198],{"class":86,"line":98},[84,164199,2729],{"emptyLinePlaceholder":403},[84,164201,164202,164204,164207,164209],{"class":86,"line":70},[84,164203,30742],{"class":94},[84,164205,164206],{"class":477},"(text[",[84,164208,666],{"class":94},[84,164210,4986],{"class":477},[84,164212,164213,164215,164217,164219,164221],{"class":86,"line":120},[84,164214,30742],{"class":94},[84,164216,164206],{"class":477},[84,164218,1005],{"class":473},[84,164220,692],{"class":94},[84,164222,4986],{"class":477},[84,164224,164225],{"class":86,"line":131},[84,164226,2729],{"emptyLinePlaceholder":403},[84,164228,164229,164231,164233,164235],{"class":86,"line":145},[84,164230,3354],{"class":473},[84,164232,159938],{"class":477},[84,164234,26371],{"class":473},[84,164236,164237],{"class":477}," text:\n",[84,164239,164240,164242],{"class":86,"line":156},[84,164241,31626],{"class":94},[84,164243,159949],{"class":477},[35,164245,164246],{},"字符串不可变：",[75,164248,164250],{"className":30705,"code":164249,"language":30707,"meta":66,"style":66},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[81,164251,164252,164260],{"__ignoreMap":66},[84,164253,164254,164256,164258],{"class":86,"line":87},[84,164255,156690],{"class":477},[84,164257,523],{"class":473},[84,164259,159927],{"class":104},[84,164261,164262,164265,164267,164269,164271,164274],{"class":86,"line":98},[84,164263,164264],{"class":477},"text[",[84,164266,666],{"class":94},[84,164268,4772],{"class":477},[84,164270,523],{"class":473},[84,164272,164273],{"class":104}," \"P\"",[84,164275,164276],{"class":328},"  # 报错\n",[35,164278,164279],{},"如果要得到新字符串：",[75,164281,164283],{"className":30705,"code":164282,"language":30707,"meta":66,"style":66},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[81,164284,164285,164293,164311],{"__ignoreMap":66},[84,164286,164287,164289,164291],{"class":86,"line":87},[84,164288,156690],{"class":477},[84,164290,523],{"class":473},[84,164292,159927],{"class":104},[84,164294,164295,164297,164299,164301,164303,164306,164308],{"class":86,"line":98},[84,164296,156690],{"class":477},[84,164298,523],{"class":473},[84,164300,164273],{"class":104},[84,164302,45893],{"class":473},[84,164304,164305],{"class":477}," text[",[84,164307,692],{"class":94},[84,164309,164310],{"class":477},":]\n",[84,164312,164313,164315],{"class":86,"line":70},[84,164314,30742],{"class":94},[84,164316,164317],{"class":477},"(text)\n",[14,164319,164321],{"id":164320},"_68-切片","6.8 切片",[35,164323,164324],{},"切片用于从序列中取一部分。",[75,164326,164328],{"className":30705,"code":164327,"language":30707,"meta":66,"style":66},"序列[开始:结束:步长]\n",[81,164329,164330],{"__ignoreMap":66},[84,164331,164332],{"class":86,"line":87},[84,164333,164327],{"class":477},[35,164335,164336],{},"结束位置不包含。",[75,164338,164340],{"className":30705,"code":164339,"language":30707,"meta":66,"style":66},"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",[81,164341,164342,164379,164383,164402,164417,164431,164445],{"__ignoreMap":66},[84,164343,164344,164347,164349,164351,164353,164355,164357,164359,164361,164363,164365,164367,164369,164371,164373,164375,164377],{"class":86,"line":87},[84,164345,164346],{"class":477},"nums ",[84,164348,523],{"class":473},[84,164350,52553],{"class":477},[84,164352,666],{"class":94},[84,164354,12764],{"class":477},[84,164356,692],{"class":94},[84,164358,12764],{"class":477},[84,164360,553],{"class":94},[84,164362,12764],{"class":477},[84,164364,547],{"class":94},[84,164366,12764],{"class":477},[84,164368,140],{"class":94},[84,164370,12764],{"class":477},[84,164372,792],{"class":94},[84,164374,12764],{"class":477},[84,164376,817],{"class":94},[84,164378,33573],{"class":477},[84,164380,164381],{"class":86,"line":98},[84,164382,2729],{"emptyLinePlaceholder":403},[84,164384,164385,164387,164390,164392,164394,164396,164399],{"class":86,"line":70},[84,164386,30742],{"class":94},[84,164388,164389],{"class":477},"(nums[",[84,164391,692],{"class":94},[84,164393,1332],{"class":477},[84,164395,140],{"class":94},[84,164397,164398],{"class":477},"])    ",[84,164400,164401],{"class":328},"# [1, 2, 3]\n",[84,164403,164404,164406,164409,164411,164414],{"class":86,"line":120},[84,164405,30742],{"class":94},[84,164407,164408],{"class":477},"(nums[:",[84,164410,547],{"class":94},[84,164412,164413],{"class":477},"])     ",[84,164415,164416],{"class":328},"# [0, 1, 2]\n",[84,164418,164419,164421,164423,164425,164428],{"class":86,"line":131},[84,164420,30742],{"class":94},[84,164422,164389],{"class":477},[84,164424,547],{"class":94},[84,164426,164427],{"class":477},":])     ",[84,164429,164430],{"class":328},"# [3, 4, 5, 6]\n",[84,164432,164433,164435,164438,164440,164442],{"class":86,"line":145},[84,164434,30742],{"class":94},[84,164436,164437],{"class":477},"(nums[::",[84,164439,553],{"class":94},[84,164441,164398],{"class":477},[84,164443,164444],{"class":328},"# [0, 2, 4, 6]\n",[84,164446,164447,164449,164451,164453,164455,164458],{"class":86,"line":156},[84,164448,30742],{"class":94},[84,164450,164437],{"class":477},[84,164452,1005],{"class":473},[84,164454,692],{"class":94},[84,164456,164457],{"class":477},"])   ",[84,164459,164460],{"class":328},"# 反转\n",[35,164462,164463],{},"字符串切片：",[75,164465,164467],{"className":30705,"code":164466,"language":30707,"meta":66,"style":66},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[81,164468,164469,164478,164492],{"__ignoreMap":66},[84,164470,164471,164473,164475],{"class":86,"line":87},[84,164472,156690],{"class":477},[84,164474,523],{"class":473},[84,164476,164477],{"class":104}," \"abcdef\"\n",[84,164479,164480,164482,164484,164486,164488,164490],{"class":86,"line":98},[84,164481,30742],{"class":94},[84,164483,164206],{"class":477},[84,164485,692],{"class":94},[84,164487,1332],{"class":477},[84,164489,140],{"class":94},[84,164491,4986],{"class":477},[84,164493,164494,164496,164499,164501,164503],{"class":86,"line":70},[84,164495,30742],{"class":94},[84,164497,164498],{"class":477},"(text[::",[84,164500,1005],{"class":473},[84,164502,692],{"class":94},[84,164504,4986],{"class":477},[14,164506,164508],{"id":164507},"_69-集合set","6.9 集合set",[35,164510,164511],{},"集合特点：",[28,164513,164514,164517,164520],{},[31,164515,164516],{},"无序。",[31,164518,164519],{},"元素不重复。",[31,164521,164522],{},"可以做交集、并集、差集。",[75,164524,164526],{"className":30705,"code":164525,"language":30707,"meta":66,"style":66},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[81,164527,164528,164556],{"__ignoreMap":66},[84,164529,164530,164532,164534,164536,164538,164540,164542,164544,164546,164548,164550,164552,164554],{"class":86,"line":87},[84,164531,164346],{"class":477},[84,164533,523],{"class":473},[84,164535,4777],{"class":477},[84,164537,692],{"class":94},[84,164539,12764],{"class":477},[84,164541,553],{"class":94},[84,164543,12764],{"class":477},[84,164545,547],{"class":94},[84,164547,12764],{"class":477},[84,164549,547],{"class":94},[84,164551,12764],{"class":477},[84,164553,140],{"class":94},[84,164555,1905],{"class":477},[84,164557,164558,164560],{"class":86,"line":98},[84,164559,30742],{"class":94},[84,164561,164562],{"class":477},"(nums)\n",[35,164564,164565],{},"创建空集合：",[75,164567,164569],{"className":30705,"code":164568,"language":30707,"meta":66,"style":66},"s = set()\n",[81,164570,164571],{"__ignoreMap":66},[84,164572,164573,164575,164577,164579],{"class":86,"line":87},[84,164574,10908],{"class":477},[84,164576,523],{"class":473},[84,164578,120046],{"class":94},[84,164580,2305],{"class":477},[35,164582,9354,164583,164585],{},[81,164584,32786],{}," 是空字典，不是空集合。",[35,164587,164588],{},"集合常用操作：",[75,164590,164592],{"className":30705,"code":164591,"language":30707,"meta":66,"style":66},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[81,164593,164594,164614,164618,164627,164636,164645],{"__ignoreMap":66},[84,164595,164596,164598,164600,164602,164604,164606,164608,164610,164612],{"class":86,"line":87},[84,164597,10908],{"class":477},[84,164599,523],{"class":473},[84,164601,4777],{"class":477},[84,164603,692],{"class":94},[84,164605,12764],{"class":477},[84,164607,553],{"class":94},[84,164609,12764],{"class":477},[84,164611,547],{"class":94},[84,164613,1905],{"class":477},[84,164615,164616],{"class":86,"line":98},[84,164617,2729],{"emptyLinePlaceholder":403},[84,164619,164620,164623,164625],{"class":86,"line":70},[84,164621,164622],{"class":477},"s.add(",[84,164624,140],{"class":94},[84,164626,484],{"class":477},[84,164628,164629,164632,164634],{"class":86,"line":120},[84,164630,164631],{"class":477},"s.remove(",[84,164633,553],{"class":94},[84,164635,484],{"class":477},[84,164637,164638,164641,164643],{"class":86,"line":131},[84,164639,164640],{"class":477},"s.discard(",[84,164642,919],{"class":94},[84,164644,484],{"class":477},[84,164646,164647,164649,164651,164653],{"class":86,"line":145},[84,164648,30742],{"class":94},[84,164650,478],{"class":477},[84,164652,7687],{"class":94},[84,164654,164655],{"class":477},"(s))\n",[35,164657,164658],{},"交并差：",[75,164660,164662],{"className":30705,"code":164661,"language":30707,"meta":66,"style":66},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[81,164663,164664,164684,164704,164708,164723,164736],{"__ignoreMap":66},[84,164665,164666,164668,164670,164672,164674,164676,164678,164680,164682],{"class":86,"line":87},[84,164667,11248],{"class":477},[84,164669,523],{"class":473},[84,164671,4777],{"class":477},[84,164673,692],{"class":94},[84,164675,12764],{"class":477},[84,164677,553],{"class":94},[84,164679,12764],{"class":477},[84,164681,547],{"class":94},[84,164683,1905],{"class":477},[84,164685,164686,164688,164690,164692,164694,164696,164698,164700,164702],{"class":86,"line":98},[84,164687,11274],{"class":477},[84,164689,523],{"class":473},[84,164691,4777],{"class":477},[84,164693,547],{"class":94},[84,164695,12764],{"class":477},[84,164697,140],{"class":94},[84,164699,12764],{"class":477},[84,164701,792],{"class":94},[84,164703,1905],{"class":477},[84,164705,164706],{"class":86,"line":70},[84,164707,2729],{"emptyLinePlaceholder":403},[84,164709,164710,164712,164715,164717,164720],{"class":86,"line":120},[84,164711,30742],{"class":94},[84,164713,164714],{"class":477},"(a ",[84,164716,826],{"class":473},[84,164718,164719],{"class":477}," b)  ",[84,164721,164722],{"class":328},"# 交集\n",[84,164724,164725,164727,164729,164731,164733],{"class":86,"line":131},[84,164726,30742],{"class":94},[84,164728,164714],{"class":477},[84,164730,1394],{"class":473},[84,164732,164719],{"class":477},[84,164734,164735],{"class":328},"# 并集\n",[84,164737,164738,164740,164742,164744,164746],{"class":86,"line":145},[84,164739,30742],{"class":94},[84,164741,164714],{"class":477},[84,164743,1005],{"class":473},[84,164745,164719],{"class":477},[84,164747,164748],{"class":328},"# 差集\n",[14,164750,164752],{"id":164751},"_610-字典dict","6.10 字典dict",[35,164754,164755],{},"字典通过 key-value 保存数据。",[75,164757,164759],{"className":30705,"code":164758,"language":30707,"meta":66,"style":66},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[81,164760,164761,164769,164779,164790,164800],{"__ignoreMap":66},[84,164762,164763,164765,164767],{"class":86,"line":87},[84,164764,149727],{"class":477},[84,164766,523],{"class":473},[84,164768,15901],{"class":477},[84,164770,164771,164773,164775,164777],{"class":86,"line":98},[84,164772,147266],{"class":104},[84,164774,51764],{"class":477},[84,164776,150134],{"class":104},[84,164778,31793],{"class":477},[84,164780,164781,164784,164786,164788],{"class":86,"line":70},[84,164782,164783],{"class":104},"    \"age\"",[84,164785,51764],{"class":477},[84,164787,1123],{"class":94},[84,164789,31793],{"class":477},[84,164791,164792,164795,164797],{"class":86,"line":120},[84,164793,164794],{"class":104},"    \"score\"",[84,164796,51764],{"class":477},[84,164798,164799],{"class":94},"95\n",[84,164801,164802],{"class":86,"line":131},[84,164803,1905],{"class":477},[35,164805,164806],{},"获取值：",[75,164808,164810],{"className":30705,"code":164809,"language":30707,"meta":66,"style":66},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[81,164811,164812,164823],{"__ignoreMap":66},[84,164813,164814,164816,164819,164821],{"class":86,"line":87},[84,164815,30742],{"class":94},[84,164817,164818],{"class":477},"(student[",[84,164820,63005],{"class":104},[84,164822,4986],{"class":477},[84,164824,164825,164827,164830,164832],{"class":86,"line":98},[84,164826,30742],{"class":94},[84,164828,164829],{"class":477},"(student.get(",[84,164831,63005],{"class":104},[84,164833,30824],{"class":477},[35,164835,15717],{},[75,164837,164839],{"className":30705,"code":164838,"language":30707,"meta":66,"style":66},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[81,164840,164841,164854],{"__ignoreMap":66},[84,164842,164843,164845,164848,164851],{"class":86,"line":87},[84,164844,153105],{"class":477},[84,164846,164847],{"class":104},"\"address\"",[84,164849,164850],{"class":477},"]     ",[84,164852,164853],{"class":328},"# key不存在会报错\n",[84,164855,164856,164859,164861,164863],{"class":86,"line":98},[84,164857,164858],{"class":477},"student.get(",[84,164860,164847],{"class":104},[84,164862,14043],{"class":477},[84,164864,164865],{"class":328},"# key不存在返回None\n",[35,164867,164868],{},"设置默认值：",[75,164870,164872],{"className":30705,"code":164871,"language":30707,"meta":66,"style":66},"print(student.get(\"address\", \"未知\"))\n",[81,164873,164874],{"__ignoreMap":66},[84,164875,164876,164878,164880,164882,164884,164887],{"class":86,"line":87},[84,164877,30742],{"class":94},[84,164879,164829],{"class":477},[84,164881,164847],{"class":104},[84,164883,12764],{"class":477},[84,164885,164886],{"class":104},"\"未知\"",[84,164888,30824],{"class":477},[35,164890,164891],{},"新增和修改：",[75,164893,164895],{"className":30705,"code":164894,"language":30707,"meta":66,"style":66},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[81,164896,164897,164910],{"__ignoreMap":66},[84,164898,164899,164901,164903,164905,164907],{"class":86,"line":87},[84,164900,153105],{"class":477},[84,164902,69450],{"class":104},[84,164904,4772],{"class":477},[84,164906,523],{"class":473},[84,164908,164909],{"class":94}," 19\n",[84,164911,164912,164914,164916,164918,164920],{"class":86,"line":98},[84,164913,153105],{"class":477},[84,164915,164847],{"class":104},[84,164917,4772],{"class":477},[84,164919,523],{"class":473},[84,164921,164922],{"class":104}," \"北京\"\n",[35,164924,164925],{},"删除：",[75,164927,164929],{"className":30705,"code":164928,"language":30707,"meta":66,"style":66},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[81,164930,164931,164944,164954],{"__ignoreMap":66},[84,164932,164933,164935,164937,164940,164942],{"class":86,"line":87},[84,164934,155604],{"class":477},[84,164936,523],{"class":473},[84,164938,164939],{"class":477}," student.pop(",[84,164941,151718],{"class":104},[84,164943,484],{"class":477},[84,164945,164946,164948,164950,164952],{"class":86,"line":98},[84,164947,163629],{"class":473},[84,164949,152395],{"class":477},[84,164951,69450],{"class":104},[84,164953,33573],{"class":477},[84,164955,164956],{"class":86,"line":70},[84,164957,164958],{"class":477},"student.clear()\n",[14,164960,164962],{"id":164961},"_611-字典遍历","6.11 字典遍历",[35,164964,164965],{},"遍历 key：",[75,164967,164969],{"className":30705,"code":164968,"language":30707,"meta":66,"style":66},"for key in student:\n    print(key, student[key])\n",[81,164970,164971,164983],{"__ignoreMap":66},[84,164972,164973,164975,164978,164980],{"class":86,"line":87},[84,164974,3354],{"class":473},[84,164976,164977],{"class":477}," key ",[84,164979,26371],{"class":473},[84,164981,164982],{"class":477}," student:\n",[84,164984,164985,164987],{"class":86,"line":98},[84,164986,31626],{"class":94},[84,164988,164989],{"class":477},"(key, student[key])\n",[35,164991,164992],{},"遍历 value：",[75,164994,164996],{"className":30705,"code":164995,"language":30707,"meta":66,"style":66},"for value in student.values():\n    print(value)\n",[81,164997,164998,165010],{"__ignoreMap":66},[84,164999,165000,165002,165005,165007],{"class":86,"line":87},[84,165001,3354],{"class":473},[84,165003,165004],{"class":477}," value ",[84,165006,26371],{"class":473},[84,165008,165009],{"class":477}," student.values():\n",[84,165011,165012,165014],{"class":86,"line":98},[84,165013,31626],{"class":94},[84,165015,165016],{"class":477},"(value)\n",[35,165018,165019],{},"遍历 key 和 value：",[75,165021,165023],{"className":30705,"code":165022,"language":30707,"meta":66,"style":66},"for key, value in student.items():\n    print(key, value)\n",[81,165024,165025,165037],{"__ignoreMap":66},[84,165026,165027,165029,165032,165034],{"class":86,"line":87},[84,165028,3354],{"class":473},[84,165030,165031],{"class":477}," key, value ",[84,165033,26371],{"class":473},[84,165035,165036],{"class":477}," student.items():\n",[84,165038,165039,165041],{"class":86,"line":98},[84,165040,31626],{"class":94},[84,165042,165043],{"class":477},"(key, value)\n",[14,165045,165047],{"id":165046},"_612-嵌套容器","6.12 嵌套容器",[35,165049,165050],{},"列表中保存字典，是项目中最常见的结构之一。",[75,165052,165054],{"className":30705,"code":165053,"language":30707,"meta":66,"style":66},"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",[81,165055,165056,165064,165092,165120,165148,165152,165156,165166],{"__ignoreMap":66},[84,165057,165058,165060,165062],{"class":86,"line":87},[84,165059,159962],{"class":477},[84,165061,523],{"class":473},[84,165063,55773],{"class":477},[84,165065,165066,165068,165070,165072,165074,165076,165078,165080,165082,165084,165086,165088,165090],{"class":86,"line":98},[84,165067,148631],{"class":477},[84,165069,63005],{"class":104},[84,165071,51764],{"class":477},[84,165073,150134],{"class":104},[84,165075,12764],{"class":477},[84,165077,69450],{"class":104},[84,165079,51764],{"class":477},[84,165081,1123],{"class":94},[84,165083,12764],{"class":477},[84,165085,151718],{"class":104},[84,165087,51764],{"class":477},[84,165089,1462],{"class":94},[84,165091,5259],{"class":477},[84,165093,165094,165096,165098,165100,165102,165104,165106,165108,165110,165112,165114,165116,165118],{"class":86,"line":70},[84,165095,148631],{"class":477},[84,165097,63005],{"class":104},[84,165099,51764],{"class":477},[84,165101,151182],{"class":104},[84,165103,12764],{"class":477},[84,165105,69450],{"class":104},[84,165107,51764],{"class":477},[84,165109,1098],{"class":94},[84,165111,12764],{"class":477},[84,165113,151718],{"class":104},[84,165115,51764],{"class":477},[84,165117,1284],{"class":94},[84,165119,5259],{"class":477},[84,165121,165122,165124,165126,165128,165130,165132,165134,165136,165138,165140,165142,165144,165146],{"class":86,"line":120},[84,165123,148631],{"class":477},[84,165125,63005],{"class":104},[84,165127,51764],{"class":477},[84,165129,159977],{"class":104},[84,165131,12764],{"class":477},[84,165133,69450],{"class":104},[84,165135,51764],{"class":477},[84,165137,1148],{"class":94},[84,165139,12764],{"class":477},[84,165141,151718],{"class":104},[84,165143,51764],{"class":477},[84,165145,879],{"class":94},[84,165147,5259],{"class":477},[84,165149,165150],{"class":86,"line":131},[84,165151,33573],{"class":477},[84,165153,165154],{"class":86,"line":145},[84,165155,2729],{"emptyLinePlaceholder":403},[84,165157,165158,165160,165162,165164],{"class":86,"line":156},[84,165159,3354],{"class":473},[84,165161,152383],{"class":477},[84,165163,26371],{"class":473},[84,165165,152388],{"class":477},[84,165167,165168,165170,165172,165174,165177,165179],{"class":86,"line":164},[84,165169,31626],{"class":94},[84,165171,164818],{"class":477},[84,165173,63005],{"class":104},[84,165175,165176],{"class":477},"], student[",[84,165178,151718],{"class":104},[84,165180,4986],{"class":477},[35,165182,165183],{},"统计平均分：",[75,165185,165187],{"className":30705,"code":165186,"language":30707,"meta":66,"style":66},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[81,165188,165189,165197,165201,165211,165223,165227,165242],{"__ignoreMap":66},[84,165190,165191,165193,165195],{"class":86,"line":87},[84,165192,157506],{"class":477},[84,165194,523],{"class":473},[84,165196,47660],{"class":94},[84,165198,165199],{"class":86,"line":98},[84,165200,2729],{"emptyLinePlaceholder":403},[84,165202,165203,165205,165207,165209],{"class":86,"line":70},[84,165204,3354],{"class":473},[84,165206,152383],{"class":477},[84,165208,26371],{"class":473},[84,165210,152388],{"class":477},[84,165212,165213,165215,165217,165219,165221],{"class":86,"line":120},[84,165214,159553],{"class":477},[84,165216,9806],{"class":473},[84,165218,152395],{"class":477},[84,165220,151718],{"class":104},[84,165222,33573],{"class":477},[84,165224,165225],{"class":86,"line":131},[84,165226,2729],{"emptyLinePlaceholder":403},[84,165228,165229,165231,165233,165235,165237,165239],{"class":86,"line":145},[84,165230,164020],{"class":477},[84,165232,523],{"class":473},[84,165234,164025],{"class":477},[84,165236,1057],{"class":473},[84,165238,7660],{"class":94},[84,165240,165241],{"class":477},"(students)\n",[84,165243,165244,165246,165248,165250,165252,165254,165256,165258,165260,165262],{"class":86,"line":156},[84,165245,30742],{"class":94},[84,165247,478],{"class":477},[84,165249,529],{"class":473},[84,165251,164043],{"class":104},[84,165253,1369],{"class":94},[84,165255,164048],{"class":477},[84,165257,157405],{"class":473},[84,165259,1419],{"class":94},[84,165261,725],{"class":104},[84,165263,484],{"class":477},[35,165265,165266],{},"查找学生：",[75,165268,165270],{"className":30705,"code":165269,"language":30707,"meta":66,"style":66},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[81,165271,165272,165287,165291,165301,165315,165321,165325,165331],{"__ignoreMap":66},[84,165273,165274,165276,165278,165280,165282,165285],{"class":86,"line":87},[84,165275,111904],{"class":477},[84,165277,523],{"class":473},[84,165279,60931],{"class":94},[84,165281,478],{"class":477},[84,165283,165284],{"class":104},"\"请输入学生姓名:\"",[84,165286,484],{"class":477},[84,165288,165289],{"class":86,"line":98},[84,165290,2729],{"emptyLinePlaceholder":403},[84,165292,165293,165295,165297,165299],{"class":86,"line":70},[84,165294,3354],{"class":473},[84,165296,152383],{"class":477},[84,165298,26371],{"class":473},[84,165300,152388],{"class":477},[84,165302,165303,165305,165307,165309,165311,165313],{"class":86,"line":120},[84,165304,3430],{"class":473},[84,165306,152395],{"class":477},[84,165308,63005],{"class":104},[84,165310,4772],{"class":477},[84,165312,3278],{"class":473},[84,165314,160678],{"class":477},[84,165316,165317,165319],{"class":86,"line":131},[84,165318,32778],{"class":94},[84,165320,150288],{"class":477},[84,165322,165323],{"class":86,"line":145},[84,165324,31954],{"class":473},[84,165326,165327,165329],{"class":86,"line":156},[84,165328,2031],{"class":473},[84,165330,4068],{"class":477},[84,165332,165333,165335,165337,165340],{"class":86,"line":164},[84,165334,31626],{"class":94},[84,165336,478],{"class":477},[84,165338,165339],{"class":104},"\"没有找到\"",[84,165341,484],{"class":477},[14,165343,165345],{"id":165344},"_613-容器通用操作","6.13 容器通用操作",[35,165347,165348],{},"长度：",[75,165350,165352],{"className":30705,"code":165351,"language":30707,"meta":66,"style":66},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[81,165353,165354,165373,165383],{"__ignoreMap":66},[84,165355,165356,165358,165361,165363,165365,165367,165369,165371],{"class":86,"line":87},[84,165357,7687],{"class":94},[84,165359,165360],{"class":477},"([",[84,165362,692],{"class":94},[84,165364,12764],{"class":477},[84,165366,553],{"class":94},[84,165368,12764],{"class":477},[84,165370,547],{"class":94},[84,165372,4986],{"class":477},[84,165374,165375,165377,165379,165381],{"class":86,"line":98},[84,165376,7687],{"class":94},[84,165378,478],{"class":477},[84,165380,156126],{"class":104},[84,165382,484],{"class":477},[84,165384,165385,165387,165390,165392,165394,165396],{"class":86,"line":70},[84,165386,7687],{"class":94},[84,165388,165389],{"class":477},"({",[84,165391,63005],{"class":104},[84,165393,51764],{"class":477},[84,165395,150134],{"class":104},[84,165397,165398],{"class":477},"})\n",[35,165400,165401],{},"最大最小：",[75,165403,165405],{"className":30705,"code":165404,"language":30707,"meta":66,"style":66},"max([1, 2, 3])\nmin([1, 2, 3])\n",[81,165406,165407,165425],{"__ignoreMap":66},[84,165408,165409,165411,165413,165415,165417,165419,165421,165423],{"class":86,"line":87},[84,165410,6344],{"class":94},[84,165412,165360],{"class":477},[84,165414,692],{"class":94},[84,165416,12764],{"class":477},[84,165418,553],{"class":94},[84,165420,12764],{"class":477},[84,165422,547],{"class":94},[84,165424,4986],{"class":477},[84,165426,165427,165430,165432,165434,165436,165438,165440,165442],{"class":86,"line":98},[84,165428,165429],{"class":94},"min",[84,165431,165360],{"class":477},[84,165433,692],{"class":94},[84,165435,12764],{"class":477},[84,165437,553],{"class":94},[84,165439,12764],{"class":477},[84,165441,547],{"class":94},[84,165443,4986],{"class":477},[35,165445,165446],{},"求和：",[75,165448,165450],{"className":30705,"code":165449,"language":30707,"meta":66,"style":66},"sum([1, 2, 3])\n",[81,165451,165452],{"__ignoreMap":66},[84,165453,165454,165457,165459,165461,165463,165465,165467,165469],{"class":86,"line":87},[84,165455,165456],{"class":94},"sum",[84,165458,165360],{"class":477},[84,165460,692],{"class":94},[84,165462,12764],{"class":477},[84,165464,553],{"class":94},[84,165466,12764],{"class":477},[84,165468,547],{"class":94},[84,165470,4986],{"class":477},[35,165472,163717],{},[75,165474,165476],{"className":30705,"code":165475,"language":30707,"meta":66,"style":66},"sorted([3, 1, 2])\n",[81,165477,165478],{"__ignoreMap":66},[84,165479,165480,165483,165485,165487,165489,165491,165493,165495],{"class":86,"line":87},[84,165481,165482],{"class":94},"sorted",[84,165484,165360],{"class":477},[84,165486,547],{"class":94},[84,165488,12764],{"class":477},[84,165490,692],{"class":94},[84,165492,12764],{"class":477},[84,165494,553],{"class":94},[84,165496,4986],{"class":477},[35,165498,165499],{},"类型转换：",[75,165501,165503],{"className":30705,"code":165502,"language":30707,"meta":66,"style":66},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[81,165504,165505,165515,165533],{"__ignoreMap":66},[84,165506,165507,165509,165511,165513],{"class":86,"line":87},[84,165508,154316],{"class":94},[84,165510,478],{"class":477},[84,165512,156126],{"class":104},[84,165514,484],{"class":477},[84,165516,165517,165519,165521,165523,165525,165527,165529,165531],{"class":86,"line":98},[84,165518,155511],{"class":94},[84,165520,165360],{"class":477},[84,165522,692],{"class":94},[84,165524,12764],{"class":477},[84,165526,553],{"class":94},[84,165528,12764],{"class":477},[84,165530,547],{"class":94},[84,165532,4986],{"class":477},[84,165534,165535,165537,165539,165541,165543,165545,165547,165549,165551,165553],{"class":86,"line":70},[84,165536,155536],{"class":94},[84,165538,165360],{"class":477},[84,165540,692],{"class":94},[84,165542,12764],{"class":477},[84,165544,692],{"class":94},[84,165546,12764],{"class":477},[84,165548,553],{"class":94},[84,165550,12764],{"class":477},[84,165552,547],{"class":94},[84,165554,4986],{"class":477},[35,165556,165557],{},"成员判断：",[75,165559,165561],{"className":30705,"code":165560,"language":30707,"meta":66,"style":66},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[81,165562,165563,165580,165604],{"__ignoreMap":66},[84,165564,165565,165567,165569,165572,165575,165578],{"class":86,"line":87},[84,165566,30742],{"class":94},[84,165568,478],{"class":477},[84,165570,165571],{"class":104},"\"a\"",[84,165573,165574],{"class":473}," in",[84,165576,165577],{"class":104}," \"abc\"",[84,165579,484],{"class":477},[84,165581,165582,165584,165586,165588,165590,165592,165594,165596,165598,165600,165602],{"class":86,"line":98},[84,165583,30742],{"class":94},[84,165585,478],{"class":477},[84,165587,692],{"class":94},[84,165589,165574],{"class":473},[84,165591,52553],{"class":477},[84,165593,692],{"class":94},[84,165595,12764],{"class":477},[84,165597,553],{"class":94},[84,165599,12764],{"class":477},[84,165601,547],{"class":94},[84,165603,4986],{"class":477},[84,165605,165606,165608,165610,165612,165614,165616,165618,165620,165622],{"class":86,"line":70},[84,165607,30742],{"class":94},[84,165609,478],{"class":477},[84,165611,63005],{"class":104},[84,165613,165574],{"class":473},[84,165615,4777],{"class":477},[84,165617,63005],{"class":104},[84,165619,51764],{"class":477},[84,165621,150134],{"class":104},[84,165623,165398],{"class":477},[14,165625,165627],{"id":165626},"_614-推导式","6.14 推导式",[35,165629,165630],{},"推导式用于快速生成容器。",[35,165632,165633],{},"列表推导式：",[75,165635,165637],{"className":30705,"code":165636,"language":30707,"meta":66,"style":66},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[81,165638,165639,165666],{"__ignoreMap":66},[84,165640,165641,165643,165645,165648,165650,165652,165654,165656,165658,165660,165662,165664],{"class":86,"line":87},[84,165642,164346],{"class":477},[84,165644,523],{"class":473},[84,165646,165647],{"class":477}," [i ",[84,165649,3354],{"class":473},[84,165651,9767],{"class":477},[84,165653,26371],{"class":473},[84,165655,32770],{"class":94},[84,165657,478],{"class":477},[84,165659,692],{"class":94},[84,165661,12764],{"class":477},[84,165663,817],{"class":94},[84,165665,97626],{"class":477},[84,165667,165668,165670],{"class":86,"line":98},[84,165669,30742],{"class":94},[84,165671,164562],{"class":477},[35,165673,165674],{},"带条件：",[75,165676,165678],{"className":30705,"code":165677,"language":30707,"meta":66,"style":66},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[81,165679,165680,165721],{"__ignoreMap":66},[84,165681,165682,165685,165687,165689,165691,165693,165695,165697,165699,165701,165703,165705,165707,165709,165711,165713,165715,165717,165719],{"class":86,"line":87},[84,165683,165684],{"class":477},"even_nums ",[84,165686,523],{"class":473},[84,165688,165647],{"class":477},[84,165690,3354],{"class":473},[84,165692,9767],{"class":477},[84,165694,26371],{"class":473},[84,165696,32770],{"class":94},[84,165698,478],{"class":477},[84,165700,692],{"class":94},[84,165702,12764],{"class":477},[84,165704,810],{"class":94},[84,165706,14043],{"class":477},[84,165708,1871],{"class":473},[84,165710,9767],{"class":477},[84,165712,801],{"class":473},[84,165714,15084],{"class":94},[84,165716,101885],{"class":473},[84,165718,4422],{"class":94},[84,165720,33573],{"class":477},[84,165722,165723,165725],{"class":86,"line":98},[84,165724,30742],{"class":94},[84,165726,165727],{"class":477},"(even_nums)\n",[35,165729,165730],{},"字典推导式：",[75,165732,165734],{"className":30705,"code":165733,"language":30707,"meta":66,"style":66},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[81,165735,165736,165770],{"__ignoreMap":66},[84,165737,165738,165741,165743,165746,165748,165750,165753,165755,165757,165759,165761,165763,165765,165767],{"class":86,"line":87},[84,165739,165740],{"class":477},"squares ",[84,165742,523],{"class":473},[84,165744,165745],{"class":477}," {i: i ",[84,165747,10990],{"class":473},[84,165749,15084],{"class":94},[84,165751,165752],{"class":473}," for",[84,165754,9767],{"class":477},[84,165756,26371],{"class":473},[84,165758,32770],{"class":94},[84,165760,478],{"class":477},[84,165762,692],{"class":94},[84,165764,12764],{"class":477},[84,165766,817],{"class":94},[84,165768,165769],{"class":477},")}\n",[84,165771,165772,165774],{"class":86,"line":98},[84,165773,30742],{"class":94},[84,165775,165776],{"class":477},"(squares)\n",[35,165778,165779],{},"集合推导式：",[75,165781,165783],{"className":30705,"code":165782,"language":30707,"meta":66,"style":66},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[81,165784,165785,165806],{"__ignoreMap":66},[84,165786,165787,165790,165792,165795,165797,165799,165801,165804],{"class":86,"line":87},[84,165788,165789],{"class":477},"chars ",[84,165791,523],{"class":473},[84,165793,165794],{"class":477}," {ch ",[84,165796,3354],{"class":473},[84,165798,159938],{"class":477},[84,165800,26371],{"class":473},[84,165802,165803],{"class":104}," \"hello\"",[84,165805,1905],{"class":477},[84,165807,165808,165810],{"class":86,"line":98},[84,165809,30742],{"class":94},[84,165811,165812],{"class":477},"(chars)\n",[35,165814,165815],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165817,165819],{"id":165818},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[75,165821,165823],{"className":30705,"code":165822,"language":30707,"meta":66,"style":66},"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",[81,165824,165825,165833,165853,165873,165893,165913,165917,165921,165929,165943,165952,165956,165966,165978,165982,166002,166011,166015,166031,166036,166040,166054,166058,166080,166116],{"__ignoreMap":66},[84,165826,165827,165829,165831],{"class":86,"line":87},[84,165828,159962],{"class":477},[84,165830,523],{"class":473},[84,165832,55773],{"class":477},[84,165834,165835,165837,165839,165841,165843,165845,165847,165849,165851],{"class":86,"line":98},[84,165836,148631],{"class":477},[84,165838,63005],{"class":104},[84,165840,51764],{"class":477},[84,165842,150134],{"class":104},[84,165844,12764],{"class":477},[84,165846,151718],{"class":104},[84,165848,51764],{"class":477},[84,165850,1462],{"class":94},[84,165852,5259],{"class":477},[84,165854,165855,165857,165859,165861,165863,165865,165867,165869,165871],{"class":86,"line":70},[84,165856,148631],{"class":477},[84,165858,63005],{"class":104},[84,165860,51764],{"class":477},[84,165862,151182],{"class":104},[84,165864,12764],{"class":477},[84,165866,151718],{"class":104},[84,165868,51764],{"class":477},[84,165870,1284],{"class":94},[84,165872,5259],{"class":477},[84,165874,165875,165877,165879,165881,165883,165885,165887,165889,165891],{"class":86,"line":120},[84,165876,148631],{"class":477},[84,165878,63005],{"class":104},[84,165880,51764],{"class":477},[84,165882,159977],{"class":104},[84,165884,12764],{"class":477},[84,165886,151718],{"class":104},[84,165888,51764],{"class":477},[84,165890,879],{"class":94},[84,165892,5259],{"class":477},[84,165894,165895,165897,165899,165901,165903,165905,165907,165909,165911],{"class":86,"line":131},[84,165896,148631],{"class":477},[84,165898,63005],{"class":104},[84,165900,51764],{"class":477},[84,165902,163556],{"class":104},[84,165904,12764],{"class":477},[84,165906,151718],{"class":104},[84,165908,51764],{"class":477},[84,165910,1355],{"class":94},[84,165912,5259],{"class":477},[84,165914,165915],{"class":86,"line":145},[84,165916,33573],{"class":477},[84,165918,165919],{"class":86,"line":156},[84,165920,2729],{"emptyLinePlaceholder":403},[84,165922,165923,165925,165927],{"class":86,"line":164},[84,165924,157506],{"class":477},[84,165926,523],{"class":473},[84,165928,47660],{"class":94},[84,165930,165931,165934,165936,165939,165941],{"class":86,"line":175},[84,165932,165933],{"class":477},"max_student ",[84,165935,523],{"class":473},[84,165937,165938],{"class":477}," students[",[84,165940,666],{"class":94},[84,165942,33573],{"class":477},[84,165944,165945,165948,165950],{"class":86,"line":185},[84,165946,165947],{"class":477},"passed ",[84,165949,523],{"class":473},[84,165951,52165],{"class":477},[84,165953,165954],{"class":86,"line":195},[84,165955,2729],{"emptyLinePlaceholder":403},[84,165957,165958,165960,165962,165964],{"class":86,"line":206},[84,165959,3354],{"class":473},[84,165961,152383],{"class":477},[84,165963,26371],{"class":473},[84,165965,152388],{"class":477},[84,165967,165968,165970,165972,165974,165976],{"class":86,"line":217},[84,165969,159553],{"class":477},[84,165971,9806],{"class":473},[84,165973,152395],{"class":477},[84,165975,151718],{"class":104},[84,165977,33573],{"class":477},[84,165979,165980],{"class":86,"line":227},[84,165981,2729],{"emptyLinePlaceholder":403},[84,165983,165984,165986,165988,165990,165992,165994,165997,165999],{"class":86,"line":238},[84,165985,3430],{"class":473},[84,165987,152395],{"class":477},[84,165989,151718],{"class":104},[84,165991,4772],{"class":477},[84,165993,1433],{"class":473},[84,165995,165996],{"class":477}," max_student[",[84,165998,151718],{"class":104},[84,166000,166001],{"class":477},"]:\n",[84,166003,166004,166007,166009],{"class":86,"line":249},[84,166005,166006],{"class":477},"        max_student ",[84,166008,523],{"class":473},[84,166010,152411],{"class":477},[84,166012,166013],{"class":86,"line":262},[84,166014,2729],{"emptyLinePlaceholder":403},[84,166016,166017,166019,166021,166023,166025,166027,166029],{"class":86,"line":273},[84,166018,3430],{"class":473},[84,166020,152395],{"class":477},[84,166022,151718],{"class":104},[84,166024,4772],{"class":477},[84,166026,2040],{"class":473},[84,166028,158083],{"class":94},[84,166030,4068],{"class":477},[84,166032,166033],{"class":86,"line":283},[84,166034,166035],{"class":477},"        passed.append(student)\n",[84,166037,166038],{"class":86,"line":294},[84,166039,2729],{"emptyLinePlaceholder":403},[84,166041,166042,166044,166046,166048,166050,166052],{"class":86,"line":2028},[84,166043,164020],{"class":477},[84,166045,523],{"class":473},[84,166047,164025],{"class":477},[84,166049,1057],{"class":473},[84,166051,7660],{"class":94},[84,166053,165241],{"class":477},[84,166055,166056],{"class":86,"line":2057},[84,166057,2729],{"emptyLinePlaceholder":403},[84,166059,166060,166062,166064,166066,166068,166070,166072,166074,166076,166078],{"class":86,"line":2062},[84,166061,30742],{"class":94},[84,166063,478],{"class":477},[84,166065,529],{"class":473},[84,166067,164043],{"class":104},[84,166069,1369],{"class":94},[84,166071,164048],{"class":477},[84,166073,157405],{"class":473},[84,166075,1419],{"class":94},[84,166077,725],{"class":104},[84,166079,484],{"class":477},[84,166081,166082,166084,166086,166088,166091,166093,166096,166098,166100,166102,166104,166106,166108,166110,166112,166114],{"class":86,"line":2079},[84,166083,30742],{"class":94},[84,166085,478],{"class":477},[84,166087,529],{"class":473},[84,166089,166090],{"class":104},"\"最高分学生:",[84,166092,1369],{"class":94},[84,166094,166095],{"class":477},"max_student[",[84,166097,153128],{"class":104},[84,166099,1413],{"class":477},[84,166101,1419],{"class":94},[84,166103,4777],{"class":94},[84,166105,166095],{"class":477},[84,166107,153166],{"class":104},[84,166109,1413],{"class":477},[84,166111,1419],{"class":94},[84,166113,725],{"class":104},[84,166115,484],{"class":477},[84,166117,166118,166120,166122,166124,166127,166130,166133,166135,166137],{"class":86,"line":2084},[84,166119,30742],{"class":94},[84,166121,478],{"class":477},[84,166123,529],{"class":473},[84,166125,166126],{"class":104},"\"及格人数:",[84,166128,166129],{"class":94},"{len",[84,166131,166132],{"class":477},"(passed)",[84,166134,1419],{"class":94},[84,166136,725],{"class":104},[84,166138,484],{"class":477},[14,166140,166142],{"id":166141},"_616-易错点","6.16 易错点",[28,166144,166145,166148,166151,166154,166160,166169],{},[31,166146,166147],{},"列表可变，元组和字符串不可变。",[31,166149,166150],{},"切片结束位置不包含。",[31,166152,166153],{},"字典通过 key 取值，不是通过索引。",[31,166155,166156,166157,28712],{},"空集合要用 ",[81,166158,166159],{},"set()",[31,166161,104692,166162,166165,166166,28712],{},[81,166163,166164],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[81,166167,166168],{},"get()",[31,166170,166171],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166173,166175],{"id":166174},"_617-本章练习","6.17 本章练习",[28,166177,166178,166181,166184,166187,166190],{},[31,166179,166180],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[31,166182,166183],{},"输入一句话，统计每个字符出现次数。",[31,166185,166186],{},"使用集合去除列表中的重复元素。",[31,166188,166189],{},"使用字典保存一个学生的信息，并实现修改成绩。",[31,166191,166192],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[389,166194,166195],{},"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":66,"searchDepth":98,"depth":98,"links":166197},[166198,166199,166200,166201,166202,166203,166204,166205,166206,166207,166208,166209,166210,166211,166212,166213,166214],{"id":163178,"depth":98,"text":163179},{"id":163295,"depth":98,"text":163296},{"id":163385,"depth":98,"text":163386},{"id":163509,"depth":98,"text":163510},{"id":163872,"depth":98,"text":163873},{"id":164059,"depth":98,"text":164060},{"id":164178,"depth":98,"text":164179},{"id":164320,"depth":98,"text":164321},{"id":164507,"depth":98,"text":164508},{"id":164751,"depth":98,"text":164752},{"id":164961,"depth":98,"text":164962},{"id":165046,"depth":98,"text":165047},{"id":165344,"depth":98,"text":165345},{"id":165626,"depth":98,"text":165627},{"id":165818,"depth":98,"text":165819},{"id":166141,"depth":98,"text":166142},{"id":166174,"depth":98,"text":166175},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163170,"description":400},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166221,"title":166222,"body":166223,"description":400,"extension":401,"meta":168395,"navigation":403,"path":168396,"seo":168397,"stem":168398,"__hash__":168399},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166224,"toc":168370},[166225,166228,166232,166235,166315,166318,166339,166342,166346,166349,166411,166414,166431,166435,166438,166483,166485,166493,166497,166500,166582,166585,166588,166613,166616,166639,166643,166646,166648,166710,166713,166715,166766,166770,166774,166780,166885,166889,166895,166966,166970,166973,167041,167044,167124,167128,167134,167170,167173,167176,167286,167292,167296,167299,167371,167374,167378,167382,167387,167449,167453,167458,167526,167530,167535,167651,167655,167658,167738,167741,167745,167748,167852,167854,167869,167872,167876,168014,168022,168026,168028,168039,168041,168299,168303,168335,168339,168367],[10,166226,166222],{"id":166227},"_7-函数进阶",[14,166229,166231],{"id":166230},"_71-多返回值","7.1 多返回值",[35,166233,166234],{},"Python 函数可以返回多个值，本质上返回的是元组。",[75,166236,166238],{"className":30705,"code":166237,"language":30707,"meta":66,"style":66},"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",[81,166239,166240,166249,166257,166265,166274,166281,166285,166289,166298,166304],{"__ignoreMap":66},[84,166241,166242,166244,166247],{"class":86,"line":87},[84,166243,32274],{"class":473},[84,166245,166246],{"class":90}," get_info",[84,166248,32280],{"class":477},[84,166250,166251,166253,166255],{"class":86,"line":98},[84,166252,152616],{"class":477},[84,166254,523],{"class":473},[84,166256,149599],{"class":104},[84,166258,166259,166261,166263],{"class":86,"line":70},[84,166260,152632],{"class":477},[84,166262,523],{"class":473},[84,166264,146797],{"class":94},[84,166266,166267,166269,166271],{"class":86,"line":120},[84,166268,152647],{"class":477},[84,166270,523],{"class":473},[84,166272,166273],{"class":94}," 95\n",[84,166275,166276,166278],{"class":86,"line":131},[84,166277,4419],{"class":473},[84,166279,166280],{"class":477}," name, age, score\n",[84,166282,166283],{"class":86,"line":145},[84,166284,2729],{"emptyLinePlaceholder":403},[84,166286,166287],{"class":86,"line":156},[84,166288,2729],{"emptyLinePlaceholder":403},[84,166290,166291,166293,166295],{"class":86,"line":164},[84,166292,161552],{"class":477},[84,166294,523],{"class":473},[84,166296,166297],{"class":477}," get_info()\n",[84,166299,166300,166302],{"class":86,"line":175},[84,166301,30742],{"class":94},[84,166303,76911],{"class":477},[84,166305,166306,166308,166310,166312],{"class":86,"line":185},[84,166307,30742],{"class":94},[84,166309,478],{"class":477},[84,166311,103433],{"class":94},[84,166313,166314],{"class":477},"(result))\n",[35,166316,166317],{},"可以直接解包：",[75,166319,166321],{"className":30705,"code":166320,"language":30707,"meta":66,"style":66},"name, age, score = get_info()\nprint(name, age, score)\n",[81,166322,166323,166332],{"__ignoreMap":66},[84,166324,166325,166328,166330],{"class":86,"line":87},[84,166326,166327],{"class":477},"name, age, score ",[84,166329,523],{"class":473},[84,166331,166297],{"class":477},[84,166333,166334,166336],{"class":86,"line":98},[84,166335,30742],{"class":94},[84,166337,166338],{"class":477},"(name, age, score)\n",[35,166340,166341],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166343,166345],{"id":166344},"_72-位置参数","7.2 位置参数",[35,166347,166348],{},"位置参数按顺序传递。",[75,166350,166352],{"className":30705,"code":166351,"language":30707,"meta":66,"style":66},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[81,166353,166354,166362,166390,166394,166398],{"__ignoreMap":66},[84,166355,166356,166358,166360],{"class":86,"line":87},[84,166357,32274],{"class":473},[84,166359,149618],{"class":90},[84,166361,149621],{"class":477},[84,166363,166364,166366,166368,166370,166372,166374,166376,166378,166380,166382,166384,166386,166388],{"class":86,"line":98},[84,166365,31626],{"class":94},[84,166367,478],{"class":477},[84,166369,529],{"class":473},[84,166371,149632],{"class":104},[84,166373,1369],{"class":94},[84,166375,80136],{"class":477},[84,166377,1419],{"class":94},[84,166379,149641],{"class":104},[84,166381,1369],{"class":94},[84,166383,70547],{"class":477},[84,166385,1419],{"class":94},[84,166387,149650],{"class":104},[84,166389,484],{"class":477},[84,166391,166392],{"class":86,"line":70},[84,166393,2729],{"emptyLinePlaceholder":403},[84,166395,166396],{"class":86,"line":120},[84,166397,2729],{"emptyLinePlaceholder":403},[84,166399,166400,166403,166405,166407,166409],{"class":86,"line":131},[84,166401,166402],{"class":477},"introduce(",[84,166404,150134],{"class":104},[84,166406,12764],{"class":477},[84,166408,1123],{"class":94},[84,166410,484],{"class":477},[35,166412,166413],{},"顺序错了就会得到错误含义：",[75,166415,166417],{"className":30705,"code":166416,"language":30707,"meta":66,"style":66},"introduce(18, \"小明\")\n",[81,166418,166419],{"__ignoreMap":66},[84,166420,166421,166423,166425,166427,166429],{"class":86,"line":87},[84,166422,166402],{"class":477},[84,166424,1123],{"class":94},[84,166426,12764],{"class":477},[84,166428,150134],{"class":104},[84,166430,484],{"class":477},[14,166432,166434],{"id":166433},"_73-关键字参数","7.3 关键字参数",[35,166436,166437],{},"关键字参数按参数名传递。",[75,166439,166441],{"className":30705,"code":166440,"language":30707,"meta":66,"style":66},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[81,166442,166443,166463],{"__ignoreMap":66},[84,166444,166445,166447,166449,166451,166453,166455,166457,166459,166461],{"class":86,"line":87},[84,166446,166402],{"class":477},[84,166448,80136],{"class":5545},[84,166450,523],{"class":473},[84,166452,150134],{"class":104},[84,166454,12764],{"class":477},[84,166456,70547],{"class":5545},[84,166458,523],{"class":473},[84,166460,1123],{"class":94},[84,166462,484],{"class":477},[84,166464,166465,166467,166469,166471,166473,166475,166477,166479,166481],{"class":86,"line":98},[84,166466,166402],{"class":477},[84,166468,70547],{"class":5545},[84,166470,523],{"class":473},[84,166472,1123],{"class":94},[84,166474,12764],{"class":477},[84,166476,80136],{"class":5545},[84,166478,523],{"class":473},[84,166480,150134],{"class":104},[84,166482,484],{"class":477},[35,166484,118258],{},[28,166486,166487,166490],{},[31,166488,166489],{},"顺序不容易错。",[31,166491,166492],{},"调用时可读性更强。",[14,166494,166496],{"id":166495},"_74-默认参数","7.4 默认参数",[35,166498,166499],{},"默认参数给参数设置默认值。",[75,166501,166503],{"className":30705,"code":166502,"language":30707,"meta":66,"style":66},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[81,166504,166505,166521,166551,166555,166559,166569],{"__ignoreMap":66},[84,166506,166507,166509,166511,166514,166516,166519],{"class":86,"line":87},[84,166508,32274],{"class":473},[84,166510,337],{"class":90},[84,166512,166513],{"class":477},"(host, port",[84,166515,523],{"class":473},[84,166517,166518],{"class":94},"3306",[84,166520,31113],{"class":477},[84,166522,166523,166525,166527,166529,166532,166534,166536,166538,166540,166542,166545,166547,166549],{"class":86,"line":98},[84,166524,31626],{"class":94},[84,166526,478],{"class":477},[84,166528,529],{"class":473},[84,166530,166531],{"class":104},"\"连接",[84,166533,1369],{"class":94},[84,166535,27722],{"class":477},[84,166537,1419],{"class":94},[84,166539,1332],{"class":104},[84,166541,1369],{"class":94},[84,166543,166544],{"class":477},"port",[84,166546,1419],{"class":94},[84,166548,725],{"class":104},[84,166550,484],{"class":477},[84,166552,166553],{"class":86,"line":70},[84,166554,2729],{"emptyLinePlaceholder":403},[84,166556,166557],{"class":86,"line":120},[84,166558,2729],{"emptyLinePlaceholder":403},[84,166560,166561,166564,166567],{"class":86,"line":131},[84,166562,166563],{"class":477},"connect(",[84,166565,166566],{"class":104},"\"localhost\"",[84,166568,484],{"class":477},[84,166570,166571,166573,166575,166577,166580],{"class":86,"line":145},[84,166572,166563],{"class":477},[84,166574,166566],{"class":104},[84,166576,12764],{"class":477},[84,166578,166579],{"class":94},"6379",[84,166581,484],{"class":477},[35,166583,166584],{},"注意：默认参数必须放在非默认参数后面。",[35,166586,166587],{},"错误：",[75,166589,166591],{"className":30705,"code":166590,"language":30707,"meta":66,"style":66},"def connect(port=3306, host):\n    pass\n",[81,166592,166593,166609],{"__ignoreMap":66},[84,166594,166595,166597,166599,166602,166604,166606],{"class":86,"line":87},[84,166596,32274],{"class":473},[84,166598,337],{"class":90},[84,166600,166601],{"class":477},"(port",[84,166603,523],{"class":473},[84,166605,166518],{"class":94},[84,166607,166608],{"class":477},", host):\n",[84,166610,166611],{"class":86,"line":98},[84,166612,149783],{"class":473},[35,166614,166615],{},"正确：",[75,166617,166619],{"className":30705,"code":166618,"language":30707,"meta":66,"style":66},"def connect(host, port=3306):\n    pass\n",[81,166620,166621,166635],{"__ignoreMap":66},[84,166622,166623,166625,166627,166629,166631,166633],{"class":86,"line":87},[84,166624,32274],{"class":473},[84,166626,337],{"class":90},[84,166628,166513],{"class":477},[84,166630,523],{"class":473},[84,166632,166518],{"class":94},[84,166634,31113],{"class":477},[84,166636,166637],{"class":86,"line":98},[84,166638,149783],{"class":473},[14,166640,166642],{"id":166641},"_75-默认参数的坑","7.5 默认参数的坑",[35,166644,166645],{},"不要使用可变对象作为默认参数。",[35,166647,157869],{},[75,166649,166651],{"className":30705,"code":166650,"language":30707,"meta":66,"style":66},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[81,166652,166653,166668,166673,166680,166684,166688,166699],{"__ignoreMap":66},[84,166654,166655,166657,166660,166663,166665],{"class":86,"line":87},[84,166656,32274],{"class":473},[84,166658,166659],{"class":90}," add_item",[84,166661,166662],{"class":477},"(item, items",[84,166664,523],{"class":473},[84,166666,166667],{"class":477},"[]):\n",[84,166669,166670],{"class":86,"line":98},[84,166671,166672],{"class":477},"    items.append(item)\n",[84,166674,166675,166677],{"class":86,"line":70},[84,166676,4419],{"class":473},[84,166678,166679],{"class":477}," items\n",[84,166681,166682],{"class":86,"line":120},[84,166683,2729],{"emptyLinePlaceholder":403},[84,166685,166686],{"class":86,"line":131},[84,166687,2729],{"emptyLinePlaceholder":403},[84,166689,166690,166692,166695,166697],{"class":86,"line":145},[84,166691,30742],{"class":94},[84,166693,166694],{"class":477},"(add_item(",[84,166696,165571],{"class":104},[84,166698,30824],{"class":477},[84,166700,166701,166703,166705,166708],{"class":86,"line":156},[84,166702,30742],{"class":94},[84,166704,166694],{"class":477},[84,166706,166707],{"class":104},"\"b\"",[84,166709,30824],{"class":477},[35,166711,166712],{},"第二次调用会复用第一次的列表。",[35,166714,156134],{},[75,166716,166718],{"className":30705,"code":166717,"language":30707,"meta":66,"style":66},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[81,166719,166720,166734,166747,166756,166760],{"__ignoreMap":66},[84,166721,166722,166724,166726,166728,166730,166732],{"class":86,"line":87},[84,166723,32274],{"class":473},[84,166725,166659],{"class":90},[84,166727,166662],{"class":477},[84,166729,523],{"class":473},[84,166731,96012],{"class":94},[84,166733,31113],{"class":477},[84,166735,166736,166738,166741,166743,166745],{"class":86,"line":98},[84,166737,3430],{"class":473},[84,166739,166740],{"class":477}," items ",[84,166742,39254],{"class":473},[84,166744,39260],{"class":94},[84,166746,4068],{"class":477},[84,166748,166749,166752,166754],{"class":86,"line":70},[84,166750,166751],{"class":477},"        items ",[84,166753,523],{"class":473},[84,166755,52165],{"class":477},[84,166757,166758],{"class":86,"line":120},[84,166759,166672],{"class":477},[84,166761,166762,166764],{"class":86,"line":131},[84,166763,4419],{"class":473},[84,166765,166679],{"class":477},[14,166767,166769],{"id":166768},"_76-不定长参数","7.6 不定长参数",[23,166771,166773],{"id":166772},"_761-args","7.6.1 *args",[35,166775,166776,166779],{},[81,166777,166778],{},"*args"," 接收任意数量的位置参数，得到元组。",[75,166781,166783],{"className":30705,"code":166782,"language":30707,"meta":66,"style":66},"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",[81,166784,166785,166798,166806,166817,166826,166832,166836,166840,166859],{"__ignoreMap":66},[84,166786,166787,166789,166791,166793,166795],{"class":86,"line":87},[84,166788,32274],{"class":473},[84,166790,5538],{"class":90},[84,166792,478],{"class":477},[84,166794,928],{"class":473},[84,166796,166797],{"class":477},"args):\n",[84,166799,166800,166802,166804],{"class":86,"line":98},[84,166801,159553],{"class":477},[84,166803,523],{"class":473},[84,166805,47660],{"class":94},[84,166807,166808,166810,166812,166814],{"class":86,"line":70},[84,166809,3530],{"class":473},[84,166811,156426],{"class":477},[84,166813,26371],{"class":473},[84,166815,166816],{"class":477}," args:\n",[84,166818,166819,166821,166823],{"class":86,"line":120},[84,166820,160228],{"class":477},[84,166822,9806],{"class":473},[84,166824,166825],{"class":477}," num\n",[84,166827,166828,166830],{"class":86,"line":131},[84,166829,4419],{"class":473},[84,166831,162533],{"class":477},[84,166833,166834],{"class":86,"line":145},[84,166835,2729],{"emptyLinePlaceholder":403},[84,166837,166838],{"class":86,"line":156},[84,166839,2729],{"emptyLinePlaceholder":403},[84,166841,166842,166844,166847,166849,166851,166853,166855,166857],{"class":86,"line":164},[84,166843,30742],{"class":94},[84,166845,166846],{"class":477},"(add(",[84,166848,692],{"class":94},[84,166850,12764],{"class":477},[84,166852,553],{"class":94},[84,166854,12764],{"class":477},[84,166856,547],{"class":94},[84,166858,30824],{"class":477},[84,166860,166861,166863,166865,166867,166869,166871,166873,166875,166877,166879,166881,166883],{"class":86,"line":175},[84,166862,30742],{"class":94},[84,166864,166846],{"class":477},[84,166866,692],{"class":94},[84,166868,12764],{"class":477},[84,166870,553],{"class":94},[84,166872,12764],{"class":477},[84,166874,547],{"class":94},[84,166876,12764],{"class":477},[84,166878,140],{"class":94},[84,166880,12764],{"class":477},[84,166882,792],{"class":94},[84,166884,30824],{"class":477},[23,166886,166888],{"id":166887},"_762-kwargs","7.6.2 **kwargs",[35,166890,166891,166894],{},[81,166892,166893],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[75,166896,166898],{"className":30705,"code":166897,"language":30707,"meta":66,"style":66},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[81,166899,166900,166913,166924,166930,166934,166938],{"__ignoreMap":66},[84,166901,166902,166904,166906,166908,166910],{"class":86,"line":87},[84,166903,32274],{"class":473},[84,166905,162191],{"class":90},[84,166907,478],{"class":477},[84,166909,10990],{"class":473},[84,166911,166912],{"class":477},"kwargs):\n",[84,166914,166915,166917,166919,166921],{"class":86,"line":98},[84,166916,3530],{"class":473},[84,166918,165031],{"class":477},[84,166920,26371],{"class":473},[84,166922,166923],{"class":477}," kwargs.items():\n",[84,166925,166926,166928],{"class":86,"line":70},[84,166927,32778],{"class":94},[84,166929,165043],{"class":477},[84,166931,166932],{"class":86,"line":120},[84,166933,2729],{"emptyLinePlaceholder":403},[84,166935,166936],{"class":86,"line":131},[84,166937,2729],{"emptyLinePlaceholder":403},[84,166939,166940,166942,166944,166946,166948,166950,166952,166954,166956,166958,166960,166962,166964],{"class":86,"line":145},[84,166941,162256],{"class":477},[84,166943,80136],{"class":5545},[84,166945,523],{"class":473},[84,166947,150134],{"class":104},[84,166949,12764],{"class":477},[84,166951,70547],{"class":5545},[84,166953,523],{"class":473},[84,166955,1123],{"class":94},[84,166957,12764],{"class":477},[84,166959,70598],{"class":5545},[84,166961,523],{"class":473},[84,166963,69595],{"class":104},[84,166965,484],{"class":477},[14,166967,166969],{"id":166968},"_77-参数解包","7.7 参数解包",[35,166971,166972],{},"列表或元组解包为位置参数：",[75,166974,166976],{"className":30705,"code":166975,"language":30707,"meta":66,"style":66},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[81,166977,166978,166987,167002,167006,167010,167030],{"__ignoreMap":66},[84,166979,166980,166982,166984],{"class":86,"line":87},[84,166981,32274],{"class":473},[84,166983,5538],{"class":90},[84,166985,166986],{"class":477},"(a, b, c):\n",[84,166988,166989,166991,166993,166995,166997,166999],{"class":86,"line":98},[84,166990,4419],{"class":473},[84,166992,11198],{"class":477},[84,166994,954],{"class":473},[84,166996,11211],{"class":477},[84,166998,954],{"class":473},[84,167000,167001],{"class":477}," c\n",[84,167003,167004],{"class":86,"line":70},[84,167005,2729],{"emptyLinePlaceholder":403},[84,167007,167008],{"class":86,"line":120},[84,167009,2729],{"emptyLinePlaceholder":403},[84,167011,167012,167014,167016,167018,167020,167022,167024,167026,167028],{"class":86,"line":131},[84,167013,164346],{"class":477},[84,167015,523],{"class":473},[84,167017,52553],{"class":477},[84,167019,692],{"class":94},[84,167021,12764],{"class":477},[84,167023,553],{"class":94},[84,167025,12764],{"class":477},[84,167027,547],{"class":94},[84,167029,33573],{"class":477},[84,167031,167032,167034,167036,167038],{"class":86,"line":145},[84,167033,30742],{"class":94},[84,167035,166846],{"class":477},[84,167037,928],{"class":473},[84,167039,167040],{"class":477},"nums))\n",[35,167042,167043],{},"字典解包为关键字参数：",[75,167045,167047],{"className":30705,"code":167046,"language":30707,"meta":66,"style":66},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[81,167048,167049,167057,167083,167087,167091,167115],{"__ignoreMap":66},[84,167050,167051,167053,167055],{"class":86,"line":87},[84,167052,32274],{"class":473},[84,167054,149618],{"class":90},[84,167056,149621],{"class":477},[84,167058,167059,167061,167063,167065,167067,167069,167071,167073,167075,167077,167079,167081],{"class":86,"line":98},[84,167060,31626],{"class":94},[84,167062,478],{"class":477},[84,167064,529],{"class":473},[84,167066,725],{"class":104},[84,167068,1369],{"class":94},[84,167070,80136],{"class":477},[84,167072,1419],{"class":94},[84,167074,4777],{"class":94},[84,167076,70547],{"class":477},[84,167078,1419],{"class":94},[84,167080,725],{"class":104},[84,167082,484],{"class":477},[84,167084,167085],{"class":86,"line":70},[84,167086,2729],{"emptyLinePlaceholder":403},[84,167088,167089],{"class":86,"line":120},[84,167090,2729],{"emptyLinePlaceholder":403},[84,167092,167093,167095,167097,167099,167101,167103,167105,167107,167109,167111,167113],{"class":86,"line":131},[84,167094,116640],{"class":477},[84,167096,523],{"class":473},[84,167098,4777],{"class":477},[84,167100,63005],{"class":104},[84,167102,51764],{"class":477},[84,167104,150134],{"class":104},[84,167106,12764],{"class":477},[84,167108,69450],{"class":104},[84,167110,51764],{"class":477},[84,167112,1123],{"class":94},[84,167114,1905],{"class":477},[84,167116,167117,167119,167121],{"class":86,"line":145},[84,167118,166402],{"class":477},[84,167120,10990],{"class":473},[84,167122,167123],{"class":477},"info)\n",[14,167125,167127],{"id":167126},"_78-匿名函数lambda","7.8 匿名函数lambda",[35,167129,167130,167133],{},[81,167131,167132],{},"lambda"," 用于定义简单匿名函数。",[75,167135,167137],{"className":30705,"code":167136,"language":30707,"meta":66,"style":66},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[81,167138,167139,167156],{"__ignoreMap":66},[84,167140,167141,167144,167146,167149,167152,167154],{"class":86,"line":87},[84,167142,167143],{"class":477},"add ",[84,167145,523],{"class":473},[84,167147,167148],{"class":473}," lambda",[84,167150,167151],{"class":477}," a, b: a ",[84,167153,954],{"class":473},[84,167155,151350],{"class":477},[84,167157,167158,167160,167162,167164,167166,167168],{"class":86,"line":98},[84,167159,30742],{"class":94},[84,167161,166846],{"class":477},[84,167163,692],{"class":94},[84,167165,12764],{"class":477},[84,167167,553],{"class":94},[84,167169,30824],{"class":477},[35,167171,167172],{},"常和排序、过滤等函数一起使用。",[35,167174,167175],{},"按分数排序：",[75,167177,167179],{"className":30705,"code":167178,"language":30707,"meta":66,"style":66},"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",[81,167180,167181,167189,167209,167229,167249,167253,167257,167280],{"__ignoreMap":66},[84,167182,167183,167185,167187],{"class":86,"line":87},[84,167184,159962],{"class":477},[84,167186,523],{"class":473},[84,167188,55773],{"class":477},[84,167190,167191,167193,167195,167197,167199,167201,167203,167205,167207],{"class":86,"line":98},[84,167192,148631],{"class":477},[84,167194,63005],{"class":104},[84,167196,51764],{"class":477},[84,167198,150134],{"class":104},[84,167200,12764],{"class":477},[84,167202,151718],{"class":104},[84,167204,51764],{"class":477},[84,167206,1462],{"class":94},[84,167208,5259],{"class":477},[84,167210,167211,167213,167215,167217,167219,167221,167223,167225,167227],{"class":86,"line":70},[84,167212,148631],{"class":477},[84,167214,63005],{"class":104},[84,167216,51764],{"class":477},[84,167218,151182],{"class":104},[84,167220,12764],{"class":477},[84,167222,151718],{"class":104},[84,167224,51764],{"class":477},[84,167226,1284],{"class":94},[84,167228,5259],{"class":477},[84,167230,167231,167233,167235,167237,167239,167241,167243,167245,167247],{"class":86,"line":120},[84,167232,148631],{"class":477},[84,167234,63005],{"class":104},[84,167236,51764],{"class":477},[84,167238,159977],{"class":104},[84,167240,12764],{"class":477},[84,167242,151718],{"class":104},[84,167244,51764],{"class":477},[84,167246,879],{"class":94},[84,167248,5259],{"class":477},[84,167250,167251],{"class":86,"line":131},[84,167252,33573],{"class":477},[84,167254,167255],{"class":86,"line":145},[84,167256,2729],{"emptyLinePlaceholder":403},[84,167258,167259,167262,167264,167266,167268,167270,167272,167274,167276,167278],{"class":86,"line":156},[84,167260,167261],{"class":477},"students.sort(",[84,167263,154192],{"class":5545},[84,167265,154195],{"class":473},[84,167267,154198],{"class":477},[84,167269,151718],{"class":104},[84,167271,112528],{"class":477},[84,167273,163774],{"class":5545},[84,167275,523],{"class":473},[84,167277,31803],{"class":94},[84,167279,484],{"class":477},[84,167281,167282,167284],{"class":86,"line":164},[84,167283,30742],{"class":94},[84,167285,165241],{"class":477},[35,167287,167288,167289,167291],{},"如果逻辑复杂，不要硬写 ",[81,167290,167132],{},"，定义普通函数更清晰。",[14,167293,167295],{"id":167294},"_79-函数作为参数","7.9 函数作为参数",[35,167297,167298],{},"函数可以作为参数传给另一个函数。",[75,167300,167302],{"className":30705,"code":167301,"language":30707,"meta":66,"style":66},"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",[81,167303,167304,167312,167322,167326,167330,167340,167347,167351,167355],{"__ignoreMap":66},[84,167305,167306,167308,167310],{"class":86,"line":87},[84,167307,32274],{"class":473},[84,167309,5538],{"class":90},[84,167311,151339],{"class":477},[84,167313,167314,167316,167318,167320],{"class":86,"line":98},[84,167315,4419],{"class":473},[84,167317,11198],{"class":477},[84,167319,954],{"class":473},[84,167321,151350],{"class":477},[84,167323,167324],{"class":86,"line":70},[84,167325,2729],{"emptyLinePlaceholder":403},[84,167327,167328],{"class":86,"line":120},[84,167329,2729],{"emptyLinePlaceholder":403},[84,167331,167332,167334,167337],{"class":86,"line":131},[84,167333,32274],{"class":473},[84,167335,167336],{"class":90}," calculate",[84,167338,167339],{"class":477},"(a, b, func):\n",[84,167341,167342,167344],{"class":86,"line":145},[84,167343,4419],{"class":473},[84,167345,167346],{"class":477}," func(a, b)\n",[84,167348,167349],{"class":86,"line":156},[84,167350,2729],{"emptyLinePlaceholder":403},[84,167352,167353],{"class":86,"line":164},[84,167354,2729],{"emptyLinePlaceholder":403},[84,167356,167357,167359,167362,167364,167366,167368],{"class":86,"line":175},[84,167358,30742],{"class":94},[84,167360,167361],{"class":477},"(calculate(",[84,167363,919],{"class":94},[84,167365,12764],{"class":477},[84,167367,1173],{"class":94},[84,167369,167370],{"class":477},", add))\n",[35,167372,167373],{},"这种思想在排序、回调、框架中经常出现。",[14,167375,167377],{"id":167376},"_710-mapfiltersorted","7.10 map、filter、sorted",[23,167379,167381],{"id":167380},"_7101-map","7.10.1 map",[35,167383,167384,167386],{},[81,167385,74370],{}," 对每个元素执行函数。",[75,167388,167390],{"className":30705,"code":167389,"language":30707,"meta":66,"style":66},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[81,167391,167392,167416,167439],{"__ignoreMap":66},[84,167393,167394,167396,167398,167400,167402,167404,167406,167408,167410,167412,167414],{"class":86,"line":87},[84,167395,164346],{"class":477},[84,167397,523],{"class":473},[84,167399,52553],{"class":477},[84,167401,692],{"class":94},[84,167403,12764],{"class":477},[84,167405,553],{"class":94},[84,167407,12764],{"class":477},[84,167409,547],{"class":94},[84,167411,12764],{"class":477},[84,167413,140],{"class":94},[84,167415,33573],{"class":477},[84,167417,167418,167420,167422,167425,167427,167429,167432,167434,167436],{"class":86,"line":98},[84,167419,161552],{"class":477},[84,167421,523],{"class":473},[84,167423,167424],{"class":94}," map",[84,167426,478],{"class":477},[84,167428,167132],{"class":473},[84,167430,167431],{"class":477}," x: x ",[84,167433,928],{"class":473},[84,167435,15084],{"class":94},[84,167437,167438],{"class":477},", nums)\n",[84,167440,167441,167443,167445,167447],{"class":86,"line":70},[84,167442,30742],{"class":94},[84,167444,478],{"class":477},[84,167446,154316],{"class":94},[84,167448,166314],{"class":477},[23,167450,167452],{"id":167451},"_7102-filter","7.10.2 filter",[35,167454,167455,167457],{},[81,167456,80377],{}," 保留满足条件的元素。",[75,167459,167461],{"className":30705,"code":167460,"language":30707,"meta":66,"style":66},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[81,167462,167463,167491,167516],{"__ignoreMap":66},[84,167464,167465,167467,167469,167471,167473,167475,167477,167479,167481,167483,167485,167487,167489],{"class":86,"line":87},[84,167466,164346],{"class":477},[84,167468,523],{"class":473},[84,167470,52553],{"class":477},[84,167472,692],{"class":94},[84,167474,12764],{"class":477},[84,167476,553],{"class":94},[84,167478,12764],{"class":477},[84,167480,547],{"class":94},[84,167482,12764],{"class":477},[84,167484,140],{"class":94},[84,167486,12764],{"class":477},[84,167488,792],{"class":94},[84,167490,33573],{"class":477},[84,167492,167493,167495,167497,167500,167502,167504,167506,167508,167510,167512,167514],{"class":86,"line":98},[84,167494,161552],{"class":477},[84,167496,523],{"class":473},[84,167498,167499],{"class":94}," filter",[84,167501,478],{"class":477},[84,167503,167132],{"class":473},[84,167505,167431],{"class":477},[84,167507,801],{"class":473},[84,167509,15084],{"class":94},[84,167511,101885],{"class":473},[84,167513,4422],{"class":94},[84,167515,167438],{"class":477},[84,167517,167518,167520,167522,167524],{"class":86,"line":70},[84,167519,30742],{"class":94},[84,167521,478],{"class":477},[84,167523,154316],{"class":94},[84,167525,166314],{"class":477},[23,167527,167529],{"id":167528},"_7103-sorted","7.10.3 sorted",[35,167531,167532,167534],{},[81,167533,165482],{}," 返回排序后的新列表。",[75,167536,167538],{"className":30705,"code":167537,"language":30707,"meta":66,"style":66},"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",[81,167539,167540,167548,167568,167588,167608,167612,167616,167645],{"__ignoreMap":66},[84,167541,167542,167544,167546],{"class":86,"line":87},[84,167543,159962],{"class":477},[84,167545,523],{"class":473},[84,167547,55773],{"class":477},[84,167549,167550,167552,167554,167556,167558,167560,167562,167564,167566],{"class":86,"line":98},[84,167551,148631],{"class":477},[84,167553,63005],{"class":104},[84,167555,51764],{"class":477},[84,167557,150134],{"class":104},[84,167559,12764],{"class":477},[84,167561,151718],{"class":104},[84,167563,51764],{"class":477},[84,167565,1462],{"class":94},[84,167567,5259],{"class":477},[84,167569,167570,167572,167574,167576,167578,167580,167582,167584,167586],{"class":86,"line":70},[84,167571,148631],{"class":477},[84,167573,63005],{"class":104},[84,167575,51764],{"class":477},[84,167577,151182],{"class":104},[84,167579,12764],{"class":477},[84,167581,151718],{"class":104},[84,167583,51764],{"class":477},[84,167585,1284],{"class":94},[84,167587,5259],{"class":477},[84,167589,167590,167592,167594,167596,167598,167600,167602,167604,167606],{"class":86,"line":120},[84,167591,148631],{"class":477},[84,167593,63005],{"class":104},[84,167595,51764],{"class":477},[84,167597,159977],{"class":104},[84,167599,12764],{"class":477},[84,167601,151718],{"class":104},[84,167603,51764],{"class":477},[84,167605,879],{"class":94},[84,167607,5259],{"class":477},[84,167609,167610],{"class":86,"line":131},[84,167611,33573],{"class":477},[84,167613,167614],{"class":86,"line":145},[84,167615,2729],{"emptyLinePlaceholder":403},[84,167617,167618,167620,167622,167624,167627,167629,167631,167633,167635,167637,167639,167641,167643],{"class":86,"line":156},[84,167619,161552],{"class":477},[84,167621,523],{"class":473},[84,167623,163850],{"class":94},[84,167625,167626],{"class":477},"(students, ",[84,167628,154192],{"class":5545},[84,167630,154195],{"class":473},[84,167632,154198],{"class":477},[84,167634,151718],{"class":104},[84,167636,112528],{"class":477},[84,167638,163774],{"class":5545},[84,167640,523],{"class":473},[84,167642,31803],{"class":94},[84,167644,484],{"class":477},[84,167646,167647,167649],{"class":86,"line":164},[84,167648,30742],{"class":94},[84,167650,76911],{"class":477},[14,167652,167654],{"id":167653},"_711-闭包入门","7.11 闭包入门",[35,167656,167657],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[75,167659,167661],{"className":30705,"code":167660,"language":30707,"meta":66,"style":66},"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",[81,167662,167663,167673,167683,167694,167698,167705,167709,167713,167727],{"__ignoreMap":66},[84,167664,167665,167667,167670],{"class":86,"line":87},[84,167666,32274],{"class":473},[84,167668,167669],{"class":90}," outer",[84,167671,167672],{"class":477},"(base):\n",[84,167674,167675,167677,167680],{"class":86,"line":98},[84,167676,31128],{"class":473},[84,167678,167679],{"class":90}," inner",[84,167681,167682],{"class":477},"(num):\n",[84,167684,167685,167687,167690,167692],{"class":86,"line":70},[84,167686,15081],{"class":473},[84,167688,167689],{"class":477}," base ",[84,167691,954],{"class":473},[84,167693,166825],{"class":477},[84,167695,167696],{"class":86,"line":120},[84,167697,2729],{"emptyLinePlaceholder":403},[84,167699,167700,167702],{"class":86,"line":131},[84,167701,4419],{"class":473},[84,167703,167704],{"class":477}," inner\n",[84,167706,167707],{"class":86,"line":145},[84,167708,2729],{"emptyLinePlaceholder":403},[84,167710,167711],{"class":86,"line":156},[84,167712,2729],{"emptyLinePlaceholder":403},[84,167714,167715,167718,167720,167723,167725],{"class":86,"line":164},[84,167716,167717],{"class":477},"add_10 ",[84,167719,523],{"class":473},[84,167721,167722],{"class":477}," outer(",[84,167724,919],{"class":94},[84,167726,484],{"class":477},[84,167728,167729,167731,167734,167736],{"class":86,"line":175},[84,167730,30742],{"class":94},[84,167732,167733],{"class":477},"(add_10(",[84,167735,792],{"class":94},[84,167737,30824],{"class":477},[35,167739,167740],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167742,167744],{"id":167743},"_712-装饰器入门","7.12 装饰器入门",[35,167746,167747],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[75,167749,167751],{"className":30705,"code":167750,"language":30707,"meta":66,"style":66},"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",[81,167752,167753,167762,167771,167782,167787,167798,167802,167809,167813,167817,167822,167830,167840,167844,167848],{"__ignoreMap":66},[84,167754,167755,167757,167759],{"class":86,"line":87},[84,167756,32274],{"class":473},[84,167758,87517],{"class":90},[84,167760,167761],{"class":477},"(func):\n",[84,167763,167764,167766,167769],{"class":86,"line":98},[84,167765,31128],{"class":473},[84,167767,167768],{"class":90}," wrapper",[84,167770,32280],{"class":477},[84,167772,167773,167775,167777,167780],{"class":86,"line":70},[84,167774,32778],{"class":94},[84,167776,478],{"class":477},[84,167778,167779],{"class":104},"\"函数开始执行\"",[84,167781,484],{"class":477},[84,167783,167784],{"class":86,"line":120},[84,167785,167786],{"class":477},"        func()\n",[84,167788,167789,167791,167793,167796],{"class":86,"line":131},[84,167790,32778],{"class":94},[84,167792,478],{"class":477},[84,167794,167795],{"class":104},"\"函数执行结束\"",[84,167797,484],{"class":477},[84,167799,167800],{"class":86,"line":145},[84,167801,2729],{"emptyLinePlaceholder":403},[84,167803,167804,167806],{"class":86,"line":156},[84,167805,4419],{"class":473},[84,167807,167808],{"class":477}," wrapper\n",[84,167810,167811],{"class":86,"line":164},[84,167812,2729],{"emptyLinePlaceholder":403},[84,167814,167815],{"class":86,"line":175},[84,167816,2729],{"emptyLinePlaceholder":403},[84,167818,167819],{"class":86,"line":185},[84,167820,167821],{"class":90},"@log\n",[84,167823,167824,167826,167828],{"class":86,"line":195},[84,167825,32274],{"class":473},[84,167827,161242],{"class":90},[84,167829,32280],{"class":477},[84,167831,167832,167834,167836,167838],{"class":86,"line":206},[84,167833,31626],{"class":94},[84,167835,478],{"class":477},[84,167837,6173],{"class":104},[84,167839,484],{"class":477},[84,167841,167842],{"class":86,"line":217},[84,167843,2729],{"emptyLinePlaceholder":403},[84,167845,167846],{"class":86,"line":227},[84,167847,2729],{"emptyLinePlaceholder":403},[84,167849,167850],{"class":86,"line":238},[84,167851,161277],{"class":477},[35,167853,158520],{},[75,167855,167857],{"className":30705,"code":167856,"language":30707,"meta":66,"style":66},"say_hello = log(say_hello)\n",[81,167858,167859],{"__ignoreMap":66},[84,167860,167861,167864,167866],{"class":86,"line":87},[84,167862,167863],{"class":477},"say_hello ",[84,167865,523],{"class":473},[84,167867,167868],{"class":477}," log(say_hello)\n",[35,167870,167871],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167873,167875],{"id":167874},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[75,167877,167879],{"className":30705,"code":167878,"language":30707,"meta":66,"style":66},"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",[81,167880,167881,167889,167906,167916,167935,167945,167952,167956,167962,167966,167970,167974,167982,167992,167996,168000],{"__ignoreMap":66},[84,167882,167883,167885,167887],{"class":86,"line":87},[84,167884,32274],{"class":473},[84,167886,87517],{"class":90},[84,167888,167761],{"class":477},[84,167890,167891,167893,167895,167897,167899,167902,167904],{"class":86,"line":98},[84,167892,31128],{"class":473},[84,167894,167768],{"class":90},[84,167896,478],{"class":477},[84,167898,928],{"class":473},[84,167900,167901],{"class":477},"args, ",[84,167903,10990],{"class":473},[84,167905,166912],{"class":477},[84,167907,167908,167910,167912,167914],{"class":86,"line":70},[84,167909,32778],{"class":94},[84,167911,478],{"class":477},[84,167913,167779],{"class":104},[84,167915,484],{"class":477},[84,167917,167918,167921,167923,167926,167928,167930,167932],{"class":86,"line":120},[84,167919,167920],{"class":477},"        result ",[84,167922,523],{"class":473},[84,167924,167925],{"class":477}," func(",[84,167927,928],{"class":473},[84,167929,167901],{"class":477},[84,167931,10990],{"class":473},[84,167933,167934],{"class":477},"kwargs)\n",[84,167936,167937,167939,167941,167943],{"class":86,"line":131},[84,167938,32778],{"class":94},[84,167940,478],{"class":477},[84,167942,167795],{"class":104},[84,167944,484],{"class":477},[84,167946,167947,167949],{"class":86,"line":145},[84,167948,15081],{"class":473},[84,167950,167951],{"class":477}," result\n",[84,167953,167954],{"class":86,"line":156},[84,167955,2729],{"emptyLinePlaceholder":403},[84,167957,167958,167960],{"class":86,"line":164},[84,167959,4419],{"class":473},[84,167961,167808],{"class":477},[84,167963,167964],{"class":86,"line":175},[84,167965,2729],{"emptyLinePlaceholder":403},[84,167967,167968],{"class":86,"line":185},[84,167969,2729],{"emptyLinePlaceholder":403},[84,167971,167972],{"class":86,"line":195},[84,167973,167821],{"class":90},[84,167975,167976,167978,167980],{"class":86,"line":206},[84,167977,32274],{"class":473},[84,167979,5538],{"class":90},[84,167981,151339],{"class":477},[84,167983,167984,167986,167988,167990],{"class":86,"line":217},[84,167985,4419],{"class":473},[84,167987,11198],{"class":477},[84,167989,954],{"class":473},[84,167991,151350],{"class":477},[84,167993,167994],{"class":86,"line":227},[84,167995,2729],{"emptyLinePlaceholder":403},[84,167997,167998],{"class":86,"line":238},[84,167999,2729],{"emptyLinePlaceholder":403},[84,168001,168002,168004,168006,168008,168010,168012],{"class":86,"line":249},[84,168003,30742],{"class":94},[84,168005,166846],{"class":477},[84,168007,919],{"class":94},[84,168009,12764],{"class":477},[84,168011,1173],{"class":94},[84,168013,30824],{"class":477},[35,168015,168016,168017,101344,168019,168021],{},"这个写法使用 ",[81,168018,166778],{},[81,168020,166893],{}," 接收原函数的所有参数。",[14,168023,168025],{"id":168024},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[35,168027,123538],{},[28,168029,168030,168033,168036],{},[31,168031,168032],{},"给定一组学生数据。",[31,168034,168035],{},"封装函数，根据传入规则筛选学生。",[31,168037,168038],{},"筛选及格、优秀、未成年学生。",[35,168040,10364],{},[75,168042,168044],{"className":30705,"code":168043,"language":30707,"meta":66,"style":66},"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",[81,168045,168046,168054,168082,168110,168138,168142,168146,168150,168160,168168,168178,168185,168190,168196,168200,168204,168228,168251,168274,168278,168285,168292],{"__ignoreMap":66},[84,168047,168048,168050,168052],{"class":86,"line":87},[84,168049,159962],{"class":477},[84,168051,523],{"class":473},[84,168053,55773],{"class":477},[84,168055,168056,168058,168060,168062,168064,168066,168068,168070,168072,168074,168076,168078,168080],{"class":86,"line":98},[84,168057,148631],{"class":477},[84,168059,63005],{"class":104},[84,168061,51764],{"class":477},[84,168063,150134],{"class":104},[84,168065,12764],{"class":477},[84,168067,69450],{"class":104},[84,168069,51764],{"class":477},[84,168071,1123],{"class":94},[84,168073,12764],{"class":477},[84,168075,151718],{"class":104},[84,168077,51764],{"class":477},[84,168079,1462],{"class":94},[84,168081,5259],{"class":477},[84,168083,168084,168086,168088,168090,168092,168094,168096,168098,168100,168102,168104,168106,168108],{"class":86,"line":70},[84,168085,148631],{"class":477},[84,168087,63005],{"class":104},[84,168089,51764],{"class":477},[84,168091,151182],{"class":104},[84,168093,12764],{"class":477},[84,168095,69450],{"class":104},[84,168097,51764],{"class":477},[84,168099,1098],{"class":94},[84,168101,12764],{"class":477},[84,168103,151718],{"class":104},[84,168105,51764],{"class":477},[84,168107,1284],{"class":94},[84,168109,5259],{"class":477},[84,168111,168112,168114,168116,168118,168120,168122,168124,168126,168128,168130,168132,168134,168136],{"class":86,"line":120},[84,168113,148631],{"class":477},[84,168115,63005],{"class":104},[84,168117,51764],{"class":477},[84,168119,159977],{"class":104},[84,168121,12764],{"class":477},[84,168123,69450],{"class":104},[84,168125,51764],{"class":477},[84,168127,1148],{"class":94},[84,168129,12764],{"class":477},[84,168131,151718],{"class":104},[84,168133,51764],{"class":477},[84,168135,1355],{"class":94},[84,168137,5259],{"class":477},[84,168139,168140],{"class":86,"line":131},[84,168141,33573],{"class":477},[84,168143,168144],{"class":86,"line":145},[84,168145,2729],{"emptyLinePlaceholder":403},[84,168147,168148],{"class":86,"line":156},[84,168149,2729],{"emptyLinePlaceholder":403},[84,168151,168152,168154,168157],{"class":86,"line":164},[84,168153,32274],{"class":473},[84,168155,168156],{"class":90}," filter_students",[84,168158,168159],{"class":477},"(students, condition):\n",[84,168161,168162,168164,168166],{"class":86,"line":175},[84,168163,161469],{"class":477},[84,168165,523],{"class":473},[84,168167,52165],{"class":477},[84,168169,168170,168172,168174,168176],{"class":86,"line":185},[84,168171,3530],{"class":473},[84,168173,152383],{"class":477},[84,168175,26371],{"class":473},[84,168177,152388],{"class":477},[84,168179,168180,168182],{"class":86,"line":195},[84,168181,2826],{"class":473},[84,168183,168184],{"class":477}," condition(student):\n",[84,168186,168187],{"class":86,"line":206},[84,168188,168189],{"class":477},"            result.append(student)\n",[84,168191,168192,168194],{"class":86,"line":217},[84,168193,4419],{"class":473},[84,168195,167951],{"class":477},[84,168197,168198],{"class":86,"line":227},[84,168199,2729],{"emptyLinePlaceholder":403},[84,168201,168202],{"class":86,"line":238},[84,168203,2729],{"emptyLinePlaceholder":403},[84,168205,168206,168208,168210,168213,168215,168218,168220,168222,168224,168226],{"class":86,"line":249},[84,168207,165947],{"class":477},[84,168209,523],{"class":473},[84,168211,168212],{"class":477}," filter_students(students, ",[84,168214,167132],{"class":473},[84,168216,168217],{"class":477}," s: s[",[84,168219,151718],{"class":104},[84,168221,4772],{"class":477},[84,168223,2040],{"class":473},[84,168225,158083],{"class":94},[84,168227,484],{"class":477},[84,168229,168230,168233,168235,168237,168239,168241,168243,168245,168247,168249],{"class":86,"line":262},[84,168231,168232],{"class":477},"excellent ",[84,168234,523],{"class":473},[84,168236,168212],{"class":477},[84,168238,167132],{"class":473},[84,168240,168217],{"class":477},[84,168242,151718],{"class":104},[84,168244,4772],{"class":477},[84,168246,2040],{"class":473},[84,168248,158034],{"class":94},[84,168250,484],{"class":477},[84,168252,168253,168256,168258,168260,168262,168264,168266,168268,168270,168272],{"class":86,"line":273},[84,168254,168255],{"class":477},"under_age ",[84,168257,523],{"class":473},[84,168259,168212],{"class":477},[84,168261,167132],{"class":473},[84,168263,168217],{"class":477},[84,168265,69450],{"class":104},[84,168267,4772],{"class":477},[84,168269,1383],{"class":473},[84,168271,156531],{"class":94},[84,168273,484],{"class":477},[84,168275,168276],{"class":86,"line":283},[84,168277,2729],{"emptyLinePlaceholder":403},[84,168279,168280,168282],{"class":86,"line":294},[84,168281,30742],{"class":94},[84,168283,168284],{"class":477},"(passed)\n",[84,168286,168287,168289],{"class":86,"line":2028},[84,168288,30742],{"class":94},[84,168290,168291],{"class":477},"(excellent)\n",[84,168293,168294,168296],{"class":86,"line":2057},[84,168295,30742],{"class":94},[84,168297,168298],{"class":477},"(under_age)\n",[14,168300,168302],{"id":168301},"_715-易错点","7.15 易错点",[28,168304,168305,168308,168316,168321,168332],{},[31,168306,168307],{},"默认参数不要写可变对象。",[31,168309,168310,168312,168313,168315],{},[81,168311,166778],{}," 是元组，",[81,168314,166893],{}," 是字典。",[31,168317,168318,168320],{},[81,168319,167132],{}," 只适合简单表达式。",[31,168322,168323,101344,168325,168327,168328,168331],{},[81,168324,74370],{},[81,168326,80377],{}," 的结果是迭代器，常用 ",[81,168329,168330],{},"list()"," 转换查看。",[31,168333,168334],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168336,168338],{"id":168337},"_716-本章练习","7.16 本章练习",[28,168340,168341,168348,168354,168359,168364],{},[31,168342,168343,168344,168347],{},"写函数 ",[81,168345,168346],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[31,168349,168343,168350,168353],{},[81,168351,168352],{},"print_user(**kwargs)","，输出用户所有字段。",[31,168355,104692,168356,168358],{},[81,168357,167132],{}," 对学生列表按年龄排序。",[31,168360,104692,168361,168363],{},[81,168362,80377],{}," 找出成绩不及格的学生。",[31,168365,168366],{},"写一个装饰器，统计函数执行前后的提示信息。",[389,168368,168369],{},"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":66,"searchDepth":98,"depth":98,"links":168371},[168372,168373,168374,168375,168376,168377,168381,168382,168383,168384,168389,168390,168391,168392,168393,168394],{"id":166230,"depth":98,"text":166231},{"id":166344,"depth":98,"text":166345},{"id":166433,"depth":98,"text":166434},{"id":166495,"depth":98,"text":166496},{"id":166641,"depth":98,"text":166642},{"id":166768,"depth":98,"text":166769,"children":168378},[168379,168380],{"id":166772,"depth":70,"text":166773},{"id":166887,"depth":70,"text":166888},{"id":166968,"depth":98,"text":166969},{"id":167126,"depth":98,"text":167127},{"id":167294,"depth":98,"text":167295},{"id":167376,"depth":98,"text":167377,"children":168385},[168386,168387,168388],{"id":167380,"depth":70,"text":167381},{"id":167451,"depth":70,"text":167452},{"id":167528,"depth":70,"text":167529},{"id":167653,"depth":98,"text":167654},{"id":167743,"depth":98,"text":167744},{"id":167874,"depth":98,"text":167875},{"id":168024,"depth":98,"text":168025},{"id":168301,"depth":98,"text":168302},{"id":168337,"depth":98,"text":168338},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166222,"description":400},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168401,"title":168402,"body":168403,"description":400,"extension":401,"meta":170922,"navigation":403,"path":170923,"seo":170924,"stem":170925,"__hash__":170926},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168404,"toc":170897},[168405,168408,168412,168415,168418,168449,168453,168457,168460,168487,168491,168494,168545,168548,168563,168566,168601,168605,168607,168631,168634,168694,168698,168702,168705,168762,168765,168785,168789,168792,168855,168859,168862,168918,168925,168949,168953,168956,169019,169023,169028,169079,169082,169086,169091,169158,169161,169243,169247,169252,169303,169306,169310,169313,169316,169324,169327,169373,169376,169422,169426,169432,169476,169479,169525,169528,169568,169571,169632,169636,169639,169729,169732,169874,169877,169944,169948,169951,169954,170095,170098,170176,170179,170355,170359,170361,170372,170374,170573,170577,170821,170825,170859,170863,170894],[10,168406,168402],{"id":168407},"_8-文件操作",[14,168409,168411],{"id":168410},"_81-文件操作的意义","8.1 文件操作的意义",[35,168413,168414],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[35,168416,168417],{},"常见文件类型：",[28,168419,168420,168426,168432,168438,168444],{},[31,168421,168422,168425],{},[81,168423,168424],{},".txt","：普通文本。",[31,168427,168428,168431],{},[81,168429,168430],{},".csv","：表格文本。",[31,168433,168434,168437],{},[81,168435,168436],{},".json","：结构化数据。",[31,168439,168440,168443],{},[81,168441,168442],{},".log","：日志文件。",[31,168445,168446,168448],{},[81,168447,146598],{},"：Python 源代码。",[14,168450,168452],{"id":168451},"_82-路径","8.2 路径",[23,168454,168456],{"id":168455},"_821-相对路径","8.2.1 相对路径",[35,168458,168459],{},"相对当前运行目录：",[75,168461,168463],{"className":30705,"code":168462,"language":30707,"meta":66,"style":66},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[81,168464,168465],{"__ignoreMap":66},[84,168466,168467,168469,168471,168473,168475,168477,168479,168481,168483,168485],{"class":86,"line":87},[84,168468,87241],{"class":94},[84,168470,478],{"class":477},[84,168472,147042],{"class":104},[84,168474,12764],{"class":477},[84,168476,147047],{"class":104},[84,168478,12764],{"class":477},[84,168480,147052],{"class":5545},[84,168482,523],{"class":473},[84,168484,147057],{"class":104},[84,168486,484],{"class":477},[23,168488,168490],{"id":168489},"_822-绝对路径","8.2.2 绝对路径",[35,168492,168493],{},"从根目录或盘符开始：",[75,168495,168497],{"className":30705,"code":168496,"language":30707,"meta":66,"style":66},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[81,168498,168499,168522],{"__ignoreMap":66},[84,168500,168501,168503,168505,168508,168510,168512,168514,168516,168518,168520],{"class":86,"line":87},[84,168502,87241],{"class":94},[84,168504,478],{"class":477},[84,168506,168507],{"class":104},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[84,168509,12764],{"class":477},[84,168511,147047],{"class":104},[84,168513,12764],{"class":477},[84,168515,147052],{"class":5545},[84,168517,523],{"class":473},[84,168519,147057],{"class":104},[84,168521,484],{"class":477},[84,168523,168524,168526,168528,168531,168533,168535,168537,168539,168541,168543],{"class":86,"line":98},[84,168525,87241],{"class":94},[84,168527,478],{"class":477},[84,168529,168530],{"class":104},"\"D:\u002Fdata\u002Fdata.txt\"",[84,168532,12764],{"class":477},[84,168534,147047],{"class":104},[84,168536,12764],{"class":477},[84,168538,147052],{"class":5545},[84,168540,523],{"class":473},[84,168542,147057],{"class":104},[84,168544,484],{"class":477},[35,168546,168547],{},"Windows 路径建议写成：",[75,168549,168551],{"className":30705,"code":168550,"language":30707,"meta":66,"style":66},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[81,168552,168553],{"__ignoreMap":66},[84,168554,168555,168558,168560],{"class":86,"line":87},[84,168556,168557],{"class":477},"path ",[84,168559,523],{"class":473},[84,168561,168562],{"class":104}," \"D:\u002Fdata\u002Fdata.txt\"\n",[35,168564,168565],{},"或原始字符串：",[75,168567,168569],{"className":30705,"code":168568,"language":30707,"meta":66,"style":66},"path = r\"D:\\data\\data.txt\"\n",[81,168570,168571],{"__ignoreMap":66},[84,168572,168573,168575,168577,168579,168581,168584,168587,168590,168592,168594,168596,168599],{"class":86,"line":87},[84,168574,168557],{"class":477},[84,168576,523],{"class":473},[84,168578,17450],{"class":473},[84,168580,725],{"class":104},[84,168582,168583],{"class":48304},"D:",[84,168585,168586],{"class":94},"\\d",[84,168588,168589],{"class":48304},"ata",[84,168591,168586],{"class":94},[84,168593,168589],{"class":48304},[84,168595,1031],{"class":94},[84,168597,168598],{"class":48304},"txt",[84,168600,25461],{"class":104},[14,168602,168604],{"id":168603},"_83-open函数","8.3 open函数",[35,168606,5510],{},[75,168608,168610],{"className":30705,"code":168609,"language":30707,"meta":66,"style":66},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[81,168611,168612],{"__ignoreMap":66},[84,168613,168614,168616,168618,168620,168623,168625,168627,168629],{"class":86,"line":87},[84,168615,45681],{"class":5545},[84,168617,13893],{"class":473},[84,168619,147037],{"class":94},[84,168621,168622],{"class":477},"(文件路径, 打开模式, ",[84,168624,147052],{"class":5545},[84,168626,523],{"class":473},[84,168628,147057],{"class":104},[84,168630,484],{"class":477},[35,168632,168633],{},"常见模式：",[612,168635,168636,168645],{},[615,168637,168638],{},[618,168639,168640,168643],{},[621,168641,168642],{},"模式",[621,168644,26197],{},[659,168646,168647,168656,168665,168674,168684],{},[618,168648,168649,168653],{},[664,168650,168651],{},[81,168652,1143],{},[664,168654,168655],{},"只读，文件不存在会报错",[618,168657,168658,168662],{},[664,168659,168660],{},[81,168661,1268],{},[664,168663,168664],{},"只写，文件不存在会创建，存在会清空",[618,168666,168667,168671],{},[664,168668,168669],{},[81,168670,39],{},[664,168672,168673],{},"追加，文件不存在会创建",[618,168675,168676,168681],{},[664,168677,168678],{},[81,168679,168680],{},"rb",[664,168682,168683],{},"二进制只读",[618,168685,168686,168691],{},[664,168687,168688],{},[81,168689,168690],{},"wb",[664,168692,168693],{},"二进制只写",[14,168695,168697],{"id":168696},"_84-读取文件","8.4 读取文件",[23,168699,168701],{"id":168700},"_841-read","8.4.1 read",[35,168703,168704],{},"一次读取全部内容：",[75,168706,168708],{"className":30705,"code":168707,"language":30707,"meta":66,"style":66},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[81,168709,168710,168736,168748,168755],{"__ignoreMap":66},[84,168711,168712,168714,168716,168718,168720,168722,168724,168726,168728,168730,168732,168734],{"class":86,"line":87},[84,168713,45681],{"class":5545},[84,168715,13893],{"class":473},[84,168717,147037],{"class":94},[84,168719,478],{"class":477},[84,168721,147042],{"class":104},[84,168723,12764],{"class":477},[84,168725,147047],{"class":104},[84,168727,12764],{"class":477},[84,168729,147052],{"class":5545},[84,168731,523],{"class":473},[84,168733,147057],{"class":104},[84,168735,484],{"class":477},[84,168737,168738,168741,168743,168745],{"class":86,"line":98},[84,168739,168740],{"class":477},"content ",[84,168742,523],{"class":473},[84,168744,148399],{"class":5545},[84,168746,168747],{"class":477},".read()\n",[84,168749,168750,168752],{"class":86,"line":70},[84,168751,30742],{"class":94},[84,168753,168754],{"class":477},"(content)\n",[84,168756,168757,168759],{"class":86,"line":120},[84,168758,45681],{"class":5545},[84,168760,168761],{"class":477},".close()\n",[35,168763,168764],{},"可以指定读取字符数：",[75,168766,168768],{"className":30705,"code":168767,"language":30707,"meta":66,"style":66},"content = file.read(10)\n",[81,168769,168770],{"__ignoreMap":66},[84,168771,168772,168774,168776,168778,168781,168783],{"class":86,"line":87},[84,168773,168740],{"class":477},[84,168775,523],{"class":473},[84,168777,148399],{"class":5545},[84,168779,168780],{"class":477},".read(",[84,168782,919],{"class":94},[84,168784,484],{"class":477},[23,168786,168788],{"id":168787},"_842-readline","8.4.2 readline",[35,168790,168791],{},"一次读取一行：",[75,168793,168795],{"className":30705,"code":168794,"language":30707,"meta":66,"style":66},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[81,168796,168797,168823,168827,168838,168845,168849],{"__ignoreMap":66},[84,168798,168799,168801,168803,168805,168807,168809,168811,168813,168815,168817,168819,168821],{"class":86,"line":87},[84,168800,45681],{"class":5545},[84,168802,13893],{"class":473},[84,168804,147037],{"class":94},[84,168806,478],{"class":477},[84,168808,147042],{"class":104},[84,168810,12764],{"class":477},[84,168812,147047],{"class":104},[84,168814,12764],{"class":477},[84,168816,147052],{"class":5545},[84,168818,523],{"class":473},[84,168820,147057],{"class":104},[84,168822,484],{"class":477},[84,168824,168825],{"class":86,"line":98},[84,168826,2729],{"emptyLinePlaceholder":403},[84,168828,168829,168831,168833,168835],{"class":86,"line":70},[84,168830,147498],{"class":477},[84,168832,523],{"class":473},[84,168834,148399],{"class":5545},[84,168836,168837],{"class":477},".readline()\n",[84,168839,168840,168842],{"class":86,"line":120},[84,168841,30742],{"class":94},[84,168843,168844],{"class":477},"(line)\n",[84,168846,168847],{"class":86,"line":131},[84,168848,2729],{"emptyLinePlaceholder":403},[84,168850,168851,168853],{"class":86,"line":145},[84,168852,45681],{"class":5545},[84,168854,168761],{"class":477},[23,168856,168858],{"id":168857},"_843-readlines","8.4.3 readlines",[35,168860,168861],{},"读取所有行，返回列表：",[75,168863,168865],{"className":30705,"code":168864,"language":30707,"meta":66,"style":66},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[81,168866,168867,168893,168905,168912],{"__ignoreMap":66},[84,168868,168869,168871,168873,168875,168877,168879,168881,168883,168885,168887,168889,168891],{"class":86,"line":87},[84,168870,45681],{"class":5545},[84,168872,13893],{"class":473},[84,168874,147037],{"class":94},[84,168876,478],{"class":477},[84,168878,147042],{"class":104},[84,168880,12764],{"class":477},[84,168882,147047],{"class":104},[84,168884,12764],{"class":477},[84,168886,147052],{"class":5545},[84,168888,523],{"class":473},[84,168890,147057],{"class":104},[84,168892,484],{"class":477},[84,168894,168895,168898,168900,168902],{"class":86,"line":98},[84,168896,168897],{"class":477},"lines ",[84,168899,523],{"class":473},[84,168901,148399],{"class":5545},[84,168903,168904],{"class":477},".readlines()\n",[84,168906,168907,168909],{"class":86,"line":70},[84,168908,30742],{"class":94},[84,168910,168911],{"class":477},"(lines)\n",[84,168913,168914,168916],{"class":86,"line":120},[84,168915,45681],{"class":5545},[84,168917,168761],{"class":477},[35,168919,168920,168921,168924],{},"每一行通常带有换行符，可以用 ",[81,168922,168923],{},"strip()"," 去掉：",[75,168926,168928],{"className":30705,"code":168927,"language":30707,"meta":66,"style":66},"for line in lines:\n    print(line.strip())\n",[81,168929,168930,168942],{"__ignoreMap":66},[84,168931,168932,168934,168937,168939],{"class":86,"line":87},[84,168933,3354],{"class":473},[84,168935,168936],{"class":477}," line ",[84,168938,26371],{"class":473},[84,168940,168941],{"class":477}," lines:\n",[84,168943,168944,168946],{"class":86,"line":98},[84,168945,31626],{"class":94},[84,168947,168948],{"class":477},"(line.strip())\n",[23,168950,168952],{"id":168951},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[35,168954,168955],{},"推荐读取大文件时使用：",[75,168957,168959],{"className":30705,"code":168958,"language":30707,"meta":66,"style":66},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[81,168960,168961,168987,168991,169003,169009,169013],{"__ignoreMap":66},[84,168962,168963,168965,168967,168969,168971,168973,168975,168977,168979,168981,168983,168985],{"class":86,"line":87},[84,168964,45681],{"class":5545},[84,168966,13893],{"class":473},[84,168968,147037],{"class":94},[84,168970,478],{"class":477},[84,168972,147042],{"class":104},[84,168974,12764],{"class":477},[84,168976,147047],{"class":104},[84,168978,12764],{"class":477},[84,168980,147052],{"class":5545},[84,168982,523],{"class":473},[84,168984,147057],{"class":104},[84,168986,484],{"class":477},[84,168988,168989],{"class":86,"line":98},[84,168990,2729],{"emptyLinePlaceholder":403},[84,168992,168993,168995,168997,168999,169001],{"class":86,"line":70},[84,168994,3354],{"class":473},[84,168996,168936],{"class":477},[84,168998,26371],{"class":473},[84,169000,148399],{"class":5545},[84,169002,4068],{"class":477},[84,169004,169005,169007],{"class":86,"line":120},[84,169006,31626],{"class":94},[84,169008,168948],{"class":477},[84,169010,169011],{"class":86,"line":131},[84,169012,2729],{"emptyLinePlaceholder":403},[84,169014,169015,169017],{"class":86,"line":145},[84,169016,45681],{"class":5545},[84,169018,168761],{"class":477},[14,169020,169022],{"id":169021},"_85-with语句","8.5 with语句",[35,169024,169025,169027],{},[81,169026,108159],{}," 会自动关闭文件，推荐使用。",[75,169029,169031],{"className":30705,"code":169030,"language":30707,"meta":66,"style":66},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[81,169032,169033,169063,169073],{"__ignoreMap":66},[84,169034,169035,169037,169039,169041,169043,169045,169047,169049,169051,169053,169055,169057,169059,169061],{"class":86,"line":87},[84,169036,108159],{"class":473},[84,169038,147037],{"class":94},[84,169040,478],{"class":477},[84,169042,147042],{"class":104},[84,169044,12764],{"class":477},[84,169046,147047],{"class":104},[84,169048,12764],{"class":477},[84,169050,147052],{"class":5545},[84,169052,523],{"class":473},[84,169054,147057],{"class":104},[84,169056,14043],{"class":477},[84,169058,31710],{"class":473},[84,169060,148399],{"class":5545},[84,169062,4068],{"class":477},[84,169064,169065,169067,169069,169071],{"class":86,"line":98},[84,169066,147069],{"class":477},[84,169068,523],{"class":473},[84,169070,148399],{"class":5545},[84,169072,168747],{"class":477},[84,169074,169075,169077],{"class":86,"line":70},[84,169076,31626],{"class":94},[84,169078,168754],{"class":477},[35,169080,169081],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169083,169085],{"id":169084},"_86-写入文件","8.6 写入文件",[35,169087,169088,169090],{},[81,169089,1268],{}," 模式会清空原文件。",[75,169092,169094],{"className":30705,"code":169093,"language":30707,"meta":66,"style":66},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[81,169095,169096,169126,169143],{"__ignoreMap":66},[84,169097,169098,169100,169102,169104,169106,169108,169110,169112,169114,169116,169118,169120,169122,169124],{"class":86,"line":87},[84,169099,108159],{"class":473},[84,169101,147037],{"class":94},[84,169103,478],{"class":477},[84,169105,147042],{"class":104},[84,169107,12764],{"class":477},[84,169109,152222],{"class":104},[84,169111,12764],{"class":477},[84,169113,147052],{"class":5545},[84,169115,523],{"class":473},[84,169117,147057],{"class":104},[84,169119,14043],{"class":477},[84,169121,31710],{"class":473},[84,169123,148399],{"class":5545},[84,169125,4068],{"class":477},[84,169127,169128,169131,169134,169137,169139,169141],{"class":86,"line":98},[84,169129,169130],{"class":5545},"    file",[84,169132,169133],{"class":477},".write(",[84,169135,169136],{"class":104},"\"hello",[84,169138,156771],{"class":94},[84,169140,725],{"class":104},[84,169142,484],{"class":477},[84,169144,169145,169147,169149,169152,169154,169156],{"class":86,"line":70},[84,169146,169130],{"class":5545},[84,169148,169133],{"class":477},[84,169150,169151],{"class":104},"\"python",[84,169153,156771],{"class":94},[84,169155,725],{"class":104},[84,169157,484],{"class":477},[35,169159,169160],{},"写入多行：",[75,169162,169164],{"className":30705,"code":169163,"language":30707,"meta":66,"style":66},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[81,169165,169166,169201,169205,169236],{"__ignoreMap":66},[84,169167,169168,169170,169172,169174,169177,169179,169181,169183,169186,169188,169190,169192,169195,169197,169199],{"class":86,"line":87},[84,169169,168897],{"class":477},[84,169171,523],{"class":473},[84,169173,52553],{"class":477},[84,169175,169176],{"class":104},"\"小明,18",[84,169178,156771],{"class":94},[84,169180,725],{"class":104},[84,169182,12764],{"class":477},[84,169184,169185],{"class":104},"\"小红,17",[84,169187,156771],{"class":94},[84,169189,725],{"class":104},[84,169191,12764],{"class":477},[84,169193,169194],{"class":104},"\"小刚,19",[84,169196,156771],{"class":94},[84,169198,725],{"class":104},[84,169200,33573],{"class":477},[84,169202,169203],{"class":86,"line":98},[84,169204,2729],{"emptyLinePlaceholder":403},[84,169206,169207,169209,169211,169213,169216,169218,169220,169222,169224,169226,169228,169230,169232,169234],{"class":86,"line":70},[84,169208,108159],{"class":473},[84,169210,147037],{"class":94},[84,169212,478],{"class":477},[84,169214,169215],{"class":104},"\"students.txt\"",[84,169217,12764],{"class":477},[84,169219,152222],{"class":104},[84,169221,12764],{"class":477},[84,169223,147052],{"class":5545},[84,169225,523],{"class":473},[84,169227,147057],{"class":104},[84,169229,14043],{"class":477},[84,169231,31710],{"class":473},[84,169233,148399],{"class":5545},[84,169235,4068],{"class":477},[84,169237,169238,169240],{"class":86,"line":120},[84,169239,169130],{"class":5545},[84,169241,169242],{"class":477},".writelines(lines)\n",[14,169244,169246],{"id":169245},"_87-追加文件","8.7 追加文件",[35,169248,169249,169251],{},[81,169250,39],{}," 模式不会清空原内容，而是在末尾追加。",[75,169253,169255],{"className":30705,"code":169254,"language":30707,"meta":66,"style":66},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[81,169256,169257,169288],{"__ignoreMap":66},[84,169258,169259,169261,169263,169265,169268,169270,169272,169274,169276,169278,169280,169282,169284,169286],{"class":86,"line":87},[84,169260,108159],{"class":473},[84,169262,147037],{"class":94},[84,169264,478],{"class":477},[84,169266,169267],{"class":104},"\"log.txt\"",[84,169269,12764],{"class":477},[84,169271,165571],{"class":104},[84,169273,12764],{"class":477},[84,169275,147052],{"class":5545},[84,169277,523],{"class":473},[84,169279,147057],{"class":104},[84,169281,14043],{"class":477},[84,169283,31710],{"class":473},[84,169285,148399],{"class":5545},[84,169287,4068],{"class":477},[84,169289,169290,169292,169294,169297,169299,169301],{"class":86,"line":98},[84,169291,169130],{"class":5545},[84,169293,169133],{"class":477},[84,169295,169296],{"class":104},"\"程序启动",[84,169298,156771],{"class":94},[84,169300,725],{"class":104},[84,169302,484],{"class":477},[35,169304,169305],{},"日志类文件常用追加模式。",[14,169307,169309],{"id":169308},"_88-文件编码","8.8 文件编码",[35,169311,169312],{},"编码决定文字如何保存为字节。",[35,169314,169315],{},"常见编码：",[28,169317,169318,169321],{},[31,169319,169320],{},"UTF-8：推荐。",[31,169322,169323],{},"GBK：部分 Windows 中文文件常见。",[35,169325,169326],{},"读取文件乱码时，可以尝试：",[75,169328,169330],{"className":30705,"code":169329,"language":30707,"meta":66,"style":66},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[81,169331,169332,169363],{"__ignoreMap":66},[84,169333,169334,169336,169338,169340,169342,169344,169346,169348,169350,169352,169355,169357,169359,169361],{"class":86,"line":87},[84,169335,108159],{"class":473},[84,169337,147037],{"class":94},[84,169339,478],{"class":477},[84,169341,147042],{"class":104},[84,169343,12764],{"class":477},[84,169345,147047],{"class":104},[84,169347,12764],{"class":477},[84,169349,147052],{"class":5545},[84,169351,523],{"class":473},[84,169353,169354],{"class":104},"\"gbk\"",[84,169356,14043],{"class":477},[84,169358,31710],{"class":473},[84,169360,148399],{"class":5545},[84,169362,4068],{"class":477},[84,169364,169365,169367,169369,169371],{"class":86,"line":98},[84,169366,147069],{"class":477},[84,169368,523],{"class":473},[84,169370,148399],{"class":5545},[84,169372,168747],{"class":477},[35,169374,169375],{},"写文件时建议统一 UTF-8：",[75,169377,169379],{"className":30705,"code":169378,"language":30707,"meta":66,"style":66},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[81,169380,169381,169411],{"__ignoreMap":66},[84,169382,169383,169385,169387,169389,169391,169393,169395,169397,169399,169401,169403,169405,169407,169409],{"class":86,"line":87},[84,169384,108159],{"class":473},[84,169386,147037],{"class":94},[84,169388,478],{"class":477},[84,169390,147042],{"class":104},[84,169392,12764],{"class":477},[84,169394,152222],{"class":104},[84,169396,12764],{"class":477},[84,169398,147052],{"class":5545},[84,169400,523],{"class":473},[84,169402,147057],{"class":104},[84,169404,14043],{"class":477},[84,169406,31710],{"class":473},[84,169408,148399],{"class":5545},[84,169410,4068],{"class":477},[84,169412,169413,169415,169417,169420],{"class":86,"line":98},[84,169414,169130],{"class":5545},[84,169416,169133],{"class":477},[84,169418,169419],{"class":104},"\"中文内容\"",[84,169421,484],{"class":477},[14,169423,169425],{"id":169424},"_89-pathlib","8.9 pathlib",[35,169427,169428,169431],{},[81,169429,169430],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[75,169433,169435],{"className":30705,"code":169434,"language":30707,"meta":66,"style":66},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[81,169436,169437,169447,169451,169469],{"__ignoreMap":66},[84,169438,169439,169441,169443,169445],{"class":86,"line":87},[84,169440,31064],{"class":473},[84,169442,108637],{"class":477},[84,169444,30719],{"class":473},[84,169446,108642],{"class":477},[84,169448,169449],{"class":86,"line":98},[84,169450,2729],{"emptyLinePlaceholder":403},[84,169452,169453,169455,169457,169459,169462,169464,169466],{"class":86,"line":70},[84,169454,168557],{"class":477},[84,169456,523],{"class":473},[84,169458,108871],{"class":477},[84,169460,169461],{"class":104},"\"data\"",[84,169463,14043],{"class":477},[84,169465,1057],{"class":473},[84,169467,169468],{"class":104}," \"students.txt\"\n",[84,169470,169471,169473],{"class":86,"line":120},[84,169472,30742],{"class":94},[84,169474,169475],{"class":477},"(path)\n",[35,169477,169478],{},"创建目录：",[75,169480,169482],{"className":30705,"code":169481,"language":30707,"meta":66,"style":66},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[81,169483,169484,169494,169498,169511],{"__ignoreMap":66},[84,169485,169486,169488,169490,169492],{"class":86,"line":87},[84,169487,31064],{"class":473},[84,169489,108637],{"class":477},[84,169491,30719],{"class":473},[84,169493,108642],{"class":477},[84,169495,169496],{"class":86,"line":98},[84,169497,2729],{"emptyLinePlaceholder":403},[84,169499,169500,169503,169505,169507,169509],{"class":86,"line":70},[84,169501,169502],{"class":477},"data_dir ",[84,169504,523],{"class":473},[84,169506,108871],{"class":477},[84,169508,169461],{"class":104},[84,169510,484],{"class":477},[84,169512,169513,169516,169519,169521,169523],{"class":86,"line":120},[84,169514,169515],{"class":477},"data_dir.mkdir(",[84,169517,169518],{"class":5545},"exist_ok",[84,169520,523],{"class":473},[84,169522,31803],{"class":94},[84,169524,484],{"class":477},[35,169526,169527],{},"判断文件是否存在：",[75,169529,169531],{"className":30705,"code":169530,"language":30707,"meta":66,"style":66},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[81,169532,169533,169546,169550,169557],{"__ignoreMap":66},[84,169534,169535,169537,169539,169541,169544],{"class":86,"line":87},[84,169536,168557],{"class":477},[84,169538,523],{"class":473},[84,169540,108871],{"class":477},[84,169542,169543],{"class":104},"\"data\u002Fstudents.txt\"",[84,169545,484],{"class":477},[84,169547,169548],{"class":86,"line":98},[84,169549,2729],{"emptyLinePlaceholder":403},[84,169551,169552,169554],{"class":86,"line":70},[84,169553,1871],{"class":473},[84,169555,169556],{"class":477}," path.exists():\n",[84,169558,169559,169561,169563,169566],{"class":86,"line":120},[84,169560,31626],{"class":94},[84,169562,478],{"class":477},[84,169564,169565],{"class":104},"\"文件存在\"",[84,169567,484],{"class":477},[35,169569,169570],{},"读写文本：",[75,169572,169574],{"className":30705,"code":169573,"language":30707,"meta":66,"style":66},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[81,169575,169576,169588,169592,169609,169626],{"__ignoreMap":66},[84,169577,169578,169580,169582,169584,169586],{"class":86,"line":87},[84,169579,168557],{"class":477},[84,169581,523],{"class":473},[84,169583,108871],{"class":477},[84,169585,147042],{"class":104},[84,169587,484],{"class":477},[84,169589,169590],{"class":86,"line":98},[84,169591,2729],{"emptyLinePlaceholder":403},[84,169593,169594,169597,169599,169601,169603,169605,169607],{"class":86,"line":70},[84,169595,169596],{"class":477},"path.write_text(",[84,169598,146122],{"class":104},[84,169600,12764],{"class":477},[84,169602,147052],{"class":5545},[84,169604,523],{"class":473},[84,169606,147057],{"class":104},[84,169608,484],{"class":477},[84,169610,169611,169613,169615,169618,169620,169622,169624],{"class":86,"line":120},[84,169612,168740],{"class":477},[84,169614,523],{"class":473},[84,169616,169617],{"class":477}," path.read_text(",[84,169619,147052],{"class":5545},[84,169621,523],{"class":473},[84,169623,147057],{"class":104},[84,169625,484],{"class":477},[84,169627,169628,169630],{"class":86,"line":131},[84,169629,30742],{"class":94},[84,169631,168754],{"class":477},[14,169633,169635],{"id":169634},"_810-json文件","8.10 JSON文件",[35,169637,169638],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[75,169640,169642],{"className":30705,"code":169641,"language":30707,"meta":66,"style":66},"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",[81,169643,169644,169650,169654,169662,169672,169682,169690,169694,169698,169723],{"__ignoreMap":66},[84,169645,169646,169648],{"class":86,"line":87},[84,169647,30719],{"class":473},[84,169649,147337],{"class":477},[84,169651,169652],{"class":86,"line":98},[84,169653,2729],{"emptyLinePlaceholder":403},[84,169655,169656,169658,169660],{"class":86,"line":70},[84,169657,149727],{"class":477},[84,169659,523],{"class":473},[84,169661,15901],{"class":477},[84,169663,169664,169666,169668,169670],{"class":86,"line":120},[84,169665,147266],{"class":104},[84,169667,51764],{"class":477},[84,169669,150134],{"class":104},[84,169671,31793],{"class":477},[84,169673,169674,169676,169678,169680],{"class":86,"line":131},[84,169675,164783],{"class":104},[84,169677,51764],{"class":477},[84,169679,1123],{"class":94},[84,169681,31793],{"class":477},[84,169683,169684,169686,169688],{"class":86,"line":145},[84,169685,164794],{"class":104},[84,169687,51764],{"class":477},[84,169689,164799],{"class":94},[84,169691,169692],{"class":86,"line":156},[84,169693,1905],{"class":477},[84,169695,169696],{"class":86,"line":164},[84,169697,2729],{"emptyLinePlaceholder":403},[84,169699,169700,169702,169704,169707,169709,169711,169713,169715,169717,169719,169721],{"class":86,"line":175},[84,169701,156690],{"class":477},[84,169703,523],{"class":473},[84,169705,169706],{"class":477}," json.dumps(student, ",[84,169708,147383],{"class":5545},[84,169710,523],{"class":473},[84,169712,34314],{"class":94},[84,169714,12764],{"class":477},[84,169716,152258],{"class":5545},[84,169718,523],{"class":473},[84,169720,553],{"class":94},[84,169722,484],{"class":477},[84,169724,169725,169727],{"class":86,"line":185},[84,169726,30742],{"class":94},[84,169728,164317],{"class":477},[35,169730,169731],{},"写入 JSON 文件：",[75,169733,169735],{"className":30705,"code":169734,"language":30707,"meta":66,"style":66},"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",[81,169736,169737,169743,169747,169755,169783,169811,169815,169819,169849],{"__ignoreMap":66},[84,169738,169739,169741],{"class":86,"line":87},[84,169740,30719],{"class":473},[84,169742,147337],{"class":477},[84,169744,169745],{"class":86,"line":98},[84,169746,2729],{"emptyLinePlaceholder":403},[84,169748,169749,169751,169753],{"class":86,"line":70},[84,169750,159962],{"class":477},[84,169752,523],{"class":473},[84,169754,55773],{"class":477},[84,169756,169757,169759,169761,169763,169765,169767,169769,169771,169773,169775,169777,169779,169781],{"class":86,"line":120},[84,169758,148631],{"class":477},[84,169760,63005],{"class":104},[84,169762,51764],{"class":477},[84,169764,150134],{"class":104},[84,169766,12764],{"class":477},[84,169768,69450],{"class":104},[84,169770,51764],{"class":477},[84,169772,1123],{"class":94},[84,169774,12764],{"class":477},[84,169776,151718],{"class":104},[84,169778,51764],{"class":477},[84,169780,1462],{"class":94},[84,169782,5259],{"class":477},[84,169784,169785,169787,169789,169791,169793,169795,169797,169799,169801,169803,169805,169807,169809],{"class":86,"line":131},[84,169786,148631],{"class":477},[84,169788,63005],{"class":104},[84,169790,51764],{"class":477},[84,169792,151182],{"class":104},[84,169794,12764],{"class":477},[84,169796,69450],{"class":104},[84,169798,51764],{"class":477},[84,169800,1098],{"class":94},[84,169802,12764],{"class":477},[84,169804,151718],{"class":104},[84,169806,51764],{"class":477},[84,169808,1284],{"class":94},[84,169810,5259],{"class":477},[84,169812,169813],{"class":86,"line":145},[84,169814,33573],{"class":477},[84,169816,169817],{"class":86,"line":156},[84,169818,2729],{"emptyLinePlaceholder":403},[84,169820,169821,169823,169825,169827,169829,169831,169833,169835,169837,169839,169841,169843,169845,169847],{"class":86,"line":164},[84,169822,108159],{"class":473},[84,169824,147037],{"class":94},[84,169826,478],{"class":477},[84,169828,152077],{"class":104},[84,169830,12764],{"class":477},[84,169832,152222],{"class":104},[84,169834,12764],{"class":477},[84,169836,147052],{"class":5545},[84,169838,523],{"class":473},[84,169840,147057],{"class":104},[84,169842,14043],{"class":477},[84,169844,31710],{"class":473},[84,169846,148399],{"class":5545},[84,169848,4068],{"class":477},[84,169850,169851,169854,169856,169858,169860,169862,169864,169866,169868,169870,169872],{"class":86,"line":175},[84,169852,169853],{"class":477},"    json.dump(students, ",[84,169855,45681],{"class":5545},[84,169857,12764],{"class":477},[84,169859,147383],{"class":5545},[84,169861,523],{"class":473},[84,169863,34314],{"class":94},[84,169865,12764],{"class":477},[84,169867,152258],{"class":5545},[84,169869,523],{"class":473},[84,169871,553],{"class":94},[84,169873,484],{"class":477},[35,169875,169876],{},"读取 JSON 文件：",[75,169878,169880],{"className":30705,"code":169879,"language":30707,"meta":66,"style":66},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[81,169881,169882,169888,169892,169922,169934,169938],{"__ignoreMap":66},[84,169883,169884,169886],{"class":86,"line":87},[84,169885,30719],{"class":473},[84,169887,147337],{"class":477},[84,169889,169890],{"class":86,"line":98},[84,169891,2729],{"emptyLinePlaceholder":403},[84,169893,169894,169896,169898,169900,169902,169904,169906,169908,169910,169912,169914,169916,169918,169920],{"class":86,"line":70},[84,169895,108159],{"class":473},[84,169897,147037],{"class":94},[84,169899,478],{"class":477},[84,169901,152077],{"class":104},[84,169903,12764],{"class":477},[84,169905,147047],{"class":104},[84,169907,12764],{"class":477},[84,169909,147052],{"class":5545},[84,169911,523],{"class":473},[84,169913,147057],{"class":104},[84,169915,14043],{"class":477},[84,169917,31710],{"class":473},[84,169919,148399],{"class":5545},[84,169921,4068],{"class":477},[84,169923,169924,169926,169928,169930,169932],{"class":86,"line":120},[84,169925,153283],{"class":477},[84,169927,523],{"class":473},[84,169929,148410],{"class":477},[84,169931,45681],{"class":5545},[84,169933,484],{"class":477},[84,169935,169936],{"class":86,"line":131},[84,169937,2729],{"emptyLinePlaceholder":403},[84,169939,169940,169942],{"class":86,"line":145},[84,169941,30742],{"class":94},[84,169943,165241],{"class":477},[14,169945,169947],{"id":169946},"_811-csv文件","8.11 CSV文件",[35,169949,169950],{},"CSV 是逗号分隔值，常用于表格数据。",[35,169952,169953],{},"写入 CSV：",[75,169955,169957],{"className":30705,"code":169956,"language":30707,"meta":66,"style":66},"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",[81,169958,169959,169966,169970,169978,169996,170012,170028,170032,170036,170076,170090],{"__ignoreMap":66},[84,169960,169961,169963],{"class":86,"line":87},[84,169962,30719],{"class":473},[84,169964,169965],{"class":477}," csv\n",[84,169967,169968],{"class":86,"line":98},[84,169969,2729],{"emptyLinePlaceholder":403},[84,169971,169972,169974,169976],{"class":86,"line":70},[84,169973,159962],{"class":477},[84,169975,523],{"class":473},[84,169977,55773],{"class":477},[84,169979,169980,169983,169985,169987,169989,169991,169994],{"class":86,"line":120},[84,169981,169982],{"class":477},"    [",[84,169984,73425],{"class":104},[84,169986,12764],{"class":477},[84,169988,73458],{"class":104},[84,169990,12764],{"class":477},[84,169992,169993],{"class":104},"\"成绩\"",[84,169995,88162],{"class":477},[84,169997,169998,170000,170002,170004,170006,170008,170010],{"class":86,"line":131},[84,169999,169982],{"class":477},[84,170001,150134],{"class":104},[84,170003,12764],{"class":477},[84,170005,1123],{"class":94},[84,170007,12764],{"class":477},[84,170009,1462],{"class":94},[84,170011,88162],{"class":477},[84,170013,170014,170016,170018,170020,170022,170024,170026],{"class":86,"line":145},[84,170015,169982],{"class":477},[84,170017,151182],{"class":104},[84,170019,12764],{"class":477},[84,170021,1098],{"class":94},[84,170023,12764],{"class":477},[84,170025,1284],{"class":94},[84,170027,88162],{"class":477},[84,170029,170030],{"class":86,"line":156},[84,170031,33573],{"class":477},[84,170033,170034],{"class":86,"line":164},[84,170035,2729],{"emptyLinePlaceholder":403},[84,170037,170038,170040,170042,170044,170047,170049,170051,170053,170055,170057,170059,170061,170064,170066,170068,170070,170072,170074],{"class":86,"line":175},[84,170039,108159],{"class":473},[84,170041,147037],{"class":94},[84,170043,478],{"class":477},[84,170045,170046],{"class":104},"\"students.csv\"",[84,170048,12764],{"class":477},[84,170050,152222],{"class":104},[84,170052,12764],{"class":477},[84,170054,147052],{"class":5545},[84,170056,523],{"class":473},[84,170058,147057],{"class":104},[84,170060,12764],{"class":477},[84,170062,170063],{"class":5545},"newline",[84,170065,523],{"class":473},[84,170067,7981],{"class":104},[84,170069,14043],{"class":477},[84,170071,31710],{"class":473},[84,170073,148399],{"class":5545},[84,170075,4068],{"class":477},[84,170077,170078,170081,170083,170086,170088],{"class":86,"line":185},[84,170079,170080],{"class":477},"    writer ",[84,170082,523],{"class":473},[84,170084,170085],{"class":477}," csv.writer(",[84,170087,45681],{"class":5545},[84,170089,484],{"class":477},[84,170091,170092],{"class":86,"line":195},[84,170093,170094],{"class":477},"    writer.writerows(students)\n",[35,170096,170097],{},"读取 CSV：",[75,170099,170101],{"className":30705,"code":170100,"language":30707,"meta":66,"style":66},"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",[81,170102,170103,170109,170113,170143,170157,170169],{"__ignoreMap":66},[84,170104,170105,170107],{"class":86,"line":87},[84,170106,30719],{"class":473},[84,170108,169965],{"class":477},[84,170110,170111],{"class":86,"line":98},[84,170112,2729],{"emptyLinePlaceholder":403},[84,170114,170115,170117,170119,170121,170123,170125,170127,170129,170131,170133,170135,170137,170139,170141],{"class":86,"line":70},[84,170116,108159],{"class":473},[84,170118,147037],{"class":94},[84,170120,478],{"class":477},[84,170122,170046],{"class":104},[84,170124,12764],{"class":477},[84,170126,147047],{"class":104},[84,170128,12764],{"class":477},[84,170130,147052],{"class":5545},[84,170132,523],{"class":473},[84,170134,147057],{"class":104},[84,170136,14043],{"class":477},[84,170138,31710],{"class":473},[84,170140,148399],{"class":5545},[84,170142,4068],{"class":477},[84,170144,170145,170148,170150,170153,170155],{"class":86,"line":120},[84,170146,170147],{"class":477},"    reader ",[84,170149,523],{"class":473},[84,170151,170152],{"class":477}," csv.reader(",[84,170154,45681],{"class":5545},[84,170156,484],{"class":477},[84,170158,170159,170161,170164,170166],{"class":86,"line":131},[84,170160,3530],{"class":473},[84,170162,170163],{"class":477}," row ",[84,170165,26371],{"class":473},[84,170167,170168],{"class":477}," reader:\n",[84,170170,170171,170173],{"class":86,"line":145},[84,170172,32778],{"class":94},[84,170174,170175],{"class":477},"(row)\n",[35,170177,170178],{},"使用字典写入：",[75,170180,170182],{"className":30705,"code":170181,"language":30707,"meta":66,"style":66},"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",[81,170183,170184,170190,170194,170202,170230,170258,170262,170266,170304,170325,170346,170351],{"__ignoreMap":66},[84,170185,170186,170188],{"class":86,"line":87},[84,170187,30719],{"class":473},[84,170189,169965],{"class":477},[84,170191,170192],{"class":86,"line":98},[84,170193,2729],{"emptyLinePlaceholder":403},[84,170195,170196,170198,170200],{"class":86,"line":70},[84,170197,159962],{"class":477},[84,170199,523],{"class":473},[84,170201,55773],{"class":477},[84,170203,170204,170206,170208,170210,170212,170214,170216,170218,170220,170222,170224,170226,170228],{"class":86,"line":120},[84,170205,148631],{"class":477},[84,170207,63005],{"class":104},[84,170209,51764],{"class":477},[84,170211,150134],{"class":104},[84,170213,12764],{"class":477},[84,170215,69450],{"class":104},[84,170217,51764],{"class":477},[84,170219,1123],{"class":94},[84,170221,12764],{"class":477},[84,170223,151718],{"class":104},[84,170225,51764],{"class":477},[84,170227,1462],{"class":94},[84,170229,5259],{"class":477},[84,170231,170232,170234,170236,170238,170240,170242,170244,170246,170248,170250,170252,170254,170256],{"class":86,"line":131},[84,170233,148631],{"class":477},[84,170235,63005],{"class":104},[84,170237,51764],{"class":477},[84,170239,151182],{"class":104},[84,170241,12764],{"class":477},[84,170243,69450],{"class":104},[84,170245,51764],{"class":477},[84,170247,1098],{"class":94},[84,170249,12764],{"class":477},[84,170251,151718],{"class":104},[84,170253,51764],{"class":477},[84,170255,1284],{"class":94},[84,170257,5259],{"class":477},[84,170259,170260],{"class":86,"line":145},[84,170261,33573],{"class":477},[84,170263,170264],{"class":86,"line":156},[84,170265,2729],{"emptyLinePlaceholder":403},[84,170267,170268,170270,170272,170274,170276,170278,170280,170282,170284,170286,170288,170290,170292,170294,170296,170298,170300,170302],{"class":86,"line":164},[84,170269,108159],{"class":473},[84,170271,147037],{"class":94},[84,170273,478],{"class":477},[84,170275,170046],{"class":104},[84,170277,12764],{"class":477},[84,170279,152222],{"class":104},[84,170281,12764],{"class":477},[84,170283,147052],{"class":5545},[84,170285,523],{"class":473},[84,170287,147057],{"class":104},[84,170289,12764],{"class":477},[84,170291,170063],{"class":5545},[84,170293,523],{"class":473},[84,170295,7981],{"class":104},[84,170297,14043],{"class":477},[84,170299,31710],{"class":473},[84,170301,148399],{"class":5545},[84,170303,4068],{"class":477},[84,170305,170306,170309,170311,170313,170315,170317,170319,170321,170323],{"class":86,"line":175},[84,170307,170308],{"class":477},"    fieldnames ",[84,170310,523],{"class":473},[84,170312,52553],{"class":477},[84,170314,63005],{"class":104},[84,170316,12764],{"class":477},[84,170318,69450],{"class":104},[84,170320,12764],{"class":477},[84,170322,151718],{"class":104},[84,170324,33573],{"class":477},[84,170326,170327,170329,170331,170334,170336,170338,170341,170343],{"class":86,"line":185},[84,170328,170080],{"class":477},[84,170330,523],{"class":473},[84,170332,170333],{"class":477}," csv.DictWriter(",[84,170335,45681],{"class":5545},[84,170337,12764],{"class":477},[84,170339,170340],{"class":5545},"fieldnames",[84,170342,523],{"class":473},[84,170344,170345],{"class":477},"fieldnames)\n",[84,170347,170348],{"class":86,"line":195},[84,170349,170350],{"class":477},"    writer.writeheader()\n",[84,170352,170353],{"class":86,"line":206},[84,170354,170094],{"class":477},[14,170356,170358],{"id":170357},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[35,170360,123538],{},[28,170362,170363,170366,170369],{},[31,170364,170365],{},"读取文本文件。",[31,170367,170368],{},"统计每个单词出现次数。",[31,170370,170371],{},"输出出现次数最多的前 10 个单词。",[35,170373,10364],{},[75,170375,170377],{"className":30705,"code":170376,"language":30707,"meta":66,"style":66},"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",[81,170378,170379,170389,170393,170406,170422,170426,170436,170445,170449,170461,170481,170490,170494,170512,170516,170546,170550,170566],{"__ignoreMap":66},[84,170380,170381,170383,170385,170387],{"class":86,"line":87},[84,170382,31064],{"class":473},[84,170384,108637],{"class":477},[84,170386,30719],{"class":473},[84,170388,108642],{"class":477},[84,170390,170391],{"class":86,"line":98},[84,170392,2729],{"emptyLinePlaceholder":403},[84,170394,170395,170397,170399,170401,170404],{"class":86,"line":70},[84,170396,168557],{"class":477},[84,170398,523],{"class":473},[84,170400,108871],{"class":477},[84,170402,170403],{"class":104},"\"article.txt\"",[84,170405,484],{"class":477},[84,170407,170408,170410,170412,170414,170416,170418,170420],{"class":86,"line":120},[84,170409,168740],{"class":477},[84,170411,523],{"class":473},[84,170413,169617],{"class":477},[84,170415,147052],{"class":5545},[84,170417,523],{"class":473},[84,170419,147057],{"class":104},[84,170421,484],{"class":477},[84,170423,170424],{"class":86,"line":131},[84,170425,2729],{"emptyLinePlaceholder":403},[84,170427,170428,170431,170433],{"class":86,"line":145},[84,170429,170430],{"class":477},"words ",[84,170432,523],{"class":473},[84,170434,170435],{"class":477}," content.lower().split()\n",[84,170437,170438,170441,170443],{"class":86,"line":156},[84,170439,170440],{"class":477},"counter ",[84,170442,523],{"class":473},[84,170444,88194],{"class":477},[84,170446,170447],{"class":86,"line":164},[84,170448,2729],{"emptyLinePlaceholder":403},[84,170450,170451,170453,170456,170458],{"class":86,"line":175},[84,170452,3354],{"class":473},[84,170454,170455],{"class":477}," word ",[84,170457,26371],{"class":473},[84,170459,170460],{"class":477}," words:\n",[84,170462,170463,170466,170468,170471,170474,170476,170479],{"class":86,"line":185},[84,170464,170465],{"class":477},"    word ",[84,170467,523],{"class":473},[84,170469,170470],{"class":477}," word.strip(",[84,170472,170473],{"class":104},"\".,!?;:",[84,170475,156741],{"class":94},[84,170477,170478],{"class":104},"'()[]\"",[84,170480,484],{"class":477},[84,170482,170483,170485,170487],{"class":86,"line":195},[84,170484,3430],{"class":473},[84,170486,39257],{"class":473},[84,170488,170489],{"class":477}," word:\n",[84,170491,170492],{"class":86,"line":206},[84,170493,148758],{"class":473},[84,170495,170496,170499,170501,170504,170506,170508,170510],{"class":86,"line":217},[84,170497,170498],{"class":477},"    counter[word] ",[84,170500,523],{"class":473},[84,170502,170503],{"class":477}," counter.get(word, ",[84,170505,666],{"class":94},[84,170507,14043],{"class":477},[84,170509,954],{"class":473},[84,170511,56025],{"class":94},[84,170513,170514],{"class":86,"line":227},[84,170515,2729],{"emptyLinePlaceholder":403},[84,170517,170518,170521,170523,170525,170528,170530,170532,170534,170536,170538,170540,170542,170544],{"class":86,"line":238},[84,170519,170520],{"class":477},"items ",[84,170522,523],{"class":473},[84,170524,163850],{"class":94},[84,170526,170527],{"class":477},"(counter.items(), ",[84,170529,154192],{"class":5545},[84,170531,154195],{"class":473},[84,170533,154198],{"class":477},[84,170535,692],{"class":94},[84,170537,112528],{"class":477},[84,170539,163774],{"class":5545},[84,170541,523],{"class":473},[84,170543,31803],{"class":94},[84,170545,484],{"class":477},[84,170547,170548],{"class":86,"line":249},[84,170549,2729],{"emptyLinePlaceholder":403},[84,170551,170552,170554,170557,170559,170562,170564],{"class":86,"line":262},[84,170553,3354],{"class":473},[84,170555,170556],{"class":477}," word, count ",[84,170558,26371],{"class":473},[84,170560,170561],{"class":477}," items[:",[84,170563,919],{"class":94},[84,170565,166001],{"class":477},[84,170567,170568,170570],{"class":86,"line":273},[84,170569,31626],{"class":94},[84,170571,170572],{"class":477},"(word, count)\n",[14,170574,170576],{"id":170575},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[75,170578,170580],{"className":30705,"code":170579,"language":30707,"meta":66,"style":66},"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",[81,170581,170582,170588,170598,170602,170614,170618,170622,170630,170640,170646,170650,170680,170690,170694,170698,170706,170736,170760,170764,170768,170776,170805,170810],{"__ignoreMap":66},[84,170583,170584,170586],{"class":86,"line":87},[84,170585,30719],{"class":473},[84,170587,147337],{"class":477},[84,170589,170590,170592,170594,170596],{"class":86,"line":98},[84,170591,31064],{"class":473},[84,170593,108637],{"class":477},[84,170595,30719],{"class":473},[84,170597,108642],{"class":477},[84,170599,170600],{"class":86,"line":70},[84,170601,2729],{"emptyLinePlaceholder":403},[84,170603,170604,170606,170608,170610,170612],{"class":86,"line":120},[84,170605,152070],{"class":94},[84,170607,13893],{"class":473},[84,170609,108871],{"class":477},[84,170611,152077],{"class":104},[84,170613,484],{"class":477},[84,170615,170616],{"class":86,"line":131},[84,170617,2729],{"emptyLinePlaceholder":403},[84,170619,170620],{"class":86,"line":145},[84,170621,2729],{"emptyLinePlaceholder":403},[84,170623,170624,170626,170628],{"class":86,"line":156},[84,170625,32274],{"class":473},[84,170627,152094],{"class":90},[84,170629,32280],{"class":477},[84,170631,170632,170634,170636,170638],{"class":86,"line":164},[84,170633,3430],{"class":473},[84,170635,39257],{"class":473},[84,170637,152105],{"class":94},[84,170639,152108],{"class":477},[84,170641,170642,170644],{"class":86,"line":175},[84,170643,15081],{"class":473},[84,170645,52165],{"class":477},[84,170647,170648],{"class":86,"line":185},[84,170649,2729],{"emptyLinePlaceholder":403},[84,170651,170652,170654,170656,170658,170660,170662,170664,170666,170668,170670,170672,170674,170676,170678],{"class":86,"line":195},[84,170653,34505],{"class":473},[84,170655,147037],{"class":94},[84,170657,478],{"class":477},[84,170659,152070],{"class":94},[84,170661,12764],{"class":477},[84,170663,147047],{"class":104},[84,170665,12764],{"class":477},[84,170667,147052],{"class":5545},[84,170669,523],{"class":473},[84,170671,147057],{"class":104},[84,170673,14043],{"class":477},[84,170675,31710],{"class":473},[84,170677,148399],{"class":5545},[84,170679,4068],{"class":477},[84,170681,170682,170684,170686,170688],{"class":86,"line":206},[84,170683,15081],{"class":473},[84,170685,148410],{"class":477},[84,170687,45681],{"class":5545},[84,170689,484],{"class":477},[84,170691,170692],{"class":86,"line":217},[84,170693,2729],{"emptyLinePlaceholder":403},[84,170695,170696],{"class":86,"line":227},[84,170697,2729],{"emptyLinePlaceholder":403},[84,170699,170700,170702,170704],{"class":86,"line":238},[84,170701,32274],{"class":473},[84,170703,152204],{"class":90},[84,170705,152207],{"class":477},[84,170707,170708,170710,170712,170714,170716,170718,170720,170722,170724,170726,170728,170730,170732,170734],{"class":86,"line":249},[84,170709,34505],{"class":473},[84,170711,147037],{"class":94},[84,170713,478],{"class":477},[84,170715,152070],{"class":94},[84,170717,12764],{"class":477},[84,170719,152222],{"class":104},[84,170721,12764],{"class":477},[84,170723,147052],{"class":5545},[84,170725,523],{"class":473},[84,170727,147057],{"class":104},[84,170729,14043],{"class":477},[84,170731,31710],{"class":473},[84,170733,148399],{"class":5545},[84,170735,4068],{"class":477},[84,170737,170738,170740,170742,170744,170746,170748,170750,170752,170754,170756,170758],{"class":86,"line":262},[84,170739,152243],{"class":477},[84,170741,45681],{"class":5545},[84,170743,12764],{"class":477},[84,170745,147383],{"class":5545},[84,170747,523],{"class":473},[84,170749,34314],{"class":94},[84,170751,12764],{"class":477},[84,170753,152258],{"class":5545},[84,170755,523],{"class":473},[84,170757,553],{"class":94},[84,170759,484],{"class":477},[84,170761,170762],{"class":86,"line":273},[84,170763,2729],{"emptyLinePlaceholder":403},[84,170765,170766],{"class":86,"line":283},[84,170767,2729],{"emptyLinePlaceholder":403},[84,170769,170770,170772,170774],{"class":86,"line":294},[84,170771,159962],{"class":477},[84,170773,523],{"class":473},[84,170775,153288],{"class":477},[84,170777,170778,170781,170783,170785,170787,170789,170791,170793,170795,170797,170799,170801,170803],{"class":86,"line":2028},[84,170779,170780],{"class":477},"students.append({",[84,170782,63005],{"class":104},[84,170784,51764],{"class":477},[84,170786,150134],{"class":104},[84,170788,12764],{"class":477},[84,170790,69450],{"class":104},[84,170792,51764],{"class":477},[84,170794,1123],{"class":94},[84,170796,12764],{"class":477},[84,170798,151718],{"class":104},[84,170800,51764],{"class":477},[84,170802,1462],{"class":94},[84,170804,165398],{"class":477},[84,170806,170807],{"class":86,"line":2057},[84,170808,170809],{"class":477},"save_students(students)\n",[84,170811,170812,170814,170816,170819],{"class":86,"line":2062},[84,170813,30742],{"class":94},[84,170815,478],{"class":477},[84,170817,170818],{"class":104},"\"保存成功\"",[84,170820,484],{"class":477},[14,170822,170824],{"id":170823},"_814-易错点","8.14 易错点",[28,170826,170827,170831,170837,170842,170849,170856],{},[31,170828,170829,169090],{},[81,170830,1268],{},[31,170832,170833,170834,28712],{},"读写中文要指定 ",[81,170835,170836],{},"encoding=\"utf-8\"",[31,170838,170839,170840,28712],{},"打开文件后要关闭，推荐使用 ",[81,170841,108159],{},[31,170843,170844,170845,170848],{},"读取大文件不要直接 ",[81,170846,170847],{},"read()"," 全部内容。",[31,170850,170851,170852,170855],{},"Windows 写 CSV 时建议加 ",[81,170853,170854],{},"newline=\"\"","，避免空行。",[31,170857,170858],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170860,170862],{"id":170861},"_815-本章练习","8.15 本章练习",[28,170864,170865,170872,170877,170880,170883],{},[31,170866,170867,170868,170871],{},"写入一个 ",[81,170869,170870],{},"students.txt","，每行保存一个学生姓名。",[31,170873,104681,170874,170876],{},[81,170875,170870],{}," 并输出所有学生。",[31,170878,170879],{},"把学生列表保存为 JSON 文件。",[31,170881,170882],{},"从 JSON 文件读取学生数据，计算平均分。",[31,170884,170885,170886,170889,170890,170893],{},"写一个日志函数 ",[81,170887,170888],{},"write_log(message)","，每次调用向 ",[81,170891,170892],{},"app.log"," 追加一行。",[389,170895,170896],{},"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":66,"searchDepth":98,"depth":98,"links":170898},[170899,170900,170904,170905,170911,170912,170913,170914,170915,170916,170917,170918,170919,170920,170921],{"id":168410,"depth":98,"text":168411},{"id":168451,"depth":98,"text":168452,"children":170901},[170902,170903],{"id":168455,"depth":70,"text":168456},{"id":168489,"depth":70,"text":168490},{"id":168603,"depth":98,"text":168604},{"id":168696,"depth":98,"text":168697,"children":170906},[170907,170908,170909,170910],{"id":168700,"depth":70,"text":168701},{"id":168787,"depth":70,"text":168788},{"id":168857,"depth":70,"text":168858},{"id":168951,"depth":70,"text":168952},{"id":169021,"depth":98,"text":169022},{"id":169084,"depth":98,"text":169085},{"id":169245,"depth":98,"text":169246},{"id":169308,"depth":98,"text":169309},{"id":169424,"depth":98,"text":169425},{"id":169634,"depth":98,"text":169635},{"id":169946,"depth":98,"text":169947},{"id":170357,"depth":98,"text":170358},{"id":170575,"depth":98,"text":170576},{"id":170823,"depth":98,"text":170824},{"id":170861,"depth":98,"text":170862},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168402,"description":400},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170928,"title":170929,"body":170930,"description":400,"extension":401,"meta":173116,"navigation":403,"path":173117,"seo":173118,"stem":173119,"__hash__":173120},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170931,"toc":173083},[170932,170935,170939,170942,170945,171037,171039,171058,171063,171067,171070,171073,171102,171109,171112,171116,171119,171148,171150,171202,171208,171261,171265,171363,171366,171433,171437,171494,171496,171502,171506,171511,171517,171608,171613,171617,171620,171698,171701,171739,171743,171861,171864,171868,171871,171916,171919,171923,171928,171934,171984,171987,172018,172022,172026,172056,172060,172095,172099,172134,172174,172178,172194,172197,172201,172205,172284,172288,172329,172333,172388,172392,172426,172430,172460,172469,172476,172482,172539,172542,172550,172553,172557,172564,172567,172573,172576,172593,172598,172602,172608,172621,172624,172661,172664,172675,172678,172692,172695,172709,172713,172720,172753,172756,172758,172764,172767,172771,172773,172779,172784,172957,172961,173024,173028,173052,173056,173080],[10,170933,170929],{"id":170934},"_9-异常模块与包",[14,170936,170938],{"id":170937},"_91-什么是异常","9.1 什么是异常",[35,170940,170941],{},"异常是程序运行过程中出现的错误。",[35,170943,170944],{},"常见异常：",[612,170946,170947,170956],{},[615,170948,170949],{},[618,170950,170951,170954],{},[621,170952,170953],{},"异常",[621,170955,26197],{},[659,170957,170958,170968,170978,170987,170997,171007,171017,171027],{},[618,170959,170960,170965],{},[664,170961,170962],{},[81,170963,170964],{},"NameError",[664,170966,170967],{},"使用了未定义变量",[618,170969,170970,170975],{},[664,170971,170972],{},[81,170973,170974],{},"TypeError",[664,170976,170977],{},"类型不匹配",[618,170979,170980,170984],{},[664,170981,170982],{},[81,170983,155080],{},[664,170985,170986],{},"值不合法",[618,170988,170989,170994],{},[664,170990,170991],{},[81,170992,170993],{},"IndexError",[664,170995,170996],{},"列表索引越界",[618,170998,170999,171004],{},[664,171000,171001],{},[81,171002,171003],{},"KeyError",[664,171005,171006],{},"字典 key 不存在",[618,171008,171009,171014],{},[664,171010,171011],{},[81,171012,171013],{},"FileNotFoundError",[664,171015,171016],{},"文件不存在",[618,171018,171019,171024],{},[664,171020,171021],{},[81,171022,171023],{},"ZeroDivisionError",[664,171025,171026],{},"除数为 0",[618,171028,171029,171034],{},[664,171030,171031],{},[81,171032,171033],{},"ImportError",[664,171035,171036],{},"导入失败",[35,171038,15464],{},[75,171040,171042],{"className":30705,"code":171041,"language":30707,"meta":66,"style":66},"num = int(\"abc\")\n",[81,171043,171044],{"__ignoreMap":66},[84,171045,171046,171048,171050,171052,171054,171056],{"class":86,"line":87},[84,171047,156033],{"class":477},[84,171049,523],{"class":473},[84,171051,2711],{"class":94},[84,171053,478],{"class":477},[84,171055,156126],{"class":104},[84,171057,484],{"class":477},[35,171059,171060,171061,28712],{},"会触发 ",[81,171062,155080],{},[14,171064,171066],{"id":171065},"_92-为什么要处理异常","9.2 为什么要处理异常",[35,171068,171069],{},"如果不处理异常，程序会直接终止。",[35,171071,171072],{},"例如用户输入年龄：",[75,171074,171076],{"className":30705,"code":171075,"language":30707,"meta":66,"style":66},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[81,171077,171078,171096],{"__ignoreMap":66},[84,171079,171080,171082,171084,171086,171088,171090,171092,171094],{"class":86,"line":87},[84,171081,146792],{"class":477},[84,171083,523],{"class":473},[84,171085,2711],{"class":94},[84,171087,478],{"class":477},[84,171089,54147],{"class":94},[84,171091,478],{"class":477},[84,171093,152640],{"class":104},[84,171095,30824],{"class":477},[84,171097,171098,171100],{"class":86,"line":98},[84,171099,30742],{"class":94},[84,171101,156007],{"class":477},[35,171103,171104,171105,171108],{},"用户输入 ",[81,171106,171107],{},"abc","，程序就会报错退出。",[35,171110,171111],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171113,171115],{"id":171114},"_93-try-except","9.3 try except",[35,171117,171118],{},"基础语法：",[75,171120,171122],{"className":30705,"code":171121,"language":30707,"meta":66,"style":66},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[81,171123,171124,171131,171136,171143],{"__ignoreMap":66},[84,171125,171126,171129],{"class":86,"line":87},[84,171127,171128],{"class":473},"try",[84,171130,4068],{"class":477},[84,171132,171133],{"class":86,"line":98},[84,171134,171135],{"class":477},"    可能出错的代码\n",[84,171137,171138,171141],{"class":86,"line":70},[84,171139,171140],{"class":473},"except",[84,171142,4068],{"class":477},[84,171144,171145],{"class":86,"line":120},[84,171146,171147],{"class":477},"    出错后的处理代码\n",[35,171149,15464],{},[75,171151,171153],{"className":30705,"code":171152,"language":30707,"meta":66,"style":66},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[81,171154,171155,171161,171179,171185,171191],{"__ignoreMap":66},[84,171156,171157,171159],{"class":86,"line":87},[84,171158,171128],{"class":473},[84,171160,4068],{"class":477},[84,171162,171163,171165,171167,171169,171171,171173,171175,171177],{"class":86,"line":98},[84,171164,152632],{"class":477},[84,171166,523],{"class":473},[84,171168,2711],{"class":94},[84,171170,478],{"class":477},[84,171172,54147],{"class":94},[84,171174,478],{"class":477},[84,171176,152640],{"class":104},[84,171178,30824],{"class":477},[84,171180,171181,171183],{"class":86,"line":70},[84,171182,31626],{"class":94},[84,171184,156007],{"class":477},[84,171186,171187,171189],{"class":86,"line":120},[84,171188,171140],{"class":473},[84,171190,4068],{"class":477},[84,171192,171193,171195,171197,171200],{"class":86,"line":131},[84,171194,31626],{"class":94},[84,171196,478],{"class":477},[84,171198,171199],{"class":104},"\"年龄必须是数字\"",[84,171201,484],{"class":477},[35,171203,171204,171205,171207],{},"不建议裸写 ",[81,171206,171140],{},"，最好指定异常类型。",[75,171209,171211],{"className":30705,"code":171210,"language":30707,"meta":66,"style":66},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[81,171212,171213,171219,171237,171243,171251],{"__ignoreMap":66},[84,171214,171215,171217],{"class":86,"line":87},[84,171216,171128],{"class":473},[84,171218,4068],{"class":477},[84,171220,171221,171223,171225,171227,171229,171231,171233,171235],{"class":86,"line":98},[84,171222,152632],{"class":477},[84,171224,523],{"class":473},[84,171226,2711],{"class":94},[84,171228,478],{"class":477},[84,171230,54147],{"class":94},[84,171232,478],{"class":477},[84,171234,152640],{"class":104},[84,171236,30824],{"class":477},[84,171238,171239,171241],{"class":86,"line":70},[84,171240,31626],{"class":94},[84,171242,156007],{"class":477},[84,171244,171245,171247,171249],{"class":86,"line":120},[84,171246,171140],{"class":473},[84,171248,152472],{"class":94},[84,171250,4068],{"class":477},[84,171252,171253,171255,171257,171259],{"class":86,"line":131},[84,171254,31626],{"class":94},[84,171256,478],{"class":477},[84,171258,171199],{"class":104},[84,171260,484],{"class":477},[14,171262,171264],{"id":171263},"_94-捕获多个异常","9.4 捕获多个异常",[75,171266,171268],{"className":30705,"code":171267,"language":30707,"meta":66,"style":66},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[81,171269,171270,171276,171297,171317,171324,171332,171343,171352],{"__ignoreMap":66},[84,171271,171272,171274],{"class":86,"line":87},[84,171273,171128],{"class":473},[84,171275,4068],{"class":477},[84,171277,171278,171281,171283,171285,171287,171289,171291,171293,171295],{"class":86,"line":98},[84,171279,171280],{"class":477},"    nums ",[84,171282,523],{"class":473},[84,171284,52553],{"class":477},[84,171286,692],{"class":94},[84,171288,12764],{"class":477},[84,171290,553],{"class":94},[84,171292,12764],{"class":477},[84,171294,547],{"class":94},[84,171296,33573],{"class":477},[84,171298,171299,171302,171304,171306,171308,171310,171312,171315],{"class":86,"line":70},[84,171300,171301],{"class":477},"    index ",[84,171303,523],{"class":473},[84,171305,2711],{"class":94},[84,171307,478],{"class":477},[84,171309,54147],{"class":94},[84,171311,478],{"class":477},[84,171313,171314],{"class":104},"\"请输入索引:\"",[84,171316,30824],{"class":477},[84,171318,171319,171321],{"class":86,"line":120},[84,171320,31626],{"class":94},[84,171322,171323],{"class":477},"(nums[index])\n",[84,171325,171326,171328,171330],{"class":86,"line":131},[84,171327,171140],{"class":473},[84,171329,152472],{"class":94},[84,171331,4068],{"class":477},[84,171333,171334,171336,171338,171341],{"class":86,"line":145},[84,171335,31626],{"class":94},[84,171337,478],{"class":477},[84,171339,171340],{"class":104},"\"索引必须是整数\"",[84,171342,484],{"class":477},[84,171344,171345,171347,171350],{"class":86,"line":156},[84,171346,171140],{"class":473},[84,171348,171349],{"class":94}," IndexError",[84,171351,4068],{"class":477},[84,171353,171354,171356,171358,171361],{"class":86,"line":164},[84,171355,31626],{"class":94},[84,171357,478],{"class":477},[84,171359,171360],{"class":104},"\"索引越界\"",[84,171362,484],{"class":477},[35,171364,171365],{},"多个异常使用相同处理逻辑：",[75,171367,171369],{"className":30705,"code":171368,"language":30707,"meta":66,"style":66},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[81,171370,171371,171377,171395,171408,171422],{"__ignoreMap":66},[84,171372,171373,171375],{"class":86,"line":87},[84,171374,171128],{"class":473},[84,171376,4068],{"class":477},[84,171378,171379,171381,171383,171385,171387,171389,171391,171393],{"class":86,"line":98},[84,171380,45920],{"class":477},[84,171382,523],{"class":473},[84,171384,2711],{"class":94},[84,171386,478],{"class":477},[84,171388,54147],{"class":94},[84,171390,478],{"class":477},[84,171392,156042],{"class":104},[84,171394,30824],{"class":477},[84,171396,171397,171399,171401,171403,171405],{"class":86,"line":70},[84,171398,31626],{"class":94},[84,171400,478],{"class":477},[84,171402,919],{"class":94},[84,171404,156292],{"class":473},[84,171406,171407],{"class":477}," num)\n",[84,171409,171410,171412,171414,171416,171418,171420],{"class":86,"line":120},[84,171411,171140],{"class":473},[84,171413,1991],{"class":477},[84,171415,155080],{"class":94},[84,171417,12764],{"class":477},[84,171419,171023],{"class":94},[84,171421,31113],{"class":477},[84,171423,171424,171426,171428,171431],{"class":86,"line":131},[84,171425,31626],{"class":94},[84,171427,478],{"class":477},[84,171429,171430],{"class":104},"\"输入不合法\"",[84,171432,484],{"class":477},[14,171434,171436],{"id":171435},"_95-获取异常信息","9.5 获取异常信息",[75,171438,171440],{"className":30705,"code":171439,"language":30707,"meta":66,"style":66},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[81,171441,171442,171448,171462,171473],{"__ignoreMap":66},[84,171443,171444,171446],{"class":86,"line":87},[84,171445,171128],{"class":473},[84,171447,4068],{"class":477},[84,171449,171450,171452,171454,171456,171458,171460],{"class":86,"line":98},[84,171451,45920],{"class":477},[84,171453,523],{"class":473},[84,171455,2711],{"class":94},[84,171457,478],{"class":477},[84,171459,156126],{"class":104},[84,171461,484],{"class":477},[84,171463,171464,171466,171468,171470],{"class":86,"line":70},[84,171465,171140],{"class":473},[84,171467,152472],{"class":94},[84,171469,64930],{"class":473},[84,171471,171472],{"class":477}," e:\n",[84,171474,171475,171477,171479,171481,171484,171486,171488,171490,171492],{"class":86,"line":120},[84,171476,31626],{"class":94},[84,171478,478],{"class":477},[84,171480,529],{"class":473},[84,171482,171483],{"class":104},"\"出错了:",[84,171485,1369],{"class":94},[84,171487,550],{"class":477},[84,171489,1419],{"class":94},[84,171491,725],{"class":104},[84,171493,484],{"class":477},[35,171495,146703],{},[75,171497,171500],{"className":171498,"code":171499,"language":5516,"meta":66},[5514],"出错了:invalid literal for int() with base 10: 'abc'\n",[81,171501,171499],{"__ignoreMap":66},[14,171503,171505],{"id":171504},"_96-else和finally","9.6 else和finally",[35,171507,171508,171510],{},[81,171509,2031],{},"：没有异常时执行。",[35,171512,171513,171516],{},[81,171514,171515],{},"finally","：无论是否异常都会执行。",[75,171518,171520],{"className":30705,"code":171519,"language":30707,"meta":66,"style":66},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[81,171521,171522,171528,171546,171554,171564,171570,171591,171597],{"__ignoreMap":66},[84,171523,171524,171526],{"class":86,"line":87},[84,171525,171128],{"class":473},[84,171527,4068],{"class":477},[84,171529,171530,171532,171534,171536,171538,171540,171542,171544],{"class":86,"line":98},[84,171531,45920],{"class":477},[84,171533,523],{"class":473},[84,171535,2711],{"class":94},[84,171537,478],{"class":477},[84,171539,54147],{"class":94},[84,171541,478],{"class":477},[84,171543,156042],{"class":104},[84,171545,30824],{"class":477},[84,171547,171548,171550,171552],{"class":86,"line":70},[84,171549,171140],{"class":473},[84,171551,152472],{"class":94},[84,171553,4068],{"class":477},[84,171555,171556,171558,171560,171562],{"class":86,"line":120},[84,171557,31626],{"class":94},[84,171559,478],{"class":477},[84,171561,153460],{"class":104},[84,171563,484],{"class":477},[84,171565,171566,171568],{"class":86,"line":131},[84,171567,2031],{"class":473},[84,171569,4068],{"class":477},[84,171571,171572,171574,171576,171578,171581,171583,171585,171587,171589],{"class":86,"line":145},[84,171573,31626],{"class":94},[84,171575,478],{"class":477},[84,171577,529],{"class":473},[84,171579,171580],{"class":104},"\"输入正确:",[84,171582,1369],{"class":94},[84,171584,1998],{"class":477},[84,171586,1419],{"class":94},[84,171588,725],{"class":104},[84,171590,484],{"class":477},[84,171592,171593,171595],{"class":86,"line":156},[84,171594,171515],{"class":473},[84,171596,4068],{"class":477},[84,171598,171599,171601,171603,171606],{"class":86,"line":164},[84,171600,31626],{"class":94},[84,171602,478],{"class":477},[84,171604,171605],{"class":104},"\"程序结束\"",[84,171607,484],{"class":477},[35,171609,171610,171612],{},[81,171611,171515],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171614,171616],{"id":171615},"_97-抛出异常","9.7 抛出异常",[35,171618,171619],{},"程序可以主动抛出异常。",[75,171621,171623],{"className":30705,"code":171622,"language":30707,"meta":66,"style":66},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[81,171624,171625,171634,171646,171659,171679,171683,171687],{"__ignoreMap":66},[84,171626,171627,171629,171632],{"class":86,"line":87},[84,171628,32274],{"class":473},[84,171630,171631],{"class":90}," set_age",[84,171633,161661],{"class":477},[84,171635,171636,171638,171640,171642,171644],{"class":86,"line":98},[84,171637,3430],{"class":473},[84,171639,16036],{"class":477},[84,171641,1383],{"class":473},[84,171643,4422],{"class":94},[84,171645,4068],{"class":477},[84,171647,171648,171650,171652,171654,171657],{"class":86,"line":70},[84,171649,103758],{"class":473},[84,171651,152472],{"class":94},[84,171653,478],{"class":477},[84,171655,171656],{"class":104},"\"年龄不能为负数\"",[84,171658,484],{"class":477},[84,171660,171661,171663,171665,171667,171669,171671,171673,171675,171677],{"class":86,"line":120},[84,171662,31626],{"class":94},[84,171664,478],{"class":477},[84,171666,529],{"class":473},[84,171668,162229],{"class":104},[84,171670,1369],{"class":94},[84,171672,70547],{"class":477},[84,171674,1419],{"class":94},[84,171676,725],{"class":104},[84,171678,484],{"class":477},[84,171680,171681],{"class":86,"line":131},[84,171682,2729],{"emptyLinePlaceholder":403},[84,171684,171685],{"class":86,"line":145},[84,171686,2729],{"emptyLinePlaceholder":403},[84,171688,171689,171692,171694,171696],{"class":86,"line":156},[84,171690,171691],{"class":477},"set_age(",[84,171693,1005],{"class":473},[84,171695,692],{"class":94},[84,171697,484],{"class":477},[35,171699,171700],{},"调用者可以捕获：",[75,171702,171704],{"className":30705,"code":171703,"language":30707,"meta":66,"style":66},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[81,171705,171706,171712,171723,171733],{"__ignoreMap":66},[84,171707,171708,171710],{"class":86,"line":87},[84,171709,171128],{"class":473},[84,171711,4068],{"class":477},[84,171713,171714,171717,171719,171721],{"class":86,"line":98},[84,171715,171716],{"class":477},"    set_age(",[84,171718,1005],{"class":473},[84,171720,692],{"class":94},[84,171722,484],{"class":477},[84,171724,171725,171727,171729,171731],{"class":86,"line":70},[84,171726,171140],{"class":473},[84,171728,152472],{"class":94},[84,171730,64930],{"class":473},[84,171732,171472],{"class":477},[84,171734,171735,171737],{"class":86,"line":120},[84,171736,31626],{"class":94},[84,171738,67325],{"class":477},[14,171740,171742],{"id":171741},"_98-自定义异常","9.8 自定义异常",[75,171744,171746],{"className":30705,"code":171745,"language":30707,"meta":66,"style":66},"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",[81,171747,171748,171762,171766,171770,171774,171782,171792,171803,171813,171817,171821,171827,171844,171855],{"__ignoreMap":66},[84,171749,171750,171752,171755,171757,171760],{"class":86,"line":87},[84,171751,15023],{"class":473},[84,171753,171754],{"class":90}," BalanceNotEnoughError",[84,171756,478],{"class":477},[84,171758,171759],{"class":94},"Exception",[84,171761,31113],{"class":477},[84,171763,171764],{"class":86,"line":98},[84,171765,149783],{"class":473},[84,171767,171768],{"class":86,"line":70},[84,171769,2729],{"emptyLinePlaceholder":403},[84,171771,171772],{"class":86,"line":120},[84,171773,2729],{"emptyLinePlaceholder":403},[84,171775,171776,171778,171780],{"class":86,"line":131},[84,171777,32274],{"class":473},[84,171779,150432],{"class":90},[84,171781,163058],{"class":477},[84,171783,171784,171786,171788,171790],{"class":86,"line":145},[84,171785,3430],{"class":473},[84,171787,150388],{"class":477},[84,171789,1433],{"class":473},[84,171791,162835],{"class":477},[84,171793,171794,171796,171799,171801],{"class":86,"line":156},[84,171795,103758],{"class":473},[84,171797,171798],{"class":477}," BalanceNotEnoughError(",[84,171800,150483],{"class":104},[84,171802,484],{"class":477},[84,171804,171805,171807,171809,171811],{"class":86,"line":164},[84,171806,4419],{"class":473},[84,171808,163065],{"class":477},[84,171810,1005],{"class":473},[84,171812,150421],{"class":477},[84,171814,171815],{"class":86,"line":175},[84,171816,2729],{"emptyLinePlaceholder":403},[84,171818,171819],{"class":86,"line":185},[84,171820,2729],{"emptyLinePlaceholder":403},[84,171822,171823,171825],{"class":86,"line":195},[84,171824,171128],{"class":473},[84,171826,4068],{"class":477},[84,171828,171829,171831,171833,171836,171838,171840,171842],{"class":86,"line":206},[84,171830,162736],{"class":477},[84,171832,523],{"class":473},[84,171834,171835],{"class":477}," withdraw(",[84,171837,784],{"class":94},[84,171839,12764],{"class":477},[84,171841,2052],{"class":94},[84,171843,484],{"class":477},[84,171845,171846,171848,171851,171853],{"class":86,"line":217},[84,171847,171140],{"class":473},[84,171849,171850],{"class":477}," BalanceNotEnoughError ",[84,171852,31710],{"class":473},[84,171854,171472],{"class":477},[84,171856,171857,171859],{"class":86,"line":227},[84,171858,31626],{"class":94},[84,171860,67325],{"class":477},[35,171862,171863],{},"入门阶段大多数情况使用内置异常即可。",[14,171865,171867],{"id":171866},"_99-traceback","9.9 traceback",[35,171869,171870],{},"调试时可以输出完整异常堆栈。",[75,171872,171874],{"className":30705,"code":171873,"language":30707,"meta":66,"style":66},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[81,171875,171876,171883,171887,171893,171903,171911],{"__ignoreMap":66},[84,171877,171878,171880],{"class":86,"line":87},[84,171879,30719],{"class":473},[84,171881,171882],{"class":477}," traceback\n",[84,171884,171885],{"class":86,"line":98},[84,171886,2729],{"emptyLinePlaceholder":403},[84,171888,171889,171891],{"class":86,"line":70},[84,171890,171128],{"class":473},[84,171892,4068],{"class":477},[84,171894,171895,171897,171899,171901],{"class":86,"line":120},[84,171896,2314],{"class":94},[84,171898,478],{"class":477},[84,171900,156126],{"class":104},[84,171902,484],{"class":477},[84,171904,171905,171907,171909],{"class":86,"line":131},[84,171906,171140],{"class":473},[84,171908,152472],{"class":94},[84,171910,4068],{"class":477},[84,171912,171913],{"class":86,"line":145},[84,171914,171915],{"class":477},"    traceback.print_exc()\n",[35,171917,171918],{},"日志系统中常把异常堆栈记录到文件。",[14,171920,171922],{"id":171921},"_910-什么是模块","9.10 什么是模块",[35,171924,171925,171926,126229],{},"模块就是一个 ",[81,171927,146598],{},[35,171929,171930,171931,24947],{},"例如创建 ",[81,171932,171933],{},"my_math.py",[75,171935,171937],{"className":30705,"code":171936,"language":30707,"meta":66,"style":66},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[81,171938,171939,171947,171957,171961,171965,171974],{"__ignoreMap":66},[84,171940,171941,171943,171945],{"class":86,"line":87},[84,171942,32274],{"class":473},[84,171944,5538],{"class":90},[84,171946,151339],{"class":477},[84,171948,171949,171951,171953,171955],{"class":86,"line":98},[84,171950,4419],{"class":473},[84,171952,11198],{"class":477},[84,171954,954],{"class":473},[84,171956,151350],{"class":477},[84,171958,171959],{"class":86,"line":70},[84,171960,2729],{"emptyLinePlaceholder":403},[84,171962,171963],{"class":86,"line":120},[84,171964,2729],{"emptyLinePlaceholder":403},[84,171966,171967,171969,171972],{"class":86,"line":131},[84,171968,32274],{"class":473},[84,171970,171971],{"class":90}," sub",[84,171973,151339],{"class":477},[84,171975,171976,171978,171980,171982],{"class":86,"line":145},[84,171977,4419],{"class":473},[84,171979,11198],{"class":477},[84,171981,1005],{"class":473},[84,171983,151350],{"class":477},[35,171985,171986],{},"在另一个文件中导入：",[75,171988,171990],{"className":30705,"code":171989,"language":30707,"meta":66,"style":66},"import my_math\n\nprint(my_math.add(1, 2))\n",[81,171991,171992,171999,172003],{"__ignoreMap":66},[84,171993,171994,171996],{"class":86,"line":87},[84,171995,30719],{"class":473},[84,171997,171998],{"class":477}," my_math\n",[84,172000,172001],{"class":86,"line":98},[84,172002,2729],{"emptyLinePlaceholder":403},[84,172004,172005,172007,172010,172012,172014,172016],{"class":86,"line":70},[84,172006,30742],{"class":94},[84,172008,172009],{"class":477},"(my_math.add(",[84,172011,692],{"class":94},[84,172013,12764],{"class":477},[84,172015,553],{"class":94},[84,172017,30824],{"class":477},[14,172019,172021],{"id":172020},"_911-import导入","9.11 import导入",[23,172023,172025],{"id":172024},"_9111-导入模块","9.11.1 导入模块",[75,172027,172029],{"className":30705,"code":172028,"language":30707,"meta":66,"style":66},"import random\n\nprint(random.randint(1, 10))\n",[81,172030,172031,172037,172041],{"__ignoreMap":66},[84,172032,172033,172035],{"class":86,"line":87},[84,172034,30719],{"class":473},[84,172036,45655],{"class":477},[84,172038,172039],{"class":86,"line":98},[84,172040,2729],{"emptyLinePlaceholder":403},[84,172042,172043,172045,172048,172050,172052,172054],{"class":86,"line":70},[84,172044,30742],{"class":94},[84,172046,172047],{"class":477},"(random.randint(",[84,172049,692],{"class":94},[84,172051,12764],{"class":477},[84,172053,919],{"class":94},[84,172055,30824],{"class":477},[23,172057,172059],{"id":172058},"_9112-导入指定内容","9.11.2 导入指定内容",[75,172061,172063],{"className":30705,"code":172062,"language":30707,"meta":66,"style":66},"from random import randint\n\nprint(randint(1, 10))\n",[81,172064,172065,172076,172080],{"__ignoreMap":66},[84,172066,172067,172069,172071,172073],{"class":86,"line":87},[84,172068,31064],{"class":473},[84,172070,58122],{"class":477},[84,172072,30719],{"class":473},[84,172074,172075],{"class":477}," randint\n",[84,172077,172078],{"class":86,"line":98},[84,172079,2729],{"emptyLinePlaceholder":403},[84,172081,172082,172084,172087,172089,172091,172093],{"class":86,"line":70},[84,172083,30742],{"class":94},[84,172085,172086],{"class":477},"(randint(",[84,172088,692],{"class":94},[84,172090,12764],{"class":477},[84,172092,919],{"class":94},[84,172094,30824],{"class":477},[23,172096,172098],{"id":172097},"_9113-起别名","9.11.3 起别名",[75,172100,172102],{"className":30705,"code":172101,"language":30707,"meta":66,"style":66},"import random as rd\n\nprint(rd.randint(1, 10))\n",[81,172103,172104,172115,172119],{"__ignoreMap":66},[84,172105,172106,172108,172110,172112],{"class":86,"line":87},[84,172107,30719],{"class":473},[84,172109,58122],{"class":477},[84,172111,31710],{"class":473},[84,172113,172114],{"class":477}," rd\n",[84,172116,172117],{"class":86,"line":98},[84,172118,2729],{"emptyLinePlaceholder":403},[84,172120,172121,172123,172126,172128,172130,172132],{"class":86,"line":70},[84,172122,30742],{"class":94},[84,172124,172125],{"class":477},"(rd.randint(",[84,172127,692],{"class":94},[84,172129,12764],{"class":477},[84,172131,919],{"class":94},[84,172133,30824],{"class":477},[75,172135,172137],{"className":30705,"code":172136,"language":30707,"meta":66,"style":66},"from random import randint as rint\n\nprint(rint(1, 10))\n",[81,172138,172139,172155,172159],{"__ignoreMap":66},[84,172140,172141,172143,172145,172147,172150,172152],{"class":86,"line":87},[84,172142,31064],{"class":473},[84,172144,58122],{"class":477},[84,172146,30719],{"class":473},[84,172148,172149],{"class":477}," randint ",[84,172151,31710],{"class":473},[84,172153,172154],{"class":477}," rint\n",[84,172156,172157],{"class":86,"line":98},[84,172158,2729],{"emptyLinePlaceholder":403},[84,172160,172161,172163,172166,172168,172170,172172],{"class":86,"line":70},[84,172162,30742],{"class":94},[84,172164,172165],{"class":477},"(rint(",[84,172167,692],{"class":94},[84,172169,12764],{"class":477},[84,172171,919],{"class":94},[84,172173,30824],{"class":477},[23,172175,172177],{"id":172176},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[75,172179,172181],{"className":30705,"code":172180,"language":30707,"meta":66,"style":66},"from random import *\n",[81,172182,172183],{"__ignoreMap":66},[84,172184,172185,172187,172189,172191],{"class":86,"line":87},[84,172186,31064],{"class":473},[84,172188,58122],{"class":477},[84,172190,30719],{"class":473},[84,172192,172193],{"class":473}," *\n",[35,172195,172196],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172198,172200],{"id":172199},"_912-常用内置模块","9.12 常用内置模块",[23,172202,172204],{"id":172203},"_9121-random","9.12.1 random",[75,172206,172208],{"className":30705,"code":172207,"language":30707,"meta":66,"style":66},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[81,172209,172210,172216,172220,172234,172253],{"__ignoreMap":66},[84,172211,172212,172214],{"class":86,"line":87},[84,172213,30719],{"class":473},[84,172215,45655],{"class":477},[84,172217,172218],{"class":86,"line":98},[84,172219,2729],{"emptyLinePlaceholder":403},[84,172221,172222,172224,172226,172228,172230,172232],{"class":86,"line":70},[84,172223,30742],{"class":94},[84,172225,172047],{"class":477},[84,172227,692],{"class":94},[84,172229,12764],{"class":477},[84,172231,919],{"class":94},[84,172233,30824],{"class":477},[84,172235,172236,172238,172241,172243,172245,172247,172249,172251],{"class":86,"line":120},[84,172237,30742],{"class":94},[84,172239,172240],{"class":477},"(random.choice([",[84,172242,150134],{"class":104},[84,172244,12764],{"class":477},[84,172246,151182],{"class":104},[84,172248,12764],{"class":477},[84,172250,159977],{"class":104},[84,172252,33470],{"class":477},[84,172254,172255,172257,172260,172262,172264,172266,172268,172270,172272,172274,172276,172278,172280,172282],{"class":86,"line":131},[84,172256,30742],{"class":94},[84,172258,172259],{"class":477},"(random.sample([",[84,172261,692],{"class":94},[84,172263,12764],{"class":477},[84,172265,553],{"class":94},[84,172267,12764],{"class":477},[84,172269,547],{"class":94},[84,172271,12764],{"class":477},[84,172273,140],{"class":94},[84,172275,12764],{"class":477},[84,172277,792],{"class":94},[84,172279,112528],{"class":477},[84,172281,553],{"class":94},[84,172283,30824],{"class":477},[23,172285,172287],{"id":172286},"_9122-time","9.12.2 time",[75,172289,172291],{"className":30705,"code":172290,"language":30707,"meta":66,"style":66},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[81,172292,172293,172299,172303,172310,172318],{"__ignoreMap":66},[84,172294,172295,172297],{"class":86,"line":87},[84,172296,30719],{"class":473},[84,172298,32156],{"class":477},[84,172300,172301],{"class":86,"line":98},[84,172302,2729],{"emptyLinePlaceholder":403},[84,172304,172305,172307],{"class":86,"line":70},[84,172306,30742],{"class":94},[84,172308,172309],{"class":477},"(time.time())\n",[84,172311,172312,172314,172316],{"class":86,"line":120},[84,172313,95397],{"class":477},[84,172315,692],{"class":94},[84,172317,484],{"class":477},[84,172319,172320,172322,172324,172327],{"class":86,"line":131},[84,172321,30742],{"class":94},[84,172323,478],{"class":477},[84,172325,172326],{"class":104},"\"1秒后执行\"",[84,172328,484],{"class":477},[23,172330,172332],{"id":172331},"_9123-datetime","9.12.3 datetime",[75,172334,172336],{"className":30705,"code":172335,"language":30707,"meta":66,"style":66},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[81,172337,172338,172350,172354,172364,172371],{"__ignoreMap":66},[84,172339,172340,172342,172345,172347],{"class":86,"line":87},[84,172341,31064],{"class":473},[84,172343,172344],{"class":477}," datetime ",[84,172346,30719],{"class":473},[84,172348,172349],{"class":477}," datetime\n",[84,172351,172352],{"class":86,"line":98},[84,172353,2729],{"emptyLinePlaceholder":403},[84,172355,172356,172359,172361],{"class":86,"line":70},[84,172357,172358],{"class":477},"now ",[84,172360,523],{"class":473},[84,172362,172363],{"class":477}," datetime.now()\n",[84,172365,172366,172368],{"class":86,"line":120},[84,172367,30742],{"class":94},[84,172369,172370],{"class":477},"(now)\n",[84,172372,172373,172375,172378,172381,172383,172386],{"class":86,"line":131},[84,172374,30742],{"class":94},[84,172376,172377],{"class":477},"(now.strftime(",[84,172379,172380],{"class":104},"\"%Y-%m-",[84,172382,156937],{"class":94},[84,172384,172385],{"class":104}," %H:%M:%S\"",[84,172387,30824],{"class":477},[23,172389,172391],{"id":172390},"_9124-os","9.12.4 os",[75,172393,172395],{"className":30705,"code":172394,"language":30707,"meta":66,"style":66},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[81,172396,172397,172403,172407,172414],{"__ignoreMap":66},[84,172398,172399,172401],{"class":86,"line":87},[84,172400,30719],{"class":473},[84,172402,45632],{"class":477},[84,172404,172405],{"class":86,"line":98},[84,172406,2729],{"emptyLinePlaceholder":403},[84,172408,172409,172411],{"class":86,"line":70},[84,172410,30742],{"class":94},[84,172412,172413],{"class":477},"(os.getcwd())\n",[84,172415,172416,172418,172421,172424],{"class":86,"line":120},[84,172417,30742],{"class":94},[84,172419,172420],{"class":477},"(os.listdir(",[84,172422,172423],{"class":104},"\".\"",[84,172425,30824],{"class":477},[23,172427,172429],{"id":172428},"_9125-sys","9.12.5 sys",[75,172431,172433],{"className":30705,"code":172432,"language":30707,"meta":66,"style":66},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[81,172434,172435,172442,172446,172453],{"__ignoreMap":66},[84,172436,172437,172439],{"class":86,"line":87},[84,172438,30719],{"class":473},[84,172440,172441],{"class":477}," sys\n",[84,172443,172444],{"class":86,"line":98},[84,172445,2729],{"emptyLinePlaceholder":403},[84,172447,172448,172450],{"class":86,"line":70},[84,172449,30742],{"class":94},[84,172451,172452],{"class":477},"(sys.version)\n",[84,172454,172455,172457],{"class":86,"line":120},[84,172456,30742],{"class":94},[84,172458,172459],{"class":477},"(sys.path)\n",[14,172461,172463,172464,172466,172467,725],{"id":172462},"_913-if-name-main","9.13 if ",[624,172465,80136],{}," == \"",[624,172468,102384],{},[35,172470,172471,172472,172475],{},"模块被直接运行和被导入时，",[81,172473,172474],{},"__name__"," 的值不同。",[35,172477,172478,172479,24947],{},"创建 ",[81,172480,172481],{},"my_module.py",[75,172483,172485],{"className":30705,"code":172484,"language":30707,"meta":66,"style":66},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[81,172486,172487,172495,172505,172509,172513,172525],{"__ignoreMap":66},[84,172488,172489,172491,172493],{"class":86,"line":87},[84,172490,32274],{"class":473},[84,172492,5538],{"class":90},[84,172494,151339],{"class":477},[84,172496,172497,172499,172501,172503],{"class":86,"line":98},[84,172498,4419],{"class":473},[84,172500,11198],{"class":477},[84,172502,954],{"class":473},[84,172504,151350],{"class":477},[84,172506,172507],{"class":86,"line":70},[84,172508,2729],{"emptyLinePlaceholder":403},[84,172510,172511],{"class":86,"line":120},[84,172512,2729],{"emptyLinePlaceholder":403},[84,172514,172515,172517,172519,172521,172523],{"class":86,"line":131},[84,172516,1871],{"class":473},[84,172518,31547],{"class":94},[84,172520,101885],{"class":473},[84,172522,101888],{"class":104},[84,172524,4068],{"class":477},[84,172526,172527,172529,172531,172533,172535,172537],{"class":86,"line":145},[84,172528,31626],{"class":94},[84,172530,166846],{"class":477},[84,172532,692],{"class":94},[84,172534,12764],{"class":477},[84,172536,553],{"class":94},[84,172538,30824],{"class":477},[35,172540,172541],{},"作用：",[28,172543,172544,172547],{},[31,172545,172546],{},"直接运行该文件时，执行测试代码。",[31,172548,172549],{},"被其他文件导入时，不执行测试代码。",[35,172551,172552],{},"这是写模块时很常用的习惯。",[14,172554,172556],{"id":172555},"_914-包","9.14 包",[35,172558,172559,172560,172563],{},"包是包含 ",[81,172561,172562],{},"__init__.py"," 的目录，用于组织多个模块。",[35,172565,172566],{},"目录结构：",[75,172568,172571],{"className":172569,"code":172570,"language":5516,"meta":66},[5514],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[81,172572,172570],{"__ignoreMap":66},[35,172574,172575],{},"导入：",[75,172577,172579],{"className":30705,"code":172578,"language":30707,"meta":66,"style":66},"from utils.file_utils import read_file\n",[81,172580,172581],{"__ignoreMap":66},[84,172582,172583,172585,172588,172590],{"class":86,"line":87},[84,172584,31064],{"class":473},[84,172586,172587],{"class":477}," utils.file_utils ",[84,172589,30719],{"class":473},[84,172591,172592],{"class":477}," read_file\n",[35,172594,172595,172597],{},[81,172596,172562],{}," 可以为空，也可以写包初始化逻辑。",[14,172599,172601],{"id":172600},"_915-第三方包","9.15 第三方包",[35,172603,172604,172605,172607],{},"第三方包通过 ",[81,172606,24160],{}," 安装。",[75,172609,172611],{"className":24151,"code":172610,"language":24153,"meta":66,"style":66},"pip install requests\n",[81,172612,172613],{"__ignoreMap":66},[84,172614,172615,172617,172619],{"class":86,"line":87},[84,172616,24160],{"class":90},[84,172618,24163],{"class":104},[84,172620,146344],{"class":104},[35,172622,172623],{},"使用：",[75,172625,172627],{"className":30705,"code":172626,"language":30707,"meta":66,"style":66},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[81,172628,172629,172635,172639,172654],{"__ignoreMap":66},[84,172630,172631,172633],{"class":86,"line":87},[84,172632,30719],{"class":473},[84,172634,146344],{"class":477},[84,172636,172637],{"class":86,"line":98},[84,172638,2729],{"emptyLinePlaceholder":403},[84,172640,172641,172644,172646,172649,172652],{"class":86,"line":70},[84,172642,172643],{"class":477},"response ",[84,172645,523],{"class":473},[84,172647,172648],{"class":477}," requests.get(",[84,172650,172651],{"class":104},"\"https:\u002F\u002Fwww.example.com\"",[84,172653,484],{"class":477},[84,172655,172656,172658],{"class":86,"line":120},[84,172657,30742],{"class":94},[84,172659,172660],{"class":477},"(response.status_code)\n",[35,172662,172663],{},"查看已安装包：",[75,172665,172667],{"className":24151,"code":172666,"language":24153,"meta":66,"style":66},"pip list\n",[81,172668,172669],{"__ignoreMap":66},[84,172670,172671,172673],{"class":86,"line":87},[84,172672,24160],{"class":90},[84,172674,119279],{"class":104},[35,172676,172677],{},"导出项目依赖：",[75,172679,172680],{"className":24151,"code":146539,"language":24153,"meta":66,"style":66},[81,172681,172682],{"__ignoreMap":66},[84,172683,172684,172686,172688,172690],{"class":86,"line":87},[84,172685,24160],{"class":90},[84,172687,146548],{"class":104},[84,172689,26550],{"class":473},[84,172691,146553],{"class":104},[35,172693,172694],{},"安装项目依赖：",[75,172696,172697],{"className":24151,"code":146559,"language":24153,"meta":66,"style":66},[81,172698,172699],{"__ignoreMap":66},[84,172700,172701,172703,172705,172707],{"class":86,"line":87},[84,172702,24160],{"class":90},[84,172704,24163],{"class":104},[84,172706,119963],{"class":94},[84,172708,146553],{"class":104},[14,172710,172712],{"id":172711},"_916-模块搜索路径","9.16 模块搜索路径",[35,172714,172715,172716,172719],{},"Python 导入模块时会在 ",[81,172717,172718],{},"sys.path"," 中查找。",[75,172721,172723],{"className":30705,"code":172722,"language":30707,"meta":66,"style":66},"import sys\n\nfor path in sys.path:\n    print(path)\n",[81,172724,172725,172731,172735,172747],{"__ignoreMap":66},[84,172726,172727,172729],{"class":86,"line":87},[84,172728,30719],{"class":473},[84,172730,172441],{"class":477},[84,172732,172733],{"class":86,"line":98},[84,172734,2729],{"emptyLinePlaceholder":403},[84,172736,172737,172739,172742,172744],{"class":86,"line":70},[84,172738,3354],{"class":473},[84,172740,172741],{"class":477}," path ",[84,172743,26371],{"class":473},[84,172745,172746],{"class":477}," sys.path:\n",[84,172748,172749,172751],{"class":86,"line":120},[84,172750,31626],{"class":94},[84,172752,169475],{"class":477},[35,172754,172755],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[35,172757,157869],{},[75,172759,172762],{"className":172760,"code":172761,"language":5516,"meta":66},[5514],"random.py\njson.py\ntime.py\n",[81,172763,172761],{"__ignoreMap":66},[35,172765,172766],{},"这些文件名可能导致导入异常。",[14,172768,172770],{"id":172769},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[35,172772,172566],{},[75,172774,172777],{"className":172775,"code":172776,"language":5516,"meta":66},[5514],"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",[81,172778,172776],{"__ignoreMap":66},[35,172780,172781,24947],{},[81,172782,172783],{},"utils\u002Ffile_utils.py",[75,172785,172787],{"className":30705,"code":172786,"language":30707,"meta":66,"style":66},"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",[81,172788,172789,172795,172805,172809,172813,172823,172833,172841,172847,172851,172878,172888,172892,172896,172906,172932],{"__ignoreMap":66},[84,172790,172791,172793],{"class":86,"line":87},[84,172792,30719],{"class":473},[84,172794,147337],{"class":477},[84,172796,172797,172799,172801,172803],{"class":86,"line":98},[84,172798,31064],{"class":473},[84,172800,108637],{"class":477},[84,172802,30719],{"class":473},[84,172804,108642],{"class":477},[84,172806,172807],{"class":86,"line":70},[84,172808,2729],{"emptyLinePlaceholder":403},[84,172810,172811],{"class":86,"line":120},[84,172812,2729],{"emptyLinePlaceholder":403},[84,172814,172815,172817,172820],{"class":86,"line":131},[84,172816,32274],{"class":473},[84,172818,172819],{"class":90}," read_json",[84,172821,172822],{"class":477},"(path):\n",[84,172824,172825,172828,172830],{"class":86,"line":145},[84,172826,172827],{"class":477},"    path ",[84,172829,523],{"class":473},[84,172831,172832],{"class":477}," Path(path)\n",[84,172834,172835,172837,172839],{"class":86,"line":156},[84,172836,3430],{"class":473},[84,172838,39257],{"class":473},[84,172840,169556],{"class":477},[84,172842,172843,172845],{"class":86,"line":164},[84,172844,15081],{"class":473},[84,172846,52165],{"class":477},[84,172848,172849],{"class":86,"line":175},[84,172850,2729],{"emptyLinePlaceholder":403},[84,172852,172853,172855,172857,172860,172862,172864,172866,172868,172870,172872,172874,172876],{"class":86,"line":185},[84,172854,34505],{"class":473},[84,172856,147037],{"class":94},[84,172858,172859],{"class":477},"(path, ",[84,172861,147047],{"class":104},[84,172863,12764],{"class":477},[84,172865,147052],{"class":5545},[84,172867,523],{"class":473},[84,172869,147057],{"class":104},[84,172871,14043],{"class":477},[84,172873,31710],{"class":473},[84,172875,148399],{"class":5545},[84,172877,4068],{"class":477},[84,172879,172880,172882,172884,172886],{"class":86,"line":195},[84,172881,15081],{"class":473},[84,172883,148410],{"class":477},[84,172885,45681],{"class":5545},[84,172887,484],{"class":477},[84,172889,172890],{"class":86,"line":206},[84,172891,2729],{"emptyLinePlaceholder":403},[84,172893,172894],{"class":86,"line":217},[84,172895,2729],{"emptyLinePlaceholder":403},[84,172897,172898,172900,172903],{"class":86,"line":227},[84,172899,32274],{"class":473},[84,172901,172902],{"class":90}," write_json",[84,172904,172905],{"class":477},"(path, data):\n",[84,172907,172908,172910,172912,172914,172916,172918,172920,172922,172924,172926,172928,172930],{"class":86,"line":238},[84,172909,34505],{"class":473},[84,172911,147037],{"class":94},[84,172913,172859],{"class":477},[84,172915,152222],{"class":104},[84,172917,12764],{"class":477},[84,172919,147052],{"class":5545},[84,172921,523],{"class":473},[84,172923,147057],{"class":104},[84,172925,14043],{"class":477},[84,172927,31710],{"class":473},[84,172929,148399],{"class":5545},[84,172931,4068],{"class":477},[84,172933,172934,172937,172939,172941,172943,172945,172947,172949,172951,172953,172955],{"class":86,"line":249},[84,172935,172936],{"class":477},"        json.dump(data, ",[84,172938,45681],{"class":5545},[84,172940,12764],{"class":477},[84,172942,147383],{"class":5545},[84,172944,523],{"class":473},[84,172946,34314],{"class":94},[84,172948,12764],{"class":477},[84,172950,152258],{"class":5545},[84,172952,523],{"class":473},[84,172954,553],{"class":94},[84,172956,484],{"class":477},[35,172958,172959,24947],{},[81,172960,154853],{},[75,172962,172964],{"className":30705,"code":172963,"language":30707,"meta":66,"style":66},"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",[81,172965,172966,172977,172981,172994,173014],{"__ignoreMap":66},[84,172967,172968,172970,172972,172974],{"class":86,"line":87},[84,172969,31064],{"class":473},[84,172971,172587],{"class":477},[84,172973,30719],{"class":473},[84,172975,172976],{"class":477}," read_json, write_json\n",[84,172978,172979],{"class":86,"line":98},[84,172980,2729],{"emptyLinePlaceholder":403},[84,172982,172983,172985,172987,172990,172992],{"class":86,"line":70},[84,172984,159962],{"class":477},[84,172986,523],{"class":473},[84,172988,172989],{"class":477}," read_json(",[84,172991,152077],{"class":104},[84,172993,484],{"class":477},[84,172995,172996,172998,173000,173002,173004,173006,173008,173010,173012],{"class":86,"line":120},[84,172997,170780],{"class":477},[84,172999,63005],{"class":104},[84,173001,51764],{"class":477},[84,173003,150134],{"class":104},[84,173005,12764],{"class":477},[84,173007,151718],{"class":104},[84,173009,51764],{"class":477},[84,173011,1462],{"class":94},[84,173013,165398],{"class":477},[84,173015,173016,173019,173021],{"class":86,"line":131},[84,173017,173018],{"class":477},"write_json(",[84,173020,152077],{"class":104},[84,173022,173023],{"class":477},", students)\n",[14,173025,173027],{"id":173026},"_918-易错点","9.18 易错点",[28,173029,173030,173033,173038,173043,173046,173049],{},[31,173031,173032],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[31,173034,173035,173036,28712],{},"能指定异常类型就不要裸写 ",[81,173037,171140],{},[31,173039,173040,173042],{},[81,173041,171515],{}," 无论是否出错都会执行。",[31,173044,173045],{},"模块文件名不要和标准库重名。",[31,173047,173048],{},"导入自己写的模块时，要注意运行目录。",[31,173050,173051],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173053,173055],{"id":173054},"_919-本章练习","9.19 本章练习",[28,173057,173058,173061,173064,173070,173077],{},[31,173059,173060],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[31,173062,173063],{},"写函数读取文件，如果文件不存在则返回空字符串。",[31,173065,172478,173066,173069],{},[81,173067,173068],{},"math_utils.py","，实现加减乘除函数并导入使用。",[31,173071,173072,173073,173076],{},"创建一个 ",[81,173074,173075],{},"utils"," 包，把 JSON 读写函数放进去。",[31,173078,173079],{},"写一个程序，捕获除零异常和输入格式异常。",[389,173081,173082],{},"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":66,"searchDepth":98,"depth":98,"links":173084},[173085,173086,173087,173088,173089,173090,173091,173092,173093,173094,173095,173101,173108,173110,173111,173112,173113,173114,173115],{"id":170937,"depth":98,"text":170938},{"id":171065,"depth":98,"text":171066},{"id":171114,"depth":98,"text":171115},{"id":171263,"depth":98,"text":171264},{"id":171435,"depth":98,"text":171436},{"id":171504,"depth":98,"text":171505},{"id":171615,"depth":98,"text":171616},{"id":171741,"depth":98,"text":171742},{"id":171866,"depth":98,"text":171867},{"id":171921,"depth":98,"text":171922},{"id":172020,"depth":98,"text":172021,"children":173096},[173097,173098,173099,173100],{"id":172024,"depth":70,"text":172025},{"id":172058,"depth":70,"text":172059},{"id":172097,"depth":70,"text":172098},{"id":172176,"depth":70,"text":172177},{"id":172199,"depth":98,"text":172200,"children":173102},[173103,173104,173105,173106,173107],{"id":172203,"depth":70,"text":172204},{"id":172286,"depth":70,"text":172287},{"id":172331,"depth":70,"text":172332},{"id":172390,"depth":70,"text":172391},{"id":172428,"depth":70,"text":172429},{"id":172462,"depth":98,"text":173109},"9.13 if name == \"main\"",{"id":172555,"depth":98,"text":172556},{"id":172600,"depth":98,"text":172601},{"id":172711,"depth":98,"text":172712},{"id":172769,"depth":98,"text":172770},{"id":173026,"depth":98,"text":173027},{"id":173054,"depth":98,"text":173055},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170929,"description":400},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173122,"title":173123,"body":173124,"description":173287,"extension":401,"meta":173288,"navigation":403,"path":173289,"seo":173290,"stem":173291,"__hash__":173292},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173125,"toc":173282},[173126,173129,173132,173135,173146,173148,173222,173225,173228,173231,173234,173237,173240,173243,173246,173249,173252],[10,173127,173123],{"id":173128},"python教程",[35,173130,173131],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[35,173133,173134],{},"建议学习环境：",[28,173136,173137,173140,173143],{},[31,173138,173139],{},"Python 版本：Python 3.10 及以上。",[31,173141,173142],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[31,173144,173145],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173147,117404],{"id":117404},[28,173149,173150,173156,173162,173168,173174,173180,173186,173192,173198,173204,173210,173216],{},[31,173151,173152],{},[39,173153,173155],{"href":173154},".\u002Fch1-Python","Python环境与第一个程序",[31,173157,173158],{},[39,173159,173161],{"href":173160},".\u002Fch2","基础语法、变量与字符串",[31,173163,173164],{},[39,173165,173167],{"href":173166},".\u002Fch3","判断语句",[31,173169,173170],{},[39,173171,173173],{"href":173172},".\u002Fch4","循环语句",[31,173175,173176],{},[39,173177,173179],{"href":173178},".\u002Fch5","函数基础",[31,173181,173182],{},[39,173183,173185],{"href":173184},".\u002Fch6","数据容器",[31,173187,173188],{},[39,173189,173191],{"href":173190},".\u002Fch7","函数进阶",[31,173193,173194],{},[39,173195,173197],{"href":173196},".\u002Fch8","文件操作",[31,173199,173200],{},[39,173201,173203],{"href":173202},".\u002Fch9","异常、模块与包",[31,173205,173206],{},[39,173207,173209],{"href":173208},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[31,173211,173212],{},[39,173213,173215],{"href":173214},".\u002Fch11","面向对象基础",[31,173217,173218],{},[39,173219,173221],{"href":173220},".\u002Fch12","综合案例与复习路线",[14,173223,173224],{"id":173224},"学习路线",[35,173226,173227],{},"第一阶段：能运行程序。",[35,173229,173230],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[35,173232,173233],{},"第二阶段：能组织数据。",[35,173235,173236],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[35,173238,173239],{},"第三阶段：能封装逻辑。",[35,173241,173242],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[35,173244,173245],{},"第四阶段：能做小项目。",[35,173247,173248],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173250,173251],{"id":173251},"参考资料",[28,173253,173254,173261,173268,173275],{},[31,173255,173256,173257],{},"黑马程序员 Python 入门教程推荐：",[39,173258,173259],{"href":173259,"rel":173260},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[43],[31,173262,173263,173264],{},"Python 官方中文教程：",[39,173265,173266],{"href":173266,"rel":173267},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[43],[31,173269,173270,173271],{},"Python 标准库文档：",[39,173272,173273],{"href":173273,"rel":173274},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[43],[31,173276,173277,173278],{},"pyecharts 文档：",[39,173279,173280],{"href":173280,"rel":173281},"https:\u002F\u002Fpyecharts.org\u002F",[43],{"title":66,"searchDepth":98,"depth":98,"links":173283},[173284,173285,173286],{"id":117404,"depth":98,"text":117404},{"id":173224,"depth":98,"text":173224},{"id":173251,"depth":98,"text":173251},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23707},"\u002Fwiki\u002F2024-10-10-python",{"title":173123,"description":173287},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331463177]